diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-03-28 20:57:22 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-03-28 21:24:12 +0200 |
commit | a9896fa01b72f260940c3b5df4eec0c1b73dce26 (patch) | |
tree | d446118ec178a61f5be73e4f1662866c80c0c141 | |
parent | c86b492bf7df62f8c09ec565b7ccfb4cd2bfcc79 (diff) | |
download | qtlocation-mapboxgl-a9896fa01b72f260940c3b5df4eec0c1b73dce26.tar.gz |
[build] generate .xcconfig files with configure_file
We previously used incremental `file(WRITE ...)` commands that gradually recreated the file on every CMake invocation. This sometimes lead to Xcode parsing a partially written file, which in turn breaks building dependend targets. Instead, we're now using a templated configuration file, which ensure that the file is created in one go and hopefully reduces the race condition between CMake and Xcode's automatic project updating.
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | cmake/core.cmake | 1 | ||||
-rw-r--r-- | cmake/loop-darwin.cmake | 1 | ||||
-rw-r--r-- | cmake/loop-uv.cmake | 1 | ||||
-rw-r--r-- | cmake/mbgl.cmake | 23 | ||||
-rw-r--r-- | platform/macos/macos.xcodeproj/project.pbxproj | 10 | ||||
-rw-r--r-- | scripts/config.xcconfig.in | 5 |
7 files changed, 25 insertions, 22 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 480c186057..a6ed681bde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,3 +110,9 @@ endif() if(COMMAND mbgl_platform_node) include(cmake/node.cmake) endif() + +if(CMAKE_GENERATOR STREQUAL "Xcode") + write_xcconfig_target_properties( + mbgl-core + ) +endif() diff --git a/cmake/core.cmake b/cmake/core.cmake index 78800a4838..616e43028c 100644 --- a/cmake/core.cmake +++ b/cmake/core.cmake @@ -29,4 +29,3 @@ target_add_mason_package(mbgl-core PRIVATE wagyu) mbgl_platform_core() create_source_groups(mbgl-core) -target_append_xcconfig(mbgl-core) diff --git a/cmake/loop-darwin.cmake b/cmake/loop-darwin.cmake index c16d0de3ac..92ea631809 100644 --- a/cmake/loop-darwin.cmake +++ b/cmake/loop-darwin.cmake @@ -17,4 +17,3 @@ target_include_directories(mbgl-loop-darwin ) create_source_groups(mbgl-loop-darwin) -target_append_xcconfig(mbgl-loop-darwin) diff --git a/cmake/loop-uv.cmake b/cmake/loop-uv.cmake index b7757c719a..0f55fce64c 100644 --- a/cmake/loop-uv.cmake +++ b/cmake/loop-uv.cmake @@ -15,4 +15,3 @@ target_include_directories(mbgl-loop-uv ) create_source_groups(mbgl-loop-uv) -target_append_xcconfig(mbgl-loop-uv) diff --git a/cmake/mbgl.cmake b/cmake/mbgl.cmake index 8c9aa0fe8f..429e4d6172 100644 --- a/cmake/mbgl.cmake +++ b/cmake/mbgl.cmake @@ -85,27 +85,28 @@ macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE) set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE}) endmacro (set_xcode_property) -function(_write_xcconfig_var target var) +function(_get_xcconfig_property target var) get_property(result TARGET ${target} PROPERTY INTERFACE_${var} SET) if (result) get_property(result TARGET ${target} PROPERTY INTERFACE_${var}) string(REPLACE ";" "\" \"" result "${result}") string(REPLACE "-" "_" target "${target}") - file(APPEND "${CMAKE_BINARY_DIR}/config.xcconfig" "${target}_${var} = \"${result}\"\n") + set(${target}_${var} "${result}" PARENT_SCOPE) endif() endfunction() -function(target_append_xcconfig target) - file(APPEND "${CMAKE_BINARY_DIR}/config.xcconfig" "\n// ${target}\n") - _write_xcconfig_var(${target} INCLUDE_DIRECTORIES) - _write_xcconfig_var(${target} COMPILE_DEFINITIONS) - _write_xcconfig_var(${target} COMPILE_OPTIONS) - _write_xcconfig_var(${target} LINK_LIBRARIES) +function(write_xcconfig_target_properties) + foreach(target ${ARGN}) + _get_xcconfig_property(${target} INCLUDE_DIRECTORIES) + _get_xcconfig_property(${target} LINK_LIBRARIES) + endforeach() + configure_file( + "${CMAKE_SOURCE_DIR}/scripts/config.xcconfig.in" + "${CMAKE_BINARY_DIR}/config.xcconfig" + @ONLY + ) endfunction() -# Start a new file when we're running CMake -file(WRITE "${CMAKE_BINARY_DIR}/config.xcconfig" "// Do not edit -- generated by CMake\n") - # CMake 3.1 does not have this yet. set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14") set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14") diff --git a/platform/macos/macos.xcodeproj/project.pbxproj b/platform/macos/macos.xcodeproj/project.pbxproj index 3f6b56ef4f..2c28da298b 100644 --- a/platform/macos/macos.xcodeproj/project.pbxproj +++ b/platform/macos/macos.xcodeproj/project.pbxproj @@ -1725,10 +1725,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_loop_INCLUDE_DIRECTORIES)", - ); + HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; INFOPLIST_FILE = "$(SRCROOT)/sdk/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; @@ -1762,10 +1759,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_loop_INCLUDE_DIRECTORIES)", - ); + HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; INFOPLIST_FILE = "$(SRCROOT)/sdk/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; diff --git a/scripts/config.xcconfig.in b/scripts/config.xcconfig.in new file mode 100644 index 0000000000..eb6bc71b89 --- /dev/null +++ b/scripts/config.xcconfig.in @@ -0,0 +1,5 @@ +// Do not edit -- generated by CMake + +// mbgl-core +mbgl_core_INCLUDE_DIRECTORIES = "@mbgl_core_INCLUDE_DIRECTORIES@" +mbgl_core_LINK_LIBRARIES = "@mbgl_core_LINK_LIBRARIES@" |