Browse Source

Handle static linking flags in .la files

tags/v1.3.90
Pierre Ossman 9 years ago
parent
commit
881a8e27fc
1 changed files with 28 additions and 11 deletions
  1. 28
    11
      cmake/Modules/CMakeMacroLibtoolFile.cmake

+ 28
- 11
cmake/Modules/CMakeMacroLibtoolFile.cmake View File

@@ -26,6 +26,8 @@ macro(libtool_create_control_file _target)
endif()
endforeach()

set(STATIC_MODE OFF)

foreach(library ${target_libs})
# Assume all entries are shared libs if platform-specific static library
# extension is not matched.
@@ -43,8 +45,17 @@ macro(libtool_create_control_file _target)
# No shared library extension matched. Check whether target is a CMake
# target.
get_target_property(_ltp ${library} TYPE)
if(NOT _ltp AND NOT ${library} STREQUAL "general")
# Not a CMake target, so use find_library() to attempt to locate the
if(_ltp OR ${library} STREQUAL "general")
# Target is a CMake target, so ignore (CMake targets are static
# libs in TigerVNC.)
elseif(${library} STREQUAL "-Wl,-Bstatic")
# All following libraries should be static
set(STATIC_MODE ON)
elseif(${library} STREQUAL "-Wl,-Bdynamic")
# All following libraries should be dynamic
set(STATIC_MODE OFF)
else()
# Normal library, so use find_library() to attempt to locate the
# library in a system directory.

# Need to remove -l prefix
@@ -52,22 +63,28 @@ macro(libtool_create_control_file _target)
string(REPLACE ${CMAKE_LINK_LIBRARY_FLAG} "" library ${library})
endif()

if(STATIC_MODE)
set(library ${CMAKE_STATIC_LIBRARY_PREFIX}${library}${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()

find_library(FL ${library})
if(FL)
# Found library, so extract the path and library name, then add the
# Found library. Depending on if it's static or not we might
# extract the path and library name, then add the
# result to the libtool dependency libs.
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${_shared_lib_path} -l${_shared_lib}")
if(STATIC_MODE)
set(_target_dependency_libs "${_target_dependency_libs} ${FL}")
else()
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${_shared_lib_path} -l${_shared_lib}")
endif()
else()
# No shared library found, so ignore target.
# No library found, so ignore target.
endif()
# Need to clear FL to get new results next loop
unset(FL CACHE)
else()
# Target is a CMake target, so ignore if (CMake targets are static
# libs in TigerVNC.)
endif()
endif()
else()

Loading…
Cancel
Save