#!/usr/bin/env ruby
raise 'Please, use ruby1.9.3 or later.' if RUBY_VERSION < '1.9.3'
=begin
 Common Rakefile, Rantfile installer for SiSU
   softlink Rakefile and Rantfile to this file

 * Homepage: <http://www.jus.uio.no/sisu/SiSU>
             <http://search.sisudoc.org>
 * Download: <http://www.jus.uio.no/sisu/download>

 Copyright (C) 2007 Ralph Amissah

 * License: LGPL - GNU Lesser General Public License
     [same license as Rant provided within the Rant package]

 * Ralph Amissah <ralph@amissah.com>
   Ralph Amissah <ralph.amissah@gmail.com>

 Rake is a Ruby build program by Jim Weirich
 * Rake may be downloaded and installed from:
     <http://rake.rubyforge.org/>

 Rant is a Ruby build program by Stefan Lang
 * Rant may be downloaded and installed from:
     <http://make.rubyforge.org/>

 Notes on use:
   [if rake is preferred and installed]
     rake -T
   [if rant is preferred and installed]
     rant -T

 SiSU can also be Setup/Installation using:
 * Minero Aoki's setup.rb, provided along with SiSU, or

=end
#%% produce a makefile suitable for the target platform
#require 'mkmf'
#create_makefile("sisu")
#% manual settings, edit/update as required (note current default settings are obtained from sisu version yml file)
SiSU_manual_setting_v_current  = '4.2.x'
SiSU_manual_setting_v_next     = '5.1.x'
#% rake file
SiSU_dir_v_current             = 'v4'
SiSU_dir_v_next                = 'v5'
require 'find'
require 'fileutils'
#require 'ftools'
require 'rbconfig.rb'
require 'yaml'
include FileUtils
class Project_details
  def name
    'SiSU'
  end
  def rake_rant
    "Rakefile/Rantfile for the installation/setup of #{name}"
  end
  def platform_notice
    "[#{name} is for the Linux/Unix Platforms]"
  end
  def env
    Config::CONFIG
  end
  def host
    env['host']
  end
  def dir
    def proj
      'sisu'
    end
    def arch
      env['archdir']
    end
    def sitearch
      env['sitearchdir']
    end
    def bin
      env['bindir']
    end
    def lib
      env['sitelibdir']
    end
    def data
      env['datadir']
    end
    def share
      "#{env['datadir']}/sisu"
    end
    def conf
      env['sysconfdir']
    end
    def man
      env['mandir']
    end
    def vim
      "#{env['datadir']}/sisu/vim"
    end
    def out
      "#{env['localstatedir']}/#{proj}"
    end
    def rubylib
      env['LIBRUBYARG_SHARED']
    end
    def pwd
      Dir.pwd #ENV['PWD']
    end
    self
  end
  def version
    stamp={}
    v="#{dir.pwd}/conf/sisu/version.yml"
    if File.exist?(v)
      stamp=YAML::load(File::open(v))
      stamp[:version]
    else ''
    end
  end
end
@p=Project_details.new
def answer?(ask)
  resp='redo'
  print ask + " ['yes', 'no' or 'quit']: "
  resp=File.new('/dev/tty').gets.strip
  #resp=gets.strip
  if resp == 'yes'; true
  elsif resp == 'no'; false
  elsif resp =~/^quit|exit$/; exit
  else puts "[please type: 'yes', 'no' or 'quit']"
    answer?(ask)
  end
end
def default_notice
  ans= %{#{@p.rake_rant}
  Information on alternative actions is available using:
  [if rake (or rant) is installed:]
    "rake help" or "rake -T" (or "rant help" or "rant -T")
  Default action selected - "install #{@p.name}" proceed? }
  resp=answer?(ans)
  exit unless resp
end
def get_username
  gets.strip
end
def chmod_file(place)
  if place =~/\/bin/; File.chmod(0755,place)
  else                File.chmod(0644,place)
  end
end
def chmod_util(place)
  if place =~/\/bin/; chmod(0755,place)
  else                chmod(0644,place)
  end
end
                                                           #%% using a directory and its mapping
def setup_find_create(dir_get,dir_put,exclude_files=[''])                     #primary,
  begin
  Find.find("#{@p.dir.pwd}/#{dir_get}") do |f|
    stub=f.scan(/#{@p.dir.pwd}\/#{dir_get}\/(\S+)/).join
    place="#{dir_put}/#{stub}"
    action=case
    when File.file?(f)
      unless f =~/#{exclude_files.inspect}/
        cp(f,place)
        chmod_file(place)
        "->  #{dir_put}/"
      end
    when File.directory?(f)
      FileUtils.mkpath(place) unless FileTest.directory?(place)
      "./#{dir_get}/"
    else '?'
    end
    puts "#{action}#{stub}"
  end
  rescue
    puts "\n\n<< are you root? required for install >>"
  end
end
def setup_find_cp_r(dir_get,dir_put)                       #secondary, using recursive copy
  Find.find("#{@p.dir.pwd}/#{dir_get}") do |f|
    stub=f.scan(/#{@p.dir.pwd}\/#{dir_get}\/(\S+)/).join
    place="#{dir_put}/#{stub}"
    case
    when File.file?(f)
      cp_r(f,place)
      chmod_util(place)
    when File.directory?(f)
      mkdir(place) unless FileTest.directory?(place)
    end
  end
end
def system_info
  puts <<WOK
  #{@p.platform_notice}

  Host
    host:             #{@p.host}
    arch:             #{@p.dir.arch}
    sitearch:         #{@p.dir.sitearch}

  Directories for installation
    bin:                                          #{@p.dir.bin}
    lib (site-ruby):                              #{@p.dir.lib}/#{@p.dir.proj}/v*
    conf [etc]:                                   #{@p.dir.conf}/#{@p.dir.proj}
    data (odf, shared images):                    #{@p.dir.share}
    vim  (vim syntax, highlighting, ftplugin):    #{@p.dir.data}/sisu/vim
    data (README, version_manifest):              #{@p.dir.data}/doc/#{@p.dir.proj}
    man (manual pages):                           #{@p.dir.man}
    output:                                       #{@p.dir.out}
      processing:                                 #{@p.dir.out}/processing
      www:                                        #{@p.dir.out}/www

    rubylib:          #{@p.dir.rubylib}

WOK
end
def sisu_version_info
  def version_file
    def v_current_
      "data/sisu/#{SiSU_dir_v_current}/v/version.yml"
    end
    def v_next_
      "data/sisu/#{SiSU_dir_v_next}/v/version.yml"
    end
    self
  end
  def yml_setting_v_current
    v="#{Dir.pwd}/#{version_file.v_current_}"
    if File.exist?(v)
      YAML::load(File::open(v))
    else ''
    end
  end
  def yml_setting_v_next
    v="#{Dir.pwd}/#{version_file.v_next_}"
    if File.exist?(v)
      YAML::load(File::open(v))
    else ''
    end
  end
  def current
    puts yml_setting_v_current
    puts yml_setting_v_next
  end
  def system_date
    `date "+%Y-%m-%d"`.strip
  end
  def system_date_stamp
    `date "+%Yw%W/%u"`.strip
  end
  def set
    def manual_setting_v_current
      {
        project:        'SiSU',
        version:        "#{SiSU_manual_setting_v_current}",
        date:           "#{system_date}",
        date_stamp:     "#{system_date_stamp}",
      }
    end
    def manual_setting_v_next
      {
        project:        'SiSU',
        version:        "#{SiSU_manual_setting_v_next}",
        date:           "#{system_date}",
        date_stamp:     "#{system_date_stamp}",
      }
    end
    def version_info_commit(filename,versioninfo,newversioninfo,existingversioninfo,version_file_is)
      ans=%{update sisu version info replacing:
  #{existingversioninfo.sort}
with:
  #{newversioninfo.sort}

#{version_file_is} becoming:
#{versioninfo}
proceed? }
      resp=answer?(ans)
      exit unless resp
      fn="#{Dir.pwd}/#{filename}"
      if File.writable?("#{Dir.pwd}/.")
        file_version=File.new(fn,'w+')
        file_version << versioninfo
        file_version.close
      else
        puts %{*WARN* is the file or directory writable? could not create #{filename}}
      end
    end
    def commit_v_current
      versioninfo= <<-WOK
---
:version: #{sisu_version_info.yml_setting_v_current[:version]}
:date_stamp: #{sisu_version_info.yml_setting_v_current[:date_stamp]}
:date: "#{sisu_version_info.yml_setting_v_current[:date]}"
:project: #{sisu_version_info.yml_setting_v_current[:project]}
      WOK
      puts version_file.v_current_
      version_info_commit(version_file.v_current_,versioninfo,set.manual_setting_v_current,sisu_version_info.yml_setting_v_current,version_file.v_current_)
    end
    def commit_v_next
      versioninfo= <<-WOK
---
:version: #{sisu_version_info.yml_setting_v_next[:version]}
:date_stamp: #{sisu_version_info.yml_setting_v_next[:date_stamp]}
:date: "#{sisu_version_info.yml_setting_v_next[:date]}"
:project: #{sisu_version_info.yml_setting_v_next[:project]}
      WOK
      puts version_file.v_next_
      version_info_commit(version_file.v_next_,versioninfo,set.manual_setting_v_next,sisu_version_info.yml_setting_v_next,version_file.v_next_)
    end
    def date_info
    end
    def changelog_header
      def v_current
        <<-WOK
%% #{sisu_version_info.yml_setting_v_current[:version]}.orig.tar.xz (#{sisu_version_info.yml_setting_v_current[:date]}:#{sisu_version_info.yml_setting_v_current[:date_stamp]})
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_#{sisu_version_info.yml_setting_v_current[:version]}
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_#{sisu_version_info.yml_setting_v_current[:version]}-1
http://www.jus.uio.no/sisu/pkg/src/sisu_#{sisu_version_info.yml_setting_v_current[:version]}.orig.tar.xz
  sisu_#{sisu_version_info.yml_setting_v_current[:version]}.orig.tar.xz
  sisu_#{sisu_version_info.yml_setting_v_current[:version]}-1.dsc
        WOK
      end
      def v_next
        <<-WOK
%% #{sisu_version_info.yml_setting_v_next[:version]}.orig.tar.xz (#{sisu_version_info.yml_setting_v_next[:date]}:#{sisu_version_info.yml_setting_v_next[:date_stamp]})
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_#{sisu_version_info.yml_setting_v_next[:version]}
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_#{sisu_version_info.yml_setting_v_next[:version]}-1
http://www.jus.uio.no/sisu/pkg/src/sisu_#{sisu_version_info.yml_setting_v_next[:version]}.orig.tar.xz
  sisu_#{sisu_version_info.yml_setting_v_next[:version]}.orig.tar.xz
  sisu_#{sisu_version_info.yml_setting_v_next[:version]}-1.dsc
        WOK
      end
      self
    end
    self
  end
  self
end
def version_update_manual
  puts 'date:       ' + `date "+%Y-%m-%d"`
  puts 'date_stamp: ' + `date "+%Yw%W/%u"`
end
def gemspecs
  def sisu_info_current
    puts <<-WOK
--
name:       #{sisu_version_info.yml_setting_v_current[:project].downcase}
version:    #{sisu_version_info.yml_setting_v_current[:version]}
date:       #{sisu_version_info.yml_setting_v_current[:date]}
summary:    #{sisu_version_info.yml_setting_v_current[:project]}
    WOK
  end
  def sisu_yml_current
    <<-WOK
Gem::Specification.new do |s|
  s.name           = '#{sisu_version_info.yml_setting_v_current[:project].downcase}'
  s.version        = '#{sisu_version_info.yml_setting_v_current[:version]}'
  s.date           = '#{sisu_version_info.yml_setting_v_current[:date]}'
  s.summary        = '#{sisu_version_info.yml_setting_v_current[:project]}'
  s.description    = 'SiSU gem'
  s.authors        = ["Ralph Amissah"]
  s.email          = 'ralph.amissah@gmail.com'
  s.files          = Dir['lib/sisu/#{SiSU_dir_v_current}/*.rb'] +
                     Dir['data/sisu/#{SiSU_dir_v_current}/v/version.yml'] +
                     Dir['bin/sisugem'] +
                     Dir['bin/sisu']
  s.license        = 'GPL3'
  s.executables << 'sisugem' << 'sisu'
end
    WOK
  end
  def sisu_manual_setting_current
    <<-WOK
Gem::Specification.new do |s|
  s.name           = '#{sisu_version_info.set.manual_setting_v_current[:project].downcase}'
  s.version        = '#{sisu_version_info.set.manual_setting_v_current[:version]}'
  s.date           = '#{sisu_version_info.set.manual_setting_v_current[:date]}'
  s.summary        = '#{sisu_version_info.set.manual_setting_v_current[:project]}'
  s.description    = 'SiSU gem'
  s.authors        = ["Ralph Amissah"]
  s.email          = 'ralph.amissah@gmail.com'
  s.files          = Dir['lib/sisu/#{SiSU_dir_v_current}/*.rb'] +
                     Dir['data/sisu/#{SiSU_dir_v_current}/v/version.yml'] +
                     Dir['bin/sisugem'] +
                     Dir['bin/sisu']
  s.license        = 'GPL3'
  s.executables << 'sisugem' << 'sisu'
end
    WOK
  end
  def sisu_info_next
    puts <<-WOK
--
name:       #{sisu_version_info.yml_setting_v_next[:project].downcase}
version:    #{sisu_version_info.yml_setting_v_next[:version]}
date:       #{sisu_version_info.yml_setting_v_next[:date]}
summary:    #{sisu_version_info.yml_setting_v_next[:project]}
    WOK
  end
  def sisu_yml_next
    <<-WOK
Gem::Specification.new do |s|
  s.name           = '#{sisu_version_info.yml_setting_v_next[:project].downcase}'
  s.version        = '#{sisu_version_info.yml_setting_v_next[:version]}'
  s.date           = '#{sisu_version_info.yml_setting_v_next[:date]}'
  s.summary        = '#{sisu_version_info.yml_setting_v_next[:project]}'
  s.description    = 'SiSU gem'
  s.authors        = ["Ralph Amissah"]
  s.email          = 'ralph.amissah@gmail.com'
  s.files          = Dir['lib/sisu/#{SiSU_dir_v_next}/*.rb'] +
                     Dir['data/sisu/#{SiSU_dir_v_next}/v/version.yml'] +
                     Dir['bin/sisugem'] +
                     Dir['bin/sisu']
  s.license        = 'GPL3'
  s.executables << 'sisugem' << 'sisu'
end
    WOK
  end
  def sisu_manual_setting_next
    <<-WOK
Gem::Specification.new do |s|
  s.name           = '#{sisu_version_info.set.manual_setting_v_next[:project].downcase}'
  s.version        = '#{sisu_version_info.set.manual_setting_v_next[:version]}'
  s.date           = '#{sisu_version_info.set.manual_setting_v_next[:date]}'
  s.summary        = '#{sisu_version_info.set.manual_setting_v_next[:project]}'
  s.description    = 'SiSU gem'
  s.authors        = ["Ralph Amissah"]
  s.email          = 'ralph.amissah@gmail.com'
  s.files          = Dir['lib/sisu/#{SiSU_dir_v_next}/*.rb'] +
                     Dir['data/sisu/#{SiSU_dir_v_next}/v/version.yml'] +
                     Dir['bin/sisugem'] +
                     Dir['bin/sisu']
  s.license        = 'GPL3'
  s.executables << 'sisugem' << 'sisu'
end
    WOK
  end
  def gemspec_create(filename,gemspec)
    fn="#{Dir.pwd}/#{filename}"
    if File.writable?("#{Dir.pwd}/.")
      file_sisu_gemspec=File.new(fn,'w+')
      file_sisu_gemspec << gemspec
      file_sisu_gemspec.close
    else
      puts %{*WARN* is the file or directory writable? could not create #{filename}}
    end
  end
  def sisu_filename_yml_current
    "sisu-#{sisu_version_info.yml_setting_v_current[:version]}"
  end
  def sisu_filename_yml_next
    "sisu-#{sisu_version_info.yml_setting_v_next[:version]}"
  end
  def sisu_filename_manual_current
    "sisu-#{sisu_version_info.set.manual_setting_v_current[:version]}"
  end
  def sisu_filename_manual_next
    "sisu-#{sisu_version_info.set.manual_setting_v_next[:version]}"
  end
  def sisu_gemspec_create_current
    filename="#{sisu_filename_yml_current}.gemspec"
    gemspec_create(filename,sisu_yml_current)
    gemspec_create('sisu-current.gemspec',sisu_yml_current)
  end
  def sisu_gemspec_create_next
    filename="#{sisu_filename_yml_next}.gemspec"
    gemspec_create(filename,sisu_yml_next)
    gemspec_create('sisu-next.gemspec',sisu_yml_next)
  end
  def sisu_gemspec_create_manual_version_current
    filename="#{sisu_filename_manual_current}.gemspec"
    gemspec_create(filename,sisu_manual_setting_current)
  end
  def sisu_gemspec_create_manual_version_next
    filename="#{sisu_filename_manual_next}.gemspec"
    gemspec_create(filename,sisu_manual_setting_next)
  end
  def sisu_build_current
    system(%{ gem build #{sisu_filename_yml_current}.gemspec })
  end
  def sisu_build_next
    system(%{ gem build #{sisu_filename_yml_next}.gemspec })
  end
  def sisu_build_manual_current
    system(%{ gem build #{sisu_filename_manual_current}.gemspec})
  end
  def sisu_build_manual_next
    system(%{ gem build #{sisu_filename_manual_next}.gemspec})
  end
  def sisu_install_current
    system(%{
      sudo gem install --no-rdoc --no-ri --verbose sisu-#{sisu_version_info.yml_setting_v_current[:version]}.gem
    })
  end
  def sisu_install_next
    system(%{
      sudo gem install --no-rdoc --no-ri --verbose sisu-#{sisu_version_info.yml_setting_v_next[:version]}.gem
    })
  end
  def sisu_install_manual_current
    system(%{
      sudo gem install --no-rdoc --no-ri --verbose #{sisu_filename_manual_current}.gem
    })
  end
  def sisu_install_manual_next
    system(%{
      sudo gem install --no-rdoc --no-ri --verbose #{sisu_filename_manual_next}.gem
    })
  end
  self
end
def project_help
  puts <<WOK

#{@p.name}
  #{@p.rake_rant}
  #{@p.platform_notice}

Commands quick start list

  #{@p.name} Rake/Rant Help: (Rakefile or Rantfile)
    rake -T or rant -T          # a task list, (generated by Rake or Rant) for more complete and up to date help
    rake system or rant system  # system info used

  Quick start install and remove project #{@p.name}
   as root:
    rake or rant                                # install #{@p.name}
    rake base

    rake setup                                  # install #{@p.name} (larger install)

    rake install                                # reinstall #{@p.name}

    rake remove                                 # clobber/remove #{@p.name}, current version: #{@p.version}
    rake remove_package                         # clobber/remove #{@p.name}, all versions

For a more detailed and up to date list of command options use:
  rake -T
  rant -T

WOK
end
def tasks
  system('rake -T')
end
#% tasks
desc "rake/rant sisu install (as root type 'rake' or 'rant')"
task :default => [:default_notice,:setup_base]
#task :default => [:help,:notice,:project]
desc "Setup/Install #{@p.name} and try generate a file"
task :project=> [:setup_bin,:setup_lib,:setup_conf,:setup_share,:setup_data,:setup_man,:setup_vim,:post_install_note]
desc "Setup/Install #{@p.name}"
task :setup=> [:setup_bin, :setup_lib,:setup_conf,:setup_share,:setup_data] #, :help]
desc "Setup/Install #{@p.name}: bin, lib and conf (no data)"
task :setup_base=> [:setup_bin,:setup_lib,:setup_conf,:setup_share,:setup_man,:setup_vim]
desc "Setup/Install #{@p.name} bin, lib and conf (no data and no attempt to do postinstall setup)"
task :base=> [:setup_base]
desc "check package version"
task :sisuversion => [:sisu_version]
desc "set package version"
task :sisuversionset => [:sisu_version_set]
desc "check gemspec info"
task :gemspec => [:gemspec_info]
desc "create sisu v_current gemspec"
task :gem4cs => [:gemspecs_current_create_default_version]
task :gem4createspecs => [:gemspecs_current_create_default_version]
desc "create sisu v_next gemspec"
task :gem5cs => [:gemspecs_next_create_default_version]
task :gem5createspecs => [:gemspecs_next_create_default_version]
desc "create gemspec"
task :gemcs => [:gemspecs_create_default_version]
task :gemc => [:gemspecs_create_default_version]
task :gemspecscreate => [:gemspecs_create_default_version]
#---
desc "build gem"
task :gemb => [:gem_build]
task :gembuild => [:gem_build]
desc "build sisu v_current gem"
task :gem4b => [:gem_current_build]
task :gem4build => [:gem_current_build]
desc "build sisu v_next gem"
task :gem5b => [:gem_next_build]
task :gem5build => [:gem_next_build]
desc "install gem"
task :gemi => [:gem_install]
task :geminstall => [:gem_install]
desc "build & install sisu v_current gem"
task :gem4bi => [:gem_current_build,:gem_install]
desc "build & install sisu v_next gem"
task :gem5bi => [:gem_next_build,:gem_install]
desc "build & install gem"
task :gembi => [:gem_build,:gem_install]
desc "create, build & install sisu v_current gem"
task :gem4cbi => [:gemspecs_current_create_default_version,:gem_current_build,:gem_current_install]
desc "create, build & install sisu v_next gem"
task :gem5cbi => [:gemspecs_next_create_default_version,:gem_next_build,:gem_next_install]
desc "create, build & install sisu v_current & v_next gem"
task :gemcbi => [:gemspecs_create_default_version,:gem_build,:gem_install]
#---
desc "create sisu v_current gemspec, manually set version"
task :gem4csm => [:gemspecs_current_create_manual_version]
desc "create sisu v_next gemspec, manually set version"
task :gem5csm => [:gemspecs_next_create_manual_version]
desc "create gemspec, manually set version"
task :gemcsm => [:gemspecs_create_manual_version]
task :gemcm => [:gemspecs_create_manual_version]
#---
desc "build gem"
task :gembm => [:gem_build_manual_version]
desc "build sisu v_current gem"
task :gem4bm => [:gem_current_build_manual_version]
desc "build sisu v_next gem"
task :gem5bm => [:gem_next_build_manual_version]
desc "install gem"
task :gemim => [:gem_install_manual_version]
desc "build & install sisu v_current gem"
task :gem4bim => [:gem_current_build_manual_version,:gem_install_manual_version]
desc "build & install sisu v_next gem"
task :gem5bim => [:gem_next_build_manual_version,:gem_install_manual_version]
desc "build & install gem"
task :gembim => [:gem_build_manual_version,:gem_install_manual_version]
desc "create, build & install sisu v_current gem"
task :gem4cbim => [:gemspecs_current_create_manual_version,:gem_current_build_manual_version,:gem_current_install_manual_version]
desc "create, build & install sisu v_next gem"
task :gem5cbim => [:gemspecs_next_create_manual_version,:gem_next_build_manual_version,:gem_next_install_manual_version]
desc "create, build & install sisu v_current & v_next gem"
task :gemcbim => [:gemspecs_create_manual_version,:gem_build_manual_version,:gem_install_manual_version]
#---
desc "check changelog headers"
task :changelogheaders => [:changelog_headers]
if File.directory?('bin')                                       #bin
  desc "Setup #{@p.name} bin only, synonym :bin"
  task :bin => [:setup_bin]
end
if File.directory?('lib')                                       #lib
  desc "Setup #{@p.name} lib only, synonym :lib"
  task :lib => [:setup_lib]
end
if File.directory?('conf')                                      #conf or etc
  desc "Setup #{@p.name} conf only, synonyms :conf & :etc"
  task :conf => [:setup_conf]
  task :setup_etc => [:setup_conf]
  task :etc => [:setup_conf]
end
if File.directory?('data')                                      #data
  desc "Setup #{@p.name} data only, synonyms :data & :examples"
  task :data => [:setup_data]
  task :setup_examples => [:setup_data]
  task :examples => [:setup_data]
end
if File.directory?('data/sisu')                                      #share (odf shared-images)
  desc "Setup #{@p.name} shared data only (odf & shared images)"
  task :share => [:setup_share]
end
if File.directory?('man')                                  #man pages
  desc "Setup #{@p.name} man pages only, synonyms :man"
  task :man => [:setup_man]
end
if File.directory?('data/vim')                                  #man pages
  desc "Setup #{@p.name} vim config files only, synonyms :vim"
  task :setup_vim => [:setup_vim]
  task :vim => [:setup_vim]
end
desc "Setup/Install #{@p.name}: bin, lib, conf and data (no attempt to do postinstall setup)"
task :setup_only=> [:setup_bin,:setup_lib,:setup_conf,:setup_share,:setup_data,:help]
desc "Remove #{@p.name} (all versions)"                   #remove project
task :remove_package => [:remove_bin, :remove_lib, :remove_conf]
if File.directory?('bin')                                       #bin
  desc "Remove #{@p.name} bin only"                       #remove bin
  task :remove_bin => [:remove_bin]
end
if File.directory?('lib')                                       #lib
  desc "Remove #{@p.name} lib only"                       #remove lib
  task :remove_lib => [:remove_lib]
end
if File.directory?('conf')                                      #conf
  desc "Remove #{@p.name} conf only"                      #remove conf
  task :remove_conf => [:remove_conf]
end
desc "Re-setup #{@p.name}, synonym :reinstall"            #resetup reinstall
task :resetup => [:remove, :setup]
task :reinstall => [:remove, :setup]
desc "Re-setup #{@p.name}: bin, lib, conf (ignore data), synonym :reinstall"  #partial reinstall
task :resetup_base => [:remove, :setup_base]
task :reinstall_base => [:remove, :setup_base]
if File.directory?('bin')                                       #bin
  desc "Re-setup #{@p.name} bin, synonym :reinstall"
  task :resetup_bin => [:remove_bin, :setup_bin]
  task :reinstall_bin => [:remove_bin, :setup_bin]
end
if File.directory?('lib')                                       #lib
  desc "Re-setup #{@p.name} lib, synonym :reinstall_lib"
  task :resetup_lib => [:remove_lib, :setup_lib]
  task :reinstall_lib => [:remove_lib, :setup_lib]
end
if File.directory?('conf')                                       #conf
  desc "Re-setup #{@p.name} conf, synonyms :reinstall_conf & :resetup_etc"
  task :resetup_conf => [:remove_conf, :setup_conf]
  task :reinstall_conf => [:remove_conf, :setup_conf]
  task :resetup_etc => [:remove_conf, :setup_conf]
  task :reinstall_etc => [:remove_conf, :setup_conf]
end
if File.directory?('data/sisu')                                       #share
  desc "Re-setup #{@p.name} shared data, (odf & images)"
  task :resetup_share => [:remove_share, :setup_share]
  task :reinstall_share => [:remove_share, :setup_share]
end
if File.directory?('man')                                    #man
  desc "Re-setup #{@p.name} man, synonym :reinstall_man"
  task :resetup_man => [:remove_man, :setup_man]
  task :reinstall_man => [:remove_man, :setup_man]
end
desc 'Setup Note'
task :setup_note => [:help]
desc "System information used by #{@p.name}"
task :system => [:system_info,:project_help,:post_install_note]
desc "show all system info available - parameters found"
task :system_param => [:system_param]
desc 'Help'
task :help => [:project_help,:system_info,:tasks]
#desc "Setup/Install #{@p.name} (uses filelist)"
task :install => [:default_notice,:project]
task :install_bin => [:setup_bin]
                                                           #%% setup/install tasks
task :rant_independence do                                 #notice
  resp=''
  while resp.length < 4
    resp='sisu-install'                                     #default name install
    print %{#{@p.rake_rant}
  Create a rant dependency independent file
  provide filename default name is "install"
    [Warning, will overwrite file of name provided
      provide name or "quit" to exit]: }
    exit if resp =~/^(?:n|quit|exit)$/
  end
  remove='y' #remove='n'
 if remove =~/y/
   system("rant-import --force --auto #{resp};
     chmod 755 #{resp}
   ")
 else #puts "#{resp} not replaced"
 end
end

task :default_notice do                                    #notice
  default_notice
end
task :default2 do                                     #secondary
  setup_find_cp_r('bin',@p.dir.bin) if File.directory?('bin')
  setup_find_cp_r('lib',@p.dir.lib) if File.directory?('lib')
  setup_find_cp_r('conf',@p.dir.conf) if File.directory?('conf')
  setup_find_cp_r('data/sisu',@p.dir.share) if File.directory?('data/sisu') #
  setup_find_cp_r('data',@p.dir.data) if File.directory?('data')
  setup_find_cp_r('data/vim',"#{@p.dir.data}/vim") if File.directory?('data/vim')
  setup_find_cp_r('man',@p.dir.man) if File.directory?('man')
end
task :setup_bin do                                         #bin
  exclude_files=['sisugem']
  setup_find_create('bin',@p.dir.bin,exclude_files) if File.directory?('bin')
end
task :setup_lib do                                         #lib
  setup_find_create('lib',@p.dir.lib) if File.directory?('lib')
end
task :setup_conf do                                        #conf
  setup_find_create('conf',@p.dir.conf) if File.directory?('conf')
end
task :setup_share do                                        #share
  setup_find_create('data/sisu',@p.dir.share) if File.directory?('data/sisu')
end
task :setup_data do                                        #data
  setup_find_create('data',@p.dir.data) if File.directory?('data')
end
task :setup_man do                                         #man
  setup_find_create('man',@p.dir.man) if File.directory?('man') #man pages
  setup_find_create('man.deb/man',@p.dir.man) if File.directory?('man.deb/man') #man pages
end
task :setup_vim do                                         #man
  setup_find_create('data/vim',@p.dir.vim) if File.directory?('data/vim') #man pages
end
task :gemspec_info do                                         #man
  version_update_manual
  gemspecs.sisu_info_current
  gemspecs.sisu_info_next
end
task :gemspecs_current_create_default_version do                                         #man
  gemspecs.sisu_gemspec_create_current
end
task :gemspecs_next_create_default_version do                                         #man
  gemspecs.sisu_gemspec_create_next
end
task :gemspecs_create_default_version do                                         #man
  gemspecs.sisu_gemspec_create_current
  gemspecs.sisu_gemspec_create_next
end
task :gemspecs_current_create_manual_version do                                         #man
  gemspecs.sisu_gemspec_create_manual_version_current
end
task :gemspecs_next_create_manual_version do                                         #man
  gemspecs.sisu_gemspec_create_manual_version_next
end
task :gemspecs_create_manual_version do                                         #man
  gemspecs.sisu_gemspec_create_manual_version_current
  gemspecs.sisu_gemspec_create_manual_version_next
end
task :gem_current_build do                                         #man
  gemspecs.sisu_build_current
end
task :gem_next_build do                                         #man
  gemspecs.sisu_build_next
end
task :gem_build do                                         #man
  gemspecs.sisu_build_current
  gemspecs.sisu_build_next
end
task :gem_current_build_manual_version do                                         #man
  gemspecs.sisu_build_manual_current
end
task :gem_next_build_manual_version do                                         #man
  gemspecs.sisu_build_manual_next
end
task :gem_build_manual_version do                                         #man
  gemspecs.sisu_build_manual_current
  gemspecs.sisu_build_manual_next
end
task :gem_current_install do                                         #man
  gemspecs.sisu_install_current
end
task :gem_next_install do                                         #man
  gemspecs.sisu_install_next
end
task :gem_install do                                         #man
  gemspecs.sisu_install_current
  gemspecs.sisu_install_next
end
task :gem_current_install_manual_version do                                         #man
  gemspecs.sisu_install_manual_current
end
task :gem_next_install_manual_version do                                         #man
  gemspecs.sisu_install_manual_next
end
task :gem_install_manual_version do                                         #man
  gemspecs.sisu_install_manual_current
  gemspecs.sisu_install_next
end
task :changelog_headers do                                         #man
  puts '---'
  puts sisu_version_info.set.changelog_header.v_current
  puts '---'
  puts sisu_version_info.set.changelog_header.v_next
end
task :sisu_version do                                         #man
  puts sisu_version_info.set.manual_setting_v_current
  puts sisu_version_info.set.manual_setting_v_next
  puts sisu_version_info.current
  #version.current.each do |x|
  #  puts x
  #end
  puts sisu_version_info.yml_setting_v_current[:project]
  puts sisu_version_info.yml_setting_v_current[:version]
  puts sisu_version_info.yml_setting_v_current[:date]
  puts sisu_version_info.yml_setting_v_current[:date_stamp]
  puts '---'
  puts sisu_version_info.yml_setting_v_next[:project]
  puts sisu_version_info.yml_setting_v_next[:version]
  puts sisu_version_info.yml_setting_v_next[:date]
  puts sisu_version_info.yml_setting_v_next[:date_stamp]
end
task :sisu_version_set do                                         #man
  sisu_version_info.set.commit_v_current
  sisu_version_info.set.commit_v_next
end
                                                           #%% post install
                                                           #%% clobber/remove tasks
task :remove_bin do
  rm_r "#{@p.dir.bin}/#{@p.dir.proj}" if FileTest.file?("#{@p.dir.bin}/#{@p.dir.proj}")
end
task :remove_lib do
  rm_r "#{@p.dir.lib}/#{@p.dir.proj}" if FileTest.directory?("#{@p.dir.lib}/#{@p.dir.proj}")
end
task :remove_conf do
  rm_r "#{@p.dir.conf}/#{@p.dir.proj}" if FileTest.directory?("#{@p.dir.conf}/#{@p.dir.proj}")
end
task :remove_man do
  rm_r "#{@p.dir.man}/**/#{@p.dir.proj}" if FileTest.directory?("#{@p.dir.man}/man1/#{@p.dir.proj}")
end
task :remove_version do
  rm_r "#{@p.dir.bin}/#{@p.dir.proj}" if FileTest.file?("#{@p.dir.bin}/#{@p.dir.proj}")
  rm_r "#{@p.dir.lib}/#{@p.dir.proj}/#{@p.version}" if FileTest.directory?("#{@p.dir.lib}/#{@p.dir.proj}/#{@p.version}")
  rm_r "#{@p.dir.conf}/#{@p.dir.proj} if FileTest.directory?("#{@p.dir.conf}/#{@p.dir.proj}")
end
task :remove_package do
  rm_r "#{@p.dir.bin}/#{@p.dir.proj}" if FileTest.file?("#{@p.dir.bin}/#{@p.dir.proj}")
  rm_r "#{@p.dir.lib}/#{@p.dir.proj}" if FileTest.directory?("#{@p.dir.lib}/#{@p.dir.proj}")
  rm_r "#{@p.dir.conf}/#{@p.dir.proj}" if FileTest.directory?("#{@p.dir.conf}/#{@p.dir.proj}")
end
task :post_install_note do
  puts <<WOK

  sisu markup samples are now packaged separately in sisu-markup-samples
    visit:
      <http://www.jus.uio.no/sisu>
      <http://search.sisudoc.org>
    and:
      <http://www.jus.uio.no/sisu/SiSU/download>

WOK
end
task :system_info do                                       #%% system info
  system_info
end
task :system_param do
  @env.each {|c| puts c.inspect }
end
task :project_help do                                       #%% help
  project_help
end
task :tasks do                                       #%% help
  tasks
end