summaryrefslogtreecommitdiffstats
path: root/tools/mkunity/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mkunity/CMakeLists.txt')
-rw-r--r--tools/mkunity/CMakeLists.txt47
1 files changed, 47 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()