Skip to content

Commit ff6c435

Browse files
authored
Add timelib and libmbfl with add_subdirectory() (#23)
Add timelib and libmbfl using target_sources in subdirectory Additionally, this fixes the FILE_SET usages. When the same header set (HEADERS) has some of the BASE_DIRS inside the others it doesn't work. So a separate FILE_SET with new name must be created instead.
1 parent 1156d75 commit ff6c435

File tree

8 files changed

+249
-127
lines changed

8 files changed

+249
-127
lines changed

cmake/Zend/CMakeLists.txt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,15 @@ target_sources(
180180
PUBLIC
181181
FILE_SET HEADERS
182182
FILES
183+
Optimizer/zend_call_graph.h
184+
Optimizer/zend_cfg.h
185+
Optimizer/zend_dfg.h
186+
Optimizer/zend_dump.h
187+
Optimizer/zend_func_info.h
188+
Optimizer/zend_inference.h
189+
Optimizer/zend_optimizer.h
190+
Optimizer/zend_ssa.h
191+
Optimizer/zend_worklist.h
183192
zend_alloc_sizes.h
184193
zend_alloc.h
185194
zend_API.h
@@ -276,18 +285,9 @@ target_sources(
276285
zend_weakrefs_arginfo.h
277286
zend_weakrefs.h
278287
zend.h
279-
Optimizer/zend_call_graph.h
280-
Optimizer/zend_cfg.h
281-
Optimizer/zend_dfg.h
282-
Optimizer/zend_dump.h
283-
Optimizer/zend_func_info.h
284-
Optimizer/zend_inference.h
285-
Optimizer/zend_optimizer.h
286-
Optimizer/zend_ssa.h
287-
Optimizer/zend_worklist.h
288-
# A separate file set so binary dir can also be created within a source dir.
289288
PUBLIC
290-
FILE_SET HEADERS
289+
FILE_SET generated
290+
TYPE HEADERS
291291
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
292292
FILES
293293
$<$<NOT:$<PLATFORM_ID:Windows>>:${CMAKE_CURRENT_BINARY_DIR}/zend_config.h>
@@ -686,4 +686,6 @@ install(
686686
ARCHIVE EXCLUDE_FROM_ALL
687687
FILE_SET HEADERS
688688
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/Zend
689+
FILE_SET generated
690+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/Zend
689691
)

cmake/cmake/modules/PHP/Extensions.cmake

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,16 +419,27 @@ function(php_extensions_postconfigure extension)
419419
set_property(TARGET php_${extension} PROPERTY OUTPUT_NAME ${extension})
420420
endif()
421421

422-
# Add extension's default installation instructions.
422+
# Specify extension's default installation rules.
423+
get_target_property(sets php_${extension} INTERFACE_HEADER_SETS)
424+
set(fileSets "")
425+
foreach(set IN LISTS sets)
426+
list(
427+
APPEND
428+
fileSets
429+
FILE_SET
430+
${set}
431+
DESTINATION
432+
${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/ext/${extension}
433+
)
434+
endforeach()
423435
install(
424436
TARGETS php_${extension}
425437
ARCHIVE EXCLUDE_FROM_ALL
426438
RUNTIME
427439
DESTINATION ${PHP_EXTENSION_DIR}
428440
LIBRARY
429441
DESTINATION ${PHP_EXTENSION_DIR}
430-
FILE_SET HEADERS
431-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/ext/${extension}
442+
${fileSets}
432443
)
433444

434445
# Configure shared extension.

cmake/ext/date/CMakeLists.txt

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ project(
1313
LANGUAGES C
1414
)
1515

16-
include(CheckIncludeFile)
1716
include(FeatureSummary)
1817

1918
add_feature_info(
@@ -22,66 +21,34 @@ add_feature_info(
2221
"date and time"
2322
)
2423

25-
# Check for headers needed by timelib.
26-
check_include_file(io.h HAVE_IO_H)
27-
2824
add_library(php_date OBJECT)
2925

3026
target_sources(
3127
php_date
3228
PRIVATE
33-
lib/astro.c
34-
lib/dow.c
35-
lib/interval.c
36-
lib/parse_date.c
37-
lib/parse_iso_intervals.c
38-
lib/parse_posix.c
39-
lib/parse_tz.c
40-
lib/timelib.c
41-
lib/tm2unixtime.c
42-
lib/unixtime2tm.c
4329
php_date.c
4430
php_date.stub.php
4531
PUBLIC
4632
FILE_SET HEADERS
4733
FILES
48-
lib/timelib.h
4934
php_date.h
50-
# A separate file set so binary dir can also be created within a source dir.
51-
PUBLIC
52-
FILE_SET HEADERS
53-
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
54-
FILES
55-
${CMAKE_CURRENT_BINARY_DIR}/lib/timelib_config.h
5635
)
5736

58-
target_include_directories(php_date PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/lib)
37+
target_compile_definitions(php_date PRIVATE ZEND_ENABLE_STATIC_TSRMLS_CACHE)
5938

6039
target_compile_options(
6140
php_date
6241
PRIVATE
6342
$<$<COMPILE_LANG_AND_ID:C,MSVC>:/wd4244>
6443
)
6544

66-
target_compile_definitions(
67-
php_date
68-
PRIVATE
69-
ZEND_ENABLE_STATIC_TSRMLS_CACHE
70-
HAVE_TIMELIB_CONFIG_H
71-
# The timelib uses C99 strtoll() function conditionally.
72-
HAVE_STRTOLL
73-
)
45+
# Configure timelib.
46+
set(TIMELIB_TARGET php_date)
47+
add_subdirectory(lib)
7448

7549
set(HAVE_TIMELIB_CONFIG_H TRUE)
7650

77-
cmake_path(
78-
RELATIVE_PATH
79-
CMAKE_CURRENT_BINARY_DIR
80-
BASE_DIRECTORY ${CMAKE_BINARY_DIR}
81-
OUTPUT_VARIABLE relativeDir
82-
)
83-
message(STATUS "Creating ${relativeDir}/lib/timelib_config.h")
84-
file(CONFIGURE OUTPUT lib/timelib_config.h CONTENT [[
51+
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/lib/timelib_config.h "\n" [[
8552
#ifdef PHP_WIN32
8653
# include "config.w32.h"
8754
#else

cmake/ext/date/lib/CMakeLists.txt

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#[=============================================================================[
2+
# timelib
3+
4+
Simplified CMake-based build system for the timelib library.
5+
6+
## Basic usage
7+
8+
Adding timelib with `add_subdirectory()`:
9+
10+
```cmake
11+
set(TIMELIB_TARGET php_date)
12+
add_subdirectory(lib)
13+
```
14+
#]=============================================================================]
15+
16+
cmake_minimum_required(VERSION 3.25...3.31)
17+
18+
project(Timelib LANGUAGES C)
19+
20+
include(CheckIncludeFile)
21+
22+
if(NOT TIMELIB_TARGET)
23+
set(TIMELIB_TARGET timelib)
24+
add_library(${TIMELIB_TARGET})
25+
endif()
26+
27+
set(
28+
timelibSources
29+
astro.c
30+
dow.c
31+
interval.c
32+
parse_date.c
33+
parse_iso_intervals.c
34+
parse_posix.c
35+
parse_tz.c
36+
timelib.c
37+
tm2unixtime.c
38+
unixtime2tm.c
39+
)
40+
41+
target_sources(
42+
${TIMELIB_TARGET}
43+
PRIVATE
44+
${timelibSources}
45+
PUBLIC
46+
FILE_SET HEADERS
47+
FILES
48+
timelib.h
49+
PUBLIC
50+
FILE_SET generated
51+
TYPE HEADERS
52+
BASE_DIRS $<TARGET_PROPERTY:${TIMELIB_TARGET},BINARY_DIR>
53+
FILES
54+
${CMAKE_CURRENT_BINARY_DIR}/timelib_config.h
55+
)
56+
57+
target_include_directories(${TIMELIB_TARGET} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
58+
59+
target_compile_definitions(
60+
${TIMELIB_TARGET}
61+
PRIVATE
62+
HAVE_TIMELIB_CONFIG_H
63+
# The timelib uses C99 strtoll() function conditionally.
64+
HAVE_STRTOLL
65+
)
66+
67+
check_include_file(io.h HAVE_IO_H)
68+
69+
cmake_path(
70+
RELATIVE_PATH
71+
CMAKE_CURRENT_BINARY_DIR
72+
BASE_DIRECTORY ${CMAKE_BINARY_DIR}
73+
OUTPUT_VARIABLE relativeDir
74+
)
75+
message(STATUS "Creating ${relativeDir}/timelib_config.h")
76+
file(CONFIGURE OUTPUT timelib_config.h CONTENT [[
77+
/* Define to 1 if you have the <io.h> header file. */
78+
#cmakedefine HAVE_IO_H 1
79+
]])

cmake/ext/mbstring/CMakeLists.txt

Lines changed: 9 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -84,70 +84,14 @@ endif()
8484
target_sources(
8585
php_mbstring
8686
PRIVATE
87-
libmbfl/filters/html_entities.c
88-
libmbfl/filters/mbfilter_7bit.c
89-
libmbfl/filters/mbfilter_base64.c
90-
libmbfl/filters/mbfilter_cjk.c
91-
libmbfl/filters/mbfilter_htmlent.c
92-
libmbfl/filters/mbfilter_qprint.c
93-
libmbfl/filters/mbfilter_singlebyte.c
94-
libmbfl/filters/mbfilter_ucs2.c
95-
libmbfl/filters/mbfilter_ucs4.c
96-
libmbfl/filters/mbfilter_utf16.c
97-
libmbfl/filters/mbfilter_utf32.c
98-
libmbfl/filters/mbfilter_utf7.c
99-
libmbfl/filters/mbfilter_utf7imap.c
100-
libmbfl/filters/mbfilter_utf8_mobile.c
101-
libmbfl/filters/mbfilter_utf8.c
102-
libmbfl/filters/mbfilter_uuencode.c
103-
libmbfl/mbfl/mbfilter_8bit.c
104-
libmbfl/mbfl/mbfilter_pass.c
105-
libmbfl/mbfl/mbfilter_wchar.c
106-
libmbfl/mbfl/mbfilter.c
107-
libmbfl/mbfl/mbfl_convert.c
108-
libmbfl/mbfl/mbfl_encoding.c
109-
libmbfl/mbfl/mbfl_filter_output.c
110-
libmbfl/mbfl/mbfl_language.c
111-
libmbfl/mbfl/mbfl_memory_device.c
112-
libmbfl/mbfl/mbfl_string.c
113-
libmbfl/nls/nls_de.c
114-
libmbfl/nls/nls_en.c
115-
libmbfl/nls/nls_hy.c
116-
libmbfl/nls/nls_ja.c
117-
libmbfl/nls/nls_kr.c
118-
libmbfl/nls/nls_neutral.c
119-
libmbfl/nls/nls_ru.c
120-
libmbfl/nls/nls_tr.c
121-
libmbfl/nls/nls_ua.c
122-
libmbfl/nls/nls_uni.c
123-
libmbfl/nls/nls_zh.c
12487
mb_gpc.c
12588
mbstring.c
12689
mbstring.stub.php
12790
php_unicode.c
12891
PUBLIC
12992
FILE_SET HEADERS
13093
FILES
131-
libmbfl/mbfl/eaw_table.h
132-
libmbfl/mbfl/mbfilter_8bit.h
133-
libmbfl/mbfl/mbfilter_pass.h
134-
libmbfl/mbfl/mbfilter_wchar.h
135-
libmbfl/mbfl/mbfilter.h
136-
libmbfl/mbfl/mbfl_consts.h
137-
libmbfl/mbfl/mbfl_convert.h
138-
libmbfl/mbfl/mbfl_defs.h
139-
libmbfl/mbfl/mbfl_encoding.h
140-
libmbfl/mbfl/mbfl_filter_output.h
141-
libmbfl/mbfl/mbfl_language.h
142-
libmbfl/mbfl/mbfl_memory_device.h
143-
libmbfl/mbfl/mbfl_string.h
14494
mbstring.h
145-
# A separate file set so binary dir can also be created within a source dir.
146-
PUBLIC
147-
FILE_SET HEADERS
148-
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
149-
FILES
150-
${CMAKE_CURRENT_BINARY_DIR}/libmbfl/config.h
15195
)
15296

15397
target_compile_definitions(php_mbstring PRIVATE ZEND_ENABLE_STATIC_TSRMLS_CACHE)
@@ -164,27 +108,21 @@ set(HAVE_MBSTRING TRUE)
164108
# Configure libmbfl.
165109
################################################################################
166110

167-
# TODO: Fix this better. See also https://github.com/php/php-src/pull/13713
168-
# TODO: Should status message be here?
169-
message(STATUS "Creating ext/mbstring/libmbfl/config.h")
170-
file(CONFIGURE OUTPUT libmbfl/config.h CONTENT [[
111+
set(LIBMBFL_TARGET php_mbstring)
112+
add_subdirectory(libmbfl)
113+
114+
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libmbfl/config.h "\n" [[
115+
#ifdef HAVE_CONFIG_H
116+
# include <config.h>
117+
#endif
171118
#ifdef _WIN32
172119
# define HAVE_STRICMP 1
173-
#elif defined HAVE_CONFIG_H
174-
# include "<config.h>"
120+
# include <config.w32.h>
175121
#else
176-
# include <main/php_config.h>
122+
# include <php_config.h>
177123
#endif
178124
]])
179125

180-
target_include_directories(
181-
php_mbstring
182-
PRIVATE
183-
${CMAKE_CURRENT_SOURCE_DIR}/libmbfl
184-
${CMAKE_CURRENT_BINARY_DIR}/libmbfl
185-
${CMAKE_CURRENT_SOURCE_DIR}/libmbfl/mbfl
186-
)
187-
188126
################################################################################
189127
# Multibyte regex.
190128
################################################################################

0 commit comments

Comments
 (0)