libxml2 woes (PHP5 and friends)

Ryan Schmidt ryandesign at macports.org
Thu Dec 11 02:41:42 PST 2008


On Dec 10, 2008, at 14:57, Chris Janton wrote:

> I am a heavy user of Wordpress. Especially using the xmlrpc  
> functions (blog photos from Flickr, "external" blog editors, etc.)
>
> In the past few months this has become a large problem. Entities  
> get stripped from the text, so no links, HTML formatting etc.
>
> The apparent culprit is libxml2 post version 2.6.31
>
> No resolution from the PHP folks - see the discussion at
>
> 	http://bugs.php.net/bug.php?id=45996
>
> No resolution from the Wordpress folks - see the discussion at
>
> 	http://trac.wordpress.org/ticket/7771
>
> There's no simple fix, but apparently workarounds in some of the  
> Linux communities by forcing PHP to use expat libraries as opposed  
> to the libxml2 libraries. I don't understand the pointers to the  
> fix, which mostly appear to be changes to PHP configuration that  
> look like this
>
> 	-enable-xml=shared,%{_prefix} --with-expat-dir=%{_prefix}
> 	--with-xmlrpc=shared,%{_prefix} --with-expat-dir=%{_prefix}
>
> but I don't see the difference between those and what is in the PHP  
> configuration on macports that looks like
>
> 	 --with-libxml-dir=${prefix} \
> 	 --with-gettext=${prefix} \
> 	 --with-xml \
> 	 --with-expat-dir=${prefix} \
> 	 --with-xmlrpc \
>
> unless there is some special magic because the expat directory is  
> included on the same line as the --with-xmlrpc
>
> I could just hack the PHP portfile to try the workaround, but I  
> don't know what the "shared" means, or the repetitive declaration  
> of --with-expat-dir
>
> Or, I could just brute force the libxml2 port back to version 2.6.31
>
> Anyone out there want to weigh in on the problem? Assure me that  
> trying the hacked PHP portfile might not hurt?

Ok, I've spent some time on this problem now. I can reproduce it with  
both php5 @5.2.8_0 and php5-devel @5.3.0alpha3_1.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: simple.php
Type: text/php
Size: 360 bytes
Desc: not available
URL: <http://lists.macosforge.org/pipermail/macports-users/attachments/20081211/5be09927/attachment.bin>
-------------- next part --------------


As I understand it, this is a PHP bug because they're bypassing the  
libxml API and using internal libxml structures they were never  
supposed to be accessing. When libxml changed those internal  
structures in libxml 2.7.x, this PHP feature stopped working. So the  
PHP team needs to fix their code.

We could try to work around the problem in MacPorts in the meantime.  
The workaround Mandriva is using seems to be to force the xml  
extension specifically (ext/xml) to use expat instead of libxml,  
while keeping the rest of the extensions using libxml (since expat  
support in PHP is said to be deprecated, according to "./configure -- 
help").

http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/updates/2009.0/ 
php/current/SPECS/php.spec?r1=278891&r2=281822

http://svn.mandriva.com/svn/packages/cooker/php/current/SOURCES/php- 
xml_expat_fix.diff

php5 already declares dependencies on and links with both expat and  
libxml. I made a quick attempt at making ext/xml use expat only, but  
failed. We may need what you showed above: we may need to instruct  
PHP to build ext/xml shared (instead of, presumably, statically) so  
that we can use different libraries when linking ext/xml than we do  
for the others. I will try this later. (Building the xml extension  
shared is not part of the fix that Mandriva uses; they were already  
building xml shared before. But building xml shared may turn out to  
be necessary for the fix that they did employ.)

In fact, maybe we should be building all the extensions shared  
instead of statically. I will have to look into that too.

The "shared" flag is explained in "./configure --help":

Extensions:

   --with-EXTENSION=[shared[,PATH]]

     NOTE: Not all extensions can be build as 'shared'.

     Example: --with-foobar=shared,/usr/local/foobar/

       o Builds the foobar extension as shared extension.
       o foobar package install prefix is /usr/local/foobar/


To answer your question, the order of configure arguments should not  
matter, for standard autoconf configure scripts, and repetition of  
configure arguments should also be irrelevant (though if the values  
differ, I'm not sure whether the first or last one wins).



More information about the macports-users mailing list