From 6e63873e661be7dcf206077679e601fd5cae35bd Mon Sep 17 00:00:00 2001 From: MicahChase Date: Wed, 11 Dec 2013 15:13:01 -0600 Subject: [PATCH 01/25] bluetooth keyboard fix --- .../Controllers/RDPSessionViewController.h | 2 +- .../Controllers/RDPSessionViewController.m | 61 +++++++++++-------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/client/iOS/Controllers/RDPSessionViewController.h b/client/iOS/Controllers/RDPSessionViewController.h index fb4904b38..36e64a93d 100644 --- a/client/iOS/Controllers/RDPSessionViewController.h +++ b/client/iOS/Controllers/RDPSessionViewController.h @@ -57,7 +57,7 @@ AdvancedKeyboardView* _advanced_keyboard_view; BOOL _advanced_keyboard_visible; BOOL _requesting_advanced_keyboard; - CGFloat _keyboard_height_delta; + CGFloat _keyboard_last_height; // delayed mouse move event sending NSTimer* _mouse_move_event_timer; diff --git a/client/iOS/Controllers/RDPSessionViewController.m b/client/iOS/Controllers/RDPSessionViewController.m index 1e4958040..c312cef96 100644 --- a/client/iOS/Controllers/RDPSessionViewController.m +++ b/client/iOS/Controllers/RDPSessionViewController.m @@ -51,7 +51,7 @@ _advanced_keyboard_view = nil; _advanced_keyboard_visible = NO; _requesting_advanced_keyboard = NO; - _keyboard_height_delta = 0; + _keyboard_last_height = 0; _session_toolbar_visible = NO; @@ -549,25 +549,46 @@ #pragma mark - #pragma mark iOS Keyboard Notification Handlers -- (void)keyboardWillShow:(NSNotification *)notification -{ - CGRect keyboardEndFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; - CGRect keyboardFrame = [[self view] convertRect:keyboardEndFrame toView:nil]; +// the keyboard is given in a portrait frame of reference +- (BOOL)isLandscape { + + UIInterfaceOrientation ori = [[UIApplication sharedApplication] statusBarOrientation]; + return ( ori == UIInterfaceOrientationLandscapeLeft || ori == UIInterfaceOrientationLandscapeRight ); + +} - CGFloat newHeightDelta = (keyboardFrame.size.height - _keyboard_height_delta); - if (newHeightDelta < 0.1 && newHeightDelta > -0.1) - return; // nothing changed - - [UIView beginAnimations:nil context:NULL]; +- (void)shiftKeyboard: (NSNotification*)notification { + + CGRect keyboardEndFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + CGFloat previousHeight = _keyboard_last_height; + + if( [self isLandscape] ) { + // landscape has the keyboard based on x, so x can go negative + _keyboard_last_height = keyboardEndFrame.size.width + keyboardEndFrame.origin.x; + } else { + // portrait has the keyboard based on the difference of the height and the frames y. + CGFloat height = [[UIScreen mainScreen] bounds].size.height; + _keyboard_last_height = height - keyboardEndFrame.origin.y; + } + + CGFloat shiftHeight = _keyboard_last_height - previousHeight; + + [UIView beginAnimations:nil context:NULL]; [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; CGRect frame = [_session_scrollview frame]; - frame.size.height -= newHeightDelta; - _keyboard_height_delta += newHeightDelta; + frame.size.height -= shiftHeight; [_session_scrollview setFrame:frame]; - [_touchpointer_view setFrame:frame]; + [_touchpointer_view setFrame:frame]; [UIView commitAnimations]; + +} +- (void)keyboardWillShow:(NSNotification *)notification +{ + [self shiftKeyboard: notification]; + [_touchpointer_view ensurePointerIsVisible]; } @@ -583,17 +604,9 @@ - (void)keyboardWillHide:(NSNotification *)notification { - CGRect keyboardEndFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; - - [UIView beginAnimations:nil context:NULL]; - [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; - [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; - CGRect frame = [_session_scrollview frame]; - frame.size.height += [[self view] convertRect:keyboardEndFrame toView:nil].size.height; - [_session_scrollview setFrame:frame]; - [_touchpointer_view setFrame:frame]; - [UIView commitAnimations]; - _keyboard_height_delta = 0; + + [self shiftKeyboard: notification]; + } - (void)keyboardDidHide:(NSNotification*)notification From 08b4976f72f8bb3dc427285bf5d78602856f3583 Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Tue, 22 Apr 2014 15:05:53 +0800 Subject: [PATCH 02/25] Revert "channels: fix link errors." This reverts commit 2fc7f9c48553c415f49b65de221f00e8d6d2f095. --- channels/audin/server/CMakeLists.txt | 2 +- channels/cliprdr/server/CMakeLists.txt | 2 +- channels/drdynvc/server/CMakeLists.txt | 2 +- channels/rdpdr/server/CMakeLists.txt | 2 +- channels/rdpsnd/server/CMakeLists.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/channels/audin/server/CMakeLists.txt b/channels/audin/server/CMakeLists.txt index e60a1230c..e23d33192 100644 --- a/channels/audin/server/CMakeLists.txt +++ b/channels/audin/server/CMakeLists.txt @@ -27,7 +27,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE freerdp - MODULES freerdp-codec freerdp-utils winpr-wtsapi) + MODULES freerdp-codec freerdp-utils) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/cliprdr/server/CMakeLists.txt b/channels/cliprdr/server/CMakeLists.txt index 7d84410b7..5abc3d511 100644 --- a/channels/cliprdr/server/CMakeLists.txt +++ b/channels/cliprdr/server/CMakeLists.txt @@ -28,7 +28,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE freerdp - MODULES freerdp-utils winpr-wtsapi) + MODULES freerdp-utils) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/drdynvc/server/CMakeLists.txt b/channels/drdynvc/server/CMakeLists.txt index 84a3bf923..f31e55815 100644 --- a/channels/drdynvc/server/CMakeLists.txt +++ b/channels/drdynvc/server/CMakeLists.txt @@ -28,7 +28,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE freerdp - MODULES freerdp-utils winpr-wtsapi) + MODULES freerdp-utils) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/rdpdr/server/CMakeLists.txt b/channels/rdpdr/server/CMakeLists.txt index 0299b706d..17a18967e 100644 --- a/channels/rdpdr/server/CMakeLists.txt +++ b/channels/rdpdr/server/CMakeLists.txt @@ -28,7 +28,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE freerdp - MODULES freerdp-utils winpr-wtsapi) + MODULES freerdp-utils) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/rdpsnd/server/CMakeLists.txt b/channels/rdpsnd/server/CMakeLists.txt index 5b1788b54..9cb5c1d6f 100644 --- a/channels/rdpsnd/server/CMakeLists.txt +++ b/channels/rdpsnd/server/CMakeLists.txt @@ -28,7 +28,7 @@ set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE freerdp - MODULES freerdp-codec freerdp-utils winpr-wtsapi) + MODULES freerdp-codec freerdp-utils) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) From b097171b4e343667293c05864d9fc4d1c37f615a Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Tue, 22 Apr 2014 15:06:49 +0800 Subject: [PATCH 03/25] channels: fix link errors. --- channels/server/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channels/server/CMakeLists.txt b/channels/server/CMakeLists.txt index aa15ce965..9285a6594 100644 --- a/channels/server/CMakeLists.txt +++ b/channels/server/CMakeLists.txt @@ -40,7 +40,7 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE winpr - MODULES winpr-crt winpr-synch winpr-interlocked winpr-error) + MODULES winpr-crt winpr-synch winpr-interlocked winpr-error winpr-wtsapi) set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} PARENT_SCOPE) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} PARENT_SCOPE) From 5391275f6653f148eb40c007930f4d6cb818ca00 Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Tue, 22 Apr 2014 19:02:23 +0800 Subject: [PATCH 04/25] audin/server: fix server audio input channel. --- channels/audin/server/audin.c | 30 ++++++++++++++++++------------ libfreerdp/core/server.c | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/channels/audin/server/audin.c b/channels/audin/server/audin.c index 14a4982fc..4aaaf2b90 100644 --- a/channels/audin/server/audin.c +++ b/channels/audin/server/audin.c @@ -49,7 +49,6 @@ typedef struct _audin_server BOOL opened; - HANDLE event; HANDLE stopEvent; HANDLE thread; @@ -284,26 +283,35 @@ static void* audin_server_thread_func(void* arg) void* fd; wStream* s; void* buffer; + DWORD nCount; BYTE MessageId; + HANDLE events[8]; BOOL ready = FALSE; + HANDLE ChannelEvent; DWORD BytesReturned = 0; audin_server* audin = (audin_server*) arg; - if (WTSVirtualChannelQuery(audin->audin_channel, WTSVirtualFileHandle, &buffer, &BytesReturned) == TRUE) - { - fd = *((void**) buffer); - WTSFreeMemory(buffer); + buffer = NULL; + BytesReturned = 0; + ChannelEvent = NULL; - audin->event = CreateWaitObjectEvent(NULL, TRUE, FALSE, fd); + if (WTSVirtualChannelQuery(audin->audin_channel, WTSVirtualEventHandle, &buffer, &BytesReturned) == TRUE) + { + if (BytesReturned == sizeof(HANDLE)) + CopyMemory(&ChannelEvent, buffer, sizeof(HANDLE)); + + WTSFreeMemory(buffer); } + nCount = 0; + events[nCount++] = audin->stopEvent; + events[nCount++] = ChannelEvent; + /* Wait for the client to confirm that the Audio Input dynamic channel is ready */ while (1) { - WaitForSingleObject(audin->event, INFINITE); - - if (WaitForSingleObject(audin->stopEvent, 0) == WAIT_OBJECT_0) + if (WaitForMultipleObjects(nCount, events, FALSE, 100) == WAIT_OBJECT_0) break; if (WTSVirtualChannelQuery(audin->audin_channel, WTSVirtualChannelReady, &buffer, &BytesReturned) == FALSE) @@ -326,9 +334,7 @@ static void* audin_server_thread_func(void* arg) while (ready) { - WaitForSingleObject(audin->event, INFINITE); - - if (WaitForSingleObject(audin->stopEvent, 0) == WAIT_OBJECT_0) + if (WaitForMultipleObjects(nCount, events, FALSE, INFINITE) == WAIT_OBJECT_0) break; Stream_SetPosition(s, 0); diff --git a/libfreerdp/core/server.c b/libfreerdp/core/server.c index 7758510a1..b71f09854 100644 --- a/libfreerdp/core/server.c +++ b/libfreerdp/core/server.c @@ -866,7 +866,7 @@ HANDLE WINAPI FreeRDP_WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualNam WTSVirtualChannelWrite(vcm->drdynvc_channel, (PCHAR) Stream_Buffer(s), Stream_GetPosition(s), NULL); Stream_Free(s, TRUE); - return NULL; + return channel; } BOOL WINAPI FreeRDP_WTSVirtualChannelClose(HANDLE hChannelHandle) From 5ec5ef078cac8d83123041243b90ddd8524d1c06 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Tue, 22 Apr 2014 16:55:09 +0200 Subject: [PATCH 05/25] cmake: add export_complex_library function parameters LIBNAME and MODULE (module) * adds LIBNAME to a global property ${${MODULE}_EXPORTS} * if MODULE isn't given LIBNAME is expected to be in the format "module-libname" --- cmake/ComplexLibrary.cmake | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/cmake/ComplexLibrary.cmake b/cmake/ComplexLibrary.cmake index 993fd2c52..3d0305880 100644 --- a/cmake/ComplexLibrary.cmake +++ b/cmake/ComplexLibrary.cmake @@ -31,6 +31,37 @@ macro(set_complex_link_libraries) endmacro(set_complex_link_libraries) +# - add a new library to a module for export +# MODULE - module the library belongs to +# LIBNAME - name of the library +# - if MODULE isn't set the NAME should must be in the form MODULE-NAME +function(export_complex_library) + set(PREFIX "EXPORT_COMPLEX_LIBRARY") + cmake_parse_arguments(${PREFIX} + "" + "LIBNAME;MODULE" + "" + ${ARGN}) + + if (NOT ${PREFIX}_LIBNAME) + message(FATAL_ERROR "export_complex_library requires a name to be set") + endif() + if (NOT ${PREFIX}_MODULE) + string(REPLACE "-" ";" LIBNAME_LIST "${${PREFIX}_LIBNAME}") + list(GET LIBNAME_LIST 0 MODULE) + list(GET LIBNAME_LIST 1 LIBNAME) + else() + set(MODULE ${${PREFIX}_MODULE}) + set(LIBNAME ${${PREFIX}_LIBNAME}) + endif() + if (NOT MODULE) + message(FATAL_ERROR "export_complex_library couldn't identify MODULE") + endif() + get_property(MEXPORTS GLOBAL PROPERTY ${MODULE}_EXPORTS) + list(APPEND MEXPORTS ${LIBNAME}) + set_property(GLOBAL PROPERTY ${MODULE}_EXPORTS "${MEXPORTS}") +endfunction(export_complex_library) + macro(add_complex_library) set(PREFIX "COMPLEX_LIBRARY") From 67cf5bdf398ee6d2b0e7b8177129a43bf594e494 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Tue, 22 Apr 2014 17:05:42 +0200 Subject: [PATCH 06/25] cmake: add_complex_library add EXPORT parameter EXPORT is an optional parameter. If set the module is also marked for export. --- cmake/ComplexLibrary.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/ComplexLibrary.cmake b/cmake/ComplexLibrary.cmake index 3d0305880..28170a68d 100644 --- a/cmake/ComplexLibrary.cmake +++ b/cmake/ComplexLibrary.cmake @@ -67,7 +67,7 @@ macro(add_complex_library) set(PREFIX "COMPLEX_LIBRARY") cmake_parse_arguments(${PREFIX} - "" + "EXPORT" "MODULE;TYPE;MONOLITHIC" "SOURCES" ${ARGN}) @@ -77,6 +77,10 @@ macro(add_complex_library) else() add_library(${${PREFIX}_MODULE} ${${PREFIX}_SOURCES}) endif() + if (${PREFIX}_EXPORT) + message("exporting ${${PREFIX}_MODULE}") + export_complex_library(LIBNAME ${${PREFIX}_MODULE}) + endif() endmacro(add_complex_library) From 87294221e7fe605612b6da6e5ea6e8465e06ac55 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Tue, 22 Apr 2014 17:22:43 +0200 Subject: [PATCH 07/25] cmake: remove debug message --- cmake/ComplexLibrary.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/ComplexLibrary.cmake b/cmake/ComplexLibrary.cmake index 28170a68d..5e91582e9 100644 --- a/cmake/ComplexLibrary.cmake +++ b/cmake/ComplexLibrary.cmake @@ -78,7 +78,6 @@ macro(add_complex_library) add_library(${${PREFIX}_MODULE} ${${PREFIX}_SOURCES}) endif() if (${PREFIX}_EXPORT) - message("exporting ${${PREFIX}_MODULE}") export_complex_library(LIBNAME ${${PREFIX}_MODULE}) endif() From 1ba793b12687c251b6ad9bbe7db884322ebcf470 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Tue, 22 Apr 2014 18:30:09 +0200 Subject: [PATCH 08/25] audin/client/alsa: fix installation path The module was installed into the libdir instead of addin path. --- channels/audin/client/alsa/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channels/audin/client/alsa/CMakeLists.txt b/channels/audin/client/alsa/CMakeLists.txt index 67fbe7265..e5d1dfaf1 100644 --- a/channels/audin/client/alsa/CMakeLists.txt +++ b/channels/audin/client/alsa/CMakeLists.txt @@ -36,5 +36,5 @@ set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${ALSA_LIBRARIES}) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) -install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT FreeRDPTargets) +install(TARGETS ${MODULE_NAME} DESTINATION ${FREERDP_ADDIN_PATH} EXPORT FreeRDPTargets) From d23afa499eef353d44ca4bb441aef2cb9102e0ef Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Wed, 23 Apr 2014 10:14:48 +0200 Subject: [PATCH 09/25] export_complex_library add support for long names If no MODULE is given the first part of LIBNAME is used as module. The expected format is still MODULE-LIBNAME but now LIBNAME can also contain -. --- cmake/ComplexLibrary.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/ComplexLibrary.cmake b/cmake/ComplexLibrary.cmake index 5e91582e9..98ef345e9 100644 --- a/cmake/ComplexLibrary.cmake +++ b/cmake/ComplexLibrary.cmake @@ -47,9 +47,11 @@ function(export_complex_library) message(FATAL_ERROR "export_complex_library requires a name to be set") endif() if (NOT ${PREFIX}_MODULE) + # get the module prefix and remove it from libname string(REPLACE "-" ";" LIBNAME_LIST "${${PREFIX}_LIBNAME}") list(GET LIBNAME_LIST 0 MODULE) - list(GET LIBNAME_LIST 1 LIBNAME) + list(REMOVE_AT LIBNAME_LIST 0) + string(REPLACE ";" "-" LIBNAME "${LIBNAME_LIST}") else() set(MODULE ${${PREFIX}_MODULE}) set(LIBNAME ${${PREFIX}_LIBNAME}) From b817e92e5e829b5ef853e4ed0ad806ad520d83c6 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Wed, 23 Apr 2014 10:16:02 +0200 Subject: [PATCH 10/25] cmake: mark required libraries for export --- client/common/CMakeLists.txt | 2 +- libfreerdp/CMakeLists.txt | 1 + libfreerdp/cache/CMakeLists.txt | 3 ++- libfreerdp/codec/CMakeLists.txt | 3 ++- libfreerdp/common/CMakeLists.txt | 3 ++- libfreerdp/core/CMakeLists.txt | 3 ++- libfreerdp/crypto/CMakeLists.txt | 3 ++- libfreerdp/gdi/CMakeLists.txt | 3 ++- libfreerdp/locale/CMakeLists.txt | 3 ++- libfreerdp/primitives/CMakeLists.txt | 3 ++- libfreerdp/rail/CMakeLists.txt | 3 ++- libfreerdp/utils/CMakeLists.txt | 3 ++- server/common/CMakeLists.txt | 1 + winpr/libwinpr/CMakeLists.txt | 1 + winpr/libwinpr/asn1/CMakeLists.txt | 3 ++- winpr/libwinpr/bcrypt/CMakeLists.txt | 3 ++- winpr/libwinpr/com/CMakeLists.txt | 3 ++- winpr/libwinpr/credentials/CMakeLists.txt | 3 ++- winpr/libwinpr/credui/CMakeLists.txt | 3 ++- winpr/libwinpr/crt/CMakeLists.txt | 3 ++- winpr/libwinpr/crypto/CMakeLists.txt | 3 ++- winpr/libwinpr/dsparse/CMakeLists.txt | 3 ++- winpr/libwinpr/environment/CMakeLists.txt | 3 ++- winpr/libwinpr/error/CMakeLists.txt | 3 ++- winpr/libwinpr/file/CMakeLists.txt | 3 ++- winpr/libwinpr/handle/CMakeLists.txt | 3 ++- winpr/libwinpr/heap/CMakeLists.txt | 3 ++- winpr/libwinpr/input/CMakeLists.txt | 3 ++- winpr/libwinpr/interlocked/CMakeLists.txt | 3 ++- winpr/libwinpr/io/CMakeLists.txt | 3 ++- winpr/libwinpr/library/CMakeLists.txt | 3 ++- winpr/libwinpr/locale/CMakeLists.txt | 3 ++- winpr/libwinpr/memory/CMakeLists.txt | 3 ++- winpr/libwinpr/nt/CMakeLists.txt | 3 ++- winpr/libwinpr/path/CMakeLists.txt | 3 ++- winpr/libwinpr/pipe/CMakeLists.txt | 3 ++- winpr/libwinpr/pool/CMakeLists.txt | 3 ++- winpr/libwinpr/registry/CMakeLists.txt | 3 ++- winpr/libwinpr/rpc/CMakeLists.txt | 3 ++- winpr/libwinpr/security/CMakeLists.txt | 3 ++- winpr/libwinpr/smartcard/CMakeLists.txt | 3 ++- winpr/libwinpr/sspi/CMakeLists.txt | 3 ++- winpr/libwinpr/sspicli/CMakeLists.txt | 3 ++- winpr/libwinpr/synch/CMakeLists.txt | 3 ++- winpr/libwinpr/sysinfo/CMakeLists.txt | 3 ++- winpr/libwinpr/thread/CMakeLists.txt | 3 ++- winpr/libwinpr/timezone/CMakeLists.txt | 3 ++- winpr/libwinpr/utils/CMakeLists.txt | 3 ++- winpr/libwinpr/winhttp/CMakeLists.txt | 3 ++- winpr/libwinpr/winsock/CMakeLists.txt | 3 ++- winpr/libwinpr/wtsapi/CMakeLists.txt | 3 ++- winpr/tools/makecert/CMakeLists.txt | 2 +- 52 files changed, 99 insertions(+), 49 deletions(-) diff --git a/client/common/CMakeLists.txt b/client/common/CMakeLists.txt index 4b002e2d5..a7a39de91 100644 --- a/client/common/CMakeLists.txt +++ b/client/common/CMakeLists.txt @@ -71,4 +71,4 @@ set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Common") if(BUILD_TESTING) add_subdirectory(test) endif() - +export_complex_library(LIBNAME ${MODULE_NAME}) diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index 339cea3b3..1f6d8459b 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -68,6 +68,7 @@ if(MONOLITHIC_BUILD) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "FreeRDP/libfreerdp") endif() +message("FREERDP_LIBS: ${FREERDP_LIBS}") set(FREERDP_PC_LIBS "-lfreerdp -lwinpr") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY) diff --git a/libfreerdp/cache/CMakeLists.txt b/libfreerdp/cache/CMakeLists.txt index d974aae54..82491a2d5 100644 --- a/libfreerdp/cache/CMakeLists.txt +++ b/libfreerdp/cache/CMakeLists.txt @@ -30,7 +30,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt index aca04d5e5..873726542 100644 --- a/libfreerdp/codec/CMakeLists.txt +++ b/libfreerdp/codec/CMakeLists.txt @@ -84,7 +84,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/common/CMakeLists.txt b/libfreerdp/common/CMakeLists.txt index 7f6deab07..2a22526e6 100644 --- a/libfreerdp/common/CMakeLists.txt +++ b/libfreerdp/common/CMakeLists.txt @@ -24,7 +24,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION_FULL} SOVERSION ${FREERDP_VERSION} PREFIX "lib") diff --git a/libfreerdp/core/CMakeLists.txt b/libfreerdp/core/CMakeLists.txt index 14a3e3e62..cb202439c 100644 --- a/libfreerdp/core/CMakeLists.txt +++ b/libfreerdp/core/CMakeLists.txt @@ -126,7 +126,8 @@ set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${MODULE_PREFIX}_GATEWAY_SR add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/crypto/CMakeLists.txt b/libfreerdp/crypto/CMakeLists.txt index fb5749288..e0f93fc6e 100644 --- a/libfreerdp/crypto/CMakeLists.txt +++ b/libfreerdp/crypto/CMakeLists.txt @@ -30,7 +30,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) include_directories(${OPENSSL_INCLUDE_DIR}) include_directories(${ZLIB_INCLUDE_DIRS}) diff --git a/libfreerdp/gdi/CMakeLists.txt b/libfreerdp/gdi/CMakeLists.txt index d410bdf4a..6b182fe1e 100644 --- a/libfreerdp/gdi/CMakeLists.txt +++ b/libfreerdp/gdi/CMakeLists.txt @@ -41,7 +41,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/locale/CMakeLists.txt b/libfreerdp/locale/CMakeLists.txt index d5f53799e..a3a844876 100644 --- a/libfreerdp/locale/CMakeLists.txt +++ b/libfreerdp/locale/CMakeLists.txt @@ -72,7 +72,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/primitives/CMakeLists.txt b/libfreerdp/primitives/CMakeLists.txt index f5e01d13f..a35b24d73 100644 --- a/libfreerdp/primitives/CMakeLists.txt +++ b/libfreerdp/primitives/CMakeLists.txt @@ -69,7 +69,8 @@ set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${MODULE_PREFIX}_OPT_SRCS}) add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/rail/CMakeLists.txt b/libfreerdp/rail/CMakeLists.txt index c7a9092b4..fe0f5741d 100644 --- a/libfreerdp/rail/CMakeLists.txt +++ b/libfreerdp/rail/CMakeLists.txt @@ -27,7 +27,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/libfreerdp/utils/CMakeLists.txt b/libfreerdp/utils/CMakeLists.txt index 10b767cd3..f343d8adb 100644 --- a/libfreerdp/utils/CMakeLists.txt +++ b/libfreerdp/utils/CMakeLists.txt @@ -39,7 +39,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") diff --git a/server/common/CMakeLists.txt b/server/common/CMakeLists.txt index f1fbf9cec..22869430d 100644 --- a/server/common/CMakeLists.txt +++ b/server/common/CMakeLists.txt @@ -42,3 +42,4 @@ target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT FreeRDPTargets) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Server/Common") +export_complex_library(LIBNAME ${MODULE_NAME}) diff --git a/winpr/libwinpr/CMakeLists.txt b/winpr/libwinpr/CMakeLists.txt index 5b210c2ad..8401badd1 100644 --- a/winpr/libwinpr/CMakeLists.txt +++ b/winpr/libwinpr/CMakeLists.txt @@ -42,6 +42,7 @@ foreach(${MODULE_PREFIX}_SUBMODULE ${${MODULE_PREFIX}_SUBMODULES}) add_subdirectory(${${MODULE_PREFIX}_SUBMODULE}) endforeach() +message("WINPR_LIBS: ${WINPR_LIBS}") if(MONOLITHIC_BUILD) foreach(${MODULE_PREFIX}_SUBMODULE ${${MODULE_PREFIX}_SUBMODULES}) diff --git a/winpr/libwinpr/asn1/CMakeLists.txt b/winpr/libwinpr/asn1/CMakeLists.txt index 284b8c713..920e8001c 100644 --- a/winpr/libwinpr/asn1/CMakeLists.txt +++ b/winpr/libwinpr/asn1/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/bcrypt/CMakeLists.txt b/winpr/libwinpr/bcrypt/CMakeLists.txt index ca0ffee68..b70d9bf85 100644 --- a/winpr/libwinpr/bcrypt/CMakeLists.txt +++ b/winpr/libwinpr/bcrypt/CMakeLists.txt @@ -23,7 +23,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) include_directories(${OPENSSL_INCLUDE_DIR}) include_directories(${ZLIB_INCLUDE_DIRS}) diff --git a/winpr/libwinpr/com/CMakeLists.txt b/winpr/libwinpr/com/CMakeLists.txt index 8cf9bef30..f00507be4 100644 --- a/winpr/libwinpr/com/CMakeLists.txt +++ b/winpr/libwinpr/com/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/credentials/CMakeLists.txt b/winpr/libwinpr/credentials/CMakeLists.txt index 5748791b6..588f28c98 100644 --- a/winpr/libwinpr/credentials/CMakeLists.txt +++ b/winpr/libwinpr/credentials/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/credui/CMakeLists.txt b/winpr/libwinpr/credui/CMakeLists.txt index de9e71b8e..cb5a86ba5 100644 --- a/winpr/libwinpr/credui/CMakeLists.txt +++ b/winpr/libwinpr/credui/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/crt/CMakeLists.txt b/winpr/libwinpr/crt/CMakeLists.txt index a6d42f308..6acb1c303 100644 --- a/winpr/libwinpr/crt/CMakeLists.txt +++ b/winpr/libwinpr/crt/CMakeLists.txt @@ -34,7 +34,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/crypto/CMakeLists.txt b/winpr/libwinpr/crypto/CMakeLists.txt index e8fc30bda..0c7cca6aa 100644 --- a/winpr/libwinpr/crypto/CMakeLists.txt +++ b/winpr/libwinpr/crypto/CMakeLists.txt @@ -29,7 +29,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) include_directories(${ZLIB_INCLUDE_DIRS}) include_directories(${OPENSSL_INCLUDE_DIR}) diff --git a/winpr/libwinpr/dsparse/CMakeLists.txt b/winpr/libwinpr/dsparse/CMakeLists.txt index a92753ae9..1567d82fc 100644 --- a/winpr/libwinpr/dsparse/CMakeLists.txt +++ b/winpr/libwinpr/dsparse/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/environment/CMakeLists.txt b/winpr/libwinpr/environment/CMakeLists.txt index e5d4ff550..66c1c1b4b 100644 --- a/winpr/libwinpr/environment/CMakeLists.txt +++ b/winpr/libwinpr/environment/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/error/CMakeLists.txt b/winpr/libwinpr/error/CMakeLists.txt index 440544f90..795240802 100644 --- a/winpr/libwinpr/error/CMakeLists.txt +++ b/winpr/libwinpr/error/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/file/CMakeLists.txt b/winpr/libwinpr/file/CMakeLists.txt index 6c9bac92f..d374cab99 100644 --- a/winpr/libwinpr/file/CMakeLists.txt +++ b/winpr/libwinpr/file/CMakeLists.txt @@ -24,7 +24,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/handle/CMakeLists.txt b/winpr/libwinpr/handle/CMakeLists.txt index 2beef603e..3dc9dfb0c 100644 --- a/winpr/libwinpr/handle/CMakeLists.txt +++ b/winpr/libwinpr/handle/CMakeLists.txt @@ -29,7 +29,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/heap/CMakeLists.txt b/winpr/libwinpr/heap/CMakeLists.txt index cd3a742f1..40d69e2c0 100644 --- a/winpr/libwinpr/heap/CMakeLists.txt +++ b/winpr/libwinpr/heap/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/input/CMakeLists.txt b/winpr/libwinpr/input/CMakeLists.txt index 5ad8381ca..5913c29a1 100644 --- a/winpr/libwinpr/input/CMakeLists.txt +++ b/winpr/libwinpr/input/CMakeLists.txt @@ -25,7 +25,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/interlocked/CMakeLists.txt b/winpr/libwinpr/interlocked/CMakeLists.txt index 19af54175..aa8a2948a 100644 --- a/winpr/libwinpr/interlocked/CMakeLists.txt +++ b/winpr/libwinpr/interlocked/CMakeLists.txt @@ -31,7 +31,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/io/CMakeLists.txt b/winpr/libwinpr/io/CMakeLists.txt index f913bd4a7..1100af791 100644 --- a/winpr/libwinpr/io/CMakeLists.txt +++ b/winpr/libwinpr/io/CMakeLists.txt @@ -29,7 +29,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/library/CMakeLists.txt b/winpr/libwinpr/library/CMakeLists.txt index 5873d8ea9..cebaa144d 100644 --- a/winpr/libwinpr/library/CMakeLists.txt +++ b/winpr/libwinpr/library/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/locale/CMakeLists.txt b/winpr/libwinpr/locale/CMakeLists.txt index 913ace67d..6b1ee22fd 100644 --- a/winpr/libwinpr/locale/CMakeLists.txt +++ b/winpr/libwinpr/locale/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/memory/CMakeLists.txt b/winpr/libwinpr/memory/CMakeLists.txt index 4c7e8e8ac..02139b575 100644 --- a/winpr/libwinpr/memory/CMakeLists.txt +++ b/winpr/libwinpr/memory/CMakeLists.txt @@ -28,7 +28,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/nt/CMakeLists.txt b/winpr/libwinpr/nt/CMakeLists.txt index db0199451..89698ab31 100644 --- a/winpr/libwinpr/nt/CMakeLists.txt +++ b/winpr/libwinpr/nt/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/path/CMakeLists.txt b/winpr/libwinpr/path/CMakeLists.txt index 9af4206eb..9342f4d54 100644 --- a/winpr/libwinpr/path/CMakeLists.txt +++ b/winpr/libwinpr/path/CMakeLists.txt @@ -24,7 +24,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/pipe/CMakeLists.txt b/winpr/libwinpr/pipe/CMakeLists.txt index bf0b98fb4..4b2f53263 100644 --- a/winpr/libwinpr/pipe/CMakeLists.txt +++ b/winpr/libwinpr/pipe/CMakeLists.txt @@ -28,7 +28,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/pool/CMakeLists.txt b/winpr/libwinpr/pool/CMakeLists.txt index 3ae10f0e1..8044c89e7 100644 --- a/winpr/libwinpr/pool/CMakeLists.txt +++ b/winpr/libwinpr/pool/CMakeLists.txt @@ -36,7 +36,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/registry/CMakeLists.txt b/winpr/libwinpr/registry/CMakeLists.txt index bbf1fd125..3d04e40c9 100644 --- a/winpr/libwinpr/registry/CMakeLists.txt +++ b/winpr/libwinpr/registry/CMakeLists.txt @@ -29,7 +29,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/rpc/CMakeLists.txt b/winpr/libwinpr/rpc/CMakeLists.txt index 41093596c..758a44fca 100644 --- a/winpr/libwinpr/rpc/CMakeLists.txt +++ b/winpr/libwinpr/rpc/CMakeLists.txt @@ -47,7 +47,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) include_directories(${OPENSSL_INCLUDE_DIR}) include_directories(${ZLIB_INCLUDE_DIRS}) diff --git a/winpr/libwinpr/security/CMakeLists.txt b/winpr/libwinpr/security/CMakeLists.txt index b8dfd8b00..0630beea1 100644 --- a/winpr/libwinpr/security/CMakeLists.txt +++ b/winpr/libwinpr/security/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/smartcard/CMakeLists.txt b/winpr/libwinpr/smartcard/CMakeLists.txt index 7f2df5484..4ff7bfd0e 100644 --- a/winpr/libwinpr/smartcard/CMakeLists.txt +++ b/winpr/libwinpr/smartcard/CMakeLists.txt @@ -37,7 +37,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/sspi/CMakeLists.txt b/winpr/libwinpr/sspi/CMakeLists.txt index c9eac6a6d..95bbcecca 100644 --- a/winpr/libwinpr/sspi/CMakeLists.txt +++ b/winpr/libwinpr/sspi/CMakeLists.txt @@ -61,7 +61,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) include_directories(${ZLIB_INCLUDE_DIRS}) include_directories(${OPENSSL_INCLUDE_DIR}) diff --git a/winpr/libwinpr/sspicli/CMakeLists.txt b/winpr/libwinpr/sspicli/CMakeLists.txt index e8b11688c..651978b11 100644 --- a/winpr/libwinpr/sspicli/CMakeLists.txt +++ b/winpr/libwinpr/sspicli/CMakeLists.txt @@ -23,7 +23,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/synch/CMakeLists.txt b/winpr/libwinpr/synch/CMakeLists.txt index af1279489..b2f40cc05 100644 --- a/winpr/libwinpr/synch/CMakeLists.txt +++ b/winpr/libwinpr/synch/CMakeLists.txt @@ -42,7 +42,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/sysinfo/CMakeLists.txt b/winpr/libwinpr/sysinfo/CMakeLists.txt index 1de26d40e..31006f0da 100644 --- a/winpr/libwinpr/sysinfo/CMakeLists.txt +++ b/winpr/libwinpr/sysinfo/CMakeLists.txt @@ -27,7 +27,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/thread/CMakeLists.txt b/winpr/libwinpr/thread/CMakeLists.txt index 55d02ab43..e8d4c01d1 100644 --- a/winpr/libwinpr/thread/CMakeLists.txt +++ b/winpr/libwinpr/thread/CMakeLists.txt @@ -32,7 +32,8 @@ endif() add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/timezone/CMakeLists.txt b/winpr/libwinpr/timezone/CMakeLists.txt index f5bd4e26e..b9fece024 100644 --- a/winpr/libwinpr/timezone/CMakeLists.txt +++ b/winpr/libwinpr/timezone/CMakeLists.txt @@ -23,7 +23,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/utils/CMakeLists.txt b/winpr/libwinpr/utils/CMakeLists.txt index 7827293b4..64cef2cc6 100644 --- a/winpr/libwinpr/utils/CMakeLists.txt +++ b/winpr/libwinpr/utils/CMakeLists.txt @@ -92,7 +92,8 @@ include_directories(${OPENSSL_INCLUDE_DIR}) add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/winhttp/CMakeLists.txt b/winpr/libwinpr/winhttp/CMakeLists.txt index 3c268843d..62088e7c3 100644 --- a/winpr/libwinpr/winhttp/CMakeLists.txt +++ b/winpr/libwinpr/winhttp/CMakeLists.txt @@ -23,7 +23,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/winsock/CMakeLists.txt b/winpr/libwinpr/winsock/CMakeLists.txt index cc378ae54..80e76a2e5 100644 --- a/winpr/libwinpr/winsock/CMakeLists.txt +++ b/winpr/libwinpr/winsock/CMakeLists.txt @@ -23,7 +23,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/libwinpr/wtsapi/CMakeLists.txt b/winpr/libwinpr/wtsapi/CMakeLists.txt index 0a029a359..50e09f60b 100644 --- a/winpr/libwinpr/wtsapi/CMakeLists.txt +++ b/winpr/libwinpr/wtsapi/CMakeLists.txt @@ -24,7 +24,8 @@ set(${MODULE_PREFIX}_SRCS add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT" MONOLITHIC ${MONOLITHIC_BUILD} - SOURCES ${${MODULE_PREFIX}_SRCS}) + SOURCES ${${MODULE_PREFIX}_SRCS} + EXPORT) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib") diff --git a/winpr/tools/makecert/CMakeLists.txt b/winpr/tools/makecert/CMakeLists.txt index ecfbbe1c4..fd6c080f9 100644 --- a/winpr/tools/makecert/CMakeLists.txt +++ b/winpr/tools/makecert/CMakeLists.txt @@ -43,4 +43,4 @@ install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib add_subdirectory(cli) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/Tools") - +export_complex_library(LIBNAME ${MODULE_NAME}) From dee91881917e7d16496ae904b551a5552fa83bf0 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Wed, 23 Apr 2014 13:12:23 +0200 Subject: [PATCH 11/25] update and improve pkg-config files * generate pkg-config files top level to make sure all exports are available (eg. client/server) * .pc libs section is now generated from export libraries * update .pc file to use .private fields (prevent overlinking) --- CMakeLists.txt | 27 +++++++++++++++++++++++ libfreerdp/freerdp.pc.in => freerdp.pc.in | 2 ++ libfreerdp/CMakeLists.txt | 8 +------ winpr/libwinpr/winpr.pc.in => winpr.pc.in | 2 ++ winpr/libwinpr/CMakeLists.txt | 16 -------------- 5 files changed, 32 insertions(+), 23 deletions(-) rename libfreerdp/freerdp.pc.in => freerdp.pc.in (84%) rename winpr/libwinpr/winpr.pc.in => winpr.pc.in (83%) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd0f4c5b4..5c0d6f0d6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -612,3 +612,30 @@ endif() #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}") include(${CMAKE_CPACK_INCLUDE_FILE}) + +if(MONOLITHIC_BUILD) + set(FREERDP_PC_LIBS "-lfreerdp -lfreerdp-client") + set(WINPR_PC_LIBS "-lwinpr") + if (WITH_SERVER) + set(FREERDP_PC_LIBS "${FREERDP_PC_LIBS} -lfreerdp-server") + endif() +else(MONOLITHIC_BUILD) + # freerdp exports + get_property(MEXPORTS GLOBAL PROPERTY "freerdp_EXPORTS") + foreach(EXPORT_MODULE ${MEXPORTS}) + list(APPEND FREERDP_PC_LIBS "-lfreerdp-${EXPORT_MODULE}") + endforeach() + string(REPLACE ";" " " FREERDP_PC_LIBS "${FREERDP_PC_LIBS}") + + # winpr exports + get_property(MEXPORTS GLOBAL PROPERTY "winpr_EXPORTS") + foreach(EXPORT_MODULE ${MEXPORTS}) + list(APPEND WINPR_PC_LIBS "-lwinpr-${EXPORT_MODULE}") + endforeach() + string(REPLACE ";" " " WINPR_PC_LIBS "${WINPR_PC_LIBS}") +endif(MONOLITHIC_BUILD) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) diff --git a/libfreerdp/freerdp.pc.in b/freerdp.pc.in similarity index 84% rename from libfreerdp/freerdp.pc.in rename to freerdp.pc.in index 3561100d8..ca0d63cbb 100644 --- a/libfreerdp/freerdp.pc.in +++ b/freerdp.pc.in @@ -9,5 +9,7 @@ Description: FreeRDP: A Remote Desktop Protocol Implementation URL: http://www.freerdp.com/ Version: @FREERDP_VERSION_FULL@ Requires: +Requires.private: winpr zlib libssl Libs: -L${libdir} ${libs} +Libs.private: -ldl -lpthread Cflags: -I${includedir} diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index 1f6d8459b..fa3dbf10e 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -66,10 +66,4 @@ if(MONOLITHIC_BUILD) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT FreeRDPTargets) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "FreeRDP/libfreerdp") -endif() - -message("FREERDP_LIBS: ${FREERDP_LIBS}") -set(FREERDP_PC_LIBS "-lfreerdp -lwinpr") - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +endif(MONOLITHIC_BUILD) diff --git a/winpr/libwinpr/winpr.pc.in b/winpr.pc.in similarity index 83% rename from winpr/libwinpr/winpr.pc.in rename to winpr.pc.in index 538cbf0ed..5be9979f6 100644 --- a/winpr/libwinpr/winpr.pc.in +++ b/winpr.pc.in @@ -9,5 +9,7 @@ Description: WinPR: Windows Portable Runtime URL: http://www.freerdp.com/ Version: @WINPR_VERSION_FULL@ Requires: +Requires.private: zlib libssl Libs: -L${libdir} ${libs} +Libs.private: -ldl -lrt -lm -lpthread Cflags: -I${includedir} diff --git a/winpr/libwinpr/CMakeLists.txt b/winpr/libwinpr/CMakeLists.txt index 8401badd1..c2eabedda 100644 --- a/winpr/libwinpr/CMakeLists.txt +++ b/winpr/libwinpr/CMakeLists.txt @@ -42,7 +42,6 @@ foreach(${MODULE_PREFIX}_SUBMODULE ${${MODULE_PREFIX}_SUBMODULES}) add_subdirectory(${${MODULE_PREFIX}_SUBMODULE}) endforeach() -message("WINPR_LIBS: ${WINPR_LIBS}") if(MONOLITHIC_BUILD) foreach(${MODULE_PREFIX}_SUBMODULE ${${MODULE_PREFIX}_SUBMODULES}) @@ -59,20 +58,5 @@ if(MONOLITHIC_BUILD) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT WinPRTargets) - set(WINPR_PC_LIBS "-lwinpr") - - foreach(WINPR_LIB ${WINPR_LIBS}) - if(${WINPR_LIB} MATCHES "^-l.*") - set(WINPR_PC_LIBS "${WINPR_PC_LIBS} ${WINPR_LIB}") - elseif(${WINPR_LIB} MATCHES "^/.*") - - else() - set(WINPR_PC_LIBS "${WINPR_PC_LIBS} -l${WINPR_LIB}") - endif() - endforeach() - - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/libwinpr") endif() From 9d2ea1fcd89e5bdc6edc9a2e89567cffb8445044 Mon Sep 17 00:00:00 2001 From: Hardening Date: Wed, 23 Apr 2014 16:59:14 +0200 Subject: [PATCH 12/25] Fix Thread handle leak When a thread pool is release the Thread handle is leaked. --- winpr/libwinpr/pool/pool.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/winpr/libwinpr/pool/pool.c b/winpr/libwinpr/pool/pool.c index 2151370bf..2030646c8 100644 --- a/winpr/libwinpr/pool/pool.c +++ b/winpr/libwinpr/pool/pool.c @@ -103,6 +103,11 @@ static void* thread_pool_work_func(void* arg) return NULL; } +static void threads_close(void *thread) +{ + CloseHandle(thread); +} + void InitializeThreadpool(PTP_POOL pool) { int index; @@ -114,6 +119,7 @@ void InitializeThreadpool(PTP_POOL pool) pool->Maximum = 500; pool->Threads = ArrayList_New(TRUE); + pool->Threads->object.fnObjectFree = threads_close; pool->PendingQueue = Queue_New(TRUE, -1, -1); pool->WorkComplete = CountdownEvent_New(0); From 66dfc4fd5b1ed49d645c19d5133e01cd96191c0a Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Fri, 25 Apr 2014 21:14:10 +0800 Subject: [PATCH 13/25] winpr: fix error malloc size. --- winpr/libwinpr/utils/collections/ListDictionary.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/winpr/libwinpr/utils/collections/ListDictionary.c b/winpr/libwinpr/utils/collections/ListDictionary.c index b89620f6e..ca65d8a08 100644 --- a/winpr/libwinpr/utils/collections/ListDictionary.c +++ b/winpr/libwinpr/utils/collections/ListDictionary.c @@ -144,8 +144,8 @@ int ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys) } } - pKeys = (ULONG_PTR*) malloc(sizeof(ULONG_PTR*) * count); - ZeroMemory(pKeys, sizeof(ULONG_PTR*) * count); + pKeys = (ULONG_PTR*) malloc(sizeof(ULONG_PTR) * count); + ZeroMemory(pKeys, sizeof(ULONG_PTR) * count); index = 0; From 196f5315aec93ba6241bacb4b36b1266213c90bc Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 11:32:51 +0800 Subject: [PATCH 14/25] libwinpr: fix memory leak in case realloc() failed. --- winpr/libwinpr/utils/collections/BufferPool.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/winpr/libwinpr/utils/collections/BufferPool.c b/winpr/libwinpr/utils/collections/BufferPool.c index 885064b78..3a0fda5b4 100644 --- a/winpr/libwinpr/utils/collections/BufferPool.c +++ b/winpr/libwinpr/utils/collections/BufferPool.c @@ -277,6 +277,9 @@ void* BufferPool_Take(wBufferPool* pool, int size) return buffer; out_error: + if (buffer) + free(buffer); + if (pool->synchronized) LeaveCriticalSection(&pool->lock); return NULL; From 88760cbd8300b527e9241951b862cbb30d629ae0 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 11:36:35 +0800 Subject: [PATCH 15/25] libwinpr: fix memory leak in case TimerQueue is NULL. --- winpr/libwinpr/synch/timer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpr/libwinpr/synch/timer.c b/winpr/libwinpr/synch/timer.c index d6b06691b..0f0c41572 100644 --- a/winpr/libwinpr/synch/timer.c +++ b/winpr/libwinpr/synch/timer.c @@ -648,12 +648,15 @@ BOOL CreateTimerQueueTimer(PHANDLE phNewTimer, HANDLE TimerQueue, WINPR_TIMER_QUEUE* timerQueue; WINPR_TIMER_QUEUE_TIMER* timer; + if (!TimerQueue) + return FALSE; + timespec_gettimeofday(&CurrentTime); timerQueue = (WINPR_TIMER_QUEUE*) TimerQueue; timer = (WINPR_TIMER_QUEUE_TIMER*) malloc(sizeof(WINPR_TIMER_QUEUE_TIMER)); - if (!timer || !TimerQueue) + if (!timer) return FALSE; WINPR_HANDLE_SET_TYPE(timer, HANDLE_TYPE_TIMER_QUEUE_TIMER); From dcbf5bd0ed643f56beb03a0540e95197ac42f386 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 11:53:08 +0800 Subject: [PATCH 16/25] libwinpr: fix memory leak in case of error. --- winpr/libwinpr/pipe/pipe.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/winpr/libwinpr/pipe/pipe.c b/winpr/libwinpr/pipe/pipe.c index d1c26e5fc..6e82a0b6a 100644 --- a/winpr/libwinpr/pipe/pipe.c +++ b/winpr/libwinpr/pipe/pipe.c @@ -145,7 +145,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD if (pNamedPipe->serverfd == -1) { fprintf(stderr, "CreateNamedPipeA: socket error, %s\n", strerror(errno)); - return INVALID_HANDLE_VALUE; + goto err_out; } ZeroMemory(&s, sizeof(struct sockaddr_un)); @@ -157,7 +157,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD if (status != 0) { fprintf(stderr, "CreateNamedPipeA: bind error, %s\n", strerror(errno)); - return INVALID_HANDLE_VALUE; + goto err_out; } status = listen(pNamedPipe->serverfd, 2); @@ -165,7 +165,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD if (status != 0) { fprintf(stderr, "CreateNamedPipeA: listen error, %s\n", strerror(errno)); - return INVALID_HANDLE_VALUE; + goto err_out; } UnixChangeFileMode(pNamedPipe->lpFilePath, 0xFFFF); @@ -181,6 +181,13 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD } return hNamedPipe; +err_out: + if (pNamedPipe) { + if (pNamedPipe->serverfd != -1) + close(pNamedPipe->serverfd); + free(pNamedPipe); + } + return INVALID_HANDLE_VALUE; } HANDLE CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, From 8ce32773f32a71106a7bfdde22a63e8ada990c14 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 12:00:07 +0800 Subject: [PATCH 17/25] core: fix memory leak in case of error out. --- libfreerdp/core/license.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libfreerdp/core/license.c b/libfreerdp/core/license.c index 42e7dc8ef..dc96014a9 100644 --- a/libfreerdp/core/license.c +++ b/libfreerdp/core/license.c @@ -1057,6 +1057,7 @@ void license_send_platform_challenge_response_packet(rdpLicense* license) if (!rc4) { fprintf(stderr, "%s: unable to allocate a rc4\n", __FUNCTION__); + free(buffer); return; } crypto_rc4(rc4, HWID_LENGTH, license->HardwareId, buffer); From 24fce3a74996628c6ecdcd0e8622400744ccc731 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 12:05:52 +0800 Subject: [PATCH 18/25] core: fix memory leak in case of error out. --- libfreerdp/core/gateway/tsg.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libfreerdp/core/gateway/tsg.c b/libfreerdp/core/gateway/tsg.c index a4cbd9a2a..62a84a6a9 100644 --- a/libfreerdp/core/gateway/tsg.c +++ b/libfreerdp/core/gateway/tsg.c @@ -373,6 +373,10 @@ BOOL TsProxyCreateTunnelReadResponse(rdpTsg* tsg, RPC_PDU* pdu) default: fprintf(stderr, "Unexpected Message Type: 0x%X\n", (int) MessageSwitchValue); + free(tsgCaps); + free(versionCaps); + free(packetCapsResponse); + free(packet); return FALSE; } @@ -619,6 +623,7 @@ BOOL TsProxyAuthorizeTunnelReadResponse(rdpTsg* tsg, RPC_PDU* pdu) { fprintf(stderr, "status: E_PROXY_NAP_ACCESSDENIED (0x%08X)\n", E_PROXY_NAP_ACCESSDENIED); fprintf(stderr, "Ensure that the Gateway Connection Authorization Policy is correct\n"); + free(packet); return FALSE; } From 69eee0709de0e1125c0d8479b1fffd488757e0ec Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 12:08:30 +0800 Subject: [PATCH 19/25] core: fix memory leak in case of error out. --- libfreerdp/core/gateway/ncacn_http.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libfreerdp/core/gateway/ncacn_http.c b/libfreerdp/core/gateway/ncacn_http.c index 2820d8e0d..76e76d603 100644 --- a/libfreerdp/core/gateway/ncacn_http.c +++ b/libfreerdp/core/gateway/ncacn_http.c @@ -329,6 +329,7 @@ rdpNtlmHttp* ntlm_http_new() out_free_ntlm: ntlm_free(ntlm_http->ntlm); out_free: + free(ntlm_http); return NULL; } From cb2fc70a5db050aa3d63413c25b34a09a0bd1f92 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 12:16:34 +0800 Subject: [PATCH 20/25] codec: fix memory leak in case of realloc() failed. --- libfreerdp/codec/region.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libfreerdp/codec/region.c b/libfreerdp/codec/region.c index c7fe1f112..4ad0213f4 100644 --- a/libfreerdp/codec/region.c +++ b/libfreerdp/codec/region.c @@ -737,8 +737,10 @@ BOOL region16_intersect_rect(REGION16 *dst, const REGION16 *src, const RECTANGLE free(dst->data); dst->data = realloc(newItems, newItems->size); - if (!dst->data) + if (!dst->data) { + free(newItems); return FALSE; + } dst->extents = newExtents; return region16_simplify_bands(dst); From 5cb781983096fd32e47c46b7fa1961ac7b5f1a50 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 12:19:28 +0800 Subject: [PATCH 21/25] client-common: fix memory leak in case of error out. --- client/common/file.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/common/file.c b/client/common/file.c index c73be9198..62114f485 100644 --- a/client/common/file.c +++ b/client/common/file.c @@ -674,6 +674,7 @@ BOOL freerdp_client_write_rdp_file(const rdpFile* file, const char* name, BOOL u if (freerdp_client_write_rdp_file_buffer(file, buffer, length + 1) != length) { fprintf(stderr, "freerdp_client_write_rdp_file: error writing to output buffer\n"); + free(buffer); return FALSE; } From 7b1e773929050f5f8f3574f956abc30cf8b2edf3 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 12:24:56 +0800 Subject: [PATCH 22/25] serial: fix memory leak in case of error out. --- channels/serial/client/serial_tty.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/channels/serial/client/serial_tty.c b/channels/serial/client/serial_tty.c index 8e051e930..b71bd5753 100644 --- a/channels/serial/client/serial_tty.c +++ b/channels/serial/client/serial_tty.c @@ -426,8 +426,10 @@ BOOL serial_tty_read(SERIAL_TTY* tty, BYTE* buffer, UINT32* Length) ptermios = (struct termios*) calloc(1, sizeof(struct termios)); - if (tcgetattr(tty->fd, ptermios) < 0) + if (tcgetattr(tty->fd, ptermios) < 0) { + free(ptermios); return FALSE; + } /** * If a timeout is set, do a blocking read, which times out after some time. From cad2578867ec879d5b26db345880fa3b1351d7d9 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 13:13:12 +0800 Subject: [PATCH 23/25] libwinpr: minor fix print uninitialized variable. --- winpr/libwinpr/rpc/ndr.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/winpr/libwinpr/rpc/ndr.c b/winpr/libwinpr/rpc/ndr.c index 3434238c2..efc58d809 100644 --- a/winpr/libwinpr/rpc/ndr.c +++ b/winpr/libwinpr/rpc/ndr.c @@ -241,7 +241,6 @@ CLIENT_CALL_RETURN NdrClientCall(PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING MIDL_STUB_MESSAGE stubMsg; INTERPRETER_FLAGS flags; INTERPRETER_OPT_FLAGS optFlags; - INTERPRETER_OPT_FLAGS2 extFlags; NDR_PROC_HEADER* procHeader; NDR_OI2_PROC_HEADER* oi2ProcHeader; CLIENT_CALL_RETURN client_call_return; @@ -297,6 +296,7 @@ CLIENT_CALL_RETURN NdrClientCall(PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING if (optFlags.HasExtensions) { + INTERPRETER_OPT_FLAGS2 extFlags; NDR_PROC_HEADER_EXTS* extensions = (NDR_PROC_HEADER_EXTS*) pFormat; pFormat += extensions->Size; @@ -324,14 +324,13 @@ CLIENT_CALL_RETURN NdrClientCall(PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING } } #endif + fprintf(stderr, "ExtFlags: "); + NdrPrintExtFlags(extFlags); + fprintf(stderr, "\n"); } stubMsg.StackTop = (unsigned char*) stackTop; - fprintf(stderr, "ExtFlags: "); - NdrPrintExtFlags(extFlags); - fprintf(stderr, "\n"); - NdrProcessParams(&stubMsg, pFormat, NDR_PHASE_SIZE, fpuStack, numberParams); fprintf(stderr, "stubMsg BufferLength: %d\n", (int) stubMsg.BufferLength); From e8f34b845e1cca4d3ca773f00e1d251cdd0b41cb Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 13:43:52 +0800 Subject: [PATCH 24/25] serial: fix memory leak in case of error out. --- channels/serial/client/serial_tty.c | 1 + 1 file changed, 1 insertion(+) diff --git a/channels/serial/client/serial_tty.c b/channels/serial/client/serial_tty.c index b71bd5753..a7d365471 100644 --- a/channels/serial/client/serial_tty.c +++ b/channels/serial/client/serial_tty.c @@ -450,6 +450,7 @@ BOOL serial_tty_read(SERIAL_TTY* tty, BYTE* buffer, UINT32* Length) tcsetattr(tty->fd, TCSANOW, ptermios); tty->timeout = timeout; + free(ptermios); } ZeroMemory(buffer, *Length); From e64a64dcd62162b56293d5f987e8b60c5203e83e Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Sat, 26 Apr 2014 13:44:28 +0800 Subject: [PATCH 25/25] core: fix memory leak in case of error out. --- libfreerdp/core/gateway/tsg.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libfreerdp/core/gateway/tsg.c b/libfreerdp/core/gateway/tsg.c index 62a84a6a9..f130f73ab 100644 --- a/libfreerdp/core/gateway/tsg.c +++ b/libfreerdp/core/gateway/tsg.c @@ -360,6 +360,10 @@ BOOL TsProxyCreateTunnelReadResponse(rdpTsg* tsg, RPC_PDU* pdu) if (MsgBytes > TSG_MESSAGING_MAX_MESSAGE_LENGTH) { fprintf(stderr, "Out of Spec Message Length %d", MsgBytes); + free(tsgCaps); + free(versionCaps); + free(packetCapsResponse); + free(packet); return FALSE; } offset += MsgBytes;