福嶋です。

Noritsugu Nakamura <nnakamur / mxq.mesh.ne.jp> wrote:
> いつも思っているのは、 (迷っているのは)
> hoge/ にすべきか hoge-x.x.x にすべきかです。

これは私も考えることあります。

> o 自分が作っている拡張ライブラリの場合
>   ディレクトリを hoge-x.x.x といちいち
>   変更するのは面倒(な気がする)

私は hoge-x.x.x というシンボリックリンクを張って、tar の -h オプ
ション (GNU tar の場合。それ以外は分からない) を使ってます。

ただ、この場合アーカイブ内にはシンボリックリンクを含めることがで
きません。もっと良い方法があれば知りたい...

swigrubyでは以下のようなスクリプトを使ってます。
使い方は、MANIFEST以外に NAME, VERSION というファイルを用意してお
いて、

% cd hoge
% cat NAME
hoge
% cat VERSION
x.x.x

# 普段のバックアップ用。hoge.tar.gz に全てのファイルを入れる
% mkdist.rb

# リリース用。 hoge-x.x.x.tar.gz に MANIFEST 内のファイルを、
#              hoge-x.x.x-full.tar.gz に全てのファイルを入れる
% mkdist.rb release

一応、ファイルが既に存在する場合には、上書きしてもよいかどうか聞
いてきたりします。


#!/usr/local/bin/ruby include FileTest def main(is_release) name = File.open("NAME").gets.chomp raise 'Invalid name' if name !~ /^[\w\-]+$/ version = File.open("VERSION").gets.chomp raise 'Invalid version' if version !~ /^[0-9\.]+$/ manifest = File.open("MANIFEST") files = manifest.read.split(/\s+/) manifest.close curdir = Dir.pwd.split('/') dir = curdir.pop curdir = curdir.join('/') Dir.chdir(curdir) if is_release vdir = name + '-' + version dist = vdir + ".tar.gz" full = vdir + "-full.tar.gz" File.symlink(dir, vdir) else vdir = dir full = name + ".tar.gz" end files.each do |f| f[0,0] = vdir + "/" end if is_release if exists?(dist) print dist, " already exists.\n" print "overwrite? (y/n) " $stdout.flush if $stdin.gets.chomp !~ /^y$/i print "Abroted\n" exit end end system "tar czhf #{dist} #{files.join(' ')}" File.unlink vdir if File.symlink? vdir end if exists?(full) print full, " already exists.\n" print "overwrite? (y/n) " $stdout.flush if $stdin.gets.chomp !~ /^y$/i print "Abroted\n" exit end end system "tar czf #{full} #{dir}" end release = false if ARGV.size > 0 target = ARGV.shift case target when 'release' release = true else raise 'Unknown target: ' + target end end main(release)
--- 福嶋正機