source: trunk/config.w32

Last change on this file was 1555, checked in by moo, 3 weeks ago

separate plain c code to .h files

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// vim:ft=javascript
2
3
4ARG_ENABLE("xcache", "XCache Extension", "no");
5
6if (PHP_XCACHE != "no") {
7    EXTENSION("xcache", "xcache.c", null, "/I " + configure_module_dirname);
8    // {{{ check for xcache-constant
9    ARG_ENABLE("xcache-constant", "XCache: Handle new constants made by php compiler (e.g.: for __halt_compiler)", "yes");
10    if (PHP_XCACHE_CONSTANT != "no") {
11        AC_DEFINE("HAVE_XCACHE_CONSTANT", 1, "Define to enable XCache handling of compile time constants");
12    }
13    // }}}
14
15    ADD_SOURCES(configure_module_dirname + "/util", " \
16xc_trace.c \
17", "xcache");
18
19    ADD_SOURCES(configure_module_dirname + "/xcache", " \
20xc_allocator.c \
21xc_allocator_bestfit.c \
22xc_compatibility.c \
23xc_const_string.c \
24xc_extension.c \
25xc_ini.c \
26xc_mutex.c \
27xc_opcode_spec.c \
28xc_processor.c \
29xc_sandbox.c \
30xc_shm.c \
31xc_shm_mmap.c \
32xc_utils.c \
33", "xcache");
34    ADD_SOURCES(configure_module_dirname + "/mod_cacher", " \
35xc_cacher.c \
36", "xcache");
37
38    // {{{ add sources on enabled
39    ARG_ENABLE("xcache-optimizer",    "(N/A)", "no");
40    ARG_ENABLE("xcache-coverager",    "Code coverage dumper, useful for testing php scripts", "no");
41    ARG_ENABLE("xcache-assembler",    "(N/A)", "no");
42    ARG_ENABLE("xcache-disassembler", "Opcode to php variable dumper, not for server usage", "no");
43    ARG_ENABLE("xcache-encoder",      "(N/A)", "no");
44    ARG_ENABLE("xcache-decoder",      "(N/A)", "no");
45
46    var XCACHE_MODULES = "cacher";
47    AC_DEFINE("HAVE_XCACHE_CACHER", 1, "Define for XCache: cacher")
48    var options = ["optimizer",
49                   "coverager",
50                   "assembler", "disassembler",
51                   "encoder", "decoder"];
52    for (var i in options) {
53        var name = options[i];
54        var uname = name.toUpperCase();
55        var withval = eval("PHP_XCACHE_" + uname);
56        if (withval != "no") {
57            ADD_SOURCES(configure_module_dirname + "/mod_" + name, "xc_" + name + ".c", "xcache");
58            XCACHE_MODULES += " " + name;
59            STDOUT.WriteLine("Enabling XCache Module: " + name);
60            AC_DEFINE("HAVE_XCACHE_" + uname, 1, "Define for XCache: " + name)
61        }
62    }
63    AC_DEFINE("XCACHE_MODULES", XCACHE_MODULES);
64    // }}}
65    // {{{ check for programs needed
66    var apps = ["m4", "grep", "sed"];
67    for (var i in apps) {
68        if (!PATH_PROG(apps[i])) {
69            ERROR(apps[i] + " is currently required to build XCache");
70        }
71    }
72    PATH_PROG("gawk", null, "XCACHE_AWK") || PATH_PROG("awk", null, "XCACHE_AWK");
73
74    // the cygwin indent is known broken on our output
75    var indent = false; // PATH_PROG("indent");
76    if (indent) {
77        indent += " -kr --use-tabs --tab-size 4 -sob -nce";
78    }
79    else {
80        indent = PATH_PROG("cat");
81        if (!indent) {
82            indent = '';
83        }
84    }
85    DEFINE("XCACHE_INDENT", indent);
86    // }}}
87    // {{{ check for xcache-test
88    ARG_ENABLE("xcache-test", "XCache: Self test - FOR DEVELOPERS ONLY!!", "no");
89    if (PHP_XCACHE_TEST != "no") {
90        ADD_FLAG("XCACHE_ENABLE_TEST", "-DXCACHE_ENABLE_TEST");
91        ADD_SOURCES(configure_module_dirname + "/xcache", "xc_malloc.c", "xcache");
92        AC_DEFINE("HAVE_XCACHE_TEST", 1, "Define to enable XCache self test");
93    }
94    else {
95        ADD_FLAG("XCACHE_ENABLE_TEST", "");
96    }
97    // }}}
98    // {{{ check for xcache-test
99    ARG_ENABLE("xcache-dprint", "XCache: Debug print functions - FOR DEVELOPERS ONLY!!", "no");
100    if (PHP_XCACHE_DPRINT != "no") {
101        AC_DEFINE("HAVE_XCACHE_DPRINT", 1, "Define to enable XCache debug print functions");
102    }
103    // }}}
104    // {{{ get ccrule
105    var srcdir = configure_module_dirname;
106    // it's a bit harder to get builddir
107    var mfofile = "Makefile.objects";
108    MFO.Close();
109
110    var mfo = file_get_contents(mfofile);
111    mfo.match(/(.*)\\xcache.obj:/);
112    var builddir = RegExp.$1;
113    mfo.match(/(.*\$\(CC\).* )\/c.*\\xcache.c.*/i);
114    var ccrule = RegExp.$1;
115
116    MFO = FSO.OpenTextFile(mfofile, 8);
117    mfo = null;
118    // }}}
119    // {{{ add make fragments
120    var makefileFrag = srcdir + "\\Makefile.frag";
121    var makefileFragDeps = srcdir + "\\Makefile.frag.deps";
122    STDOUT.WriteLine("Adding Makefile.frag: " + makefileFrag);
123    STDOUT.WriteLine("Adding Makefile.frag.deps: " + makefileFragDeps);
124    var frag = file_get_contents(makefileFrag) + "\r\n" + file_get_contents(makefileFragDeps);
125    frag = frag.replace(/\$\(srcdir\)\//g,   srcdir + '\\');
126    frag = frag.replace(/\$\(srcdir\)/g,     srcdir);
127    frag = frag.replace(/\$\(builddir\)\//g, builddir + '\\');
128    frag = frag.replace(/\$\(builddir\)/g,   builddir);
129    frag = frag.replace(/processor\//g,      "processor\\");
130    frag = frag.replace(/\.lo:/g, ".obj:");
131    frag = frag.replace(/.*\$\(CC\).* -E (.*) -o (.*)/g, ccrule + " /E $1 > $2");
132    frag = frag.replace(/ -o /g, " /Fo");
133    frag = frag.replace(/cp /g, "copy ");
134    frag = frag.replace(/mv /g, "move ");
135    if (indent == '') {
136        frag = frag.replace(/\| *\$\(XCACHE_INDENT\)/g, '');
137        frag = frag.replace(/\$\(XCACHE_INDENT\) *< */g, 'type ');
138    }
139    MFO.WriteLine(frag);
140    ADD_FLAG("CFLAGS_XCACHE", "/I " + builddir);
141    /// }}}
142    XCACHE_PROC_SOURCES = [];
143    XCACHE_PROC_SOURCES.concat(glob(srcdir + "\\processor\\*.m4"));
144    XCACHE_PROC_SOURCES.concat(glob(srcdir + "\\processor\\*.h"));
145    XCACHE_PROC_SOURCES = XCACHE_PROC_SOURCES.join(' ');
146    ADD_FLAG("XCACHE_PROC_SOURCES", XCACHE_PROC_SOURCES);
147}
Note: See TracBrowser for help on using the repository browser.