class Rake::Delphi::CustomDelphiTool

Constants

BDSRegRoot
DelphiRegRoot
EDSRegRoot
EmbarcaderoRegRoot

Public Class Methods

checkToolFailure(toolpath) click to toggle source
# File lib/rake/delphi/tool.rb, line 176
def self.checkToolFailure(toolpath)
    if toolpath.kind_of?(TrueClass) || toolpath.kind_of?(FalseClass)
        unless toolpath
            fail 'Could not detect path for %s! Check your registry and DELPHI_VERSION environment variable.' % [toolName]
        end
        cond = ! toolpath
        toolpath = ''
    else
      cond = File.exists?(toolpath)
    end
    fail 'Could not find %s: (%s)' % [toolName, toolpath] unless cond
end
find(failIfNotFound = false) click to toggle source
# File lib/rake/delphi/tool.rb, line 137
def self.find(failIfNotFound = false)
    v = EnvVariables.delphi_version.to_s
    if ENV['DELPHI_DIR']
        Logger.trace(Logger::DEBUG, 'DELPHI_DIR is set: ' + ENV['DELPHI_DIR'])
        # append trailing path delimiter
        ENV['DELPHI_DIR'] = ENV['DELPHI_DIR'].gsub(/[^\/]$/, '\&/')
        tool = ENV['DELPHI_DIR'] + toolName
        checkToolFailure(tool) if failIfNotFound
        return v, ENV['DELPHI_DIR'], tool, ENV['DELPHI_REG_ROOT']
    end
    if v.to_s.empty?
        v = []
        (4..21).each { |n| v << n.to_s }
        v.reverse!
    else
        Logger.trace(Logger::DEBUG, 'DELPHI_VERSION is set: ' + v)
        v = [v]
    end
    tool_was_found = false
    v.each do |ver|
        path, regroot = readDelphiDir(ver)
        next unless path
        tool = path + toolName
        tool_was_found = true
        Logger.trace(Logger::DEBUG, "Got tool: '#{tool}'")
        if File.exists?(tool) # found it !
            ENV['DELPHI_VERSION'] = ver
            ENV['DELPHI_DIR'] = path
            ENV['DELPHI_REG_ROOT'] = regroot
            Logger.trace(Logger::DEBUG, "Set: DELPHI_VERSION=#{ver}; DELPHI_DIR='#{path}'; DELPHI_REG_ROOT='#{regroot}'")
            return ver, path, tool, regroot
        else
            Logger.trace(Logger::DEBUG, 'But file does not exist!')
        end
    end
    checkToolFailure(tool_was_found) if failIfNotFound
    return nil
end
new(checkExistance = false) click to toggle source
# File lib/rake/delphi/tool.rb, line 27
def initialize(checkExistance = false)
    @@version, @@delphidir, @@toolpath, @@regroot = self.class.find(checkExistance) unless @@version
end
readDelphiDir(ver) click to toggle source
# File lib/rake/delphi/tool.rb, line 113
def self.readDelphiDir(ver)
    begin
        require 'win32/registry'
        [::Win32::Registry::HKEY_LOCAL_MACHINE, \
                # for local/manual installations
                ::Win32::Registry::HKEY_CURRENT_USER].each do |regRoot|
            begin
                Logger.trace(Logger::DEBUG, "Finding Delphi dir for #{ver}")
                reg_root = rootForVersion(ver)
                regRoot.open(reg_root) do |reg|
                    reg_typ, reg_val = reg.read('RootDir')
                    return reg_val.unix2dos_separator, reg_root
                end
            rescue ::Win32::Registry::Error
                Logger.trace(Logger::DEBUG, "No reg key '#{regRoot}'?!")
            end
        end
        return nil, nil
    rescue LoadError
        Logger.trace(Logger::DEBUG, 'No `win32/registry` gem?!')
        return nil, nil
    end
end
readUserOption(key, name, ver) click to toggle source
# File lib/rake/delphi/tool.rb, line 61
def self.readUserOption(key, name, ver)
    begin
        require 'win32/registry'
        root = rootForVersion(ver) + '\\' + key
        key_exists = false
        begin
            Logger.trace(Logger::DEBUG, "Reading user option '#{name}' in '#{root}'")
            ::Win32::Registry::HKEY_CURRENT_USER.open(root) do |reg|
                key_exists = true
                reg_typ, reg_val = reg.read(name)
                Logger.trace(Logger::TRACE, "Value: #{reg_val}")
                return reg_val.dos2unix_separator
            end
        rescue ::Win32::Registry::Error => e
            Logger.trace(Logger::DEBUG, "No reg key '%s'?! %s" % \
              [(key_exists ? "#{root}\\#{name}" : root), e.message])
            return ''
        end
    rescue LoadError
        Logger.trace(Logger::DEBUG, 'No `win32/registry` gem?!')
        return ''
    end
end
reinit() click to toggle source
# File lib/rake/delphi/tool.rb, line 21
def self.reinit
    @@version, @@delphidir, @@toolpath, @@regroot = nil, nil, nil, nil
end
rootForVersion(version) click to toggle source
# File lib/rake/delphi/tool.rb, line 95
def self.rootForVersion(version)
    if version.to_f < DELPHI_VERSION_7
        regRoot = DelphiRegRoot
    else
        if version.to_f <= DELPHI_VERSION_2006
            regRoot = BDSRegRoot
        elsif version.to_f < DELPHI_VERSION_XE
            regRoot = EDSRegRoot
        else
            regRoot = EmbarcaderoRegRoot
        end
    end
    version = version4version(version)
    regRoot = regRoot + '\\' + version
    Logger.trace(Logger::DEBUG, "Root for version #{version}: '#{regRoot}'")
    return regRoot
end
toolName() click to toggle source
# File lib/rake/delphi/tool.rb, line 31
def self.toolName
    raise 'Abstract method "toolName". Override it'
end
version4version(version) click to toggle source
# File lib/rake/delphi/tool.rb, line 85
def self.version4version(version)
    if version.to_f >= DELPHI_VERSION_7
        version = format('%.1f', version.to_f - 6)
    end
    if !version["."]
        version << ".0"
    end
    return version
end

Public Instance Methods

delphidir() click to toggle source
# File lib/rake/delphi/tool.rb, line 43
def delphidir
  @@delphidir
end
options() click to toggle source
# File lib/rake/delphi/tool.rb, line 51
def options
    ''
end
regroot() click to toggle source
# File lib/rake/delphi/tool.rb, line 47
def regroot
  @@regroot
end
toolpath() click to toggle source
# File lib/rake/delphi/tool.rb, line 39
def toolpath
    @@toolpath
end
version() click to toggle source
# File lib/rake/delphi/tool.rb, line 35
def version
    @@version
end
versionInfoClass() click to toggle source
# File lib/rake/delphi/tool.rb, line 55
def versionInfoClass
    return @@version.to_f < DELPHI_VERSION_2006 ? BDSVersionInfo : \
        @@version.to_f < DELPHI_VERSION_2010 ? RAD2007VersionInfo : \
        @@version.to_f < DELPHI_VERSION_XE ? RAD2010VersionInfo : XEVersionInfo
end