summaryrefslogtreecommitdiff
path: root/config.w32
blob: 39cb88668c9220ab357baa9c3bf88c932085efdb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// vim:ft=javascript


ARG_ENABLE("xcache", "XCache Extension", "no");

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_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",    "Code coverage dumper, useful for testing php scripts", "no");
	ARG_ENABLE("xcache-assembler",    "(N/A)", "no");
	ARG_ENABLE("xcache-disassembler", "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");
		}
	}
	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: 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: 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 ");
	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 = [];
	XCACHE_PROC_SOURCES.concat(glob(srcdir + "\\processor\\*.m4"));
	XCACHE_PROC_SOURCES.concat(glob(srcdir + "\\processor\\*.h"));
	XCACHE_PROC_SOURCES = XCACHE_PROC_SOURCES.join(' ');
	ADD_FLAG("XCACHE_PROC_SOURCES", XCACHE_PROC_SOURCES);
}