GNU autotoolsを使用して自分自身をビルドするプロジェクトがあります。autotoolsがバージョン管理されていないすべての制御ファイルを別のディレクトリに生成して、ソースツリーをクリーンに保つことができるように変更しようとしています誰でもこれを行う方法はありますか?
たとえば、これはGNU helloをフェッチしてビルドし、ソースツリーが少し変更されていないことを確認します。
この部分は、ディレクトリをフェッチして準備します。
{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}
この部分は、他のautoconfベースのプロジェクトで使用できます。実行する前にプロジェクトにcdしてください。注意:これはrm
を実行します。バリアントでのプレイに注意する場合は、いずれにしても責任があります。
export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)
これは、ビルドが完全にソース外であるかどうかをチェックします。
{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}
ここではこれを出力します:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
上記の--prefix="${MYPREFIX?}"
の部分はオプションです。それはあなたのアカウントにローカルな「make install」をすることを可能にします。システム全体の場所に従来の「Sudo make install」が必要な場合は、--prefix="${MYPREFIX?}"
を削除できます。
Autotoolsパッケージには、正当な理由により、多くのハードコーディングされた相対パスと名前が含まれています。あなたの最良のオプションは、出力を合計して、リビジョン管理で無視されるようにタグ付けすることです。 .cvsignore
、.hgignore
、またはsvn:ignore
属性として。一部のRCSでは、ワイルドカードを再帰的に指定することもできます。