File:
[ELWIX - Embedded LightWeight unIX -] /
embedaddon /
php /
README.UNIX-BUILD-SYSTEM
Revision
1.1.1.1 (vendor branch):
download - view:
text,
annotated -
select for diffs -
revision graph
Tue Feb 21 23:47:51 2012 UTC (12 years, 10 months ago) by
misho
Branches:
php,
MAIN
CVS tags:
v5_4_3elwix,
v5_4_29p0,
v5_4_29,
v5_4_20p0,
v5_4_20,
v5_4_17p0,
v5_4_17,
v5_3_10,
HEAD
php
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>