dylibの更新
DarwinportsがMacportsになってから、うちのportはアップデートしたことがなかった。今日は久し振りにアップデートした。最初は全てがうまく行ったと思ったが…実は駄目だった。「port update outdated」後、inkscapeなど、gettextに依存してる物がビルド失敗。うわぁ…やばくない。幸いのは、大事なプログラム、svnなどは手でビルドしたので、問題はなかった。いろいろ検索したら、このスクリプトを見付かった。
#!/bin/bash if test -z "$1"; then echo "usage: $0 [libname]" exit 1 fi for file in `find /opt/local/lib -name *.dylib; find /opt/local/bin`; do if test -f $file -a ! -L $file; then otool -L $file | grep --silent $1 if test "$?" = "0"; then port provides `echo $file` fi fi done | awk -F: ' { print $2 } ' | sort | uniq
このスクリプトはあるdylibに依存した物を検索する為のスクリプト。dsrc.shとして保存して、問題のlibintlに依存したプログラムを検出。「bash dsrc.sh libintl > dep.txt」を実行し、libintlに依存したプログラムをdep.txtに保存。依存したプログラムをアンインストール/インストールする為に、unin.shを作ってみた。
#!/bin/bash if test -z "$1"; then echo "usage: $0 [text_file] exit 1 fi list=`cat $1` for i in $list; do echo Uninstaling $i... port uninstall $i port clean --archive $i done for j in $list; do echo Instaling $j... port install -f $j done
「bash unin.sh dep.txt」を実行…時間かかるので、飯を食べに行ったり、ゲーム遊んだり、昼寝したり…残念ながら昼寝はできなかった。全てが終わったら、inkscapeなどが普通に動いた。はぁ、なんだかなぁ、このdylib問題?よく考えたら、MacOS Xのバンドルコンセプトは最高だなぁ、全部一つのバンドルにするので、管理しやすい。Linuxユーザはどうだろう?この問題が出たら、Linuxユーザは大変だなぁ…