diff options
| author | Pierre Joye <pajoye@php.net> | 2010-12-13 18:43:10 +0000 |
|---|---|---|
| committer | Pierre Joye <pajoye@php.net> | 2010-12-13 18:43:10 +0000 |
| commit | aea6771d1993cc6ea75e3dd75cfc54fb268dfaf0 (patch) | |
| tree | 5149984f299d108d8d5a3c437156ab99b22aca57 | |
| parent | 4ee6b4dfbbbaec874598136c7355072504cb6fe8 (diff) | |
| download | php-git-aea6771d1993cc6ea75e3dd75cfc54fb268dfaf0.tar.gz | |
- add phpize support for windows, need a nmake install for now (nmake devel-pkg version is coming), works exactly the same as on unix, or should :)
30 files changed, 876 insertions, 50 deletions
diff --git a/ext/date/config.w32 b/ext/date/config.w32 index 368ddef97a..85b0e6519b 100755 --- a/ext/date/config.w32 +++ b/ext/date/config.w32 @@ -7,6 +7,8 @@ AC_DEFINE('HAVE_DATE', 1, 'Have date/time support'); ADD_FLAG('CFLAGS_DATE', "/wd4244"); +PHP_INSTALL_HEADERS("ext/date/", "php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h"); + var tl_config = FSO.CreateTextFile("ext/date/lib/timelib_config.h", true); tl_config.WriteLine("#include \"config.w32.h\""); tl_config.Close(); diff --git a/ext/dom/config.w32 b/ext/dom/config.w32 index 8fba39336a..cbe15af1ab 100644 --- a/ext/dom/config.w32 +++ b/ext/dom/config.w32 @@ -19,6 +19,7 @@ if (PHP_DOM == "yes") { if (!PHP_DOM_SHARED) { ADD_FLAG("CFLAGS_DOM", "/D LIBXML_STATIC "); } + PHP_INSTALL_HEADERS("ext/dom", "xml_common.h"); } else { WARNING("dom support can't be enabled, libxml is not enabled") PHP_DOM = "no" diff --git a/ext/ereg/config.w32 b/ext/ereg/config.w32 index 59cdb04685..d4b06747df 100644 --- a/ext/ereg/config.w32 +++ b/ext/ereg/config.w32 @@ -8,4 +8,5 @@ if (PHP_EREG != "no") { ADD_SOURCES("ext/ereg/regex", "regcomp.c regexec.c regerror.c regfree.c", "ereg"); AC_DEFINE('REGEX', 1, 'Bundled regex'); AC_DEFINE('HSREGEX', 1, 'Bundled regex'); -}
\ No newline at end of file + PHP_INSTALL_HEADERS("ext/ereg", "php_ereg.h php_regex.h regex/"); +} diff --git a/ext/filter/config.w32 b/ext/filter/config.w32 index 083555a4c7..b74f3a2fd0 100644 --- a/ext/filter/config.w32 +++ b/ext/filter/config.w32 @@ -5,4 +5,5 @@ ARG_ENABLE("filter", "Filter Support", "yes"); if (PHP_FILTER == "yes") { EXTENSION("filter", "filter.c sanitizing_filters.c logical_filters.c callback_filter.c"); + PHP_INSTALL_HEADERS("ext/filter", "php_filter.h"); } diff --git a/ext/gd/config.w32 b/ext/gd/config.w32 index 340424b6bf..8f1c13f610 100644 --- a/ext/gd/config.w32 +++ b/ext/gd/config.w32 @@ -66,6 +66,8 @@ if (PHP_GD != "no") { /D USE_GD_IOCTX \ /D MSWIN32 \ "); + + PHP_INSTALL_HEADERS("", "ext/gd ext/gd/libgd" ); } else { WARNING("gd not enabled; libraries and headers not found"); } diff --git a/ext/hash/config.w32 b/ext/hash/config.w32 index a880a4b0cc..6a2fcff18f 100644 --- a/ext/hash/config.w32 +++ b/ext/hash/config.w32 @@ -15,6 +15,11 @@ if (PHP_HASH != "no") { AC_DEFINE('HAVE_HASH_EXT', 1); EXTENSION("hash", "hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c " + "hash_tiger.c hash_gost.c hash_snefru.c hash_whirlpool.c " - + "hash_adler32.c hash_crc32.c hash_salsa.c"); + + "hash_adler32.c hash_crc32.c hash_salsa.c hash_joaat.c hash_fnv.c"); + + PHP_INSTALL_HEADERS("ext/hash/", "php_hash.h php_hash_md.h php_hash_sha.h php_hash_ripemd.h " + + "php_hash_haval.h php_hash_tiger.h php_hash_gost.h php_hash_snefru.h " + + "php_hash_whirlpool.h php_hash_adler32.h php_hash_crc32.h php_hash_salsa.h " + + "php_hash_types.h"); } diff --git a/ext/iconv/config.w32 b/ext/iconv/config.w32 index 7bc649e2ad..00ab272423 100644 --- a/ext/iconv/config.w32 +++ b/ext/iconv/config.w32 @@ -19,6 +19,7 @@ if (PHP_ICONV != "no") { if (!PHP_ICONV_SHARED) { ADD_DEF_FILE("ext\\iconv\\php_iconv.def"); } + PHP_INSTALL_HEADERS("", "ext/iconv"); } else { WARNING("iconv support can't be enabled, libraries or headers are missing") PHP_ICONV = "no"; diff --git a/ext/libxml/config.w32 b/ext/libxml/config.w32 index 7c9988f7e9..92144f9ad0 100644 --- a/ext/libxml/config.w32 +++ b/ext/libxml/config.w32 @@ -15,6 +15,7 @@ if (PHP_LIBXML == "yes") { if (!PHP_LIBXML_SHARED) { ADD_DEF_FILE("ext\\libxml\\php_libxml2.def"); } + PHP_INSTALL_HEADERS("ext/libxml/", "php_libxml.h"); } else { WARNING("libxml support can't be enabled, iconv or libxml are missing") PHP_LIBXML = "no" diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32 index 2fdd9d3514..ae0972f62a 100644 --- a/ext/mbstring/config.w32 +++ b/ext/mbstring/config.w32 @@ -54,6 +54,8 @@ if (PHP_MBSTRING != "no") { AC_DEFINE('HAVE_MBSTR_RU', 1, 'RU'); AC_DEFINE('HAVE_MBSTR_TW', 1, 'TW'); + PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); + if (PHP_MBREGEX != "no") { AC_DEFINE('HAVE_STDARG_PROTOTYPES', 1, 'have stdarg.h'); AC_DEFINE('HAVE_MBREGEX', 1); @@ -72,5 +74,6 @@ if (PHP_MBSTRING != "no") { koi8.c koi8_r.c sjis.c utf8.c unicode.c utf16_be.c utf16_le.c \ utf32_be.c utf32_le.c gb18030.c", "mbstring"); ADD_SOURCES("ext/mbstring", "php_mbregex.c", "mbstring"); + PHP_INSTALL_HEADERS("ext/mbstring", "php_mbregex.h"); } } diff --git a/ext/mysqli/config.w32 b/ext/mysqli/config.w32 index 8ea72a06db..ab3321ae44 100644 --- a/ext/mysqli/config.w32 +++ b/ext/mysqli/config.w32 @@ -27,6 +27,7 @@ if (PHP_MYSQLI != "no") { AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library'); ADD_EXTENSION_DEP('mysqli', 'mysqlnd', true); MESSAGE("\tmysqlnd build"); + PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h"); } else { if (CHECK_LIB("libmysql.lib", "mysqli", PHP_MYSQLI) && CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_MYSQLI + @@ -35,6 +36,7 @@ if (PHP_MYSQLI != "no") { EXTENSION("mysqli", mysqli_source); AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library'); MESSAGE("\tlibmysql build"); + PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h"); } else { WARNING("mysqli not enabled; libraries and headers not found"); PHP_MYSQLI = "no" diff --git a/ext/mysqlnd/config.w32 b/ext/mysqlnd/config.w32 index ba0ebd90ad..4a32cbcb9d 100644 --- a/ext/mysqlnd/config.w32 +++ b/ext/mysqlnd/config.w32 @@ -25,5 +25,6 @@ if (PHP_MYSQLND != "no") { { AC_DEFINE("MYSQLND_COMPRESSION_ENABLED", 1, "Compression support"); } + PHP_INSTALL_HEADERS("", "ext/mysqlnd"); } } diff --git a/ext/pcre/config.w32 b/ext/pcre/config.w32 index 05b3abcd1a..5d6fa90594 100644 --- a/ext/pcre/config.w32 +++ b/ext/pcre/config.w32 @@ -9,3 +9,4 @@ ADD_DEF_FILE("ext\\pcre\\php_pcre.def"); AC_DEFINE('HAVE_BUNDLED_PCRE', 1, 'Using bundled PCRE library'); AC_DEFINE('HAVE_PCRE', 1, 'Have PCRE library'); PHP_PCRE="yes"; +PHP_INSTALL_HEADERS("ext/pcre", "php_pcre.h pcrelib/"); diff --git a/ext/pdo/config.w32 b/ext/pdo/config.w32 index 9fb3801981..c85f2e55e4 100755 --- a/ext/pdo/config.w32 +++ b/ext/pdo/config.w32 @@ -6,4 +6,5 @@ ARG_ENABLE("pdo", "Enable PHP Data Objects support", "no"); if (PHP_PDO != "no") { EXTENSION('pdo', 'pdo.c pdo_dbh.c pdo_stmt.c pdo_sql_parser.c pdo_sqlstate.c', false /* force static, PHP_PDO_SHARED is broken yet somehow */); ADD_EXTENSION_DEP('pdo', 'spl', true); + PHP_INSTALL_HEADERS("ext/pdo", "php_pdo.h php_pdo_driver.h"); } diff --git a/ext/session/config.w32 b/ext/session/config.w32 index 8225dc53d6..27114f11d3 100644 --- a/ext/session/config.w32 +++ b/ext/session/config.w32 @@ -6,4 +6,5 @@ ARG_ENABLE("session", "session support", "yes"); if (PHP_SESSION == "yes") { EXTENSION("session", "session.c mod_files.c mod_mm.c mod_user.c", false /* never shared */); AC_DEFINE("HAVE_PHP_SESSION", 1, "Session support"); + PHP_INSTALL_HEADERS("ext/session/", "mod_mm.h"); } diff --git a/ext/sockets/config.w32 b/ext/sockets/config.w32 index 1672f85b15..8b63381900 100644 --- a/ext/sockets/config.w32 +++ b/ext/sockets/config.w32 @@ -8,6 +8,7 @@ if (PHP_SOCKETS != "no") { && CHECK_HEADER_ADD_INCLUDE("winsock.h", "CFLAGS_SOCKETS")) { EXTENSION('sockets', 'sockets.c'); AC_DEFINE('HAVE_SOCKETS', 1); + PHP_INSTALL_HEADERS("ext/sockets", "php_sockets.h"); } else { WARNING("sockets not enabled; libraries and headers not found"); } diff --git a/ext/spl/config.w32 b/ext/spl/config.w32 index e594b0eb48..77cbd20346 100644 --- a/ext/spl/config.w32 +++ b/ext/spl/config.w32 @@ -4,3 +4,4 @@ EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c", false /*never shared */); AC_DEFINE('HAVE_SPL', 1); PHP_SPL="yes"; +PHP_INSTALL_HEADERS("ext/spl", "php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_dllist.h spl_heap.h spl_fixedarray.h"); diff --git a/ext/sqlite3/config.w32 b/ext/sqlite3/config.w32 index 4d9dca40ae..01e4625fed 100644 --- a/ext/sqlite3/config.w32 +++ b/ext/sqlite3/config.w32 @@ -10,4 +10,5 @@ if (PHP_SQLITE3 != "no") { ADD_SOURCES(configure_module_dirname + "/libsqlite", "sqlite3.c", "sqlite3"); AC_DEFINE("HAVE_SQLITE3", 1, "SQLite support"); + PHP_INSTALL_HEADERS("ext/sqlite3", "libsqlite/sqlite3.h"); } diff --git a/ext/standard/config.w32 b/ext/standard/config.w32 index 70b250137a..d14b859e9d 100644 --- a/ext/standard/config.w32 +++ b/ext/standard/config.w32 @@ -21,7 +21,8 @@ EXTENSION("standard", "array.c base64.c basic_functions.c browscap.c \ php_fopen_wrapper.c credits.c css.c var_unserializer.c ftok.c sha1.c \ user_filters.c uuencode.c filters.c proc_open.c \ streamsfuncs.c http.c flock_compat.c", false /* never shared */); - + PHP_INSTALL_HEADERS("", "ext/standard"); if (PHP_MBREGEX != "no") { CHECK_HEADER_ADD_INCLUDE("oniguruma.h", "CFLAGS_STANDARD", PHP_MBREGEX + ";ext\\mbstring\\oniguruma") } +PHP_INSTALL_HEADERS("", "ext/standard"); diff --git a/ext/xml/config.w32 b/ext/xml/config.w32 index ed0352701b..c0bdfd56ef 100644 --- a/ext/xml/config.w32 +++ b/ext/xml/config.w32 @@ -11,6 +11,7 @@ if (PHP_XML == "yes") { if (!PHP_XML_SHARED) { ADD_FLAG("CFLAGS_XML", "/D LIBXML_STATIC "); } + PHP_INSTALL_HEADERS("", "ext/xml"); } else { WARNING("xml support can't be enabled, libraries or headers are missing") PHP_ZLIB = "no" diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 1b42c94457..38a0b5b5b8 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -735,8 +735,6 @@ static const zend_function_entry zip_functions[] = { static zend_class_entry *zip_class_entry; static zend_object_handlers zip_object_handlers; -static HashTable zip_prop_handlers; - typedef int (*zip_read_int_t)(struct zip *za TSRMLS_DC); typedef char *(*zip_read_const_char_t)(struct zip *za, int *len TSRMLS_DC); typedef char *(*zip_read_const_char_from_ze_t)(ze_zip_object *obj TSRMLS_DC); diff --git a/win32/build/Makefile b/win32/build/Makefile index 1377342991..203b03850d 100644 --- a/win32/build/Makefile +++ b/win32/build/Makefile @@ -152,7 +152,23 @@ msi-installer: dist $(BUILD_DIR)\php.exe ..\php-installer\build-installer.php "$(BUILD_DIR)" "$(PHPDLL)" "$(SAPI_TARGETS)" "$(EXT_TARGETS)" "$(PECL_TARGETS)" # need to redirect, since INSTALL is a file in the root... -install: really-install +install: really-install install-devel install-lib + +install-lib: + @if not exist $(PHP_PREFIX)\lib mkdir $(PHP_PREFIX)\lib >nul + @copy $(BUILD_DIR)\$(PHPLIB) $(PHP_PREFIX)\lib /y >nul + +install-devel: install-headers + @if not exist $(PHP_PREFIX)\script mkdir $(PHP_PREFIX)\script >nul + @if not exist $(PHP_PREFIX)\build mkdir $(PHP_PREFIX)\build >nul + @copy win32\build\confutils.js $(PHP_PREFIX)\script\ /y >nul + @copy win32\build\configure.tail $(PHP_PREFIX)\script\ /y >nul + @copy win32\build\config.w32.phpize.in $(PHP_PREFIX)\script\ /y >nul + @copy win32\build\Makefile.phpize $(PHP_PREFIX)\script\ /y >nul + @copy win32\build\phpize.bat $(PHP_PREFIX)\ /y >nul + @copy win32\build\template.rc $(PHP_PREFIX)\build\ /y >nul + @copy $(BUILD_DIR)\devel\config.phpize.js $(PHP_PREFIX)\script\ /y >nul + @copy $(BUILD_DIR)\devel\phpize.js $(PHP_PREFIX)\script\ /y >nul really-install: @if not exist $(PHP_PREFIX) mkdir $(PHP_PREFIX) @@ -162,5 +178,3 @@ really-install: @echo Registering event source with syslog (requires admin rights) @echo It's okay for this step to fail: -$(PHP_PREFIX)\php.exe -n -dextension_dir=$(PHP_PREFIX) win32/build/registersyslog.php $(PHP_PREFIX)\$(PHPDLL) - - diff --git a/win32/build/Makefile.phpize b/win32/build/Makefile.phpize new file mode 100644 index 0000000000..17cfc90fbd --- /dev/null +++ b/win32/build/Makefile.phpize @@ -0,0 +1,38 @@ +CC="$(PHP_CL)"
+LD="$(LINK)"
+MC="$(MC)"
+MT="$(MT)"
+
+PHPSDK_DIR=$(PHP_DIR)
+PHPLIB=$(PHPSDK_DIR)\lib\$(PHPLIB)
+LDFLAGS=/libpath:"$(PHPSDK_DIR)\lib\;$(PHPSDK_DIR)"
+
+CFLAGS=/nologo /FD $(BASE_INCLUDES) /D _WINDOWS /D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D_USE_32BIT_TIME_T=1 /D ZEND_WIN32_FORCE_INLINE /GF /D ZEND_DEBUG=0 /D ZTS=1 /D FD_SETSIZE=256
+CFLAGS_PHP=/D _USRDLL /D PHP5DLLTS_EXPORTS /D PHP_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x500 /D COMPILE_DL_AJAXMIN
+
+all: $(EXT_TARGETS) $(PECL_TARGETS)
+
+build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB)
+
+clean-pecl:
+ @echo Cleaning PECL targets only
+ -rd /s /q $(BUILD_DIR)\pecl
+
+clean-all:
+ @echo Cleaning standard build dirs
+ @for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @rd /s /q %D
+ -@del /f /q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.manifest $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\*.rc $(BUILD_DIR)\*.dbg $(BUILD_DIR)\*.bin $(BUILD_DIR)\php*.dll $(BUILD_DIR)\php*.exe > NUL
+
+clean: clean-pecl
+ @echo Cleaning distribution build dirs
+ @for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @del /F /Q %D\*.* > NUL
+ -@del /F /Q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\php-$(PHP_VERSION_STRING)-Win32.zip $(BUILD_DIR)\pecl-$(PHP_VERSION_STRING)-Win32.zip > NUL
+
+!if $(MT) == ""
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+!else
+_VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
diff --git a/win32/build/buildconf.js b/win32/build/buildconf.js index d26b4c7403..b4194ad203 100644 --- a/win32/build/buildconf.js +++ b/win32/build/buildconf.js @@ -209,6 +209,7 @@ buildconf_process_args(); // Write the head of the configure script
C.WriteLine("/* This file automatically generated from win32/build/confutils.js */");
+C.WriteLine("MODE_PHPIZE=false;");
C.Write(file_get_contents("win32/build/confutils.js"));
// If project files were requested, pull in the code to generate them
diff --git a/win32/build/config.w32 b/win32/build/config.w32 index 4b29cd925b..99cb09c7cb 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -102,7 +102,7 @@ if (PHP_DEBUG == "yes" && PHP_DEBUG_PACK == "yes") { } ARG_ENABLE('zts', 'Thread safety', 'yes'); // Configures the hard-coded installation dir -ARG_ENABLE('prefix', 'where PHP will be installed', ''); +ARG_WITH('prefix', 'where PHP will be installed', ''); if (PHP_PREFIX == '') { PHP_PREFIX = "C:\\php"; if (PHP_DEBUG == "yes") @@ -199,6 +199,9 @@ if (PHP_DEBUG == "yes") { if (PHP_ZTS == "yes") { ADD_FLAG("CFLAGS", "/D ZTS=1"); + ADD_FLAG("ZTS", "1"); +} else { + ADD_FLAG("ZTS", "0"); } DEFINE("PHP_ZTS_ARCHIVE_POSTFIX", PHP_ZTS == "yes" ? '' : "-nts"); @@ -351,6 +354,8 @@ ADD_SOURCES("main/streams", "streams.c cast.c memory.c filter.c plain_wrapper.c ADD_SOURCES("win32", "glob.c readdir.c \ registry.c select.c sendmail.c time.c winutil.c wsyslog.c globals.c"); +PHP_INSTALL_HEADERS("", "Zend/ TSRM/ main/ main/streams/ win32/"); + STDOUT.WriteBlankLines(1); /* Can we build with IPv6 support? */ diff --git a/win32/build/config.w32.phpize.in b/win32/build/config.w32.phpize.in new file mode 100644 index 0000000000..d5b71c964e --- /dev/null +++ b/win32/build/config.w32.phpize.in @@ -0,0 +1,340 @@ +// vim:ft=javascript
+// $Id: config.w32 305923 2010-12-02 23:23:14Z pajoye $
+// "Master" config file; think of it as a configure.in
+// equivalent.
+
+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]);
+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");
+
+// do we use x64 or 80x86 version of compiler?
+X64 = probe_binary(PHP_CL, 64, null, 'PHP_CL');
+if (X64) {
+ STDOUT.WriteLine(" Detected 64-bit compiler");
+} else {
+ STDOUT.WriteLine(" Detected 32-bit compiler");
+}
+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"));
+}
+
+// stick objects somewhere outside of the source tree
+ARG_ENABLE('object-out-dir', 'Alternate location for binary objects during build', '');
+if (PHP_OBJECT_OUT_DIR.length) {
+ PHP_OBJECT_OUT_DIR = FSO.GetAbsolutePathName(PHP_OBJECT_OUT_DIR);
+ if (!FSO.FolderExists(PHP_OBJECT_OUT_DIR)) {
+ ERROR('you chosen output directory ' + PHP_OBJECT_OUT_DIR + ' does not exist');
+ }
+ PHP_OBJECT_OUT_DIR += '\\';
+} else if (X64) {
+ if (!FSO.FolderExists("x64")) {
+ FSO.CreateFolder("x64");
+ }
+ PHP_OBJECT_OUT_DIR = 'x64\\';
+}
+
+ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
+ARG_ENABLE('debug-pack', 'Release binaries with external debug symbols (--enable-debug must not be specified)', 'no');
+if (PHP_DEBUG == "yes" && PHP_DEBUG_PACK == "yes") {
+ ERROR("Use of both --enable-debug and --enable-debug-pack not allowed.");
+}
+
+DEFINE('PHP_PREFIX', PHP_PREFIX);
+
+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 ");
+
+// CFLAGS for building the PHP dll
+DEFINE("CFLAGS_PHP", "/D _USRDLL /D PHP5DLLTS_EXPORTS /D PHP_EXPORTS \
+/D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x500");
+
+DEFINE('CFLAGS_PHP_OBJ', '$(CFLAGS_PHP) $(STATIC_EXT_CFLAGS)');
+
+// General CFLAGS for building objects
+DEFINE("CFLAGS", "/nologo /FD $(BASE_INCLUDES) /D _WINDOWS \
+/D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /W3 ");
+
+if (VCVERS < 1400) {
+ // Enable automatic precompiled headers
+ ADD_FLAG('CFLAGS', ' /YX ');
+
+ if (PHP_DEBUG == "yes") {
+ // Set some debug/release specific options
+ ADD_FLAG('CFLAGS', ' /GZ ');
+ }
+}
+
+if (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.
+ if (X64) {
+ ADD_FLAG('CFLAGS', ' /wd4996 /Wp64 ');
+ } else {
+ ADD_FLAG('CFLAGS', ' /wd4996 /D_USE_32BIT_TIME_T=1 ');
+ }
+
+ if (PHP_DEBUG == "yes") {
+ // Set some debug/release specific options
+ ADD_FLAG('CFLAGS', ' /RTC1 ');
+ }
+}
+
+ARG_WITH('prefix', 'PHP installation prefix', '');
+ARG_WITH('mp', 'Tell VC9+ use up to [n,auto,disable] processes for compilation', 'auto');
+if (VCVERS >= 1500 && PHP_MP != 'disable') {
+ // no from disable-all
+ if(PHP_MP == 'auto' || PHP_MP == 'no') {
+ ADD_FLAG('CFLAGS', ' /MP ');
+ } else {
+ if(parseInt(PHP_MP) != 0) {
+ ADD_FLAG('CFLAGS', ' /MP'+ PHP_MP +' ');
+ } else {
+ STDOUT.WriteLine('WARNING: Invalid argument for MP: ' + PHP_MP);
+ }
+ }
+}
+
+/* For snapshot builders, where can we find the additional
+ * files that make up the snapshot template? */
+ARG_WITH("snapshot-template", "Path to snapshot builder template dir", "no");
+
+// General DLL link flags
+DEFINE("DLL_LDFLAGS", "/dll ");
+
+// PHP DLL link flags
+DEFINE("PHP_LDFLAGS", "$(DLL_LDFLAGS)");
+
+// General libs
+// urlmon.lib ole32.lib oleaut32.lib uuid.lib gdi32.lib winspool.lib comdlg32.lib
+DEFINE("LIBS", "kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib");
+
+// Set some debug/release specific options
+if (PHP_DEBUG == "yes") {
+ ADD_FLAG("CFLAGS", "/LDd /MDd /W3 /Gm /Od /D _DEBUG /D ZEND_DEBUG=1 " +
+ (X64?"/Zi":"/ZI"));
+ ADD_FLAG("LDFLAGS", "/debug");
+ // Avoid problems when linking to release libraries that use the release
+ // version of the libc
+ ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:msvcrt");
+} else {
+ // Generate external debug files when --enable-debug-pack is specified
+ if (PHP_DEBUG_PACK == "yes") {
+ ADD_FLAG("CFLAGS", "/Zi");
+ ADD_FLAG("LDFLAGS", "/incremental:no /debug /opt:ref,icf");
+ }
+ // Equivalent to Release_TSInline build -> best optimization
+ ADD_FLAG("CFLAGS", "/LD /MD /W3 /Ox /D NDebug /D NDEBUG /D ZEND_WIN32_FORCE_INLINE /GF /D ZEND_DEBUG=0");
+
+ // if you have VS.Net /GS hardens the binary against buffer overruns
+ // ADD_FLAG("CFLAGS", "/GS");
+}
+
+if (PHP_ZTS == "yes") {
+ ADD_FLAG("CFLAGS", "/D ZTS=1");
+}
+
+DEFINE("PHP_ZTS_ARCHIVE_POSTFIX", PHP_ZTS == "yes" ? '' : "-nts");
+
+
+// we want msvcrt in the PHP DLL
+ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:libcmt");
+
+// set up the build dir and DLL name
+if (PHP_DEBUG == "yes" && PHP_ZTS == "yes") {
+ DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Debug_TS");
+ DEFINE("PHPDLL", "php" + PHP_VERSION + "ts_debug.dll");
+ DEFINE("PHPLIB", "php" + PHP_VERSION + "ts_debug.lib");
+} else if (PHP_DEBUG == "yes" && PHP_ZTS == "no") {
+ DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Debug");
+ DEFINE("PHPDLL", "php" + PHP_VERSION + "_debug.dll");
+ DEFINE("PHPLIB", "php" + PHP_VERSION + "_debug.lib");
+} else if (PHP_DEBUG == "no" && PHP_ZTS == "yes") {
+ DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Release_TS");
+ DEFINE("PHPDLL", "php" + PHP_VERSION + "ts.dll");
+ DEFINE("PHPLIB", "php" + PHP_VERSION + "ts.lib");
+} else if (PHP_DEBUG == "no" && PHP_ZTS == "no") {
+ DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Release");
+ DEFINE("PHPDLL", "php" + PHP_VERSION + ".dll");
+ DEFINE("PHPLIB", "php" + PHP_VERSION + ".lib");
+}
+
+// Find the php_build dir - it contains headers and libraries
+// that we need
+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');
+
+if (PHP_PHP_BUILD == 'no') {
+ if (FSO.FolderExists("..\\deps")) {
+ PHP_PHP_BUILD = "..\\deps";
+ } else {
+ if (FSO.FolderExists("..\\php_build")) {
+ PHP_PHP_BUILD = "..\\php_build";
+ } else {
+ if (X64) {
+ if (FSO.FolderExists("..\\win64build")) {
+ PHP_PHP_BUILD = "..\\win64build";
+ } else if (FSO.FolderExists("..\\php-win64-dev\\php_build")) {
+ PHP_PHP_BUILD = "..\\php-win64-dev\\php_build";
+ }
+ } else {
+ if (FSO.FolderExists("..\\win32build")) {
+ PHP_PHP_BUILD = "..\\win32build";
+ } else if (FSO.FolderExists("..\\php-win32-dev\\php_build")) {
+ PHP_PHP_BUILD = "..\\php-win32-dev\\php_build";
+ }
+ }
+ }
+ }
+ PHP_PHP_BUILD = FSO.GetAbsolutePathName(PHP_PHP_BUILD);
+}
+DEFINE("PHP_BUILD", PHP_PHP_BUILD);
+
+ARG_WITH('extra-includes', 'Extra include path to use when building everything', '');
+ARG_WITH('extra-libs', 'Extra library path to use when linking everything', '');
+
+var php_usual_include_suspects = PHP_PHP_BUILD+"\\include";
+var php_usual_lib_suspects = PHP_PHP_BUILD+"\\lib";
+
+ADD_FLAG("CFLAGS", '/I "' + php_usual_include_suspects + '" ');
+ADD_FLAG("LDFLAGS", '/libpath:"\\"' + php_usual_lib_suspects + '\\"" ');
+
+// Poke around for some headers
+function probe_basic_headers()
+{
+ var p;
+
+ if (PHP_PHP_BUILD != "no") {
+ php_usual_include_suspects += ";" + PHP_PHP_BUILD + "\\include";
+ php_usual_lib_suspects += ";" + PHP_PHP_BUILD + "\\lib";
+ }
+}
+
+function add_extra_dirs()
+{
+ var path, i, f;
+
+ if (PHP_EXTRA_INCLUDES.length) {
+ path = PHP_EXTRA_INCLUDES.split(';');
+ for (i = 0; i < path.length; i++) {
+ f = FSO.GetAbsolutePathName(path[i]);
+ if (FSO.FolderExists(f)) {
+ ADD_FLAG("CFLAGS", '/I "' + f + '" ');
+ }
+ }
+ }
+ if (PHP_EXTRA_LIBS.length) {
+ path = PHP_EXTRA_LIBS.split(';');
+ for (i = 0; i < path.length; i++) {
+ f = FSO.GetAbsolutePathName(path[i]);
+ if (FSO.FolderExists(f)) {
+ if (VCVERS <= 1200 && f.indexOf(" ") >= 0) {
+ ADD_FLAG("LDFLAGS", '/libpath:"\\"' + f + '\\"" ');
+ } else {
+ ADD_FLAG("LDFLAGS", '/libpath:"' + f + '" ');
+ }
+ }
+ }
+ }
+
+}
+
+probe_basic_headers();
+add_extra_dirs();
+
+//DEFINE("PHP_BUILD", PHP_PHP_BUILD);
+
+STDOUT.WriteBlankLines(1);
+STDOUT.WriteLine("Build dir: " + get_define('BUILD_DIR'));
+STDOUT.WriteLine("PHP Core: " + get_define('PHPDLL') + " and " + get_define('PHPLIB'));
+
+
+if (VCVERS == 1200) {
+ AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1);
+}
+
+if (VCVERS >= 1400) {
+ AC_DEFINE('HAVE_STRNLEN', 1);
+}
+
+STDOUT.WriteBlankLines(1);
+
+if (PHP_SNAPSHOT_TEMPLATE == "no") {
+ /* default is as a sibling of the php_build dir */
+ if (FSO.FolderExists(PHP_PHP_BUILD + "\\template")) {
+ PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\template");
+ } else if (FSO.FolderExists(PHP_PHP_BUILD + "\\..\\template")) {
+ PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\..\\template");
+ }
+}
+
+DEFINE('SNAPSHOT_TEMPLATE', PHP_SNAPSHOT_TEMPLATE);
+
+if (PHP_DSP != "no") {
+ if (FSO.FolderExists("tmp")) {
+ FSO.DeleteFolder("tmp");
+ }
+ FSO.CreateFolder("tmp");
+}
+
+AC_DEFINE("PHP_DIR", PHP_DIR);
+DEFINE("PHP_DIR", PHP_DIR);
diff --git a/win32/build/configure.tail b/win32/build/configure.tail index 1977abb807..70625a43d4 100644 --- a/win32/build/configure.tail +++ b/win32/build/configure.tail @@ -2,7 +2,7 @@ // $Id$ // tail end of configure -if (sapi_enabled.length < 1) { +if (!MODE_PHPIZE && sapi_enabled.length < 1) { MESSAGE(""); ERROR("No SAPI selected, please enable at least one SAPI."); } diff --git a/win32/build/confutils.js b/win32/build/confutils.js index ed3f2424f9..a3bde86af4 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -34,6 +34,9 @@ var extensions_enabled = new Array(); /* Store the SAPI enabled (summary + QA check) */
var sapi_enabled = new Array();
+/* Store the headers to install */
+var headers_install = new Array();
+
/* Mapping CL version > human readable name */
var VC_VERSIONS = new Array();
VC_VERSIONS[1200] = 'MSVC6 (Visual C++ 6.0)';
@@ -55,11 +58,18 @@ if (PROGRAM_FILES == null) { PROGRAM_FILES = "C:\\Program Files";
}
-if (!FSO.FileExists("README.SVN-RULES")) {
- STDERR.WriteLine("Must be run from the root of the php source");
- WScript.Quit(10);
+if (MODE_PHPIZE) {
+ if (!FSO.FileExists("config.w32")) {
+ STDERR.WriteLine("Must be run from the root of the extension source");
+ WScript.Quit(10);
+ }
+} else {
+ if (!FSO.FileExists("README.SVN-RULES")) {
+ STDERR.WriteLine("Must be run from the root of the php source");
+ WScript.Quit(10);
+ }
}
-
+
var CWD = WshShell.CurrentDirectory;
if (typeof(CWD) == "undefined") {
@@ -106,7 +116,9 @@ build_dirs = new Array(); extension_include_code = "";
extension_module_ptrs = "";
-get_version_numbers();
+if (!MODE_PHPIZE) {
+ get_version_numbers();
+}
/* execute a command and return the output as a string */
function execute(command_line)
@@ -330,7 +342,13 @@ function conf_process_args() arg.seen = true;
analyzed = analyze_arg(argval);
- shared = analyzed[0];
+
+ /* Force shared when called after phpize */
+ if (MODE_PHPIZE) {
+ shared = "shared";
+ } else {
+ shared = analyzed[0];
+ }
argval = analyzed[1];
if (argname == arg.imparg) {
@@ -972,13 +990,21 @@ function generate_version_info_resource(makefiletarget, basename, creditspath, s creditspath + '\\template.rc');
return resname;
}
-
- MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": win32\\build\\template.rc");
- MFO.WriteLine("\t$(RC) /n /fo $(BUILD_DIR)\\" + resname + logo + debug +
- ' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"'
- + makefiletarget + '\\"" /d URL="\\"' + project_url +
- '\\"" /d INTERNAL_NAME="\\"' + internal_name + versioning +
- '\\"" /d THANKS_GUYS="\\"' + thanks + '\\"" win32\\build\\template.rc');
+ if (MODE_PHPIZE) {
+ MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": $(PHP_DIR)\\build\\template.rc");
+ MFO.WriteLine("\t$(RC) /I $(PHP_DIR)/include /n /fo $(BUILD_DIR)\\" + resname + logo + debug +
+ ' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"'
+ + makefiletarget + '\\"" /d URL="\\"' + project_url +
+ '\\"" /d INTERNAL_NAME="\\"' + internal_name + versioning +
+ '\\"" /d THANKS_GUYS="\\"' + thanks + '\\"" $(PHP_DIR)\\build\\template.rc');
+ } else {
+ MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": win32\\build\\template.rc");
+ MFO.WriteLine("\t$(RC) /n /fo $(BUILD_DIR)\\" + resname + logo + debug +
+ ' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"'
+ + makefiletarget + '\\"" /d URL="\\"' + project_url +
+ '\\"" /d INTERNAL_NAME="\\"' + internal_name + versioning +
+ '\\"" /d THANKS_GUYS="\\"' + thanks + '\\"" win32\\build\\template.rc');
+ }
MFO.WriteBlankLines(1);
return resname;
}
@@ -1017,7 +1043,11 @@ function SAPI(sapiname, file_list, makefiletarget, cflags, obj_dir) MFO.WriteLine(makefiletarget + ": $(BUILD_DIR)\\" + makefiletarget);
MFO.WriteLine("\t@echo SAPI " + sapiname_for_printing + " build complete");
- MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
+ if (MODE_PHPIZE) {
+ MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(PHPLIB) $(BUILD_DIR)\\" + resname);
+ } else {
+ MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
+ }
if (makefiletarget.match(new RegExp("\\.dll$"))) {
ldflags = "/dll $(LDFLAGS)";
@@ -1030,11 +1060,20 @@ function SAPI(sapiname, file_list, makefiletarget, cflags, obj_dir) manifest = "-@$(_VC_MANIFEST_EMBED_EXE)";
}
- if (ld) {
- MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
+ if (MODE_PHPIZE) {
+ if (ld) {
+ MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
+ } else {
+ ld = "@$(CC)";
+ MFO.WriteLine("\t" + ld + " /nologo " + " $(" + SAPI + "_GLOBAL_OBJS) $(PHPLIB) $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(LDFLAGS_" + SAPI + ")");
+ }
} else {
- ld = "@$(CC)";
- MFO.WriteLine("\t" + ld + " /nologo " + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(LDFLAGS_" + SAPI + ")");
+ if (ld) {
+ MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
+ } else {
+ ld = "@$(CC)";
+ MFO.WriteLine("\t" + ld + " /nologo " + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(LDFLAGS_" + SAPI + ")");
+ }
}
if (manifest) {
@@ -1199,8 +1238,13 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir) MFO.WriteLine("$(BUILD_DIR)\\" + libname + ": $(BUILD_DIR)\\" + dllname);
MFO.WriteBlankLines(1);
- MFO.WriteLine("$(BUILD_DIR)\\" + dllname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
- MFO.WriteLine("\t" + ld + " $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ")");
+ if (MODE_PHPIZE) {
+ MFO.WriteLine("$(BUILD_DIR)\\" + dllname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(PHPLIB) $(BUILD_DIR)\\" + resname);
+ MFO.WriteLine("\t" + ld + " $(" + EXT + "_GLOBAL_OBJS) $(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ")");
+ } else {
+ MFO.WriteLine("$(BUILD_DIR)\\" + dllname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
+ MFO.WriteLine("\t" + ld + " $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ")");
+ }
MFO.WriteLine("\t-@$(_VC_MANIFEST_EMBED_DLL)");
MFO.WriteBlankLines(1);
@@ -1314,7 +1358,7 @@ function ADD_SOURCES(dir, file_list, target, obj_dir) obj = src.replace(re, ".obj");
tv += " " + sub_build + obj;
- if (PHP_ONE_SHOT == "yes") {
+ if (!MODE_PHPIZE && PHP_ONE_SHOT == "yes") {
if (i > 0) {
objs_line += " " + sub_build + obj;
srcs_line += " " + dir + "\\" + src;
@@ -1328,7 +1372,7 @@ function ADD_SOURCES(dir, file_list, target, obj_dir) }
}
- if (PHP_ONE_SHOT == "yes") {
+ if (!MODE_PHPIZE && PHP_ONE_SHOT == "yes") {
MFO.WriteLine(objs_line + ": " + srcs_line);
MFO.WriteLine("\t$(CC) $(" + flags + ") $(CFLAGS) /Fo" + sub_build + " $(" + bd_flags_name + ") /c " + srcs_line);
}
@@ -1475,11 +1519,11 @@ function write_summary() STDOUT.WriteLine("Enabled extensions:");
output_as_table(["Extension", "Mode"], extensions_enabled.sort());
STDOUT.WriteBlankLines(2);
-
- STDOUT.WriteLine("Enabled SAPI:");
- output_as_table(["Sapi Name"], sapi_enabled);
- STDOUT.WriteBlankLines(2);
-
+ if (!MODE_PHPIZE) {
+ STDOUT.WriteLine("Enabled SAPI:");
+ output_as_table(["Sapi Name"], sapi_enabled);
+ STDOUT.WriteBlankLines(2);
+ }
ar[0] = ['Build type', PHP_DEBUG == "yes" ? "Debug" : "Release"];
ar[1] = ['Thread Safety', PHP_ZTS == "yes" ? "Yes" : "No"];
ar[2] = ['Compiler', VC_VERSIONS[VCVERS]];
@@ -1526,9 +1570,11 @@ function generate_files() STDOUT.WriteLine("Generating files...");
generate_makefile();
- generate_internal_functions();
- generate_config_h();
-
+ if (!MODE_PHPIZE) {
+ generate_internal_functions();
+ generate_config_h();
+ generate_phpize();
+ }
STDOUT.WriteLine("Done.");
STDOUT.WriteBlankLines(1);
write_summary();
@@ -1602,13 +1648,54 @@ function generate_config_h() outfile.Close();
}
+function generate_phpize()
+{
+ STDOUT.WriteLine("Generating phpize");
+ dest = get_define("BUILD_DIR") + '/devel';
+
+ if (!FSO.FolderExists(dest)) {
+ FSO.CreateFolder(dest);
+ }
+
+ var MF = FSO.CreateTextFile(dest + "/phpize.js", true);
+ prefix = get_define("PHP_PREFIX");
+ prefix = prefix.replace(new RegExp("/", "g"), "\\");
+ prefix = prefix.replace(new RegExp("\\\\", "g"), "\\\\");
+ MF.WriteLine("var PHP_PREFIX=" + '"' + prefix + '"');
+ MF.WriteLine("var PHP_ZTS=" + '"' + (PHP_ZTS.toLowerCase() == "yes" ? "Yes" : "No") + '"');
+ MF.WriteLine("var VC_VERSION=" + VCVERS);
+ MF.WriteLine("var PHP_VERSION=" + PHP_VERSION);
+ MF.WriteLine("var PHP_MINOR_VERSION=" + PHP_MINOR_VERSION);
+ MF.WriteLine("var PHP_RELEASE_VERSION=" + PHP_RELEASE_VERSION);
+ MF.WriteBlankLines(2);
+ MF.WriteLine("/* Genereted win32/build/phpize.js.in */");
+ MF.WriteBlankLines(1);
+ MF.Write(file_get_contents("win32/build/phpize.js.in"));
+ MF.Close();
+
+ /* Generate flags file */
+ /* spit out variable definitions */
+ CJ = FSO.CreateTextFile(dest + "/config.phpize.js");
+/*
+ function escape(in) {
+ val = t.replace(new RegExp('("\\\\)', "g"), '\\$1');
+ }
+*/
+ //if (typeof t == "string") {
+
+ CJ.WriteLine("var PHP_ZTS =" + '"' + PHP_ZTS + '"');
+ CJ.WriteLine("var PHP_LIB =" + '"' + get_define('PHPLIB') + '"');
+
+ CJ.WriteBlankLines(1);
+ CJ.Close();
+}
+
function generate_makefile()
{
STDOUT.WriteLine("Generating Makefile");
var MF = FSO.CreateTextFile("Makefile", true);
MF.WriteLine("# Generated by configure.js");
-
/* spit out variable definitions */
var keys = (new VBArray(configure_subst.Keys())).toArray();
var i;
@@ -1625,9 +1712,25 @@ function generate_makefile() }
MF.WriteBlankLines(1);
+ if (MODE_PHPIZE) {
+ var TF = FSO.OpenTextFile(PHP_DIR + "/script/Makefile.phpize", 1);
+ } else {
+ var TF = FSO.OpenTextFile("win32/build/Makefile", 1);
+ }
- var TF = FSO.OpenTextFile("win32/build/Makefile", 1);
MF.Write(TF.ReadAll());
+
+ MF.WriteLine("install-headers:");
+ MF.WriteLine(" @if not exist $(PHP_PREFIX)\\include mkdir $(PHP_PREFIX)\\include >nul");
+ MF.WriteLine(" @for %D in ($(INSTALL_HEADERS_DIR)) do @if not exist $(PHP_PREFIX)\\include\\%D mkdir $(PHP_PREFIX)\\include\\%D >nul");
+ for (i in headers_install) {
+ if (headers_install[i][2] != "") {
+ MF.WriteLine(" @if not exist $(PHP_PREFIX)\\include\\" + headers_install[i][2] + " mkdir $(PHP_PREFIX)\\include\\" +
+ headers_install[i][2] + ">nul");
+ MF.WriteLine(" @copy " + headers_install[i][0] + " " + "$(PHP_PREFIX)\\include\\" + headers_install[i][2] + " /y >nul");
+ }
+ }
+ MF.WriteLine(" @for %D in ($(INSTALL_HEADERS_DIR)) do @copy %D*.h $(PHP_PREFIX)\\include\\%D /y >nul");
TF.Close();
MF.WriteBlankLines(2);
@@ -1848,16 +1951,47 @@ function _inner_glob(base, p, parts) return items;
}
+function PHP_INSTALL_HEADERS(dir, headers_list)
+{
+ headers_list = headers_list.split(new RegExp("\\s+"));
+ headers_list.sort();
+ if (dir.length > 0 && dir.substr(dir.length - 1) != '/') {
+ dir += '/';
+ }
+ dir = dir.replace(new RegExp("/", "g"), "\\");
+
+ for (i in headers_list) {
+ src = headers_list[i];
+ src = src.replace(new RegExp("/", "g"), "\\");
+ isdir = FSO.FolderExists(dir + src);
+ isfile = FSO.FileExists(dir + src);
+ if (isdir) {
+ if (src.length > 0 && src.substr(src.length - 1) != '/') {
+ src += '\\';
+ }
+ headers_install[headers_install.length] = [dir + src, 'dir',''];
+ ADD_FLAG("INSTALL_HEADERS_DIR", dir + src);
+ } else if (isfile) {
+ dirname = FSO.GetParentFolderName(dir + src);
+ headers_install[headers_install.length] = [dir + src, 'file', dirname];
+ ADD_FLAG("INSTALL_HEADERS", dir + src);
+ } else {
+ STDOUT.WriteLine(headers_list);
+ ERROR("Cannot find header " + dir + src);
+ }
+ }
+}
// for snapshot builders, this option will attempt to enable everything
// and you can then build everything, ignoring fatal errors within a module
// by running "nmake snap"
PHP_SNAPSHOT_BUILD = "no";
-ARG_ENABLE('snapshot-build', 'Build a snapshot; turns on everything it can and ignores build errors', 'no');
-
-// one-shot build optimizes build by asking compiler to build
-// several objects at once, reducing overhead of starting new
-// compiler processes.
-ARG_ENABLE('one-shot', 'Optimize for fast build - best for release and snapshot builders, not so hot for edit-and-rebuild hacking', 'no');
+if (!MODE_PHPIZE) {
+ ARG_ENABLE('snapshot-build', 'Build a snapshot; turns on everything it can and ignores build errors', 'no');
+ // one-shot build optimizes build by asking compiler to build
+ // several objects at once, reducing overhead of starting new
+ // compiler processes.
+ ARG_ENABLE('one-shot', 'Optimize for fast build - best for release and snapshot builders, not so hot for edit-and-rebuild hacking', 'no');
+}
diff --git a/win32/build/phpize.bat b/win32/build/phpize.bat new file mode 100644 index 0000000000..c8840d3544 --- /dev/null +++ b/win32/build/phpize.bat @@ -0,0 +1,6 @@ +@echo off +SET PHP_BUILDCONF_PATH=%~dp0 +cscript /nologo %PHP_BUILDCONF_PATH%\script\phpize.js %* +copy %PHP_BUILDCONF_PATH%\win32\build\configure.bat %PHP_BUILDCONF_PATH% > nul +IF NOT EXIST %PHP_BUILDCONF_PATH% (echo Error generating configure script, configure script was not copied) ELSE (echo Now run 'configure --help') +SET PHP_BUILDCONF_PATH= diff --git a/win32/build/phpize.js.in b/win32/build/phpize.js.in new file mode 100644 index 0000000000..92b5da55c9 --- /dev/null +++ b/win32/build/phpize.js.in @@ -0,0 +1,262 @@ +/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2008 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Pierre Joye <pierre1@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+// This generates a configure script for win32 build
+
+var STDOUT = WScript.StdOut;
+
+var FSO = WScript.CreateObject("Scripting.FileSystemObject");
+var C = FSO.CreateTextFile("configure.js", true);
+var B = FSO.CreateTextFile("configure.bat", true);
+var DSP = false;
+re = /\\script/i;
+var PHP_DIR=FSO.GetParentFolderName(WScript.ScriptFullName).replace(re,"");
+
+var modules = "";
+var MODULES = WScript.CreateObject("Scripting.Dictionary");
+var module_dirs = new Array();
+
+function ERROR(msg)
+{
+ STDERR.WriteLine("ERROR: " + msg);
+ WScript.Quit(3);
+}
+
+function file_get_contents(filename)
+{
+ var F = FSO.OpenTextFile(filename, 1);
+ var t = F.ReadAll();
+ F.Close();
+ return t;
+}
+
+function Module_Item(module_name, config_path, dir_line, deps, content)
+{
+ this.module_name = module_name;
+ this.config_path = config_path;
+ this.dir_line = dir_line;
+ this.deps = deps;
+ this.content = content;
+}
+
+function get_module_dep(contents)
+{
+ var re_dep_line = new RegExp("ADD_EXTENSION_DEP\\([^,]*\\s*,\\s*['\"]([^'\"]+)['\"].*\\)", "gm");
+ var calls = contents.match(re_dep_line);
+ if (calls != null) {
+ for (i = 0; i < calls.length; i++) {
+ // now we need the extension name out of this thing
+ if (calls[i].match(re_dep_line)) {
+ deps[deps.length] = RegExp.$1;
+
+ }
+ }
+ }
+}
+
+function find_config_w32(dirname)
+{
+ if (!FSO.FolderExists(dirname)) {
+ return;
+ }
+
+ var f = FSO.GetFolder(dirname);
+ var fc = new Enumerator(f.SubFolders);
+ var c, i, ok, n;
+ var item = null;
+
+ c = dirname + "\\config.w32";
+ if (FSO.FileExists(c)) {
+ var dir_line = "configure_module_dirname = condense_path(FSO.GetParentFolderName('"
+ + c.replace(new RegExp('(["\\\\])', "g"), '\\$1') + "'));\r\n";
+ var contents = file_get_contents(c);
+ var deps = new Array();
+
+ get_module_dep(contents);
+
+ item = new Module_Item(n, c, dir_line, deps, contents);
+ MODULES.Add(n, item);
+ }
+
+ for (; !fc.atEnd(); fc.moveNext()) {
+ /* check if we already picked up a module with the same dirname;
+ * if we have, don't include it here */
+ n = FSO.GetFileName(fc.item());
+ if (n == '.svn' || n == 'tests' || n == '.git') {
+ continue;
+ }
+
+ c = FSO.BuildPath(fc.item(), "config.w32");
+ if (FSO.FileExists(c)) {
+ var dir_line = "configure_module_dirname = condense_path(FSO.GetParentFolderName('"
+ + c.replace(new RegExp('(["\\\\])', "g"), '\\$1') + "'));\r\n";
+ var contents = file_get_contents(c);
+ var deps = new Array();
+
+ get_module_dep(contents);
+
+ item = new Module_Item(n, c, dir_line, deps, contents);
+ MODULES.Add(n, item);
+ }
+ }
+}
+
+function emit_module(item)
+{
+ return item.dir_line + item.content;
+}
+
+function emit_dep_modules(module_names)
+{
+ var i, mod_name, j;
+ var output = "";
+ var item = null;
+
+ for (i in module_names) {
+ mod_name = module_names[i];
+
+ if (MODULES.Exists(mod_name)) {
+ item = MODULES.Item(mod_name);
+ MODULES.Remove(mod_name);
+ if (item.deps.length) {
+ output += emit_dep_modules(item.deps);
+ }
+ output += emit_module(item);
+ }
+ }
+
+ return output;
+}
+
+function gen_modules()
+{
+ var module_names = (new VBArray(MODULES.Keys())).toArray();
+ var i, mod_name, j;
+ var item;
+ var output = "";
+
+ // first, look for modules with empty deps; emit those first
+ for (i in module_names) {
+ STDOUT.WriteLine("module ... " + module_names);
+ mod_name = module_names[i];
+ item = MODULES.Item(mod_name);
+ if (item.deps.length == 0) {
+ MODULES.Remove(mod_name);
+ output += emit_module(item);
+ }
+ }
+
+ // now we are left with modules that have dependencies on other modules
+ module_names = (new VBArray(MODULES.Keys())).toArray();
+ output += emit_dep_modules(module_names);
+
+ return output;
+}
+
+// Process buildconf arguments
+function buildconf_process_args()
+{
+ args = WScript.Arguments;
+
+ for (i = 0; i < args.length; i++) {
+ arg = args(i);
+ // If it is --foo=bar, split on the equals sign
+ arg = arg.split("=", 2);
+ argname = arg[0];
+ if (arg.length > 1) {
+ argval = arg[1];
+ } else {
+ argval = null;
+ }
+
+ if (argname == '--clean' && argval != null) {
+ STDOUT.WriteLine("Cleaning...");
+ return 0;
+ }
+
+ if (argname == '--help') {
+ STDOUT.WriteLine("Usage: phpize [--clean|--help|--version|-v]");
+ return 0;
+ }
+ return 1;
+ }
+}
+
+if (buildconf_process_args() == 0) {
+ WScript.Quit(3);
+}
+STDOUT.WriteLine("Rebuilding configure.js");
+STDOUT.WriteLine(PHP_DIR);
+
+// Write the head of the configure script
+C.WriteLine("/* This file automatically generated from script/confutils.js */");
+C.WriteLine("var MODE_PHPIZE = true;");
+C.WriteLine("var PHP_DIR = " + '"' + PHP_DIR.replace(new RegExp('(["\\\\])', "g"), '\\$1') + '"');
+
+C.Write(file_get_contents(PHP_DIR + "/script/confutils.js"));
+C.Write(file_get_contents(PHP_DIR + "/script/config.phpize.js"));
+
+// If project files were requested, pull in the code to generate them
+if (DSP == true) {
+ C.WriteLine('PHP_DSP="yes"');
+ C.WriteBlankLines(1);
+ C.Write(file_get_contents(PHP_DIR + "win32/build/projectgen.js"));
+} else {
+ C.WriteLine('PHP_DSP="no"');
+ C.WriteBlankLines(1);
+}
+
+// Pull in code from sapi and extensions
+modules = file_get_contents(PHP_DIR + "/script/config.w32.phpize.in");
+
+C.WriteLine("ARG_ENABLE('debug', 'Compile with debugging symbols', \"no\");");
+find_config_w32(".");
+
+// Now generate contents of module based on MODULES, chasing dependencies
+// to ensure that dependent modules are emitted first
+modules += gen_modules();
+
+// Look for ARG_ENABLE or ARG_WITH calls
+re = new RegExp("(ARG_(ENABLE|WITH)\([^;]+\);)", "gm");
+calls = modules.match(re);
+for (i = 0; i < calls.length; i++) {
+ item = calls[i];
+ C.WriteLine("try {");
+ C.WriteLine(item);
+ C.WriteLine("} catch (e) {");
+ C.WriteLine('\tSTDOUT.WriteLine("problem: " + e);');
+ C.WriteLine("}");
+}
+
+C.WriteBlankLines(1);
+C.WriteLine("conf_process_args();");
+C.WriteBlankLines(1);
+
+C.Write(file_get_contents(PHP_DIR + "/script/config.w32.phpize.in"));
+
+// Comment out the calls from their original positions
+modules = modules.replace(re, "/* $1 */");
+C.Write(modules);
+
+
+C.WriteBlankLines(1);
+C.Write(file_get_contents(PHP_DIR + "\\script\\configure.tail"));
+
+B.WriteLine("@echo off");
+B.WriteLine("cscript /nologo configure.js %*");
diff --git a/win32/syslog.reg b/win32/syslog.reg index 2baa88e366..0de1dd7f3c 100644 --- a/win32/syslog.reg +++ b/win32/syslog.reg @@ -1,5 +1,5 @@ REGEDIT4
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\PHP-5.1.0-dev]
+[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\PHP-5.3.5-dev]
"TypesSupported"=dword:00000007
-"EventMessageFile"="C:\\php5\\php5ts.dll"
+"EventMessageFile"="g:\\test\\php53install\\php5ts.dll"
|
