Browse Source
- 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 :)
pull/12/head
- 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 :)
pull/12/head
30 changed files with 876 additions and 50 deletions
-
2ext/date/config.w32
-
1ext/dom/config.w32
-
3ext/ereg/config.w32
-
1ext/filter/config.w32
-
2ext/gd/config.w32
-
7ext/hash/config.w32
-
1ext/iconv/config.w32
-
1ext/libxml/config.w32
-
3ext/mbstring/config.w32
-
2ext/mysqli/config.w32
-
1ext/mysqlnd/config.w32
-
1ext/pcre/config.w32
-
1ext/pdo/config.w32
-
1ext/session/config.w32
-
1ext/sockets/config.w32
-
1ext/spl/config.w32
-
1ext/sqlite3/config.w32
-
3ext/standard/config.w32
-
1ext/xml/config.w32
-
2ext/zip/php_zip.c
-
20win32/build/Makefile
-
38win32/build/Makefile.phpize
-
1win32/build/buildconf.js
-
7win32/build/config.w32
-
340win32/build/config.w32.phpize.in
-
2win32/build/configure.tail
-
210win32/build/confutils.js
-
6win32/build/phpize.bat
-
262win32/build/phpize.js.in
-
4win32/syslog.reg
@ -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 |
|||
|
|||
@ -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); |
|||
@ -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= |
|||
@ -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 %*"); |
|||
@ -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" |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue