source: trunk/config.w32 @ 95

Last change on this file since 95 was 95, checked in by moo, 8 years ago

fixed #20, default: --enable-xcache-constant=yes

File size: 4.7 KB
Line 
1// vim:ft=javascript
2
3
4ARG_ENABLE("xcache", "Include XCache support", "yes,shared");
5
6if (PHP_XCACHE != "no") {
7    // {{{ check for xcache-constant
8    ARG_ENABLE("xcache-constant", "XCache: Handle new constants made by php compiler (e.g.: for __halt_compiler)", "yes");
9    if (PHP_XCACHE_CONSTANT != "no") {
10        AC_DEFINE("HAVE_XCACHE_CONSTANT", 1, "Define to enable XCache handling of compile time constants");
11    }
12    // }}}
13
14    var xcache_sources = "processor.c \
15                          xcache.c \
16                          mmap.c \
17                          mem.c \
18                          const_string.c \
19                          opcode_spec.c \
20                          stack.c \
21                          utils.c \
22                          lock.c \
23                          ";
24    // {{{ add sources on enabled
25    ARG_ENABLE("xcache-optimizer",    "(N/A)", "no");
26    ARG_ENABLE("xcache-coverager",    "Enable code coverage dumper, useful for testing php scripts", "no");
27    ARG_ENABLE("xcache-assembler",    "(N/A)", "no");
28    ARG_ENABLE("xcache-disassembler", "Enable opcode to php variable dumper, NOT for production server", "no");
29    ARG_ENABLE("xcache-encoder",      "(N/A)", "no");
30    ARG_ENABLE("xcache-decoder",      "(N/A)", "no");
31
32    var XCACHE_MODULES = "cacher";
33    var options = ["optimizer",
34                   "coverager",
35                   "assembler", "disassembler",
36                   "encoder", "decoder"];
37    for (var i in options) {
38        var name = options[i];
39        var uname = name.toUpperCase();
40        var withval = eval("PHP_XCACHE_" + uname);
41        if (withval != "no") {
42            xcache_sources += " " + name + ".c";
43            XCACHE_MODULES += " " + name;
44            STDOUT.WriteLine("Enabling XCache Module: " + name);
45            AC_DEFINE("HAVE_XCACHE_" + uname, 1, "Define for XCache: " + name)
46        }
47    }
48    AC_DEFINE("XCACHE_MODULES", XCACHE_MODULES);
49    // }}}
50    // {{{ check for programs needed
51    var apps = ["m4", "grep", "sed"];
52    for (var i in apps) {
53        if (!PATH_PROG(apps[i])) {
54            ERROR(apps[i] + " is currently required to build XCache");
55        }
56    }
57    PATH_PROG("gawk", null, "AWK") || PATH_PROG("awk", null, "AWK");
58
59    // the cygwin indent is known broken on our output
60    var indent = false; // PATH_PROG("indent");
61    if (indent) {
62        indent += " -kr --use-tabs --tab-size 4 -sob -nce";
63    }
64    else {
65        indent = PATH_PROG("cat");
66        if (!indent) {
67            indent = '';
68        }
69    }
70    DEFINE("XCACHE_INDENT", indent);
71    // }}}
72    // {{{ create extension
73    EXTENSION("xcache", xcache_sources);
74    var srcdir = configure_module_dirname;
75    // it's a bit harder to get builddir
76    var mfofile = "Makefile.objects";
77    MFO.Close();
78
79    var mfo = file_get_contents(mfofile);
80    mfo.match(/(.*\\xcache)\\xcache.obj/);
81    var builddir = RegExp.$1;
82    mfo.match(/(.*\$\(CC\).* )\/c.*\\xcache\\xcache.c.*/i);
83    var ccrule = RegExp.$1;
84
85    MFO = FSO.OpenTextFile(mfofile, 8);
86    mfo = null;
87    // }}}
88    // {{{ add make fragments
89    var file = srcdir + "\\Makefile.frag";
90    STDOUT.WriteLine("Adding Makefile.frag: " + file);
91    var frag = file_get_contents(file);
92    frag = frag.replace(/\$\(srcdir\)\//g,   srcdir + '\\');
93    frag = frag.replace(/\$\(srcdir\)/g,     srcdir);
94    frag = frag.replace(/\$\(builddir\)\//g, builddir + '\\');
95    frag = frag.replace(/\$\(builddir\)/g,   builddir);
96    frag = frag.replace(/processor\//g,      "processor\\");
97    frag = frag.replace(/\.lo:/g, ".obj:");
98    frag = frag.replace(/.*\$\(CC\).* -E (.*) -o (.*)/, ccrule + " /E $1 > $2");
99    frag = frag.replace(/ -o /g, " /Fo");
100    frag = frag.replace(/mv -f /g, "move ");
101    frag = frag.replace(/ \|\| /g, "\r\n\tif errorlevel 1 ");
102    frag = frag.replace(/ && /g, "\r\n\tif not errorlevel 1 ");
103    if (indent == '') {
104        frag = frag.replace(/\| +\$\(XCACHE_INDENT\)/, '');
105        frag = frag.replace(/\$\(XCACHE_INDENT\) < /, 'type ');
106    }
107    MFO.WriteLine(frag);
108    ADD_FLAG("CFLAGS_XCACHE", "/I " + builddir);
109    /// }}}
110    // {{{ check for xcache-test
111    ARG_ENABLE("xcache-test", "XCache: Enable self test - FOR DEVELOPERS ONLY!!", "no");
112    if (PHP_XCACHE_TEST != "no") {
113        ADD_FLAG("XCACHE_ENABLE_TEST", "-DXCACHE_ENABLE_TEST");
114        AC_DEFINE("HAVE_XCACHE_TEST", 1, "Define to enable XCache self test");
115    }
116    else {
117        ADD_FLAG("XCACHE_ENABLE_TEST", "");
118    }
119
120    XCACHE_PROC_SOURCES=glob(srcdir + "\\processor\\*.m4").join(' ');
121    ADD_FLAG("XCACHE_PROC_SOURCES", XCACHE_PROC_SOURCES);
122    // }}}
123    // {{{ check for opcode_spec_def.h
124    STDOUT.Write("Checking if you have opcode_spec_def.h for XCache ... ");
125    var file = srcdir + "\\opcode_spec_def.h";
126    if (FSO.FileExists(file)) {
127        STDOUT.WriteLine("yes");
128        AC_DEFINE("HAVE_XCACHE_OPCODE_SPEC_DEF", 1, "Define if you have opcode_spec_def.h for XCache");
129    }
130    else {
131        STDOUT.WriteLine("no");
132
133        // check for features depend on opcode_spec_def.h
134        var xcache_require_opcode_spec_def = function(withval, name) {
135            if (withval != "no") {
136                ERROR(file + " is required to enable XCache " + name);
137            }
138        }
139        xcache_require_opcode_spec_def(PHP_XCACHE_DISASSEMBLER, "disassembler");
140    }
141    // }}}
142}
Note: See TracBrowser for help on using the repository browser.