mirror of
https://github.com/google/re2.git
synced 2025-10-14 02:17:38 +08:00

For GNU make, conditionally populate the `Requires:` field in `re2.pc`. Use `pkg-config` to obtain the necessary compiler and linker flags when building `static-testinstall` and `shared-testinstall`. For CMake, the dependency has to be expressed to CMake itself, not just to `pkg-config` as above. Fixes #407. Change-Id: Ie5e0ea88e0662f54be011b3bc0c57f2cfa852f88 Reviewed-on: https://code-review.googlesource.com/c/re2/+/60931 Reviewed-by: Paul Wankadia <junyer@google.com> Reviewed-by: Perry Lorier <perryl@google.com>
204 lines
5.9 KiB
CMake
204 lines
5.9 KiB
CMake
# Copyright 2015 The RE2 Authors. All Rights Reserved.
|
|
# Use of this source code is governed by a BSD-style
|
|
# license that can be found in the LICENSE file.
|
|
|
|
# Old enough to support Ubuntu Bionic,
|
|
# but just the MAJOR.MINOR components.
|
|
cmake_minimum_required(VERSION 3.10)
|
|
|
|
project(RE2 CXX)
|
|
include(CMakePackageConfigHelpers)
|
|
include(CTest)
|
|
include(GNUInstallDirs)
|
|
|
|
option(BUILD_SHARED_LIBS "build shared libraries" OFF)
|
|
option(RE2_USE_ICU "build against ICU for full Unicode properties support" OFF)
|
|
|
|
# For historical reasons, this is just "USEPCRE", not "RE2_USE_PCRE".
|
|
option(USEPCRE "build against PCRE for testing and benchmarking" OFF)
|
|
|
|
# CMake seems to have no way to enable/disable testing per subproject,
|
|
# so we provide an option similar to BUILD_TESTING, but just for RE2.
|
|
option(RE2_BUILD_TESTING "enable testing for RE2" ON)
|
|
|
|
# The pkg-config Requires: field.
|
|
set(REQUIRES)
|
|
|
|
# ABI version
|
|
# http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
|
|
set(SONAME 10)
|
|
|
|
set(EXTRA_TARGET_LINK_LIBRARIES)
|
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
if(MSVC_VERSION LESS 1900)
|
|
message(FATAL_ERROR "you need Visual Studio 2015 or later")
|
|
endif()
|
|
if(BUILD_SHARED_LIBS)
|
|
# See http://www.kitware.com/blog/home/post/939 for details.
|
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
|
endif()
|
|
# CMake defaults to /W3, but some users like /W4 (or /Wall) and /WX,
|
|
# so we disable various warnings that aren't particularly helpful.
|
|
add_compile_options(/wd4100 /wd4201 /wd4456 /wd4457 /wd4702 /wd4815)
|
|
# Without a byte order mark (BOM), Visual Studio assumes that the source
|
|
# file is encoded using the current user code page, so we specify UTF-8.
|
|
add_compile_options(/utf-8)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
add_definitions(-DUNICODE -D_UNICODE -DSTRICT -DNOMINMAX)
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
|
|
endif()
|
|
|
|
if(UNIX)
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
endif()
|
|
|
|
if(RE2_USE_ICU)
|
|
find_package(ICU REQUIRED COMPONENTS uc)
|
|
add_definitions(-DRE2_USE_ICU)
|
|
list(APPEND REQUIRES icu-uc)
|
|
endif()
|
|
|
|
if(USEPCRE)
|
|
add_definitions(-DUSEPCRE)
|
|
list(APPEND EXTRA_TARGET_LINK_LIBRARIES pcre)
|
|
endif()
|
|
|
|
set(RE2_SOURCES
|
|
re2/bitmap256.cc
|
|
re2/bitstate.cc
|
|
re2/compile.cc
|
|
re2/dfa.cc
|
|
re2/filtered_re2.cc
|
|
re2/mimics_pcre.cc
|
|
re2/nfa.cc
|
|
re2/onepass.cc
|
|
re2/parse.cc
|
|
re2/perl_groups.cc
|
|
re2/prefilter.cc
|
|
re2/prefilter_tree.cc
|
|
re2/prog.cc
|
|
re2/re2.cc
|
|
re2/regexp.cc
|
|
re2/set.cc
|
|
re2/simplify.cc
|
|
re2/stringpiece.cc
|
|
re2/tostring.cc
|
|
re2/unicode_casefold.cc
|
|
re2/unicode_groups.cc
|
|
util/rune.cc
|
|
util/strutil.cc
|
|
)
|
|
|
|
add_library(re2 ${RE2_SOURCES})
|
|
target_compile_features(re2 PUBLIC cxx_std_11)
|
|
target_include_directories(re2 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
|
|
set_target_properties(re2 PROPERTIES SOVERSION ${SONAME} VERSION ${SONAME}.0.0)
|
|
add_library(re2::re2 ALIAS re2)
|
|
|
|
if(UNIX)
|
|
target_link_libraries(re2 PUBLIC Threads::Threads)
|
|
endif()
|
|
|
|
if(RE2_USE_ICU)
|
|
target_link_libraries(re2 PUBLIC ICU::uc)
|
|
endif()
|
|
|
|
if(RE2_BUILD_TESTING)
|
|
set(TESTING_SOURCES
|
|
re2/testing/backtrack.cc
|
|
re2/testing/dump.cc
|
|
re2/testing/exhaustive_tester.cc
|
|
re2/testing/null_walker.cc
|
|
re2/testing/regexp_generator.cc
|
|
re2/testing/string_generator.cc
|
|
re2/testing/tester.cc
|
|
util/pcre.cc
|
|
)
|
|
|
|
add_library(testing STATIC ${TESTING_SOURCES})
|
|
target_compile_features(testing PUBLIC cxx_std_11)
|
|
target_link_libraries(testing PUBLIC re2)
|
|
|
|
set(TEST_TARGETS
|
|
charclass_test
|
|
compile_test
|
|
filtered_re2_test
|
|
mimics_pcre_test
|
|
parse_test
|
|
possible_match_test
|
|
re2_test
|
|
re2_arg_test
|
|
regexp_test
|
|
required_prefix_test
|
|
search_test
|
|
set_test
|
|
simplify_test
|
|
string_generator_test
|
|
|
|
dfa_test
|
|
exhaustive1_test
|
|
exhaustive2_test
|
|
exhaustive3_test
|
|
exhaustive_test
|
|
random_test
|
|
)
|
|
|
|
set(BENCHMARK_TARGETS
|
|
regexp_benchmark
|
|
)
|
|
|
|
foreach(target ${TEST_TARGETS})
|
|
add_executable(${target} re2/testing/${target}.cc util/test.cc)
|
|
target_compile_features(${target} PUBLIC cxx_std_11)
|
|
target_link_libraries(${target} testing ${EXTRA_TARGET_LINK_LIBRARIES})
|
|
add_test(NAME ${target} COMMAND ${target})
|
|
endforeach()
|
|
|
|
foreach(target ${BENCHMARK_TARGETS})
|
|
add_executable(${target} re2/testing/${target}.cc util/benchmark.cc)
|
|
target_compile_features(${target} PUBLIC cxx_std_11)
|
|
target_link_libraries(${target} testing ${EXTRA_TARGET_LINK_LIBRARIES})
|
|
endforeach()
|
|
endif()
|
|
|
|
set(RE2_HEADERS
|
|
re2/filtered_re2.h
|
|
re2/re2.h
|
|
re2/set.h
|
|
re2/stringpiece.h
|
|
)
|
|
|
|
install(FILES ${RE2_HEADERS}
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/re2)
|
|
install(TARGETS re2
|
|
EXPORT re2Targets
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
install(EXPORT re2Targets
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/re2
|
|
NAMESPACE re2::)
|
|
|
|
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/re2Config.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/re2Config.cmake
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/re2)
|
|
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/re2ConfigVersion.cmake
|
|
VERSION ${SONAME}.0.0
|
|
COMPATIBILITY SameMajorVersion)
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/re2Config.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/re2ConfigVersion.cmake
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/re2)
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/re2.pc.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/re2.pc
|
|
@ONLY)
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/re2.pc
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|