From 983f42254d66cf7c6232748f681e09a59aef9d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Mon, 29 Apr 2013 16:37:11 -0400 Subject: [PATCH] xfreerdp-server: split into library/executable --- CMakeLists.txt | 7 +++---- client/X11/CMakeLists.txt | 3 ++- client/X11/cli/CMakeLists.txt | 3 ++- server/X11/CMakeLists.txt | 24 +++++++++++++++++---- server/X11/cli/CMakeLists.txt | 36 ++++++++++++++++++++++++++++++++ server/X11/cli/xfreerdp-server | Bin 0 -> 10847 bytes server/X11/{ => cli}/xfreerdp.c | 10 +++++---- server/X11/xf_interface.c | 7 ++++++- server/X11/xf_interface.h | 4 ++++ 9 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 server/X11/cli/CMakeLists.txt create mode 100755 server/X11/cli/xfreerdp-server rename server/X11/{ => cli}/xfreerdp.c (86%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78ba4ae0e..e1e369aff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,9 @@ endif() # Compiler-specific flags if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686") - if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686") endif() endif() @@ -151,9 +153,6 @@ if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") endif() - if(${CMAKE_VERSION} VERSION_LESS 2.8.9) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - endif() if(WITH_SSE2) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2") endif() diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index 2f833ed9d..96f4ec419 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -53,6 +53,7 @@ if(WITH_CLIENT_INTERFACE) else() set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/xfreerdp.c cli/xfreerdp.h) add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp") endif() set(${MODULE_PREFIX}_LIBS @@ -146,7 +147,7 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHI target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) if(WITH_IPP) - target_link_libraries(xfreerdp ${IPP_LIBRARY_LIST}) + target_link_libraries(${MODULE_NAME} ${IPP_LIBRARY_LIST}) endif() if(WITH_CLIENT_INTERFACE) diff --git a/client/X11/cli/CMakeLists.txt b/client/X11/cli/CMakeLists.txt index 0abac9e69..2beef85b9 100644 --- a/client/X11/cli/CMakeLists.txt +++ b/client/X11/cli/CMakeLists.txt @@ -15,7 +15,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -set(MODULE_NAME "xfreerdp") +set(MODULE_NAME "xfreerdp-cli") set(MODULE_PREFIX "FREERDP_CLIENT_X11") include_directories(..) @@ -24,6 +24,7 @@ set(${MODULE_PREFIX}_SRCS xfreerdp.c) add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) +set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp") set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} xfreerdp-client) diff --git a/server/X11/CMakeLists.txt b/server/X11/CMakeLists.txt index 1aa0f94cf..2128d8f31 100644 --- a/server/X11/CMakeLists.txt +++ b/server/X11/CMakeLists.txt @@ -16,7 +16,7 @@ # limitations under the License. set(MODULE_NAME "xfreerdp-server") -set(MODULE_PREFIX "FREERDP_SERVER_X11") +set(MODULE_PREFIX "FREERDP_SERVER_X11_CONTROL") include_directories(${X11_INCLUDE_DIRS}) include_directories("../../winpr/tools/makecert") @@ -30,10 +30,20 @@ set(${MODULE_PREFIX}_SRCS xf_encode.h xf_interface.c xf_interface.h - xfreerdp.c xfreerdp.h) -add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) +if(WITH_SERVER_INTERFACE) + if(SERVER_INTERFACE_SHARED) + add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS}) + else() + add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + endif() + set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION} PREFIX "lib") +else() + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/xfreerdp.c) + add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp-server") +endif() set(XEXT_FEATURE_TYPE "RECOMMENDED") set(XEXT_FEATURE_PURPOSE "X11 extension") @@ -106,7 +116,13 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr-makecert-tool) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) -install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) + +if(WITH_SERVER_INTERFACE) + install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) + add_subdirectory(cli) +else() + install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT server) +endif() set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Server/X11") diff --git a/server/X11/cli/CMakeLists.txt b/server/X11/cli/CMakeLists.txt new file mode 100644 index 000000000..9d5dd037d --- /dev/null +++ b/server/X11/cli/CMakeLists.txt @@ -0,0 +1,36 @@ +# FreeRDP: A Remote Desktop Protocol Implementation +# FreeRDP X11 cmake build script +# +# Copyright 2012 Marc-Andre Moreau +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set(MODULE_NAME "xfreerdp-server-cli") +set(MODULE_PREFIX "FREERDP_SERVER_X11") + +include_directories(..) + +set(${MODULE_PREFIX}_SRCS + xfreerdp.c) + +add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) +set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp-server") + +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} xfreerdp-server) + +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) + +install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT server) + +set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Server/X11") + diff --git a/server/X11/cli/xfreerdp-server b/server/X11/cli/xfreerdp-server new file mode 100755 index 0000000000000000000000000000000000000000..9e837526bcf2d214862ecced6059b2a82ddf5e02 GIT binary patch literal 10847 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, INFINITE); + thread = freerdp_server_get_thread(server); - GetExitCodeThread(server->thread, &dwExitCode); + WaitForSingleObject(thread, INFINITE); + + GetExitCodeThread(thread, &dwExitCode); freerdp_server_free(server); diff --git a/server/X11/xf_interface.c b/server/X11/xf_interface.c index 2d70b3c1c..1c93b5e4e 100644 --- a/server/X11/xf_interface.c +++ b/server/X11/xf_interface.c @@ -117,7 +117,7 @@ int freerdp_server_start(xfServer* server) { if (server->listener->Open(server->listener, NULL, 3389)) { - server->thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) xf_thread, (void*) server, 0, NULL); + server->thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) xf_server_thread, (void*) server, 0, NULL); } return 0; @@ -128,6 +128,11 @@ int freerdp_server_stop(xfServer* server) return 0; } +HANDLE freerdp_server_get_thread(xfServer* server) +{ + return server->thread; +} + xfServer* freerdp_server_new(int argc, char** argv) { xfServer* server; diff --git a/server/X11/xf_interface.h b/server/X11/xf_interface.h index 1fd07e47f..f62d36450 100644 --- a/server/X11/xf_interface.h +++ b/server/X11/xf_interface.h @@ -20,6 +20,8 @@ #ifndef XFREERDP_SERVER_INTERFACE_H #define XFREERDP_SERVER_INTERFACE_H +#include + #include #include @@ -40,6 +42,8 @@ FREERDP_API int freerdp_server_global_uninit(); FREERDP_API int freerdp_server_start(xfServer* server); FREERDP_API int freerdp_server_stop(xfServer* server); +FREERDP_API HANDLE freerdp_server_get_thread(xfServer* server); + FREERDP_API xfServer* freerdp_server_new(int argc, char** argv); FREERDP_API void freerdp_server_free(xfServer* server);