summaryrefslogtreecommitdiffstats
path: root/tools/mkunity
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mkunity')
-rw-r--r--tools/mkunity/CMakeLists.txt47
-rw-r--r--tools/mkunity/mkunity.c20
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;
+}