@@ -80,23 +80,49 @@ foreach(extension IN LISTS extensions)
8080
8181 add_dependencies (php_${extension} Zend::Zend)
8282
83- # Add extension's PUBLIC/INTERFACE compile properties to configuration.
84- # Cleaner COMPILE_ONLY generator expression is available in CMake >= 3.27.
85- if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.27)
86- target_link_libraries (
83+ # Add extension's transitive compile and link properties to configuration.
84+ # The INTERFACE_SOURCES are propagated separately only to PHP::PHP.
85+ # See: https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html
86+ # TODO: Should PHP_CLI extensions pass properties only to PHP_CLI SAPIs?
87+ get_target_property (type php_${extension} TYPE )
88+ if (NOT type MATCHES "^(MODULE|SHARED)_LIBRARY$" )
89+ target_compile_definitions (
90+ php_configuration
91+ INTERFACE
92+ $<TARGET_PROPERTY:PHP::${extension} ,INTERFACE_COMPILE_DEFINITIONS >
93+ )
94+
95+ target_compile_options (
96+ php_configuration
97+ INTERFACE
98+ $<TARGET_PROPERTY:PHP::${extension} ,INTERFACE_COMPILE_OPTIONS>
99+ )
100+
101+ target_compile_features (
87102 php_configuration
88103 INTERFACE
89- $<COMPILE_ONLY :PHP::${extension} >
104+ $<TARGET_PROPERTY :PHP::${extension} ,INTERFACE_COMPILE_FEATURES >
90105 )
91- else ()
92- # TODO: Fix this better. Either require 3.27, or limit/adjust compile
93- # properties propagated globally. Also, shared extensions shouldn't
94- # propagate globally.
95- # https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#id36
106+
96107 target_include_directories (
97108 php_configuration
98109 INTERFACE
99110 $<TARGET_PROPERTY:PHP::${extension} ,INTERFACE_INCLUDE_DIRECTORIES >
111+ $<TARGET_PROPERTY:PHP::${extension} ,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
112+ )
113+
114+ target_link_libraries (
115+ php_extensions
116+ INTERFACE
117+ $<IF:$<BOOL :$<TARGET_PROPERTY:PHP::${extension} ,PHP_CLI>>,$<$<BOOL :$<TARGET_PROPERTY:PHP_CLI>>:$<LINK_ONLY:PHP::${extension} >>,$<LINK_ONLY:PHP::${extension} >>
118+ )
119+
120+ target_sources (
121+ php_extensions
122+ INTERFACE
123+ $<IF:$<BOOL :$<TARGET_PROPERTY:PHP::${extension} ,PHP_CLI>>,$<$<BOOL :$<TARGET_PROPERTY:PHP_CLI>>:$<TARGET_OBJECTS:PHP::${extension} >>,$<TARGET_OBJECTS:PHP::${extension} >>
124+
125+ $<IF:$<BOOL :$<TARGET_PROPERTY:PHP::${extension} ,PHP_CLI>>,$<$<BOOL :$<TARGET_PROPERTY:PHP_CLI>>:$<TARGET_PROPERTY:PHP::${extension} ,INTERFACE_SOURCES>>,$<TARGET_PROPERTY:PHP::${extension} ,INTERFACE_SOURCES>>
100126 )
101127 endif ()
102128
@@ -109,44 +135,6 @@ foreach(extension IN LISTS extensions)
109135 $<TARGET_PROPERTY:php_configuration,INTERFACE_COMPILE_OPTIONS>
110136 )
111137
112- get_target_property (type php_${extension} TYPE )
113- get_target_property (isCli php_${extension} PHP_CLI)
114- if (NOT type MATCHES "^(MODULE|SHARED)_LIBRARY$" )
115- # If extension is STATIC library link as whole archive, otherwise link
116- # normally. CLI-based extensions are linked only to CLI-based SAPIs.
117- if (NOT isCli)
118- target_link_libraries (
119- php_extensions
120- INTERFACE
121- $<IF:$<STREQUAL :$<TARGET_PROPERTY:PHP::${extension} ,TYPE >,STATIC_LIBRARY>,$<LINK_LIBRARY:WHOLE_ARCHIVE,PHP::${extension} >,PHP::${extension} >
122- )
123-
124- target_sources (
125- php_extensions
126- INTERFACE
127- # If extension is OBJECT library:
128- $<$<STREQUAL :$<TARGET_PROPERTY:PHP::${extension} ,TYPE >,OBJECT_LIBRARY>:$<TARGET_OBJECTS:PHP::${extension} >>
129- # If extension and linked target (SAPI) are both STATIC libraries:
130- $<$<AND :$<STREQUAL :$<TARGET_PROPERTY:TYPE >,STATIC_LIBRARY>,$<STREQUAL :$<TARGET_PROPERTY:PHP::${extension} ,TYPE >,STATIC_LIBRARY>>:$<TARGET_OBJECTS:PHP::${extension} >>
131- )
132- else ()
133- target_link_libraries (
134- php_extensions
135- INTERFACE
136- $<$<BOOL :$<TARGET_PROPERTY:PHP_CLI>>:$<IF:$<STREQUAL :$<TARGET_PROPERTY:PHP::${extension} ,TYPE >,STATIC_LIBRARY>,$<LINK_LIBRARY:WHOLE_ARCHIVE,PHP::${extension} >,PHP::${extension} >>
137- )
138-
139- target_sources (
140- php_extensions
141- INTERFACE
142- # If extension is OBJECT library:
143- $<$<BOOL :$<TARGET_PROPERTY:PHP_CLI>>:$<$<STREQUAL :$<TARGET_PROPERTY:PHP::${extension} ,TYPE >,OBJECT_LIBRARY>:$<TARGET_OBJECTS:PHP::${extension} >>>
144- # If extension and linked target (SAPI) are both STATIC libraries:
145- $<$<BOOL :$<TARGET_PROPERTY:PHP_CLI>>:$<$<AND :$<STREQUAL :$<TARGET_PROPERTY:TYPE >,STATIC_LIBRARY>,$<STREQUAL :$<TARGET_PROPERTY:PHP::${extension} ,TYPE >,STATIC_LIBRARY>>:$<TARGET_OBJECTS:PHP::${extension} >>>
146- )
147- endif ()
148- endif ()
149-
150138 message (CHECK_PASS "enabled" )
151139 list (POP_BACK CMAKE_MESSAGE_CONTEXT)
152140endforeach ()
0 commit comments