Standard-Include-Pfad vorgegeben?

KobRheTilla

used register
Hi,

ich hab hier ein krudes Problem mit PHP-5.4.4. Ich baue aus den Quellen von php.net, und will mbstring+mbregex mit drin haben:

Code:
./configure --prefix=/foo/bar --enable-mbstring --enable-mbregex
make

Das Problem ist, das make mit folgendem Fehler abranzt:
Code:
/bin/sh /tmp/php-5.4/php-5.4.4/libtool --silent --preserve-dup-deps --mode=compile cc  -Iext/mbstring/ -I/tmp/php-5.4/php-5.4.4/ext/mbstring/ -DPHP_ATOM_INC -I/tmp/php-5.4/php-5.4.4/include -I/tmp/php-5.4/php-5.4.4/main -I/tmp/php-5.4/php-5.4.4 -I/tmp/php-5.4/php-5.4.4/ext/date/lib -I/tmp/php-5.4/php-5.4.4/ext/ereg/regex -I/usr/local/include/libxml2 -I/usr/local/include -I/tmp/php-5.4/php-5.4.4/ext/mbstring/oniguruma -I/tmp/php-5.4/php-5.4.4/ext/mbstring/libmbfl -I/tmp/php-5.4/php-5.4.4/ext/mbstring/libmbfl/mbfl -I/tmp/php-5.4/php-5.4.4/ext/sqlite3/libsqlite -I/tmp/php-5.4/php-5.4.4/TSRM -I/tmp/php-5.4/php-5.4.4/Zend    -g -O2 -fvisibility=hidden  -c /tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c -o ext/mbstring/mbstring.lo
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c: In function '_php_mb_compile_regex':
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:987: error: expected ')' before 'OnigUChar'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:987: warning: cast from pointer to integer of different size
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:988: error: expected ')' before 'OnigUChar'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:988: warning: cast from pointer to integer of different size
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:990: warning: passing argument 2 of 'onig_new' makes pointer from integer without a cast
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:990: warning: passing argument 3 of 'onig_new' makes pointer from integer without a cast
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:991: error: 'OnigUChar' undeclared (first use in this function)
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:991: error: (Each undeclared identifier is reported only once
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:991: error: for each function it appears in.)
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:991: error: expected ';' before 'err_str'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:992: error: 'err_str' undeclared (first use in this function)
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c: In function '_php_mb_match_regex':
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1003: error: expected ')' before 'OnigUChar'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1003: warning: cast from pointer to integer of different size
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1004: error: expected ')' before 'OnigUChar'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1004: warning: cast from pointer to integer of different size
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1004: error: expected ')' before 'OnigUChar'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1004: warning: cast from pointer to integer of different size
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1005: error: expected ')' before 'OnigUChar'
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1005: warning: cast from pointer to integer of different size
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1005: warning: passing argument 2 of 'onig_search' makes pointer from integer without a cast
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1005: warning: passing argument 3 of 'onig_search' makes pointer from integer without a cast
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1005: warning: passing argument 4 of 'onig_search' makes pointer from integer without a cast
/tmp/php-5.4/php-5.4.4/ext/mbstring/mbstring.c:1005: warning: passing argument 5 of 'onig_search' makes pointer from integer without a cast
*** Error code 1

Nun hab ich herausgefunden, dass es daran liegt, dass auf dem System die Bibliothek oniguruma (2.5.8) bereits installiert ist. PHP soll aber das beigepackte (bundled) oniguruma benutzen.

Ich habe nun mal spaßeshalber o.g. libtool-Aufruf angepasst und überall -I/usr/local/include entfernt, sodass sichergestellt wird, dass keine Headerfiles aus den Ports benutzt werden - das geht.

Meine Frage nun: ist der Includepfad /usr/local/include irgendwo im System als Standard definiert oder ist der Fehler in den Automake/Autoconf-Skripten von PHP zu suchen?

Beste Grüße,
Rob
 
Der wird in der Umgebungsvariable CFLAGS (für C) oder CXXFLAGS (für C++) gesetzt. Linker-Argumente können per LDFLAGS gesetzt werden. Für csh und Abkömmlinge:
Code:
% setenv CFLAGS -I/usr/local/include
% setenv CXXFLAGS -I/usr/local/include
% setenv LDFLAGS -L/usr/local/lib
Anschließend muss configure dann neu ausgeführt werden, damit er neue Makefiles generiert.
 
Wenn du das Problem gelöst hast, zu dem ich nichts beitragen kann, kommt das nächste.
Bleib bei/ nimm lieber lang/php53 . 5.4 ist nichts, was man derzeit wirklich will.
hth
 
Bleib bei/ nimm lieber lang/php53 . 5.4 ist nichts, was man derzeit wirklich will.
hth

Ich baue nicht aus den Ports, sondern von Hand. Wir machen Webhosting und da müssen parallel viele PHP-Versionen vorhanden sein, die $Kunde sich dann aussuchen kann.

Yamagi: das Problem ist ja, dass -I/usr/local/include _gesetzt_ ist, ich möchte, dass es beim bauen _nicht_ gesetzt ist.

Rob
 
Zusätzlich zu den Umgebungsvariablen, die Yamagi erwähnte, gibt es laut gcc-Manpage noch CPATH, C_INCLUDE_PATH und CPLUS_INCLUDE_PATH. Vielleicht sind die in Deinen Build-Skripten enthalten.
Wie wär's aber damit, einfach kurzzeitig die oniguruma-bezogenen Header-Files von /usr/local/include in ein anderes Verzeichnis zu verschieben und nach dem Kompilieren wieder zurück?
 
Zurück
Oben