[Gelöst] libxml Unterstützung in Freetz Paket PHP - make bricht ab

molfi

Neuer User
Mitglied seit
17 Okt 2006
Beiträge
142
Punkte für Reaktionen
0
Punkte
16
Hallo.

Ich möchte gerne das Freetz PHP Package so modofizieren, dass es mit libxml Unterstützung gebaut wird (statisch gelinkt).

Ein Freetz Paket libxml2 hab ich schon mal gebastelt. Siehe libxml2.mk.txt im Anhang. Das scheint auch soweit zu funktionieren. Configure und make laufen durch mit der Toolchain:
Code:
freetz@freetz-linux:~/freetz/freetz-trunk/toolchain/target/usr/lib$ ls -la libxml*
-rw-r--r-- 1 freetz freetz 2002782 2010-02-14 14:28 libxml2.a
-rwxr-xr-x 1 freetz freetz    1018 2010-02-14 14:28 libxml2.la
lrwxrwxrwx 1 freetz freetz      16 2010-02-14 14:28 libxml2.so -> libxml2.so.2.7.6
lrwxrwxrwx 1 freetz freetz      16 2010-02-14 14:28 libxml2.so.2 -> libxml2.so.2.7.6
-rwxr-xr-x 1 freetz freetz 1641500 2010-02-14 14:28 libxml2.so.2.7.6
freetz@freetz-linux:~/freetz/freetz-trunk/toolchain/target/usr/lib$


Dann bin ich dabei gegangen, das php.mk zu modifizieren (siehe php.mk.txt im Anhang).
Leider bricht make immer ab mit folgender Meldung (hier nur ein Ausschnitt, komplett im Anhang in php_make.zip):
Code:
/home/freetz/freetz/freetz-trunk/source/php-5.2.12/ext/libxml/libxml.c:38:27: error: libxml/parser.h: No such file or directory
[...]
/home/freetz/freetz/freetz-trunk/source/php-5.2.12/ext/libxml/libxml.c:1068: error: 'php_libxml_node_ptr' has no member named '_private'
make[1]: *** [ext/libxml/libxml.lo] Fehler 1
make[1]: *** Warte auf noch nicht beendete Prozesse...
make: *** [source/php-5.2.12/sapi/cgi/php-cgi] Fehler 2
freetz@freetz-linux:~/freetz/freetz-trunk$

Es scheint so, als ob der make Prozess die libs und/oder includes von libxml nicht finden kann (man möge mich berichtitigen falls ich falsch liege).
Code:
touch source/php-5.2.12/.configured
PATH=""/home/freetz/freetz/freetz-trunk/toolchain/target/bin:/home/freetz/freetz/freetz-trunk/toolchain/target/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"" \
		make -j2 -C source/php-5.2.12 \
		CFLAGS="-Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/home/freetz/freetz/freetz-trunk/toolchain/build/gcc-4.2.4-uClibc-0.9.29/mipsel-linux-uclibc/include/libxml2/libxml" \
		LDFLAGS=" -L/home/freetz/freetz/freetz-trunk/toolchain/build/gcc-4.2.4-uClibc-0.9.29/mipsel-linux-uclibc/usr/lib" \
		LIBS="" \
		PHP_STATIC="-all-static" 
make[1]: Betrete Verzeichnis '/home/freetz/freetz/freetz-trunk/source/php-5.2.12'
/bin/sh /home/freetz/freetz/freetz-trunk/source/php-5.2.12/libtool --silent --preserve-dup-deps --mode=compile /home/freetz/freetz/freetz-trunk/toolchain/target/bin/mipsel-linux-uclibc-gcc -Iext/date/lib -Iext/date/ -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12/ext/date/ -DPHP_ATOM_INC -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12/include -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12/main -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12 -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12/ext/date/lib -I/usr/include/libxml2 -I/home/freetz/freetz/freetz-trunk/toolchain/build/gcc-4.2.4-uClibc-0.9.29/mipsel-linux-uclibc/usr/include -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12/TSRM -I/home/freetz/freetz/freetz-trunk/source/php-5.2.12/Zend  -D_XPG_IV  -I/usr/include -Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -c /home/freetz/freetz/freetz-trunk/source/php-5.2.12/ext/date/php_date.c -o ext/date/php_date.lo

Es scheint, als ob immer wieder dieser Wert übergeben würde:
Code:
-I/usr/include/libxml2

Und ich weiß leider nicht, woher dieser Wert kommt und warum nicht die richtigen include Verzeichnisse durchsucht werden.
Vielleicht ist dieses aber auch nur eine Folgeerscheinung und es muss evtl. noch etwas am libxml2.mk geändernt werden.

... jetzt nach ein paar Stunden, schalte ich die Kiste mal ab. Ich glab ich seh den Wald vor lauter Bäumen schon nicht mehr.


Weiß evtl jemand Rat, was an libxml2.mk und/oder php.mk falsch ist?


Danke
molfi
 

Anhänge

  • libxml2.mk.txt
    1.4 KB · Aufrufe: 13
  • php.mk.txt
    4 KB · Aufrufe: 8
  • php_make.zip
    68.8 KB · Aufrufe: 6
Zuletzt bearbeitet:
Ich antworte mal selber, um eine Art Doku/Logbuch für mich selbst und andere aufzubauen.

Wesentlich weiter gekommen bin ich nicht bei diesem Problem.
Was ich noch rausgefunden habe:
Die xml Konfiguration scheint vom PHP configure/make abgefragt zu werden mittels eines Binary namens xml2-config.

Ich hab aber noch keinen Weg gefunden, libxml2 so zu erstellen, dass xml2-config die korrekten Werte wiedergibt.

Gruß
molfi
 
eventuell reicht es PKG_FIX_LIBTOOL_LA-Macro auf xml2-config anzuwenden

libxml2 habe ich übrigens hier schon mal angehängt gehabt
 
Danke, ich probiers am Wochenende mal aus, wenn ein wenig mehr Zeit ist.
Was bewirkt eigentlich dieses PKG_FIX_LIBTOOL_LA ? ... hab das bei einem Ticket für libjpeg gesehen, hab aber dort auch nicht verstanden warum das sein muss und worum es dabei geht.

Gruß
molfi
 
Das ganze würde mich auch interessieren! Habe zwar was fertiges hier gefunden, aber das ist nicht ganz das wahre.
 
@molfi: reicht es an XML features, oder brauchst Du noch was - xml-rpc, xslt (fürs letztere wird libxslt gebraucht)? Ich habe es auf der Box nicht getestet, da ich keine entsprechende php-Anwendung habe. Wenn Du es testen und dein OK geben würdest, i.e. es läuft, dann committe ich es mal.
 

Anhänge

  • libxml2__xml_support_in_php.patch.bz2
    3.2 KB · Aufrufe: 10
@er13: Wow, danke für die libxml Unterstützung im Freetz-PHP Paket.
Die Webanwendung scheint mit dem neuen Binary zu funktionieren.
Der Entwickler der Anwendung schrieb noch folgendes:


libxml hast Du schon implementiert, was meinst Du zu Unterstützung von:
expat
pcre
iconv
zlib


Ist das evtl auch möglich zu Implementieren im Freetz-PHP Paket?

Gruß
molfi
 
@molfi: sollte alles kein großes Problem sein, denn alle libraries sind in freetz bereits vorhanden. pcre-support ist im trunk bereits umgesetzt. Was expat anbetrifft: ist denn diese wirklich notwendig? Reicht libxml nicht aus, ich meine sowohl libxml als auch expat sind xml-Libraries. Was kann denn expat, was libxml nicht kann?

Ich schätze den Aufwand auf höchstens 1 Stunde, kann aber nicht versprechen, dass ich es vor der zweiten März Woche schaffe. Wenn es eilt, versuche es mal selbst. Du sollst in der Config.in für jede der Libraries eine Option einführen. Diese im Makefile als Rebuild-Optionen deklarieren und dann in Abhängigkeit davon, welche gesetzt sind und welche nicht, entsprechende configure-Optionen setzen. Die Frage, welche configure-Optionen es sind, hast Du mit Deinen Links bereits selbst beantwortet.
 
@er13: Der Entwickler mit dem ich Kontakt war, gab mir diese Abhängigkeiten. Ich habe die Anwendung mit den jetzt schon verfügbaren PHP Unterstützungen ausprobiert mit positivem Ergebnis.

Fazit: Test erfolgreich, PHP mit libxml Unterstützung erfolgreich kompiliert. Die "missing dependencies" (expat,pcre,iconv,zlib) wären aber trotzdem nicht schlecht. Eilen tut es auf keinen Fall (der Vollständigkeit halber und weil der Entwickler sie erwähnt hat).


Gruß
molfi
 
@er13
Die neue es-f Version brauchte neue Sachen im PHP.
Ich hab mich dann mal daran getraut und hab versucht Deinen Instruktionen zu folgen. Hat mich mehr als eine Stunde gekostet ;-) ... war aber auch zu erwarten ...

Notwendige Änderungen:
- Curl support
- zlib support
- iconv support
- mbstring feature
- openssl support

Ich hab das folgendermaßen gelöst.
in ../freetz-trunk/make/php/Config.in
Code:
config FREETZ_PACKAGE_PHP_WITH_ICONV
	bool "build with ICONV support"
	depends on FREETZ_PACKAGE_PHP
	select FREETZ_LIB_libiconv if ! FREETZ_PACKAGE_PHP_STATIC
	default n
	help
		This option enables the ICONV support for PHP

config FREETZ_PACKAGE_PHP_WITH_ZLIB
	bool "build with ZLIB support"
	depends on FREETZ_PACKAGE_PHP
	select FREETZ_LIB_libz if ! FREETZ_PACKAGE_PHP_STATIC
	default n
	help
		This option enables the ZLIB support for PHP

config FREETZ_PACKAGE_PHP_WITH_CURL
	bool "build with CURL support (ONLY static!)"
	depends on FREETZ_PACKAGE_PHP
	select FREETZ_PACKAGE_PHP_STATIC
	default n
	help
		This option enables the CURL support for PHP

config FREETZ_PACKAGE_PHP_WITH_SSL
	bool "build with SSL support (ONLY static!)"
	depends on FREETZ_PACKAGE_PHP
	select FREETZ_PACKAGE_PHP_STATIC
	default n
	help
		This option enables the SSL support for PHP

In ../freetz-trunk/make/php/php.mk
Code:
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_ICONV)),y)
$(PKG)_DEPENDS_ON += libiconv
endif
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_ZLIB)),y)
$(PKG)_DEPENDS_ON += zlib
endif
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_CURL)),y)
$(PKG)_DEPENDS_ON += curl
endif
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_SSL)),y)
$(PKG)_DEPENDS_ON += openssl
endif

Code:
$(PKG)_REBUILD_SUBOPTS += FREETZ_PACKAGE_PHP_WITH_ICONV
$(PKG)_REBUILD_SUBOPTS += FREETZ_PACKAGE_PHP_WITH_ZLIB
$(PKG)_REBUILD_SUBOPTS += FREETZ_PACKAGE_PHP_WITH_CURL
$(PKG)_REBUILD_SUBOPTS += FREETZ_PACKAGE_PHP_WITH_SSL

Code:
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_ICONV)),y)
$(PKG)_CONFIGURE_OPTIONS += --with-iconv="$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libiconv"
$(PKG)_CONFIGURE_OPTIONS += --with-iconv-dir="$(TARGET_TOOLCHAIN_STAGING_DIR)/usr"
else
$(PKG)_CONFIGURE_OPTIONS += --without-iconv
endif
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_ZLIB)),y)
$(PKG)_CONFIGURE_OPTIONS += --with-zlib
$(PKG)_CONFIGURE_OPTIONS += --with-zlib-dir="$(TARGET_TOOLCHAIN_STAGING_DIR)/usr"
endif
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_CURL)),y)
$(PKG)_CONFIGURE_OPTIONS += --with-curl="$(TARGET_TOOLCHAIN_STAGING_DIR)/usr"
endif
ifeq ($(strip $(FREETZ_PACKAGE_PHP_WITH_SSL)),y)
$(PKG)_CONFIGURE_OPTIONS += --with-openssl="$(TARGET_TOOLCHAIN_STAGING_DIR)/usr"
endif
$(PKG)_CONFIGURE_OPTIONS += --enable-mbstring


Das PHP Binary wird damit 8 MB groß. Also schon ein riesiger Brocken für solch kleine Kisten wie die Fritzboxen (gerade 7170). Aber ich hab das Binary mal rüberkopiert und: es funktioniert.


Die geänderten Dateinen hänge ich mal hier an.
Es wäre super, wenn Du da nochmal Dein Linux/Freetz-geschultes Auge drüber laufen lassen könntest. Wäre das evtl auch was für den Trunk?


Gruß
molfi
 

Anhänge

  • php.mk.txt
    5.3 KB · Aufrufe: 3
  • Config.in.txt
    2.7 KB · Aufrufe: 4
  • screenshot2.jpg
    screenshot2.jpg
    135.9 KB · Aufrufe: 15
@molfi: habe Deine Änderungen mit einigen Korrekturen eingecheckt
 
Funktionieren einwandfrei.
Danke noch mal.

Gruß
molfi
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.