11#[=============================================================================[ 
2- Rebuild  all project targets.
2+ Ensure  all project targets are rebuilt as needed .
33
4- When PHP is not found on the system, PHP generates some files during development 
5- using the php_cli target itself, which can bring cyclic dependencies among 
6- targets if custom commands would depend on the php_cli target. Although not a 
7- good practice, this helps bringing all targets to updated state. 
4+ When PHP is not found on the system, the `php_cli` target is used to generate 
5+ certain files during development. This can lead to cyclic dependencies among 
6+ targets if custom commands depend on the `php_cli` target. While such automatic 
7+ rebuilding is not considered good practice, it ensures that all targets are kept 
8+ up to date. 
9+ 
10+ TODO: This works only for a limited set of cases for now and will be refactored. 
811#]=============================================================================] 
912
1013include_guard (GLOBAL )
1114
1215# Store a list of all targets inside the given <dir> into the <result> variable. 
13- function (_php_get_all_targets  result dir)
16+ function (_php_rebuild_get_all_targets  result dir)
1417  get_property (targets DIRECTORY  ${dir}  PROPERTY BUILDSYSTEM_TARGETS)
1518  get_property (subdirs DIRECTORY  ${dir}  PROPERTY SUBDIRECTORIES)
1619
@@ -22,43 +25,32 @@ function(_php_get_all_targets result dir)
2225  set (${result}  ${targets}  PARENT_SCOPE)
2326endfunction ()
2427
25- # Ensure all project targets are rebuilt as needed. 
26- function (_php_rebuild)
27-   _php_get_all_targets(targets ${CMAKE_CURRENT_SOURCE_DIR} )
28-   list (REMOVE_ITEM targets "php_rebuild" )
29- 
30-   add_custom_command (
31-     OUTPUT  ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
32-     COMMAND 
33-       ${CMAKE_COMMAND} 
34-         -E cmake_echo_color --magenta --bold "       Updating targets" 
35-     COMMAND 
36-       ${CMAKE_COMMAND} 
37-         -E touch ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
38-     COMMAND 
39-       ${CMAKE_COMMAND} 
40-         --build  . --target  php_rebuild -j
41-     WORKING_DIRECTORY  ${CMAKE_CURRENT_BINARY_DIR} 
42-     DEPENDS  ${targets} 
43-   )
44- 
45-   add_custom_target (
46-     php_update_targets ALL 
47-     DEPENDS  ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
48-   )
28+ _php_rebuild_get_all_targets(targets ${CMAKE_CURRENT_SOURCE_DIR} )
29+ 
30+ add_custom_command (
31+   OUTPUT  ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
32+   COMMAND 
33+     ${CMAKE_COMMAND} 
34+       -E cmake_echo_color --magenta --bold "Updating targets" 
35+   COMMAND 
36+     ${CMAKE_COMMAND} 
37+       -E touch ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
38+   COMMAND 
39+     ${CMAKE_COMMAND} 
40+       --build  . --target  php_rebuild -j
41+   WORKING_DIRECTORY  ${CMAKE_CURRENT_BINARY_DIR} 
42+   DEPENDS  ${targets} 
43+ )
4944
50-   add_custom_target (
51-     php_rebuild
52-     COMMAND 
53-       ${CMAKE_COMMAND} 
54-         -E rm -f ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
55-     DEPENDS  ${targets} 
56-   )
57- endfunction ()
45+ add_custom_target (
46+   php_rebuild_update_targets ALL 
47+   DEPENDS  ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
48+ )
5849
59- # Run at the end of the configuration. 
60- cmake_language(
61-   DEFER
62-     DIRECTORY  ${PROJECT_SOURCE_DIR} 
63-   CALL _php_rebuild
50+ add_custom_target (
51+   php_rebuild
52+   COMMAND 
53+     ${CMAKE_COMMAND} 
54+       -E rm -f ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/php_rebuild.timestamp
55+   DEPENDS  ${targets} 
6456)
0 commit comments