[cmake-developers] [PATCH 4/5] Add XCTest helper utilities
Gregor Jasny
gjasny at googlemail.com
Sat Feb 14 15:32:58 EST 2015
Signed-off-by: Gregor Jasny <gjasny at googlemail.com>
---
Modules/XCTestUtilities.cmake | 58 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
create mode 100644 Modules/XCTestUtilities.cmake
diff --git a/Modules/XCTestUtilities.cmake b/Modules/XCTestUtilities.cmake
new file mode 100644
index 0000000..6b1de92
--- /dev/null
+++ b/Modules/XCTestUtilities.cmake
@@ -0,0 +1,58 @@
+function(add_xctest target testee)
+
+ if(NOT CMAKE_OSX_SYSROOT)
+ message(STATUS "Adding XCTest bundles requires CMAKE_OSX_SYSROOT to be set.")
+ endif()
+
+ # check that testee is a valid target type
+ get_target_property(TESTEE_TYPE ${testee} TYPE)
+ get_target_property(TESTEE_FRAMEWORK ${testee} FRAMEWORK)
+ if(TESTEE_TYPE STREQUAL "SHARED_LIBRARY" AND TESTEE_FRAMEWORK)
+ # found a framework
+ else()
+ message(FATAL_ERROR "Testee ${testee} is of unsupported type: ${TESTEE_TYPE}")
+ endif()
+
+ add_library(${target} MODULE ${ARGN})
+
+ set_target_properties(${target} PROPERTIES
+ BUNDLE TRUE
+ XCTEST TRUE)
+
+ find_library(FOUNDATION_LIBRARY Foundation)
+ if(NOT FOUNDATION_LIBRARY)
+ message(STATUS "Could not find Foundation Framework.")
+ endif()
+
+ find_library(XCTEST_LIBRARY XCTest)
+ if(NOT XCTEST_LIBRARY)
+ message(STATUS "Could not find XCTest Framework.")
+ endif()
+
+ target_link_libraries(${target} PRIVATE ${testee} ${FOUNDATION_LIBRARY} ${XCTEST_LIBRARY})
+
+ # set rpath to find testee
+ target_link_libraries(${target} PRIVATE "${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}$<TARGET_LINKER_FILE_DIR:${testee}>")
+endfunction(add_xctest)
+
+function(add_test_xctest target)
+ get_target_property(TARGET_TYPE ${target} TYPE)
+ get_target_property(TARGET_XCTEST ${target} XCTEST)
+
+ if(NOT TARGET_TYPE STREQUAL "MODULE_LIBRARY" OR NOT TARGET_XCTEST)
+ message(FATAL_ERROR "Test ${target} is not a XCTest")
+ endif()
+
+ execute_process(
+ COMMAND xcrun --find xctest
+ OUTPUT_VARIABLE XCTEST_EXECUTABLE
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(NOT XCTEST_EXECUTABLE)
+ message(STATUS "Unable to finc xctest binary.")
+ endif()
+
+ add_test(
+ NAME FrameworkExampleTests
+ COMMAND ${XCTEST_EXECUTABLE} $<TARGET_LINKER_FILE_DIR:${target}>/../..)
+endfunction(add_test_xctest)
\ No newline at end of file
--
2.3.0
More information about the cmake-developers
mailing list