|
1 | 1 | include(CMakeDependentOption) |
2 | 2 | include(FeatureSummary) |
| 3 | +include(PHP/AddCustomCommand) |
3 | 4 |
|
4 | 5 | option(EXT_TOKENIZER "Enable the tokenizer extension" ON) |
5 | 6 |
|
@@ -37,91 +38,18 @@ target_sources( |
37 | 38 | # The tokenizer extension depends on the generated Zend scanner and parser. |
38 | 39 | add_dependencies(php_tokenizer Zend::Zend) |
39 | 40 |
|
40 | | -if(PHPSystem_EXECUTABLE) |
41 | | - set(PHP_EXECUTABLE ${PHPSystem_EXECUTABLE}) |
42 | | -elseif(NOT CMAKE_CROSSCOMPILING) |
43 | | - set(PHP_EXECUTABLE "$<TARGET_FILE:php_cli>") |
44 | | -elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR) |
45 | | - set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:php_cli>") |
46 | | -endif() |
47 | | - |
48 | | -if(PHP_EXECUTABLE) |
49 | | - # Patch tokenizer_data_gen.php to generate output only when needed. |
50 | | - file(READ "${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data_gen.php" content) |
51 | | - string( |
52 | | - REPLACE |
53 | | - [[$infile = __DIR__ . '/../../Zend/zend_language_parser.y';]] |
54 | | - "$infile = '${PHP_SOURCE_DIR}/Zend/zend_language_parser.y';" |
55 | | - content |
56 | | - "${content}" |
57 | | - ) |
58 | | - string( |
59 | | - REPLACE |
60 | | - [[$outfile_stub = __DIR__ . '/tokenizer_data.stub.php';]] |
61 | | - "$outfile_stub = '${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data.stub.php';" |
62 | | - content |
63 | | - "${content}" |
64 | | - ) |
65 | | - string( |
66 | | - REPLACE |
67 | | - [[$outfile_c = __DIR__ . '/tokenizer_data.c';]] |
68 | | - "$outfile_c = '${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data.c';" |
69 | | - content |
70 | | - "${content}" |
71 | | - ) |
72 | | - string( |
73 | | - REPLACE |
74 | | - [[file_put_contents($outfile_stub, $result); |
75 | | - |
76 | | -echo "Wrote $outfile_stub\n";]] |
77 | | - [[ |
78 | | - if (file_exists($outfile_stub)) { |
79 | | - $currentContent = file_get_contents($outfile_stub); |
80 | | - } |
81 | | - if ($currentContent !== $result) { |
82 | | - file_put_contents($outfile_stub, $result); |
83 | | - echo "Wrote $outfile_stub\n"; |
84 | | - } |
85 | | - ]] |
86 | | - content |
87 | | - "${content}" |
88 | | - ) |
89 | | - string( |
90 | | - REPLACE |
91 | | - [[file_put_contents($outfile_c, $result); |
92 | | - |
93 | | -echo "Wrote $outfile_c\n";]] |
94 | | - [[ |
95 | | - $currentContent = ''; |
96 | | - if (file_exists($outfile_c)) { |
97 | | - $currentContent = file_get_contents($outfile_c); |
98 | | - } |
99 | | - if ($currentContent !== $result) { |
100 | | - file_put_contents($outfile_c, $result); |
101 | | - echo "Wrote $outfile_c\n"; |
102 | | - } |
103 | | - ]] |
104 | | - content |
105 | | - "${content}" |
106 | | - ) |
107 | | - file( |
108 | | - WRITE |
109 | | - "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/tokenizer_data_gen.php" |
110 | | - "${content}" |
111 | | - ) |
112 | | - |
113 | | - add_custom_command( |
114 | | - OUTPUT |
115 | | - php_tokenizer_data |
116 | | - COMMAND |
117 | | - ${PHP_EXECUTABLE} |
118 | | - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/tokenizer_data_gen.php |
119 | | - DEPENDS |
120 | | - ${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data_gen.php |
121 | | - ${PHP_SOURCE_DIR}/Zend/zend_language_parser.y |
122 | | - COMMENT "[ext/tokenizer] Regenerating ext/tokenizer/tokenizer_data.c" |
123 | | - VERBATIM |
124 | | - ) |
125 | | - add_custom_target(php_tokenizer_generate_data ALL DEPENDS php_tokenizer_data) |
126 | | - set_property(SOURCE php_tokenizer_data PROPERTY SYMBOLIC TRUE) |
127 | | -endif() |
| 41 | +# Generate tokenizer data source files. |
| 42 | +php_add_custom_command( |
| 43 | + php_generate_tokenizer_data |
| 44 | + OUTPUT |
| 45 | + ${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data.stub.php |
| 46 | + ${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data.c |
| 47 | + DEPENDS |
| 48 | + ${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data_gen.php |
| 49 | + ${PHP_SOURCE_DIR}/Zend/zend_language_parser.y |
| 50 | + PHP_COMMAND |
| 51 | + ${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data_gen.php |
| 52 | + COMMENT |
| 53 | + "[ext/tokenizer] Regenerating tokenizer_data.c and tokenizer_data.stub.php" |
| 54 | + VERBATIM |
| 55 | +) |
0 commit comments