@@ -73,114 +73,153 @@ endif()
7373# Generate files.
7474################################################################################
7575
76- # When cross-compiling without emulator PHP CLI target executable cannot be run.
77- if (
78- NOT CMAKE_CROSSCOMPILING
79- OR (CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
80- )
81- block()
82- # Create CMake script that generates phar.phar file.
83- file (
84- GENERATE
85- OUTPUT CMakeFiles/GeneratePhar.cmake
86- CONTENT [[
87- # Generate phar.php.
88- if(EXT_PHAR_SHARED OR BUILD_SHARED_LIBS)
89- set(
90- phar_shared_options
91- -d extension_dir=${PHP_BINARY_DIR}/modules
92- -d extension=phar
93- )
94- endif()
95-
96- execute_process(
97- COMMAND
98- ${PHP_EXECUTABLE}
99- -n
100- ${phar_shared_options}
101- -d open_basedir=
102- -d output_buffering=0
103- -d memory_limit=-1
104- -d phar.readonly=0
105- ${CURRENT_SOURCE_DIR}/build_precommand.php
106- OUTPUT_FILE ${CURRENT_BINARY_DIR}/phar.php
107- OUTPUT_QUIET
108- )
109-
110- # Generate phar.phar.
111- execute_process(
112- COMMAND
113- ${PHP_EXECUTABLE}
114- -n
115- ${phar_shared_options}
116- -d open_basedir=
117- -d output_buffering=0
118- -d memory_limit=-1
119- -d phar.readonly=0
120- ${CURRENT_BINARY_DIR}/phar.php
121- pack
122- -f ${CURRENT_BINARY_DIR}/phar.phar
123- -a pharcommand
124- -c auto
125- -p 0
126- -s ${CURRENT_SOURCE_DIR}/phar/phar.php
127- -h sha1
128- -b ${INSTALL_FULL_BINDIR}/${php_cli_filename}
129- ${CURRENT_SOURCE_DIR}/phar
130- )
131-
132- # Set phar.phar permissions.
133- file(
134- CHMOD
135- ${CURRENT_BINARY_DIR}/phar.phar
136- FILE_PERMISSIONS
137- OWNER_READ
138- OWNER_WRITE
139- OWNER_EXECUTE
140- GROUP_READ
141- GROUP_WRITE
142- GROUP_EXECUTE
143- WORLD_READ
144- WORLD_EXECUTE
145- )
146- ]]
147- )
76+ if (NOT CMAKE_CROSSCOMPILING )
77+ set (PHP_EXECUTABLE "$<TARGET_FILE:php_cli>" )
78+ elseif (CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
79+ set (PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR} ;$<TARGET_FILE:php_cli>" )
80+ endif ()
14881
149- file (
150- GLOB_RECURSE
151- dependent_files
152- ${CMAKE_CURRENT_SOURCE_DIR} /phar/*.inc
153- ${CMAKE_CURRENT_SOURCE_DIR} /phar/*.php
82+ # Generate phar.php.
83+ if (PHP_EXECUTABLE)
84+ file (
85+ GLOB_RECURSE
86+ dependent_files
87+ ${CMAKE_CURRENT_SOURCE_DIR} /phar/*.inc
88+ ${CMAKE_CURRENT_SOURCE_DIR} /phar/*.php
89+ )
90+
91+ if (EXT_PHAR_SHARED OR BUILD_SHARED_LIBS )
92+ set (
93+ phar_shared_options
94+ -d extension_dir=${PHP_BINARY_DIR} /modules
95+ -d extension=phar
15496 )
97+ endif ()
98+
99+ add_custom_command (
100+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /phar.php
101+ COMMAND
102+ ${PHP_EXECUTABLE}
103+ -n
104+ ${phar_shared_options}
105+ -d open_basedir=
106+ -d output_buffering=0
107+ -d memory_limit=-1
108+ -d phar.readonly=0
109+ ${CMAKE_CURRENT_SOURCE_DIR} /build_precommand.php
110+ > ${CMAKE_CURRENT_BINARY_DIR} /phar.php
111+ COMMENT "[ext/phar] Generating phar.php"
112+ VERBATIM
113+ )
155114
156- add_custom_command (
157- OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /phar.phar
115+ add_custom_command (
116+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /phar.phar
117+ COMMAND
118+ ${PHP_EXECUTABLE}
119+ -n
120+ ${phar_shared_options}
121+ -d open_basedir=
122+ -d output_buffering=0
123+ -d memory_limit=-1
124+ -d phar.readonly=0
125+ ${CMAKE_CURRENT_BINARY_DIR} /phar.php
126+ pack
127+ -f ${CMAKE_CURRENT_BINARY_DIR} /phar.phar
128+ -a pharcommand
129+ -c auto
130+ -p 0
131+ -s ${CMAKE_CURRENT_SOURCE_DIR} /phar/phar.php
132+ -h sha1
133+ -b "$<TARGET_FILE:php_cli>"
134+ ${CMAKE_CURRENT_SOURCE_DIR} /phar
135+ DEPENDS
136+ ${CMAKE_CURRENT_BINARY_DIR} /phar.php
137+ COMMENT "[ext/phar] Generating phar.phar"
138+ VERBATIM
139+ )
140+
141+ file (
142+ GENERATE
143+ OUTPUT CMakeFiles/GeneratePhar.cmake
144+ CONTENT [[
145+ # Set phar.phar permissions.
146+ file(
147+ CHMOD
148+ ${CURRENT_BINARY_DIR}/phar.phar
149+ FILE_PERMISSIONS
150+ OWNER_READ
151+ OWNER_WRITE
152+ OWNER_EXECUTE
153+ GROUP_READ
154+ GROUP_WRITE
155+ GROUP_EXECUTE
156+ WORLD_READ
157+ WORLD_EXECUTE
158+ )
159+ ]]
160+ )
161+
162+ add_custom_command (
163+ OUTPUT php_phar_generated_phar
164+ COMMAND
165+ ${CMAKE_COMMAND}
166+ -D CURRENT_BINARY_DIR =${CMAKE_CURRENT_BINARY_DIR}
167+ -P CMakeFiles/GeneratePhar.cmake
168+ DEPENDS
169+ ${CMAKE_CURRENT_BINARY_DIR} /phar.phar
170+ COMMENT "[ext/phar] Generating phar"
171+ )
172+
173+ add_custom_target (
174+ php_phar_generate_file
175+ ALL
176+ DEPENDS
177+ php_cli
178+ php_phar
179+ ${dependent_files}
180+ php_phar_generated_phar
181+ )
182+ set_property (SOURCE php_phar_generated_phar PROPERTY SYMBOLIC TRUE )
183+
184+ # Install phar.phar file to destination. Here a duplicate phar.phar generation
185+ # step is used to generate it to a destination directory because of the
186+ # install prefix used in shebang (when using 'cmake --install --prefix ...').
187+ install (CODE "
188+ execute_process(
158189 COMMAND
159- ${CMAKE_COMMAND}
160- -D EXT_PHAR_SHARED=${EXT_PHAR_SHARED}
161- -D BUILD_SHARED_LIBS =${BUILD_SHARED_LIBS}
162- -D PHP_BINARY_DIR =${PHP_BINARY_DIR}
163- -D PHP_EXECUTABLE=$<TARGET_FILE:php_cli>
164- -D php_cli_filename=$<TARGET_FILE_NAME:php_cli>
165- -D CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
166- -D CURRENT_BINARY_DIR =${CMAKE_CURRENT_BINARY_DIR}
167- -D INSTALL_FULL_BINDIR=${CMAKE_INSTALL_FULL_BINDIR}
168- -P CMakeFiles/GeneratePhar.cmake
169- DEPENDS
170- php_cli
171- php_phar
172- ${dependent_files}
173- COMMENT "[ext/phar] Generating phar.phar"
190+ ${PHP_EXECUTABLE}
191+ -n
192+ ${phar_shared_options}
193+ -d open_basedir=
194+ -d output_buffering=0
195+ -d memory_limit=-1
196+ -d phar.readonly=0
197+ ${CMAKE_CURRENT_BINARY_DIR} /phar.php
198+ pack
199+ -f \$ {CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR} /phar.phar
200+ -a pharcommand
201+ -c auto
202+ -p 0
203+ -s ${CMAKE_CURRENT_SOURCE_DIR} /phar/phar.php
204+ -h sha1
205+ -b \$ {CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR} /$<TARGET_FILE_NAME:php_cli>
206+ ${CMAKE_CURRENT_SOURCE_DIR} /phar
174207 )
175208
176- # Create target which consumes the command via DEPENDS.
177- add_custom_target (
178- php_phar_generated_files
179- ALL
180- DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /phar.phar
181- COMMENT "[ext/phar] Generating phar files"
209+ file(
210+ CHMOD
211+ \$ {CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR} /phar.phar
212+ FILE_PERMISSIONS
213+ OWNER_READ
214+ OWNER_WRITE
215+ OWNER_EXECUTE
216+ GROUP_READ
217+ GROUP_WRITE
218+ GROUP_EXECUTE
219+ WORLD_READ
220+ WORLD_EXECUTE
182221 )
183- endblock( )
222+ " )
184223endif ()
185224
186225# Man documentation.
@@ -193,9 +232,3 @@ install(
193232 ${CMAKE_CURRENT_BINARY_DIR} /phar.phar.1
194233 DESTINATION ${CMAKE_INSTALL_MANDIR} /man1
195234)
196-
197- install (
198- FILES
199- ${CMAKE_CURRENT_BINARY_DIR} /phar.phar
200- DESTINATION ${CMAKE_INSTALL_BINDIR}
201- )
0 commit comments