@@ -32,9 +32,7 @@ project(
3232 LANGUAGES C
3333)
3434
35- include (CheckIncludeFile)
3635include (CheckSourceCompiles)
37- include (CheckSymbolExists)
3836include (CMakeDependentOption)
3937include (CMakePushCheckState)
4038include (FeatureSummary)
@@ -107,103 +105,12 @@ add_dependencies(php_mbstring php_pcre)
107105################################################################################
108106# Configure libmbfl.
109107################################################################################
108+ set (LIBMBFL_NAMESPACE php_mbstring_libmbfl)
109+ add_subdirectory (libmbfl EXCLUDE_FROM_ALL )
110+ target_link_libraries (php_mbstring PRIVATE ${LIBMBFL_NAMESPACE} )
110111
111- target_sources (
112- php_mbstring
113- PRIVATE
114- libmbfl/filters/html_entities.c
115- libmbfl/filters/mbfilter_7bit.c
116- libmbfl/filters/mbfilter_base64.c
117- libmbfl/filters/mbfilter_cjk.c
118- libmbfl/filters/mbfilter_htmlent.c
119- libmbfl/filters/mbfilter_qprint.c
120- libmbfl/filters/mbfilter_singlebyte.c
121- libmbfl/filters/mbfilter_ucs2.c
122- libmbfl/filters/mbfilter_ucs4.c
123- libmbfl/filters/mbfilter_utf16.c
124- libmbfl/filters/mbfilter_utf32.c
125- libmbfl/filters/mbfilter_utf7.c
126- libmbfl/filters/mbfilter_utf7imap.c
127- libmbfl/filters/mbfilter_utf8_mobile.c
128- libmbfl/filters/mbfilter_utf8.c
129- libmbfl/filters/mbfilter_uuencode.c
130- libmbfl/mbfl/mbfilter_8bit.c
131- libmbfl/mbfl/mbfilter_pass.c
132- libmbfl/mbfl/mbfilter_wchar.c
133- libmbfl/mbfl/mbfilter.c
134- libmbfl/mbfl/mbfl_convert.c
135- libmbfl/mbfl/mbfl_encoding.c
136- libmbfl/mbfl/mbfl_filter_output.c
137- libmbfl/mbfl/mbfl_language.c
138- libmbfl/mbfl/mbfl_memory_device.c
139- libmbfl/mbfl/mbfl_string.c
140- libmbfl/nls/nls_de.c
141- libmbfl/nls/nls_en.c
142- libmbfl/nls/nls_hy.c
143- libmbfl/nls/nls_ja.c
144- libmbfl/nls/nls_kr.c
145- libmbfl/nls/nls_neutral.c
146- libmbfl/nls/nls_ru.c
147- libmbfl/nls/nls_tr.c
148- libmbfl/nls/nls_ua.c
149- libmbfl/nls/nls_uni.c
150- libmbfl/nls/nls_zh.c
151- PUBLIC
152- FILE_SET HEADERS
153- FILES
154- libmbfl/mbfl/eaw_table.h
155- libmbfl/mbfl/mbfilter_8bit.h
156- libmbfl/mbfl/mbfilter_pass.h
157- libmbfl/mbfl/mbfilter_wchar.h
158- libmbfl/mbfl/mbfilter.h
159- libmbfl/mbfl/mbfl_consts.h
160- libmbfl/mbfl/mbfl_convert.h
161- libmbfl/mbfl/mbfl_defs.h
162- libmbfl/mbfl/mbfl_encoding.h
163- libmbfl/mbfl/mbfl_filter_output.h
164- libmbfl/mbfl/mbfl_language.h
165- libmbfl/mbfl/mbfl_memory_device.h
166- libmbfl/mbfl/mbfl_string.h
167- # A separate file set so binary dir can also be created within a source dir.
168- PUBLIC
169- FILE_SET HEADERS
170- BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
171- FILES
172- ${CMAKE_CURRENT_BINARY_DIR} /libmbfl/config.h
173- )
174-
175- target_include_directories (
176- php_mbstring
177- PRIVATE
178- ${CMAKE_CURRENT_BINARY_DIR} /libmbfl
179- ${CMAKE_CURRENT_SOURCE_DIR} /libmbfl
180- ${CMAKE_CURRENT_SOURCE_DIR} /libmbfl/mbfl
181- )
112+ file (APPEND ${CMAKE_CURRENT_BINARY_DIR} /libmbfl/config.h [[
182113
183- target_compile_definitions (
184- php_mbstring
185- PRIVATE
186- $<$<AND :$<PLATFORM_ID:Windows>,$<IN_LIST :$<TARGET_PROPERTY:TYPE >,MODULE_LIBRARY;SHARED_LIBRARY>>:MBFL_DLL_EXPORT>
187- )
188-
189- # There are duplicate strings.h and strcasecmp checks for the time being.
190- # See: https://github.com/php/php-src/pull/13713
191- # Once upstream is refactored, global strings.h and strcasecmp checks with
192- # Windows unconditional definition can be removed in favor of these checks only
193- # or done differently.
194- check_include_file(strings .h HAVE_STRINGS_H)
195- check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
196-
197- cmake_path(
198- RELATIVE_PATH CMAKE_CURRENT_BINARY_DIR
199- BASE_DIRECTORY ${CMAKE_BINARY_DIR}
200- OUTPUT_VARIABLE dir
201- )
202- message (STATUS "Creating ${dir} /libmbfl/config.h" )
203- file (CONFIGURE OUTPUT libmbfl/config.h CONTENT [[
204- #ifdef HAVE_CONFIG_H
205- # include <config.h>
206- #endif
207114#ifdef _WIN32
208115# define HAVE_STRICMP 1
209116# include <config.w32.h>
@@ -212,8 +119,15 @@ file(CONFIGURE OUTPUT libmbfl/config.h CONTENT [[
212119#endif
213120]])
214121
122+ install (
123+ TARGETS ${LIBMBFL_NAMESPACE}
124+ ARCHIVE EXCLUDE_FROM_ALL
125+ FILE_SET HEADERS
126+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /${PHP_INCLUDE_PREFIX} /ext /mbstring/libmbfl
127+ )
128+
215129################################################################################
216- # MB regex.
130+ # Multibyte regex.
217131################################################################################
218132
219133if (EXT_MBSTRING_MBREGEX)
@@ -228,7 +142,7 @@ if(EXT_MBSTRING_MBREGEX)
228142 target_link_libraries (php_mbstring PRIVATE Oniguruma::Oniguruma)
229143
230144 if (TARGET Oniguruma::Oniguruma)
231- message (CHECK_START "Checking if Oniguruma has invalid entry for KOI8 encoding " )
145+ message (CHECK_START "Checking for invalid KOI8 encoding entry in Oniguruma " )
232146 cmake_push_check_state(RESET)
233147 set (CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
234148 set (CMAKE_REQUIRED_LIBRARIES Oniguruma::Oniguruma)
@@ -247,7 +161,6 @@ if(EXT_MBSTRING_MBREGEX)
247161 message (CHECK_PASS "no" )
248162 else ()
249163 message (CHECK_FAIL "yes" )
250-
251164 set (PHP_ONIG_BAD_KOI8_ENTRY TRUE )
252165 endif ()
253166 endif ()
@@ -262,8 +175,6 @@ if(EXT_MBSTRING_MBREGEX)
262175 $<$<PLATFORM_ID:Windows>:ONIG_EXTERN=extern>
263176 )
264177
265- set (HAVE_MBREGEX TRUE )
266-
267178 target_sources (
268179 php_mbstring
269180 PRIVATE
@@ -274,6 +185,8 @@ if(EXT_MBSTRING_MBREGEX)
274185 php_mbregex.h
275186 php_onig_compat.h
276187 )
188+
189+ set (HAVE_MBREGEX TRUE )
277190endif ()
278191
279192set (HAVE_MBSTRING TRUE )
0 commit comments