warn 'Sys has been deprecated in favor of FileUtils'
begin
require 'ftools'
rescue LoadError
end
require 'rbconfig'
require 'rake/file_list'
module Sys
RUBY = RbConfig::CONFIG['ruby_install_name']
def install(wildcard, dest_dir, mode)
FileList.glob(wildcard).each do |fn|
File.install(fn, dest_dir, mode, $verbose)
end
end
def run(cmd)
log cmd
system(cmd) or fail "Command Failed: [#{cmd}]"
end
def ruby(*args)
run "#{RUBY} #{args.join(' ')}"
end
def copy(file_name, dest_file)
log "Copying file #{file_name} to #{dest_file}"
File.copy(file_name, dest_file)
end
def copy_files(wildcard, dest_dir)
for_matching_files(wildcard, dest_dir) { |from, to| copy(from, to) }
end
def link(file_name, dest_file)
log "Linking file #{file_name} to #{dest_file}"
File.link(file_name, dest_file)
end
def link_files(wildcard, dest_dir)
for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) }
end
def symlink(file_name, dest_file)
log "Symlinking file #{file_name} to #{dest_file}"
File.symlink(file_name, dest_file)
end
def symlink_files(wildcard, dest_dir)
for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) }
end
def delete(*wildcards)
wildcards.each do |wildcard|
FileList.glob(wildcard).each do |fn|
if File.directory?(fn)
log "Deleting directory #{fn}"
Dir.delete(fn)
else
log "Deleting file #{fn}"
File.delete(fn)
end
end
end
end
def delete_all(*wildcards)
wildcards.each do |wildcard|
FileList.glob(wildcard).each do |fn|
next if ! File.exist?(fn)
if File.directory?(fn)
FileList.glob("#{fn}/*").each do |subfn|
next if subfn=='.' || subfn=='..'
delete_all(subfn)
end
log "Deleting directory #{fn}"
Dir.delete(fn)
else
log "Deleting file #{fn}"
File.delete(fn)
end
end
end
end
def makedirs(*dirs)
dirs.each do |fn|
log "Making directory #{fn}"
File.makedirs(fn)
end
end
def indir(dir)
olddir = Dir.pwd
Dir.chdir(dir)
yield
ensure
Dir.chdir(olddir)
end
def split_all(path)
head, tail = File.split(path)
return [tail] if head == '.' || tail == '/'
return [head, tail] if head == '/'
return split_all(head) + [tail]
end
def log(msg)
print " " if $trace && $verbose
$stderr.puts msg if $verbose
end
def quiet(&block)
with_verbose(false, &block)
end
def verbose(&block)
with_verbose(true, &block)
end
def for_files(*wildcards)
wildcards.each do |wildcard|
FileList.glob(wildcard).each do |fn|
yield(fn)
end
end
end
extend(self)
private
def for_matching_files(wildcard, dest_dir)
FileList.glob(wildcard).each do |fn|
dest_file = File.join(dest_dir, fn)
parent = File.dirname(dest_file)
makedirs(parent) if ! File.directory?(parent)
yield(fn, dest_file)
end
end
def with_verbose(v)
oldverbose = $verbose
$verbose = v
yield
ensure
$verbose = oldverbose
end
end