Skip to content

Commit f0cb378

Browse files
committed
cmake: refactor regex selection
Move regex selection into its own cmake module.
1 parent de178d3 commit f0cb378

File tree

2 files changed

+52
-52
lines changed

2 files changed

+52
-52
lines changed

cmake/SelectRegex.cmake

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Specify regular expression implementation
2+
find_package(PCRE)
3+
4+
if(REGEX_BACKEND STREQUAL "")
5+
check_symbol_exists(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
6+
7+
if(HAVE_REGCOMP_L)
8+
set(REGEX_BACKEND "regcomp_l")
9+
elseif(PCRE_FOUND)
10+
set(REGEX_BACKEND "pcre")
11+
else()
12+
set(REGEX_BACKEND "builtin")
13+
endif()
14+
endif()
15+
16+
if(REGEX_BACKEND STREQUAL "regcomp_l")
17+
add_feature_info(regex ON "using system regcomp_l")
18+
set(GIT_REGEX_REGCOMP_L 1)
19+
elseif(REGEX_BACKEND STREQUAL "pcre2")
20+
find_package(PCRE2)
21+
22+
if(NOT PCRE2_FOUND)
23+
MESSAGE(FATAL_ERROR "PCRE2 support was requested but not found")
24+
endif()
25+
26+
add_feature_info(regex ON "using system PCRE2")
27+
set(GIT_REGEX_PCRE2 1)
28+
29+
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE2_INCLUDE_DIRS})
30+
list(APPEND LIBGIT2_LIBS ${PCRE2_LIBRARIES})
31+
list(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
32+
elseif(REGEX_BACKEND STREQUAL "pcre")
33+
add_feature_info(regex ON "using system PCRE")
34+
set(GIT_REGEX_PCRE 1)
35+
36+
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS})
37+
list(APPEND LIBGIT2_LIBS ${PCRE_LIBRARIES})
38+
list(APPEND LIBGIT2_PC_REQUIRES "libpcre")
39+
elseif(REGEX_BACKEND STREQUAL "regcomp")
40+
add_feature_info(regex ON "using system regcomp")
41+
set(GIT_REGEX_REGCOMP 1)
42+
elseif(REGEX_BACKEND STREQUAL "builtin")
43+
add_feature_info(regex ON "using bundled PCRE")
44+
set(GIT_REGEX_BUILTIN 1)
45+
46+
add_subdirectory("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre")
47+
list(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
48+
list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:pcre>)
49+
else()
50+
message(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
51+
endif()

src/CMakeLists.txt

Lines changed: 1 addition & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -114,61 +114,10 @@ endif()
114114
include(SelectHTTPSBackend)
115115
include(SelectHashes)
116116
include(SelectHTTPParser)
117+
include(SelectRegex)
117118

118119
target_sources(git2internal PRIVATE ${SRC_SHA1})
119120

120-
# Specify regular expression implementation
121-
find_package(PCRE)
122-
123-
if(REGEX_BACKEND STREQUAL "")
124-
check_symbol_exists(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
125-
126-
if(HAVE_REGCOMP_L)
127-
set(REGEX_BACKEND "regcomp_l")
128-
elseif(PCRE_FOUND)
129-
set(REGEX_BACKEND "pcre")
130-
else()
131-
set(REGEX_BACKEND "builtin")
132-
endif()
133-
endif()
134-
135-
if(REGEX_BACKEND STREQUAL "regcomp_l")
136-
add_feature_info(regex ON "using system regcomp_l")
137-
set(GIT_REGEX_REGCOMP_L 1)
138-
elseif(REGEX_BACKEND STREQUAL "pcre2")
139-
find_package(PCRE2)
140-
141-
if(NOT PCRE2_FOUND)
142-
MESSAGE(FATAL_ERROR "PCRE2 support was requested but not found")
143-
endif()
144-
145-
add_feature_info(regex ON "using system PCRE2")
146-
set(GIT_REGEX_PCRE2 1)
147-
148-
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE2_INCLUDE_DIRS})
149-
list(APPEND LIBGIT2_LIBS ${PCRE2_LIBRARIES})
150-
list(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
151-
elseif(REGEX_BACKEND STREQUAL "pcre")
152-
add_feature_info(regex ON "using system PCRE")
153-
set(GIT_REGEX_PCRE 1)
154-
155-
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS})
156-
list(APPEND LIBGIT2_LIBS ${PCRE_LIBRARIES})
157-
list(APPEND LIBGIT2_PC_REQUIRES "libpcre")
158-
elseif(REGEX_BACKEND STREQUAL "regcomp")
159-
add_feature_info(regex ON "using system regcomp")
160-
set(GIT_REGEX_REGCOMP 1)
161-
elseif(REGEX_BACKEND STREQUAL "builtin")
162-
add_feature_info(regex ON "using bundled PCRE")
163-
set(GIT_REGEX_BUILTIN 1)
164-
165-
add_subdirectory("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre")
166-
list(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
167-
list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:pcre>)
168-
else()
169-
message(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
170-
endif()
171-
172121
# Optional external dependency: zlib
173122
SanitizeBool(USE_BUNDLED_ZLIB)
174123
if(USE_BUNDLED_ZLIB STREQUAL ON)

0 commit comments

Comments
 (0)