# # Copyright(c) 2020 to 2022 ZettaScale Technology and others # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License v. 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License # v. 1.0 which is available at # http://www.eclipse.org/org/documents/edl-v10.php. # # SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause # include(HashUtilities) set(confgen_hash_files ${CMAKE_CURRENT_LIST_DIR}/../../core/ddsi/include/dds/ddsi/ddsi_config.h ${CMAKE_CURRENT_LIST_DIR}/../../core/ddsi/src/ddsi_config.c ${CMAKE_CURRENT_LIST_DIR}/../../core/ddsi/src/ddsi__cfgelems.h cfgunits.h _confgen.h _confgen.c generate_rnc.c generate_md.c generate_rst.c generate_xsd.c generate_defconfig.c ) check_hashes( _confgen_hash_correct HASH_FILES ${confgen_hash_files} APPEND_FILES "${generated_defconfig_src}" ) if (NOT ${_confgen_hash_correct}) if (CMAKE_CROSSCOMPILING) message(FATAL_ERROR "You are crosscompiling but files related to DDS config generation/parsing have been edited." "Please rerun CMake in host mode to regenerate the files before attempting a crossbuild" ) else() message(STATUS "Building _confgen because configuration sources were updated.") endif() add_executable(_confgen-exe _confgen.c generate_rnc.c generate_rst.c generate_md.c generate_xsd.c generate_defconfig.c ${CMAKE_CURRENT_LIST_DIR}/../../core/ddsi/src/ddsi_config.c ) get_cmake_property(_variableNames VARIABLES) foreach (_variableName ${_variableNames}) if(_variableName MATCHES "^ENABLE_([A-Za-z0-9_]+)$") target_compile_definitions(_confgen-exe PUBLIC "DDS_HAS_${CMAKE_MATCH_1}=1") endif() endforeach() target_link_libraries(_confgen-exe PRIVATE ddsrt-internal compat) target_include_directories(_confgen-exe PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include" "${CMAKE_CURRENT_LIST_DIR}/../../core/ddsc/include" "${CMAKE_CURRENT_LIST_DIR}/../../core/ddsi/include" "${CMAKE_CURRENT_LIST_DIR}/../../core/ddsi/src") list(JOIN confgen_hash_files "\;" out_confgen_hash_files) add_custom_target( _confgen COMMENT "Regenerating configuration-dependend files (defconfig.c, cyclonedds.rnc/xsd and markdown/rst documentation)." COMMAND _confgen-exe -f defconfig -o "${generated_defconfig_src}" COMMAND _confgen-exe -f rnc -o "${generated_cyclonedds_rnc}" COMMAND _confgen-exe -f xsd -o "${generated_cyclonedds_xsd}" COMMAND _confgen-exe -f md -o "${generated_options_md}" COMMAND _confgen-exe -f rst -o "${generated_options_rst}" # Append hashes to defconfig.c COMMAND ${CMAKE_COMMAND} "-DPREFIX=/*" "-DPOSTFIX=*/" -DHASH_FILES=${out_confgen_hash_files} -DAPPEND_FILES=${generated_defconfig_src} -P ${CMAKE_SOURCE_DIR}/cmake/AppendHashScript.cmake # Append hashes to rnc COMMAND ${CMAKE_COMMAND} "-DPREFIX=#" "-DPOSTFIX=" -DHASH_FILES=${out_confgen_hash_files} -DAPPEND_FILES=${generated_cyclonedds_rnc} -P ${CMAKE_SOURCE_DIR}/cmake/AppendHashScript.cmake # Append hashes to xsd COMMAND ${CMAKE_COMMAND} "-DPREFIX=" -DHASH_FILES=${out_confgen_hash_files} -DAPPEND_FILES=${generated_cyclonedds_xsd} -P ${CMAKE_SOURCE_DIR}/cmake/AppendHashScript.cmake # Append hashes to md COMMAND ${CMAKE_COMMAND} "-DPREFIX=" -DHASH_FILES=${out_confgen_hash_files} -DAPPEND_FILES=${generated_options_md} -P ${CMAKE_SOURCE_DIR}/cmake/AppendHashScript.cmake # Append hashes to rst COMMAND ${CMAKE_COMMAND} "-DBEFORE='..'" "-DPREFIX=' '" "-DPOSTFIX=" -DHASH_FILES=${out_confgen_hash_files} -DAPPEND_FILES=${generated_options_rst} -P ${CMAKE_SOURCE_DIR}/cmake/AppendHashScript.cmake DEPENDS _confgen SOURCES ${confgen_hash_files} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM ) else() add_custom_target( _confgen ) endif()