#!/usr/bin/env ruby
# install command
# Ver. 1.1 (2004.03.08)
require 'rbconfig'
require 'getoptlong'
require 'ftools'
project = (File.split(Dir.getwd)).last.sub(/-((?:\d+\.)*\d+)\z/, "")
version = File.file?("VERSION") ? open("VERSION"){|f| f.read}.strip : $1
libname = project# + "-" + version
libdir = "lib"
mandir, manjadir = "doc", "doc-ja"
logfile = "InstalledFiles"
destdir = Config::CONFIG["sitelibdir"]
destmandir = File.join(Config::CONFIG["prefix"], "doc", "ruby", libname, "doc")
destmanjadir = File.join(Config::CONFIG["prefix"], "doc", "ruby", libname, "doc-ja")
instman = false
noharm = false
uninstall = false
Usage = "\
Usage: ruby install.rb [options]
option argument action
------ -------- ------
--destdir dir Destination dir
-d (default is #{destdir})
--mandir dir[,dir-ja] Manual dir
(default is #{destmandir},#{destmanjadir})
--man Install manuals
--uninstall UnInstall
--help Print this help
-h
--noharm Do not install, just print commands
-n
"
opts = GetoptLong.new(
[ "--destdir", "-d", GetoptLong::REQUIRED_ARGUMENT ],
[ "--mandir", GetoptLong::REQUIRED_ARGUMENT ],
[ "--man", "-m", GetoptLong::NO_ARGUMENT ],
[ "--uninstall", GetoptLong::NO_ARGUMENT ],
[ "--help", "-h", GetoptLong::NO_ARGUMENT ],
[ "--noharm", "-n", GetoptLong::NO_ARGUMENT ]
)
opts.each do |opt, arg|
case opt
when '--destdir', '-d'
destdir = arg
when '--man', '-m'
instman = true
when '--mantdir'
destmandir, destmanjadir = arg.split(/,/)
when '--help', '-h'
print Usage, "\n"
exit
when '--noharm', '-n'
noharm = true
when '--uninstall'
uninstall = true
else
raise "unrecognized option: ", opt
end
end
raise ArgumentError,
"unrecognized arguments #{ARGV.join(' ')}" unless ARGV == []
files = []
def collect_files(fspec, destdir, files)
fspec = fspec.sub(/\/$/, '') #/
if FileTest.directory? fspec
Dir.foreach(fspec) do |f|
next if f == "."|| f == ".."
fspec0 = File.join(fspec, f)
destdir0 = File.join(destdir, f)
collect_files(fspec0, destdir0, files)
end
else
files.push [fspec, destdir]
end
end
if instman
collect_files(mandir, destmandir, files)
collect_files(manjadir, destmanjadir, files) if destmanjadir
else
collect_files(libdir, destdir, files)
end
#Dir.glob(libdir + "/**/*").each do |file|
# tfile = File.join(destdir, File.basename(file))
# files.push [file, tfile]
#end
log = open(logfile, "a") unless noharm || uninstall
dirs = {}
for src, dest in files
d = File.dirname(dest)
if !dirs[d] && !File.directory?(d)
puts "File.makedir #{d}" unless uninstall
File.makedirs(d) unless noharm || uninstall
dirs[d] = true
end
if uninstall
if File.file?(dest)
puts "File.unlink #{dest}"
File.unlink(dest) unless noharm
end
else
puts "File.install #{src}, #{dest}, 0644"
File.install(src, dest, 0644, false) unless noharm
log.puts dest unless noharm
end
end
log.close unless noharm || uninstall
syntax highlighted by Code2HTML, v. 0.9.1