In diesem kurzen Howto möchte ich aufzeigen wie php5 unter Windows Vista mit Visiual Studio 2008 (Express) kompiliert wird.
Die erstellte Version soll php-gtk2 und den Zend Debugger enthalten. (optional) Das Tutorial funktioniert auch unter Vista 64bit.
Zu Beginn benötigt man etwas Zeit und eine dicke Internet Anbindung. ;)
Als Voraussetzung wird folgendes benötigt:
- Visual Studio 2008 Express (kurz VS C++)
microsoft.com/germany/express/download/
(siehe komplett DVD ganz unten) - Windows SDK for Windows Server 2008 and .NET Framework 3.5
microsoft.com/downloads/details.aspx - DAEMON Tools Lite (kurz DT)
daemon-tools.cc/dtcc/download.php
(DAEMON Tools wird verwendet, um die ISO-Images nicht erst brennen zu müssen.)
Nach dem Download von Visual Studio 2008 Express das Image mit DT mounten und C++ installieren. Der SQL Server wird dazu nicht benötigt und kann bei der Installation abgewählt werden, genauso wie sämtliche Dokumentation und jeglicher SampleCode (Beispiel-Code). Wer nicht mit C++ programmiert kann sich die ~2Gb ersparen (gilt auch für das SDK!). Das Windows SDKs mit DT mounten und installieren.
Nachdem obligatorischen Reboot empfiehlt es sich über Windows Update VS C++ zu aktualisieren. VS C++ muss mindestens einmal gestartet werden, damit die Umgebungsvariablen richtig gesetzt werden und das Produkt registrieren werden kann (und sollte!).
Als nächstes die Datei WinResrc.h
unter C:\Program Files\Microsoft SDKs\Windows\v6.1\Include
in das selbe Verzeichnis mit dem Namen winres.h
kopieren. (PHP und Windows sprechen diese Datei mit unterschiedlichen Namen an.)
Folgende Verzeichnisstruktur ist zu empfehlen:
C:\PHPDEV\php5
C:\PHPDEV\php_build
C:\PHPDEV\build
Es ist wichtig, dass die Unterverzeichnisse so heißen.
Es wird noch irgendwo ein Arbeitsverzeichnis für die weiteren Downloads benötigt.
Den Quellcode von php (php.net/downloads.php) herunterladen und direkt nach C:\PHPDEV\php5
entpacken. (Nicht nach C:\PHPDEV\php5\php-5.2.x !!)
Um php zu kompilieren benötigt man noch ein paar weitere Bibliotheken. Entweder man sucht sich diese selbst zusammen oder nutzt das Paket von Edin Kadribašic zu finden hier: http://files.edin.dk/php/win32/zip.zip.
Desweiteren braucht man noch die offiziellen Buildtools von php.net/extra/win32build.zip sowie php.net/extra/bindlib_w32.zip.
win32build.zip
nach C:\PHPDEV\php_build
entpacken und bindlib_w32.zip
nach C:\PHPDEV\bindlib_w32
.
C:\PHPDEV\bindlib_w32\bindlib.dsw
mit VS C++ öffnen und konvertieren lassen.
Nun den Build-Typ von Debug auf Release umstellen und die Projektmappe neukompilieren.
Als nächstes wird das Archiv von Edin Kadribašic entpackt und der Inhalt des Verzeichnisses php_build nach C:\PHPDEV\php_build
kopiert. Vorhandene Dateien können überschrieben werden.
Die neu erstellte Datei C:\PHPDEV\bindlib_w32\Release\resolv.lib
nach C:\PHPDEV\php_build\lib
kopieren und die vorhandene ersetzen.
Um php5 zu kompileren muss noch die Datei C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
angepasst werden. Die entsprechende Zeile (24) muss um das bin Verzeichniss von php_build ergänzt werden:
@set PATH=%DevEnvDir%;%VCINSTALLDIR%\BIN;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\Tools\bin;%FrameworkDir%\%Framework35Version%;%FrameworkDir%\%Framework35Version%\Microsoft .NET Framework 3.5 (Pre-Release Version);%FrameworkDir%\%FrameworkVersion%;%VCINSTALLDIR%\VCPackages;C:\PHPDEV\php_build\bin;%PATH%
Leider hat sich in php-5.2.x ein Fehler eingeschlichen, welcher das kompilieren mit IPv6 scheitern lässt. Um das Problem mit Ipv6 unter Windows zu lösen ist es notwendig die Datei C:\PHPDEV\php5\main\network.c
zu bearbeiten und nach Zeile 98:
#if HAVE_IPV6
const struct in6_addr in6addr_any = {0};
/* IN6ADDR_ANY_INIT; */
#endif
einzufügen.
Unter VS 2008 ist die Variable _vsnprintf
bereits vordefiniert und muss deshalb in den Dateien C:\PHPDEV\php5\ext\mbstring\oniguruma\regint.h
(Zeile 133) und C:\PHPDEV\php5\Zend\zend_config.w32.h
(Zeile 51) auskommentiert werden.
Okay, ready to rumble?
Die Visual Studio 2008-Eingabeaufforderung
öffnen, zu finden im Startmenu unter Visual C++ 9.0 Express Edition->Visual Studio Tools
.
In das Source Verzeichnis wechseln.
cd C:\PHPDEV\php5
Eine Basis Config erstellen:
buildconf
Die Konfiguration anpassen:
cscript /nologo configure.js --with-php-build=\"C:\PHPDEV\php_build\" --enable-prefix=\"C:\PHPDEV\build\" --disable-bcmath --enable-zend-multibyte --enable-cli-win32 --with-bz2=shared --with-curl=shared --with-gettext=shared --enable-mbstring=shared --enable-mbregex=shared --with-mcrypt=shared --with-mysql=shared --with-openssl=shared --with-pspell=shared --enable-zip=shared --with-xmlrpc=shared --with-xsl=shared --disable-sockets
(Die Modulparamter sind nur ein Beispiel. ;-))
Daumen drücken und kompilieren:
nmake
Wenn alles geklappt hat die die Binaries nach C:\PHPDEV\build verschieben:
nmake install
to be continued..
(Der Rest kommt später, aber ich habe schon mal eine Art Build-Template zum kompilieren der php-gtk2 Erweiterung angehängt)