Sto cercando di correggere un bug in libxml2. Non riesco a farlo compilare con --with-icu
quando si utilizza --prefix=/Server/software
. Ho inviato uno bug report here, ma ho bisogno di farlo compilare per risolvere un conflitto durante la compilazione di PHP con supporto intl. Sospetto che sia un problema con il Makefile. La mia esperienza con Makefile è limitata. Il risultato desiderato sta arrivando con una patch che può essere inviata al rapporto bug collegato.Come applicare una patch a libxml2 in modo che venga compilata con il supporto ICU quando si utilizza un prefisso?
L'indicatore --with-icu
causa la definizione di LIBXML_ICU_ENABLED
. Il codice incluso dovrebbe risolvere un conflitto includendo le intestazioni da icu e libxml2 (in particolare, entrambi utilizzano UChar). Il plugin PHP intl, attivato con --enable-intl
, richiede icu. libxml2 è richiesto da PHP per le funzioni DOM/XML.
Ci sono due problemi.
primo luogo, questa configurazione:
./configure --prefix=/Server/software --enable-shared --enable-static --with-icu
risultati in:
configure: error: libicu config program icu-config not found
Questo accade a causa di questo codice in configure.in:
WITH_ICU=0
if test "$with_icu" != "yes" ; then
echo Disabling ICU support
else
ICU_CONFIG=icu-config
if ${ICU_CONFIG} --cflags >/dev/null 2>&1
then
ICU_LIBS=`icu-config --ldflags`
LDFLAGS="$LDFLAGS $ICU_LIBS"
WITH_ICU=1
echo Enabling ICU support
else
AC_MSG_ERROR([libicu config program icu-config not found])
fi
fi
Specificamente ICUCONFIG=icu-config
non sta rispettando --prefix=/Server/software
. Posso aggirare questo facendo export PATH=/Server/software/bin:$PATH
.
Questo "risolve" il problema ./configure.
In secondo luogo, quando corro make
ottengo gli errori, i più relavent:
./include/libxml/encoding.h:31:26: error: unicode/ucnv.h: No such file or directory
Il file unicode/uncv.h
è in /Server/software/include/unicode/uncv.h
. Sospetto che il compilatore stia cercando questo file nella directory locale e nella mia directory/usr.
Questo è quanto l'errore si riferisce a:
#ifdef LIBXML_ICU_ENABLED
#include <unicode/ucnv.h>
#endif
Chiaramente questo è un problema vettoriale con --with-icu
e --prefix=/Server/software
. Senza --with-icu
compila bene, ma questo è necessario per risolvere un conflitto UChar definito durante la compilazione di PHP con icu e libxml2.
Il risultato è icu-config --cflags
:
-O2 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long
Questo viene convogliato in/dev/null.
Il risultato di icu-config --ldflags
è:
-lpthread -lm -L/Server/software/lib -licui18n -licuuc -licudata -lpthread -lm
ciò che deve essere cambiato per risolvere questi problemi?
ho postato una patch per il problema ICU_CONFIG: https://bugzilla.gnome.org/show_bug.cgi?id=663214 –