PROPOSAL: sapi/cli/php -M (similar to gcc -M)

From: Date: Tue, 14 Jan 2003 21:48:23 +0000
Subject: PROPOSAL: sapi/cli/php -M (similar to gcc -M)
Groups: php.dev 
Request: Send a blank email to php-dev+get-93471@lists.php.net to get a copy of this message
I have recenlty posted on this topic but got no response, probably because I didn't phrase it well. I would like to implement this proposed feature if I can get some feedback to know if it would be accepted for inclusion. Here is the proposal: * Add a '-M' option to sapi/cli/php that would behave essentially the same as gcc -M and enable the use of php command-line scripts to work properly in a makefile build environment (See below for explanation of gcc -M). * 'php -M -f myFile.php' should differ from 'gcc -M myFile.c', in two ways:
        a) Command output should only list prerequisite files rather than a complete dependency makefile rule since there is no standard suffix for php output as for C [ myFile.o : myFile.c ... ]
        b) Detect dependencies other than included and required files, as reported by get_included_files(). There are many other ways that a PHP script could become dependent on other files which cannot easily be determined automatically unless a function is available for a script to explicitly declare that it depends on an external file. [Example: <? if (file_exists($myFile)) echo "hello";?>].
* Add two built-in PHP functions to allow '-M' option to accurately identify file dependencies in PHP source files (the names could change):
        void register_prerequisite_file( string $myFile )
        Array get_prerequisite_files( )
* With the above two functions, this is how the system should work: In the following example, /usr/local/bin/php-cli is the command-line version of PHP: sapi/cli/php --------- file: test.php #!/usr/local/bin/php-cli <? php include( "myIncludedFile.php" ); register_prerequisite_file( "myRequiredFile") if (file_exists( "myRequiredFile" )) echo "got file"; ?> -------- eof Internally php-cli -M would call get_included_files() and get_prerequisite_files() and join them together in a space separated list, with the first item being the source file. Here is what php-cli would do from the command line: $/usr/local/bin/php-cli -M -f test.php test.php myIncludedFile.php myRequiredFile --------------- # A makefile rule could now use these features: $(PHP):=/usr/local/bin/php-cli define phpDependencies $(shell $(PHP) -M -f $(1)) endef myFile.html : $(call phpDependencies,myFile.php)
        $(PHP) -f $< > $@ || { echo "failed"; cat $@; exit 1; }
# end of makefile -------------- APPENDIX - For those unfamiliar with gcc -M, following if from info gcc `-M'
     Tell the preprocessor to output a rule suitable for `make'
     describing the dependencies of each object file.  For each source
     file, the preprocessor outputs one `make'-rule whose target is the
     object file name for that source file and whose dependencies are
     all the `#include' header files it uses.  This rule may be a
     single line or may be continued with `\'-newline if it is long.
     The list of rules is printed on standard output instead of the
     preprocessed C program.
     -M' implies -E'.
     Another way to specify output of a `make' rule is by setting the
     environment variable `DEPENDENCIES_OUTPUT' (*note Environment
     Variables::.).
`-E'
     Run only the C preprocessor.  Preprocess all the C source files
     specified and output the results to standard output or to the
     specified output file.
- Greg Keraunen http://www.xmake.org http://www.xmlmake.com

« previous php.dev (#93471) next »