xref: /openbsd-src/gnu/llvm/compiler-rt/cmake/Modules/UseLibtool.cmake (revision d89ec533011f513df1010f142a111086a0785f09)
13cab2bb3Spatrick# if CMAKE_LIBTOOL is not set, try and find it with xcrun or find_program
23cab2bb3Spatrickif(NOT CMAKE_LIBTOOL)
33cab2bb3Spatrick  if(NOT CMAKE_XCRUN)
43cab2bb3Spatrick    find_program(CMAKE_XCRUN NAMES xcrun)
53cab2bb3Spatrick  endif()
63cab2bb3Spatrick  if(CMAKE_XCRUN)
73cab2bb3Spatrick    execute_process(COMMAND ${CMAKE_XCRUN} -find libtool
83cab2bb3Spatrick      OUTPUT_VARIABLE CMAKE_LIBTOOL
93cab2bb3Spatrick      OUTPUT_STRIP_TRAILING_WHITESPACE)
103cab2bb3Spatrick  endif()
113cab2bb3Spatrick
123cab2bb3Spatrick  if(NOT CMAKE_LIBTOOL OR NOT EXISTS CMAKE_LIBTOOL)
133cab2bb3Spatrick    find_program(CMAKE_LIBTOOL NAMES libtool)
143cab2bb3Spatrick  endif()
153cab2bb3Spatrickendif()
163cab2bb3Spatrick
173cab2bb3Spatrickget_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
183cab2bb3Spatrickif(CMAKE_LIBTOOL)
193cab2bb3Spatrick  set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable")
203cab2bb3Spatrick  message(STATUS "Found libtool - ${CMAKE_LIBTOOL}")
213cab2bb3Spatrick
223cab2bb3Spatrick  execute_process(COMMAND ${CMAKE_LIBTOOL} -V
233cab2bb3Spatrick    OUTPUT_VARIABLE LIBTOOL_V_OUTPUT
243cab2bb3Spatrick    OUTPUT_STRIP_TRAILING_WHITESPACE)
253cab2bb3Spatrick  if("${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*")
263cab2bb3Spatrick    string(REGEX REPLACE ".*cctools-([0-9.]+).*" "\\1" LIBTOOL_VERSION
273cab2bb3Spatrick      ${LIBTOOL_V_OUTPUT})
283cab2bb3Spatrick    if(NOT LIBTOOL_VERSION VERSION_LESS "862")
293cab2bb3Spatrick      set(LIBTOOL_NO_WARNING_FLAG "-no_warning_for_no_symbols")
303cab2bb3Spatrick    endif()
313cab2bb3Spatrick  endif()
323cab2bb3Spatrick
333cab2bb3Spatrick  foreach(lang ${languages})
343cab2bb3Spatrick    set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
353cab2bb3Spatrick      "\"${CMAKE_LIBTOOL}\" -static ${LIBTOOL_NO_WARNING_FLAG} -o <TARGET> <LINK_FLAGS> <OBJECTS>")
363cab2bb3Spatrick  endforeach()
37*d89ec533Spatrick
38*d89ec533Spatrick  # By default, CMake invokes ranlib on a static library after installing it.
39*d89ec533Spatrick  # libtool will have produced the table of contents for us already, and ranlib
40*d89ec533Spatrick  # does not understanding universal binaries, so skip this step. It's important
41*d89ec533Spatrick  # to set it to empty instead of unsetting it to shadow the cache variable, and
42*d89ec533Spatrick  # we don't want to unset the cache variable to not affect anything outside
43*d89ec533Spatrick  # this scope.
44*d89ec533Spatrick  set(CMAKE_RANLIB "")
453cab2bb3Spatrickendif()
463cab2bb3Spatrick
473cab2bb3Spatrick# If DYLD_LIBRARY_PATH is set we need to set it on archiver commands
483cab2bb3Spatrickif(DYLD_LIBRARY_PATH)
493cab2bb3Spatrick  set(dyld_envar "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}")
503cab2bb3Spatrick  foreach(lang ${languages})
513cab2bb3Spatrick    foreach(cmd ${CMAKE_${lang}_CREATE_STATIC_LIBRARY})
523cab2bb3Spatrick      list(APPEND CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW
533cab2bb3Spatrick           "${dyld_envar} ${cmd}")
543cab2bb3Spatrick    endforeach()
553cab2bb3Spatrick    set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
563cab2bb3Spatrick      ${CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW})
573cab2bb3Spatrick  endforeach()
583cab2bb3Spatrickendif()
59