Skip to content

Commit 0558798

Browse files
committed
Refactor files generation
1 parent ec214cb commit 0558798

File tree

2 files changed

+117
-123
lines changed

2 files changed

+117
-123
lines changed

cmake/main/CMakeLists.txt

Lines changed: 80 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -237,101 +237,89 @@ function(_php_main_create_files)
237237
# Map CMake variable names to names in PHP configuration headers where needed.
238238
##############################################################################
239239

240-
# TODO: Set configure command string.
241-
set(CONFIGURE_COMMAND "cmake")
240+
# Add build system configuration.
242241

243-
# TODO: Fix the installation prefixes below when passed via the '--prefix'
244-
# option of the 'cmake --install ...' command. PHP is at the time of writing
245-
# not a relocatable program.
242+
# TODO: Fix this:
243+
set(EXPANDED_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
244+
# TODO: Fix this:
245+
set(EXPANDED_LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}")
246246

247-
if(PHP_PEAR_DIR)
248-
set(
249-
EXPANDED_PEAR_INSTALLDIR
250-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_PEAR_DIR},${CMAKE_INSTALL_PREFIX}>"
251-
)
252-
endif()
247+
string(CONFIGURE [[
248+
# TODO: Set configure command string.
249+
set(CONFIGURE_COMMAND "cmake")
253250

254-
# Set the 'include_path' INI directive.
255-
set(
256-
INCLUDE_PATH
257-
".$<IF:$<PLATFORM_ID:Windows>,;,:>${EXPANDED_PEAR_INSTALLDIR}"
258-
)
251+
set(PHP_PROG_SENDMAIL "@Sendmail_PROGRAM@")
259252

260-
# Set the PHP extensions directory.
261-
set(
262-
EXPANDED_EXTENSION_DIR
263-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_EXTENSION_DIR},${CMAKE_INSTALL_PREFIX}>"
264-
)
253+
if("@PHP_PEAR_DIR@")
254+
set(EXPANDED_PEAR_INSTALLDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@PHP_PEAR_DIR@,${CMAKE_INSTALL_PREFIX}>")
255+
endif()
265256

266-
# Set the directory where php.ini is looked for.
267-
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
268-
set(EXPANDED_PHP_CONFIG_FILE_PATH "")
269-
else()
270-
set(
271-
EXPANDED_PHP_CONFIG_FILE_PATH
272-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_PATH},${CMAKE_INSTALL_PREFIX}>"
273-
)
274-
endif()
257+
# Set the 'include_path' INI directive.
258+
if("@CMAKE_SYSTEM_NAME@" STREQUAL "Windows")
259+
set(INCLUDE_PATH ".;@EXPANDED_PEAR_INSTALLDIR@")
260+
else()
261+
set(INCLUDE_PATH ".:@EXPANDED_PEAR_INSTALLDIR@")
262+
endif()
275263

276-
# Set the directory where additional ini files are searched for.
277-
set(
278-
EXPANDED_PHP_CONFIG_FILE_SCAN_DIR
279-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_CONFIG_FILE_SCAN_DIR},${CMAKE_INSTALL_PREFIX}>"
280-
)
264+
# Set the PHP extensions directory.
265+
set(EXPANDED_EXTENSION_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@PHP_EXTENSION_DIR@,${CMAKE_INSTALL_PREFIX}>")
281266

282-
set(
283-
EXPANDED_BINDIR
284-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_BINDIR},${CMAKE_INSTALL_PREFIX}>"
285-
)
267+
set(prefix "${CMAKE_INSTALL_PREFIX}")
286268

287-
set(
288-
EXPANDED_SBINDIR
289-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_SBINDIR},${CMAKE_INSTALL_PREFIX}>"
290-
)
269+
set(EXPANDED_BINDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_BINDIR@,${CMAKE_INSTALL_PREFIX}>")
291270

292-
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
293-
set(PHP_MANDIR "")
294-
else()
295-
set(
296-
PHP_MANDIR
297-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_MANDIR},${CMAKE_INSTALL_PREFIX}>"
298-
)
299-
endif()
271+
set(EXPANDED_SBINDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_SBINDIR@,${CMAKE_INSTALL_PREFIX}>")
300272

301-
set(
302-
EXPANDED_LIBDIR
303-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LIBDIR},${CMAKE_INSTALL_PREFIX}>"
304-
)
273+
# Set man documentation directory.
274+
if("@CMAKE_SYSTEM_NAME@" STREQUAL "Windows")
275+
set(PHP_MANDIR "")
276+
else()
277+
set(PHP_MANDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_MANDIR@,${CMAKE_INSTALL_PREFIX}>")
278+
endif()
305279

306-
set(
307-
EXPANDED_DATADIR
308-
"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_DATADIR},${CMAKE_INSTALL_PREFIX}>"
309-
)
280+
set(EXPANDED_LIBDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_LIBDIR@,${CMAKE_INSTALL_PREFIX}>")
310281

311-
set(EXPANDED_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
312-
set(EXPANDED_LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}")
313-
set(prefix "${CMAKE_INSTALL_PREFIX}")
282+
set(EXPANDED_DATADIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_DATADIR@,${CMAKE_INSTALL_PREFIX}>")
283+
284+
set(EXPANDED_SYSCONFDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_SYSCONFDIR@,${CMAKE_INSTALL_PREFIX}>")
285+
286+
set(EXPANDED_LOCALSTATEDIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_LOCALSTATEDIR@,${CMAKE_INSTALL_PREFIX}>")
287+
288+
# Set the directory where php.ini is looked for.
289+
if("@CMAKE_SYSTEM_NAME@" STREQUAL "Windows")
290+
set(EXPANDED_PHP_CONFIG_FILE_PATH "")
291+
else()
292+
set(EXPANDED_PHP_CONFIG_FILE_PATH "$<PATH:ABSOLUTE_PATH,NORMALIZE,@PHP_CONFIG_FILE_PATH@,${CMAKE_INSTALL_PREFIX}>")
293+
endif()
294+
295+
# Set the directory where additional ini files are searched for.
296+
set(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR "$<PATH:ABSOLUTE_PATH,NORMALIZE,@PHP_CONFIG_FILE_SCAN_DIR@,${CMAKE_INSTALL_PREFIX}>")
314297

315-
# Set shared library object extension.
316-
string(REPLACE "." "" SHLIB_DL_SUFFIX_NAME "${CMAKE_SHARED_MODULE_SUFFIX}")
298+
# Set shared library object extension.
299+
string(REPLACE "." "" SHLIB_DL_SUFFIX_NAME "@CMAKE_SHARED_MODULE_SUFFIX@")
300+
301+
# Set filename prefix for PHP shared extensions.
302+
if("@CMAKE_SYSTEM_NAME@" STREQUAL "Windows")
303+
set(PHP_SHLIB_EXT_PREFIX "php_")
304+
else()
305+
set(PHP_SHLIB_EXT_PREFIX "")
306+
endif()
307+
]] code @ONLY)
308+
cmake_language(EVAL CODE "${code}")
317309

318310
if(PHP_DEFAULT_SHORT_OPEN_TAG)
319311
set(DEFAULT_SHORT_OPEN_TAG "1")
320312
else()
321313
set(DEFAULT_SHORT_OPEN_TAG "0")
322314
endif()
323315

324-
set(PHP_PROG_SENDMAIL "${Sendmail_PROGRAM}")
325-
326316
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
327317
set(PHP_CONFIG_H_WINDOWS 1)
328318
set(file config.w32.h)
329-
set(PHP_SHLIB_EXT_PREFIX "php_")
330319
else()
331320
set(PHP_CONFIG_H_WINDOWS 0)
332321
set(file php_config.h)
333322
set(HAVE_BUILD_DEFS_H TRUE)
334-
set(PHP_SHLIB_EXT_PREFIX "")
335323
endif()
336324

337325
# Add sapis configuration.
@@ -366,7 +354,6 @@ function(_php_main_create_files)
366354
file(READ ${CMAKE_CURRENT_BINARY_DIR}/Zend/CMakeFiles/zend_config.h config)
367355
string(STRIP "${config}" ZEND_CONFIGURATION)
368356

369-
# Add build system configuration.
370357
file(READ main/cmake/build-defs.h.in PHP_BUILD_DEFINITIONS_CODE)
371358
string(CONFIGURE "${PHP_BUILD_DEFINITIONS_CODE}" PHP_BUILD_DEFINITIONS_CODE @ONLY)
372359

@@ -383,35 +370,18 @@ function(_php_main_create_files)
383370

384371
set(PHP_BUILD_DEFINITIONS_CODE "")
385372

386-
#[[
387-
TODO: This enables regenerating the build-defs.h file on the install step
388-
when using different install prefix at the 'cmake --install ... --prefix'
389-
phase. Needs to be adjusted further to rebuild PHP at such case.
390-
include(PHP/ConfigureFile)
391-
php_configure_file(
392-
INPUT ${PHP_SOURCE_DIR}/main/cmake/build-defs.h.in
393-
OUTPUT ${PHP_BINARY_DIR}/$<CONFIG>/main/build-defs.h
394-
VARIABLES
395-
CONFIGURE_COMMAND "${CONFIGURE_COMMAND}"
396-
PHP_PROG_SENDMAIL "${PHP_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-
PHP_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}/$<CONFIG>/main/build-defs.h)
413-
add_dependencies(php_main php_main_build_defs_h)
414-
#]]
373+
# This enables regenerating the build-defs.h file on the install step
374+
# when using different install prefix at the 'cmake --install ... --prefix'
375+
# phase. Needs to be adjusted further to rebuild PHP at such case.
376+
string(CONFIGURE [[
377+
@code@
378+
configure_file(
379+
"@PHP_SOURCE_DIR@/main/cmake/build-defs.h.in"
380+
"@PHP_BINARY_DIR@/$<CONFIG>/main/build-defs.h"
381+
@ONLY
382+
)
383+
]] code @ONLY)
384+
install(CODE "${code}")
415385
endif()
416386

417387
message(STATUS "Creating ${file}")
@@ -424,17 +394,16 @@ function(_php_main_create_files)
424394
OUTPUT ${PHP_BINARY_DIR}/$<CONFIG>/main/${file}
425395
CONTENT "${content}"
426396
)
427-
endfunction()
428-
429-
################################################################################
430-
# Configure installation.
431-
################################################################################
432397

433-
install(
434-
TARGETS php_main
435-
ARCHIVE EXCLUDE_FROM_ALL
436-
FILE_SET HEADERS
437-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/main
438-
FILE_SET generated
439-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/main
440-
)
398+
##############################################################################
399+
# Configure installation.
400+
##############################################################################
401+
install(
402+
TARGETS php_main
403+
ARCHIVE EXCLUDE_FROM_ALL
404+
FILE_SET HEADERS
405+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/main
406+
FILE_SET generated
407+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX}/main
408+
)
409+
endfunction()

cmake/scripts/CMakeLists.txt

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ block()
3838
set(SED /usr/bin/sed)
3939
endif()
4040

41+
##############################################################################
4142
message(STATUS "Creating scripts/php-config")
43+
##############################################################################
4244

4345
get_property(sapis GLOBAL PROPERTY PHP_SAPIS)
4446
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.27)
@@ -93,10 +95,12 @@ block()
9395
RENAME ${PHP_PROGRAM_PREFIX}php-config${PHP_PROGRAM_SUFFIX}
9496
)
9597

98+
##############################################################################
9699
message(STATUS "Creating scripts/phpize")
100+
##############################################################################
97101

98-
# Replace the upstream phpize script hardcoded php include directory to a
99-
# template placeholder.
102+
# Patch phpize template: Replace the upstream phpize script hardcoded php
103+
# include directory to a template placeholder.
100104
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/phpize.in" content)
101105
string(
102106
REPLACE
@@ -105,19 +109,40 @@ block()
105109
content
106110
"${content}"
107111
)
108-
109-
php_configure_file(
110-
CONTENT "${content}"
112+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PHP/phpize.in" "${content}")
113+
114+
string(CONFIGURE [[
115+
set(prefix "${CMAKE_INSTALL_PREFIX}")
116+
set(datarootdir "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_DATAROOTDIR@,${CMAKE_INSTALL_PREFIX}>")
117+
set(exec_prefix "${CMAKE_INSTALL_PREFIX}")
118+
set(libdir "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_LIBDIR@/php,${CMAKE_INSTALL_PREFIX}>")
119+
set(includedir "$<PATH:ABSOLUTE_PATH,NORMALIZE,@CMAKE_INSTALL_INCLUDEDIR@/@PHP_INCLUDE_PREFIX@,${CMAKE_INSTALL_PREFIX}>")
120+
set(SED "@SED@")
121+
]] code @ONLY)
122+
123+
cmake_language(EVAL CODE "${code}")
124+
string(CONFIGURE "${content}" content @ONLY)
125+
126+
# To be able to evaluate the generator expressions.
127+
file(
128+
GENERATE
111129
OUTPUT phpize
112-
VARIABLES
113-
prefix "$<INSTALL_PREFIX>"
114-
datarootdir "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_DATAROOTDIR},$<INSTALL_PREFIX>>"
115-
exec_prefix "$<INSTALL_PREFIX>"
116-
libdir "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_LIBDIR}/php,$<INSTALL_PREFIX>>"
117-
includedir "$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_INCLUDEDIR}/${PHP_INCLUDE_PREFIX},$<INSTALL_PREFIX>>"
118-
SED "${SED}"
130+
CONTENT "${content}"
119131
)
120132

133+
# This regenerates the phpize file on the install step when using
134+
# different install prefix at the install phase:
135+
# 'cmake --install <build-dir> --prefix <prefix>'
136+
string(CONFIGURE [[
137+
@code@
138+
configure_file(
139+
"@CMAKE_CURRENT_BINARY_DIR@/CMakeFiles/PHP/phpize.in"
140+
"@CMAKE_CURRENT_BINARY_DIR@/phpize"
141+
@ONLY
142+
)
143+
]] code @ONLY)
144+
install(CODE "${code}")
145+
121146
install(
122147
PROGRAMS
123148
${CMAKE_CURRENT_BINARY_DIR}/phpize

0 commit comments

Comments
 (0)