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