#!/usr/bin/env ruby
#-*-ruby-*-
require "dpklib/command"
require "dpklib/file"
require "dpklib/parsearg"
require "find"
require "ftools"

class DpkrbRbconfigProgram < Dpklib::CommandLineProgram
  DEFAULT_PERM = "644"
  EXECUTABLE_PERM = "755"

  def start
    opts = Dpklib.parse_args(argv, "xpPm:", "mkdir", "perm:") || usage
    destdir = opts.pop || usage
    srcfiles = opts
    srcfiles.empty? && usage

    unless opts[:p]
      @perm = if opts[:x]; EXECUTABLE_PERM
              else; opts[:perm] || opts[:m] || DEFAULT_PERM
              end
      @perm = Integer("0#{@perm}")
    end
    File::makedirs(destdir, true) if opts[:mkdir] || opts[:P]

    for srcfile in srcfiles
      install(srcfile, destdir)
    end
  end

  # from install.rb
  def install(srcfile, destdir)
    return if Dpklib::CvsIgnore.match?(srcfile)

    st = File::lstat(srcfile)

    srcname = File.basename(srcfile)
    destfile = File.expand_path(srcname, destdir)

    if st.symlink?
      linksrc = File::readlink(srcfile)
      File::symlink(linksrc, destfile)
    elsif st.directory?
      srcdir = srcfile
      File::makedirs(destfile, true)
      Dpklib.each_files_in_dir(srcdir) { |srcfile|
        install(srcfile, destfile)
      }
    else
      File::install(srcfile, destfile, @perm, true)
    end
  end

  def usage
    cvsignores = Dpklib::CvsIgnore::PATTERNS.join(" ")

    die(<<-EOF)
usage: #{progname} [OPTIONS] FILES ... DESTDIR
OPTIONS:
  -m, --perm PERM: (default: #{DEFAULT_PERM})
    Sets permission of files to PERM.
  -p: Preserves permission of file.
  -P, --mkdir:
    Creates destination directory if it does not exists.
  -x: Installs executable. (-m #{EXECUTABLE_PERM})

#{progname} ignores files matches such patterns:
  #{cvsignores}
    EOF
  end

  execute
end #/DpkrbRbconfigProgram
