Skip to content

Commit 74c8215

Browse files
committed
Add various improvements
Add adjustments for the generated files and initial solution for generating proper main/build-defs.h file.
1 parent 8181567 commit 74c8215

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
@@ -44,6 +44,7 @@ target_sources(
4444
streams/xp_socket.c
4545
strlcat.c
4646
strlcpy.c
47+
${PHP_BINARY_DIR}/main/build-defs.h
4748
PUBLIC
4849
FILE_SET HEADERS
4950
FILES
@@ -247,7 +248,10 @@ function(_php_main_create_files)
247248
# TODO: Set configure command string.
248249
set(CONFIGURE_COMMAND "cmake")
249250

250-
# TODO: Fix the installation prefix when passed via --prefix option.
251+
# TODO: Fix the installation prefixes below when passed via the '--prefix'
252+
# option of the 'cmake --install ...' command. PHP is at the time of writing
253+
# not a relocatable program.
254+
251255
if(PHP_PEAR_DIR)
252256
set(
253257
EXPANDED_PEAR_INSTALLDIR
@@ -267,16 +271,47 @@ function(_php_main_create_files)
267271
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_EXTENSION_DIR},${CMAKE_INSTALL_PREFIX}>"
268272
)
269273

270-
set(EXPANDED_PHP_CONFIG_FILE_PATH "${PHP_FULL_CONFIG_FILE_PATH}")
271-
set(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "${PHP_FULL_CONFIG_FILE_SCAN_DIR}")
272-
set(EXPANDED_BINDIR "${CMAKE_INSTALL_FULL_BINDIR}")
273-
set(EXPANDED_SBINDIR "${CMAKE_INSTALL_FULL_SBINDIR}")
274-
set(EXPANDED_MANDIR "${CMAKE_INSTALL_FULL_MANDIR}")
275-
set(EXPANDED_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
276-
set(EXPANDED_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}")
274+
# Set the directory where php.ini is looked for.
275+
set(
276+
EXPANDED_PHP_CONFIG_FILE_PATH
277+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_PATH},${CMAKE_INSTALL_PREFIX}>"
278+
)
279+
280+
# Set the directory where additional ini files are searched for.
281+
set(
282+
EXPANDED_PHP_CONFIG_FILE_SCAN_DIR
283+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_SCAN_DIR},${CMAKE_INSTALL_PREFIX}>"
284+
)
285+
286+
set(
287+
EXPANDED_BINDIR
288+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_BINDIR},${CMAKE_INSTALL_PREFIX}>"
289+
)
290+
291+
set(
292+
EXPANDED_SBINDIR
293+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SBINDIR},${CMAKE_INSTALL_PREFIX}>"
294+
)
295+
296+
set(
297+
EXPANDED_MANDIR
298+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_MANDIR},${CMAKE_INSTALL_PREFIX}>"
299+
)
300+
301+
set(
302+
EXPANDED_LIBDIR
303+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LIBDIR},${CMAKE_INSTALL_PREFIX}>"
304+
)
305+
306+
set(
307+
EXPANDED_DATADIR
308+
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_DATADIR},${CMAKE_INSTALL_PREFIX}>"
309+
)
310+
277311
set(EXPANDED_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
278312
set(EXPANDED_LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}")
279313
set(prefix "${CMAKE_INSTALL_PREFIX}")
314+
280315
# Set shared library object extension.
281316
string(REPLACE "." "" SHLIB_DL_SUFFIX_NAME ${CMAKE_SHARED_MODULE_SUFFIX})
282317

@@ -306,6 +341,40 @@ function(_php_main_create_files)
306341
CONTENT "${content}"
307342
)
308343

344+
#[[
345+
TODO: This enables regenerating the build-defs.h file on the install step
346+
when using different install prefix at the 'cmake --install ... --prefix'
347+
phase. Needs to be adjusted further to rebuild PHP at such case.
348+
include(PHP/ConfigureFile)
349+
php_configure_file(
350+
${PHP_SOURCE_DIR}/main/build-defs.h.in
351+
${PHP_BINARY_DIR}/main/build-defs.h
352+
VARIABLES
353+
CONFIGURE_COMMAND "cmake"
354+
ODBC_CFLAGS "${ODBC_CFLAGS}"
355+
ODBC_LFLAGS "${ODBC_LFLAGS}"
356+
ODBC_LIBS "${ODBC_LIBS}"
357+
ODBC_TYPE "${ODBC_TYPE}"
358+
PROG_SENDMAIL "${PROG_SENDMAIL}"
359+
EXPANDED_PEAR_INSTALLDIR "${EXPANDED_PEAR_INSTALLDIR}"
360+
INCLUDE_PATH "${INCLUDE_PATH}"
361+
EXPANDED_EXTENSION_DIR "${EXPANDED_EXTENSION_DIR}"
362+
prefix "$<INSTALL_PREFIX>"
363+
EXPANDED_BINDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_BINDIR},$<INSTALL_PREFIX>>"
364+
EXPANDED_SBINDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SBINDIR},$<INSTALL_PREFIX>>"
365+
EXPANDED_MANDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_MANDIR},$<INSTALL_PREFIX>>"
366+
EXPANDED_LIBDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LIBDIR},$<INSTALL_PREFIX>>"
367+
EXPANDED_DATADIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_DATADIR},$<INSTALL_PREFIX>>"
368+
EXPANDED_SYSCONFDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SYSCONFDIR},$<INSTALL_PREFIX>>"
369+
EXPANDED_LOCALSTATEDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LOCALSTATEDIR},$<INSTALL_PREFIX>>"
370+
EXPANDED_PHP_CONFIG_FILE_PATH "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_PATH},$<INSTALL_PREFIX>>"
371+
EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_SCAN_DIR},$<INSTALL_PREFIX>>"
372+
SHLIB_DL_SUFFIX_NAME "${SHLIB_DL_SUFFIX_NAME}"
373+
)
374+
add_custom_target(php_main_build_defs_h DEPENDS ${PHP_BINARY_DIR}/main/build-defs.h)
375+
add_dependencies(php_main php_main_build_defs_h)
376+
#]]
377+
309378
set(HAVE_BUILD_DEFS_H 1)
310379
set(PHP_CONFIG_H_WINDOWS 0)
311380
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
@@ -2118,31 +2118,32 @@
21182118
# define PEAR_INSTALLDIR "@EXPANDED_PEAR_INSTALLDIR@"
21192119

21202120
/* The path to the bin directory. */
2121-
# define PHP_BINDIR "@PREFIX@"
2121+
# define PHP_BINDIR "@EXPANDED_BINDIR@"
21222122

2123-
/* The path in which to look for php.ini. */
2123+
/* The path in which to look for php.ini. On Windows this macro isn't
2124+
utilized in the C code. */
21242125
# define PHP_CONFIG_FILE_PATH ""
21252126

21262127
/* The path where to scan for additional INI configuration files. */
2127-
# define PHP_CONFIG_FILE_SCAN_DIR "@PHP_FULL_CONFIG_FILE_SCAN_DIR@"
2128+
# define PHP_CONFIG_FILE_SCAN_DIR "@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@"
21282129

21292130
/* The path to the share directory. */
2130-
# define PHP_DATADIR "@PREFIX@"
2131+
# define PHP_DATADIR "@EXPANDED_DATADIR@"
21312132

21322133
/* Default directory for dynamically loadable PHP extensions. */
2133-
# define PHP_EXTENSION_DIR "@PREFIX@\\ext"
2134+
# define PHP_EXTENSION_DIR "@EXPANDED_EXTENSION_DIR@"
21342135

21352136
/* The 'include_path' PHP INI directive. */
21362137
# define PHP_INCLUDE_PATH "@INCLUDE_PATH@"
21372138

21382139
/* The path containing system libraries (lib or lib64). */
2139-
# define PHP_LIBDIR "@PREFIX@"
2140+
# define PHP_LIBDIR "@EXPANDED_LIBDIR@"
21402141

21412142
/* The path to the var directory. */
2142-
# define PHP_LOCALSTATEDIR "@PREFIX@"
2143+
# define PHP_LOCALSTATEDIR "@EXPANDED_LOCALSTATEDIR@"
21432144

21442145
/* The installation prefix. */
2145-
# define PHP_PREFIX "@PREFIX@"
2146+
# define PHP_PREFIX "@prefix@"
21462147

21472148
/* The prefix for the shared library objects. */
21482149
# define PHP_SHLIB_EXT_PREFIX "php_"
@@ -2151,7 +2152,7 @@
21512152
# define PHP_SHLIB_SUFFIX "@SHLIB_DL_SUFFIX_NAME@"
21522153

21532154
/* The path to the etc directory. */
2154-
# define PHP_SYSCONFDIR "@PREFIX@"
2155+
# define PHP_SYSCONFDIR "@EXPANDED_SYSCONFDIR@"
21552156

21562157
# if __has_include("main/config.pickle.h")
21572158
# 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)