��չ�� config.m4 �ļ����� UNIX ����ϵͳ��Щ��չ configure ѡ����֧�ֵģ�����Ҫ��Щ��չ�⣬�Լ���ЩԴ�ļ�Ҫ���������һ���֡������о���ʹ�õ� autoconf �꣬���� PHP �ض��ļ� autoconf �ڽ��ģ���鿴 Zend Engine 2 API �ο� �½ڡ�
������ PHP ��չʱ��ǿ�����鰲װ autoconf 2.13 �棬�����ø��µİ汾��ʹ�á�2.13 �汻��Ϊ���� autoconf �п����ԣ������Լ��û������ȷ�����õİ汾��ʹ�����°汾��ʱ������������ configure �������ʽ��������ͬ��
Example #1 config.m4 �ļ�����
dnl $Id$ dnl config.m4 for extension example
PHP_ARG_WITH(example, for example support, [ --with-example[=FILE] Include example support. File is the optional path to example-config]) PHP_ARG_ENABLE(example-debug, whether to enable debugging support in example, [ --enable-example-debug example: Enable debugging support in example], no, no) PHP_ARG_WITH(example-extra, for extra libraries for example, [ --with-example-extra=DIR example: Location of extra libraries for example], no, no) dnl �����չ�Ƿ������� if test "$PHP_EXAMPLE" != "no"; then dnl ��� example-config�����ȳ�����������·����Ȼ���� $PATH ��Ѱ�� AC_MSG_CHECKING([for example-config]) EXAMPLE_CONFIG="example-config" if test "$PHP_EXAMPLE" != "yes"; then EXAMPLE_PATH=$PHP_EXAMPLE else EXAMPLE_PATH=`$php_shtool path $EXAMPLE_CONFIG` fi dnl ����ҵ����õ� example-config����ʹ���� if test -f "$EXAMPLE_PATH" && test -x "$EXAMPLE_PATH" && $EXAMPLE_PATH --version > /dev/null 2>&1; then AC_MSG_RESULT([$EXAMPLE_PATH]) EXAMPLE_LIB_NAME=`$EXAMPLE_PATH --libname` EXAMPLE_INCDIRS=`$EXAMPLE_PATH --incdirs` EXAMPLE_LIBS=`$EXAMPLE_PATH --libs` dnl �����չ���Ƿ������� PHP_CHECK_LIBRARY($EXAMPLE_LIB_NAME, example_critical_function, [ dnl �������� include Ŀ¼ PHP_EVAL_INCLINE($EXAMPLE_INCDIRS) dnl ����������չ�⼰��չ������Ŀ¼ PHP_EVAL_LIBLINE($EXAMPLE_LIBS, EXAMPLE_SHARED_LIBADD) ],[ dnl ���� AC_MSG_ERROR([example library not found. Check config.log for more information.]) ],[$EXAMPLE_LIBS] ) else dnl û�п��õ� example-config������ AC_MSG_RESULT([not found]) AC_MSG_ERROR([Please check your example installation.]) fi dnl ����Ƿ����õ��� if test "$PHP_EXAMPLE_DEBUG" != "no"; then dnl �ǣ������� C ���Ժ�ָ�� AC_DEFINE(USE_EXAMPLE_DEBUG,1,[Include debugging support in example]) fi dnl �������֧�� if test "$PHP_EXAMPLE_EXTRA" != "no"; then if test "$PHP_EXAMPLE_EXTRA" == "yes"; then AC_MSG_ERROR([You must specify a path when using --with-example-extra]) fi PHP_CHECK_LIBRARY(example-extra, example_critical_extra_function, [ dnl �������·�� PHP_ADD_INCLUDE($PHP_EXAMPLE_EXTRA/include) PHP_ADD_LIBRARY_WITH_PATH(example-extra, $PHP_EXAMPLE_EXTRA/lib, EXAMPLE_SHARED_LIBADD) AC_DEFINE(HAVE_EXAMPLEEXTRALIB,1,[Whether example-extra support is present and requested]) EXAMPLE_SOURCES="$EXAMPLE_SOURCES example_extra.c" ],[ AC_MSG_ERROR([example-extra lib not found. See config.log for more information.]) ],[-L$PHP_EXAMPLE_EXTRA/lib] ) fi dnl �����չ���������ļ�����Ϣ��������ϵͳ PHP_NEW_EXTENSION(example, example.c $EXAMPLE_SOURCES, $ext_shared) PHP_SUBST(EXAMPLE_SHARED_LIBADD) fi
config.m4 �ļ�ʹ�� GNU autoconf ���д�������֮��������ǿ��ĺ�������ǿ�� shell �ű���ע�����ַ��� dnl �ָ����ַ�����������ҷ������м䣨���磬[ �� ]�����ַ����ɰ���Ҫ���Ƕ�����á���������ο��ɲμ�λ�� » http://www.gnu.org/software/autoconf/manual/ �� autoconf �ֲᡣ
�����ϵ� config.m4 �����У�����ע�ͺ����ȼ����� 3 �д��룬ʹ���� PHP_ARG_WITH() �� PHP_ARG_ENABLE()����Щ�� configure �ṩ�˿�ѡ��������� ./configure --help ʱ��ʾ�İ����ı���������������ʾ�ģ������ߵIJ�ͬ�������Ǵ��� --with-* ѡ��� --enable-* ѡ�ÿ����չӦ�ṩ����һ�����ϵ�ѡ���Լ���չ���ƣ��Ա��û���ѡ���Ƿ���չ������ PHP �С���������PHP_ARG_WITH() ����ȡ�ò�����ѡ�������չ����������λ�ã��� PHP_ARG_ENABLE() ���ڴ����־��ѡ�
Example #2 configure �������
$ ./configure --help ... --with-example[=FILE] Include example support. FILE is the optional path to example-config --enable-example-debug example: Enable debugging support in example --with-example-extra=DIR example: Location of extra libraries for example ... $ ./configure --with-example=/some/library/path/example-config --disable-example-debug --with-example-extra=/another/library/path ... checking for example support... yes checking whether to enable debugging support in example... no checking for extra libraries for example... /another/library/path ...
Note:
�ڵ��� configure ʱ������ѡ�����������е�˳����Σ����ᰴ�� config.m4 ��ָ����˳����м�⡣
config.m4 �ɸ��û��ṩһЩ��ʲô��ѡ�����ھ�������ѡ���ʱ���ˡ��������У�����ѡ����δָ��ʱ��ȻĬ��Ϊ "no"��ϰ���ϣ�����ô�ֵ��Ϊ����������չ��ѡ���Ĭ��ֵ��Ϊ����չ�� PHP �ֿ��������� phpize ���Ǵ�ֵ����Ҫ������ PHP ��ʱ��Ӧ��Ĭ��ֵ����չ�ռ�Ū�ҡ�����������ѡ��Ĵ���Ҫ���ӵöࡣ
���ȼ���Ƿ������� --with-example[=FILE] ѡ����ѡ��δ��ָ������ʹ�÷ĸ�ʽ��--without-example ������ֵΪ "no" ʱ���������������չ�ĺ����������κ����鶼���ᷢ�������������������ָ����ֵΪ /some/library/path/example-config�����Ե�һ�� test �ɹ��ˡ�
��������������� AC_MSG_CHECKING()������һ�� autoconf �꣬���һ�б����� "checking for ..." ����Ϣ��������û��ٶ��� example-config �Ƿ���һ����ȷ��·��������������У�PHP_EXAMPLE ��ȡ����ֵΪ /some/library/path/example-config�����Ѹ��Ƶ� EXAMPLE_PATH �������ˡ�ֻ���û�ָ���� --with-example ���Ż�ִ�д��� $php_shtool path $EXAMPLE_CONFIG������ʹ���û���ǰ�� PATH ���������Ʋ� example-config ��λ�á�������Σ���һ�����Ǽ����ѡ�� EXAMPLE_PATH �Ƿ��������ļ����Ƿ��ִ�У����Ƿ�ִ�гɹ�����ɹ�������� AC_MSG_RESULT()�������� AC_MSG_CHECKING() ��ʼ������С������� AC_MSG_ERROR()����ӡ��������Ϣ�������ж�ִ�� configure��
��������ִ�м��� example-config ��ȷ��һЩվ���ض���������Ϣ����һ�����õ��� PHP_CHECK_LIBRARY()������ PHP ����ϵͳ�ṩ��һ���꣬��װ�� autoconf �� AC_CHECK_LIB() ������PHP_CHECK_LIBRARY() ���Ա��롢���Ӻ�ִ�г����ڵ�һ������ָ���Ŀ��е����ɵڶ�������ָ���ķ��ţ�ʹ�õ���������������ַ�����Ϊ���������ѡ�������Գɹ��ˣ������е����������������Ľű����˽ű��� example-config ���ṩ��ԭʼ��ѡ���ַ�����ȡ��ͷ�ļ�·�������ļ�·���Ϳ����ƣ����� PHP ����ϵͳ���������ʧ�ܣ��ű������е��ĸ������еĽű�����ʱ���� AC_MSG_ERROR() ���жϳ���ִ�С�
���� --enable-example-debug �ܼ�ֻ�ؼ������ʵֵ��������ɹ�������� AC_DEFINE() ʹ C ���Ժ�ָ�� USE_EXAMPLE_DEBUG ��������չ��Դ���롣�����������Ǹ� config.h ��ע���ַ�����ͨ���ɷ��ĵ����ա�
���ڴ�������˵���� --with-example-extra=DIR ѡ��������ļٶ���"����"���ܲ���������ٶ��� example-config ������Ҳû��Ĭ�ϵ�����·������ˣ��û���Ҫ������Ŀ�֮ǰ�ṩ���ó����е㲻����ʵ�е���չ������������ý�����˵���Ե����á�
���뿪ʼ������֪�ķ�ʽ����� PHP_EXAMPLE_EXTRA ����ʵֵ��������ṩ��Ϊ����ʽ����������������û�Ҳ�����������Ĺ��ܡ�������ṩ��Ϊδ�ṩ�����Ŀ϶���ʽ������� AC_MSG_ERROR() ��ֹ������һ�����ٴε��� PHP_CHECK_LIBRARY()����һ�Σ���Ϊû���ṩԤ�������ѡ�PHP_ADD_INCLUDE() �� PHP_ADD_LIBRARY_WITH_PATH() ���ڹ�������������ͷ�ļ�·�������ļ�·���Ϳ��־��Ҳ���� AC_DEFINE() ��ָʾ������Ķ���ܴ����ǿ��õģ����ñ����������Ժ�Ĵ��룬�ж����Դ����Ҫ������������ʧ�ܣ����������Ϥ�� AC_MSG_ERROR()����һ�ֲ�ͬ�Ĵ���ʧ�ܵķ�ʽ�Ǹ���Ϊ���� AC_MSG_WARNING()�����磺
AC_MSG_WARNING([example-extra lib not found. example will be built without extra functionality.])
�����У�configure ���ӡһ�ξ�����Ϣ�����Ǵ����Ҽ������������ַ�ʽ����ʧ��������չ������Ա�����ʱ������
���������ͷ�ļ����ض��Ŀ⣬����ȫ��ѡ�����뼰�궨�壬����һ����Ҫ����������߹���ϵͳȥ������չ����ͱ����õ����ļ���Ϊ������Щ����Ҫ���� PHP_NEW_EXTENSION() �ꡣ��һ����������չ�����ƣ��Ͱ�������Ŀ¼ͬ�����ڶ�����������Ϊ��չ��һ���ֵ�����Դ�ļ����б��μ� PHP_ADD_BUILD_DIR() �Ի�ȡ������Ŀ¼��Դ�ļ���ӵ��������̵������Ϣ���������������� $ext_shared�� ��Ϊ�� --with-example[=FILE] ������ PHP_ARG_WITH()ʱ���� configure ����������ֵ�����ĸ�����ָ��һ��"SAPI ��"��������ר����Ҫ CGI �� CLI SAPI ����չ�����������Ӧ���ա����������ָ���˹���ʱҪ���� CFLAGS �ı�־�б�������������һ������ֵ��Ϊ "yes" ʱ��ǿ��������չʹ�� $CXX ���� $CC ���������������Ժ�����в������ǿ�ѡ�ġ������ PHP_SUBST() ��������չ�Ĺ��������μ� ��չ��� FAQ �Ի�ȡ�����йؽ��ù���ʽ�¹�����չ����Ϣ��
��ǰ��д�� counter ��չ��һ���������������� config.m4 �ļ�������ʹ�úܶ��ϵͳ�����ԡ��Բ�ʹ���ⲿ�Ļ�Ŀ����չ��˵������һ���ȽϺõIJ�����ʽ��
Example #3 counter �� config.m4 �ļ�
dnl
$
Id$ dnl config.m4 for extension counter PHP_ARG_ENABLE(counter, for counter support, [ --enable-counter Include counter support]) dnl Check whether the extension is enabled at all if test "$PHP_COUNTER" != "no"; then dnl Finally, tell the build system about the extension and what files are needed PHP_NEW_EXTENSION(counter, counter.c counter_util.c, $ext_shared) PHP_SUBST(COUNTER_SHARED_LIBADD) fi