Skip to content

Commit e1c5817

Browse files
committed
Merge branch 'PHP-8.4'
2 parents 8e98137 + 0168e13 commit e1c5817

File tree

2 files changed

+70
-47
lines changed

2 files changed

+70
-47
lines changed

cmake/cmake/modules/PHP/Stubs.cmake

Lines changed: 68 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,59 @@ The build/gen_stub.php script requires the PHP tokenizer extension.
66

77
include_guard(GLOBAL)
88

9+
# Get a PHP command for parsing stub sources.
10+
function(_php_stubs_get_php_command result)
11+
unset(${result})
12+
13+
# If PHP is not found on the system, the PHP cli SAPI will be used with the
14+
# tokenizer extension.
15+
if(
16+
NOT PHPSystem_EXECUTABLE
17+
AND (NOT SAPI_CLI OR (SAPI_CLI AND NOT EXT_TOKENIZER))
18+
)
19+
return(PROPAGATE ${result})
20+
endif()
21+
22+
# If external PHP is available, check for the required tokenizer extension.
23+
if(PHPSystem_EXECUTABLE)
24+
execute_process(
25+
COMMAND ${PHPSystem_EXECUTABLE} --ri tokenizer
26+
RESULT_VARIABLE code
27+
OUTPUT_QUIET
28+
ERROR_QUIET
29+
)
30+
31+
if(code EQUAL 0)
32+
set(${result} ${PHPSystem_EXECUTABLE})
33+
return(PROPAGATE ${result})
34+
endif()
35+
endif()
36+
37+
set(command)
38+
39+
if(NOT CMAKE_CROSSCOMPILING)
40+
set(command $<TARGET_FILE:php_cli>)
41+
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
42+
set(command ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:php_cli>)
43+
endif()
44+
45+
if(NOT command)
46+
return(PROPAGATE ${result})
47+
endif()
48+
49+
if(EXT_TOKENIZER_SHARED)
50+
list(
51+
APPEND
52+
command
53+
-d extension_dir=${PROJECT_BINARY_DIR}/modules
54+
-d extension=tokenizer
55+
)
56+
endif()
57+
58+
set(${result} ${command})
59+
return(PROPAGATE ${result})
60+
endfunction()
61+
962
# Store a list of all binary targets inside the given <dir> to the <result>
1063
# variable.
1164
function(_php_stubs_get_binary_targets result dir)
@@ -27,26 +80,27 @@ function(_php_stubs_get_binary_targets result dir)
2780
list(APPEND targets ${subdirTargets})
2881
endforeach()
2982

30-
set(${result} ${targets} PARENT_SCOPE)
83+
set(${result} ${targets})
84+
return(PROPAGATE ${result})
3185
endfunction()
3286

33-
# If PHP is not found on the system, the PHP cli SAPI will be used with the
34-
# tokenizer extension.
35-
if(NOT PHPSystem_EXECUTABLE AND NOT EXT_TOKENIZER AND NOT SAPI_CLI)
87+
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/build/gen_stub.php)
3688
return()
3789
endif()
3890

39-
if(EXISTS ${PROJECT_SOURCE_DIR}/build/gen_stub.php)
40-
file(
41-
COPY
42-
${PROJECT_SOURCE_DIR}/build/gen_stub.php
43-
DESTINATION ${PROJECT_BINARY_DIR}/build
44-
)
45-
else()
46-
return()
47-
endif()
91+
file(
92+
COPY
93+
${PROJECT_SOURCE_DIR}/build/gen_stub.php
94+
DESTINATION ${PROJECT_BINARY_DIR}/build
95+
)
4896

4997
block()
98+
_php_stubs_get_php_command(command)
99+
100+
if(NOT command)
101+
return()
102+
endif()
103+
50104
_php_stubs_get_binary_targets(targets ${PROJECT_SOURCE_DIR})
51105

52106
set(stubs)
@@ -68,27 +122,6 @@ block()
68122
CONTENT "$<JOIN:$<REMOVE_DUPLICATES:${stubs}>,$<SEMICOLON>>"
69123
)
70124

71-
set(PHP_COMMAND)
72-
73-
if(PHPSystem_EXECUTABLE)
74-
set(PHP_COMMAND ${PHPSystem_EXECUTABLE})
75-
else()
76-
if(NOT CMAKE_CROSSCOMPILING)
77-
set(PHP_COMMAND $<TARGET_FILE:php_cli>)
78-
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
79-
set(PHP_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:php_cli>)
80-
endif()
81-
endif()
82-
83-
if(EXT_TOKENIZER_SHARED AND NOT PHPSystem_EXECUTABLE)
84-
list(
85-
APPEND
86-
PHP_COMMAND
87-
-d extension_dir=${PROJECT_BINARY_DIR}/modules
88-
-d extension=tokenizer
89-
)
90-
endif()
91-
92125
if(NOT PHPSystem_EXECUTABLE)
93126
set(targetOptions ALL DEPENDS ${targets})
94127
endif()
@@ -98,7 +131,7 @@ block()
98131
COMMAND
99132
${CMAKE_COMMAND}
100133
"-DPHP_STUBS=${PROJECT_BINARY_DIR}/CMakeFiles/php_stubs.txt"
101-
"-DPHP_COMMAND=${PHP_COMMAND};${PROJECT_BINARY_DIR}/build/gen_stub.php"
134+
"-DPHP_COMMAND=${command};${PROJECT_BINARY_DIR}/build/gen_stub.php"
102135
-P ${CMAKE_CURRENT_LIST_DIR}/Stubs/RunCommand.cmake
103136
VERBATIM
104137
)

cmake/cmake/modules/PHP/Stubs/RunCommand.cmake

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ file(READ ${PHP_STUBS} sources)
1515

1616
foreach(stub ${sources})
1717
string(REGEX REPLACE [[\.stub\.php$]] "_arginfo.h" header "${stub}")
18-
if(${stub} IS_NEWER_THAN ${header})
18+
if("${stub}" IS_NEWER_THAN "${header}")
19+
file(TOUCH "${header}")
1920
list(APPEND stubs ${stub})
2021
endif()
2122
endforeach()
@@ -32,14 +33,3 @@ execute_process(
3233
)
3334

3435
execute_process(COMMAND ${PHP_COMMAND} ${stubs})
35-
36-
foreach(stub ${stubs})
37-
string(REGEX REPLACE [[\.stub\.php$]] "_arginfo.h" header "${stub}")
38-
if(
39-
EXISTS "${stub}"
40-
AND EXISTS "${header}"
41-
AND "${stub}" IS_NEWER_THAN "${header}"
42-
)
43-
file(TOUCH "${header}")
44-
endif()
45-
endforeach()

0 commit comments

Comments
 (0)