/usr/share/cmake-3.5/Modules/FindXCTest.cmake is in cmake-data 3.5.1-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | #[=======================================================================[.rst:
FindXCTest
----------
Functions to help creating and executing XCTest bundles.
An XCTest bundle is a CFBundle with a special product-type
and bundle extension. The Mac Developer Library provides more
information in the `Testing with Xcode`_ document.
.. _Testing with Xcode: http://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/
Module Functions
^^^^^^^^^^^^^^^^
.. command:: xctest_add_bundle
The ``xctest_add_bundle`` function creates a XCTest bundle named
<target> which will test the target <testee>. Supported target types
for testee are Frameworks and App Bundles::
xctest_add_bundle(
<target> # Name of the XCTest bundle
<testee> # Target name of the testee
)
.. command:: xctest_add_test
The ``xctest_add_test`` function adds an XCTest bundle to the
project to be run by :manual:`ctest(1)`. The test will be named
<name> and tests <bundle>::
xctest_add_test(
<name> # Test name
<bundle> # Target name of XCTest bundle
)
Module Variables
^^^^^^^^^^^^^^^^
The following variables are set by including this module:
.. variable:: XCTest_FOUND
True if the XCTest Framework and executable were found.
.. variable:: XCTest_EXECUTABLE
The path to the xctest command line tool used to execute XCTest bundles.
.. variable:: XCTest_INCLUDE_DIRS
The directory containing the XCTest Framework headers.
.. variable:: XCTest_LIBRARIES
The location of the XCTest Framework.
#]=======================================================================]
#=============================================================================
# Copyright 2015 Gregor Jasny
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
find_path(XCTest_INCLUDE_DIR
NAMES "XCTest/XCTest.h"
DOC "XCTest include directory")
mark_as_advanced(XCTest_INCLUDE_DIR)
find_library(XCTest_LIBRARY
NAMES XCTest
DOC "XCTest Framework library")
mark_as_advanced(XCTest_LIBRARY)
execute_process(
COMMAND xcrun --find xctest
OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_VARIABLE _xcrun_err)
if(_xcrun_out)
set(XCTest_EXECUTABLE "${_xcrun_out}" CACHE FILEPATH "XCTest executable")
mark_as_advanced(XCTest_EXECUTABLE)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
find_package_handle_standard_args(XCTest
FOUND_VAR XCTest_FOUND
REQUIRED_VARS XCTest_LIBRARY XCTest_INCLUDE_DIR XCTest_EXECUTABLE)
if(XCTest_FOUND)
set(XCTest_INCLUDE_DIRS "${XCTest_INCLUDE_DIR}")
set(XCTest_LIBRARIES "${XCTest_LIBRARY}")
endif(XCTest_FOUND)
function(xctest_add_bundle target testee)
if(NOT XCTest_FOUND)
message(FATAL_ERROR "XCTest is required to create a XCTest Bundle.")
endif(NOT XCTest_FOUND)
if(NOT CMAKE_OSX_SYSROOT)
message(FATAL_ERROR "Adding XCTest bundles requires CMAKE_OSX_SYSROOT to be set.")
endif()
add_library(${target} MODULE ${ARGN})
set_target_properties(${target} PROPERTIES
BUNDLE TRUE
XCTEST TRUE
XCTEST_TESTEE ${testee})
target_link_libraries(${target} PRIVATE "-framework Foundation")
target_link_libraries(${target} PRIVATE ${XCTest_LIBRARIES})
target_include_directories(${target} PRIVATE ${XCTest_INCLUDE_DIRS})
# retrieve testee target type
if(NOT TARGET ${testee})
message(FATAL_ERROR "${testee} is not a target.")
endif()
get_property(_testee_type TARGET ${testee} PROPERTY TYPE)
get_property(_testee_framework TARGET ${testee} PROPERTY FRAMEWORK)
get_property(_testee_macosx_bundle TARGET ${testee} PROPERTY MACOSX_BUNDLE)
if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
# testee is a Framework
target_link_libraries(${target} PRIVATE ${testee})
elseif(_testee_type STREQUAL "EXECUTABLE" AND _testee_macosx_bundle)
# testee is an App Bundle
add_dependencies(${target} ${testee})
if(XCODE)
set_target_properties(${target} PROPERTIES
XCODE_ATTRIBUTE_BUNDLE_LOADER "$(TEST_HOST)"
XCODE_ATTRIBUTE_TEST_HOST "$<TARGET_FILE:${testee}>")
else(XCODE)
target_link_libraries(${target}
PRIVATE -bundle_loader $<TARGET_FILE:${testee}>)
endif(XCODE)
else()
message(FATAL_ERROR "Testee ${testee} is of unsupported type.")
endif()
endfunction(xctest_add_bundle)
function(xctest_add_test name bundle)
if(NOT XCTest_EXECUTABLE)
message(FATAL_ERROR "XCTest executable is required to register a test.")
endif()
# check that bundle is a XCTest Bundle
if(NOT TARGET ${bundle})
message(FATAL_ERROR "${bundle} is not a target.")
endif(NOT TARGET ${bundle})
get_property(_test_type TARGET ${bundle} PROPERTY TYPE)
get_property(_test_bundle TARGET ${bundle} PROPERTY BUNDLE)
get_property(_test_xctest TARGET ${bundle} PROPERTY XCTEST)
if(NOT _test_type STREQUAL "MODULE_LIBRARY"
OR NOT _test_xctest OR NOT _test_bundle)
message(FATAL_ERROR "Test ${bundle} is not an XCTest Bundle")
endif()
# get and check testee properties
get_property(_testee TARGET ${bundle} PROPERTY XCTEST_TESTEE)
if(NOT TARGET ${_testee})
message(FATAL_ERROR "${_testee} is not a target.")
endif()
get_property(_testee_type TARGET ${_testee} PROPERTY TYPE)
get_property(_testee_framework TARGET ${_testee} PROPERTY FRAMEWORK)
# register test
add_test(
NAME ${name}
COMMAND ${XCTest_EXECUTABLE} $<TARGET_LINKER_FILE_DIR:${bundle}>/../..)
# point loader to testee in case rpath is disabled
if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
set_property(TEST ${name} APPEND PROPERTY
ENVIRONMENT DYLD_FRAMEWORK_PATH=$<TARGET_LINKER_FILE_DIR:${_testee}>/..)
endif()
endfunction(xctest_add_test)
|