rosで3rdpartyのコードをインストールする時
rosのmkを追いかけてみる
/opt/ros/indigo/share/mk/download_unpack_build.mk
md5sumファイルがあれば
$(ROS_ROOT)/core/rosbuild/bin/download_checkmd5.py $(TARBALL_URL) $(TARBALL)
を実行
/opt/ros/indigo/share/ros/core/rosbuild/bin/download_checkmd5.py
# Create intermediate directories as necessary, #2970 d = os.path.dirname(dest) if len(d) and not os.path.exists(d): os.makedirs(d) fresh = False if not os.path.exists(dest): sys.stdout.write('[rosbuild] Downloading %s to %s...'%(uri, dest)) sys.stdout.flush() urllib.urlretrieve(uri, dest) sys.stdout.write('Done\n') fresh = True if md5sum: m = hashlib.md5(open(dest).read()) d = m.hexdigest() print('[rosbuild] Checking md5sum on %s'%(dest)) if d != md5sum: if not fresh: print('[rosbuild] WARNING: md5sum mismatch (%s != %s); re-downloading file %s' % (d, md5sum, dest)) os.remove(dest) # Try one more time urllib.urlretrieve(uri, dest) m = hashlib.md5(open(dest).read()) d = m.hexdigest() if d != md5sum: print('[rosbuild] ERROR: md5sum mismatch (%s != %s) on %s; aborting' % (d, md5sum, dest)) return 1 return 0
目的のファイルが無かったり、ハッシュ値が異なっていたらURLのファイルを取得
- os.path.dirname
pathのディレクトリ名を返す
- urllib.urlretrieve(uri, dest)
uriのリソースを取得
- hashlib.md5(open(dest).read()).hexdigest()
ハッシュ値を取得
(makefile中のincludeはコマンド?)
参考:
ファイルが一致することを確認する - いますぐ実践! Linuxシステム管理 / Vol.100
ダウンロードページの"xxx.md5"というファイルは何ですか? | SUZAKUサイト
シェルスクリプトでファイル存在確認 - fantasista_ikの日記
[開発]GNU makeのMakefileに、シェルスクリプトを自然に書くたった一つの方法 - ヒルズで働く@robarioの技ログ