"Fossies" - the Fresh Open Source Software Archive

Member "php-7.4.1/docs/unix-build-system.md" (17 Dec 2019, 4322 Bytes) of package /linux/www/php-7.4.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format (assuming markdown format). Alternatively you can here view or download the uninterpreted source code file. A member file download can also be achieved by clicking within a package contents listing on the according byte size field.

PHP build system V5 overview

The reason for a new system

It became more and more apparent that there is a severe need for addressing the portability concerns and improving the chance that your build is correct (how often have you been told to make clean? When this is done, you won’t need to anymore).

If you build PHP on a Unix system

You, as a user of PHP, will notice no changes. Of course, the build system will be faster, look better and work smarter.

If you are developing PHP

Extension developers

Makefile.ins are abandoned. The files which are to be compiled are specified in the config.m4 now using the following macro:

PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)

E.g. this enables the extension foo which consists of three source-code modules, two in C and one in C++. And, depending on the user’s wishes, the extension will even be built as a dynamic module.

The full syntax:

PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])

Please have a look at build/php.m4 for the gory details and meanings of the other parameters.

And that’s basically it for the extension side.

If you previously built sub-libraries for this module, add the source-code files here as well. If you need to specify separate include directories, do it this way:

PHP_NEW_EXTENSION(foo, foo.c mylib/bar.c mylib/gregor.c,,,-I@ext_srcdir@/lib)

E.g. this builds the three files which are located relative to the extension source directory and compiles all three files with the special include directive (@ext_srcdir@ is automatically replaced).

Now, you need to tell the build system that you want to build files in a directory called $ext_builddir/lib:

PHP_ADD_BUILD_DIR($ext_builddir/lib)

Make sure to call this after PHP_NEW_EXTENSION, because $ext_builddir is only set by the latter.

If you have a complex extension, you might to need add special Make rules. You can do this by calling PHP_ADD_MAKEFILE_FRAGMENT in your config.m4 after PHP_NEW_EXTENSION.

This will read a file in the source-dir of your extension called Makefile.frag. In this file, $(builddir) and $(srcdir) will be replaced by the values which are correct for your extension and which are again determined by the PHP_NEW_EXTENSION macro.

Make sure to prefix all relative paths correctly with either $(builddir) or $(srcdir). Because the build system does not change the working directory anymore, we must use either absolute paths or relative ones to the top build-directory. Correct prefixing ensures that.

SAPI developers

Instead of using PHP_SAPI=foo/PHP_BUILD_XYZ, you will need to type

PHP_SELECT_SAPI(name, type, sources.c)

I.e. specify the source-code files as above and also pass the information regarding how PHP is supposed to be built (shared module, program, etc).

For example for APXS:

PHP_SELECT_SAPI(apache, shared, sapi_apache.c mod_php7.c php_apache.c)

General info

The foundation for the new system is the flexible handling of sources and their contexts. With the help of macros you can define special flags for each source-file, where it is located, in which target context it can work, etc.

Have a look at the well documented macros PHP_ADD_SOURCES(_X) in build/php.m4.