Новые книги

Эта книга о том, как создать в Интернете свой сетевой дневник или корпоративный блог, а затем сделать его популярным и узнаваемым. Вы сделаете известным свое имя, сможете рассказать о себе и своей фирме потенциальным клиентам, расширите горизонты своего бизнеса. Эффективность описанных в книге методов доказана автором на практике. Основное внимание в книге уделено наиболее популярным публичным сервисам. Наличие блога позволит вам реализовать несколько разных сценариев жизни, выбрать свой стиль поведения, побывать в самых разных сообществах, найти друзей. Сам процесс «раскрутки» увлекает, как всякое состязание.

Книга предназначена для блоггеров, желающих научиться вести блог и получить от жизни максимум возможного.
The first edition of this book started with the words: ‘A modern society could no longer function without the microprocessor.’

This is certainly still true but it is even truer if we include the microcontroller. While the microprocessor is at the heart of our computers, with a great deal of publicity, the microcontroller is quietly running the rest of our world. They share our homes, our vehicles and our workplace, and sing to us from our greetings cards. They are our constant, unseen companions and billions are being installed every year with little or no publicity. The purpose of this book is to give a worry-free introduction to microprocessors and microcontrollers. It starts at the beginning and does not assume any previous knowledge of microprocessors or microcontrollers and, in gentle steps, introduces the knowledge necessary to take those vital first steps into the world of the micro. John Crisp

Система Автоматического Построения PHP

Учебник РНР
Назад Вперёд

Глава 28. Система автоматического построения PHP

PHP 4.0 предлагает чрезвычайно гибкую систему автоматического построения/build. Все модули находятся в поддиректории ext. Помимо своих собственных ресурсов, каждый модуль состоит из файла M4 (например, см. http://www.gnu.org/manual/m4/html_mono/m4.html) о конфигурации и файле Makefile.in), который отвечает за компиляцию (результаты работы autoconf и automake; см. http://sourceware.cygnus.com/autoconf/autoconf.html и http://sourceware.cygnus.com/automake/automake.html).

Оба файла генерируются автоматически вместе с .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 по умолчанию.
# $Id: Extending_Zend_Build.xml,v 1.1 2002/01/09 12:16:30 derick Exp $

LTLIBRARY_NAME        = libmy_module.la
LTLIBRARY_SOURCES     = my_module.c
LTLIBRARY_SHARED_NAME = my_module.la

include $(top_srcdir)/build/dynlib.mk

Тут мало что можно сказать: Он содержит имена входного и выходного файлов. Вы можете также специфицировать 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.


Назад Оглавление Вперёд
Сложные типы ВверхСоздание расширений