@@ -10,20 +10,16 @@ PHP main binding.
1010include (CheckSymbolExists)
1111include (FeatureSummary)
1212
13- add_library (php INTERFACE )
14- add_library (PHP::PHP ALIAS php)
13+ ################################################################################
14+ # Add library.
15+ ################################################################################
1516
1617add_library (php_main OBJECT)
17- add_library (PHP::main ALIAS php_main)
1818
1919# These contain a list of built-in extensions based on the SAPI types.
2020add_library (php_main_internal_functions OBJECT internal_functions.c)
2121add_library (php_main_internal_functions_cli OBJECT internal_functions_cli.c)
2222
23- # Configuration library to transitively pass build options to php_main* targets.
24- add_library (php_main_configuration INTERFACE )
25- add_library (PHP::mainConfiguration ALIAS php_main_configuration)
26-
2723target_sources (
2824 php_main
2925 PRIVATE
@@ -140,51 +136,83 @@ if(_HAVE_ELF)
140136endif ()
141137
142138target_compile_definitions (
143- php_main_configuration
144- INTERFACE
145- ZEND_ENABLE_STATIC_TSRMLS_CACHE=1
139+ php_main
140+ PUBLIC
146141 $<$<PLATFORM_ID:Windows>:SAPI_EXPORTS>
147142)
148143
149- target_link_libraries (
150- php_main_configuration
151- INTERFACE
152- PHP::configuration
153- $<$<TARGET_EXISTS:PHP::win32 >:PHP::win32 $<TARGET_OBJECTS:PHP::win32 >>
154- )
155-
156- target_link_libraries (php_main PRIVATE PHP::mainConfiguration)
157- target_link_libraries (php_main_internal_functions PRIVATE PHP::mainConfiguration)
158- target_link_libraries (php_main_internal_functions_cli PRIVATE PHP::mainConfiguration)
159-
160144target_include_directories (
161145 php_main
162146 INTERFACE
163147 ${CMAKE_CURRENT_BINARY_DIR}
164148 ${CMAKE_CURRENT_SOURCE_DIR}
165149)
166150
167- # Add main PUBLIC/INTERFACE include directories to configuration.
168- target_include_directories (
169- php_configuration
170- INTERFACE
171- $<TARGET_PROPERTY:PHP::main,INTERFACE_INCLUDE_DIRECTORIES >
151+ set_property (
152+ TARGET
153+ php_main
154+ php_main_internal_functions
155+ php_main_internal_functions_cli
156+ APPEND
157+ PROPERTY COMPILE_DEFINITIONS ZEND_ENABLE_STATIC_TSRMLS_CACHE=1
172158)
173159
160+ # Add main PUBLIC/INTERFACE compile properties to configuration.
161+ # Cleaner COMPILE_ONLY generator expression is available in CMake >= 3.27.
162+ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.27)
163+ target_link_libraries (php_configuration INTERFACE $<COMPILE_ONLY:php_main>)
164+ else ()
165+ target_include_directories (
166+ php_configuration
167+ INTERFACE
168+ $<TARGET_PROPERTY:php_main,INTERFACE_INCLUDE_DIRECTORIES >
169+ )
170+ target_compile_definitions (
171+ php_configuration
172+ INTERFACE
173+ $<TARGET_PROPERTY:php_main,INTERFACE_COMPILE_DEFINITIONS >
174+ )
175+ endif ()
176+
177+ target_link_libraries (php_main PRIVATE PHP::configuration )
178+ target_link_libraries (php_main_internal_functions PRIVATE PHP::configuration )
179+ target_link_libraries (php_main_internal_functions_cli PRIVATE PHP::configuration )
180+
181+ ################################################################################
182+ # Add PHP::PHP.
183+ ################################################################################
184+
185+ add_library (php INTERFACE )
186+ add_library (PHP::PHP ALIAS php)
187+
174188target_link_libraries (
175189 php
176190 INTERFACE
177191 PHP::configuration
178- PHP::main
179- $<TARGET_OBJECTS:PHP::main>
180- # Pass transitively depending on the SAPI type.
181- $<IF:$<IN_LIST :$<TARGET_PROPERTY:NAME >,php_cgi;php_cli;php_embed;php_phpdbg>,php_main_internal_functions_cli $<TARGET_OBJECTS:php_main_internal_functions_cli>,php_main_internal_functions $<TARGET_OBJECTS:php_main_internal_functions>>
192+ php_main
182193 Zend::Zend
183- $<TARGET_OBJECTS:Zend::Zend >
194+ $<$<TARGET_EXISTS:PHP::windows>::PHP::windows >
184195 PHP::extensions
185196)
186197
198+ # OBJECT libraries propagate only compile properties to static libraries without
199+ # objects as there is no "linking" involved on the compiler level. This is a
200+ # workaround using interface target sources to make PHP::PHP more intuitive to
201+ # work with SAPIs.
202+ target_sources (
203+ php
204+ INTERFACE
205+ $<TARGET_OBJECTS:php_main>
206+ # Internal functions objects based on the SAPI type.
207+ $<IF:$<BOOL :$<TARGET_PROPERTY:PHP_SAPI_CLI>>,$<TARGET_OBJECTS:php_main_internal_functions_cli>,$<TARGET_OBJECTS:php_main_internal_functions>>
208+ $<TARGET_OBJECTS:Zend::Zend>
209+ $<$<TARGET_EXISTS:PHP::windows>:$<TARGET_OBJECTS:PHP::windows>>
210+ )
211+
212+ ################################################################################
187213# Add DTrace.
214+ ################################################################################
215+
188216if (PHP_DTRACE)
189217 message (CHECK_START "Checking for DTrace support" )
190218
@@ -223,7 +251,10 @@ add_feature_info(
223251 "performance analysis and troubleshooting"
224252)
225253
254+ ################################################################################
226255# Add Dmalloc.
256+ ################################################################################
257+
227258if (PHP_DMALLOC)
228259 message (CHECK_START "Checking for Dmalloc support" )
229260
@@ -238,7 +269,7 @@ if(PHP_DMALLOC)
238269 target_compile_definitions (
239270 php_configuration
240271 INTERFACE
241- $<$<COMPILE_LANGUAGE:ASM,C,CXX>:MALLOC_FUNC_CHECK >
272+ $<$<COMPILE_LANGUAGE:ASM,C,CXX>:DMALLOC_FUNC_CHECK >
242273 )
243274
244275 target_link_libraries (php_main PRIVATE Dmalloc::Dmalloc)
0 commit comments