mirror of
https://github.com/holub/mame
synced 2025-05-25 15:25:33 +03:00

* Tested and works on Windows, macOS, and Linux. * Fixes compatibility with macOS Ventura and bugfixes WASAPI and WDM-KS on Windows.
69 lines
2.1 KiB
CMake
69 lines
2.1 KiB
CMake
#[=======================================================================[.rst:
|
|
FindRegex
|
|
--------
|
|
|
|
Finds an implementation of POSIX regular expressions. It first checks if the
|
|
standard regex.h POSIX header is available. If not, it looks for the TRE library.
|
|
MinGW does not come with regex.h, so TRE is useful with MinGW.
|
|
|
|
Imported Targets
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
This module provides the following imported targets, if found:
|
|
|
|
``Regex::regex``
|
|
The POSIX regular expression implementation
|
|
|
|
#]=======================================================================]
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
include(CheckIncludeFile)
|
|
|
|
set(CMAKE_REQUIRED_QUIET TRUE)
|
|
check_include_file(regex.h REGEX_H)
|
|
set(CMAKE_REQUIRED_QUIET FALSE)
|
|
|
|
if(REGEX_H)
|
|
# No need to add any include directories or link any libraries;
|
|
# simply provide a dummy target.
|
|
if(NOT TARGET Regex::regex)
|
|
add_library(Regex::regex INTERFACE IMPORTED)
|
|
endif()
|
|
|
|
# check_include_file sets the variable to "1" which looks odd in the output
|
|
# of find_package_handle_standard_args, so show the user what was actually found.
|
|
set(REGEX_H "POSIX regex.h")
|
|
find_package_handle_standard_args(
|
|
Regex
|
|
DEFAULT_MSG
|
|
REGEX_H
|
|
)
|
|
else()
|
|
# MinGW does not include regex.h but this can be supplied by the TRE library.
|
|
find_path(TRE_REGEX_H NAMES tre/regex.h)
|
|
if(TRE_REGEX_H)
|
|
# The POSIX #include is simply <regex.h> but the tre regex.h is at <tre/regex.h>,
|
|
# so add the directory containing tre's headers to the include path.
|
|
set(TRE_INCLUDE_DIR "${TRE_REGEX_H}/tre")
|
|
endif()
|
|
find_library(TRE_LIBRARY NAMES tre)
|
|
if(TRE_REGEX_H AND TRE_LIBRARY)
|
|
message(STATUS "Found regex.h from TRE")
|
|
else()
|
|
message(STATUS "regex.h POSIX header NOT found and NOT available from TRE")
|
|
endif()
|
|
|
|
if(NOT TARGET Regex::regex)
|
|
add_library(Regex::regex INTERFACE IMPORTED)
|
|
target_include_directories(Regex::regex INTERFACE "${TRE_INCLUDE_DIR}")
|
|
target_link_libraries(Regex::regex INTERFACE "${TRE_LIBRARY}")
|
|
endif()
|
|
|
|
find_package_handle_standard_args(
|
|
Regex
|
|
DEFAULT_MSG
|
|
TRE_INCLUDE_DIR
|
|
TRE_LIBRARY
|
|
)
|
|
endif()
|