XCache is a fast, stable PHP opcode cacher that has been proven and is now running on production servers under high load. https://xcache.lighttpd.net/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
5.0 KiB

// vim:ft=javascript
ARG_ENABLE("xcache", "Include XCache support", "yes,shared");
if (PHP_XCACHE != "no") {
EXTENSION("xcache", "xcache.c", null, "/I " + configure_module_dirname);
// {{{ check for xcache-constant
ARG_ENABLE("xcache-constant", "XCache: Handle new constants made by php compiler (e.g.: for __halt_compiler)", "yes");
if (PHP_XCACHE_CONSTANT != "no") {
AC_DEFINE("HAVE_XCACHE_CONSTANT", 1, "Define to enable XCache handling of compile time constants");
}
// }}}
ADD_SOURCES(configure_module_dirname + "/util", " \
xc_stack.c \
xc_trace.c \
", "xcache");
ADD_SOURCES(configure_module_dirname + "/xcache", " \
xc_allocator.c \
xc_allocator_bestfit.c \
xc_compatibility.c \
xc_const_string.c \
xc_extension.c \
xc_ini.c \
xc_mutex.c \
xc_opcode_spec.c \
xc_processor.c \
xc_sandbox.c \
xc_shm.c \
xc_shm_mmap.c \
xc_utils.c \
", "xcache");
ADD_SOURCES(configure_module_dirname + "/mod_cacher", " \
xc_cacher.c \
", "xcache");
// {{{ add sources on enabled
ARG_ENABLE("xcache-optimizer", "(N/A)", "no");
ARG_ENABLE("xcache-coverager", "Enable code coverage dumper, useful for testing php scripts", "no");
ARG_ENABLE("xcache-assembler", "(N/A)", "no");
ARG_ENABLE("xcache-disassembler", "Enable opcode to php variable dumper, not for server usage", "no");
ARG_ENABLE("xcache-encoder", "(N/A)", "no");
ARG_ENABLE("xcache-decoder", "(N/A)", "no");
var XCACHE_MODULES = "cacher";
AC_DEFINE("HAVE_XCACHE_CACHER", 1, "Define for XCache: cacher")
var options = ["optimizer",
"coverager",
"assembler", "disassembler",
"encoder", "decoder"];
for (var i in options) {
var name = options[i];
var uname = name.toUpperCase();
var withval = eval("PHP_XCACHE_" + uname);
if (withval != "no") {
ADD_SOURCES(configure_module_dirname + "/mod_" + name, "xc_" + name + ".c", "xcache");
XCACHE_MODULES += " " + name;
STDOUT.WriteLine("Enabling XCache Module: " + name);
AC_DEFINE("HAVE_XCACHE_" + uname, 1, "Define for XCache: " + name)
}
}
AC_DEFINE("XCACHE_MODULES", XCACHE_MODULES);
// }}}
// {{{ check for programs needed
var apps = ["m4", "grep", "sed"];
for (var i in apps) {
if (!PATH_PROG(apps[i])) {
ERROR(apps[i] + " is currently required to build XCache");
}
}
DEFINE("XCACHE_BACKTICK", "`")
PATH_PROG("gawk", null, "XCACHE_AWK") || PATH_PROG("awk", null, "XCACHE_AWK");
// the cygwin indent is known broken on our output
var indent = false; // PATH_PROG("indent");
if (indent) {
indent += " -kr --use-tabs --tab-size 4 -sob -nce";
}
else {
indent = PATH_PROG("cat");
if (!indent) {
indent = '';
}
}
DEFINE("XCACHE_INDENT", indent);
// }}}
// {{{ check for xcache-test
ARG_ENABLE("xcache-test", "XCache: Enable self test - FOR DEVELOPERS ONLY!!", "no");
if (PHP_XCACHE_TEST != "no") {
ADD_FLAG("XCACHE_ENABLE_TEST", "-DXCACHE_ENABLE_TEST");
ADD_SOURCES(configure_module_dirname + "/xcache", "xc_malloc.c", "xcache");
AC_DEFINE("HAVE_XCACHE_TEST", 1, "Define to enable XCache self test");
}
else {
ADD_FLAG("XCACHE_ENABLE_TEST", "");
}
// }}}
// {{{ check for xcache-test
ARG_ENABLE("xcache-dprint", "XCache: Enable self debug print functions - FOR DEVELOPERS ONLY!!", "no");
if (PHP_XCACHE_DPRINT != "no") {
AC_DEFINE("HAVE_XCACHE_DPRINT", 1, "Define to enable XCache debug print functions");
}
// }}}
// {{{ get ccrule
var srcdir = configure_module_dirname;
// it's a bit harder to get builddir
var mfofile = "Makefile.objects";
MFO.Close();
var mfo = file_get_contents(mfofile);
mfo.match(/(.*)\\xcache.obj:/);
var builddir = RegExp.$1;
mfo.match(/(.*\$\(CC\).* )\/c.*\\xcache.c.*/i);
var ccrule = RegExp.$1;
MFO = FSO.OpenTextFile(mfofile, 8);
mfo = null;
// }}}
// {{{ add make fragments
var makefileFrag = srcdir + "\\Makefile.frag";
var makefileFragDeps = srcdir + "\\Makefile.frag.deps";
STDOUT.WriteLine("Adding Makefile.frag: " + makefileFrag);
STDOUT.WriteLine("Adding Makefile.frag.deps: " + makefileFragDeps);
var frag = file_get_contents(makefileFrag) + "\r\n" + file_get_contents(makefileFragDeps);
frag = frag.replace(/\$\(srcdir\)\//g, srcdir + '\\');
frag = frag.replace(/\$\(srcdir\)/g, srcdir);
frag = frag.replace(/\$\(builddir\)\//g, builddir + '\\');
frag = frag.replace(/\$\(builddir\)/g, builddir);
frag = frag.replace(/processor\//g, "processor\\");
frag = frag.replace(/\.lo:/g, ".obj:");
frag = frag.replace(/.*\$\(CC\).* -E (.*) -o (.*)/g, ccrule + " /E $1 > $2");
frag = frag.replace(/ -o /g, " /Fo");
frag = frag.replace(/cp /g, "copy ");
frag = frag.replace(/mv /g, "move ");
frag = frag.replace(/ \|\| /g, "\r\n\tif errorlevel 1 ");
frag = frag.replace(/ && /g, "\r\n\tif not errorlevel 1 ");
if (indent == '') {
frag = frag.replace(/\| *\$\(XCACHE_INDENT\)/g, '');
frag = frag.replace(/\$\(XCACHE_INDENT\) *< */g, 'type ');
}
MFO.WriteLine(frag);
ADD_FLAG("CFLAGS_XCACHE", "/I " + builddir);
/// }}}
XCACHE_PROC_SOURCES=glob(srcdir + "\\processor\\*.m4").join(' ');
ADD_FLAG("XCACHE_PROC_SOURCES", XCACHE_PROC_SOURCES);
}