rake-delphi 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +4 -0
- data/Gemfile.lock +19 -0
- data/Rakefile.rb +6 -0
- data/lib/rake/common/git.rb +3 -2
- data/lib/rake/common/logger.rb +26 -0
- data/lib/rake/common/sendmailtask.rb +1 -1
- data/lib/rake/common/ziptask.rb +3 -3
- data/lib/rake/delphi.rb +1 -0
- data/lib/rake/delphi/dcc32.rb +63 -13
- data/lib/rake/delphi/envvariables.rb +41 -13
- data/lib/rake/delphi/project.rb +0 -1
- data/lib/rake/delphi/projectinfo.rb +28 -7
- data/lib/rake/delphi/resources.rb +3 -2
- data/lib/rake/delphi/tool.rb +45 -13
- data/lib/rake/delphi/version.rb +1 -1
- data/lib/rake/helpers/filelist.rb +1 -0
- data/lib/rake/helpers/logger.rb +1 -0
- data/lib/rake/helpers/rake.rb +1 -0
- data/lib/rake/helpers/raketask.rb +1 -2
- data/rake-delphi.gemspec +2 -1
- data/test/helpers/verinfo.rb +42 -0
- data/test/resources/testproject/Rakefile.rb +5 -2
- data/test/resources/testproject/bin/test_compile/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_alter_cfg/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_consts/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_debug_info/testproject.drc +366 -0
- data/test/resources/testproject/bin/test_compile_debug_info/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_debug_info/testproject.map +1798 -0
- data/test/resources/testproject/bin/test_compile_defines/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_use_absent_config/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_use_config/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_use_library_path/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_with_explicit_and_implicit_libs/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_with_explicit_libs/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_with_libs/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_with_resources/testproject.exe +0 -0
- data/test/resources/testproject/bin/test_compile_with_resources_and_libs/testproject.exe +0 -0
- data/test/resources/testproject/dcu/ExplicitLibUnit.dcu +0 -0
- data/test/resources/testproject/dcu/LibUnit.dcu +0 -0
- data/test/resources/testproject/resources.res +0 -0
- data/test/resources/testproject/{testproject.bdsproj → testproject.2006.bdsproj} +0 -0
- data/test/resources/testproject/{testproject.dproj → testproject.2007.dproj} +0 -0
- data/test/resources/testproject/testproject.2010.dproj +108 -0
- data/test/resources/testproject/testproject.cfg.1 +8 -0
- data/test/resources/testproject/testproject.dproj.2007 +77 -0
- data/test/resources/testproject/testproject.drc +210 -0
- data/test/resources/testproject/testproject.exe +0 -0
- data/test/resources/testproject/testproject.identcache +0 -0
- data/test/resources/testproject/testproject.rc +60 -0
- data/test/resources/testproject/testproject.res +0 -0
- data/test/resources/testproject/testproject.xe5.dproj +179 -0
- data/test/test-delphi.rb +33 -5
- data/test/test-envvariables.rb +23 -0
- data/test/test-git.rb +2 -2
- data/test/test-hashes.rb +0 -1
- data/test/test-projectinfo.rb +89 -9
- data/test/test-zip.rb +0 -8
- metadata +100 -43
- data/.gitignore +0 -17
- data/test/resources/testproject/.gitignore +0 -8
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            PATH
         | 
| 2 | 
            +
              remote: .
         | 
| 3 | 
            +
              specs:
         | 
| 4 | 
            +
                rake-delphi (0.0.4)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            GEM
         | 
| 7 | 
            +
              remote: https://rubygems.org/
         | 
| 8 | 
            +
              specs:
         | 
| 9 | 
            +
                rake (10.0.4)
         | 
| 10 | 
            +
                xml-simple (1.1.3)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            PLATFORMS
         | 
| 13 | 
            +
              ruby
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            DEPENDENCIES
         | 
| 16 | 
            +
              bundler (~> 1.3)
         | 
| 17 | 
            +
              rake (~> 10.0.4)
         | 
| 18 | 
            +
              rake-delphi!
         | 
| 19 | 
            +
              xml-simple
         | 
    
        data/Rakefile.rb
    CHANGED
    
    | @@ -5,8 +5,14 @@ require 'rake/testtask' | |
| 5 5 |  | 
| 6 6 | 
             
            task :default => :test
         | 
| 7 7 |  | 
| 8 | 
            +
            task :"test:prerequisites" do
         | 
| 9 | 
            +
                raise 'Please define DELPHI_VERSION environment variable' \
         | 
| 10 | 
            +
            		+ ' to run tests with appropriate Delphi compiler' unless ENV['DELPHI_VERSION']
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 8 13 | 
             
            Rake::TestTask.new('test') do |t|
         | 
| 9 14 | 
             
                t.ruby_opts << '-d' if Rake.application.options.trace
         | 
| 10 15 | 
             
                t.libs << 'test'
         | 
| 11 16 | 
             
                t.verbose = true
         | 
| 17 | 
            +
                Rake::application[t.name].enhance([:"test:prerequisites"])
         | 
| 12 18 | 
             
            end
         | 
    
        data/lib/rake/common/git.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'rake/common/classes'
         | 
| 4 | 
            +
            require 'rake/common/logger'
         | 
| 4 5 | 
             
            require 'rake/helpers/rake'
         | 
| 5 6 |  | 
| 6 7 | 
             
            module Rake
         | 
| @@ -52,7 +53,7 @@ module Rake | |
| 52 53 | 
             
                        cmd = ['git']
         | 
| 53 54 | 
             
                        cmd << "-c i18n.logOutputEncoding=#{opts[:logoutputencoding]}" if opts[:logoutputencoding]
         | 
| 54 55 | 
             
                        cmd << 'log' << '--format=%B' << "#{opts[:since]}..HEAD"
         | 
| 55 | 
            -
                         | 
| 56 | 
            +
                        Logger.trace(Logger::VERBOSE, cmd)
         | 
| 56 57 | 
             
                        @changelog=%x[#{cmd.join(' ')}].lines.to_a
         | 
| 57 58 | 
             
                        @changelog.map! do |line|
         | 
| 58 59 | 
             
                            line.chomp!
         | 
| @@ -69,7 +70,7 @@ module Rake | |
| 69 70 | 
             
                        @changelog.uniq!
         | 
| 70 71 | 
             
                        do_filter
         | 
| 71 72 | 
             
                        do_process
         | 
| 72 | 
            -
                         | 
| 73 | 
            +
                        Logger.trace(Logger::TRACE, @changelog)
         | 
| 73 74 | 
             
                    end
         | 
| 74 75 |  | 
| 75 76 | 
             
                    def charset
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Rake
         | 
| 4 | 
            +
              module Delphi
         | 
| 5 | 
            +
                class Logger
         | 
| 6 | 
            +
                  NORMAL = 0
         | 
| 7 | 
            +
                  VERBOSE = 1
         | 
| 8 | 
            +
                  DEBUG = 2
         | 
| 9 | 
            +
                  TRACE = 3
         | 
| 10 | 
            +
                  def self.debug?
         | 
| 11 | 
            +
                    return ENV['RAKE_DELPHI_TRACE'].to_i >= DEBUG
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def self.trace(level, msg)
         | 
| 15 | 
            +
                    if ENV['RAKE_DELPHI_TRACE'].to_i >= level
         | 
| 16 | 
            +
                      if msg.kind_of?(String)
         | 
| 17 | 
            +
                        $stderr.puts(msg)
         | 
| 18 | 
            +
                      else
         | 
| 19 | 
            +
                        require 'pp'
         | 
| 20 | 
            +
                        PP.pp(msg, $stderr)
         | 
| 21 | 
            +
                      end
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
    
        data/lib/rake/common/ziptask.rb
    CHANGED
    
    | @@ -36,7 +36,7 @@ module Rake | |
| 36 36 | 
             
                class ZipTask < BasicTask
         | 
| 37 37 | 
             
                    def initialize(task, zipfile, files, options = nil)
         | 
| 38 38 | 
             
                        super(task)
         | 
| 39 | 
            -
                         | 
| 39 | 
            +
                        Logger.trace(Logger::VERBOSE, [zipfile, files])
         | 
| 40 40 | 
             
                        raise "zipfile name is not defined!" if zipfile.nil? || zipfile.empty?
         | 
| 41 41 | 
             
                        @norubyzip = nil
         | 
| 42 42 | 
             
                        @options = options || {}
         | 
| @@ -52,7 +52,7 @@ module Rake | |
| 52 52 | 
             
                        raise "no ZIP library (nor zipruby nor rubyzip) found!" if @norubyzip
         | 
| 53 53 | 
             
                        if defined? Zip::Archive
         | 
| 54 54 | 
             
                            # zipruby used
         | 
| 55 | 
            -
                             | 
| 55 | 
            +
                            Logger.trace(Logger::VERBOSE, '`zipruby` gem is used')
         | 
| 56 56 | 
             
                            Zip::Archive.open(zipfile, Zip::CREATE | Zip::TRUNC) do |z|
         | 
| 57 57 | 
             
                                files.each do |f|
         | 
| 58 58 | 
             
                                    zip_addfile(z, f)
         | 
| @@ -60,7 +60,7 @@ module Rake | |
| 60 60 | 
             
                            end
         | 
| 61 61 | 
             
                        else
         | 
| 62 62 | 
             
                            # work with rubyzip
         | 
| 63 | 
            -
                             | 
| 63 | 
            +
                            Logger.trace(Logger::VERBOSE, '`rubyzip` gem is used')
         | 
| 64 64 | 
             
                            File.unlink(zipfile) if File.exists?(zipfile)
         | 
| 65 65 | 
             
                            Zip.options[:continue_on_exists_proc] = true
         | 
| 66 66 | 
             
                            Zip::ZipFile.open(zipfile, Zip::ZipFile::CREATE) do |z|
         | 
    
        data/lib/rake/delphi.rb
    CHANGED
    
    
    
        data/lib/rake/delphi/dcc32.rb
    CHANGED
    
    | @@ -2,6 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'rake'
         | 
| 4 4 | 
             
            require 'rake/common/chdirtask'
         | 
| 5 | 
            +
            require 'rake/common/logger'
         | 
| 5 6 | 
             
            require 'rake/delphi/envvariables'
         | 
| 6 7 | 
             
            require 'rake/delphi/resources'
         | 
| 7 8 | 
             
            require 'rake/delphi/tool'
         | 
| @@ -15,16 +16,30 @@ module Rake | |
| 15 16 | 
             
                        'bin/dcc32.exe'
         | 
| 16 17 | 
             
                    end
         | 
| 17 18 |  | 
| 18 | 
            -
                    def  | 
| 19 | 
            -
                         | 
| 19 | 
            +
                    def delphidir
         | 
| 20 | 
            +
                        @@delphidir
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def delphilib
         | 
| 24 | 
            +
                        ENV['BDSLIB']
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    def readLibraryPaths(platform)
         | 
| 28 | 
            +
                        warn "WARNING! You are using Delphi XE or above but no platform defined!" if ENV['DELPHI_VERSION'].to_i >= 14 && ! platform
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                        platform = platform.to_s != '' ? '\\' + platform : ''
         | 
| 31 | 
            +
                        # platform not used for old Delphis 'SearchPath'
         | 
| 32 | 
            +
                        libpaths = self.class.readUserOption('Library' + platform, 'Search Path', self.version).split(';') \
         | 
| 20 33 | 
             
                            | self.class.readUserOption('Library', 'SearchPath', self.version).split(';')
         | 
| 34 | 
            +
                        Logger.trace(Logger::TRACE, libpaths)
         | 
| 21 35 | 
             
                        dev = EnvVariables.new(self.class.rootForVersion(self.version) + '\Environment Variables', self.delphidir)
         | 
| 22 36 | 
             
                        libpaths.map! do |lp|
         | 
| 23 | 
            -
                             | 
| 37 | 
            +
                            unless lp.to_s.empty?
         | 
| 24 38 | 
             
                                lp = dev.expand(lp)
         | 
| 25 39 | 
             
                            end
         | 
| 26 40 | 
             
                            lp
         | 
| 27 41 | 
             
                        end
         | 
| 42 | 
            +
                        Logger.trace(Logger::TRACE, libpaths)
         | 
| 28 43 | 
             
                        return libpaths
         | 
| 29 44 | 
             
                    end
         | 
| 30 45 | 
             
                end
         | 
| @@ -36,11 +51,11 @@ module Rake | |
| 36 51 | 
             
                    @@symbols = [:quiet, :assertions, :build, :optimization, :debug, :defines,
         | 
| 37 52 | 
             
                        :debuginfo, :localsymbols, :console, :warnings, :hints, :altercfg,
         | 
| 38 53 | 
             
                        :includepaths, :writeableconst,
         | 
| 39 | 
            -
                        :map, :dcuoutput, :bploutput,
         | 
| 54 | 
            +
                        :map, :dcuoutput, :bploutput, :aliases, :platform, :namespaces,
         | 
| 40 55 | 
             
                        :dcpoutput, :dcu, :uselibrarypath, :uselibrarypath, :usecfg]
         | 
| 41 56 | 
             
                public
         | 
| 42 57 | 
             
                    @@symbols.map do |sym|
         | 
| 43 | 
            -
                        attr_accessor sym
         | 
| 58 | 
            +
                        attr_accessor sym unless method_defined?(sym)
         | 
| 44 59 | 
             
                    end
         | 
| 45 60 |  | 
| 46 61 | 
             
                    def initialize(name, application)
         | 
| @@ -50,9 +65,17 @@ module Rake | |
| 50 65 | 
             
                        @rc_template_task = application.define_task(RCTemplateTask, shortname + ':rc:template')
         | 
| 51 66 | 
             
                        @rc_task = application.define_task(RCTask, shortname + ':rc')
         | 
| 52 67 | 
             
                        enhance([@rc_template_task, @rc_task])
         | 
| 68 | 
            +
                        @platform = nil
         | 
| 53 69 | 
             
                        @dcc32Tool = Dcc32Tool.new
         | 
| 54 70 | 
             
                    end
         | 
| 55 71 |  | 
| 72 | 
            +
                    # used in tests
         | 
| 73 | 
            +
                    def reenable
         | 
| 74 | 
            +
                        # recreate Dcc32Tool to reinitialize paths to tool
         | 
| 75 | 
            +
                        @dcc32Tool = Dcc32Tool.new(true)
         | 
| 76 | 
            +
                        super
         | 
| 77 | 
            +
                    end
         | 
| 78 | 
            +
             | 
| 56 79 | 
             
                    def versionInfoClass
         | 
| 57 80 | 
             
                        @dcc32Tool.versionInfoClass
         | 
| 58 81 | 
             
                    end
         | 
| @@ -66,7 +89,19 @@ module Rake | |
| 66 89 | 
             
                    end
         | 
| 67 90 |  | 
| 68 91 | 
             
                    def delphilibs
         | 
| 69 | 
            -
                        return [@dcc32Tool. | 
| 92 | 
            +
                        return [@dcc32Tool.delphilib] | @dcc32Tool.readLibraryPaths(@platform)
         | 
| 93 | 
            +
                    end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                    def platform=(value)
         | 
| 96 | 
            +
                        @platform = value
         | 
| 97 | 
            +
                        Logger.trace(Logger::DEBUG, 'PLATFORM set: ' + value)
         | 
| 98 | 
            +
                        ENV['PLATFORM'] = @platform
         | 
| 99 | 
            +
                        # for XE and above set default aliases and namespaces
         | 
| 100 | 
            +
                        if ENV['DELPHI_VERSION'].to_i >= 14
         | 
| 101 | 
            +
                            @aliases = 'Generics.Collections=System.Generics.Collections;Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE'
         | 
| 102 | 
            +
                            @namespaces = 'Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;System;Xml;Data;Datasnap;Web;Soap'
         | 
| 103 | 
            +
                            Logger.trace(Logger::TRACE, 'Aliases and namespaces are set for Delphi XE')
         | 
| 104 | 
            +
                        end
         | 
| 70 105 | 
             
                    end
         | 
| 71 106 |  | 
| 72 107 | 
             
                    def _paths(ppaths)
         | 
| @@ -113,6 +148,14 @@ module Rake | |
| 113 148 | 
             
                        return @quiet ? '-Q' : ''
         | 
| 114 149 | 
             
                    end
         | 
| 115 150 |  | 
| 151 | 
            +
                    def aliases
         | 
| 152 | 
            +
                        return @aliases ? Rake.quotepath('-A', @aliases) : ''
         | 
| 153 | 
            +
                    end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                    def namespaces
         | 
| 156 | 
            +
                        return @namespaces ? Rake.quotepath('-NS', @namespaces) : ''
         | 
| 157 | 
            +
                    end
         | 
| 158 | 
            +
             | 
| 116 159 | 
             
                    def exeoutput
         | 
| 117 160 | 
             
                        return @exeoutput || @bin
         | 
| 118 161 | 
             
                    end
         | 
| @@ -157,16 +200,20 @@ module Rake | |
| 157 200 | 
             
                    def build_args
         | 
| 158 201 | 
             
                        args = []
         | 
| 159 202 | 
             
                        args << build? << warnings? << hints? << quiet? << debug? << alldebuginfo << map
         | 
| 160 | 
            -
                        args << defines << writeableconst
         | 
| 203 | 
            +
                        args << defines << writeableconst << aliases << namespaces
         | 
| 161 204 | 
             
                        args << _source << outputs << implicitpaths
         | 
| 162 205 | 
             
                        args.flatten
         | 
| 163 206 | 
             
                    end
         | 
| 164 207 |  | 
| 165 208 | 
             
                public
         | 
| 166 209 | 
             
                    def init(properties)
         | 
| 167 | 
            -
                         | 
| 210 | 
            +
                        Logger.trace(Logger::TRACE, properties)
         | 
| 168 211 | 
             
                        properties.map do |key, value|
         | 
| 169 | 
            -
                             | 
| 212 | 
            +
                            begin
         | 
| 213 | 
            +
                                send("#{key}=", value)
         | 
| 214 | 
            +
                            rescue NoMethodError
         | 
| 215 | 
            +
                                instance_variable_set("@#{key}", value)
         | 
| 216 | 
            +
                            end
         | 
| 170 217 | 
             
                        end
         | 
| 171 218 | 
             
                        @_source = properties[:projectfile].pathmap('%X.dpr')
         | 
| 172 219 | 
             
                        src = @_source.gsub('\\', '/')
         | 
| @@ -223,12 +270,16 @@ module Rake | |
| 223 270 | 
             
                        cmd = Rake.quotepath('', @dcc32Tool.toolpath)
         | 
| 224 271 | 
             
                        cmd << ([''] | args).join(' ')
         | 
| 225 272 | 
             
                        ChDir.new(self, File.dirname(@_source)) do |dir|
         | 
| 226 | 
            -
                            RakeFileUtils.verbose( | 
| 273 | 
            +
                            RakeFileUtils.verbose(Logger.debug?) do
         | 
| 227 274 | 
             
                                begin
         | 
| 228 275 | 
             
                                    unless @usecfg
         | 
| 229 276 | 
             
                                        cfg = @systempath.pathmap('%X.cfg')
         | 
| 230 277 | 
             
                                        bak_cfg = @systempath.pathmap('%X.rake.cfg')
         | 
| 231 | 
            -
                                         | 
| 278 | 
            +
                                        if File.exists?(cfg)
         | 
| 279 | 
            +
                                            mv cfg, bak_cfg
         | 
| 280 | 
            +
                                        else
         | 
| 281 | 
            +
                                            warn "WARNING! Config #{cfg} is absent!"
         | 
| 282 | 
            +
                                        end
         | 
| 232 283 | 
             
                                        if @altercfg
         | 
| 233 284 | 
             
                                            cp @altercfg, cfg
         | 
| 234 285 | 
             
                                        end
         | 
| @@ -238,7 +289,6 @@ module Rake | |
| 238 289 | 
             
                                            paths.each do |p|
         | 
| 239 290 | 
             
                                                f.write(p + "\n")
         | 
| 240 291 | 
             
                                            end
         | 
| 241 | 
            -
                                            f.close
         | 
| 242 292 | 
             
                                        end
         | 
| 243 293 | 
             
                                    end
         | 
| 244 294 | 
             
                                    sh cmd
         | 
| @@ -247,7 +297,7 @@ module Rake | |
| 247 297 | 
             
                                        begin
         | 
| 248 298 | 
             
                                            cp cfg, cfg + '.1' if trace?
         | 
| 249 299 | 
             
                                        ensure
         | 
| 250 | 
            -
                                            mv bak_cfg, cfg
         | 
| 300 | 
            +
                                            mv bak_cfg, cfg if File.exists?(bak_cfg)
         | 
| 251 301 | 
             
                                        end
         | 
| 252 302 | 
             
                                    end
         | 
| 253 303 | 
             
                                end
         | 
| @@ -1,39 +1,67 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 | 
            +
            require 'rake/common/logger'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Rake
         | 
| 4 5 | 
             
              module Delphi
         | 
| 5 | 
            -
                class  | 
| 6 | 
            -
                     | 
| 7 | 
            -
             | 
| 6 | 
            +
                class EnvVariables < ::Hash
         | 
| 7 | 
            +
                    def self.delphi_version
         | 
| 8 | 
            +
                        ENV['DELPHI_VERSION']
         | 
| 9 | 
            +
                    end
         | 
| 8 10 |  | 
| 9 | 
            -
                    def  | 
| 10 | 
            -
                         | 
| 11 | 
            +
                    def readreg(regpath)
         | 
| 12 | 
            +
                        return unless regpath
         | 
| 13 | 
            +
                        begin
         | 
| 14 | 
            +
                            require 'win32/registry'
         | 
| 15 | 
            +
                            Logger.trace(Logger::DEBUG, "Reading environment variables from '#{regpath}'")
         | 
| 16 | 
            +
                            begin
         | 
| 17 | 
            +
                                ::Win32::Registry::HKEY_CURRENT_USER.open(regpath) do |reg|
         | 
| 18 | 
            +
                                    reg.each do |name|
         | 
| 19 | 
            +
                                        reg_type, value = reg.read(name)
         | 
| 20 | 
            +
                                        value.gsub!('\\', '/')
         | 
| 21 | 
            +
                                        add(name, value)
         | 
| 22 | 
            +
                                    end
         | 
| 23 | 
            +
                                end
         | 
| 24 | 
            +
                            rescue ::Win32::Registry::Error
         | 
| 25 | 
            +
                                Logger.trace(Logger::DEBUG, "No reg key '%s'?!" % regpath)
         | 
| 26 | 
            +
                            end
         | 
| 27 | 
            +
                        rescue LoadError
         | 
| 28 | 
            +
                            Logger.trace(Logger::DEBUG, 'No `win32/registry` gem?!')
         | 
| 29 | 
            +
                        end
         | 
| 11 30 | 
             
                    end
         | 
| 12 | 
            -
                end
         | 
| 13 31 |  | 
| 14 | 
            -
                class EnvVariables < ::Array
         | 
| 15 32 | 
             
                    def initialize(regpath, delphidir)
         | 
| 33 | 
            +
                        readreg(regpath)
         | 
| 16 34 | 
             
                        _dir = delphidir.gsub(/\/$/, '')
         | 
| 17 35 | 
             
                        add('DELPHI', _dir)
         | 
| 18 36 | 
             
                        add('BDS', _dir)
         | 
| 37 | 
            +
                        add('BDSLIB', _dir + '/Lib')
         | 
| 19 38 | 
             
                        expand_vars
         | 
| 39 | 
            +
                        Logger.trace(Logger::TRACE, self)
         | 
| 20 40 | 
             
                    end
         | 
| 21 41 |  | 
| 22 42 | 
             
                    def add(var, value)
         | 
| 23 | 
            -
                        self  | 
| 43 | 
            +
                        self[var] = value
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    def expand_global(value)
         | 
| 47 | 
            +
                        value.gsub!(/\$\((?'env_name'\w+)\)/) do |match|
         | 
| 48 | 
            +
                            name = Regexp.last_match[:env_name].upcase
         | 
| 49 | 
            +
                            ENV[name] || match
         | 
| 50 | 
            +
                        end
         | 
| 51 | 
            +
                        value
         | 
| 24 52 | 
             
                    end
         | 
| 25 53 |  | 
| 26 54 | 
             
                    def expand(value)
         | 
| 27 | 
            -
                        self.each do | | 
| 28 | 
            -
                            value.gsub!("$(#{ | 
| 55 | 
            +
                        self.each do |name, val|
         | 
| 56 | 
            +
                            value.gsub!("$(#{name})", val)
         | 
| 57 | 
            +
                            value = expand_global(value)
         | 
| 29 58 | 
             
                        end
         | 
| 30 59 | 
             
                        value
         | 
| 31 60 | 
             
                    end
         | 
| 32 61 |  | 
| 33 62 | 
             
                    def expand_vars
         | 
| 34 | 
            -
                        self. | 
| 35 | 
            -
                             | 
| 36 | 
            -
                            v
         | 
| 63 | 
            +
                        self.each do |name, value|
         | 
| 64 | 
            +
                            self[name] = expand(value)
         | 
| 37 65 | 
             
                        end
         | 
| 38 66 | 
             
                    end
         | 
| 39 67 | 
             
                end
         | 
    
        data/lib/rake/delphi/project.rb
    CHANGED
    
    
| @@ -32,27 +32,39 @@ module Rake | |
| 32 32 | 
             
                class BDSVersionInfo < ProjectVersionInfo
         | 
| 33 33 | 
             
                    def initialize(task)
         | 
| 34 34 | 
             
                        super(task)
         | 
| 35 | 
            -
                         | 
| 35 | 
            +
                        versioninfo = get_versioninfo_tag(@content)
         | 
| 36 | 
            +
                        # no need to continue if no version info file
         | 
| 37 | 
            +
                        return unless versioninfo
         | 
| 38 | 
            +
                        versioninfo = versioninfo['Delphi.Personality']['VersionInfoKeys']['VersionInfoKeys']
         | 
| 36 39 | 
             
                        use_encode = String.new.respond_to?(:encode)
         | 
| 37 40 | 
             
                        encoding = self.class.encoding
         | 
| 38 41 | 
             
                        if encoding && ! use_encode
         | 
| 39 42 | 
             
                            require 'iconv'
         | 
| 40 43 | 
             
                            iconv = Iconv.new(encoding, 'UTF-8')
         | 
| 41 44 | 
             
                        end
         | 
| 42 | 
            -
                         | 
| 45 | 
            +
                        versioninfo.each do |v|
         | 
| 43 46 | 
             
                            cv = v['content']
         | 
| 44 | 
            -
                            cv = (use_encode ? cv.encode(encoding, 'UTF-8') : iconv.iconv(cv)) if encoding
         | 
| 47 | 
            +
                            cv = (use_encode ? cv.encode(encoding, 'UTF-8') : iconv.iconv(cv)) if cv && encoding
         | 
| 45 48 | 
             
                            @info[v['Name'].to_sym] = cv
         | 
| 46 49 | 
             
                        end
         | 
| 47 50 | 
             
                    end
         | 
| 48 51 |  | 
| 52 | 
            +
                    def get_versioninfo_tag(content)
         | 
| 53 | 
            +
                        return content
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 49 56 | 
             
                    def self.encoding
         | 
| 50 57 | 
             
                        # override to set your own encoding
         | 
| 51 58 | 
             
                        nil
         | 
| 52 59 | 
             
                    end
         | 
| 53 60 |  | 
| 54 61 | 
             
                    def do_getcontent
         | 
| 55 | 
            -
                         | 
| 62 | 
            +
                        if File.exists?(@file)
         | 
| 63 | 
            +
                            @content = XmlSimple.xml_in(@file, :ForceArray => false)
         | 
| 64 | 
            +
                        else
         | 
| 65 | 
            +
                            warn "WARNING! Version info file #{@file} does not exists"
         | 
| 66 | 
            +
                            @content = nil
         | 
| 67 | 
            +
                        end
         | 
| 56 68 | 
             
                    end
         | 
| 57 69 |  | 
| 58 70 | 
             
                    def _ext
         | 
| @@ -65,12 +77,21 @@ module Rake | |
| 65 77 | 
             
                        return 'dproj'
         | 
| 66 78 | 
             
                    end
         | 
| 67 79 |  | 
| 68 | 
            -
                    def  | 
| 69 | 
            -
                         | 
| 80 | 
            +
                    def get_versioninfo_tag(content)
         | 
| 81 | 
            +
                        # .dproj file has more nesting levels
         | 
| 82 | 
            +
                        return content['ProjectExtensions']['BorlandProject']['BorlandProject'] if content
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                class RAD2010VersionInfo < RAD2007VersionInfo
         | 
| 87 | 
            +
                    def get_versioninfo_tag(content)
         | 
| 70 88 | 
             
                        # .dproj file has more nesting levels
         | 
| 71 | 
            -
                         | 
| 89 | 
            +
                        return content['ProjectExtensions']['BorlandProject'] if content
         | 
| 72 90 | 
             
                    end
         | 
| 73 91 | 
             
                end
         | 
| 74 92 |  | 
| 93 | 
            +
                class XEVersionInfo < RAD2010VersionInfo
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
             | 
| 75 96 | 
             
              end
         | 
| 76 97 | 
             
            end
         |