php5.2 mit GTK+ unter Windows Vista mit VS 2008 kompilieren

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:

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)

Schreibe einen Kommentar