From a8e309e01d74c8208e34d66d5dcd0e07976c87cc Mon Sep 17 00:00:00 2001 From: David Brown Date: Wed, 18 Nov 2020 15:07:24 -0700 Subject: [PATCH] cmake: Fix added sources to targets In cmake version < 3.0, the SOURCES property on targets cannot be modified after the target is defined. There are several instances in the code that were using `target_properties()`, which is not available in the older versions of cmake. Unfortunately, the workaround in #3801 (381c1078fc) assumes that this SOURCES property can be modified. Work around this by building up any necessary sources before declaring the target. This is more awkward, but needed to continue to be able to support the old versions of cmake. Fixes #3788. Signed-off-by: David Brown --- programs/fuzz/CMakeLists.txt | 20 ++++++++++++-------- programs/ssl/CMakeLists.txt | 8 +++++++- programs/test/CMakeLists.txt | 11 +++++++---- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/programs/fuzz/CMakeLists.txt b/programs/fuzz/CMakeLists.txt index f0e57052a..fd55e31ed 100644 --- a/programs/fuzz/CMakeLists.txt +++ b/programs/fuzz/CMakeLists.txt @@ -32,20 +32,24 @@ set(executables_with_common_c foreach(exe IN LISTS executables_no_common_c executables_with_common_c) - add_executable(${exe} ${exe}.c $) + set(exe_sources ${exe}.c $) + if(NOT FUZZINGENGINE_LIB) + list(APPEND exe_sources onefile.c) + endif() + + # This emulates "if ( ... IN_LIST ... )" which becomes available in CMake 3.3 + list(FIND executables_with_common_c ${exe} exe_index) + if(${exe_index} GREATER -1) + list(APPEND exe_sources common.c) + endif() + + add_executable(${exe} ${exe_sources}) if (NOT FUZZINGENGINE_LIB) target_link_libraries(${exe} ${libs}) - set_property(TARGET ${exe} APPEND PROPERTY SOURCES onefile.c) else() target_link_libraries(${exe} ${libs} FuzzingEngine) SET_TARGET_PROPERTIES(${exe} PROPERTIES LINKER_LANGUAGE CXX) endif() - # This emulates "if ( ... IN_LIST ... )" which becomes available in CMake 3.3 - list(FIND executables_with_common_c ${exe} exe_index) - if (${exe_index} GREATER -1) - set_property(TARGET ${exe} APPEND PROPERTY SOURCES common.c) - endif() - endforeach() diff --git a/programs/ssl/CMakeLists.txt b/programs/ssl/CMakeLists.txt index 149aa303b..31f2ea09d 100644 --- a/programs/ssl/CMakeLists.txt +++ b/programs/ssl/CMakeLists.txt @@ -27,7 +27,13 @@ set(executables ) foreach(exe IN LISTS executables) - add_executable(${exe} ${exe}.c $) + set(extra_sources "") + if(exe STREQUAL "ssl_client2" OR exe STREQUAL "ssl_server2") + list(APPEND extra_sources + ${CMAKE_CURRENT_SOURCE_DIR}/../test/query_config.c) + endif() + add_executable(${exe} ${exe}.c $ + ${extra_sources}) target_link_libraries(${exe} ${libs}) target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include) endforeach() diff --git a/programs/test/CMakeLists.txt b/programs/test/CMakeLists.txt index 49b44e707..2b1e61ebf 100644 --- a/programs/test/CMakeLists.txt +++ b/programs/test/CMakeLists.txt @@ -26,7 +26,13 @@ if(TEST_CPP) endif() foreach(exe IN LISTS executables_libs executables_mbedcrypto) - add_executable(${exe} ${exe}.c $) + set(extra_sources "") + if(exe STREQUAL "query_compile_time_config") + list(APPEND extra_sources + ${CMAKE_CURRENT_SOURCE_DIR}/query_config.c) + endif() + add_executable(${exe} ${exe}.c $ + ${extra_sources}) # This emulates "if ( ... IN_LIST ... )" which becomes available in CMake 3.3 list(FIND executables_libs ${exe} exe_index) @@ -37,9 +43,6 @@ foreach(exe IN LISTS executables_libs executables_mbedcrypto) endif() endforeach() -set_property(TARGET query_compile_time_config APPEND PROPERTY SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/query_config.c) - install(TARGETS ${executables_libs} ${executables_mbedcrypto} DESTINATION "bin" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)