source: trunk/config.w32 @ 1026

Last change on this file since 1026 was 1026, checked in by moo, 21 months ago

refactor: split extension init to sub module. TODO: compatibility regression

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