PHP 4 features an automatic build system that's very
flexible. All modules reside in a subdirectory of the ext directory. In addition to its own
sources, each module consists of a config.m4 file, for
extension configuration. (for example, see
http://www.gnu.org/manual/m4/html_mono/m4.html)
All these stub files are generated automatically, along
with .cvsignore, by a little shell
script named ext_skel that resides
in the ext directory. As argument
it takes the name of the module that you want to create. The
shell script then creates a directory of the same name, along
with the appropriate stub files.
Step by step, the process looks like this:
:~/cvs/php4/ext: ./ext_skel --extname=my_module Creating directory my_module Creating basic files: config.m4 .cvsignore my_module.c php_my_module.h CREDITS EXPERIMENTAL tests/001.phpt my_module.php [done]. To use your new extension, you will have to execute the following steps: 1. $ cd .. 2. $ vi ext/my_module/config.m4 3. $ ./buildconf 4. $ ./configure --[with|enable]-my_module 5. $ make 6. $ ./php -f ext/my_module/my_module.php 7. $ vi ext/my_module/my_module.c 8. $ make Repeat steps 3-6 until you are satisfied with ext/my_module/config.m4 and step 6 confirms that your module is compiled into PHP. Then, start writing code and repeat the last two steps as often as necessary. |
The default config.m4 shown in
範例 27-1 is a
bit more complex:
If you're unfamiliar with M4 files (now is certainly a
good time to get familiar), this might be a bit confusing at
first; but it's actually quite easy.
Note: Everything prefixed with dnl is treated as a comment and is not
parsed.
The config.m4 file is
responsible for parsing the command-line options passed to
configure at configuration time.
This means that it has to check for required external files
and do similar configuration and setup tasks.
The default file creates two configuration directives in
the configure script: --with-my_module and
--enable-my_module. Use the first option when referring
external files (such as the
--with-apache directive that refers to the Apache
directory). Use the second option when the user simply has to
decide whether to enable your extension. Regardless of which
option you use, you should uncomment the other, unnecessary
one; that is, if you're using
--enable-my_module, you should remove support for --with-my_module, and vice versa.
By default, the config.m4 file
created by ext_skel accepts both
directives and automatically enables your extension. Enabling
the extension is done by using the
PHP_EXTENSION macro. To change the default behavior to
include your module into the PHP binary when desired by the
user (by explicitly specifying
--enable-my_module or
--with-my_module), change the test for $PHP_MY_MODULE to ==
"yes":
if test "$PHP_MY_MODULE" == "yes"; then dnl Action.. PHP_EXTENSION(my_module, $ext_shared) fi |
Note: Be sure to run
buildconf every time you change
config.m4!
We'll go into more details on the M4 macros available to
your configuration scripts later in this chapter. For now,
we'll simply use the default files.