@@ -6,6 +6,59 @@ The build/gen_stub.php script requires the PHP tokenizer extension.
66
77include_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.
1164function (_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} )
3185endfunction ()
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 ()
3789endif ()
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
4997block()
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 )
0 commit comments