diff options
author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:21 -0400 |
---|---|---|
committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:21 -0400 |
commit | 0e920280a2e04b110827bb766b9f29e3d581c4ee (patch) | |
tree | 8f2125f3d00fe3089e3b94adb06f04479ee15f2a /README.UNIX-BUILD-SYSTEM | |
download | php-0e920280a2e04b110827bb766b9f29e3d581c4ee.tar.gz |
Imported Upstream version 5.0.4upstream/5.0.4
Diffstat (limited to 'README.UNIX-BUILD-SYSTEM')
-rw-r--r-- | README.UNIX-BUILD-SYSTEM | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/README.UNIX-BUILD-SYSTEM b/README.UNIX-BUILD-SYSTEM new file mode 100644 index 000000000..9b49cb8bc --- /dev/null +++ b/README.UNIX-BUILD-SYSTEM @@ -0,0 +1,123 @@ +PHP Build System V5 Overview + +- supports Makefile.ins during transition phase +- not-really-portable Makefile includes have been eliminated +- supports separate build directories without VPATH by using + explicit rules only +- does not waste disk-space/CPU-time for building temporary libraries + => especially noticeable on slower systems +- slow recursive make replaced with one global Makefile +- eases integration of proper dependencies +- adds PHP_DEFINE(what[, value]) which creates a single include-file + per what. This will allow more fine-grained dependencies. +- abandoning the "one library per directory" concept +- improved integration of the CLI +- several new targets + build-modules: builds and copies dynamic modules into modules/ + install-cli: installs the CLI only, so that the install-sapi + target does only what its name says +- finally abandoned automake (still requires aclocal at this time) +- changed some configure-time constructs to run at buildconf-time +- upgraded shtool to 1.5.4 +- removed $(moduledir) (use EXTENSION_DIR) + +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 acinclude.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_php5.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 acinclude.m4. |