Оба файла генерируются автоматически вместе с .cvsignore небольшим скриптом оболочки под названием
ext_skel, который находится в директории ext. В качестве аргумента он принимает имя создаваемого модуля. Скрипт затем
создаёт директорию с тем же именем и соответствующие файлы config.m4 и Makefile.in.
Пошагово этот процесс выглядит так:
root@dev:/usr/local/src/php4/ext > ./ext_skel my_module
Creating directory
Creating basic files: config.m4 Makefile.in .cvsignore [done].
To use your new extension, you will have to execute the following steps:
$ cd ..
$ ./buildconf
$ ./configure (your extension is automatically enabled)
$ vi ext/my_module/my_module.c
$ make
Repeat the last two steps as often as necessary.
Эта инструкция создаёт вышеупомянутые файлы. Для того чтобы включить новый
модель в процесс автоматической конфигурации и построения,
вы должны запустить buildconf, который регенерирует скрипт configure путём поиска в директории
ext и включения всех найденных файлов config.m4.
Наконец, запуск configure разбирает все опции конфигурации и генерирует makefile на основе этих опций и
опций, специфицированных в Makefile.in.
В Листинге 9.1 показан сгенерированный Makefile.in:
Рисунок 28-1. Листинг 9.1. Файл Makefile.in по умолчанию.
Тут мало что можно сказать: Он содержит имена входного и выходного файлов. Вы
можете также специфицировать build-инструкции для других файлов, если ваш
модуль строится из нескольких исходных файлов.
Файл config.m4 по умолчанию, показанный в Листинге 9.2, немного сложнее:
Рисунок 28-2. Листинг 9.2. Файл config.m4 по умолчанию.
dnl $Id: Extending_Zend_Build.xml,v 1.1 2002/01/09 12:16:30 derick Exp $
dnl config.m4 for extension my_module
dnl don’t forget to call PHP_EXTENSION(my_module)
dnl If your extension references something external, use with:
PHP_ARG_WITH(my_module, for my_module support,
dnl Make sure that the comment is aligned:
[ --with-my_module Include my_module support])
dnl Otherwise use enable:
PHP_ARG_ENABLE(my_module, whether to enable my_module support,
dnl Make sure that the comment is aligned:
[ --enable-my_module Enable my_module support])
if test "$PHP_MY_MODULE" != "no"; then
dnl Action..
PHP_EXTENSION(my_module, $ext_shared)
fi
Если вы плохо знакомы с M4-файлами (теперь самое время познакомиться с ними
получше), всё это может вызвать некоторое замешательство; но в
действительности всё довольно просто.
Примечание: всё с префиксом dnl считается комментарием и не разбирается.
Файл config.m4 отвечает за разбор опций командной строки, передаваемых в configure
на этапе конфигурирования. Это означает, что он должен проверять наличие
требуемых внешних файлов и выполнять схожие задачи по конфигурированию и установке.
Файл по умолчанию создаёт две директивы конфигурирования в скрипте configure:
--with-my_module и --enable-my_module.
Используйте первую опцию при обращении к внешним файлам (как с директивой --with-apache, которая обращается к директории Apache).
Используйте вторую опцию, когда пользователь должен просто решить, включать ли
ваше расширение. Независимо от используемой опции вы должны раскомментировать
другую опцию, ненужную; то есть, если вы используете --enable-my_module, вы должны удалить поддержку
--with-my_module, и наоборот.
По умолчанию файл config.m4, созданный скриптом
ext_skel, принимает обе директивы и автоматически включает ваше расширение. Включение
расширения выполняется путём использования макроса PHP_EXTENSION. Для изменения поведения по умолчанию и подключения вашего модуля в
исполняемый PHP, когда это нужно пользователю (явно специфицируя --enable-my_module или
--with-my_module), измените test for $PHP_MY_MODULE на == "yes":
if test "$PHP_MY_MODULE" == "yes"; then
dnl Action..
PHP_EXTENSION(my_module, $ext_shared)
fi
Это может потребовать от вас использования --enable-my_module
каждый раз при реконфигурировании и рекомпиляции PHP.
Примечание: не забывайте запускать buildconf каждый раз при изменении
config.m4!
Далее в этой главе мы обсудим детали работы макросов M4, доступных вашим
скриптам конфигурирования. Пока же мы просто используем файлы по умолчанию.
Все примеры исходников на CD-ROM работают с файлами config.m4. Для включения их процесс построения PHP, просто скопируйте директории
исходников в вашу директорию ext РНР, запустите buildconf, а затем подключите сэмплы необходимых модулей путём использования
соответствующих директив--enable-* совместно с configure.