Skip to content

Commit 4dbc73a

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
2 parents 9c13d6b + 74c8215 commit 4dbc73a

File tree

7 files changed

+132
-66
lines changed

7 files changed

+132
-66
lines changed

cmake/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ endif()
133133

134134
include(PHP/FeatureSummary)
135135

136+
include(cmake/CPack.cmake)
137+
136138
message("
137139
License
138140
-------

cmake/cmake/CPack.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#[=============================================================================[
2+
Initial project CPack configuration.
3+
#]=============================================================================]
4+
5+
if(NOT CPACK_PACKAGE_VERSION)
6+
set(CPACK_PACKAGE_VERSION ${PHP_VERSION})
7+
endif()
8+
9+
include(CPack)

cmake/cmake/Configuration.cmake

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,9 @@ set(
6464
CACHE PATH "The path where to scan for additional INI configuration files; By\
6565
default it is empty value; Pass it as a relative path inside the install\
6666
prefix, which will be automatically prepended; If given as an absolute path,\
67-
prefix is not prepended."
67+
install prefix is not prepended."
6868
)
6969
mark_as_advanced(PHP_CONFIG_FILE_SCAN_DIR)
70-
set(
71-
PHP_FULL_CONFIG_FILE_SCAN_DIR "" CACHE INTERNAL
72-
"Absolute path to the additional INI configuration files directory"
73-
)
74-
if(IS_ABSOLUTE "${PHP_CONFIG_FILE_SCAN_DIR}")
75-
set_property(
76-
CACHE PHP_FULL_CONFIG_FILE_SCAN_DIR
77-
PROPERTY VALUE "${PHP_CONFIG_FILE_SCAN_DIR}"
78-
)
79-
elseif(PHP_CONFIG_FILE_SCAN_DIR)
80-
set_property(
81-
CACHE PHP_FULL_CONFIG_FILE_SCAN_DIR
82-
PROPERTY VALUE "${CMAKE_INSTALL_PREFIX}/${PHP_CONFIG_FILE_SCAN_DIR}"
83-
)
84-
endif()
8570

8671
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
8772
set(
@@ -93,24 +78,10 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
9378
)
9479
mark_as_advanced(PHP_CONFIG_FILE_PATH)
9580
if(NOT PHP_CONFIG_FILE_PATH)
81+
# TODO: Fix this for the 'cmake --install ... --prefix' case.
9682
set_property(
9783
CACHE PHP_CONFIG_FILE_PATH
98-
PROPERTY VALUE "${CMAKE_INSTALL_SYSCONFDIR}"
99-
)
100-
endif()
101-
set(
102-
PHP_FULL_CONFIG_FILE_PATH "" CACHE INTERNAL
103-
"Absolute path in which to look for php.ini"
104-
)
105-
if(IS_ABSOLUTE "${PHP_CONFIG_FILE_PATH}")
106-
set_property(
107-
CACHE PHP_FULL_CONFIG_FILE_PATH
108-
PROPERTY VALUE "${PHP_CONFIG_FILE_PATH}"
109-
)
110-
elseif(PHP_CONFIG_FILE_PATH)
111-
set_property(
112-
CACHE PHP_FULL_CONFIG_FILE_PATH
113-
PROPERTY VALUE "${CMAKE_INSTALL_PREFIX}/${PHP_CONFIG_FILE_PATH}"
84+
PROPERTY VALUE "${CMAKE_INSTALL_FULL_SYSCONFDIR}"
11485
)
11586
endif()
11687
endif()

cmake/cmake/modules/PHP/ConfigureFile.cmake

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ include_guard(GLOBAL)
3434
# Parse given variables and create variables and values lists for passing to the
3535
# configure_file().
3636
# _php_configure_file_parse_variables(
37-
# variables
37+
# variableValuePairs
3838
# VARIABLES <variable-name>
3939
# VALUES <values-variable-name>
4040
# VALUES_IN_CODE <code-values-variable-name>
@@ -66,32 +66,34 @@ function(_php_configure_file_parse_variables)
6666
endif()
6767
endforeach()
6868

69-
# Check for even number of keyword values.
70-
set(variables "${ARGV0}")
71-
list(LENGTH variables length)
72-
math(EXPR modulus "${length} % 2")
73-
if(NOT modulus EQUAL 0)
74-
message(
75-
FATAL_ERROR
76-
"${CMAKE_CURRENT_FUNCTION}: The keyword VARIABLES must be a list of "
77-
"pairs - variable-name and value (it must contain an even number of "
78-
"items)."
79-
)
80-
endif()
69+
# Replace possible semicolons with a generator expression.
70+
set(processedItems)
71+
foreach(item IN LISTS ARGV0)
72+
if(item MATCHES [[.*\;.*]])
73+
string(
74+
REPLACE
75+
";"
76+
"$<SEMICOLON>"
77+
item
78+
"${item}"
79+
)
80+
endif()
81+
list(APPEND processedItems "${item}")
82+
endforeach()
8183

8284
set(isValue FALSE)
8385
set(resultVariables "")
8486
set(resultValues "")
8587
set(resultValuesInCode "")
86-
foreach(variable IN LISTS variables)
88+
89+
foreach(item IN LISTS processedItems)
8790
if(isValue)
8891
set(isValue FALSE)
8992
continue()
9093
endif()
9194
set(isValue TRUE)
9295

93-
list(POP_FRONT variables var value)
94-
96+
list(POP_FRONT processedItems var value)
9597
list(APPEND resultVariables ${var})
9698

9799
# The resultValues are for the first configure_file().
@@ -155,6 +157,17 @@ function(php_configure_file)
155157
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} expects an output filename")
156158
endif()
157159

160+
# Check for even number of keyword values.
161+
list(LENGTH parsed_VARIABLES length)
162+
math(EXPR modulus "${length} % 2")
163+
if(NOT modulus EQUAL 0)
164+
message(
165+
FATAL_ERROR
166+
"${CMAKE_CURRENT_FUNCTION}: The keyword VARIABLES must be a list of "
167+
"variable-name and value pairs (it must contain an even number of items)."
168+
)
169+
endif()
170+
158171
set(___phpConfigureFileTemplate "${ARGV0}")
159172
if(NOT IS_ABSOLUTE "${___phpConfigureFileTemplate}")
160173
set(

cmake/main/CMakeLists.txt

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ target_sources(
4545
streams/xp_socket.c
4646
strlcat.c
4747
strlcpy.c
48+
${PHP_BINARY_DIR}/main/build-defs.h
4849
PUBLIC
4950
FILE_SET HEADERS
5051
FILES
@@ -285,7 +286,10 @@ function(_php_main_create_files)
285286
# TODO: Set configure command string.
286287
set(CONFIGURE_COMMAND "cmake")
287288

288-
# TODO: Fix the installation prefix when passed via --prefix option.
289+
# TODO: Fix the installation prefixes below when passed via the '--prefix'
290+
# option of the 'cmake --install ...' command. PHP is at the time of writing
291+
# not a relocatable program.
292+
289293
if(PHP_PEAR_DIR)
290294
set(
291295
EXPANDED_PEAR_INSTALLDIR
@@ -305,16 +309,47 @@ function(_php_main_create_files)
305309
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_EXTENSION_DIR},${CMAKE_INSTALL_PREFIX}>"
306310
)
307311

308-
set(EXPANDED_PHP_CONFIG_FILE_PATH "${PHP_FULL_CONFIG_FILE_PATH}")
309-
set(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "${PHP_FULL_CONFIG_FILE_SCAN_DIR}")
310-
set(EXPANDED_BINDIR "${CMAKE_INSTALL_FULL_BINDIR}")
311-
set(EXPANDED_SBINDIR "${CMAKE_INSTALL_FULL_SBINDIR}")
312-
set(EXPANDED_MANDIR "${CMAKE_INSTALL_FULL_MANDIR}")
313-
set(EXPANDED_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
314-
set(EXPANDED_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}")
312+
# Set the directory where php.ini is looked for.
313+
set(
314+
EXPANDED_PHP_CONFIG_FILE_PATH
315+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_PATH},${CMAKE_INSTALL_PREFIX}>"
316+
)
317+
318+
# Set the directory where additional ini files are searched for.
319+
set(
320+
EXPANDED_PHP_CONFIG_FILE_SCAN_DIR
321+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_SCAN_DIR},${CMAKE_INSTALL_PREFIX}>"
322+
)
323+
324+
set(
325+
EXPANDED_BINDIR
326+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_BINDIR},${CMAKE_INSTALL_PREFIX}>"
327+
)
328+
329+
set(
330+
EXPANDED_SBINDIR
331+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SBINDIR},${CMAKE_INSTALL_PREFIX}>"
332+
)
333+
334+
set(
335+
EXPANDED_MANDIR
336+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_MANDIR},${CMAKE_INSTALL_PREFIX}>"
337+
)
338+
339+
set(
340+
EXPANDED_LIBDIR
341+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LIBDIR},${CMAKE_INSTALL_PREFIX}>"
342+
)
343+
344+
set(
345+
EXPANDED_DATADIR
346+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_DATADIR},${CMAKE_INSTALL_PREFIX}>"
347+
)
348+
315349
set(EXPANDED_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
316350
set(EXPANDED_LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}")
317351
set(prefix "${CMAKE_INSTALL_PREFIX}")
352+
318353
# Set shared library object extension.
319354
string(REPLACE "." "" SHLIB_DL_SUFFIX_NAME ${CMAKE_SHARED_MODULE_SUFFIX})
320355

@@ -344,6 +379,40 @@ function(_php_main_create_files)
344379
CONTENT "${content}"
345380
)
346381

382+
#[[
383+
TODO: This enables regenerating the build-defs.h file on the install step
384+
when using different install prefix at the 'cmake --install ... --prefix'
385+
phase. Needs to be adjusted further to rebuild PHP at such case.
386+
include(PHP/ConfigureFile)
387+
php_configure_file(
388+
${PHP_SOURCE_DIR}/main/build-defs.h.in
389+
${PHP_BINARY_DIR}/main/build-defs.h
390+
VARIABLES
391+
CONFIGURE_COMMAND "cmake"
392+
ODBC_CFLAGS "${ODBC_CFLAGS}"
393+
ODBC_LFLAGS "${ODBC_LFLAGS}"
394+
ODBC_LIBS "${ODBC_LIBS}"
395+
ODBC_TYPE "${ODBC_TYPE}"
396+
PROG_SENDMAIL "${PROG_SENDMAIL}"
397+
EXPANDED_PEAR_INSTALLDIR "${EXPANDED_PEAR_INSTALLDIR}"
398+
INCLUDE_PATH "${INCLUDE_PATH}"
399+
EXPANDED_EXTENSION_DIR "${EXPANDED_EXTENSION_DIR}"
400+
prefix "$<INSTALL_PREFIX>"
401+
EXPANDED_BINDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_BINDIR},$<INSTALL_PREFIX>>"
402+
EXPANDED_SBINDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SBINDIR},$<INSTALL_PREFIX>>"
403+
EXPANDED_MANDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_MANDIR},$<INSTALL_PREFIX>>"
404+
EXPANDED_LIBDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LIBDIR},$<INSTALL_PREFIX>>"
405+
EXPANDED_DATADIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_DATADIR},$<INSTALL_PREFIX>>"
406+
EXPANDED_SYSCONFDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SYSCONFDIR},$<INSTALL_PREFIX>>"
407+
EXPANDED_LOCALSTATEDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LOCALSTATEDIR},$<INSTALL_PREFIX>>"
408+
EXPANDED_PHP_CONFIG_FILE_PATH "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_PATH},$<INSTALL_PREFIX>>"
409+
EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_SCAN_DIR},$<INSTALL_PREFIX>>"
410+
SHLIB_DL_SUFFIX_NAME "${SHLIB_DL_SUFFIX_NAME}"
411+
)
412+
add_custom_target(php_main_build_defs_h DEPENDS ${PHP_BINARY_DIR}/main/build-defs.h)
413+
add_dependencies(php_main php_main_build_defs_h)
414+
#]]
415+
347416
set(HAVE_BUILD_DEFS_H 1)
348417
set(PHP_CONFIG_H_WINDOWS 0)
349418
set(file php_config.h)

cmake/main/php_config.cmake.h.in

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2053,31 +2053,32 @@
20532053
# define PEAR_INSTALLDIR "@EXPANDED_PEAR_INSTALLDIR@"
20542054

20552055
/* The path to the bin directory. */
2056-
# define PHP_BINDIR "@PREFIX@"
2056+
# define PHP_BINDIR "@EXPANDED_BINDIR@"
20572057

2058-
/* The path in which to look for php.ini. */
2058+
/* The path in which to look for php.ini. On Windows this macro isn't
2059+
utilized in the C code. */
20592060
# define PHP_CONFIG_FILE_PATH ""
20602061

20612062
/* The path where to scan for additional INI configuration files. */
2062-
# define PHP_CONFIG_FILE_SCAN_DIR "@PHP_FULL_CONFIG_FILE_SCAN_DIR@"
2063+
# define PHP_CONFIG_FILE_SCAN_DIR "@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@"
20632064

20642065
/* The path to the share directory. */
2065-
# define PHP_DATADIR "@PREFIX@"
2066+
# define PHP_DATADIR "@EXPANDED_DATADIR@"
20662067

20672068
/* Default directory for dynamically loadable PHP extensions. */
2068-
# define PHP_EXTENSION_DIR "@PREFIX@\\ext"
2069+
# define PHP_EXTENSION_DIR "@EXPANDED_EXTENSION_DIR@"
20692070

20702071
/* The 'include_path' PHP INI directive. */
20712072
# define PHP_INCLUDE_PATH "@INCLUDE_PATH@"
20722073

20732074
/* The path containing system libraries (lib or lib64). */
2074-
# define PHP_LIBDIR "@PREFIX@"
2075+
# define PHP_LIBDIR "@EXPANDED_LIBDIR@"
20752076

20762077
/* The path to the var directory. */
2077-
# define PHP_LOCALSTATEDIR "@PREFIX@"
2078+
# define PHP_LOCALSTATEDIR "@EXPANDED_LOCALSTATEDIR@"
20782079

20792080
/* The installation prefix. */
2080-
# define PHP_PREFIX "@PREFIX@"
2081+
# define PHP_PREFIX "@prefix@"
20812082

20822083
/* The prefix for the shared library objects. */
20832084
# define PHP_SHLIB_EXT_PREFIX "php_"
@@ -2086,7 +2087,7 @@
20862087
# define PHP_SHLIB_SUFFIX "@SHLIB_DL_SUFFIX_NAME@"
20872088

20882089
/* The path to the etc directory. */
2089-
# define PHP_SYSCONFDIR "@PREFIX@"
2090+
# define PHP_SYSCONFDIR "@EXPANDED_SYSCONFDIR@"
20902091

20912092
# if __has_include("main/config.pickle.h")
20922093
# include "main/config.pickle.h"

cmake/sapi/embed/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ pkgconfig_generate_pc(
5656
PHP_VERSION "${PHP_VERSION}"
5757
PHP_VERSION_ID "${PHP_VERSION_ID}"
5858
PHP_EXTENSION_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_EXTENSION_DIR},$<INSTALL_PREFIX>>"
59-
PHP_CONFIG_FILE_SCAN_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_FULL_CONFIG_FILE_SCAN_DIR},$<INSTALL_PREFIX>>"
59+
# TODO: Fix this for cmake --install ... --prefix
60+
PHP_CONFIG_FILE_SCAN_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_SCAN_DIR},$<INSTALL_PREFIX>>"
6061
PHP_CONFIG_FILE_PATH "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_PATH},$<INSTALL_PREFIX>>"
6162
PHP_DEBUG "$<IF:$<CONFIG:Debug,DebugAssertions>,yes,no>"
6263
PHP_THREAD_SAFETY "$<IF:$<BOOL:$<TARGET_PROPERTY:php_configuration,PHP_THREAD_SAFETY>>,yes,no>"

0 commit comments

Comments
 (0)