require 'kde-build/subprocess' require 'kde-build/configuration' require 'singleton' require 'pathname' module BuildTool module BuildSystem class Registry include Singleton @@tools = Hash.new def self.register( name, klass ) @@tools[name] = klass end def self.guess( source_directory ) @@tools.each do |name, bt| return bt if bt.guess( source_directory ) end return nil end end class BaseConfiguration include MJ::Configuration::Configurable option( 'name', "Name" ) option( 'inplace', 'Do not use out of source build' ). default = false end class Base include MJ::Tools::SubProcess attr_accessor :configuration def initialize( mod ) @module = mod end def info puts "Build System: #{name}" puts " Out Of Source Build: #{!inplace}" puts " Options: #{options}" end def source_directory @module.source_directory end def build_directory if configuration.inplace @module.source_directory else @module.build_directory end end def inplace configuration.inplace end def prefix @module.prefix end def env @module.env end def build raise NotImplementedError, "#{self.class}::build in #{self.class}" end def self.config raise NotImplementedError, "#{self.class}::name in #{self}" end def configure raise NotImplementedError, "#{self.class}::configure in #{self.class}" end def configured? raise NotImplementedError, "#{self.class}::configured? in #{self.class}" end def name raise NotImplementedError, "#{self.class}::name in #{self.class}" end def remove_build_directory self.class.execute "rm -rf #{build_directory}" end ######### protected ######### def check_build_directory( create = false ) if inplace if File.exist? @module.build_directory if !File.symlink?( @module.build_directory ) $log.warn( "Could not link build directory to source directory for inplace build of #{@module.name}." ) end else FileUtils.mkdir_p( Pathname.new( @module.build_directory ).parent ) File.symlink( @module.source_directory, @module.build_directory ) end else if File.exist? build_directory if File.directory? build_directory return true else raise BuildError, "Build directory #{build_directory} exists and is no directory!" end elsif create FileUtils.mkdir_p( build_directory ) return true else return false end end end end end; end