|
|
@@ -4,7 +4,7 @@
|
|
|
#
|
|
|
# Copyright © 1999-2001 Marcus Brinkmann <brinkmd@debian.org>
|
|
|
# Copyright © 2004-2005 Scott James Remnant <scott@netsplit.com>,
|
|
|
-# Copyright © 2006-2012 Guillem Jover <guillem@debian.org>
|
|
|
+# Copyright © 2006-2014 Guillem Jover <guillem@debian.org>
|
|
|
#
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
@@ -49,6 +49,8 @@ sub usage {
|
|
|
'Options:
|
|
|
-a<debian-arch> set current Debian architecture.
|
|
|
-t<gnu-system> set current GNU system type.
|
|
|
+ -A<debian-arch> set target Debian architecture.
|
|
|
+ -T<gnu-system> set target GNU system type.
|
|
|
-f force flag (override variables set in environment).')
|
|
|
. "\n\n" . _g(
|
|
|
'Commands:
|
|
|
@@ -108,13 +110,15 @@ use constant {
|
|
|
DEB_NONE => 0,
|
|
|
DEB_BUILD => 1,
|
|
|
DEB_HOST => 2,
|
|
|
+ DEB_TARGET => 64,
|
|
|
DEB_ARCH_INFO => 4,
|
|
|
DEB_ARCH_ATTR => 8,
|
|
|
DEB_MULTIARCH => 16,
|
|
|
DEB_GNU_INFO => 32,
|
|
|
};
|
|
|
|
|
|
-use constant DEB_ALL => DEB_BUILD | DEB_HOST | DEB_ARCH_INFO | DEB_ARCH_ATTR |
|
|
|
+use constant DEB_ALL => DEB_BUILD | DEB_HOST | DEB_TARGET |
|
|
|
+ DEB_ARCH_INFO | DEB_ARCH_ATTR |
|
|
|
DEB_MULTIARCH | DEB_GNU_INFO;
|
|
|
|
|
|
my %arch_vars = (
|
|
|
@@ -136,11 +140,22 @@ my %arch_vars = (
|
|
|
DEB_HOST_GNU_CPU => DEB_HOST | DEB_GNU_INFO,
|
|
|
DEB_HOST_GNU_SYSTEM => DEB_HOST | DEB_GNU_INFO,
|
|
|
DEB_HOST_GNU_TYPE => DEB_HOST | DEB_GNU_INFO,
|
|
|
+ DEB_TARGET_ARCH => DEB_TARGET,
|
|
|
+ DEB_TARGET_ARCH_OS => DEB_TARGET | DEB_ARCH_INFO,
|
|
|
+ DEB_TARGET_ARCH_CPU => DEB_TARGET | DEB_ARCH_INFO,
|
|
|
+ DEB_TARGET_ARCH_BITS => DEB_TARGET | DEB_ARCH_ATTR,
|
|
|
+ DEB_TARGET_ARCH_ENDIAN => DEB_TARGET | DEB_ARCH_ATTR,
|
|
|
+ DEB_TARGET_MULTIARCH => DEB_TARGET | DEB_MULTIARCH,
|
|
|
+ DEB_TARGET_GNU_CPU => DEB_TARGET | DEB_GNU_INFO,
|
|
|
+ DEB_TARGET_GNU_SYSTEM => DEB_TARGET | DEB_GNU_INFO,
|
|
|
+ DEB_TARGET_GNU_TYPE => DEB_TARGET | DEB_GNU_INFO,
|
|
|
);
|
|
|
|
|
|
my $req_vars = DEB_ALL;
|
|
|
my $req_host_arch = '';
|
|
|
my $req_host_gnu_type = '';
|
|
|
+my $req_target_arch = '';
|
|
|
+my $req_target_gnu_type = '';
|
|
|
my $req_eq_arch = '';
|
|
|
my $req_is_arch = '';
|
|
|
my $req_variable_to_print;
|
|
|
@@ -158,6 +173,10 @@ while (@ARGV) {
|
|
|
$req_host_arch = ${^POSTMATCH};
|
|
|
} elsif (m/^-t/p) {
|
|
|
$req_host_gnu_type = ${^POSTMATCH};
|
|
|
+ } elsif (m/^-A/p) {
|
|
|
+ $req_target_arch = ${^POSTMATCH};
|
|
|
+ } elsif (m/^-T/p) {
|
|
|
+ $req_target_gnu_type = ${^POSTMATCH};
|
|
|
} elsif (m/^-e/p) {
|
|
|
$req_eq_arch = ${^POSTMATCH};
|
|
|
$req_vars = $arch_vars{DEB_HOST_ARCH};
|
|
|
@@ -261,6 +280,40 @@ if (action_needs(DEB_HOST | DEB_GNU_INFO)) {
|
|
|
if ($gcc ne '') && ($gcc ne $v{DEB_HOST_GNU_TYPE});
|
|
|
}
|
|
|
|
|
|
+#
|
|
|
+# Set target variables
|
|
|
+#
|
|
|
+
|
|
|
+# First perform some sanity checks on the target arguments passed.
|
|
|
+
|
|
|
+($req_target_arch, $req_target_gnu_type) = check_arch_coherency($req_target_arch, $req_target_gnu_type);
|
|
|
+
|
|
|
+# Proceed to compute the target variables if needed.
|
|
|
+
|
|
|
+if (action_needs(DEB_TARGET)) {
|
|
|
+ if ($req_target_arch eq '') {
|
|
|
+ $v{DEB_TARGET_ARCH} = $v{DEB_HOST_ARCH};
|
|
|
+ } else {
|
|
|
+ $v{DEB_TARGET_ARCH} = $req_target_arch;
|
|
|
+ }
|
|
|
+}
|
|
|
+($abi, $v{DEB_TARGET_ARCH_OS}, $v{DEB_TARGET_ARCH_CPU}) = debarch_to_debtriplet($v{DEB_TARGET_ARCH})
|
|
|
+ if (action_needs(DEB_TARGET | DEB_ARCH_INFO));
|
|
|
+($v{DEB_TARGET_ARCH_BITS}, $v{DEB_TARGET_ARCH_ENDIAN}) = debarch_to_cpuattrs($v{DEB_TARGET_ARCH})
|
|
|
+ if (action_needs(DEB_TARGET | DEB_ARCH_ATTR));
|
|
|
+
|
|
|
+$v{DEB_TARGET_MULTIARCH} = debarch_to_multiarch($v{DEB_TARGET_ARCH})
|
|
|
+ if (action_needs(DEB_TARGET | DEB_MULTIARCH));
|
|
|
+
|
|
|
+if (action_needs(DEB_TARGET | DEB_GNU_INFO)) {
|
|
|
+ if ($req_target_gnu_type eq '') {
|
|
|
+ $v{DEB_TARGET_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_TARGET_ARCH});
|
|
|
+ } else {
|
|
|
+ $v{DEB_TARGET_GNU_TYPE} = $req_target_gnu_type;
|
|
|
+ }
|
|
|
+ ($v{DEB_TARGET_GNU_CPU}, $v{DEB_TARGET_GNU_SYSTEM}) = split(/-/, $v{DEB_TARGET_GNU_TYPE}, 2);
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
for my $k (keys %arch_vars) {
|
|
|
$v{$k} = $ENV{$k} if (length $ENV{$k} && !$force);
|