From a9896fa01b72f260940c3b5df4eec0c1b73dce26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Tue, 28 Mar 2017 20:57:22 +0200 Subject: [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. --- cmake/mbgl.cmake | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'cmake/mbgl.cmake') 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") -- cgit v1.2.1