Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorPhil Nash2026-07-10 16:42:51 +0100
committerMartin Hořeňovský2026-07-22 20:50:17 +0200
commiteb431764b4cb9b6fa2296a034b4231064f8e464e (patch)
treef486843060010eabadde982f69a7da2175c3ae10
parentae5d271da2c88b859d6365281ac075112115d4b1 (diff)
downloadcatch3-eb431764b4cb9b6fa2296a034b4231064f8e464e.tar.gz
Document that DISCOVERY_MODE PRE_TEST should be used with catch_discover_tests when used with XCode.
This addresses https://github.com/catchorg/Catch2/issues/2411 by making the "workaround" the official approach and is consistent with how gtest and cmake deal with the same situation.
-rw-r--r--docs/cmake-integration.md11
-rw-r--r--extras/Catch.cmake6
2 files changed, 17 insertions, 0 deletions
diff --git a/docs/cmake-integration.md b/docs/cmake-integration.md
index e63e67f6..63b5ebde 100644
--- a/docs/cmake-integration.md
+++ b/docs/cmake-integration.md
@@ -212,6 +212,17 @@ execution (useful e.g. in cross-compilation environments).
calling ``catch_discover_tests``. This provides a mechanism for globally
selecting a preferred test discovery behavior.
+_Note that on Apple Silicon with the Xcode generator you must use `PRE_TEST`,
+e.g. `catch_discover_tests(tests DISCOVERY_MODE PRE_TEST)`. With the default
+`POST_BUILD` mode the build fails with `Result: Subprocess killed`, because
+macOS on Apple Silicon refuses to run unsigned binaries and Xcode code-signs
+the test executable only **after** the post-build script that `POST_BUILD`
+mode uses to run it for test discovery. `PRE_TEST` avoids this by delaying
+discovery until test time, when the executable is already signed. The same
+limitation affects CMake's `gtest_discover_tests`; see
+[Catch2 #2411](https://github.com/catchorg/Catch2/issues/2411) and
+[CMake #21845](https://gitlab.kitware.com/cmake/cmake/-/issues/21845)._
+
* `SKIP_IS_FAILURE`
Skipped tests will be marked as failed instead.
diff --git a/extras/Catch.cmake b/extras/Catch.cmake
index 657bb724..9426f67f 100644
--- a/extras/Catch.cmake
+++ b/extras/Catch.cmake
@@ -146,6 +146,12 @@ same as the Catch name; see also ``TEST_PREFIX`` and ``TEST_SUFFIX``.
calling ``catch_discover_tests``. This provides a mechanism for globally selecting
a preferred test discovery behavior without having to modify each call site.
+ On Apple Silicon with the Xcode generator you must use ``PRE_TEST``. With the
+ default ``POST_BUILD`` mode the build fails with ``Result: Subprocess killed``,
+ because macOS on Apple Silicon refuses to run unsigned binaries and Xcode
+ code-signs the test executable only after the post-build script that
+ ``POST_BUILD`` mode uses to run it for test discovery. See Catch2 issue #2411.
+
``SKIP_IS_FAILURE``
Disables skipped test detection.