summaryrefslogtreecommitdiff
path: root/Master/tlpkg/installer/platform.pl
blob: 08f4369da00a93d02b9079e4854576d6da363842 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49


print platform($ARGV[0]), "\n";

sub platform {
  my $config_guess = shift;
  unless (defined $::_platform_) {
    if ($^O=~/^MSWin(32|64)$/i) {
      $::_platform_="win32";
    } else {
      if (!defined($config_guess)) {
        printf STDERR "first argument must be path to config.guess\n";
        exit 1;
      }
      my @OSs = qw(aix cygwin darwin freebsd hpux irix linux netbsd
                   openbsd solaris);

      # We cannot rely on #! in config.guess but have to call /bin/sh
      # explicitly because sometimes the 'noexec' flag is set in
      # /etc/fstab for ISO9660 file systems.
      chomp (my $guessed_platform = `/bin/sh $config_guess`);
      
      # For example, if the disc or reader has hardware problems.
      die "$0: could not run $config_guess, cannot proceed, sorry"
        if ! $guessed_platform;
      
      $guessed_platform =~ s/^x86_64-(.*)-freebsd/amd64-$1-freebsd/;
      my $CPU; # CPU type as reported by config.guess.
      my $OS;  # O/S type as reported by config.guess.
      ($CPU = $guessed_platform) =~ s/(.*?)-.*/$1/;
      $CPU =~ s/^alpha(.*)/alpha/;   # alphaev56 or whatever
      $CPU =~ s/powerpc64/powerpc/;  # we don't distinguish on ppc64
      for my $os (@OSs) {
        $OS = $os if $guessed_platform =~ /$os/;
      }
      if ($OS eq "darwin") {
        $CPU = "universal"; # TL provides universal binaries
      } elsif ($CPU =~ /^i.86$/) {
        $CPU =~ s/i.86/i386/;
      }
      unless (defined $OS) {
        ($OS = $guessed_platform) =~ s/.*-(.*)/$1/;
      }
      $::_platform_ = "$CPU-$OS";
    }
  }
  return $::_platform_;
}