Annotation of embedaddon/php/README.UNIX-BUILD-SYSTEM, revision 1.1
1.1 ! misho 1: PHP Build System V5 Overview
! 2:
! 3: - supports Makefile.ins during transition phase
! 4: - not-really-portable Makefile includes have been eliminated
! 5: - supports separate build directories without VPATH by using
! 6: explicit rules only
! 7: - does not waste disk-space/CPU-time for building temporary libraries
! 8: => especially noticeable on slower systems
! 9: - slow recursive make replaced with one global Makefile
! 10: - eases integration of proper dependencies
! 11: - adds PHP_DEFINE(what[, value]) which creates a single include-file
! 12: per what. This will allow more fine-grained dependencies.
! 13: - abandoning the "one library per directory" concept
! 14: - improved integration of the CLI
! 15: - several new targets
! 16: build-modules: builds and copies dynamic modules into modules/
! 17: install-cli: installs the CLI only, so that the install-sapi
! 18: target does only what its name says
! 19: - finally abandoned automake (still requires aclocal at this time)
! 20: - changed some configure-time constructs to run at buildconf-time
! 21: - upgraded shtool to 1.5.4
! 22: - removed $(moduledir) (use EXTENSION_DIR)
! 23:
! 24: The Reason For a New System
! 25:
! 26: It became more and more apparent that there is a severe need
! 27: for addressing the portability concerns and improving the chance
! 28: that your build is correct (how often have you been told to
! 29: "make clean"? When this is done, you won't need to anymore).
! 30:
! 31:
! 32: If You Build PHP on a Unix System
! 33:
! 34:
! 35: You, as a user of PHP, will notice no changes. Of course, the build
! 36: system will be faster, look better and work smarter.
! 37:
! 38:
! 39:
! 40: If You Are Developing PHP
! 41:
! 42:
! 43:
! 44:
! 45: Extension developers:
! 46:
! 47: Makefile.ins are abandoned. The files which are to be compiled
! 48: are specified in the config.m4 now using the following macro:
! 49:
! 50: PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)
! 51:
! 52: E.g. this enables the extension foo which consists of three source-code
! 53: modules, two in C and one in C++. And, depending on the user's wishes,
! 54: the extension will even be built as a dynamic module.
! 55:
! 56: The full syntax:
! 57:
! 58: PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])
! 59:
! 60: Please have a look at acinclude.m4 for the gory details and meanings
! 61: of the other parameters.
! 62:
! 63: And that's basically it for the extension side.
! 64:
! 65: If you previously built sub-libraries for this module, add
! 66: the source-code files here as well. If you need to specify
! 67: separate include directories, do it this way:
! 68:
! 69: PHP_NEW_EXTENSION(foo, foo.c mylib/bar.c mylib/gregor.c,,,-I@ext_srcdir@/lib)
! 70:
! 71: E.g. this builds the three files which are located relative to the
! 72: extension source directory and compiles all three files with the
! 73: special include directive (@ext_srcdir@ is automatically replaced).
! 74:
! 75: Now, you need to tell the build system that you want to build files
! 76: in a directory called $ext_builddir/lib:
! 77:
! 78: PHP_ADD_BUILD_DIR($ext_builddir/lib)
! 79:
! 80: Make sure to call this after PHP_NEW_EXTENSION, because $ext_builddir
! 81: is only set by the latter.
! 82:
! 83: If you have a complex extension, you might to need add special
! 84: Make rules. You can do this by calling PHP_ADD_MAKEFILE_FRAGMENT
! 85: in your config.m4 after PHP_NEW_EXTENSION.
! 86:
! 87: This will read a file in the source-dir of your extension called
! 88: Makefile.frag. In this file, $(builddir) and $(srcdir) will be
! 89: replaced by the values which are correct for your extension
! 90: and which are again determined by the PHP_NEW_EXTENSION macro.
! 91:
! 92: Make sure to prefix *all* relative paths correctly with either
! 93: $(builddir) or $(srcdir). Because the build system does not
! 94: change the working directory anymore, we must use either
! 95: absolute paths or relative ones to the top build-directory.
! 96: Correct prefixing ensures that.
! 97:
! 98:
! 99: SAPI developers:
! 100:
! 101: Instead of using PHP_SAPI=foo/PHP_BUILD_XYZ, you will need to type
! 102:
! 103: PHP_SELECT_SAPI(name, type, sources.c)
! 104:
! 105: I.e. specify the source-code files as above and also pass the
! 106: information regarding how PHP is supposed to be built (shared
! 107: module, program, etc).
! 108:
! 109: For example for APXS:
! 110:
! 111: PHP_SELECT_SAPI(apache, shared, sapi_apache.c mod_php5.c php_apache.c)
! 112:
! 113:
! 114:
! 115: General info
! 116:
! 117: The foundation for the new system is the flexible handling of
! 118: sources and their contexts. With the help of macros you
! 119: can define special flags for each source-file, where it is
! 120: located, in which target context it can work, etc.
! 121:
! 122: Have a look at the well documented macros
! 123: PHP_ADD_SOURCES(_X) in acinclude.m4.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>