Sha256: c93367d180d6e15c276fffbdefa894cb4336d143e8647983e7d6ea2a6000eb9e

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

require 'open3'

module Rake
  module Funnel
    module Support
      module MSBuild
        class BuildTool
          class << self
            def find
              [mono_build, from_registry].compact.first
            end

            private

            def mono_build
              return nil if Rake::Win32.windows?

              begin
                out, status = Open3.capture2('mono', '--version')
                return nil unless status.success?
              rescue Errno::ENOENT
                return nil
              end

              return 'msbuild'.freeze if out[/^Mono JIT compiler version ([\d\.]+)/, 1] >= '5.0'

              'xbuild'.freeze
            end

            KEY = 'SOFTWARE\Microsoft\MSBuild\ToolsVersions'.freeze

            def from_registry
              return nil unless require_registry

              versions.map do |version|
                version_key(version) do |reg|
                  candidate = File.join(reg['MSBuildToolsPath'] || '', 'msbuild.exe')
                  next candidate if File.exist?(candidate)
                end
              end
            end

            def versions
              %w(14.0 12.0 4.0 3.5 2.0)
            end

            def require_registry
              require 'win32/registry'
              true
            rescue LoadError
              false
            end

            def version_key(version)
              key = KEY + '\\' + version

              ::Win32::Registry::HKEY_LOCAL_MACHINE.open(key) do |reg|
                yield(reg) if block_given?
              end
            rescue ::Win32::Registry::Error
              nil
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rake-funnel-0.20.0 lib/rake/funnel/support/msbuild/build_tool.rb