Skip to content

Commit 52b5524

Browse files
committed
Rename PHPSystem
This renames the weird PHPSystem to simply PHP, however it may clash with variables set by `project(PHP)`, so the `find_package()` is wrapped in the `block()` and propagates PHP_FOUND. The PHP_EXECUTABLE is cache variable, so it's available outside of the block as expected.
1 parent dbf518c commit 52b5524

File tree

9 files changed

+134
-96
lines changed

9 files changed

+134
-96
lines changed

cmake/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ block()
6262
endblock()
6363

6464
# Rebuild all targets as needed.
65-
if(NOT PHPSystem_EXECUTABLE)
65+
if(NOT PHP_FOUND)
6666
include(PHP/Rebuild)
6767
endif()
6868

cmake/cmake/Requirements.cmake

+9-6
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,12 @@ endif()
5050
find_package(Sendmail)
5151

5252
################################################################################
53-
# Find PHP installed on the system for generating stub files (*_arginfo.h),
54-
# Zend/zend_vm_gen.php, ext/tokenizer/tokenizer_data_gen.php and similar where
55-
# it can be used. Otherwise the built cli sapi is used at the build phase.
56-
# Minimum supported version for gen_stub.php is PHP 7.4.
57-
################################################################################
58-
find_package(PHPSystem 7.4)
53+
# Find PHP installed on the system and set PHP_EXECUTABLE for development such
54+
# as generating stubs (*_arginfo.h) with build/gen_stub.php, running PHP scripts
55+
# Zend/zend_vm_gen.php and similar. Otherwise the sapi/cli executable will be
56+
# used at the build phase, where possible. The minimum version should match the
57+
# version required to run these PHP scripts.
58+
################################################################################
59+
block(PROPAGATE PHP_FOUND)
60+
find_package(PHP 7.4)
61+
endblock()

cmake/cmake/modules/FindPHP.cmake

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#[=============================================================================[
2+
# FindPHP
3+
4+
Find PHP on the system, if installed.
5+
6+
## Result variables
7+
8+
* `PHP_FOUND` - Whether the package has been found.
9+
* `PHP_VERSION` - Package version, if found.
10+
11+
## Cache variables
12+
13+
* `PHP_EXECUTABLE` - PHP command-line executable, if available.
14+
#]=============================================================================]
15+
16+
include(FeatureSummary)
17+
include(FindPackageHandleStandardArgs)
18+
19+
set_package_properties(
20+
PHP
21+
PROPERTIES
22+
URL "https://www.php.net"
23+
DESCRIPTION "PHP: Hypertext Preprocessor"
24+
)
25+
26+
set(_phpRequiredVars PHP_EXECUTABLE)
27+
set(_reason "")
28+
29+
find_program(
30+
PHP_EXECUTABLE
31+
NAMES php
32+
DOC "The path to the PHP executable"
33+
)
34+
mark_as_advanced(PHP_EXECUTABLE)
35+
36+
if(NOT PHP_EXECUTABLE)
37+
string(APPEND _reason "The php command-line executable could not be found. ")
38+
endif()
39+
40+
unset(PHP_VERSION)
41+
block(PROPAGATE PHP_VERSION _reason _phpRequiredVars)
42+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.29)
43+
set(test IS_EXECUTABLE)
44+
else()
45+
set(test EXISTS)
46+
endif()
47+
48+
if(${test} ${PHP_EXECUTABLE})
49+
list(APPEND _phpRequiredVars PHP_VERSION)
50+
51+
execute_process(
52+
COMMAND ${PHP_EXECUTABLE} --version
53+
OUTPUT_VARIABLE version
54+
RESULT_VARIABLE result
55+
OUTPUT_STRIP_TRAILING_WHITESPACE
56+
ERROR_QUIET
57+
)
58+
59+
if(NOT result EQUAL 0)
60+
string(APPEND _reason "Command '${PHP_EXECUTABLE} --version' failed. ")
61+
elseif(version MATCHES "PHP ([0-9]+[0-9.]+[^ ]+) \\(cli\\)")
62+
set(PHP_VERSION "${CMAKE_MATCH_1}")
63+
else()
64+
string(APPEND _reason "Invalid version format. ")
65+
endif()
66+
endif()
67+
endblock()
68+
69+
find_package_handle_standard_args(
70+
PHP
71+
REQUIRED_VARS ${_phpRequiredVars}
72+
VERSION_VAR PHP_VERSION
73+
HANDLE_VERSION_RANGE
74+
REASON_FAILURE_MESSAGE "${_reason}"
75+
)
76+
77+
unset(_phpRequiredVars)
78+
unset(_reason)

cmake/cmake/modules/FindPHPSystem.cmake

-59
This file was deleted.

cmake/cmake/modules/PHP/AddCustomCommand.cmake

+10-8
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ function(php_add_custom_command)
8282
set(verbatim "")
8383
endif()
8484

85-
if(PHPSystem_EXECUTABLE)
85+
if(PHP_FOUND)
8686
add_custom_command(
8787
OUTPUT ${parsed_OUTPUT}
88-
COMMAND ${PHPSystem_EXECUTABLE} ${parsed_PHP_COMMAND}
88+
COMMAND ${PHP_EXECUTABLE} ${parsed_PHP_COMMAND}
8989
DEPENDS ${parsed_DEPENDS}
9090
COMMENT "${parsed_COMMENT}"
9191
${verbatim}
@@ -99,9 +99,12 @@ function(php_add_custom_command)
9999
endif()
100100

101101
if(NOT CMAKE_CROSSCOMPILING)
102-
set(PHP_EXECUTABLE "$<TARGET_FILE:PHP::sapi::cli>")
102+
set(phpExecutable "$<TARGET_FILE:PHP::sapi::cli>")
103103
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
104-
set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:PHP::sapi::cli>")
104+
set(
105+
phpExecutable
106+
"${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:PHP::sapi::cli>"
107+
)
105108
else()
106109
return()
107110
endif()
@@ -111,11 +114,10 @@ function(php_add_custom_command)
111114
add_custom_target(
112115
${targetName} ALL
113116
COMMAND ${CMAKE_COMMAND}
114-
-D "PHP_EXECUTABLE=${PHP_EXECUTABLE}"
115-
-D "OUTPUT=${parsed_OUTPUT}"
116-
-D "PHP_COMMAND=${parsed_PHP_COMMAND}"
117-
-D "DEPENDS=${parsed_DEPENDS}"
117+
-D "PHP_COMMAND=${phpExecutable};${parsed_PHP_COMMAND}"
118118
-D "COMMENT=${parsed_COMMENT}"
119+
-D "DEPENDS=${parsed_DEPENDS}"
120+
-D "OUTPUT=${parsed_OUTPUT}"
119121
-P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/AddCustomCommand/RunCommand.cmake
120122
${verbatim}
121123
)

cmake/cmake/modules/PHP/AddCustomCommand/RunCommand.cmake

+15-7
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ dependent input source files and runs the command inside the execute_process().
44
55
Expected variables:
66
7-
* PHP_EXECUTABLE
8-
* PHP_COMMAND
9-
* DEPENDS
10-
* OUTPUT
11-
* COMMENT
7+
* COMMENT - String printed in the build output log.
8+
* DEPENDS - A list of dependent files.
9+
* OUTPUT - A list of output files to be produced.
10+
* PHP_COMMAND - A list of command and its arguments.
1211
#]=============================================================================]
1312

14-
if(NOT CMAKE_SCRIPT_MODE_FILE OR NOT PHP_EXECUTABLE OR NOT PHP_COMMAND)
13+
if(NOT CMAKE_SCRIPT_MODE_FILE OR NOT PHP_COMMAND)
1514
return()
1615
endif()
1716

@@ -45,7 +44,16 @@ if(COMMENT)
4544
)
4645
endif()
4746

48-
execute_process(COMMAND ${PHP_EXECUTABLE} ${PHP_COMMAND})
47+
execute_process(
48+
COMMAND ${PHP_COMMAND}
49+
RESULT_VARIABLE result
50+
ERROR_VARIABLE error
51+
)
52+
53+
if(NOT result EQUAL 0)
54+
list(JOIN PHP_COMMAND " " command)
55+
message(NOTICE "Command ended with non-zero status:\n ${command}\n${error}")
56+
endif()
4957

5058
# Update modification times of output files to not re-run the command on the
5159
# consecutive build runs.

cmake/cmake/modules/PHP/Stubs.cmake

+6-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function(_php_stubs_get_php_command result)
1515
# If PHP is not found on the system, the PHP cli SAPI will be used with the
1616
# tokenizer extension.
1717
if(
18-
NOT PHPSystem_EXECUTABLE
18+
NOT PHP_FOUND
1919
AND (
2020
NOT TARGET PHP::sapi::cli
2121
OR (TARGET PHP::sapi::cli AND NOT TARGET PHP::ext::tokenizer)
@@ -25,16 +25,16 @@ function(_php_stubs_get_php_command result)
2525
endif()
2626

2727
# If external PHP is available, check for the required tokenizer extension.
28-
if(PHPSystem_EXECUTABLE)
28+
if(PHP_FOUND)
2929
execute_process(
30-
COMMAND ${PHPSystem_EXECUTABLE} --ri tokenizer
30+
COMMAND ${PHP_EXECUTABLE} --ri tokenizer
3131
RESULT_VARIABLE code
3232
OUTPUT_QUIET
3333
ERROR_QUIET
3434
)
3535

3636
if(code EQUAL 0)
37-
set(${result} ${PHPSystem_EXECUTABLE})
37+
set(${result} ${PHP_EXECUTABLE})
3838
return(PROPAGATE ${result})
3939
endif()
4040
endif()
@@ -113,7 +113,7 @@ block()
113113
$<PATH:ABSOLUTE_PATH,NORMALIZE,$<LIST:FILTER,$<TARGET_PROPERTY:${target},SOURCES>,INCLUDE,\.stub\.php$>,$<TARGET_PROPERTY:${target},SOURCE_DIR>>
114114
)
115115

116-
if(PHPSystem_EXECUTABLE)
116+
if(PHP_FOUND)
117117
add_dependencies(${target} php_stubs)
118118
endif()
119119
endforeach()
@@ -128,7 +128,7 @@ block()
128128
)
129129

130130
set(targetOptions "")
131-
if(NOT PHPSystem_EXECUTABLE)
131+
if(NOT PHP_FOUND)
132132
set(targetOptions ALL DEPENDS ${targets})
133133
endif()
134134

cmake/ext/phar/CMakeLists.txt

+8-5
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,12 @@ if(NOT TARGET PHP::sapi::cli)
122122
endif()
123123

124124
if(NOT CMAKE_CROSSCOMPILING)
125-
set(PHP_EXECUTABLE "$<TARGET_FILE:PHP::sapi::cli>")
125+
set(phpExecutable "$<TARGET_FILE:PHP::sapi::cli>")
126126
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
127-
set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:PHP::sapi::cli>")
127+
set(
128+
phpExecutable
129+
"${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:PHP::sapi::cli>"
130+
)
128131
else()
129132
return()
130133
endif()
@@ -148,7 +151,7 @@ cmake_path(
148151
add_custom_command(
149152
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/phar.php
150153
COMMAND
151-
${PHP_EXECUTABLE}
154+
${phpExecutable}
152155
-n
153156
${pharSharedOptions}
154157
-d open_basedir=
@@ -164,7 +167,7 @@ add_custom_command(
164167
add_custom_command(
165168
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/phar.phar
166169
COMMAND
167-
${PHP_EXECUTABLE}
170+
${phpExecutable}
168171
-n
169172
${pharSharedOptions}
170173
-d open_basedir=
@@ -240,7 +243,7 @@ set_property(SOURCE php_ext_phar_generated_phar PROPERTY SYMBOLIC TRUE)
240243
install(CODE "
241244
execute_process(
242245
COMMAND
243-
${PHP_EXECUTABLE}
246+
${phpExecutable}
244247
-n
245248
${pharSharedOptions}
246249
-d open_basedir=

cmake/pear/CMakeLists.txt

+7-4
Original file line numberDiff line numberDiff line change
@@ -121,19 +121,22 @@ block()
121121
endforeach()
122122
endblock()
123123

124-
set(PHP_EXECUTABLE "")
124+
set(phpExecutable "")
125125
if(NOT CMAKE_CROSSCOMPILING)
126-
set(PHP_EXECUTABLE "$<TARGET_FILE:PHP::sapi::cli>")
126+
set(phpExecutable "$<TARGET_FILE:PHP::sapi::cli>")
127127
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
128-
set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:PHP::sapi::cli>")
128+
set(
129+
phpExecutable
130+
"${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:PHP::sapi::cli>"
131+
)
129132
endif()
130133

131134
php_install(CODE "
132135
set(phpPearInstallDir \"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_PEAR_DIR},\${CMAKE_INSTALL_PREFIX}>\")
133136
set(phpPearInstallBinDir \"$<PATH:ABSOLUTE_PATH,NORMALIZE,${CMAKE_INSTALL_BINDIR},\${CMAKE_INSTALL_PREFIX}>\")
134137
set(phpPearCurrentSourceDir \"${CMAKE_CURRENT_SOURCE_DIR}\")
135138
set(phpPearCurrentBinaryDir \"${CMAKE_CURRENT_BINARY_DIR}\")
136-
set(phpPearPhpExecutable \"${PHP_EXECUTABLE}\")
139+
set(phpPearPhpExecutable \"${phpExecutable}\")
137140
set(phpExtensionDir \"$<PATH:ABSOLUTE_PATH,NORMALIZE,${PHP_EXTENSION_DIR},\${CMAKE_INSTALL_PREFIX}>\")
138141
set(PHP_EXT_OPENSSL_SHARED ${PHP_EXT_OPENSSL_SHARED})
139142
set(PHP_EXT_XML_SHARED ${PHP_EXT_XML_SHARED})

0 commit comments

Comments
 (0)