dijous, 30 de desembre del 2010

intltool i Expat: de rubber a l'infern

Com acostuma a passar sovint, l'aparentment fàcil (des)instal.lació de software a l'Snow Leopard, especialment si un usa MacPorts, esdevé un petit malson.
Enmig de la preparació de material per a un curs, m'he trobat amb que necessitava instal.lar rubber per poder compilar el material. Sí, sé que és complicar-se la vida i que amb unes quantes combinacions de pdflatex i bibtex ja faria, però mira, és Nadal i a un sempre li agrada complicar-se la vida.

De forma sensacional, MacPorts em permet fer

sudo port install rubber

i MacGicament tot hauria de funcionar. Però, ai làs! una dependència del bitxo, intltool, em dóna mil i un problemes. Seguint els fòrums he trobat que tot plegat ve donat per un error en el parser de xml (p5-xml-parser), però després de provar mil i una hist`roies, he acabat decidint desinstal.lar el sistema sencer del macports:

sudo port -f uninstall installed


Però, noi, reinstal.lant només el famós intltool obtinc:

olea:~ jvilla$ sudo port -v install intltool--->  Computing dependencies for intltool.
--->  Configuring intltool
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for perl... /opt/local/bin/perl
checking for perl >= 5.8.1... 5.8.9
checking for XML::Parser... configure: error: XML::Parser perl module is required for intltool
shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_textproc_intltool/work/intltool-0.40.6" && ./configure --prefix=/opt/local " returned error 1
Error: Target org.macports.configure returned: configure failure: shell command failed (see log for details)
Warning: the following items did not execute (for intltool): org.macports.activate org.macports.configure org.macports.build org.macports.destroot org.macports.install
Log for intltool is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_textproc_intltool/main.log
Error: Status 1 encountered during processing.
To report a bug, see 

Després d'una bona estona trobo que el problema està més enllà de que Perl no trobi el XML::Parser. De fet,

/opt/local/bin/perl -e "require XML::Parser"

em diu

olea:~ jvilla$ /opt/local/bin/perl -e "require XML::Parser"
Can't load '/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/XML/Parser/Expat/Expat.bundle' for module XML::Parser::Expat: dlopen(/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/XML/Parser/Expat/Expat.bundle, 1): no suitable image found.  Did find:
 /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/XML/Parser/Expat/Expat.bundle: mach-o, but wrong architecture at /opt/local/lib/perl5/5.8.9/darwin-2level/DynaLoader.pm line 230.
 at /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/XML/Parser.pm line 14
Compilation failed in require at /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/XML/Parser.pm line 14.
BEGIN failed--compilation aborted at /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/XML/Parser.pm line 18.
Compilation failed in require at -e line 1.

Per tant, sí que sembla que tinc un problema d'arquitectura. Sembla que l'Expat bundle està en arquitectura PPC, pot ser això? Mirem com està la cosa instal.lada

olea:~ jvilla$ port variants intltool
intltool has no variants
olea:~ jvilla$ port variants p5-xml-sax-expat
p5-xml-sax-expat has no variants
olea:~ jvilla$ port variants p5-xml-parser
p5-xml-parser has the variants:
   universal: Build for multiple architectures

o sigui que no s'entén massa, certament.
Però, com sempre passa, hi ha un munt de gent a la xarxa amb problemes similars i unes poques amb solucions. El problema és trobar-los. De https://trac.macports.org/ticket/4323 extrec la idea de que senzillament el macports s'està liant de valent amb les diverses versions de perl instal.lades. Per tant, ara, a més de fer neteja del que hi hagi instal.lat, faig neteja dràstica de tot el macports

$ sudo port -f uninstall installed
$ sudo rm -rf     /opt/local     /Applications/DarwinPorts     /Applications/MacPorts     /Library/LaunchDaemons/org.macports.*     /Library/Receipts/DarwinPorts*.pkg     /Library/Receipts/MacPorts*.pkg     /Library/StartupItems/DarwinPortsStartup     /Library/Tcl/darwinports1.0     /Library/Tcl/macports1.0     ~/.macports

em torno a baixar el programa de http://www.macports.org/install.php, l'instal.lo i torno a la càrrega:

sudo port -v install intltool

i ara tot funciona bé. M'he adonat que el macports es torna a baixar tots els paquets que necessita, cosa que abans no feia. Suposo que seguir la recepta de https://trac.macports.org/ticket/4323 era més elegant, però per estlviar maldecaps en altres casos, aquesta reinstal.lació de nou ha anat bé.
I Sant Tornem-hi amb la reinstal.lació de rubber.
Related Posts with Thumbnails