# Copyright (c) 2026 Progmasoft. # SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 load("@bazel_skylib//rules:expand_template.bzl", "expand_template") load("@rules_cc//cc:defs.bzl", "cc_library") # Catch3: the Catch2-compatible engine in Catch3/, the runner in Runner/, # property testing and snapshots. It is C++17 and its headers work in C++17 # and later. //:catch3 and //:catch3_main are the public names. CPP17 = select({ "@platforms//os:windows": ["/std:c++17"], "//conditions:default": ["-std=c++17"], }) # The engine's configuration header, with Bazel support switched on. expand_template( name = "catch_user_config", out = "Catch3/UserConfig.hpp", substitutions = { "#cmakedefine CATCH_CONFIG_ANDROID_LOGWRITE": "", "#cmakedefine CATCH_CONFIG_BAZEL_SUPPORT": "#define CATCH_CONFIG_BAZEL_SUPPORT", "#cmakedefine CATCH_CONFIG_COLOUR_WIN32": "", "#cmakedefine CATCH_CONFIG_COUNTER": "", "#cmakedefine CATCH_CONFIG_CPP11_TO_STRING": "", "#cmakedefine CATCH_CONFIG_CPP17_BYTE": "", "#cmakedefine CATCH_CONFIG_CPP17_OPTIONAL": "", "#cmakedefine CATCH_CONFIG_CPP17_STRING_VIEW": "", "#cmakedefine CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS": "", "#cmakedefine CATCH_CONFIG_CPP17_VARIANT": "", "#cmakedefine CATCH_CONFIG_DEPRECATION_ANNOTATIONS": "", "#cmakedefine CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER": "", "#cmakedefine CATCH_CONFIG_DISABLE_EXCEPTIONS": "", "#cmakedefine CATCH_CONFIG_DISABLE_STRINGIFICATION": "", "#cmakedefine CATCH_CONFIG_DISABLE": "", "#cmakedefine CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS": "", "#cmakedefine CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER": "", "#cmakedefine CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER": "", "#cmakedefine CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER": "", "#cmakedefine CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER": "", "#cmakedefine CATCH_CONFIG_EXPERIMENTAL_REDIRECT": "", "#cmakedefine CATCH_CONFIG_FALLBACK_STRINGIFIER @CATCH_CONFIG_FALLBACK_STRINGIFIER@": "", "#cmakedefine CATCH_CONFIG_FAST_COMPILE": "", "#cmakedefine CATCH_CONFIG_GETENV": "", "#cmakedefine CATCH_CONFIG_GLOBAL_NEXTAFTER": "", "#cmakedefine CATCH_CONFIG_NO_ANDROID_LOGWRITE": "", "#cmakedefine CATCH_CONFIG_NO_COLOUR_WIN32": "", "#cmakedefine CATCH_CONFIG_NO_COUNTER": "", "#cmakedefine CATCH_CONFIG_NO_CPP11_TO_STRING": "", "#cmakedefine CATCH_CONFIG_NO_CPP17_BYTE": "", "#cmakedefine CATCH_CONFIG_NO_CPP17_OPTIONAL": "", "#cmakedefine CATCH_CONFIG_NO_CPP17_STRING_VIEW": "", "#cmakedefine CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS": "", "#cmakedefine CATCH_CONFIG_NO_CPP17_VARIANT": "", "#cmakedefine CATCH_CONFIG_NO_DEPRECATION_ANNOTATIONS": "", "#cmakedefine CATCH_CONFIG_NO_GETENV": "", "#cmakedefine CATCH_CONFIG_NO_GLOBAL_NEXTAFTER": "", "#cmakedefine CATCH_CONFIG_NO_POSIX_SIGNALS": "", "#cmakedefine CATCH_CONFIG_NO_USE_ASYNC": "", "#cmakedefine CATCH_CONFIG_NO_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT": "", "#cmakedefine CATCH_CONFIG_NO_WCHAR": "", "#cmakedefine CATCH_CONFIG_NO_WINDOWS_SEH": "", "#cmakedefine CATCH_CONFIG_NOSTDOUT": "", "#cmakedefine CATCH_CONFIG_POSIX_SIGNALS": "", "#cmakedefine CATCH_CONFIG_PREFIX_ALL": "", "#cmakedefine CATCH_CONFIG_PREFIX_MESSAGES": "", "#cmakedefine CATCH_CONFIG_SHARED_LIBRARY": "", "#cmakedefine CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT": "", "#cmakedefine CATCH_CONFIG_USE_ASYNC": "", "#cmakedefine CATCH_CONFIG_WCHAR": "", "#cmakedefine CATCH_CONFIG_WINDOWS_CRTDBG": "", "#cmakedefine CATCH_CONFIG_WINDOWS_SEH": "", "#cmakedefine CATCH_CONFIG_USE_BUILTIN_CONSTANT_P": "", "#cmakedefine CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P": "", "#cmakedefine CATCH_CONFIG_THREAD_SAFE_ASSERTIONS": "", "#cmakedefine CATCH_CONFIG_NO_THREAD_SAFE_ASSERTIONS": "", }, template = "Catch3/UserConfig.hpp.in", ) cc_library( name = "catch3", # The .inl files compile yyjson and pugixml into the runner's own # translation units. srcs = glob( [ "**/*.cpp", "**/*.inl", ], exclude = ["Catch3/Internal/Main.cpp"], ), hdrs = glob(["**/*.hpp"]) + [":Catch3/UserConfig.hpp"], copts = CPP17, linkstatic = True, strip_include_prefix = "/src", visibility = ["//:__pkg__"], deps = [ "//third_party/pugixml", "//third_party/yyjson", ], ) cc_library( name = "catch3_main", srcs = ["Catch3/Internal/Main.cpp"], copts = CPP17, linkstatic = True, visibility = ["//:__pkg__"], deps = [":catch3"], )