チェックサムを生成するための可能なコマンド
残念ながら、暗号化チェックサムを生成する標準のユーティリティはありません。CRCを生成する標準ユーティリティがありcksum
ます。これは、非悪意のある環境での変更を検出する目的にとって十分な場合があります。
MD5ではなくSHA1を使用することをお勧めします。MD5ユーティリティはあるがSHA1がないシステムは多くありません。暗号化チェックサムを使用する場合は、既知の方法がないアルゴリズムを使用して衝突を見つけることもできます(サイズもチェックする場合)。
標準ではないが一般的であり、ダイジェストを計算できるツールの1つがOpenSSLです。Cygwin、Debian、OSXで利用できますが、残念ながらOSXのデフォルトインストールには含まれていません。
openssl dgst -sha1
OSX 10.6には、shasum
Debian(perl
パッケージの一部)にも存在するユーティリティがあり、Cygwinも信じています。これはPerlスクリプトです。ほとんどのUNIXシステムにはPerlがインストールされているため、このスクリプトがどこでも利用できないのではないかと心配な場合は、メイクファイルと一緒にそのスクリプトをバンドルできます。
システムに適したコマンドを選択する
さて、どこでも機能するコマンドが本当に見つからないとしましょう。
シェルで
使用type
組み込みコマンドが利用可能であるかどうかを確認します。
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
GNU make
このshell
関数を使用して、メイクファイルがロードされたときにシェルスニペットを実行し、出力を変数に格納できます。
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
ポータブル(POSIX)make
ルールではシェルコマンドしか実行できないため、チェックサムを計算する各ルールにはルックアップコードを含める必要があります。スニペットを変数に入れることができます。ルールの個別の行は独立して評価されることに注意してください。また$
、シェルに渡される標識はにエスケープする必要があることを覚えておいてください$$
。
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
autotools