diff options
Diffstat (limited to 'tools/mkunity')
-rw-r--r-- | tools/mkunity/CMakeLists.txt | 47 | ||||
-rw-r--r-- | tools/mkunity/mkunity.c | 20 |
2 files changed, 67 insertions, 0 deletions
diff --git a/tools/mkunity/CMakeLists.txt b/tools/mkunity/CMakeLists.txt new file mode 100644 index 0000000..8fa0f20 --- /dev/null +++ b/tools/mkunity/CMakeLists.txt @@ -0,0 +1,47 @@ +# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ + +define_property( + SOURCE + PROPERTY EXCLUDE_UNITY_BUILD + BRIEF_DOCS "Whether to exclude the source file from unity builds" + FULL_DOCS "Specified whether a source file should be excluded from unity builds and should be built separately" +) + +if(ICINGA2_UNITY_BUILD) + set(mkunity_SOURCES + mkunity.c + ) + + add_executable(mkunity ${mkunity_SOURCES}) + + set_target_properties ( + mkunity PROPERTIES + FOLDER Bin + ) + + function(MKUNITY_TARGET Target Prefix UnityInputRef) + set(UnityInput ${${UnityInputRef}}) + set(UnityOutput ${CMAKE_CURRENT_BINARY_DIR}/${Target}_unity.cpp) + set(RealSources "") + set(UnitySources "") + foreach(UnitySource ${UnityInput}) + get_property(SourceExcluded SOURCE ${UnitySource} PROPERTY EXCLUDE_UNITY_BUILD) + if(SourceExcluded MATCHES TRUE OR NOT ${UnitySource} MATCHES "\\.(cpp|cxx|cc)\$") + list(APPEND RealSources ${UnitySource}) + else() + list(APPEND UnitySources ${UnitySource}) + endif() + endforeach() + add_custom_command( + OUTPUT ${UnityOutput} + COMMAND mkunity + ARGS ${Prefix} ${UnitySources} > ${UnityOutput}.tmp + COMMAND ${CMAKE_COMMAND} + ARGS -E copy ${UnityOutput}.tmp ${UnityOutput} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS mkunity ${UnitySources} + ) + list(APPEND RealSources ${UnityOutput}) + set(${UnityInputRef} ${RealSources} PARENT_SCOPE) + endfunction() +endif() diff --git a/tools/mkunity/mkunity.c b/tools/mkunity/mkunity.c new file mode 100644 index 0000000..cf36f60 --- /dev/null +++ b/tools/mkunity/mkunity.c @@ -0,0 +1,20 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#include <stdlib.h> +#include <stdio.h> + +int main(int argc, char **argv) +{ + int i; + + if (argc < 3) { + fprintf(stderr, "Syntax: %s <prefix> [<file> ...]\n", argv[0]); + return EXIT_FAILURE; + } + + for (i = 2; i < argc; i++) { + printf("#include \"%s/%s\"\n", argv[1], argv[i]); + } + + return EXIT_SUCCESS; +} |