From: Henrik Andersson Date: Thu, 9 Jun 2011 09:13:23 +0000 (+0000) Subject: Building the Xvnc server requires libtool control files of rdr, rfb, X-Git-Tag: v1.1.90~298 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=23029ccd59f9d2b15ea31f88905dd44fb9e81875;p=tigervnc.git Building the Xvnc server requires libtool control files of rdr, rfb, network and Xregion, which a cmake build will NOT produce, this macro tries to create a libtool control file *.la for the specified target with libdependencies for a static library target. Due to the automake part of Xvnc references to libtool files in source tree you need to build vncviewer using cmake in the source tree. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4482 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 33606267..6fc3514d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ include(CheckTypeSize) include(CheckCSourceCompiles) include(CheckCXXSourceCompiles) +include(CMakeMacroLibtoolFile) + project(tigervnc) set(VERSION 1.0.90) diff --git a/cmake/Modules/CMakeMacroLibtoolFile.cmake b/cmake/Modules/CMakeMacroLibtoolFile.cmake new file mode 100644 index 00000000..514793e5 --- /dev/null +++ b/cmake/Modules/CMakeMacroLibtoolFile.cmake @@ -0,0 +1,92 @@ +macro(libtool_create_control_file _target) + # Get target properties to fill into control file + get_target_property(_target_location ${_target} LOCATION) + get_target_property(_target_type ${_target} TYPE) + + message("-- Creating static libtool control file for target ${_target}") + # No support for shared libraries as tigervnc only needs libtool config files + # for static libraries + if("${_target_type}" MATCHES "^[^STATIC_LIBRARY]$") + message(ERROR " - trying to use libtool_create_control_file on non static library target.") + endif() + + # + # Parse the target_LIB_DEPENDS of libraries to put into libtool control file + # as library dependencies and handle a few corners... + # + foreach(library ${${_target}_LIB_DEPENDS}) + # Assume all entries as shared if not platform specific static library + # extension is matched + if("${library}" MATCHES "[^.+\\${CMAKE_STATIC_LIBRARY_SUFFIX}]$") + # Check if we have shared extenstion or not + if("${library}" MATCHES ".+\\${CMAKE_SHARED_LIBRARY_SUFFIX}$") + # We got an shared library lets cut it down to path and library name then + # add to libtool dependency libs, we always assume this is a absoult path + # because this is how cmake does.. + get_filename_component(_shared_lib ${library} NAME_WE) + get_filename_component(_shared_lib_path ${library} PATH) + string(REPLACE "lib" "" _shared_lib ${_shared_lib}) + set(_target_dependency_libs "${_target_dependency_libs} -L${_shared_lib_path} -l${_shared_lib}") + else() + # No shared library suffix found, might also be a cmake target. + # Dont continue if we have a target name as lib due to we + # assume static linkage against out targets + get_target_property(_ltp ${library} TYPE) + if(${_ltp}) + # No cmake target soo let's use find_library to see if we found any useful to use + find_library(FL ${library}) + if(FL) + # Found library, lets cut it down to make libtool happy + get_filename_component(_shared_lib ${FL} NAME_WE) + get_filename_component(_shared_lib_path ${FL} PATH) + string(REPLACE "lib" "" _shared_lib ${_shared_lib}) + set(_target_dependency_libs "${_target_dependency_libs} -L${_share_lib_path} -l${_shared_lib}") + else() + # Nothing found, lets ignore it + endif() + else() + # taget detected lets ignore it + endif() + endif() + else() + # Detected a static library, we want the absolute path so lets check if we have that + # if not try use find_library to get one + get_filename_component(_name ${library} NAME) + string(REPLACE "${_name}" "" _path ${library}) + if(NOT "${_path}" MATCHES "") + # We got a full path to static library lets add as is to libtool library dependencies + set(_target_dependency_libs "${_target_dependency_libs} ${library}") + else() + # there no path for the static library lets use find_library to find one + find_library(FL ${library}) + if(FL) + # got the library lets add it.. + set(_target_dependency_libs "${_target_dependency_libs} ${FL}") + else() + # Nothing found, let's ignore it + endif() + endif() + endif() + endforeach() + + # Write the libtool control file for static library + get_filename_component(_lname ${_target_location} NAME_WE) + set(_laname ${CMAKE_CURRENT_BINARY_DIR}/${_lname}.la) + + file(WRITE ${_laname} "# ${_lname}.la - a libtool library file\n# Generated by ltmain.sh (GNU libtool) 2.2.6b\n") + file(APPEND ${_laname} "dlname=''\n\n") + file(APPEND ${_laname} "library_names=''\n\n") + file(APPEND ${_laname} "old_library='${_lname}.a'\n\n") + file(APPEND ${_laname} "inherited_linker_flags=''\n\n") + file(APPEND ${_laname} "dependency_libs=' ${_target_dependency_libs}'\n\n") + file(APPEND ${_laname} "weak_library_names=''\n\n") + file(APPEND ${_laname} "current=\n") + file(APPEND ${_laname} "age=\n") + file(APPEND ${_laname} "revision=\n\n") + file(APPEND ${_laname} "installed=no\n\n") + file(APPEND ${_laname} "shouldnotlink=no\n\n") + file(APPEND ${_laname} "dlopen=''\n") + file(APPEND ${_laname} "dlpreopen=''\n\n") + file(APPEND ${_laname} "libdir=''\n\n") + +endmacro() \ No newline at end of file diff --git a/common/Xregion/CMakeLists.txt b/common/Xregion/CMakeLists.txt index d12554c4..4cc4f0dd 100644 --- a/common/Xregion/CMakeLists.txt +++ b/common/Xregion/CMakeLists.txt @@ -1,2 +1,4 @@ add_library(Xregion STATIC Region.c) + +libtool_create_control_file(Xregion) diff --git a/common/network/CMakeLists.txt b/common/network/CMakeLists.txt index 2afba7c0..9f664de8 100644 --- a/common/network/CMakeLists.txt +++ b/common/network/CMakeLists.txt @@ -2,3 +2,5 @@ include_directories(${CMAKE_SOURCE_DIR}/common) add_library(network STATIC TcpSocket.cxx) + +libtool_create_control_file(network) diff --git a/common/rdr/CMakeLists.txt b/common/rdr/CMakeLists.txt index ac4313c9..6557932d 100644 --- a/common/rdr/CMakeLists.txt +++ b/common/rdr/CMakeLists.txt @@ -23,3 +23,5 @@ if(GNUTLS_FOUND) endif() target_link_libraries(rdr ${RDR_LIBRARIES}) + +libtool_create_control_file(rdr) diff --git a/common/rfb/CMakeLists.txt b/common/rfb/CMakeLists.txt index 70d52c03..4ca93499 100644 --- a/common/rfb/CMakeLists.txt +++ b/common/rfb/CMakeLists.txt @@ -87,3 +87,5 @@ endif() add_library(rfb STATIC ${RFB_SOURCES}) target_link_libraries(rfb ${RFB_LIBRARIES}) + +libtool_create_control_file(rfb)