diff options
author | Henrik Andersson <henrik.andersson@cendio.com> | 2011-06-09 09:13:23 +0000 |
---|---|---|
committer | Henrik Andersson <henrik.andersson@cendio.com> | 2011-06-09 09:13:23 +0000 |
commit | 23029ccd59f9d2b15ea31f88905dd44fb9e81875 (patch) | |
tree | 888c0e6d0a0f8e984d130b8bb51f86a481ea62ba /cmake/Modules | |
parent | 17a48f051071773ede9a348ce8cd64c0790b9774 (diff) | |
download | tigervnc-23029ccd59f9d2b15ea31f88905dd44fb9e81875.tar.gz tigervnc-23029ccd59f9d2b15ea31f88905dd44fb9e81875.zip |
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
Diffstat (limited to 'cmake/Modules')
-rw-r--r-- | cmake/Modules/CMakeMacroLibtoolFile.cmake | 92 |
1 files changed, 92 insertions, 0 deletions
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 |