Skip to content

Commit ebbd416

Browse files
committed
Merge branch 'PHP-8.4'
2 parents 86015b3 + bcfe852 commit ebbd416

File tree

11 files changed

+119
-86
lines changed

11 files changed

+119
-86
lines changed

cmake/CMakeLists.txt

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,64 @@ endif()
4242
set(CMAKE_C_STANDARD 11)
4343
set(CMAKE_C_STANDARD_REQUIRED TRUE)
4444

45+
################################################################################
46+
# Create interface targets providing usage requirements.
47+
################################################################################
48+
49+
# Usage requirements for all PHP-related targets in the build.
50+
add_library(php_config INTERFACE)
51+
add_library(PHP::config ALIAS php_config)
52+
target_include_directories(
53+
php_config
54+
INTERFACE
55+
${PHP_BINARY_DIR}
56+
${PHP_SOURCE_DIR}
57+
)
58+
59+
# Interface library that ties objects and configuration together for PHP SAPIs.
60+
add_library(php_sapi INTERFACE)
61+
add_library(PHP::sapi ALIAS php_sapi)
62+
target_link_libraries(php_sapi INTERFACE PHP::config)
63+
4564
################################################################################
4665
# Configure project.
4766
################################################################################
4867

49-
include(cmake/Bootstrap.cmake)
68+
define_property(
69+
TARGET
70+
PROPERTY PHP_CLI
71+
BRIEF_DOCS "Whether the PHP SAPI or extension is CLI-based"
72+
)
73+
74+
define_property(
75+
TARGET
76+
PROPERTY PHP_SAPI_FASTCGI
77+
BRIEF_DOCS "Whether the PHP SAPI is FastCGI-based"
78+
)
79+
80+
# Check whether IPO/LTO can be enabled.
81+
include(PHP/Optimization)
82+
83+
# Set CMAKE_POSITION_INDEPENDENT_CODE.
84+
include(PHP/PositionIndependentCode)
85+
86+
# Configure build types.
87+
include(cmake/BuildTypes.cmake)
88+
89+
# Set platform-specific configuration.
90+
include(cmake/Platform.cmake)
91+
92+
# Set PHP configuration options and variables.
93+
include(cmake/Configuration.cmake)
94+
95+
# Check requirements.
96+
include(cmake/Requirements.cmake)
97+
98+
# Run PHP configuration checks.
99+
include(cmake/ConfigureChecks.cmake)
100+
101+
# Check compilation options.
102+
include(cmake/Flags.cmake)
50103

51104
add_subdirectory(sapi)
52105
add_subdirectory(ext)
@@ -69,9 +122,12 @@ include(PHP/Stubs)
69122
# Check thread safety.
70123
include(PHP/ThreadSafety)
71124

125+
################################################################################
72126
# Execute all deferred calls. Calls are additionally sorted with natural
73127
# comparison method by their IDs. If call hasn't set any ID number, CMake
74128
# assigns it a default value of __<number>.
129+
################################################################################
130+
75131
block()
76132
cmake_language(DEFER GET_CALL_IDS ids)
77133
list(SORT ids COMPARE NATURAL)

cmake/cmake/Bootstrap.cmake

Lines changed: 0 additions & 62 deletions
This file was deleted.

cmake/cmake/ConfigureChecks.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
Project-wide configuration checks.
33
#]=============================================================================]
44

5+
message(STATUS "")
6+
message(STATUS "")
7+
message(STATUS "Running system checks")
8+
message(STATUS "=====================")
9+
message(STATUS "")
10+
511
include_guard(GLOBAL)
612

713
include(CheckFunctionExists)

cmake/cmake/Flags.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ if(PHP_ADDRESS_SANITIZER)
289289
target_link_options(
290290
php_config
291291
INTERFACE
292-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fsanitize=address>
292+
$<$<LINK_LANGUAGE:C,CXX>:-fsanitize=address>
293293
)
294294

295295
target_compile_definitions(
@@ -336,7 +336,7 @@ if(PHP_UNDEFINED_SANITIZER)
336336
target_link_options(
337337
php_config
338338
INTERFACE
339-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fsanitize=undefined;-fno-sanitize-recover=undefined>
339+
$<$<LINK_LANGUAGE:C,CXX>:-fsanitize=undefined;-fno-sanitize-recover=undefined>
340340
)
341341

342342
# Disable object-size sanitizer, because it is incompatible with the
@@ -368,7 +368,7 @@ if(PHP_UNDEFINED_SANITIZER)
368368
target_link_options(
369369
php_config
370370
INTERFACE
371-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fno-sanitize=object-size>
371+
$<$<LINK_LANGUAGE:C,CXX>:-fno-sanitize=object-size>
372372
)
373373
endif()
374374

cmake/cmake/modules/PHP/CheckSegmentsAlignment.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ if(PHP_HAS_ALIGNMENT_FLAGS_C)
4848
target_link_options(
4949
php_config
5050
INTERFACE
51-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:ASM,C>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
51+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:C>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
5252
)
5353
else()
5454
cmake_push_check_state(RESET)
@@ -69,7 +69,7 @@ else()
6969
target_link_options(
7070
php_config
7171
INTERFACE
72-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:ASM,C>>:LINKER:-z,max-page-size=2097152>
72+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:C>>:LINKER:-z,max-page-size=2097152>
7373
)
7474
endif()
7575
endif()

cmake/cmake/platforms/Darwin.cmake

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
2525
endif()
2626

2727
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
28-
# TODO: This is still needed for shared extensions on macOS, otherwise
29-
# undefined symbol errors happen in the linking step when using Clang.
28+
# Set -undefined <treatment> linker flag to "dynamic_lookup" (default
29+
# <treatment> is "error"). This is needed for shared and module PHP targets on
30+
# macOS, otherwise undefined symbol errors happen in the linking step.
31+
# Autotools with libtool here uses older "suppress" treatment instead and
32+
# "-flat_namespace" linker option.
3033
check_linker_flag(
3134
C
3235
"LINKER:-undefined,dynamic_lookup"
@@ -36,7 +39,20 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
3639
target_link_options(
3740
php_config
3841
INTERFACE
39-
$<$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>:LINKER:-undefined,dynamic_lookup>
42+
$<$<AND:$<LINK_LANGUAGE:C>,$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>>:LINKER:-undefined,dynamic_lookup>
43+
)
44+
endif()
45+
46+
check_linker_flag(
47+
CXX
48+
"LINKER:-undefined,dynamic_lookup"
49+
PHP_HAS_UNDEFINED_DYNAMIC_LOOKUP_FLAG_CXX
50+
)
51+
if(PHP_HAS_UNDEFINED_DYNAMIC_LOOKUP_FLAG_CXX)
52+
target_link_options(
53+
php_config
54+
INTERFACE
55+
$<$<AND:$<LINK_LANGUAGE:CXX>,$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>>:LINKER:-undefined,dynamic_lookup>
4056
)
4157
endif()
4258
endif()

cmake/ext/phar/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,14 @@ target_sources(
7777

7878
target_compile_definitions(php_ext_phar PRIVATE ZEND_ENABLE_STATIC_TSRMLS_CACHE)
7979

80-
target_link_options(
81-
php_ext_phar
82-
PRIVATE
83-
# Silence irrelevant-to-us warning in release builds.
84-
$<$<AND:$<NOT:$<CONFIG:Debug,DebugAssertions>>,$<C_COMPILER_ID:MSVC>>:LINKER:/IGNORE:4089>
85-
)
80+
if(MSVC AND TODO)
81+
target_link_options(
82+
php_ext_phar
83+
PRIVATE
84+
# Silence irrelevant warning in release builds.
85+
$<$<NOT:$<CONFIG:Debug,DebugAssertions>>:LINKER:/IGNORE:4089>
86+
)
87+
endif()
8688

8789
add_dependencies(php_ext_phar php_ext_hash php_ext_spl)
8890

cmake/ext/xsl/CMakeLists.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,13 @@ target_compile_definitions(
7474
$<$<PLATFORM_ID:Windows>:LIBXSLT_STATIC>
7575
)
7676

77-
target_link_options(
78-
php_ext_xsl
79-
PRIVATE
80-
$<$<AND:$<CONFIG:Debug,DebugAssertions>,$<C_COMPILER_ID:MSVC>>:LINKER:/nodefaultlib:msvcrt>
81-
)
77+
if(MSVC)
78+
target_link_options(
79+
php_ext_xsl
80+
PRIVATE
81+
$<$<CONFIG:Debug,DebugAssertions>:LINKER:/nodefaultlib:msvcrt>
82+
)
83+
endif()
8284

8385
include(Packages/LibXml2)
8486

cmake/sapi/apache2handler/CMakeLists.txt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,20 @@ if(CMAKE_SYSTEM_NAME STREQUAL "AIX" AND EXISTS ${Apache_LIBEXECDIR}/httpd.exp)
9494
target_link_options(
9595
php_sapi_apache2handler
9696
PRIVATE
97-
"$<$<PLATFORM_ID:AIX>LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp>"
97+
"$<$<LINKER_LANGUAGE:C>:LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp>"
98+
)
99+
endif()
100+
101+
check_linker_flag(
102+
CXX
103+
"LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp"
104+
PHP_HAS_BRTL_FLAG_CXX
105+
)
106+
if(PHP_HAS_BRTL_FLAG_CXX)
107+
target_link_options(
108+
php_sapi_apache2handler
109+
PRIVATE
110+
"$<$<LINKER_LANGUAGE:CXX>:LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp>"
98111
)
99112
endif()
100113
endif()

cmake/sapi/fuzzer/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ if(LIB_FUZZING_ENGINE OR DEFINED ENV{LIB_FUZZING_ENGINE})
8080
target_link_options(
8181
php_sapi_fuzzer
8282
INTERFACE
83-
"$<$<COMPILE_LANGUAGE:ASM,C,CXX>:${libFuzzingEngine}>"
83+
"$<$<LINK_LANGUAGE:C,CXX>:${libFuzzingEngine}>"
8484
)
8585
else()
8686
cmake_push_check_state(RESET)
@@ -124,7 +124,7 @@ else()
124124
target_link_options(
125125
php_sapi_fuzzer
126126
INTERFACE
127-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fsanitize=fuzzer>
127+
$<$<LINK_LANGUAGE:C,CXX>:-fsanitize=fuzzer>
128128
)
129129
endif()
130130

0 commit comments

Comments
 (0)