From aea8d18739e062ce2eea7714b40fdb9ee0223cae Mon Sep 17 00:00:00 2001 From: Nils Wentzell Date: Fri, 15 May 2020 14:43:08 -0400 Subject: [PATCH] [cmake] In extract_flags allow extraction of BUILD_INTERFACE flags --- doc/CMakeLists.txt | 2 +- share/cmake/extract_flags.cmake | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index d2b8576c..8bf5b0bd 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -6,7 +6,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in ${CMAKE_CURRENT_BINARY_DIR # ----------------------------------------------------------------------------- add_custom_target(${PROJECT_NAME}_docs_cpp2rst) include(${PROJECT_SOURCE_DIR}/share/cmake/extract_flags.cmake) -extract_flags(app4triqs_c) +extract_flags(app4triqs_c BUILD_INTERFACE) separate_arguments(app4triqs_c_CXXFLAGS) macro(generate_docs header_file) add_custom_command( diff --git a/share/cmake/extract_flags.cmake b/share/cmake/extract_flags.cmake index 0b83247f..dfcf67b0 100644 --- a/share/cmake/extract_flags.cmake +++ b/share/cmake/extract_flags.cmake @@ -51,7 +51,13 @@ macro(get_property_recursive) endmacro() # Recursively fetch all compiler flags attached to the interface of a target -macro(extract_flags target) +macro(extract_flags) + + cmake_parse_arguments(ARG "BUILD_INTERFACE" "" "" ${ARGN}) + + set(target ${ARGV0}) + unset(${target}_CXXFLAGS) + unset(${target}_LDFLAGS) get_property_recursive(opts TARGET ${target} PROPERTY INTERFACE_COMPILE_OPTIONS) foreach(opt ${opts}) @@ -84,8 +90,13 @@ macro(extract_flags target) endforeach() # We have to replace generator expressions explicitly - string(REGEX REPLACE "\\$" "\\1" ${target}_LDFLAGS "${${target}_LDFLAGS}") - string(REGEX REPLACE "\\$" "\\1" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") + if(ARG_BUILD_INTERFACE) + string(REGEX REPLACE "\\$" "\\1" ${target}_LDFLAGS "${${target}_LDFLAGS}") + string(REGEX REPLACE "\\$" "\\1" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") + else() + string(REGEX REPLACE "\\$" "\\1" ${target}_LDFLAGS "${${target}_LDFLAGS}") + string(REGEX REPLACE "\\$" "\\1" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") + endif() string(REGEX REPLACE " [^ ]*\\$<[^ ]*:[^>]*>" "" ${target}_LDFLAGS "${${target}_LDFLAGS}") string(REGEX REPLACE " [^ ]*\\$<[^ ]*:[^>]*>" "" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") endmacro()