MacPorts kann spidermonkey und mozjs17 nicht installieren

Nach meiner kürzlichen Migration auf OS X El Capitan habe ich noch mit den einen oder anderen Kinderwehen zu kämpfen.

Unter anderem bringt es MacPorts nicht fertig, die Pakete spidermonkey und mozjs17 zu installieren.

Die Fehlermeldungen lauteten:

---> Building spidermonkey
Error: org.macports.build for port spidermonkey returned: command execution failed
Please see the log file for port spidermonkey for details:
/opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_spidermonkey/spidermonkey/main.log
Error: Unable to upgrade port: 1
Error rebuilding spidermonkey
while executing
"error "Error rebuilding $portname""
(procedure "revupgrade_scanandrebuild" line 395)
invoked from within
"revupgrade_scanandrebuild broken_port_counts $opts"
(procedure "macports::revupgrade" line 5)
invoked from within
"macports::revupgrade $opts"
(procedure "action_revupgrade" line 2)
invoked from within
"action_revupgrade $action $portlist $opts"
(procedure "action_upgrade" line 25)
invoked from within
"$action_proc $action $portlist [array get global_options]"
(procedure "process_cmd" line 103)
invoked from within
"process_cmd $remaining_args"
invoked from within
"if { [llength $remaining_args] > 0 } {

# If there are remaining arguments, process those as a command
set exit_status [process_cmd $remaining..."
(file "/opt/local/bin/port" line 5268)
Done.

Die Datei /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_spidermonkey/spidermonkey/main.log enthält über 9000 Zeilen, doch schlussendlich fand ich die aussagekräftigsten Stellen:

:debug:archivefetch Found Dependency: receipt exists for nspr
...
:info:build cat: ../../dist/Darwin_OPT.OBJ/nspr/Version: No such file or directory

… sowie viel weiter unten …

:info:build ld: symbol(s) not found for architecture x86_64
:info:build clang: error: linker command failed with exit code 1 (use -v to see invocation)
:info:build make[1]: *** [Darwin_OPT.OBJ/libjs.dylib] Error 1

Nach einigem herumgoogeln (das Problem ist im Netz nirgends erwähnt; es handelt sich also um ein ganz spezifisches Aeby-Problem) stiess ich auf den über sechs Jahre alten Fehlerreport Spidermonkey build failure (undefined symbols) with non-default build_arch.

Irgendwie schien mein spidermonkey Symbole für die x86_64-Architektur nicht zu finden, und vielleicht hing dies ja mit einer Einstellung in macports.conf zusammen.

Und siehe da:

/opt/local/etc/macports$ ls -l
total 112
-rw-r--r-- 1 root admin 1941 17 Mai 2014 archive_sites.conf
-r--r--r-- 1 root admin 1941 1 Okt 2015 archive_sites.conf.default
-rw-r--r-- 1 root admin 8251 17 Mai 2014 macports.conf
-r--r--r-- 1 root admin 8248 1 Okt 2015 macports.conf.default
-rw-r--r-- 1 root admin 523 17 Mai 2014 pubkeys.conf
-r--r--r-- 1 root admin 523 1 Okt 2015 pubkeys.conf.default
-rw-r--r-- 1 root admin 1243 17 Mai 2014 sources.conf
-r--r--r-- 1 root admin 1243 1 Okt 2015 sources.conf.default
-rw-r--r-- 1 root admin 461 17 Mai 2014 variants.conf
-r--r--r-- 1 root admin 461 1 Okt 2015 variants.conf.default

Ich hatte offenbar noch eine uralte macports.conf herumliegen, und aus irgendeinem Grund wurde bei einem Upgrade die neuere Version der Datei (.default) nicht über die Alte kopiert. Doch was ist der Unterschied zwischen den beiden Dateien?

$ diff macports.conf.default macports.conf
1c1
< # $Id: macports.conf.in 117120 2014-02-17 00:55:33Z jmr@macports.org $
---
> # $Id: macports.conf.in 108047 2013-07-11 06:19:13Z larryv@macports.org $
63c63
< # "x86_64 i386" on OS X 10.6 and later.
---
> # "x64_64 i386" on OS X 10.6 and later.

Ein Schreibfehler! Es hätte heissen sollen „x86_64“, stattdessen aber hatte wohl jemand in aller Flüchtigkeit „x64_64“ geschrieben. Ich löschte die alte Datei und platzierte die neue Datei an ihrer Stelle.

Als nächstes installierte ich npsr erneut …

# port install nspr

… welches im gleichen Rutsch eine ganze Ladung Dependencies ebenfalls aktualisierte (unter anderem GTK3, welches mörderisch lange zum kompilieren braucht).

Schlussendlich führte ich ein ordentliches MacPorts-Update aus:

# port selfupdate
# port upgrade outdated
# port uninstall inactive
# port clean --all vile

Fertig.