summaryrefslogtreecommitdiff
path: root/win32/build/projectgen.js
diff options
context:
space:
mode:
authorSteph Fox <sfox@php.net>2008-07-09 08:15:46 +0000
committerSteph Fox <sfox@php.net>2008-07-09 08:15:46 +0000
commit208d8514441b07ddfb7b81dfb9e4abd177d72664 (patch)
treee8d40bbbd788d70ddac2e9fdd3a51512d687f02a /win32/build/projectgen.js
parent767eaa7a4ec2d264386c8154463f49f49961f10c (diff)
downloadphp-git-208d8514441b07ddfb7b81dfb9e4abd177d72664.tar.gz
- Embryonic project file generation. Use buildconf --add-project-files and hopefully it'll work.
- Please read the README before complaining. @Stas, Rob - please test.
Diffstat (limited to 'win32/build/projectgen.js')
-rw-r--r--win32/build/projectgen.js185
1 files changed, 185 insertions, 0 deletions
diff --git a/win32/build/projectgen.js b/win32/build/projectgen.js
new file mode 100644
index 0000000000..4dcb082d48
--- /dev/null
+++ b/win32/build/projectgen.js
@@ -0,0 +1,185 @@
+function write_src_file(fname, arr)
+{
+ var src = FSO.CreateTextFile(fname, true);
+
+ for (i = 0; i < arr.length; i++) {
+ if (arr[i].length > 1) {
+ src.WriteLine("# Begin Source File");
+ src.WriteLine("SOURCE=" + arr[i]);
+ src.WriteLine("# End Source File");
+ src.WriteBlankLines(1);
+ }
+ }
+ src.Close();
+ return;
+}
+
+function copy_dsp_files() {
+ var tmp = FSO.GetFolder("tmp");
+ var core = "TSRM Zend main streams win32 standard";
+ var tmpl = file_get_contents("win32\\build\\template.dsw");
+
+ f = new Enumerator(tmp.Files);
+ blocks = "";
+ for (; !f.atEnd(); f.moveNext()) {
+ contents = file_get_contents(f.item());
+ address = contents.slice(0, contents.indexOf("#"));
+ contents = contents.slice(contents.indexOf("#"));
+ dsp = FSO.CreateTextFile(address, true);
+ dsp.Write(contents);
+ dsp.Close();
+ ext = address.slice(address.lastIndexOf("\\")+1, address.length-4);
+ if (!core.match(ext)) {
+ blocks += file_get_contents("win32\\build\\block.template.dsw");
+ blocks = blocks.replace("ADDRESS", address);
+ blocks = blocks.replace("EXTNAME", ext);
+ }
+ FSO.DeleteFile(f.item());
+ }
+ tmpl = tmpl.replace("INSERT", blocks);
+ dsw = FSO.CreateTextFile("win32\\php.dsw", true);
+ dsw.Write(tmpl);
+ dsw.Close();
+ FSO.DeleteFolder("tmp");
+}
+
+function generate_dsp_flags()
+{
+ for (i = 0; i < DSP_FLAGS.length; i++) {
+ name = DSP_FLAGS[i][0];
+ if (DSP_FLAGS.length == i+1 || name != DSP_FLAGS[i+1][0]) {
+ ext = name.substr(7).toLowerCase();
+ src = file_get_contents("tmp\\" + ext + ".dsp");
+ have = "/D HAVE_" + ext.toUpperCase() + "=1";
+ src = src.replace(have, have + " " + DSP_FLAGS[i][1]);
+ dsp = FSO.CreateTextFile("tmp\\" + ext + ".dsp", true);
+ dsp.Write(src);
+ dsp.Close();
+ }
+ }
+ copy_dsp_files();
+ return;
+}
+
+function generate_dsp_filelist(ext, ext_dir, files)
+{
+ var EXT = ext.toUpperCase();
+ var tabs = new RegExp("[\t\r\n\'\"]", "gm");
+ var ws = new RegExp("\\s+", "g");
+ var dir = FSO.GetFolder(ext_dir);
+ var headers = "";
+
+ if (!files) {
+ files = "";
+ f = new Enumerator(dir.Files);
+ for (; !f.atEnd(); f.moveNext()) {
+ name = FSO.GetFileName(f.item());
+ if (name.substr(name.length-2) == ".c") {
+ files += " ./" + name;
+ }
+ }
+ } else {
+ files = files.replace(tabs, "");
+ files = "./" + files.replace(/ /g, " ./");
+ }
+ DSP_SOURCES = files.split(" ");
+
+ f = new Enumerator(dir.Files);
+ for (; !f.atEnd(); f.moveNext()) {
+ name = FSO.GetFileName(f.item());
+ if (name.substr(name.length-2) == ".h") {
+ headers += " ./" + name;
+ }
+ }
+ DSP_HEADERS = headers.split(" ");
+
+ configfile = FSO.BuildPath(ext_dir, "config.w32");
+ if (FSO.FileExists(configfile)) {
+ config = file_get_contents(configfile);
+ if (config.match("ADD_SOURCES")) {
+ sources = new RegExp("ADD_SOURCES\\([^,]*\\s*,\\s*['\"]([^'\"]+)['\"].*\\)", "gm");
+ arr = config.match(sources);
+ line = arr[0].replace(tabs, "");
+ newarr = line.split(',');
+ orig_path = newarr[0].replace("ADD_SOURCES(", "");
+ munged_dir = ext_dir.replace(/\\/g, '/');
+ orig_path = orig_path.replace("configure_module_dirname", munged_dir);
+ orig_path = orig_path.replace(" + ", "");
+ path = orig_path.replace(munged_dir + '/', "");
+
+ if (path.length > 0) {
+ subdir = FSO.GetFolder(orig_path);
+ lib = new Enumerator(subdir.Files);
+ libheaders = "";
+ for (; !lib.atEnd(); lib.moveNext()) {
+ name = FSO.GetFileName(lib.item());
+ if (name.substr(name.length-2) == ".h") {
+ libheaders += " ./" + path + "/" + name;
+ }
+ }
+ DSP_HEADERS = DSP_HEADERS.concat(libheaders.split(" "));
+ }
+
+ sources = newarr[1].replace(/\\/g, "");
+ sources = sources.replace(ws, " ");
+ path = path ? " ./" + path + "/" : " ./";
+ sources = sources.replace(/ /g, path);
+ DSP_SOURCES = DSP_SOURCES.concat(sources.split(" "));
+ }
+ }
+ write_src_file("tmp\\" + ext + ".headers.tmp", DSP_HEADERS);
+ write_src_file("tmp\\" + ext + ".sources.tmp", DSP_SOURCES);
+ return;
+}
+
+function generate_dsp_file(ext, ext_dir, files, shared)
+{
+ var dsp = FSO.CreateTextFile("tmp\\" + ext + ".dsp", true);
+ var tmpl = file_get_contents("win32\\build\\template.dsp");
+ var EXT = ext.toUpperCase();
+
+ tmpl = ext_dir + "\\" + ext + ".dsp" + tmpl;
+
+ extname = new RegExp("extname", "gm");
+ EXTNAME = new RegExp("EXTNAME", "gm");
+ tmpl = tmpl.replace(extname, ext);
+ tmpl = tmpl.replace(EXTNAME, EXT);
+
+ status = PHP_DEBUG == "no" ? 'Release' : 'Debug';
+ STATUS = new RegExp("Status", "gm");
+ tmpl = tmpl.replace(STATUS, status);
+
+ if (PHP_ZTS == "no") {
+ zts = new RegExp("_TS", "gmi");
+ tmpl = tmpl.replace(zts, '');
+ }
+
+ if (PHP_DEBUG != "no") {
+ tmpl = tmpl.replace(/Use_Debug_Libraries 0/g, "Use_Debug_Libraries 1");
+ tmpl = tmpl.replace(/NDEBUG/g, "_DEBUG");
+ }
+
+ cflags = get_define("CFLAGS").replace("$(BASE_INCLUDES)", '/I "..\\.." /I "..\\..\\..\\Zend" /I "..\\..\\TSRM" /I "..\\..\\main" ');
+ basecpp = cflags = cflags.replace('/I "..\\bindlib_w32"', '/I "..\\..\\..\\bindlib_w32"');
+ if (shared) {
+ basecpp += " /D COMPILE_DL_" + EXT;
+ }
+ tmpl = tmpl.replace("BASECPP", basecpp);
+ tmpl = tmpl.replace("BASECPP", cflags + " /D HAVE_" + EXT + "=1");
+ tmpl = tmpl.replace(/BASELIBS/g, get_define("LIBS"));
+ tmpl = tmpl.replace("LOCALLIBS", get_define("PHPLIB"));
+ debug = PHP_DEBUG != "no" ? " /debug" : "";
+ dll = shared ? ' /dll /out:"..\\..\\Debug_TS\\php_' + ext + '.dll"' : "";
+ tmpl = tmpl.replace(/BASELDFLAGS/g, "/nologo" + debug + dll);
+
+ generate_dsp_filelist(ext, ext_dir, files);
+ sources = file_get_contents("tmp\\" + ext + ".sources.tmp");
+ tmpl = tmpl.replace("SOURCEFILES", sources);
+ FSO.DeleteFile("tmp\\" + ext + ".sources.tmp");
+ headers = file_get_contents("tmp\\" + ext + ".headers.tmp");
+ tmpl = tmpl.replace("HEADERFILES", headers);
+ FSO.DeleteFile("tmp\\" + ext + ".headers.tmp");
+ dsp.Write(tmpl);
+ dsp.Close();
+ return;
+}