Fix inclusion order for phpize builds on Windows

`configure` for `phpize` builds on Windows creates Makefile and
config.pickle.h and includes the latter via the command line option
`/FI`.  That implies that config.pickle.h is always included before
config.w32.h, which means that standard definitions always override
extension specific definitions, while it should be the other way round.

Therefore, we change the inclusion order by including config.pickle.h
at the end of config.w32.h if the former is available, and also make
sure to avoid any potential C4005 warnings by `#undef`ining the macros
before defining them.

Closes GH-6269.
This commit is contained in:
Christoph M. Becker 2020-10-04 12:50:58 +02:00
parent a6bcad4a9e
commit 9b5f96e465
2 changed files with 10 additions and 2 deletions

View file

@ -1542,7 +1542,6 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir)
var _tmp = FSO.CreateTextFile(PHP_DIR + "/include/main/config.pickle.h", true);
_tmp.Close();
}
cflags = "/FI main/config.pickle.h " + cflags;
}
ADD_FLAG("CFLAGS_" + EXT, cflags);
@ -2207,7 +2206,7 @@ function generate_config_pickle_h()
var ln = outfile.ReadLine();
for (var i in keys) {
var reg = new RegExp("#define[\s ]+" + keys[i] + "[\s ]*.*", "g");
var reg = new RegExp("#define[\s ]+" + keys[i] + "[\s ]*.*|#undef[\s ]+" + keys[i], "g");
if (ln.match(reg)) {
found = true;
@ -2233,6 +2232,7 @@ function generate_config_pickle_h()
continue;
}*/
lines.push("#undef " + keys[i]);
lines.push("#define " + keys[i] + " " + item[0]);
}
@ -2309,6 +2309,11 @@ function generate_config_h()
outfile.WriteLine("#define " + keys[i] + " " + pieces);
}
outfile.WriteBlankLines(1);
outfile.WriteLine("#if __has_include(\"main/config.pickle.h\")");
outfile.WriteLine("#include \"main/config.pickle.h\"");
outfile.WriteLine("#endif");
outfile.Close();
}