source: svn/trunk/config.w32 @ 30

Last change on this file since 30 was 30, checked in by Xuefer, 11 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.