diff options
Diffstat (limited to 'trunk/lib/un.rb')
-rw-r--r-- | trunk/lib/un.rb | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/trunk/lib/un.rb b/trunk/lib/un.rb deleted file mode 100644 index 3dcdbede4a..0000000000 --- a/trunk/lib/un.rb +++ /dev/null @@ -1,302 +0,0 @@ -# -# = un.rb -# -# Copyright (c) 2003 WATANABE Hirofumi <eban@ruby-lang.org> -# -# This program is free software. -# You can distribute/modify this program under the same terms of Ruby. -# -# == Utilities to replace common UNIX commands in Makefiles etc -# -# == SYNOPSIS -# -# ruby -run -e cp -- [OPTION] SOURCE DEST -# ruby -run -e ln -- [OPTION] TARGET LINK_NAME -# ruby -run -e mv -- [OPTION] SOURCE DEST -# ruby -run -e rm -- [OPTION] FILE -# ruby -run -e mkdir -- [OPTION] DIRS -# ruby -run -e rmdir -- [OPTION] DIRS -# ruby -run -e install -- [OPTION] SOURCE DEST -# ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE -# ruby -run -e touch -- [OPTION] FILE -# ruby -run -e wait_writable -- [OPTION] FILE -# ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] -# ruby -run -e help [COMMAND] - -require "fileutils" -require "optparse" - -module FileUtils -# @fileutils_label = "" - @fileutils_output = $stdout -end - -def setup(options = "", *long_options) - opt_hash = {} - argv = [] - OptionParser.new do |o| - options.scan(/.:?/) do |s| - opt_name = s.delete(":").intern - o.on("-" + s.tr(":", " ")) do |val| - opt_hash[opt_name] = val - end - end - long_options.each do |s| - opt_name = s[/\A(?:--)?([^\s=]+)/, 1].intern - o.on(s.sub(/\A(?!--)/, '--')) do |val| - opt_hash[opt_name] = val - end - end - o.on("-v") do opt_hash[:verbose] = true end - o.order!(ARGV) do |x| - if /[*?\[{]/ =~ x - argv.concat(Dir[x]) - else - argv << x - end - end - end - yield argv, opt_hash -end - -## -# Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY -# -# ruby -run -e cp -- [OPTION] SOURCE DEST -# -# -p preserve file attributes if possible -# -r copy recursively -# -v verbose -# - -def cp - setup("pr") do |argv, options| - cmd = "cp" - cmd += "_r" if options.delete :r - options[:preserve] = true if options.delete :p - dest = argv.pop - argv = argv[0] if argv.size == 1 - FileUtils.send cmd, argv, dest, options - end -end - -## -# Create a link to the specified TARGET with LINK_NAME. -# -# ruby -run -e ln -- [OPTION] TARGET LINK_NAME -# -# -s make symbolic links instead of hard links -# -f remove existing destination files -# -v verbose -# - -def ln - setup("sf") do |argv, options| - cmd = "ln" - cmd += "_s" if options.delete :s - options[:force] = true if options.delete :f - dest = argv.pop - argv = argv[0] if argv.size == 1 - FileUtils.send cmd, argv, dest, options - end -end - -## -# Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY. -# -# ruby -run -e mv -- [OPTION] SOURCE DEST -# -# -v verbose -# - -def mv - setup do |argv, options| - dest = argv.pop - argv = argv[0] if argv.size == 1 - FileUtils.mv argv, dest, options - end -end - -## -# Remove the FILE -# -# ruby -run -e rm -- [OPTION] FILE -# -# -f ignore nonexistent files -# -r remove the contents of directories recursively -# -v verbose -# - -def rm - setup("fr") do |argv, options| - cmd = "rm" - cmd += "_r" if options.delete :r - options[:force] = true if options.delete :f - FileUtils.send cmd, argv, options - end -end - -## -# Create the DIR, if they do not already exist. -# -# ruby -run -e mkdir -- [OPTION] DIR -# -# -p no error if existing, make parent directories as needed -# -v verbose -# - -def mkdir - setup("p") do |argv, options| - cmd = "mkdir" - cmd += "_p" if options.delete :p - FileUtils.send cmd, argv, options - end -end - -## -# Remove the DIR. -# -# ruby -run -e rmdir -- [OPTION] DIR -# -# -v verbose -# - -def rmdir - setup do |argv, options| - FileUtils.rmdir argv, options - end -end - -## -# Copy SOURCE to DEST. -# -# ruby -run -e install -- [OPTION] SOURCE DEST -# -# -p apply access/modification times of SOURCE files to -# corresponding destination files -# -m set permission mode (as in chmod), instead of 0755 -# -v verbose -# - -def install - setup("pm:") do |argv, options| - options[:mode] = (mode = options.delete :m) ? mode.oct : 0755 - options[:preserve] = true if options.delete :p - dest = argv.pop - argv = argv[0] if argv.size == 1 - FileUtils.install argv, dest, options - end -end - -## -# Change the mode of each FILE to OCTAL-MODE. -# -# ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE -# -# -v verbose -# - -def chmod - setup do |argv, options| - mode = argv.shift.oct - FileUtils.chmod mode, argv, options - end -end - -## -# Update the access and modification times of each FILE to the current time. -# -# ruby -run -e touch -- [OPTION] FILE -# -# -v verbose -# - -def touch - setup do |argv, options| - FileUtils.touch argv, options - end -end - -## -# Wait until the file becomes writable. -# -# ruby -run -e wait_writable -- [OPTION] FILE -# -# -n RETRY count to retry -# -w SEC each wait time in seconds -# -v verbose -# - -def wait_writable - setup("n:w:v") do |argv, options| - verbose = options[:verbose] - n = options[:n] and n = Integer(n) - wait = (wait = options[:w]) ? Float(wait) : 0.2 - argv.each do |file| - begin - open(file, "r+b") - rescue Errno::ENOENT - break - rescue Errno::EACCES => e - raise if n and (n -= 1) <= 0 - puts e - STDOUT.flush - sleep wait - retry - end - end - end -end - -## -# Create makefile using mkmf. -# -# ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] -# -# -d ARGS run dir_config -# -h ARGS run have_header -# -l ARGS run have_library -# -f ARGS run have_func -# -v ARGS run have_var -# -t ARGS run have_type -# -m ARGS run have_macro -# -c ARGS run have_const -# --vendor install to vendor_ruby -# - -def mkmf - setup("d:h:l:f:v:t:m:c:", "vendor") do |argv, options| - require 'mkmf' - opt = options[:d] and opt.split(/:/).each {|n| dir_config(*n.split(/,/))} - opt = options[:h] and opt.split(/:/).each {|n| have_header(*n.split(/,/))} - opt = options[:l] and opt.split(/:/).each {|n| have_library(*n.split(/,/))} - opt = options[:f] and opt.split(/:/).each {|n| have_func(*n.split(/,/))} - opt = options[:v] and opt.split(/:/).each {|n| have_var(*n.split(/,/))} - opt = options[:t] and opt.split(/:/).each {|n| have_type(*n.split(/,/))} - opt = options[:m] and opt.split(/:/).each {|n| have_macro(*n.split(/,/))} - opt = options[:c] and opt.split(/:/).each {|n| have_const(*n.split(/,/))} - $configure_args["--vendor"] = true if options[:vendor] - create_makefile(*argv) - end -end - -## -# Display help message. -# -# ruby -run -e help [COMMAND] -# - -def help - setup do |argv,| - all = argv.empty? - open(__FILE__) do |me| - while me.gets("##\n") - if help = me.gets("\n\n") - if all or argv.delete help[/-e \w+/].sub(/-e /, "") - print help.gsub(/^# ?/, "") - end - end - end - end - end -end |