bin/autoproj_bootstrap in autoproj-1.9.7.rc10 vs bin/autoproj_bootstrap in autoproj-1.9.7.rc11

- old
+ new

@@ -1011,10 +1011,72 @@ def self.operating_system=(values) @supported_operating_system = nil @operating_system = values end + def self.guess_operating_system + if File.exists?('/etc/debian_version') + versions = [File.read('/etc/debian_version').strip] + if versions.first =~ /sid/ + versions = ["unstable", "sid"] + end + [['debian'], versions] + elsif File.exists?('/etc/redhat-release') + release_string = File.read('/etc/redhat-release').strip + release_string =~ /(.*) release ([\d.]+)/ + name = $1.downcase + version = $2 + if name =~ /Red Hat Entreprise/ + name = 'rhel' + end + [[name], [version]] + elsif File.exists?('/etc/gentoo-release') + release_string = File.read('/etc/gentoo-release').strip + release_string =~ /^.*([^\s]+)$/ + version = $1 + [['gentoo'], [version]] + elsif File.exists?('/etc/arch-release') + [['arch'], []] + elsif Autobuild.macos? + version=`sw_vers | head -2 | tail -1`.split(":")[1] + [['darwin'], [version.strip]] + elsif Autobuild.windows? + [['windows'], []] + elsif File.exists?('/etc/SuSE-release') + version = File.read('/etc/SuSE-release').strip + version =~/.*VERSION\s+=\s+([^\s]+)/ + version = $1 + [['opensuse'], [version.strip]] + end + end + + def self.ensure_derivatives_refer_to_their_parents(names) + names = names.dup + version_files = Hash[ + '/etc/debian_version' => 'debian', + '/etc/redhat-release' => 'fedora', + '/etc/gentoo-release' => 'gentoo', + '/etc/arch-release' => 'arch', + '/etc/SuSE-release' => 'opensuse'] + version_files.each do |file, name| + if File.exists?(file) && !names.include?(name) + names << name + end + end + names + end + + def self.normalize_os_representation(names, versions) + # Normalize the names to lowercase + names = names.map(&:downcase) + versions = versions.map(&:downcase) + if !versions.include?('default') + versions += ['default'] + end + return names, versions + end + # Autodetects the operating system name and version # # +osname+ is the operating system name, all in lowercase (e.g. ubuntu, # arch, gentoo, debian) # @@ -1034,106 +1096,45 @@ options.dup end if options[:force] @operating_system = nil - else - if !@operating_system.nil? - return @operating_system - elsif Autoproj.has_config_key?('operating_system') && !(user_os = ENV['AUTOPROJ_OS']) - os = Autoproj.user_config('operating_system') - if os.respond_to?(:to_ary) - if os[0].respond_to?(:to_ary) && os[0].all? { |s| s.respond_to?(:to_str) } && - os[1].respond_to?(:to_ary) && os[1].all? { |s| s.respond_to?(:to_str) } - @operating_system = os - return os - end + elsif !@operating_system.nil? # @operating_system can be set to false to simulate an unknown OS + return @operating_system + elsif user_os = ENV['AUTOPROJ_OS'] + @operating_system = + if user_os.empty? then false + else + names, versions = user_os.split(':') + normalize_os_representation(names.split(','), versions.split(',')) end - end - end - - if user_os = ENV['AUTOPROJ_OS'] - if user_os.empty? - @operating_system = false - else - names, versions = user_os.split(':') - @operating_system = [names.split(','), versions.split(',')] - end - else - Autobuild.progress :operating_system_autodetection, "autodetecting the operating system" - names, versions = os_from_os_release - # Don't use the os-release information on Debian, since they - # refuse to put enough information to detect 'unstable' - # reliably. So, we use Debian's heuristic detection method below - if names && names[0] != 'debian' - @operating_system = [names, versions] - else - lsb_name, lsb_versions = os_from_lsb - if lsb_name - if lsb_name != 'debian' && File.exists?("/etc/debian_version") - @operating_system = [[lsb_name, "debian"], lsb_versions] - elsif lsb_name != 'arch' && File.exists?("/etc/arch-release") - @operating_system = [[lsb_name, "arch"], lsb_versions] - elsif lsb_name != 'opensuse' && File.exists?("/etc/SuSE-release") - @operating_system = [[lsb_name, "opensuse"], lsb_versions] - elsif lsb_name != 'debian' - # Debian unstable cannot be detected with lsb_release, - # so debian has its own detection logic - @operating_system = [[lsb_name], lsb_versions] - end + return @operating_system + elsif Autoproj.has_config_key?('operating_system') + os = Autoproj.user_config('operating_system') + if os.respond_to?(:to_ary) + if os[0].respond_to?(:to_ary) && os[0].all? { |s| s.respond_to?(:to_str) } && + os[1].respond_to?(:to_ary) && os[1].all? { |s| s.respond_to?(:to_str) } + @operating_system = os + return os end end + @operating_system = nil # Invalid OS format in the configuration file end - if @operating_system.nil? - # Need to do some heuristics unfortunately - @operating_system = - if File.exists?('/etc/debian_version') - versions = [File.read('/etc/debian_version').strip] - if versions.first =~ /sid/ - versions = ["unstable", "sid"] - end - if lsb_versions - lsb_versions.each { |v| versions << v if !versions.include?(v) } - end - [['debian'], versions] - elsif File.exists?('/etc/fedora-release') - release_string = File.read('/etc/fedora-release').strip - release_string =~ /Fedora release (\d+)/ - version = $1 - [['fedora'], [version]] - elsif File.exists?('/etc/gentoo-release') - release_string = File.read('/etc/gentoo-release').strip - release_string =~ /^.*([^\s]+)$/ - version = $1 - [['gentoo'], [version]] - elsif File.exists?('/etc/arch-release') - [['arch'], []] - elsif Autobuild.macos? - version=`sw_vers | head -2 | tail -1`.split(":")[1] - [['darwin'], [version.strip]] - elsif Autobuild.windows? - [['windows'], []] - elsif File.exists?('/etc/SuSE-release') - version = File.read('/etc/SuSE-release').strip - version =~/.*VERSION\s+=\s+([^\s]+)/ - version = $1 - [['opensuse'], [version.strip]] - end - end + Autobuild.progress :operating_system_autodetection, "autodetecting the operating system" + names, versions = os_from_os_release - if !@operating_system - return + # Don't use the os-release information on Debian, since they + # refuse to put enough information to detect 'unstable' + # reliably. So, we use the heuristic method for it + if !names || names[0] == 'debian' + names, versions = guess_operating_system end + return if !names - # Normalize the names to lowercase - names, versions = @operating_system[0], @operating_system[1] - names = names.map(&:downcase) - versions = versions.map(&:downcase) - if !versions.include?('default') - versions += ['default'] - end + names = ensure_derivatives_refer_to_their_parents(names) + names, versions = normalize_os_representation(names, versions) @operating_system = [names, versions] Autoproj.change_option('operating_system', @operating_system, true) Autobuild.progress :operating_system_autodetection, "operating system: #{(names - ['default']).join(",")} - #{(versions - ['default']).join(",")}" @operating_system @@ -2284,30 +2285,10 @@ end DEFS = <<EODEFS --- none: ignore -ruby18: - debian,ubuntu: - - ruby1.8-dev - - ruby1.8 - - rubygems1.8 - - ri1.8 - - libopenssl-ruby1.8 - - rake - gentoo: - - dev-lang/ruby:1.8 - - rake - fedora: - '15,16': - - ruby - - rubygems - darwin: - - ruby - - rb-rake - default: nonexistent - arch: ignore ruby19: debian: - ruby1.9.1 - ruby1.9.1-dev - rubygems1.9.1 @@ -2346,26 +2327,35 @@ debian: - ruby2.0 - ruby2.0-dev - rake - rubygems-integration + fedora: + '20': + - ruby + - ruby-devel + - rubygem-rake opensuse: ruby20-devel arch: ignore default: nonexistent ruby21: debian: - ruby2.1 - ruby2.1-dev - rake - rubygems-integration arch: ignore + fedora: ruby-devel default: nonexistent build-essential: debian,ubuntu: build-essential gentoo: ignore arch: base-devel - fedora: ignore + fedora: + - gcc-c++ + - make + - glibc-devel darwin: ignore opensuse: - ! '@devel_C_C++' - gcc-c++ autobuild: gem @@ -2418,17 +2408,10 @@ - automake - autoconf opensuse: - automake - autoconf -lsb_release: - debian,ubuntu: lsb-release - gentoo: sys-apps/lsb-release - arch: lsb-release - fedora: redhat-lsb - darwin: ignore - opensuse: lsb-release archive: debian,ubuntu: - tar - unzip gentoo: @@ -2454,10 +2437,11 @@ opensuse: cvs pip: debian,ubuntu: python-pip arch: python2-pip opensuse: python-pip + fedora: python-pip EODEFS Autoproj::OSDependencies.define_osdeps_mode_option osdeps_mode = Autoproj::OSDependencies.osdeps_mode.join(",") @@ -2485,19 +2469,18 @@ STDERR.puts "failed: #{e.message}" exit(1) end # Now try to find out the name of the gem binary -PACKAGES = %w{lsb_release} +PACKAGES = [] -ENV['RUBYOPT'] = "-rubygems" -require 'rubygems' - STDERR.puts "autoproj: installing autoproj and its dependencies (this can take a long time)" # First install the dependencies of autoproj, as we don't want them to be # affected by the prerelease flag begin - osdeps_management.install(PACKAGES) + if !PACKAGES.empty? + osdeps_management.install(PACKAGES) + end rescue Autoproj::ConfigError => e STDERR.puts "failed: #{e.message}" exit(1) end