aboutsummaryrefslogtreecommitdiffhomepage
path: root/rbuild
diff options
context:
space:
mode:
Diffstat (limited to 'rbuild')
-rw-r--r--rbuild455
1 files changed, 455 insertions, 0 deletions
diff --git a/rbuild b/rbuild
new file mode 100644
index 00000000..00dab443
--- /dev/null
+++ b/rbuild
@@ -0,0 +1,455 @@
+#!/usr/bin/env ruby
+raise 'Please, use ruby1.8.4 or later.' if RUBY_VERSION < '1.8.4'
+=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
+ [else [if sisu-install is present]]
+ ruby sisu-install -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")
+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 dir_proj
+ 'sisu'
+ end
+ def env
+ Config::CONFIG
+ end
+ def host
+ env['host']
+ end
+ def dir_arch
+ env['archdir']
+ end
+ def dir_sitearch
+ env['sitearchdir']
+ end
+ def dir_bin
+ env['bindir']
+ end
+ def dir_lib
+ env['sitelibdir']
+ end
+ def dir_data
+ env['datadir']
+ end
+ def dir_share
+ "#{env['datadir']}/sisu"
+ end
+ def dir_conf
+ env['sysconfdir']
+ end
+ def dir_man
+ env['mandir']
+ end
+ def dir_vim
+ "#{env['datadir']}/sisu/vim"
+ end
+ def dir_out
+ "#{env['localstatedir']}/#{dir_proj}"
+ end
+ def dir_rubylib
+ env['LIBRUBYARG_SHARED']
+ end
+ def dir_pwd
+ Dir.pwd #ENV['PWD']
+ end
+ def version
+ stamp={}
+ v="#{dir_pwd}/conf/sisu/version.yml"
+ version=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
+ ans=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 is installed:]
+ "rake help" or "rake -T"
+ [if rant is installed:]
+ "rant help" or "rant -T"
+ [else [if sisu-install is present]:]
+ "sisu-install help" or "sisu-install -T"
+ Default action selected - "install and to setup #{@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) #primary,
+ 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)
+ cp(f,place)
+ chmod_file(place)
+ "-> #{dir_put}/"
+ when File.directory?(f)
+ FileUtils.mkpath(place) unless FileTest.directory?(place)
+ "./#{dir_get}/"
+ else '?'
+ end
+ puts "#{action}#{stub}"
+ 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 project_help
+ puts <<WOK
+
+#{@p.name}
+ #{@p.rake_rant}
+ #{@p.platform_notice}
+
+Commands quick start list
+
+ #{@p.name} Rake/Rant Help: (This Rakefile or Rantfile uses the same directory structure as setup.rb)
+ 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 setup or rant setup # install #{@p.name} (without additonal configuration and generating of test file)
+
+ rake install or rant reinstall # reinstall #{@p.name}
+
+ rake remove or rant remove # clobber/remove #{@p.name}, current version: #{@p.version}
+ rake remove_package or rant 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
+ sys('rant -T')
+end
+ #%% tasks
+desc "rake/rant (as root type 'rake' or 'rant' for default action)"
+task :default => [:default_notice,:project]
+#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]
+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
+#if File.directory?('data') #data
+# desc "Remove #{@p.name} data only" #remove data
+# task :remove_data => [:remove_data]
+#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]
+desc '[make rant independent install file]'
+task :create_rant_independent_task_file => [:rant_independence]
+ #%% 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
+ setup_find_create('bin',@p.dir_bin) 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
+ #%% 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