Annotation of embedaddon/php/win32/build/config.w32.phpize.in, revision 1.1
1.1 ! misho 1: // vim:ft=javascript
! 2: // $Id: config.w32 305923 2010-12-02 23:23:14Z pajoye $
! 3: // "Master" config file; think of it as a configure.in
! 4: // equivalent.
! 5:
! 6: var PHP_CYGWIN="notset";
! 7: PHP_CL = PATH_PROG('cl', null, 'PHP_CL');
! 8: if (!PHP_CL) {
! 9: ERROR("MS C++ compiler is required");
! 10: }
! 11: /* For the record here: */
! 12: // 1200 is VC6
! 13: // 1300 is vs.net 2002
! 14: // 1310 is vs.net 2003
! 15: // 1400 is vs.net 2005
! 16: // 1500 is vs.net 2008
! 17: // 1600 is vs.net 2010
! 18: // Which version of the compiler do we have?
! 19: VCVERS = probe_binary(PHP_CL).substr(0, 5).replace('.', '');
! 20: STDOUT.WriteLine(" Detected compiler " + VC_VERSIONS[VCVERS]);
! 21: AC_DEFINE('COMPILER', VC_VERSIONS[VCVERS], "Detected compiler version");
! 22: DEFINE("PHP_COMPILER_SHORT", VC_VERSIONS_SHORT[VCVERS]);
! 23: AC_DEFINE('PHP_COMPILER_ID', VC_VERSIONS_SHORT[VCVERS], "Compiler compatibility ID");
! 24:
! 25: // do we use x64 or 80x86 version of compiler?
! 26: X64 = probe_binary(PHP_CL, 64, null, 'PHP_CL');
! 27: if (X64) {
! 28: STDOUT.WriteLine(" Detected 64-bit compiler");
! 29: } else {
! 30: STDOUT.WriteLine(" Detected 32-bit compiler");
! 31: }
! 32: AC_DEFINE('ARCHITECTURE', X64 ? 'x64' : 'x86', "Detected compiler architecture");
! 33: DEFINE("PHP_ARCHITECTURE", X64 ? 'x64' : 'x86');
! 34:
! 35: // cygwin now ships with link.exe. Avoid searching the cygwin path
! 36: // for this, as we want the MS linker, not the fileutil
! 37: PATH_PROG('link', WshShell.Environment("Process").Item("PATH"));
! 38: PATH_PROG('nmake');
! 39:
! 40: // we don't want to define LIB, as that will override the default library path
! 41: // that is set in that env var
! 42: PATH_PROG('lib', null, 'MAKE_LIB');
! 43: if (!PATH_PROG('bison')) {
! 44: ERROR('bison is required')
! 45: }
! 46:
! 47: // There's a minimum requirement for re2c..
! 48: MINRE2C = "0.13.4";
! 49:
! 50: RE2C = PATH_PROG('re2c');
! 51: if (RE2C) {
! 52: var intvers, intmin;
! 53: var pattern = /\./g;
! 54:
! 55: RE2CVERS = probe_binary(RE2C, "version");
! 56: STDOUT.WriteLine(' Detected re2c version ' + RE2CVERS);
! 57:
! 58: intvers = RE2CVERS.replace(pattern, '') - 0;
! 59: intmin = MINRE2C.replace(pattern, '') - 0;
! 60:
! 61: if (intvers < intmin) {
! 62: STDOUT.WriteLine('WARNING: The minimum RE2C version requirement is ' + MINRE2C);
! 63: STDOUT.WriteLine('Parsers will not be generated. Upgrade your copy at http://sf.net/projects/re2c');
! 64: DEFINE('RE2C', '');
! 65: } else {
! 66: DEFINE('RE2C_FLAGS', '');
! 67: }
! 68: } else {
! 69: STDOUT.WriteLine('Parsers will not be regenerated');
! 70: }
! 71: PATH_PROG('zip');
! 72: PATH_PROG('lemon');
! 73:
! 74: // avoid picking up midnight commander from cygwin
! 75: PATH_PROG('mc', WshShell.Environment("Process").Item("PATH"));
! 76:
! 77: // Try locating manifest tool
! 78: if (VCVERS > 1200) {
! 79: PATH_PROG('mt', WshShell.Environment("Process").Item("PATH"));
! 80: }
! 81:
! 82: // stick objects somewhere outside of the source tree
! 83: ARG_ENABLE('object-out-dir', 'Alternate location for binary objects during build', '');
! 84: if (PHP_OBJECT_OUT_DIR.length) {
! 85: PHP_OBJECT_OUT_DIR = FSO.GetAbsolutePathName(PHP_OBJECT_OUT_DIR);
! 86: if (!FSO.FolderExists(PHP_OBJECT_OUT_DIR)) {
! 87: ERROR('you chosen output directory ' + PHP_OBJECT_OUT_DIR + ' does not exist');
! 88: }
! 89: PHP_OBJECT_OUT_DIR += '\\';
! 90: } else if (X64) {
! 91: if (!FSO.FolderExists("x64")) {
! 92: FSO.CreateFolder("x64");
! 93: }
! 94: PHP_OBJECT_OUT_DIR = 'x64\\';
! 95: }
! 96:
! 97: ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
! 98: ARG_ENABLE('debug-pack', 'Release binaries with external debug symbols (--enable-debug must not be specified)', 'no');
! 99: if (PHP_DEBUG == "yes" && PHP_DEBUG_PACK == "yes") {
! 100: ERROR("Use of both --enable-debug and --enable-debug-pack not allowed.");
! 101: }
! 102:
! 103: DEFINE('PHP_PREFIX', PHP_PREFIX);
! 104:
! 105: DEFINE("BASE_INCLUDES", "/I " + PHP_DIR + "/include /I " + PHP_DIR + "/include/main /I " + PHP_DIR + "/include/Zend /I " + PHP_DIR + "/include/TSRM /I " + PHP_DIR + "/include/ext ");
! 106:
! 107: // CFLAGS for building the PHP dll
! 108: DEFINE("CFLAGS_PHP", "/D _USRDLL /D PHP5DLLTS_EXPORTS /D PHP_EXPORTS \
! 109: /D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x500");
! 110:
! 111: DEFINE('CFLAGS_PHP_OBJ', '$(CFLAGS_PHP) $(STATIC_EXT_CFLAGS)');
! 112:
! 113: // General CFLAGS for building objects
! 114: DEFINE("CFLAGS", "/nologo /FD $(BASE_INCLUDES) /D _WINDOWS \
! 115: /D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /W3 ");
! 116:
! 117: if (VCVERS < 1400) {
! 118: // Enable automatic precompiled headers
! 119: ADD_FLAG('CFLAGS', ' /YX ');
! 120:
! 121: if (PHP_DEBUG == "yes") {
! 122: // Set some debug/release specific options
! 123: ADD_FLAG('CFLAGS', ' /GZ ');
! 124: }
! 125: }
! 126:
! 127: if (VCVERS >= 1400) {
! 128: // fun stuff: MS deprecated ANSI stdio and similar functions
! 129: // disable annoying warnings. In addition, time_t defaults
! 130: // to 64-bit. Ask for 32-bit.
! 131: if (X64) {
! 132: ADD_FLAG('CFLAGS', ' /wd4996 /Wp64 ');
! 133: } else {
! 134: ADD_FLAG('CFLAGS', ' /wd4996 /D_USE_32BIT_TIME_T=1 ');
! 135: }
! 136:
! 137: if (PHP_DEBUG == "yes") {
! 138: // Set some debug/release specific options
! 139: ADD_FLAG('CFLAGS', ' /RTC1 ');
! 140: }
! 141: }
! 142:
! 143: ARG_WITH('prefix', 'PHP installation prefix', '');
! 144: ARG_WITH('mp', 'Tell VC9+ use up to [n,auto,disable] processes for compilation', 'auto');
! 145: if (VCVERS >= 1500 && PHP_MP != 'disable') {
! 146: // no from disable-all
! 147: if(PHP_MP == 'auto' || PHP_MP == 'no') {
! 148: ADD_FLAG('CFLAGS', ' /MP ');
! 149: } else {
! 150: if(parseInt(PHP_MP) != 0) {
! 151: ADD_FLAG('CFLAGS', ' /MP'+ PHP_MP +' ');
! 152: } else {
! 153: STDOUT.WriteLine('WARNING: Invalid argument for MP: ' + PHP_MP);
! 154: }
! 155: }
! 156: }
! 157:
! 158: /* For snapshot builders, where can we find the additional
! 159: * files that make up the snapshot template? */
! 160: ARG_WITH("snapshot-template", "Path to snapshot builder template dir", "no");
! 161:
! 162: // General DLL link flags
! 163: DEFINE("DLL_LDFLAGS", "/dll ");
! 164:
! 165: // PHP DLL link flags
! 166: DEFINE("PHP_LDFLAGS", "$(DLL_LDFLAGS)");
! 167:
! 168: // General libs
! 169: // urlmon.lib ole32.lib oleaut32.lib uuid.lib gdi32.lib winspool.lib comdlg32.lib
! 170: DEFINE("LIBS", "kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib");
! 171:
! 172: // Set some debug/release specific options
! 173: if (PHP_DEBUG == "yes") {
! 174: ADD_FLAG("CFLAGS", "/LDd /MDd /W3 /Gm /Od /D _DEBUG /D ZEND_DEBUG=1 " +
! 175: (X64?"/Zi":"/ZI"));
! 176: ADD_FLAG("LDFLAGS", "/debug");
! 177: // Avoid problems when linking to release libraries that use the release
! 178: // version of the libc
! 179: ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:msvcrt");
! 180: } else {
! 181: // Generate external debug files when --enable-debug-pack is specified
! 182: if (PHP_DEBUG_PACK == "yes") {
! 183: ADD_FLAG("CFLAGS", "/Zi");
! 184: ADD_FLAG("LDFLAGS", "/incremental:no /debug /opt:ref,icf");
! 185: }
! 186: // Equivalent to Release_TSInline build -> best optimization
! 187: ADD_FLAG("CFLAGS", "/LD /MD /W3 /Ox /D NDebug /D NDEBUG /D ZEND_WIN32_FORCE_INLINE /GF /D ZEND_DEBUG=0");
! 188:
! 189: // if you have VS.Net /GS hardens the binary against buffer overruns
! 190: // ADD_FLAG("CFLAGS", "/GS");
! 191: }
! 192:
! 193: if (PHP_ZTS == "yes") {
! 194: ADD_FLAG("CFLAGS", "/D ZTS=1");
! 195: }
! 196:
! 197: DEFINE("PHP_ZTS_ARCHIVE_POSTFIX", PHP_ZTS == "yes" ? '' : "-nts");
! 198:
! 199:
! 200: // we want msvcrt in the PHP DLL
! 201: ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:libcmt");
! 202:
! 203: // set up the build dir and DLL name
! 204: if (PHP_DEBUG == "yes" && PHP_ZTS == "yes") {
! 205: DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Debug_TS");
! 206: if (!MODE_PHPIZE) {
! 207: DEFINE("PHPDLL", "php" + PHP_VERSION + "ts_debug.dll");
! 208: DEFINE("PHPLIB", "php" + PHP_VERSION + "ts_debug.lib");
! 209: }
! 210: } else if (PHP_DEBUG == "yes" && PHP_ZTS == "no") {
! 211: DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Debug");
! 212: if (!MODE_PHPIZE) {
! 213: DEFINE("PHPDLL", "php" + PHP_VERSION + "_debug.dll");
! 214: DEFINE("PHPLIB", "php" + PHP_VERSION + "_debug.lib");
! 215: }
! 216: } else if (PHP_DEBUG == "no" && PHP_ZTS == "yes") {
! 217: DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Release_TS");
! 218: if (!MODE_PHPIZE) {
! 219: DEFINE("PHPDLL", "php" + PHP_VERSION + "ts.dll");
! 220: DEFINE("PHPLIB", "php" + PHP_VERSION + "ts.lib");
! 221: }
! 222: } else if (PHP_DEBUG == "no" && PHP_ZTS == "no") {
! 223: DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Release");
! 224: if (!MODE_PHPIZE) {
! 225: DEFINE("PHPDLL", "php" + PHP_VERSION + ".dll");
! 226: DEFINE("PHPLIB", "php" + PHP_VERSION + ".lib");
! 227: }
! 228: }
! 229:
! 230: if (MODE_PHPIZE) {
! 231: DEFINE("PHPDLL", PHP_DLL);
! 232: DEFINE("PHPLIB", PHP_DLL_LIB);
! 233: }
! 234:
! 235: // Find the php_build dir - it contains headers and libraries
! 236: // that we need
! 237: ARG_WITH('php-build', 'Path to where you extracted the development libraries (http://wiki.php.net/internals/windows/libs). Assumes that it is a sibling of this source dir (..\\deps) if not specified', 'no');
! 238:
! 239: if (PHP_PHP_BUILD == 'no') {
! 240: if (FSO.FolderExists("..\\deps")) {
! 241: PHP_PHP_BUILD = "..\\deps";
! 242: } else {
! 243: if (FSO.FolderExists("..\\php_build")) {
! 244: PHP_PHP_BUILD = "..\\php_build";
! 245: } else {
! 246: if (X64) {
! 247: if (FSO.FolderExists("..\\win64build")) {
! 248: PHP_PHP_BUILD = "..\\win64build";
! 249: } else if (FSO.FolderExists("..\\php-win64-dev\\php_build")) {
! 250: PHP_PHP_BUILD = "..\\php-win64-dev\\php_build";
! 251: }
! 252: } else {
! 253: if (FSO.FolderExists("..\\win32build")) {
! 254: PHP_PHP_BUILD = "..\\win32build";
! 255: } else if (FSO.FolderExists("..\\php-win32-dev\\php_build")) {
! 256: PHP_PHP_BUILD = "..\\php-win32-dev\\php_build";
! 257: }
! 258: }
! 259: }
! 260: }
! 261: PHP_PHP_BUILD = FSO.GetAbsolutePathName(PHP_PHP_BUILD);
! 262: }
! 263: DEFINE("PHP_BUILD", PHP_PHP_BUILD);
! 264:
! 265: ARG_WITH('extra-includes', 'Extra include path to use when building everything', '');
! 266: ARG_WITH('extra-libs', 'Extra library path to use when linking everything', '');
! 267:
! 268: var php_usual_include_suspects = PHP_PHP_BUILD+"\\include";
! 269: var php_usual_lib_suspects = PHP_PHP_BUILD+"\\lib";
! 270:
! 271: ADD_FLAG("CFLAGS", '/I "' + php_usual_include_suspects + '" ');
! 272: ADD_FLAG("LDFLAGS", '/libpath:"\\"' + php_usual_lib_suspects + '\\"" ');
! 273:
! 274: // Poke around for some headers
! 275: function probe_basic_headers()
! 276: {
! 277: var p;
! 278:
! 279: if (PHP_PHP_BUILD != "no") {
! 280: php_usual_include_suspects += ";" + PHP_PHP_BUILD + "\\include";
! 281: php_usual_lib_suspects += ";" + PHP_PHP_BUILD + "\\lib";
! 282: }
! 283: }
! 284:
! 285: function add_extra_dirs()
! 286: {
! 287: var path, i, f;
! 288:
! 289: if (PHP_EXTRA_INCLUDES.length) {
! 290: path = PHP_EXTRA_INCLUDES.split(';');
! 291: for (i = 0; i < path.length; i++) {
! 292: f = FSO.GetAbsolutePathName(path[i]);
! 293: if (FSO.FolderExists(f)) {
! 294: ADD_FLAG("CFLAGS", '/I "' + f + '" ');
! 295: }
! 296: }
! 297: }
! 298: if (PHP_EXTRA_LIBS.length) {
! 299: path = PHP_EXTRA_LIBS.split(';');
! 300: for (i = 0; i < path.length; i++) {
! 301: f = FSO.GetAbsolutePathName(path[i]);
! 302: if (FSO.FolderExists(f)) {
! 303: if (VCVERS <= 1200 && f.indexOf(" ") >= 0) {
! 304: ADD_FLAG("LDFLAGS", '/libpath:"\\"' + f + '\\"" ');
! 305: } else {
! 306: ADD_FLAG("LDFLAGS", '/libpath:"' + f + '" ');
! 307: }
! 308: }
! 309: }
! 310: }
! 311:
! 312: }
! 313:
! 314: probe_basic_headers();
! 315: add_extra_dirs();
! 316:
! 317: //DEFINE("PHP_BUILD", PHP_PHP_BUILD);
! 318:
! 319: STDOUT.WriteBlankLines(1);
! 320: STDOUT.WriteLine("Build dir: " + get_define('BUILD_DIR'));
! 321: STDOUT.WriteLine("PHP Core: " + get_define('PHPDLL') + " and " + get_define('PHPLIB'));
! 322:
! 323:
! 324: if (VCVERS == 1200) {
! 325: AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1);
! 326: }
! 327:
! 328: if (VCVERS >= 1400) {
! 329: AC_DEFINE('HAVE_STRNLEN', 1);
! 330: }
! 331:
! 332: STDOUT.WriteBlankLines(1);
! 333:
! 334: if (PHP_SNAPSHOT_TEMPLATE == "no") {
! 335: /* default is as a sibling of the php_build dir */
! 336: if (FSO.FolderExists(PHP_PHP_BUILD + "\\template")) {
! 337: PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\template");
! 338: } else if (FSO.FolderExists(PHP_PHP_BUILD + "\\..\\template")) {
! 339: PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\..\\template");
! 340: }
! 341: }
! 342:
! 343: DEFINE('SNAPSHOT_TEMPLATE', PHP_SNAPSHOT_TEMPLATE);
! 344:
! 345: if (PHP_DSP != "no") {
! 346: if (FSO.FolderExists("tmp")) {
! 347: FSO.DeleteFolder("tmp");
! 348: }
! 349: FSO.CreateFolder("tmp");
! 350: }
! 351:
! 352: AC_DEFINE("PHP_DIR", PHP_DIR);
! 353: DEFINE("PHP_DIR", PHP_DIR);
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>