diff --git a/CMakeLists.txt b/CMakeLists.txt index 94464907de1..7a51c3e4fcd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,10 +9,16 @@ # - CMake 3.26.5, https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/ cmake_minimum_required(VERSION 3.22) -if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "In-source builds are not allowed.") endif() +if(POLICY CMP0171) + # `codegen` is a reserved target name. + # See: https://cmake.org/cmake/help/latest/policy/CMP0171.html + cmake_policy(SET CMP0171 NEW) +endif() + #============================= # Project / Package metadata #============================= diff --git a/cmake/module/TargetDataSources.cmake b/cmake/module/TargetDataSources.cmake index a1abd25a7c6..a549f9a2dfc 100644 --- a/cmake/module/TargetDataSources.cmake +++ b/cmake/module/TargetDataSources.cmake @@ -7,6 +7,14 @@ macro(set_add_custom_command_options) if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.27) set(DEPENDS_EXPLICIT_OPT DEPENDS_EXPLICIT_ONLY) endif() + set(CODEGEN_OPT "") + if(POLICY CMP0171) + cmake_policy(GET CMP0171 _cmp0171_status) + if(_cmp0171_status STREQUAL "NEW") + set(CODEGEN_OPT CODEGEN) + endif() + unset(_cmp0171_status) + endif() endmacro() # Specifies JSON data files to be processed into corresponding @@ -20,6 +28,7 @@ function(target_json_data_sources target) COMMAND ${CMAKE_COMMAND} -DJSON_SOURCE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/${json_file} -DHEADER_PATH=${header} -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromJson.cmake DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${json_file} ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromJson.cmake VERBATIM + ${CODEGEN_OPT} ${DEPENDS_EXPLICIT_OPT} ) target_sources(${target} PRIVATE ${header}) @@ -38,6 +47,7 @@ function(target_raw_data_sources target) COMMAND ${CMAKE_COMMAND} -DRAW_SOURCE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/${raw_file} -DHEADER_PATH=${header} -DRAW_NAMESPACE=${__NAMESPACE} -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromRaw.cmake DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${raw_file} ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromRaw.cmake VERBATIM + ${CODEGEN_OPT} ${DEPENDS_EXPLICIT_OPT} ) target_sources(${target} PRIVATE ${header})