# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. # Do NOT include this module directly into any of your code. It is used by # the try_compile() implementation to work around a specific issue with # conflicting flags when building for Apple platforms. if(NOT APPLE) return() endif() cmake_policy(PUSH) cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced function(__cmake_internal_workaround_headerpad_flag_conflict _LANG) # Until we can avoid hard-coding -Wl,-headerpad_max_install_names in the # linker flags, we need to remove it here for cases where we know it will # conflict with other flags, generate a warning and be ignored. set(regex "(^| )(-fembed-bitcode(-marker|=(all|bitcode|marker))?|-bundle_bitcode)($| )") set(remove_headerpad NO) # Check arbitrary flags that the user or project has set. These compiler # flags get added to the linker command line. if("${CMAKE_${_LANG}_FLAGS}" MATCHES "${regex}") set(remove_headerpad YES) endif() if(NOT remove_headerpad) get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(is_multi_config) # Only one of these config-specific variables will be set by try_compile() # and the rest will be unset, but we can't easily tell which one is set. # No harm to just add them all here, empty ones won't add flags to check. foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES) if("${CMAKE_${_LANG}_FLAGS_${config}}" MATCHES "${regex}") set(remove_headerpad YES) break() endif() endforeach() else() if("${CMAKE_${_LANG}_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}") set(remove_headerpad YES) endif() endif() endif() # The try_compile() command passes compiler flags to check in a way that # results in them being added to add_definitions(). Those don't end up on # the linker command line, so we don't need to check them here. if(remove_headerpad) foreach(flag IN ITEMS CMAKE_${_LANG}_LINK_FLAGS CMAKE_SHARED_LIBRARY_CREATE_${_LANG}_FLAGS CMAKE_SHARED_MODULE_CREATE_${_LANG}_FLAGS) string(REPLACE "-Wl,-headerpad_max_install_names" "" ${flag} "${${flag}}") set(${flag} "${${flag}}" PARENT_SCOPE) endforeach() endif() endfunction() get_property(__enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES) foreach(__lang IN LISTS __enabled_languages) __cmake_internal_workaround_headerpad_flag_conflict(${__lang}) endforeach() unset(__lang) unset(__enabled_languages) cmake_policy(POP)