source: trunk/config.w32 @ 30

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

use mkstructinfo no matter if test is enabled, but ignore the awk error

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