#!/usr/bin/env ruby =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) require 'find' require 'fileutils' #require 'ftools' require 'rbconfig.rb' require 'yaml' include FileUtils require_relative 'sisu_version' # sisu_version.rb include SiSUversion require_relative 'rbuild_libs' # rbuild_libs.rb include Project_details include Utils include Version_info include Gemspecs include GitExtractTaggedVersionBuild require_relative 'rbuild_help' # rbuild_help.rb include Help #% tasks desc "show rake/rant tasks for sisu install, and sisu gem (create spec, build &) install" task :default => [:note_sources,:tasks,:note_installation] #[:default_notice,:setup_base] desc "Setup/Install #{Project_details.name}" task :setup_project=> [:setup_bin_,:setup_lib_,:setup_conf_,:setup_share_,:setup_data_,:setup_man_,:setup_vim_,:src_note] task :project=> \ [:setup_project] desc "Setup/Install #{Project_details.name}" task :setup=> [:setup_bin_, :setup_lib_,:setup_conf_,:setup_share_,:setup_data_] #, :help] desc "Setup/Install #{Project_details.name}: bin, lib and conf (no data)" task :setup_base=> [:setup_bin_,:setup_lib_,:setup_conf_,:setup_share_,:setup_man_,:setup_vim_,:note_sources] task :base=> [:setup_base] desc "Setup/Install #{Project_details.name}: bin, lib, conf & data" task :setup_with_data=> [:setup_base,:setup_data] desc "check package version" task :sisuversion => [:sisu_version] task :version => [:sisu_version] #desc "set package version" task :sisuversionset => [:sisu_version_set,:changelog_headers] desc "check gemspec info" task :gem_spec => [:gemspec_info] desc "create sisu v_stable gemspec" task :gem_create_spec_stable => [:gemspecs_stable_create_default_version] task :gem5cs => [:gem_create_spec_stable] task :gem5createspecs => [:gemspecs_stable_create_default_version] desc "create gemspec" task :gem_create_spec => [:gemspecs_create_default_version] task :gem_create => [:gemspecs_create_default_version] task :gemc => [:gemspecs_create_default_version] #--- desc "build gem" task :gem_build => [:gem_build_] task :gemb => [:gem_build] task :gembuild => [:gem_build] desc "build sisu v_stable gem" task :gem_build_stable => [:gem_stable_build] task :gem5b => [:gem_build_stable] task :gem5build => [:gem_build_stable] #--- desc "create, build & install sisu v_stable gem" task :gem_create_build_install_stable => [:gemspecs_stable_create_default_version,:gem_stable_build,:gem_stable_install] task :gem5cbi => [:gem_create_build_install_stable] desc "create, build & install sisu gem" task :gem_create_build_install => [:gemspecs_create_default_version,:gem_build_,:gem_install_] task :gemcbi => [:gem_create_build_install] #--- desc "install gem" task :gem_install => [:gem_install_] task :gemi => [:gem_install] task :geminstall => [:gem_install] desc "build & install sisu v_stable gem" task :gem_build_install_stable => [:gem_stable_build,:gem_install_] task :gem5bi => [:gem_build_install_stable] desc "build & install gem" task :gem_build_install => [:gem_build,:gem_install_] task :gembi => [:gem_build_install] #-- manually set next version #desc "create sisu v_stable gemspec, manually set next version" task :gem5csn => [:gemspecs_stable_create_next_version] #desc "create gemspec, manually set next version" task :gemcsn => [:gemspecs_create_next_version] task :gemcn => [:gemspecs_create_next_version] #desc "build gem, manually set next version" task :gembn => [:gem_build_next_version] #desc "build sisu v_stable gem, manually set next version" task :gem5bn => [:gem_stable_build_next_version] #desc "install gem, manually set next version" task :gemin => [:gem_install_next_version] #desc "build & install sisu v_stable gem, manually set next version" task :gem5bin => [:gem_stable_build_next_version,:gem_install_next_version] #desc "build & install gem, manually set next version" task :gembin => [:gem_build_next_version,:gem_install_next_version] #desc "create, build & install sisu v_stable gem, manually set next version" task :gem5cbin => [:gemspecs_stable_create_next_version,:gem_stable_build_next_version,:gem_stable_install_next_version] #desc "create, build & install sisu gem, manually set next version" task :gemcbin => [:gemspecs_create_next_version,:gem_build_next_version,:gem_install_next_version] #--- #desc "check changelog headers" task :changelogheaders => [:changelog_headers] task :dev => [:note_developer] task :developer_note => [:note_developer] if File.directory?('bin') desc "Setup #{Project_details.name} bin only, synonym :bin" task :setup_bin => [:setup_bin_] task :bin => [:setup_bin] end if File.directory?('lib') desc "Setup #{Project_details.name} lib only, synonym :lib" task :setup_lib => [:setup_lib_] task :lib => [:setup_lib] end if File.directory?('conf') desc "Setup #{Project_details.name} conf only, synonyms :conf & :etc" task :setup_conf => [:setup_conf_] task :conf => [:setup_conf] task :setup_etc => [:setup_conf] task :etc => [:setup_conf] end if File.directory?('data') desc "Setup #{Project_details.name} data only, synonyms :data & :examples" task :setup_data => [:setup_data_] task :data => [:setup_data] task :setup_examples => [:setup_data] task :examples => [:setup_data] end if File.directory?('data/sisu') #desc "Setup #{Project_details.name} shared data only (odf & shared images)" task :setup_share => [:setup_share_] task :share => [:setup_share] end if File.directory?('man') desc "Setup #{Project_details.name} man pages only, synonyms :man" task :setup_man => [:setup_man_] task :man => [:setup_man] end if File.directory?('data/vim') desc "Setup #{Project_details.name} vim config files only, synonyms :vim" task :setup_vim => [:setup_vim_] task :vim => [:setup_vim] end desc "Remove #{Project_details.name} (all versions)" task :remove_package => [:remove_bin, :remove_lib, :remove_conf] if File.directory?('bin') #desc "Remove #{Project_details.name} bin only" task :remove_bin => [:remove_bin] end if File.directory?('lib') #desc "Remove #{Project_details.name} lib only" task :remove_lib => [:remove_lib] end if File.directory?('conf') #desc "Remove #{Project_details.name} conf only" task :remove_conf => [:remove_conf] end desc "Re-setup #{Project_details.name}, synonym :reinstall" task :resetup => [:remove, :setup] task :reinstall => [:remove, :setup] #desc "Re-setup #{Project_details.name}: bin, lib, conf (ignore data), synonym :reinstall" task :resetup_base => [:remove, :setup_base_] task :reinstall_base => [:remove, :setup_base_] if File.directory?('bin') #desc "Re-setup #{Project_details.name} bin, synonym :reinstall" task :resetup_bin => [:remove_bin, :setup_bin_] task :reinstall_bin => [:remove_bin, :setup_bin_] end if File.directory?('lib') #desc "Re-setup #{Project_details.name} lib, synonym :reinstall_lib" task :resetup_lib => [:remove_lib, :setup_lib_] task :reinstall_lib => [:remove_lib, :setup_lib_] end if File.directory?('conf') #desc "Re-setup #{Project_details.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') #desc "Re-setup #{Project_details.name} shared data, (odf & images)" task :resetup_share => [:remove_share, :setup_share_] task :reinstall_share => [:remove_share, :setup_share_] end if File.directory?('man') #desc "Re-setup #{Project_details.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 #{Project_details.name}" task :system => [:system_info,:project_help,:note_sources] desc "show all system info available - parameters found" task :system_param => [:system_param_] desc "Gem environment information used ruby gems for #{Project_details.name}" task :gem_env => [:gem_env_] desc 'Help' task :help => [:project_help,:system_info,:tasks] #desc "Setup/Install #{Project_details.name} (uses filelist)" task :install => [:default_notice,:project] task :install_bin => [:setup_bin_] #desc "search for a version tag e.g. 'tag[5.6.0]'" task :tag, [:tag] do |t, args| args.with_defaults(:tag => Version_info::Next.setting_stable[:version]) puts "Check for Version Tag: #{args.tag}" print "Version Tag: " GitExtractTaggedVersionBuild::git_tagged_versions(args) end #desc "build and install a specific git tagged version of sisu, e.g. 'build[5.6.0]'" task :build, [:tag, :branch] => :done do |t, args| args.with_defaults(:tag => '5.6.0', :branch => 'stable') puts "Version Tag: #{args.tag}" puts "Branch: #{args.branch}" GitExtractTaggedVersionBuild::git_tagged_versions(args.tag) ans= <<-WOK Gem Install SiSU Version WOK resp=Utils.answer?(ans) exit unless resp GitExtractTaggedVersionBuild::git_checkout_and_build_version(args) end task :done do puts 'done' end #%% setup/install tasks task :rant_independence do #notice resp='' while resp.length < 4 resp='sisu-install' #default name install print %{#{Project_details.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 Utils.default_notice end task :default2 do #secondary setup_find_cp_r('bin',Project_details.dir.bin) \ if File.directory?('bin') setup_find_cp_r('lib',Project_details.dir.lib) \ if File.directory?('lib') setup_find_cp_r('conf',Project_details.dir.conf) \ if File.directory?('conf') setup_find_cp_r('data/sisu',Project_details.dir.share) \ if File.directory?('data/sisu') # setup_find_cp_r('data',Project_details.dir.data) \ if File.directory?('data') setup_find_cp_r('data/vim',"#{Project_details.dir.data}/vim") \ if File.directory?('data/vim') setup_find_cp_r('man',Project_details.dir.man) \ if File.directory?('man') end task :setup_bin_ do exclude_files=['sisugem'] Install.setup_find_create('bin',Project_details.dir.bin,exclude_files) \ if File.directory?('bin') end task :setup_lib_ do Install.setup_find_create('lib',Project_details.dir.lib) \ if File.directory?('lib') end task :setup_conf_ do Install.setup_find_create('conf',Project_details.dir.conf) \ if File.directory?('conf') end task :setup_share_ do Install.setup_find_create('data/sisu',Project_details.dir.share) \ if File.directory?('data/sisu') end task :setup_data_ do Install.setup_find_create('data',Project_details.dir.data) \ if File.directory?('data') end task :setup_man_ do Install.setup_find_create('man',Project_details.dir.man) \ if File.directory?('man') Install.setup_find_create('man.deb/man',Project_details.dir.man) \ if File.directory?('man.deb/man') end task :setup_vim_ do Install.setup_find_create('data/vim',Project_details.dir.vim) \ if File.directory?('data/vim') end task :gemspec_info do Gemspecs.info_stable end task :gemspecs_stable_create_default_version do Gemspecs::Current.create_stable end task :gemspecs_create_default_version do Gemspecs::Current.create_stable end task :gemspecs_stable_create_next_version do Gemspecs::Next.create_stable end task :gemspecs_create_next_version do Gemspecs::Next.create_stable end task :gem_stable_build do Gemspecs::Current.build_stable end task :gem_build_ do Gemspecs::Current.build_stable end task :gem_stable_build_next_version do Gemspecs::Next.build_stable end task :gem_build_next_version do Gemspecs::Next.build_stable end task :gem_stable_install do Gemspecs::Current.install_stable end task :gem_install_ do Gemspecs::Current.install_stable end task :gem_stable_install_next_version do Gemspecs::Next.install_stable end task :gem_install_next_version do Gemspecs::Next.install_stable end task :changelog_headers do puts '---' puts Version_info::Update.changelog_header_stable end task :sisu_version do puts Version_info::Next.setting_stable puts '---' puts Version_info::Current.setting_stable[:project] puts Version_info::Current.setting_stable[:version] puts Version_info::Current.setting_stable[:date] puts Version_info::Current.setting_stable[:date_stamp] end task :sisu_version_set do Version_info::Update.update_stable end #%% post install #%% clobber/remove tasks task :remove_bin do rm_r "#{Project_details.dir.bin}/#{Project_details.dir.proj}" \ if FileTest.file?("#{Project_details.dir.bin}/#{Project_details.dir.proj}") end task :remove_lib do rm_r "#{Project_details.dir.lib}/#{Project_details.dir.proj}" \ if FileTest.directory?("#{Project_details.dir.lib}/#{Project_details.dir.proj}") end task :remove_conf do rm_r "#{Project_details.dir.conf}/#{Project_details.dir.proj}" \ if FileTest.directory?("#{Project_details.dir.conf}/#{Project_details.dir.proj}") end task :remove_man do rm_r "#{Project_details.dir.man}/**/#{Project_details.dir.proj}" \ if FileTest.directory?("#{Project_details.dir.man}/man1/#{Project_details.dir.proj}") end task :remove_version do rm_r "#{Project_details.dir.bin}/#{Project_details.dir.proj}" \ if FileTest.file?("#{Project_details.dir.bin}/#{Project_details.dir.proj}") rm_r "#{Project_details.dir.lib}/#{Project_details.dir.proj}/#{Project_details.version}" \ if FileTest.directory?("#{Project_details.dir.lib}/#{Project_details.dir.proj}/#{Project_details.version}") rm_r "#{Project_details.dir.conf}/#{Project_details.dir.proj} \ if FileTest.directory?("#{Project_details.dir.conf}/#{Project_details.dir.proj}") end task :remove_package do rm_r "#{Project_details.dir.bin}/#{Project_details.dir.proj}" \ if FileTest.file?("#{Project_details.dir.bin}/#{Project_details.dir.proj}") rm_r "#{Project_details.dir.lib}/#{Project_details.dir.proj}" \ if FileTest.directory?("#{Project_details.dir.lib}/#{Project_details.dir.proj}") rm_r "#{Project_details.dir.conf}/#{Project_details.dir.proj}" \ if FileTest.directory?("#{Project_details.dir.conf}/#{Project_details.dir.proj}") end task :note_sources do puts <<-WOK SiSU project: <http://sisudoc.org> <http://www.jus.uio.no/sisu> sisu source code is available at: <http://git.sisudoc.org> <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> sisu markup samples are provided/packaged separately as sisu-markup-samples: <http://git.sisudoc.org/gitweb/?p=doc/sisu-markup-samples.git;a=summary> WOK end task :note_installation do puts <<-WOK alternative 0: distribution install, rather than this Rakefile a distribution install pulls in the many dependencies used by sisu after initial processing to generate and store output, significant amongst these are XeTeX & databases (sqlite3 and postgresql) alternative 1: gem install, you need to: create the gemspec; build the gem (from the gemspec); install the gem which can be done with the single command: rake gem_create_build_install # (to build and install sisu v5 & sisu v6, alias gemcbi) separate gems are made/installed for sisu v5 & sisu v6 contained in source: rake gem_create_build_install_stable # (to build and install sisu v5, alias gem5cbi) for individual steps (create, build, install) see rake options, rake -T to specify sisu version for sisu installed via gem sisu _#{Version_info::Current.setting_stable[:version]}_ --version to uninstall sisu installed via gem sudo gem uninstall --verbose sisu WOK end task :note_developer do puts <<-WOK changelogheaders sisuversion sisuversionset gemcsn gem5csn gem6csn gembn gem5bn gem6bn gemin gem5in gem6in gembin gem5bin gem6bin gemcbin gem5cbin gem6cbin WOK end #%% help & system info task :system_info do Project_details.system_info end task :system_param_ do Project_details.env.each {|c| puts c.inspect } end task :gem_env_ do Project_details.gem_env end task :project_help do Help.project_help end task :tasks do Help.tasks end