xref: /netbsd-src/external/apache2/llvm/dist/llvm/cmake/modules/UseLibtool.cmake (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1*7330f729Sjoerg# if CMAKE_LIBTOOL is not set, try and find it with xcrun or find_program
2*7330f729Sjoergif(NOT CMAKE_LIBTOOL)
3*7330f729Sjoerg  if(NOT CMAKE_XCRUN)
4*7330f729Sjoerg    find_program(CMAKE_XCRUN NAMES xcrun)
5*7330f729Sjoerg  endif()
6*7330f729Sjoerg  if(CMAKE_XCRUN)
7*7330f729Sjoerg    execute_process(COMMAND ${CMAKE_XCRUN} -find libtool
8*7330f729Sjoerg      OUTPUT_VARIABLE CMAKE_LIBTOOL
9*7330f729Sjoerg      OUTPUT_STRIP_TRAILING_WHITESPACE)
10*7330f729Sjoerg  endif()
11*7330f729Sjoerg
12*7330f729Sjoerg  if(NOT CMAKE_LIBTOOL OR NOT EXISTS CMAKE_LIBTOOL)
13*7330f729Sjoerg    find_program(CMAKE_LIBTOOL NAMES libtool)
14*7330f729Sjoerg  endif()
15*7330f729Sjoergendif()
16*7330f729Sjoerg
17*7330f729Sjoergget_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
18*7330f729Sjoergif(CMAKE_LIBTOOL)
19*7330f729Sjoerg  set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable")
20*7330f729Sjoerg  message(STATUS "Found libtool - ${CMAKE_LIBTOOL}")
21*7330f729Sjoerg
22*7330f729Sjoerg  execute_process(COMMAND ${CMAKE_LIBTOOL} -V
23*7330f729Sjoerg    OUTPUT_VARIABLE LIBTOOL_V_OUTPUT
24*7330f729Sjoerg    OUTPUT_STRIP_TRAILING_WHITESPACE)
25*7330f729Sjoerg  if("${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*")
26*7330f729Sjoerg    string(REGEX REPLACE ".*cctools-([0-9.]+).*" "\\1" LIBTOOL_VERSION
27*7330f729Sjoerg      ${LIBTOOL_V_OUTPUT})
28*7330f729Sjoerg    if(NOT LIBTOOL_VERSION VERSION_LESS "862")
29*7330f729Sjoerg      set(LIBTOOL_NO_WARNING_FLAG "-no_warning_for_no_symbols")
30*7330f729Sjoerg    endif()
31*7330f729Sjoerg  endif()
32*7330f729Sjoerg
33*7330f729Sjoerg  foreach(lang ${languages})
34*7330f729Sjoerg    set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
35*7330f729Sjoerg      "\"${CMAKE_LIBTOOL}\" -static ${LIBTOOL_NO_WARNING_FLAG} -o <TARGET> <LINK_FLAGS> <OBJECTS>")
36*7330f729Sjoerg  endforeach()
37*7330f729Sjoergendif()
38*7330f729Sjoerg
39*7330f729Sjoerg# If DYLD_LIBRARY_PATH is set we need to set it on archiver commands
40*7330f729Sjoergif(DYLD_LIBRARY_PATH)
41*7330f729Sjoerg  set(dyld_envar "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}")
42*7330f729Sjoerg  foreach(lang ${languages})
43*7330f729Sjoerg    foreach(cmd ${CMAKE_${lang}_CREATE_STATIC_LIBRARY})
44*7330f729Sjoerg      list(APPEND CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW
45*7330f729Sjoerg           "${dyld_envar} ${cmd}")
46*7330f729Sjoerg    endforeach()
47*7330f729Sjoerg    set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
48*7330f729Sjoerg      ${CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW})
49*7330f729Sjoerg  endforeach()
50*7330f729Sjoergendif()
51