dylibの更新

DarwinportsMacportsになってから、うちの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ユーザは大変だなぁ…