diff --git a/src/cmake/messages.cmake b/src/cmake/messages.cmake index 18d6d67c55c..d31e2814aff 100644 --- a/src/cmake/messages.cmake +++ b/src/cmake/messages.cmake @@ -95,3 +95,65 @@ function(messages) WORKING_DIRECTORY ${SOURCE_DIR} ) endfunction() + +function(messages_multi) + + # Parse args + set(options LOCAL) + set(oneValueArgs TARGET OUTPUT_DIR SOURCE_DIR) + set(multiValueArgs DEPENDS) + + cmake_parse_arguments( + ARG # prefix on the parsed args + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ${ARGN} + ) + + # Validate args + if (DEFINED ARG_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown argument(s) to swig_lib: ${ARG_UNPARSED_ARGUMENTS}") + endif() + + if (DEFINED ARG_KEYWORDS_MISSING_VALUES) + message(FATAL_ERROR "Missing value for argument(s) to swig_lib: ${ARG_KEYWORDS_MISSING_VALUES}") + endif() + + if (NOT DEFINED ARG_TARGET) + message(FATAL_ERROR "TARGET argument must be provided to messages") + endif() + + if (DEFINED ARG_OUTPUT_DIR) + set(OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_OUTPUT_DIR}) + set(OUTPUT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/${ARG_OUTPUT_DIR}) + else() + set(OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + set(OUTPUT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + if (DEFINED ARG_SOURCE_DIR) + set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_SOURCE_DIR}) + else() + set(SOURCE_DIR ${OUTPUT_DIR}) + endif() + + if (${ARG_LOCAL}) + set(local '--local') + endif() + + add_custom_command( + OUTPUT messages_checked + COMMAND ${CMAKE_SOURCE_DIR}/etc/find_messages.py + ${local} + > ${OUTPUT_DIR}/messages.txt + && touch ${OUTPUT_BUILD_DIR}/messages_checked + WORKING_DIRECTORY ${SOURCE_DIR} + DEPENDS ${ARG_DEPS} + ) + + add_custom_target(${ARG_TARGET}_messages DEPENDS messages_checked) + + add_dependencies(${ARG_TARGET} ${ARG_TARGET}_messages) + +endfunction() diff --git a/src/cts/src/CMakeLists.txt b/src/cts/src/CMakeLists.txt index cf626b11c65..de5d91197e7 100644 --- a/src/cts/src/CMakeLists.txt +++ b/src/cts/src/CMakeLists.txt @@ -99,8 +99,9 @@ target_link_libraries(cts gui ) -messages( +messages_multi( TARGET cts + DEPENDS cts_lib OUTPUT_DIR .. )