When writing a PHP extension, this documentation page indicates that a config.m4
file should be provided for autoconf to use. It gives a couple of examples of such files, but the documentation is incomplete. For example, the example file uses the macro PHP_EVAL_INCLINE
, but it isn't mentioned in the documentation that follows it.
So, what PHP-specific macros are available to use in the config.m4
file, and what do they do? Is there any comprehensive documentation for writing those files?
I wasn't able to find any such list on the internet.
However, we can just parse the acinclude.m4
, where all those macros are defined.
The acinclude.m4
can be found in the root directory of any PHP source tarball, as well as in lib/php/build
of any PHP installation.
Macros are declared using the AC_DEFUN([name], [replacement])
macro.
It is usually preceded by one or more comment line(s), starting with dnl
, which act as a rudimentary documentation.
I wrote the following script to parse each function declaration into name, usage and description:
$funcs = [];
$matches = [];
// Scan for "AC_DEFUN([FUNCTION_NAME_HERE]..." because those are function declarations,
// and all preceding lines starting with "dbl" because those are comments, probably including documentation
preg_match_all('#((?:dnl(?: .*)?\\n)*)AC_DEFUN\\(\\[(\\w+)\\]#', file_get_contents('acinclude.m4'), $matches);
// $matches[1][$i] contains all lines starting with "dbl"
// $matches[2][$i] contains the function name
for($i = 0; $i < count($matches[1]); $i++)
{
$name = $matches[2][$i];
$func =
[
'usage' => '',
'description' => ''
];
$beginning = TRUE;
// Process each comment line
// Since comments can, but don't have to include usage information, we try to filter it out.
foreach(explode("\n", $matches[1][$i]) as $line)
{
// Discard empty lines
if($line == 'dnl')
{
// Except if they're inside the description part - blocks shall stay separated.
if(!$beginning)
{
$func['description'] .= "\n\n";
}
continue;
}
$m = [];
// If no line had content yet, and the current line starts with the function name, that's the usage information!
if($beginning && preg_match('#dnl ('.$name.'(?:.*)?)#', $line, $m) === 1)
{
$func['usage'] = $m[1];
}
// Everything else is just description.
else
{
$func['description'] .= substr($line, 3);
}
$beginning = FALSE;
}
// Remove unnecessary whitespace, and make sure there's no sneaky HTML in the description.
$func['description'] = htmlspecialchars(trim($func['description']));
$funcs[$name] = $func;
}
// Sort by function name
ksort($funcs);
Running this in the folder where your acinclude.m4
is located will populate $funcs
with a sorted array with function names as keys and their usage and description as values.
This can be parsed into an HTML table with a few lines of code, like
$html = '';
foreach($funcs as $name => $func)
{
$html .= '<tr><td>'.$name.'</td><td>'.$func['usage'].'</td><td>'.$func['description'].'</td></tr>';
}
file_put_contents('acinclude.html', '<table>'.$html.'</table>');
Apply some nice CSS to it and add a header row, and you've got a readable list of available macros.
While some macros are quite well documented, some are not, or lacking documentation entirely, but I still think it's better than nothing.
Applied to the acinclude.m4
of PHP 5.6.11, this yields (best viewed fullscreen):
table
{
border-collapse: collapse;
}
tr
{
background: #F8F8F8;
}
tr:nth-child(even)
{
background: #F0F0F0;
}
th
{
background: #E0E0E0;
}
td, th
{
padding: 10px;
border: solid 1px #BBB;
}
td:last-child
{
white-space: pre-line;
}
<table><tr><th>Name</th><th>Usage</th><th>Description</th></tr>
<tr><td>PHP_AC_BROKEN_SNPRINTF</td><td>PHP_AC_BROKEN_SNPRINTF</td><td>Check for broken snprintf(), C99 conformance</td></tr><tr><td>PHP_AC_BROKEN_SPRINTF</td><td>PHP_AC_BROKEN_SPRINTF</td><td>Check for broken sprintf(), C99 conformance</td></tr><tr><td>PHP_ADD_BUILD_DIR</td><td></td><td></td></tr><tr><td>PHP_ADD_EXTENSION_DEP</td><td>PHP_ADD_EXTENSION_DEP(extname, depends [, depconf])</td><td>This macro is scanned by genif.sh when it builds the internal functions list, so that modules can be init'd in the correct order $1 = name of extension, $2 = extension upon which it depends $3 = optional: if true, it's ok for $2 to have not been configured default is false and should halt the build. To be effective, this macro must be invoked *after* PHP_NEW_EXTENSION. The extension on which it depends must also have been configured. See ADD_EXTENSION_DEP in win32 build</td></tr><tr><td>PHP_ADD_FRAMEWORK</td><td>PHP_ADD_FRAMEWORK(framework [,before])</td><td>add a (Darwin / Mac OS X) framework to the link line. if before is 1, the framework is added to the beginning of the line.</td></tr><tr><td>PHP_ADD_FRAMEWORKPATH</td><td>PHP_ADD_FRAMEWORKPATH(path [,before])</td><td>add a (Darwin / Mac OS X) framework path to the link and include lines. default paths include (but are not limited to) /Local/Library/Frameworks and /System/Library/Frameworks, so these don't need to be specifically added. if before is 1, the framework path is added to the beginning of the relevant lines.</td></tr><tr><td>PHP_ADD_FRAMEWORK_WITH_PATH</td><td>PHP_ADD_FRAMEWORK_WITH_PATH(framework, path)</td><td>Adds a (Darwin / Mac OS X) framework path and the framework itself to the link and include lines.</td></tr><tr><td>PHP_ADD_INCLUDE</td><td>PHP_ADD_INCLUDE(path [,before])</td><td>add an include path. if before is 1, add in the beginning of INCLUDES.</td></tr><tr><td>PHP_ADD_LIBPATH</td><td>PHP_ADD_LIBPATH(path [, SHARED-LIBADD])</td><td>Adds a path to linkpath/runpath (LDFLAGS)</td></tr><tr><td>PHP_ADD_LIBRARY</td><td>PHP_ADD_LIBRARY(library[, append[, shared-libadd]])</td><td>add a library to the link line</td></tr><tr><td>PHP_ADD_LIBRARY_DEFER</td><td>PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]])</td><td>add a library to the link line (deferred, not used during configure)</td></tr><tr><td>PHP_ADD_LIBRARY_DEFER_WITH_PATH</td><td>PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path[, shared-libadd])</td><td>add a library to the link line (deferred) and path to linkpath/runpath (not deferred) if shared-libadd is not empty and $ext_shared is yes, shared-libadd will be assigned the library information</td></tr><tr><td>PHP_ADD_LIBRARY_WITH_PATH</td><td>PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd])</td><td>add a library to the link line and path to linkpath/runpath. if shared-libadd is not empty and $ext_shared is yes, shared-libadd will be assigned the library information</td></tr><tr><td>PHP_ADD_MAKEFILE_FRAGMENT</td><td>PHP_ADD_MAKEFILE_FRAGMENT([srcfile [, ext_srcdir [, ext_builddir]]])</td><td>Processes a file called Makefile.frag in the source directory of the most recently added extension. $(srcdir) and $(builddir) are substituted with the proper paths. Can be used to supply custom rules and/or additional targets.</td></tr><tr><td>PHP_ADD_SOURCES</td><td>PHP_ADD_SOURCES(source-path, sources [, special-flags [, type]])</td><td>Adds sources which are located relative to source-path to the array of type type. Sources are processed with optional special-flags which are passed to the compiler. Sources can be either written in C or C++ (filenames shall end in .c or .cpp, respectively).
Note: If source-path begins with a "/", the "/" is removed and the path is interpreted relative to the top build-directory.
which array to append to?</td></tr><tr><td>PHP_ADD_SOURCES_X</td><td>PHP_ADD_SOURCES_X(source-path, sources[, special-flags[, target-var[, shared[, special-post-flags]]]])</td><td>Additional to PHP_ADD_SOURCES (see above), this lets you set the name of the array target-var directly, as well as whether shared objects will be built from the sources.
Should not be used directly.</td></tr><tr><td>PHP_AP_EXTRACT_VERSION</td><td>PHP_AP_EXTRACT_VERSION(/path/httpd)</td><td>This macro is used to get a comparable version for apache1/2.</td></tr><tr><td>PHP_ARG_ANALYZE</td><td>PHP_ARG_ANALYZE</td><td>internal</td></tr><tr><td>PHP_ARG_ANALYZE_EX</td><td>PHP_ARG_ANALYZE_EX</td><td>internal</td></tr><tr><td>PHP_ARG_ENABLE</td><td>PHP_ARG_ENABLE(arg-name, check message, help text[, default-val[, extension-or-not]])</td><td>Sets PHP_ARG_NAME either to the user value or to the default value. default-val defaults to no. This will also set the variable ext_shared, and will overwrite any previous variable of that name. If extension-or-not is yes (default), then do the ENABLE_ALL check and run the PHP_ARG_ANALYZE_EX.</td></tr><tr><td>PHP_ARG_WITH</td><td>PHP_ARG_WITH(arg-name, check message, help text[, default-val[, extension-or-not]])</td><td>Sets PHP_ARG_NAME either to the user value or to the default value. default-val defaults to no. This will also set the variable ext_shared, and will overwrite any previous variable of that name. If extension-or-not is yes (default), then do the ENABLE_ALL check and run the PHP_ARG_ANALYZE_EX.</td></tr><tr><td>PHP_BROKEN_GETCWD</td><td>PHP_BROKEN_GETCWD</td><td>Some systems, notably Solaris, cause getcwd() or realpath to fail if a component of the path has execute but not read permissions</td></tr><tr><td>PHP_BROKEN_GLIBC_FOPEN_APPEND</td><td>PHP_BROKEN_GLIBC_FOPEN_APPEND</td><td></td></tr><tr><td>PHP_BUILD_BUNDLE</td><td>PHP_BUILD_BUNDLE</td><td></td></tr><tr><td>PHP_BUILD_PROGRAM</td><td>PHP_BUILD_PROGRAM</td><td></td></tr><tr><td>PHP_BUILD_SHARED</td><td>PHP_BUILD_SHARED</td><td></td></tr><tr><td>PHP_BUILD_STATIC</td><td>PHP_BUILD_STATIC</td><td></td></tr><tr><td>PHP_BUILD_THREAD_SAFE</td><td>PHP_BUILD_THREAD_SAFE</td><td></td></tr><tr><td>PHP_CANONICAL_HOST_TARGET</td><td>PHP_CANONICAL_HOST_TARGET</td><td></td></tr><tr><td>PHP_CHECK_64BIT</td><td>PHP_CHECK_64BIT([do if 32], [do if 64])</td><td>This macro is used to detect if we're at 64-bit platform or not. It could be useful for those external libs, that have different precompiled versions in different directories.</td></tr><tr><td>PHP_CHECK_CONFIGURE_OPTIONS</td><td>PHP_CHECK_CONFIGURE_OPTIONS</td><td></td></tr><tr><td>PHP_CHECK_FRAMEWORK</td><td>PHP_CHECK_FRAMEWORK(framework, function [, action-found [, action-not-found ]])</td><td>El cheapo wrapper for AC_CHECK_LIB</td></tr><tr><td>PHP_CHECK_FUNC</td><td>PHP_CHECK_FUNC(func, ...)</td><td>This macro checks whether 'func' or '__func' exists in the default libraries and as a fall back in the specified library. Defines HAVE_func and HAVE_library if found and adds the library to LIBS.</td></tr><tr><td>PHP_CHECK_FUNC_LIB</td><td></td><td></td></tr><tr><td>PHP_CHECK_GCC_ARG</td><td>PHP_CHECK_GCC_ARG(arg, action-if-found, action-if-not-found)</td><td></td></tr><tr><td>PHP_CHECK_IN_ADDR_T</td><td>PHP_CHECK_IN_ADDR_T</td><td></td></tr><tr><td>PHP_CHECK_LIBRARY</td><td>PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]])</td><td>Wrapper for AC_CHECK_LIB</td></tr><tr><td>PHP_CHECK_PDO_INCLUDES</td><td>PHP_CHECK_PDO_INCLUDES([found [, not-found]])</td><td></td></tr><tr><td>PHP_CHECK_SIZEOF</td><td>PHP_CHECK_SIZEOF(type, cross-value, extra-headers)</td><td></td></tr><tr><td>PHP_CHECK_STDINT_TYPES</td><td>PHP_CHECK_STDINT_TYPES</td><td></td></tr><tr><td>PHP_CHECK_TYPES</td><td>PHP_CHECK_TYPES(type-list, include-file [, extra-headers])</td><td></td></tr><tr><td>PHP_CONFIGURE_PART</td><td>PHP_CONFIGURE_PART(title)</td><td>Adds separator title configure output (idea borrowed from mm)</td></tr><tr><td>PHP_CONFIG_NICE</td><td>PHP_CONFIG_NICE(filename)</td><td>Generates the config.nice file</td></tr><tr><td>PHP_CRYPT_R_STYLE</td><td>PHP_CRYPT_R_STYLE</td><td>detect the style of crypt_r() is any is available see APR_CHECK_CRYPT_R_STYLE() for original version</td></tr><tr><td>PHP_C_BIGENDIAN</td><td>PHP_C_BIGENDIAN</td><td>Replacement macro for AC_C_BIGENDIAN</td></tr><tr><td>PHP_DEBUG_MACRO</td><td>PHP_DEBUG_MACRO(filename)</td><td></td></tr><tr><td>PHP_DECLARED_TIMEZONE</td><td>PHP_DECLARED_TIMEZONE</td><td></td></tr><tr><td>PHP_DEFINE</td><td>PHP_DEFINE(WHAT [, value[, directory]])</td><td>Creates builddir/include/what.h and in there #define WHAT value</td></tr><tr><td>PHP_DEF_HAVE</td><td>PHP_DEF_HAVE(what)</td><td>Generates 'AC_DEFINE(HAVE_WHAT, 1, [ ])'</td></tr><tr><td>PHP_DETECT_ICC</td><td>PHP_DETECT_ICC</td><td>Detect Intel C++ Compiler and unset $GCC if ICC found</td></tr><tr><td>PHP_DETECT_SUNCC</td><td>PHP_DETECT_SUNCC</td><td>Detect if the systems default compiler is suncc. We also set some useful CFLAGS if the user didn't set any</td></tr><tr><td>PHP_DOES_PREAD_WORK</td><td>PHP_DOES_PREAD_WORK</td><td>internal</td></tr><tr><td>PHP_DOES_PWRITE_WORK</td><td>PHP_DOES_PWRITE_WORK</td><td>internal</td></tr><tr><td>PHP_EBCDIC</td><td>PHP_EBCDIC</td><td></td></tr><tr><td>PHP_EVAL_INCLINE</td><td>PHP_EVAL_INCLINE(headerline)</td><td>Use this macro, if you need to add header search paths to the PHP build system which are only given in compiler notation.</td></tr><tr><td>PHP_EVAL_LIBLINE</td><td>PHP_EVAL_LIBLINE(libline, SHARED-LIBADD)</td><td>Use this macro, if you need to add libraries and or library search paths to the PHP build system which are only given in compiler notation.</td></tr><tr><td>PHP_EXPAND_PATH</td><td>PHP_EXPAND_PATH(path, variable)</td><td>expands path to an absolute path and assigns it to variable</td></tr><tr><td>PHP_EXTENSION</td><td></td><td>deprecated</td></tr><tr><td>PHP_FOPENCOOKIE</td><td>PHP_FOPENCOOKIE</td><td></td></tr><tr><td>PHP_GEN_BUILD_DIRS</td><td></td><td></td></tr><tr><td>PHP_GEN_GLOBAL_MAKEFILE</td><td>PHP_GEN_GLOBAL_MAKEFILE</td><td>Generates the global makefile.</td></tr><tr><td>PHP_HELP_SEPARATOR</td><td>PHP_HELP_SEPARATOR(title)</td><td>Adds separator title into the configure --help display.</td></tr><tr><td>PHP_INIT_BUILD_SYSTEM</td><td>PHP_INIT_BUILD_SYSTEM</td><td></td></tr><tr><td>PHP_INIT_DTRACE</td><td>PHP_INIT_DTRACE(providerdesc, header-file, sources [, module])</td><td></td></tr><tr><td>PHP_INSTALL_HEADERS</td><td></td><td>PHP_INSTALL_HEADERS(path [, file ...])
PHP header files to be installed</td></tr><tr><td>PHP_LIBGCC_LIBPATH</td><td>PHP_LIBGCC_LIBPATH(gcc)</td><td>Stores the location of libgcc in libgcc_libpath</td></tr><tr><td>PHP_MISSING_FCLOSE_DECL</td><td>PHP_MISSING_FCLOSE_DECL</td><td>See if we have broken header files like SunOS has.</td></tr><tr><td>PHP_MISSING_TIME_R_DECL</td><td>PHP_MISSING_TIME_R_DECL</td><td></td></tr><tr><td>PHP_NEW_EXTENSION</td><td>PHP_NEW_EXTENSION(extname, sources [, shared [, sapi_class [, extra-cflags [, cxx [, zend_ext]]]]])</td><td>Includes an extension in the build.
"extname" is the name of the ext/ subdir where the extension resides. "sources" is a list of files relative to the subdir which are used to build the extension. "shared" can be set to "shared" or "yes" to build the extension as a dynamically loadable library. Optional parameter "sapi_class" can be set to "cli" to mark extension build only with CLI or CGI sapi's. "extra-cflags" are passed to the compiler, with @ext_srcdir@ and @ext_builddir@ being substituted. "cxx" can be used to indicate that a C++ shared module is desired. "zend_ext" indicates a zend extension.</td></tr><tr><td>PHP_OUTPUT</td><td>PHP_OUTPUT(file)</td><td>Adds "file" to the list of files generated by AC_OUTPUT This macro can be used several times.</td></tr><tr><td>PHP_PREAD_TEST</td><td>PHP_PREAD_TEST</td><td></td></tr><tr><td>PHP_PROG_AWK</td><td>PHP_PROG_AWK</td><td>Some vendors force mawk before gawk; mawk is broken so we don't like that</td></tr><tr><td>PHP_PROG_BISON</td><td>PHP_PROG_BISON</td><td>Search for bison and check it's version</td></tr><tr><td>PHP_PROG_LEX</td><td>PHP_PROG_LEX</td><td>Search for (f)lex and check it's version</td></tr><tr><td>PHP_PROG_RE2C</td><td>PHP_PROG_RE2C</td><td>Search for the re2c binary and check the version</td></tr><tr><td>PHP_PROG_SENDMAIL</td><td>PHP_PROG_SENDMAIL</td><td>Search for the sendmail binary</td></tr><tr><td>PHP_PWRITE_TEST</td><td>PHP_PWRITE_TEST</td><td></td></tr><tr><td>PHP_READDIR_R_TYPE</td><td>PHP_READDIR_R_TYPE</td><td></td></tr><tr><td>PHP_REAL_ARG_ENABLE</td><td>PHP_REAL_ARG_ENABLE</td><td>internal</td></tr><tr><td>PHP_REAL_ARG_WITH</td><td>PHP_REAL_ARG_WITH</td><td>internal</td></tr><tr><td>PHP_REMOVE_USR_LIB</td><td>PHP_REMOVE_USR_LIB(NAME)</td><td>Removes all -L/usr/$PHP_LIBDIR entries from variable NAME</td></tr><tr><td>PHP_REQUIRE_CXX</td><td>PHP_REQUIRE_CXX</td><td></td></tr><tr><td>PHP_RUNPATH_SWITCH</td><td>PHP_RUNPATH_SWITCH</td><td>Checks for -R, etc. switch</td></tr><tr><td>PHP_RUN_ONCE</td><td>PHP_RUN_ONCE(namespace, variable, code)</td><td>execute code, if variable is not set in namespace</td></tr><tr><td>PHP_SELECT_SAPI</td><td>PHP_SELECT_SAPI(name, type[, sources [, extra-cflags [, build-target]]])</td><td>Selects the SAPI name and type (static, shared, bundle, program) and optionally also the source-files for the SAPI-specific objects.</td></tr><tr><td>PHP_SETUP_ICONV</td><td></td><td>PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]])
Common setup macro for iconv</td></tr><tr><td>PHP_SETUP_ICU</td><td>PHP_SETUP_ICU([shared-add])</td><td>Common setup macro for ICU</td></tr><tr><td>PHP_SETUP_KERBEROS</td><td>PHP_SETUP_KERBEROS(shared-add [, action-found [, action-not-found]])</td><td>Common setup macro for kerberos</td></tr><tr><td>PHP_SETUP_LIBXML</td><td></td><td>PHP_SETUP_LIBXML(shared-add [, action-found [, action-not-found]])
Common setup macro for libxml</td></tr><tr><td>PHP_SETUP_OPENSSL</td><td></td><td>PHP_SETUP_OPENSSL(shared-add [, action-found [, action-not-found]])
Common setup macro for openssl</td></tr><tr><td>PHP_SET_LIBTOOL_VARIABLE</td><td>PHP_SET_LIBTOOL_VARIABLE(var)</td><td>Set libtool variable</td></tr><tr><td>PHP_SHARED_MODULE</td><td>PHP_SHARED_MODULE(module-name, object-var, build-dir, cxx, zend_ext)</td><td>Basically sets up the link-stage for building module-name from object_var in build-dir.</td></tr><tr><td>PHP_SHLIB_SUFFIX_NAMES</td><td>PHP_SHLIB_SUFFIX_NAMES</td><td>Determines link library suffix SHLIB_SUFFIX_NAME which can be: .so, .sl or .dylib
Determines shared library suffix SHLIB_DL_SUFFIX_NAME suffix can be: .so or .sl</td></tr><tr><td>PHP_SOCKADDR_CHECKS</td><td>PHP_SOCKADDR_CHECKS</td><td></td></tr><tr><td>PHP_SOCKLEN_T</td><td>PHP_SOCKLEN_T</td><td></td></tr><tr><td>PHP_SOLARIS_PIC_WEIRDNESS</td><td>PHP_SOLARIS_PIC_WEIRDNESS</td><td>Solaris requires main code to be position independent in order to let shared objects find symbols. Weird. Ugly.
Must be run after all --with-NN options that let the user choose dynamic extensions, and after the gcc test.</td></tr><tr><td>PHP_STRUCT_FLOCK</td><td>PHP_STRUCT_FLOCK</td><td></td></tr><tr><td>PHP_SUBST</td><td>PHP_SUBST(varname)</td><td>Adds variable with it's value into Makefile, e.g.: CC = gcc</td></tr><tr><td>PHP_SUBST_OLD</td><td>PHP_SUBST_OLD(varname)</td><td>Same as PHP_SUBST() but also substitutes all @VARNAME@ instances in every file passed to AC_OUTPUT()</td></tr><tr><td>PHP_SYS_LFS</td><td>PHP_SYS_LFS</td><td>The problem is that the default compilation flags in Solaris 2.6 won't let programs access large files; you need to tell the compiler that you actually want your programs to work on large files. For more details about this brain damage please see: http://www.sas.com/standards/large.file/x_open.20Mar96.html
Written by Paul Eggert <[email protected]>.</td></tr><tr><td>PHP_TARGET_RDYNAMIC</td><td>PHP_TARGET_RDYNAMIC</td><td>Checks whether -rdynamic is supported by the compiler. This is necessary for some targets to populate the global symbol table. Otherwise, dynamic modules would not be able to resolve PHP-related symbols.
If successful, adds -rdynamic to PHP_LDFLAGS.</td></tr><tr><td>PHP_TEST_BUILD</td><td>PHP_TEST_BUILD(function, action-if-ok, action-if-not-ok [, extra-libs [, extra-source]])</td><td>This macro checks whether build works and given function exists.</td></tr><tr><td>PHP_TEST_WRITE_STDOUT</td><td>PHP_TEST_WRITE_STDOUT</td><td></td></tr><tr><td>PHP_TIME_R_TYPE</td><td>PHP_TIME_R_TYPE</td><td>Check type of reentrant time-related functions Type can be: irix, hpux or POSIX</td></tr><tr><td>PHP_TM_GMTOFF</td><td>PHP_TM_GMTOFF</td><td></td></tr><tr><td>PHP_UTILIZE_RPATHS</td><td>PHP_UTILIZE_RPATHS()</td><td>builds RPATHS/LDFLAGS from PHP_RPATHS</td></tr><tr><td>PHP_WITH_SHARED</td><td>PHP_WITH_SHARED</td><td>Checks whether $withval is "shared" or starts with "shared,XXX" and sets $shared to "yes" or "no", and removes "shared,?" stuff from $withval.</td></tr><tr><td>_PHP_ADD_LIBPATH_GLOBAL</td><td></td><td>internal, don't use</td></tr><tr><td>_PHP_ADD_LIBRARY_SKELETON</td><td></td><td>internal, don't use</td></tr><tr><td>_PHP_ASSIGN_BUILD_VARS</td><td>_PHP_ASSIGN_BUILD_VARS(type)</td><td>internal, don't use</td></tr><tr><td>_PHP_CHECK_SIZEOF</td><td>_PHP_CHECK_SIZEOF(type, cross-value, extra-headers [, found-action [, not-found-action]])</td><td></td></tr><tr><td>_PHP_DEF_HAVE_FILE</td><td></td><td>Internal helper macros
_PHP_DEF_HAVE_FILE(what, filename)</td></tr><tr><td>_PHP_X_ADD_LIBRARY</td><td></td><td>internal, don't use</td></tr></table>
Here is an example for "config.m4" which i often use when developing php extension:
PHP_ARG_ENABLE(extname, whether to enable extname support,
[ --enable-extname Enable extname support])
if test "$PHP_EXTNAME" != "no"; then
PHP_REQUIRE_CXX() dnl If you need c++.please add this.
PHP_ADD_INCLUDE(./include) dnl Extra include file
PHP_ADD_LIBRARY_WITH_PATH(staticlib,"./lib", EXTRA_LDFLAGS) dnl static library needed in the extension
PHP_ADD_LIBRARY_WITH_PATH(dynamiclib, ./lib, EXTNAME_SHARED_LIBADD) dnl dynamic libarary needed in the extension
PHP_NEW_EXTENSION(extname, extname.cpp, $ext_shared)
fi
Actually the example extension generated by 'ext_skel' script, also shows usage of config.m4 file. You may want to read it as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With