SCons に必要な git リポジトリをチェックアウトさせようとしています (そして、できればそのリポジトリを最新の状態に保ちます)。問題は、ビルドで使用するために git リポジトリに含まれるファイルを指定する必要があることです。そうすると、SCons はクローンを作成する前にリポジトリを作成します。
たとえば、GStreamer のクローンを作成し、create-uninstalled-setup.sh
スクリプトを使用するとします (これは私が実際に行っていることではありませんが、同じ問題が発生するはるかに単純で高速なスクリプトです)。
Command(['gstreamer/.git', 'gstreamer/scripts/create-uninstalled-setup.sh'],
None, 'git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
'gstreamer/scripts/create-uninstalled-setup.sh')
ただし、SCons は gstreamer のクローンを作成する前に gstreamer/scripts を作成するため、失敗します。
$ scons scons: SConscript ファイルを読み込んで
います ...
scons: SConscript ファイルを読み終えました。
scons: ターゲットをビルドしています ...
git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer
致命的: 宛先パス 'gstreamer' は既に存在し、空のディレクトリではありません。
scons: *** [gstreamer/.git] エラー 128
scons: エラーのためビルドが終了しました。
$ ls gstreamer/
スクリプト
最初のコマンドに「gstreamer」フォルダーを作成するように指示すると、依存関係サイクルが作成されます。
Command(['gstreamer', 'gstreamer/scripts/create-uninstalled-setup.sh'],
None, 'git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
'gstreamer/scripts/create-uninstalled-setup.sh')
$ scons scons: SConscript ファイルを読み込んで
います ...
scons: SConscript ファイルを読み終えました。
scons: ターゲットを構築しています ...
scons: ターゲットを構築しました。scons: *** 依存関係サイクルが見つかりました:
gstreamer/scripts -> gstreamer/scripts/create-uninstalled-setup.sh -> gstreamer/scripts
gstreamer/scripts/create-uninstalled-setup.sh -> gstreamer/scripts - > gstreamer/scripts> /create-uninstalled-setup.shファイル「/usr/lib/scons/SCons/Taskmaster.py」、1019 行目、クリーンアップ中
「create-uninstalled-setup.sh」を作成することを最初のコマンドに伝えないと、存在しないため混乱します。
Command(['gstreamer'],
None, 'git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
'gstreamer/scripts/create-uninstalled-setup.sh')
$ scons scons: SConscript ファイルを読み込んで
います ...
scons: SConscript ファイルを読み終えました。
scons: ターゲットをビルドしています ...
scons: *** [~/gst/git] ソース `gstreamer/scripts/create-uninstalled-setup.sh' が見つかりません。ターゲット `~/gst/git' で必要です。
scons: エラーのためビルドが終了しました。
回避策として、クローンを作成する前にフォルダーを作成できrm -rf
ますが、それは明らかに理想的ではありません。
Command(['gstreamer/.git', 'gstreamer/scripts/create-uninstalled-setup.sh'], None,
'rm -rf gstreamer && git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
'gstreamer/scripts/create-uninstalled-setup.sh')
これを処理するより良い方法はありますか?