Skip to content

Commit 6f72f6d

Browse files
committed
Merge branch 'PHP-8.4'
2 parents 7650fda + d414719 commit 6f72f6d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+337
-373
lines changed

Diff for: cmake/ext/CMakeLists.txt

+48-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
#[=============================================================================[
22
Add subdirectories of PHP extensions.
33
4+
## INTERFACE target
5+
6+
* `php_extensions` (alias `PHP::extensions`) is an INTERFACE library with all
7+
enabled extensions linked into for convenience.
8+
49
## Custom CMake properties
510
611
* `PHP_ALL_EXTENSIONS`
@@ -67,20 +72,60 @@ set_property(GLOBAL PROPERTY PHP_ALL_EXTENSIONS ${extensions})
6772
# Sort and preconfigure extensions by their dependencies.
6873
php_extensions_preprocess(extensions)
6974

75+
add_library(php_extensions INTERFACE)
76+
add_library(PHP::extensions ALIAS php_extensions)
77+
7078
# Add subdirectories of extensions.
7179
foreach(extension IN LISTS extensions)
7280
list(APPEND CMAKE_MESSAGE_CONTEXT "${extension}")
81+
message(CHECK_START "Configuring extension ${extension}")
82+
list(APPEND CMAKE_MESSAGE_INDENT " ")
7383

74-
message(STATUS "Checking extension ${extension}")
7584
add_subdirectory("${extension}")
7685

7786
php_extensions_postconfigure("${extension}")
7887

79-
list(POP_BACK CMAKE_MESSAGE_CONTEXT)
80-
88+
list(POP_BACK CMAKE_MESSAGE_INDENT)
8189
if(TARGET php_${extension})
8290
set_property(GLOBAL APPEND PROPERTY PHP_EXTENSIONS ${extension})
91+
92+
# Add extension's PUBLIC/INTERFACE compile options to configuration.
93+
# Cleaner COMPILE_ONLY generator expression is available in CMake >= 3.27.
94+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.27)
95+
target_link_libraries(
96+
php_configuration
97+
INTERFACE
98+
$<COMPILE_ONLY:PHP::${extension}>
99+
)
100+
else()
101+
target_include_directories(
102+
php_configuration
103+
INTERFACE
104+
$<TARGET_PROPERTY:PHP::${extension},INTERFACE_INCLUDE_DIRECTORIES>
105+
)
106+
endif()
107+
108+
target_link_libraries(php_${extension} PRIVATE PHP::configuration)
109+
110+
# Add configuration compile options before the extension compile options.
111+
target_compile_options(
112+
php_${extension}
113+
BEFORE PRIVATE
114+
$<TARGET_PROPERTY:php_configuration,INTERFACE_COMPILE_OPTIONS>
115+
)
116+
117+
add_dependencies(php_${extension} zend)
118+
119+
get_target_property(type php_${extension} TYPE)
120+
if(NOT type MATCHES "^(MODULE|SHARED)_LIBRARY$")
121+
target_link_libraries(php_extensions INTERFACE PHP::${extension})
122+
endif()
123+
124+
message(CHECK_PASS "enabled")
125+
else()
126+
message(CHECK_FAIL "disabled")
83127
endif()
128+
list(POP_BACK CMAKE_MESSAGE_CONTEXT)
84129
endforeach()
85130

86131
get_cmake_property(extensions PHP_EXTENSIONS)

Diff for: cmake/ext/odbc/CMakeLists.txt

+54-49
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ if(EXT_ODBC AND EXT_PDO_ODBC AND NOT EXT_ODBC_TYPE STREQUAL EXT_PDO_ODBC_TYPE)
6060
)
6161
endif()
6262

63-
# Some ODBC drivers require setting ODBC_LIBRARY manually to find package.
63+
# Some ODBC drivers require setting ODBC_LIBRARY manually to be found.
6464
if(
6565
EXT_ODBC
6666
AND NOT EXT_ODBC_TYPE MATCHES "auto|unixODBC|iODBC"
@@ -120,12 +120,6 @@ target_sources(
120120

121121
target_compile_definitions(php_odbc PRIVATE ZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
122122

123-
# TODO: Can this be fixed better?
124-
get_target_property(extension_type php_odbc TYPE)
125-
if(NOT extension_type MATCHES "^(MODULE|SHARED)_LIBRARY$")
126-
target_link_libraries(php_odbc PRIVATE PHP::main)
127-
endif()
128-
129123
if(NOT EXT_ODBC_TYPE STREQUAL "auto")
130124
set(ODBC_USE_DRIVER "${EXT_ODBC_TYPE}")
131125
endif()
@@ -137,48 +131,65 @@ set_package_properties(
137131
PURPOSE "Necessary to enable the odbc extension."
138132
)
139133

140-
if(ODBC_DRIVER AND EXT_ODBC_TYPE STREQUAL "auto")
141-
set(EXT_ODBC_TYPE "${ODBC_DRIVER}")
134+
target_link_libraries(php_odbc PRIVATE ODBC::ODBC)
135+
136+
# Sanity checks.
137+
if(EXT_ODBC_TYPE STREQUAL "ibm-db2" AND TARGET ODBC::ODBC)
138+
cmake_push_check_state(RESET)
139+
set(CMAKE_REQUIRED_LIBRARIES ODBC::ODBC)
140+
check_include_file(sqlcli1.h HAVE_SQLCLI1_H)
141+
check_library_exists(ODBC::ODBC "" SQLExecute HAVE_SQLEXECUTE)
142+
cmake_pop_check_state()
143+
if(NOT HAVE_SQLCLI1_H)
144+
message(FATAL_ERROR "Required <sqlcli1.h> header file not found")
145+
endif()
146+
if(NOT HAVE_SQLEXECUTE)
147+
message(
148+
FATAL_ERROR
149+
"ODBC build test failed. SQLExecute not found. The DB2 environment "
150+
"needs to be sourced. Run the command line:\n"
151+
" . $IBM_DB2/db2profile"
152+
)
153+
endif()
142154
endif()
143155

144-
target_link_libraries(php_odbc PRIVATE ODBC::ODBC)
156+
################################################################################
157+
# Set variables for main/build-defs.h and config.h file.
158+
################################################################################
159+
160+
# Set PHP_ODBC_TYPE for configuration header value.
161+
if(ODBC_DRIVER STREQUAL "Windows")
162+
set(PHP_ODBC_TYPE "Win32")
163+
elseif(
164+
(ODBC_DRIVER STREQUAL "iODBC" AND EXT_ODBC_TYPE STREQUAL "auto")
165+
OR EXT_ODBC_TYPE STREQUAL "iODBC"
166+
)
167+
# To match the native build system string:
168+
set(PHP_ODBC_TYPE "iodbc")
169+
elseif(ODBC_DRIVER AND EXT_ODBC_TYPE STREQUAL "auto")
170+
set(PHP_ODBC_TYPE "${ODBC_DRIVER}")
171+
elseif(EXT_ODBC_TYPE STREQUAL "custom")
172+
# To match the native build system string:
173+
set(PHP_ODBC_TYPE custom-odbc)
174+
else()
175+
set(PHP_ODBC_TYPE "${EXT_ODBC_TYPE}")
176+
endif()
145177

146-
if(EXT_ODBC_TYPE STREQUAL "adabas")
178+
if(PHP_ODBC_TYPE STREQUAL "adabas")
147179
set(HAVE_ADABAS 1)
148-
elseif(EXT_ODBC_TYPE STREQUAL "dbmaker")
180+
elseif(PHP_ODBC_TYPE STREQUAL "dbmaker")
149181
set(HAVE_DBMAKER 1)
150-
elseif(EXT_ODBC_TYPE MATCHES "^(empress|empress-bcs)$")
182+
elseif(PHP_ODBC_TYPE MATCHES "^(empress|empress-bcs)$")
151183
set(HAVE_EMPRESS 1)
152-
elseif(EXT_ODBC_TYPE STREQUAL "esoob")
184+
elseif(PHP_ODBC_TYPE STREQUAL "esoob")
153185
set(HAVE_ESOOB 1)
154-
elseif(EXT_ODBC_TYPE STREQUAL "ibm-db2")
155-
# Sanity check.
156-
if(TARGET ODBC::ODBC)
157-
cmake_push_check_state(RESET)
158-
set(CMAKE_REQUIRED_LIBRARIES ODBC::ODBC)
159-
check_include_file(sqlcli1.h HAVE_SQLCLI1_H)
160-
check_library_exists(ODBC::ODBC "" SQLExecute HAVE_SQLEXECUTE)
161-
cmake_pop_check_state()
162-
if(NOT HAVE_SQLCLI1_H)
163-
message(FATAL_ERROR "Required <sqlcli1.h> header file not found")
164-
endif()
165-
if(NOT HAVE_SQLEXECUTE)
166-
message(
167-
FATAL_ERROR
168-
"ODBC build test failed. SQLExecute not found. The DB2 environment "
169-
"needs to be sourced. Run the command line:\n"
170-
" . $IBM_DB2/db2profile"
171-
)
172-
endif()
173-
endif()
186+
elseif(PHP_ODBC_TYPE STREQUAL "ibm-db2")
174187
set(HAVE_IBMDB2 1)
175-
elseif(EXT_ODBC_TYPE STREQUAL "iODBC")
188+
elseif(PHP_ODBC_TYPE STREQUAL "iodbc")
176189
set(HAVE_IODBC 1)
177-
# To match the native build system string:
178-
set(EXT_ODBC_TYPE iodbc)
179-
elseif(EXT_ODBC_TYPE STREQUAL "sapdb")
190+
elseif(PHP_ODBC_TYPE STREQUAL "sapdb")
180191
set(HAVE_SAPDB 1)
181-
elseif(EXT_ODBC_TYPE STREQUAL "solid")
192+
elseif(PHP_ODBC_TYPE STREQUAL "solid")
182193
# Set based on the Solid version:
183194
if(ODBC_LIBRARY MATCHES "23\.(a|so)$")
184195
set(HAVE_SOLID 1)
@@ -195,21 +206,16 @@ elseif(EXT_ODBC_TYPE STREQUAL "solid")
195206
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
196207
set(SS_FBX 1)
197208
endif()
198-
elseif(EXT_ODBC_TYPE STREQUAL "unixODBC")
209+
elseif(PHP_ODBC_TYPE STREQUAL "unixODBC")
199210
set(HAVE_UNIXODBC 1)
200-
elseif(EXT_ODBC_TYPE STREQUAL "custom")
211+
elseif(PHP_ODBC_TYPE STREQUAL "custom-odbc")
201212
set(HAVE_CODBC 1)
202-
# To match the native build system string:
203-
set(EXT_ODBC_TYPE custom-odbc)
204213
endif()
205214

206215
if(NOT EXT_ODBC_TYPE MATCHES "^(dbmaker|solid)$")
207216
set(HAVE_SQLDATASOURCES 1)
208217
endif()
209218

210-
################################################################################
211-
# Set ODBC_* variables for main/build-defs.h file.
212-
################################################################################
213219
if(TARGET ODBC::ODBC)
214220
block(PROPAGATE PHP_ODBC_BUILD_DEFINITIONS_CODE)
215221
get_target_property(definitions ODBC::ODBC INTERFACE_COMPILE_DEFINITIONS)
@@ -249,11 +255,10 @@ if(TARGET ODBC::ODBC)
249255
set(PHP_ODBC_CFLAGS "${cflags}" CACHE INTERNAL "ODBC CFLAGS")
250256
set(PHP_ODBC_LFLAGS "${ldflags}" CACHE INTERNAL "ODBC linker flags")
251257
set(PHP_ODBC_LIBS "${libs}" CACHE INTERNAL "ODBC libraries")
252-
set(PHP_ODBC_TYPE "${EXT_ODBC_TYPE}" CACHE INTERNAL "ODBC type")
258+
set(PHP_ODBC_TYPE "${PHP_ODBC_TYPE}" CACHE INTERNAL "ODBC type")
253259

254260
if(
255-
NOT CMAKE_SYSTEM_NAME STREQUAL "Windows"
256-
AND NOT PHP_SOURCE_DIR
261+
NOT ODBC_DRIVER STREQUAL "Windows"
257262
AND NOT EXISTS ${PHP_SOURCE_DIR}/main/build-defs.h.in
258263
)
259264
set(

Diff for: cmake/ext/pdo_odbc/CMakeLists.txt

+13-17
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ php_set(
3636
)
3737
mark_as_advanced(EXT_PDO_ODBC_TYPE)
3838

39-
# Some ODBC drivers require setting ODBC_LIBRARY manually to find package.
39+
# Some ODBC drivers require setting ODBC_LIBRARY manually to be found.
4040
if(
4141
EXT_PDO_ODBC
4242
AND NOT EXT_PDO_ODBC_TYPE MATCHES "auto|unixODBC|iODBC"
@@ -71,12 +71,6 @@ target_sources(
7171

7272
add_dependencies(php_pdo_odbc php_pdo)
7373

74-
# TODO: Can this be fixed better?
75-
get_target_property(extension_type php_pdo_odbc TYPE)
76-
if(NOT extension_type MATCHES "^(MODULE|SHARED)_LIBRARY$")
77-
target_link_libraries(php_pdo_odbc PRIVATE PHP::main)
78-
endif()
79-
8074
if(NOT EXT_PDO_ODBC_TYPE STREQUAL "auto")
8175
set(ODBC_USE_DRIVER "${EXT_PDO_ODBC_TYPE}")
8276
endif()
@@ -87,18 +81,21 @@ set_package_properties(
8781
TYPE REQUIRED
8882
PURPOSE "Necessary to enable the pdo_odbc extension."
8983
)
90-
if(ODBC_DRIVER AND EXT_PDO_ODBC_TYPE STREQUAL "auto")
91-
set(EXT_PDO_ODBC_TYPE "${ODBC_DRIVER}")
92-
endif()
9384

94-
if(EXT_PDO_ODBC_TYPE STREQUAL "custom")
85+
if(ODBC_DRIVER STREQUAL "Windows")
86+
set(PDO_ODBC_TYPE "Win32")
87+
elseif(ODBC_DRIVER AND EXT_PDO_ODBC_TYPE STREQUAL "auto")
88+
set(PDO_ODBC_TYPE "${ODBC_DRIVER}")
89+
elseif(EXT_PDO_ODBC_TYPE STREQUAL "custom")
9590
set(PDO_ODBC_TYPE "generic-${ODBC_LIBRARY}")
9691
else()
9792
set(PDO_ODBC_TYPE "${EXT_PDO_ODBC_TYPE}")
9893
endif()
9994

10095
if(TARGET ODBC::ODBC)
10196
block()
97+
set(haveSomeHeaders)
98+
10299
foreach(
103100
header
104101
IN ITEMS
@@ -126,19 +123,18 @@ if(TARGET ODBC::ODBC)
126123
message(CHECK_START "Looking for ${header}")
127124
if(EXISTS ${ODBC_INCLUDE_DIR}/${header})
128125
message(CHECK_PASS "found")
129-
set(${const} 1)
126+
set(haveSomeHeaders TRUE)
130127
set(${const} 1 PARENT_SCOPE)
131128
else()
132129
message(CHECK_FAIL "not found")
133130
endif()
134-
135-
if(${const})
136-
set(haveSomeHeaders TRUE)
137-
endif()
138131
endforeach()
139132

140133
if(NOT haveSomeHeaders)
141-
message(FATAL_ERROR "Cannot find header file(s) for pdo_odbc")
134+
message(
135+
FATAL_ERROR
136+
"Could not found any of the ODBC header files to build pdo_odbc extension"
137+
)
142138
endif()
143139
endblock()
144140

Diff for: cmake/ext/random/CMakeLists.txt

-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,4 @@ block()
5454
check_include_files("${headers}" HAVE_COMMONCRYPTO_COMMONRANDOM_H)
5555
endblock()
5656

57-
# TODO: Fix this better with object libraries in the future.
58-
target_link_libraries(php_random PRIVATE Zend::Zend)
59-
6057
configure_file(config.cmake.h.in config.h)

Diff for: cmake/ext/standard/CMakeLists.txt

-2
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,6 @@ target_link_libraries(
199199
php_standard
200200
PRIVATE
201201
$<$<PLATFORM_ID:Windows>:iphlpapi>
202-
# TODO: Can this be fixed better?
203-
PHP::main
204202
)
205203

206204
################################################################################

0 commit comments

Comments
 (0)