summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--win32/build/config.w32116
-rw-r--r--win32/build/config.w32.phpize.in91
-rw-r--r--win32/build/confutils.js128
3 files changed, 147 insertions, 188 deletions
diff --git a/win32/build/config.w32 b/win32/build/config.w32
index a64cdd66c3..85cec0ce87 100644
--- a/win32/build/config.w32
+++ b/win32/build/config.w32
@@ -4,69 +4,11 @@
// equivalent.
ARG_WITH("toolset", "Toolset to use for the compilation, supported: vs, clang, intel", "vs");
-if ("clang" == PHP_TOOLSET) {
- VS_TOOLSET = false;
- CLANG_TOOLSET = true;
- INTEL_TOOLSET = false;
-} else if ("intel" == PHP_TOOLSET) {
- VS_TOOLSET = false;
- CLANG_TOOLSET = false;
- INTEL_TOOLSET = true;
-} else {
- /* Visual Studio is the default toolset. */
- PHP_TOOLSET = "no" == PHP_TOOLSET ? "vs" : PHP_TOOLSET;
- if (!!PHP_TOOLSET && "vs" != PHP_TOOLSET) {
- ERROR("Unsupported toolset name '" + PHP_TOOLSET + "'");
- }
- VS_TOOLSET = true;
- CLANG_TOOLSET = false;
- INTEL_TOOLSET = false;
-}
-
+toolset_option_handle();
ARG_WITH('cygwin', 'Path to cygwin utilities on your system', '\\cygwin');
-PHP_CL = toolset_get_compiler();
-if (!PHP_CL) {
- ERROR("MS C++ compiler is required");
-}
-
-COMPILER_NUMERIC_VERSION = toolset_get_compiler_version();
-COMPILER_NAME = toolset_get_compiler_name();
-
-if (VS_TOOLSET) {
- /* For the record here: */
- // 1200 is VC6
- // 1300 is vs.net 2002
- // 1310 is vs.net 2003
- // 1400 is vs.net 2005
- // 1500 is vs.net 2008
- // 1600 is vs.net 2010
- // Which version of the compiler do we have?
- VCVERS = COMPILER_NUMERIC_VERSION;
-
- if (VCVERS < 1500) {
- ERROR("Unsupported MS C++ Compiler, VC9 (2008) minimum is required");
- }
-
- AC_DEFINE('COMPILER', COMPILER_NAME, "Detected compiler version");
- DEFINE("PHP_COMPILER_SHORT", VC_VERSIONS_SHORT[VCVERS]);
- AC_DEFINE('PHP_COMPILER_ID', VC_VERSIONS_SHORT[VCVERS], "Compiler compatibility ID");
-} else if (CLANG_TOOLSET) {
- CLANGVERS = COMPILER_NUMERIC_VERSION;
-
- AC_DEFINE('COMPILER', COMPILER_NAME, "Detected compiler version");
- DEFINE("PHP_COMPILER_SHORT", "clang");
- AC_DEFINE('PHP_COMPILER_ID', "clang"); /* XXX something better were to write here */
-
-} else if (INTEL_TOOLSET) {
- INTELVERS = COMPILER_NUMERIC_VERSION;
-
- AC_DEFINE('COMPILER', COMPILER_NAME, "Detected compiler version");
- DEFINE("PHP_COMPILER_SHORT", "icc");
- AC_DEFINE('PHP_COMPILER_ID', "icc"); /* XXX something better were to write here */
-}
-STDOUT.WriteLine(" Detected compiler " + COMPILER_NAME);
+toolset_setup_compiler();
// do we use x64 or 80x86 version of compiler?
X64 = toolset_is_64();
@@ -78,53 +20,8 @@ if (X64) {
AC_DEFINE('ARCHITECTURE', X64 ? 'x64' : 'x86', "Detected compiler architecture");
DEFINE("PHP_ARCHITECTURE", X64 ? 'x64' : 'x86');
-// cygwin now ships with link.exe. Avoid searching the cygwin path
-// for this, as we want the MS linker, not the fileutil
-toolset_get_linker();
-
-PATH_PROG('nmake');
-
-// we don't want to define LIB, as that will override the default library path
-// that is set in that env var
-PATH_PROG('lib', null, 'MAKE_LIB');
-if (!PATH_PROG('bison')) {
- ERROR('bison is required')
-}
-
-// There's a minimum requirement for re2c..
-MINRE2C = "0.13.4";
-
-RE2C = PATH_PROG('re2c');
-if (RE2C) {
- var intvers, intmin;
- var pattern = /\./g;
-
- RE2CVERS = probe_binary(RE2C, "version");
- STDOUT.WriteLine(' Detected re2c version ' + RE2CVERS);
-
- intvers = RE2CVERS.replace(pattern, '') - 0;
- intmin = MINRE2C.replace(pattern, '') - 0;
-
- if (intvers < intmin) {
- STDOUT.WriteLine('WARNING: The minimum RE2C version requirement is ' + MINRE2C);
- STDOUT.WriteLine('Parsers will not be generated. Upgrade your copy at http://sf.net/projects/re2c');
- DEFINE('RE2C', '');
- } else {
- DEFINE('RE2C_FLAGS', '');
- }
-} else {
- STDOUT.WriteLine('Parsers will not be regenerated');
-}
-PATH_PROG('zip');
-PATH_PROG('lemon');
-
-// avoid picking up midnight commander from cygwin
-PATH_PROG('mc', WshShell.Environment("Process").Item("PATH"));
-
-// Try locating manifest tool
-if (VS_TOOLSET && VCVERS > 1200) {
- PATH_PROG('mt', WshShell.Environment("Process").Item("PATH"));
-}
+toolset_setup_linker();
+toolset_setup_project_tools();
// stick objects somewhere outside of the source tree
ARG_ENABLE('object-out-dir', 'Alternate location for binary objects during build', '');
@@ -180,6 +77,10 @@ DEFINE('CFLAGS_PHP_OBJ', '$(CFLAGS_PHP) $(STATIC_EXT_CFLAGS)');
// General CFLAGS for building objects
DEFINE("CFLAGS", "/nologo $(BASE_INCLUDES) /D _WINDOWS \
/D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /W3 ");
+if (VS_TOOLSET) {
+ ADD_FLAG("CFLAGS", " /FD ");
+}
+
if (CLANG_TOOLSET) {
if (X64) {
ADD_FLAG('CFLAGS', ' -m64 ');
@@ -420,6 +321,7 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \
zend_float.c zend_string.c zend_generators.c zend_virtual_cwd.c zend_ast.c \
zend_inheritance.c");
+/* XXX inspect this for other toolsets */
if (VS_TOOLSET && VCVERS == 1200) {
AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1);
}
diff --git a/win32/build/config.w32.phpize.in b/win32/build/config.w32.phpize.in
index 9b28352c8f..91ebc24184 100644
--- a/win32/build/config.w32.phpize.in
+++ b/win32/build/config.w32.phpize.in
@@ -3,32 +3,15 @@
// "Master" config file; think of it as a configure.in
// equivalent.
+ARG_WITH("toolset", "Toolset to use for the compilation, supported: vs, clang, intel", "vs");
+toolset_option_handle()
+
var PHP_CYGWIN="notset";
-PHP_CL = PATH_PROG('cl', null, 'PHP_CL');
-if (!PHP_CL) {
- ERROR("MS C++ compiler is required");
-}
-/* For the record here: */
-// 1200 is VC6
-// 1300 is vs.net 2002
-// 1310 is vs.net 2003
-// 1400 is vs.net 2005
-// 1500 is vs.net 2008
-// 1600 is vs.net 2010
-// Which version of the compiler do we have?
-VCVERS = probe_binary(PHP_CL).substr(0, 5).replace('.', '');
-STDOUT.WriteLine(" Detected compiler " + VC_VERSIONS[VCVERS]);
-
-if (VCVERS < 1500) {
- ERROR("Unsupported MS C++ Compiler, VC9 (2008) minimum is required");
-}
-AC_DEFINE('COMPILER', VC_VERSIONS[VCVERS], "Detected compiler version");
-DEFINE("PHP_COMPILER_SHORT", VC_VERSIONS_SHORT[VCVERS]);
-AC_DEFINE('PHP_COMPILER_ID', VC_VERSIONS_SHORT[VCVERS], "Compiler compatibility ID");
+toolset_setup_compiler();
// do we use x64 or 80x86 version of compiler?
-X64 = probe_binary(PHP_CL, 64, null, 'PHP_CL');
+X64 = toolset_is_64();
if (X64) {
STDOUT.WriteLine(" Detected 64-bit compiler");
} else {
@@ -37,52 +20,8 @@ if (X64) {
AC_DEFINE('ARCHITECTURE', X64 ? 'x64' : 'x86', "Detected compiler architecture");
DEFINE("PHP_ARCHITECTURE", X64 ? 'x64' : 'x86');
-// cygwin now ships with link.exe. Avoid searching the cygwin path
-// for this, as we want the MS linker, not the fileutil
-PATH_PROG('link', WshShell.Environment("Process").Item("PATH"));
-PATH_PROG('nmake');
-
-// we don't want to define LIB, as that will override the default library path
-// that is set in that env var
-PATH_PROG('lib', null, 'MAKE_LIB');
-if (!PATH_PROG('bison')) {
- ERROR('bison is required')
-}
-
-// There's a minimum requirement for re2c..
-MINRE2C = "0.13.4";
-
-RE2C = PATH_PROG('re2c');
-if (RE2C) {
- var intvers, intmin;
- var pattern = /\./g;
-
- RE2CVERS = probe_binary(RE2C, "version");
- STDOUT.WriteLine(' Detected re2c version ' + RE2CVERS);
-
- intvers = RE2CVERS.replace(pattern, '') - 0;
- intmin = MINRE2C.replace(pattern, '') - 0;
-
- if (intvers < intmin) {
- STDOUT.WriteLine('WARNING: The minimum RE2C version requirement is ' + MINRE2C);
- STDOUT.WriteLine('Parsers will not be generated. Upgrade your copy at http://sf.net/projects/re2c');
- DEFINE('RE2C', '');
- } else {
- DEFINE('RE2C_FLAGS', '');
- }
-} else {
- STDOUT.WriteLine('Parsers will not be regenerated');
-}
-PATH_PROG('zip');
-PATH_PROG('lemon');
-
-// avoid picking up midnight commander from cygwin
-PATH_PROG('mc', WshShell.Environment("Process").Item("PATH"));
-
-// Try locating manifest tool
-if (VCVERS > 1200) {
- PATH_PROG('mt', WshShell.Environment("Process").Item("PATH"));
-}
+toolset_setup_linker();
+toolset_setup_project_tools();
// stick objects somewhere outside of the source tree
ARG_ENABLE('object-out-dir', 'Alternate location for binary objects during build', '');
@@ -121,10 +60,13 @@ DEFINE("CFLAGS_PHP", "/D _USRDLL /D PHP7DLLTS_EXPORTS /D PHP_EXPORTS \
DEFINE('CFLAGS_PHP_OBJ', '$(CFLAGS_PHP) $(STATIC_EXT_CFLAGS)');
// General CFLAGS for building objects
-DEFINE("CFLAGS", "/nologo /FD $(BASE_INCLUDES) /D _WINDOWS \
+DEFINE("CFLAGS", "/nologo $(BASE_INCLUDES) /D _WINDOWS \
/D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /W3 ");
+if (VS_TOOLSET) {
+ ADD_FLAG("CFLAGS", " /FD ");
+}
-if (VCVERS < 1400) {
+if (VS_TOOLSET && VCVERS < 1400) {
// Enable automatic precompiled headers
ADD_FLAG('CFLAGS', ' /YX ');
@@ -134,7 +76,7 @@ if (VCVERS < 1400) {
}
}
-if (VCVERS >= 1400) {
+if (VS_TOOLSET && VCVERS >= 1400) {
// fun stuff: MS deprecated ANSI stdio and similar functions
// disable annoying warnings. In addition, time_t defaults
// to 64-bit. Ask for 32-bit.
@@ -153,7 +95,7 @@ if (VCVERS >= 1400) {
ARG_WITH('prefix', 'PHP installation prefix', '');
ARG_WITH('mp', 'Tell Visual Studio use up to [n,auto,disable] processes for compilation', 'auto');
var PHP_MP_DISABLED = true;
-if (VCVERS >= 1500 && PHP_MP != 'disable') {
+if (VS_TOOLSET && VCVERS >= 1500 && PHP_MP != 'disable') {
// no from disable-all
if(PHP_MP == 'auto' || PHP_MP == 'no') {
ADD_FLAG('CFLAGS', ' /MP ');
@@ -334,11 +276,12 @@ STDOUT.WriteLine("Build dir: " + get_define('BUILD_DIR'));
STDOUT.WriteLine("PHP Core: " + get_define('PHPDLL') + " and " + get_define('PHPLIB'));
-if (VCVERS == 1200) {
+/* XXX inspect this for other toolsets */
+if (VS_TOOLSET && VCVERS == 1200) {
AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1);
}
-if (VCVERS >= 1400) {
+if (INTEL_TOOLSET || VS_TOOLSET && VCVERS >= 1400) {
AC_DEFINE('HAVE_STRNLEN', 1);
}
diff --git a/win32/build/confutils.js b/win32/build/confutils.js
index 55d1e8ccc2..cafb267b1e 100644
--- a/win32/build/confutils.js
+++ b/win32/build/confutils.js
@@ -39,6 +39,9 @@ var INTELVERS = -1;
var COMPILER_NUMERIC_VERSION = -1;
var COMPILER_NAME = "unknown";
+// There's a minimum requirement for re2c..
+var MINRE2C = "0.13.4";
+
/* Store the enabled extensions (summary + QA check) */
var extensions_enabled = new Array();
@@ -2292,6 +2295,118 @@ if (!MODE_PHPIZE) {
ARG_ENABLE('one-shot', 'Optimize for fast build - best for release and snapshot builders, not so hot for edit-and-rebuild hacking', 'no');
}
+
+function toolset_option_handle()
+{
+ if ("clang" == PHP_TOOLSET) {
+ VS_TOOLSET = false;
+ CLANG_TOOLSET = true;
+ INTEL_TOOLSET = false;
+ } else if ("intel" == PHP_TOOLSET) {
+ VS_TOOLSET = false;
+ CLANG_TOOLSET = false;
+ INTEL_TOOLSET = true;
+ } else {
+ /* Visual Studio is the default toolset. */
+ PHP_TOOLSET = "no" == PHP_TOOLSET ? "vs" : PHP_TOOLSET;
+ if (!!PHP_TOOLSET && "vs" != PHP_TOOLSET) {
+ ERROR("Unsupported toolset name '" + PHP_TOOLSET + "'");
+ }
+ VS_TOOLSET = true;
+ CLANG_TOOLSET = false;
+ INTEL_TOOLSET = false;
+ }
+}
+
+function toolset_setup_compiler()
+{
+ PHP_CL = toolset_get_compiler();
+ if (!PHP_CL) {
+ ERROR("Compiler not found");
+ }
+
+ COMPILER_NUMERIC_VERSION = toolset_get_compiler_version();
+ COMPILER_NAME = toolset_get_compiler_name();
+
+ if (VS_TOOLSET) {
+ /* For the record here: */
+ // 1200 is VC6
+ // 1300 is vs.net 2002
+ // 1310 is vs.net 2003
+ // 1400 is vs.net 2005
+ // 1500 is vs.net 2008
+ // 1600 is vs.net 2010
+ // Which version of the compiler do we have?
+ VCVERS = COMPILER_NUMERIC_VERSION;
+
+ if (VCVERS < 1500) {
+ ERROR("Unsupported MS C++ Compiler, VC9 (2008) minimum is required");
+ }
+
+ AC_DEFINE('COMPILER', COMPILER_NAME, "Detected compiler version");
+ DEFINE("PHP_COMPILER_SHORT", VC_VERSIONS_SHORT[VCVERS]);
+ AC_DEFINE('PHP_COMPILER_ID', VC_VERSIONS_SHORT[VCVERS], "Compiler compatibility ID");
+ } else if (CLANG_TOOLSET) {
+ CLANGVERS = COMPILER_NUMERIC_VERSION;
+
+ AC_DEFINE('COMPILER', COMPILER_NAME, "Detected compiler version");
+ DEFINE("PHP_COMPILER_SHORT", "clang");
+ AC_DEFINE('PHP_COMPILER_ID', "clang"); /* XXX something better were to write here */
+
+ } else if (INTEL_TOOLSET) {
+ INTELVERS = COMPILER_NUMERIC_VERSION;
+
+ AC_DEFINE('COMPILER', COMPILER_NAME, "Detected compiler version");
+ DEFINE("PHP_COMPILER_SHORT", "icc");
+ AC_DEFINE('PHP_COMPILER_ID', "icc"); /* XXX something better were to write here */
+ }
+ STDOUT.WriteLine(" Detected compiler " + COMPILER_NAME);
+}
+
+function toolset_setup_project_tools()
+{
+ PATH_PROG('nmake');
+
+ // we don't want to define LIB, as that will override the default library path
+ // that is set in that env var
+ PATH_PROG('lib', null, 'MAKE_LIB');
+ if (!PATH_PROG('bison')) {
+ ERROR('bison is required')
+ }
+
+ RE2C = PATH_PROG('re2c');
+ if (RE2C) {
+ var intvers, intmin;
+ var pattern = /\./g;
+
+ RE2CVERS = probe_binary(RE2C, "version");
+ STDOUT.WriteLine(' Detected re2c version ' + RE2CVERS);
+
+ intvers = RE2CVERS.replace(pattern, '') - 0;
+ intmin = MINRE2C.replace(pattern, '') - 0;
+
+ if (intvers < intmin) {
+ STDOUT.WriteLine('WARNING: The minimum RE2C version requirement is ' + MINRE2C);
+ STDOUT.WriteLine('Parsers will not be generated. Upgrade your copy at http://sf.net/projects/re2c');
+ DEFINE('RE2C', '');
+ } else {
+ DEFINE('RE2C_FLAGS', '');
+ }
+ } else {
+ STDOUT.WriteLine('Parsers will not be regenerated');
+ }
+ PATH_PROG('zip');
+ PATH_PROG('lemon');
+
+ // avoid picking up midnight commander from cygwin
+ PATH_PROG('mc', WshShell.Environment("Process").Item("PATH"));
+
+ // Try locating manifest tool
+ if (VS_TOOLSET && VCVERS > 1200) {
+ PATH_PROG('mt', WshShell.Environment("Process").Item("PATH"));
+ }
+}
+
function toolset_get_compiler()
{
if (VS_TOOLSET) {
@@ -2302,7 +2417,7 @@ function toolset_get_compiler()
return PATH_PROG('icl', null, 'PHP_CL')
}
- ERROR("Wrong toolset");
+ ERROR("Unsupported toolset");
}
function toolset_get_compiler_version()
@@ -2337,7 +2452,7 @@ function toolset_get_compiler_version()
}
}
- ERROR("Failed to parse compiler out for compiler version");
+ ERROR("Failed to parse compiler version or unsupported toolset");
}
function toolset_get_compiler_name()
@@ -2354,7 +2469,7 @@ function toolset_get_compiler_name()
return full.split(/\n/)[0].replace(/\s/g, ' ');
}
- ERROR("Wrong toolset");
+ WARNING("Unsupported toolset");
}
@@ -2374,11 +2489,11 @@ function toolset_is_64()
return null != full.match(/Intel\(R\) 64/);
}
- ERROR("Wrong toolset");
+ ERROR("Unsupported toolset");
}
-function toolset_get_linker()
+function toolset_setup_linker()
{
if (VS_TOOLSET) {
return PATH_PROG('link', WshShell.Environment("Process").Item("PATH"));
@@ -2389,7 +2504,6 @@ function toolset_get_linker()
return PATH_PROG('xilink', WshShell.Environment("Process").Item("PATH"), "LINK");
}
- ERROR("Wrong toolset");
+ ERROR("Unsupported toolset");
}
-