Skip to content

Commit 9cb6e6d

Browse files
committed
Fix PHP path configuration variables and install prefix
This now fixes also PHP_EXTENSION_DIR, PHP_CONFIG_FILE_PATH, PHP_CONFIG_FILE_SCAN_DIR, and all CMAKE_INSTALL_* variables to be properly replaced based on the given installation prefix. The main/build-defs.h.in and main/php_config.h are still left to be done somehow differently. At least for the *nix systems this now works sufficiently for the time being and will be refactored and enhanced further in the future if possible.
1 parent d63d313 commit 9cb6e6d

File tree

8 files changed

+174
-103
lines changed

8 files changed

+174
-103
lines changed

cmake/cmake/Configuration.cmake

Lines changed: 112 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ include_guard(GLOBAL)
1616
include(CMakeDependentOption)
1717
include(FeatureSummary)
1818

19-
################################################################################
20-
# Customizable variables.
21-
################################################################################
22-
2319
set(PHP_UNAME "" CACHE STRING "Build system uname")
2420
mark_as_advanced(PHP_UNAME)
2521

@@ -64,41 +60,67 @@ if(NOT PHP_LAYOUT STREQUAL "GNU")
6460
# TODO: DATAROOTDIR should be "php" instead of default "share".
6561
endif()
6662

67-
set(
68-
PHP_EXTENSION_DIR ""
69-
CACHE PATH
70-
"Default directory for dynamically loadable PHP extensions. If left empty, it\
71-
is determined automatically. Can be overridden using the PHP 'extension_dir'\
72-
INI directive."
73-
)
74-
mark_as_advanced(PHP_EXTENSION_DIR)
75-
7663
set(
7764
PHP_CONFIG_FILE_SCAN_DIR ""
78-
CACHE PATH "The path where to scan for additional INI configuration files"
65+
CACHE PATH "The path where to scan for additional INI configuration files; By\
66+
default it is empty value; Pass it as a relative string inside the install\
67+
prefix, which will be automatically prepended; If given as an absolute path,\
68+
prefix is not prepended."
7969
)
8070
mark_as_advanced(PHP_CONFIG_FILE_SCAN_DIR)
71+
set(
72+
PHP_FULL_CONFIG_FILE_SCAN_DIR "" CACHE INTERNAL
73+
"Absolute path to the additional INI configuration files directory"
74+
)
75+
if(IS_ABSOLUTE "${PHP_CONFIG_FILE_SCAN_DIR}")
76+
set_property(
77+
CACHE PHP_FULL_CONFIG_FILE_SCAN_DIR
78+
PROPERTY VALUE "${PHP_CONFIG_FILE_SCAN_DIR}"
79+
)
80+
elseif(PHP_CONFIG_FILE_SCAN_DIR)
81+
set_property(
82+
CACHE PHP_FULL_CONFIG_FILE_SCAN_DIR
83+
PROPERTY VALUE "${CMAKE_INSTALL_PREFIX}/${PHP_CONFIG_FILE_SCAN_DIR}"
84+
)
85+
endif()
8186

8287
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
8388
set(
8489
PHP_CONFIG_FILE_PATH ""
85-
CACHE FILEPATH "The path in which to look for php.ini."
90+
CACHE FILEPATH "The path in which to look for php.ini; By default it is set\
91+
to sysconfdir (for GNU layout) or libdir (for PHP layout); Pass it as a\
92+
relative string inside the install prefix, which will be automatically\
93+
prepended; If given as an absolute path, prefix is not appended."
8694
)
8795
mark_as_advanced(PHP_CONFIG_FILE_PATH)
88-
8996
if(NOT PHP_CONFIG_FILE_PATH)
9097
if(PHP_LAYOUT STREQUAL "GNU")
9198
set_property(
9299
CACHE PHP_CONFIG_FILE_PATH
93-
PROPERTY VALUE "${CMAKE_INSTALL_FULL_SYSCONFDIR}"
100+
PROPERTY VALUE "${CMAKE_INSTALL_SYSCONFDIR}"
94101
)
95102
else()
96103
set_property(
97104
CACHE PHP_CONFIG_FILE_PATH
98-
PROPERTY VALUE "${CMAKE_INSTALL_FULL_LIBDIR}"
105+
PROPERTY VALUE "${CMAKE_INSTALL_LIBDIR}"
99106
)
100107
endif()
101108
endif()
109+
set(
110+
PHP_FULL_CONFIG_FILE_PATH "" CACHE INTERNAL
111+
"Absolute path in which to look for php.ini"
112+
)
113+
if(IS_ABSOLUTE "${PHP_CONFIG_FILE_PATH}")
114+
set_property(
115+
CACHE PHP_FULL_CONFIG_FILE_PATH
116+
PROPERTY VALUE "${PHP_CONFIG_FILE_PATH}"
117+
)
118+
elseif(PHP_CONFIG_FILE_PATH)
119+
set_property(
120+
CACHE PHP_FULL_CONFIG_FILE_PATH
121+
PROPERTY VALUE "${CMAKE_INSTALL_PREFIX}/${PHP_CONFIG_FILE_PATH}"
122+
)
123+
endif()
102124
endif()
103125

104126
set(PHP_PROGRAM_PREFIX "" CACHE STRING "Prepend prefix to the program names")
@@ -107,10 +129,6 @@ mark_as_advanced(PHP_PROGRAM_PREFIX)
107129
set(PHP_PROGRAM_SUFFIX "" CACHE STRING "Append suffix to the program names")
108130
mark_as_advanced(PHP_PROGRAM_SUFFIX)
109131

110-
################################################################################
111-
# General options.
112-
################################################################################
113-
114132
option(PHP_RE2C_CGOTO "Enable computed goto GCC extension with re2c" OFF)
115133
mark_as_advanced(PHP_RE2C_CGOTO)
116134

@@ -176,6 +194,78 @@ mark_as_advanced(PHP_LIBGCC)
176194
option(PHP_CCACHE "Use ccache if available on the system" ON)
177195
mark_as_advanced(PHP_CCACHE)
178196

197+
################################################################################
198+
# Set PHP_EXTENSION_DIR.
199+
################################################################################
200+
201+
set(
202+
PHP_EXTENSION_DIR ""
203+
CACHE PATH
204+
"Default directory for dynamically loadable PHP extensions. If left empty, it\
205+
is determined automatically. Can be overridden using the PHP 'extension_dir'\
206+
INI directive."
207+
)
208+
mark_as_advanced(PHP_EXTENSION_DIR)
209+
210+
block()
211+
if(NOT PHP_EXTENSION_DIR)
212+
file(READ ${PHP_SOURCE_DIR}/Zend/zend_modules.h content)
213+
string(REGEX MATCH "#define ZEND_MODULE_API_NO ([0-9]*)" _ "${content}")
214+
set(zend_module_api_no ${CMAKE_MATCH_1})
215+
216+
set(extension_dir "${CMAKE_INSTALL_LIBDIR}/php")
217+
218+
if(PHP_LAYOUT STREQUAL "GNU")
219+
set(extension_dir "${extension_dir}/${zend_module_api_no}")
220+
221+
# TODO: When apache2handler SAPI enforces the thread safe build (as done
222+
# in the Autotools), the PHP_THREAD_SAFETY variable isn't yet available.
223+
if(PHP_THREAD_SAFETY)
224+
set(extension_dir "${extension_dir}-zts")
225+
endif()
226+
227+
if(PHP_DEBUG)
228+
set(extension_dir "${extension_dir}-debug")
229+
endif()
230+
else()
231+
set(extension_dir "${extension_dir}/extensions")
232+
233+
if(PHP_DEBUG)
234+
set(extension_dir "${extension_dir}/debug")
235+
else()
236+
set(extension_dir "${extension_dir}/no-debug")
237+
endif()
238+
239+
if(PHP_THREAD_SAFETY)
240+
set(extension_dir "${extension_dir}-zts")
241+
else()
242+
set(extension_dir "${extension_dir}-non-zts")
243+
endif()
244+
245+
set(extension_dir "${extension_dir}-${zend_module_api_no}")
246+
endif()
247+
248+
set_property(CACHE PHP_EXTENSION_DIR PROPERTY VALUE "${extension_dir}")
249+
endif()
250+
endblock()
251+
252+
set(
253+
PHP_FULL_EXTENSION_DIR "" CACHE INTERNAL
254+
"Absolute path for the dynamically loadable extensions."
255+
)
256+
257+
if(IS_ABSOLUTE "${PHP_EXTENSION_DIR}")
258+
set_property(
259+
CACHE PHP_FULL_EXTENSION_DIR
260+
PROPERTY VALUE "${PHP_EXTENSION_DIR}"
261+
)
262+
elseif(PHP_EXTENSION_DIR)
263+
set_property(
264+
CACHE PHP_FULL_EXTENSION_DIR
265+
PROPERTY VALUE "${CMAKE_INSTALL_PREFIX}/${PHP_EXTENSION_DIR}"
266+
)
267+
endif()
268+
179269
################################################################################
180270
# Various global internal configuration.
181271
################################################################################
@@ -251,50 +341,3 @@ set_package_properties(
251341
URL "https://zlib.net/"
252342
DESCRIPTION "Compression library"
253343
)
254-
255-
################################################################################
256-
# Adjust configuration.
257-
################################################################################
258-
259-
# Set default PHP_EXTENSION_DIR based on the layout used.
260-
block()
261-
if(NOT PHP_EXTENSION_DIR)
262-
file(READ ${PHP_SOURCE_DIR}/Zend/zend_modules.h content)
263-
string(REGEX MATCH "#define ZEND_MODULE_API_NO ([0-9]*)" _ "${content}")
264-
set(zend_module_api_no ${CMAKE_MATCH_1})
265-
266-
set(extension_dir "${CMAKE_INSTALL_FULL_LIBDIR}/php")
267-
268-
if(PHP_LAYOUT STREQUAL "GNU")
269-
set(extension_dir "${extension_dir}/${zend_module_api_no}")
270-
271-
# TODO: When apache2handler SAPI enforces the thread safe build (as done
272-
# in the Autotools), the PHP_THREAD_SAFETY variable isn't yet available.
273-
if(PHP_THREAD_SAFETY)
274-
set(extension_dir "${extension_dir}-zts")
275-
endif()
276-
277-
if(PHP_DEBUG)
278-
set(extension_dir "${extension_dir}-debug")
279-
endif()
280-
else()
281-
set(extension_dir "${extension_dir}/extensions")
282-
283-
if(PHP_DEBUG)
284-
set(extension_dir "${extension_dir}/debug")
285-
else()
286-
set(extension_dir "${extension_dir}/no-debug")
287-
endif()
288-
289-
if(PHP_THREAD_SAFETY)
290-
set(extension_dir "${extension_dir}-zts")
291-
else()
292-
set(extension_dir "${extension_dir}-non-zts")
293-
endif()
294-
295-
set(extension_dir "${extension_dir}-${zend_module_api_no}")
296-
endif()
297-
298-
set_property(CACHE PHP_EXTENSION_DIR PROPERTY VALUE "${extension_dir}")
299-
endif()
300-
endblock()

cmake/cmake/modules/PHP/ConfigureFile.cmake

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ php_configure_file(
2929
which is replaced with installation prefix either set via the
3030
`CMAKE_INSTALL_PREFIX` variable at the configuration phase, or the `--prefix`
3131
option at the `cmake --install` phase.
32+
33+
The custom PHP specific `$<PHP_EXPAND:path>` generator expression can be used
34+
in variable values. It is automatically replaced to `<install-prefix>/path`
35+
if `path` is relative, or to just `path` if `path` is absolute.
3236
#]=============================================================================]
3337

3438
include_guard(GLOBAL)
@@ -59,6 +63,16 @@ function(_php_configure_file_parse_variables variables)
5963

6064
list(APPEND result_variables ${var})
6165

66+
if(value MATCHES [[^\$<PHP_EXPAND:(.*)>.*]])
67+
if(IS_ABSOLUTE "${CMAKE_MATCH_1}")
68+
set(value "${CMAKE_MATCH_1}")
69+
elseif(CMAKE_MATCH_1)
70+
set(value "$<INSTALL_PREFIX>/${CMAKE_MATCH_1}")
71+
else()
72+
set(value "")
73+
endif()
74+
endif()
75+
6276
# The result_values are for the install(CODE) and generator expression
6377
# $<INSTALL_PREFIX> works since CMake 3.27, for earlier versions the escaped
6478
# variable CMAKE_INSTALL_PREFIX can be used.

cmake/cmake/modules/PHP/PkgConfigGenerator.cmake

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ template.
5151
`CMAKE_INSTALL_PREFIX` variable at the configuration phase, or the `--prefix`
5252
option at the `cmake --install` phase.
5353
54+
The custom PHP specific `$<PHP_EXPAND:path>` generator expression can be used
55+
in variable values. It is automatically replaced to `<install-prefix>/path`
56+
if `path` is relative, or to just `path` if `path` is absolute.
57+
5458
* `SKIP_BOOL_NORMALIZATION`
5559
CMake booleans have values `yes`, `no`, `true`, `false`, `on`, `off`, `1`,
5660
`0`, they can even be case insensitive and so on. By default, all booleans
@@ -109,6 +113,16 @@ function(_pkgconfig_parse_variables variables)
109113

110114
list(APPEND result_variables ${var})
111115

116+
if(value MATCHES [[^\$<PHP_EXPAND:(.*)>.*]])
117+
if(IS_ABSOLUTE "${CMAKE_MATCH_1}")
118+
set(value "${CMAKE_MATCH_1}")
119+
elseif(CMAKE_MATCH_1)
120+
set(value "$<INSTALL_PREFIX>/${CMAKE_MATCH_1}")
121+
else()
122+
set(value "")
123+
endif()
124+
endif()
125+
112126
# The result_values are for the install(CODE) and generator expression
113127
# $<INSTALL_PREFIX> works since CMake 3.27, for earlier versions the escaped
114128
# variable CMAKE_INSTALL_PREFIX can be used.

cmake/main/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@ function(_php_main_create_files)
250250
set(INCLUDE_PATH ".:${EXPANDED_PEAR_INSTALLDIR}")
251251
# TODO: Fix the installation prefix when passed via --prefix option.
252252
set(EXPANDED_EXTENSION_DIR "${PHP_EXTENSION_DIR}")
253-
set(EXPANDED_PHP_CONFIG_FILE_PATH "${PHP_CONFIG_FILE_PATH}")
254-
set(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "${PHP_CONFIG_FILE_SCAN_DIR}")
253+
set(EXPANDED_PHP_CONFIG_FILE_PATH "${PHP_FULL_CONFIG_FILE_PATH}")
254+
set(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "${PHP_FULL_CONFIG_FILE_SCAN_DIR}")
255255
set(EXPANDED_BINDIR "${CMAKE_INSTALL_FULL_BINDIR}")
256256
set(EXPANDED_SBINDIR "${CMAKE_INSTALL_FULL_SBINDIR}")
257257
set(EXPANDED_MANDIR "${CMAKE_INSTALL_FULL_MANDIR}")

cmake/main/config.w32.cmake.h.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@
996996
/* Define to 1 if the pdo_mysql extension uses mysqlnd. */
997997
#cmakedefine PDO_USE_MYSQLND 1
998998

999-
#define PHP_CONFIG_FILE_SCAN_DIR "@PHP_CONFIG_FILE_SCAN_DIR@"
999+
#define PHP_CONFIG_FILE_SCAN_DIR "@PHP_FULL_CONFIG_FILE_SCAN_DIR@"
10001000

10011001
/* Define to 1 if PHP uses its own crypt_r, and to 0 if using the external
10021002
crypt library. */

cmake/sapi/embed/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ pkgconfig_generate_pc(
5151
VARIABLES
5252
prefix "$<INSTALL_PREFIX>"
5353
exec_prefix "$<INSTALL_PREFIX>"
54-
includedir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}"
55-
libdir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_LIBDIR}"
54+
includedir "$<PHP_EXPAND:<${CMAKE_INSTALL_INCLUDEDIR}>"
55+
libdir "$<PHP_EXPAND:${CMAKE_INSTALL_LIBDIR}>"
5656
PHP_VERSION "${PHP_VERSION}"
5757
PHP_VERSION_ID "${PHP_VERSION_ID}"
58-
PHP_EXTENSION_DIR "${PHP_EXTENSION_DIR}"
59-
PHP_CONFIG_FILE_SCAN_DIR "${PHP_CONFIG_FILE_SCAN_DIR}"
60-
PHP_CONFIG_FILE_PATH "${PHP_CONFIG_FILE_PATH}"
58+
PHP_EXTENSION_DIR "$<PHP_EXPAND:${PHP_EXTENSION_DIR}>"
59+
PHP_CONFIG_FILE_SCAN_DIR "$<PHP_EXPAND:${PHP_FULL_CONFIG_FILE_SCAN_DIR}>"
60+
PHP_CONFIG_FILE_PATH "$<PHP_EXPAND:${PHP_CONFIG_FILE_PATH}>"
6161
PHP_DEBUG:BOOL "${PHP_DEBUG}"
6262
PHP_THREAD_SAFETY:BOOL "${PHP_THREAD_SAFETY}"
6363
)

cmake/sapi/fpm/CMakeLists.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,8 @@ php_configure_file(
421421
# TODO: Add file suffix.
422422
INSTALL_DESTINATION ${CMAKE_INSTALL_MANDIR}/man8
423423
VARIABLES
424-
php_fpm_localstatedir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_LOCALSTATEDIR}"
425-
php_fpm_sysconfdir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_SYSCONFDIR}"
424+
php_fpm_localstatedir "$<PHP_EXPAND:${CMAKE_INSTALL_LOCALSTATEDIR}>"
425+
php_fpm_sysconfdir "$<PHP_EXPAND:${CMAKE_INSTALL_SYSCONFDIR}>"
426426
php_fpm_prefix "$<INSTALL_PREFIX>"
427427
PHP_VERSION "${PHP_VERSION}"
428428
)
@@ -432,8 +432,8 @@ php_configure_file(
432432
php-fpm.conf
433433
VARIABLES
434434
prefix "$<INSTALL_PREFIX>"
435-
EXPANDED_LOCALSTATEDIR "$<INSTALL_PREFIX>/${CMAKE_INSTALL_LOCALSTATEDIR}"
436-
php_fpm_sysconfdir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_SYSCONFDIR}"
435+
EXPANDED_LOCALSTATEDIR "$<PHP_EXPAND:${CMAKE_INSTALL_LOCALSTATEDIR}>"
436+
php_fpm_sysconfdir "$<PHP_EXPAND:${CMAKE_INSTALL_SYSCONFDIR}>"
437437
)
438438

439439
php_configure_file(
@@ -444,7 +444,7 @@ php_configure_file(
444444
php_fpm_prefix "$<INSTALL_PREFIX>"
445445
php_fpm_user "${SAPI_FPM_USER}"
446446
php_fpm_group "${SAPI_FPM_GROUP}"
447-
EXPANDED_DATADIR "$<INSTALL_PREFIX>/${CMAKE_INSTALL_DATADIR}"
447+
EXPANDED_DATADIR "$<PHP_EXPAND:${CMAKE_INSTALL_DATADIR}>"
448448
)
449449

450450
php_configure_file(
@@ -453,19 +453,19 @@ php_configure_file(
453453
VARIABLES
454454
prefix "$<INSTALL_PREFIX>"
455455
exec_prefix "$<INSTALL_PREFIX>"
456-
sbindir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_SBINDIR}"
457-
sysconfdir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_SYSCONFDIR}"
458-
localstatedir "$<INSTALL_PREFIX>/${CMAKE_INSTALL_LOCALSTATEDIR}"
456+
sbindir "$<PHP_EXPAND:${CMAKE_INSTALL_SBINDIR}>"
457+
sysconfdir "$<PHP_EXPAND:${CMAKE_INSTALL_SYSCONFDIR}>"
458+
localstatedir "$<PHP_EXPAND:${CMAKE_INSTALL_LOCALSTATEDIR}>"
459459
)
460460

461461
php_configure_file(
462462
php-fpm.service.in
463463
php-fpm.service
464464
VARIABLES
465465
php_fpm_systemd "${PHP_FPM_SYSTEMD}"
466-
EXPANDED_LOCALSTATEDIR "$<INSTALL_PREFIX>/${CMAKE_INSTALL_LOCALSTATEDIR}"
467-
EXPANDED_SBINDIR "$<INSTALL_PREFIX>/${CMAKE_INSTALL_SBINDIR}"
468-
EXPANDED_SYSCONFDIR "$<INSTALL_PREFIX>/${CMAKE_INSTALL_SYSCONFDIR}"
466+
EXPANDED_LOCALSTATEDIR "$<PHP_EXPAND:${CMAKE_INSTALL_LOCALSTATEDIR}>"
467+
EXPANDED_SBINDIR "$<PHP_EXPAND:${CMAKE_INSTALL_SBINDIR}>"
468+
EXPANDED_SYSCONFDIR "$<PHP_EXPAND:${CMAKE_INSTALL_SYSCONFDIR}>"
469469
)
470470

471471
# TODO: Add program file prefix and suffix.

0 commit comments

Comments
 (0)