Browse Source

arch: Internally represent architectures as quadruplets

This allows to detangle the libc used from the calling conventions.
Guillem Jover 8 years ago
parent
commit
9d7ba99cc3

+ 2 - 1
Makefile.am

@@ -23,7 +23,8 @@ dist_pkgdata_DATA = \
 	data/cputable \
 	data/ostable \
 	data/abitable \
-	data/triplettable
+	data/tupletable \
+	$(nil)
 
 EXTRA_DIST = \
 	.mailmap \

+ 4 - 4
data/abitable

@@ -1,13 +1,13 @@
-# Version=1.0
+# Version=2.0
 #
 # This file contains the table of arch ABI attribute overrides.
 #
 # If the ABI is not present here then the attribute information for a
-# Debian triplet matches the one on the cputable.
+# Debian arch tuple matches the one on the cputable.
 #
 # - Column 1 is the Debian name for the ABI.
 # - Column 2 is the size (in bits) of the ABI pointers.
 #
 # <Debian name>	<Bits>
-gnuabin32	32
-gnux32		32
+abin32		32
+x32		32

+ 2 - 2
data/cputable

@@ -4,10 +4,10 @@
 #
 # Architecture names are formed as a combination of the system name
 # (from ostable) and CPU name (from this table) after mapping from
-# the Debian triplet (from triplettable).
+# the Debian arch tuple (from tupletable).
 #
 # - Column 1 is the Debian name for the CPU, used to form the cpu part in
-#   the Debian triplet.
+#   the Debian arch tuple.
 # - Column 2 is the GNU name for the CPU, used to output build, host and
 #   target variables in ‘dpkg-architecture’.
 # - Column 3 is an extended regular expression used to match against the

+ 29 - 29
data/ostable

@@ -1,42 +1,42 @@
-# Version=1.0
+# Version=2.0
 #
 # This file contains the table of known operating system names.
 #
 # Architecture names are formed as a combination of the system name
 # (from this table) and CPU name (from cputable) after mapping from
-# the Debian triplet (from triplettable).
+# the Debian arch tuple (from tupletable).
 #
 # - Column 1 is the Debian name for the system, used to form the system part
-#   in the Debian triplet.
+#   in the Debian arch tuple.
 # - Column 2 is the GNU name for the system, used to output build, host and
 #   target variables in ‘dpkg-architecture’.
 # - Column 3 is an extended regular expression used to match against the
 #   system part of the output of the GNU config.guess script.
 #
 # <Debian name>		<GNU name>		<config.guess regex>
-uclibceabi-linux	linux-uclibceabi	linux[^-]*-uclibceabi
-uclibc-linux		linux-uclibc		linux[^-]*-uclibc
-musleabihf-linux	linux-musleabihf	linux[^-]*-musleabihf
-musl-linux		linux-musl		linux[^-]*-musl
-gnueabihf-linux		linux-gnueabihf		linux[^-]*-gnueabihf
-gnueabi-linux		linux-gnueabi		linux[^-]*-gnueabi
-gnuabin32-linux		linux-gnuabin32		linux[^-]*-gnuabin32
-gnuabi64-linux		linux-gnuabi64		linux[^-]*-gnuabi64
-gnuspe-linux		linux-gnuspe		linux[^-]*-gnuspe
-gnux32-linux		linux-gnux32		linux[^-]*-gnux32
-gnu-linux		linux-gnu		linux[^-]*(-gnu.*)?
-gnueabihf-kfreebsd	kfreebsd-gnueabihf	kfreebsd[^-]*-gnueabihf
-gnu-kfreebsd		kfreebsd-gnu		kfreebsd[^-]*(-gnu.*)?
-gnu-knetbsd		knetbsd-gnu		knetbsd[^-]*(-gnu.*)?
-gnu-kopensolaris	kopensolaris-gnu	kopensolaris[^-]*(-gnu.*)?
-gnu-hurd		gnu			gnu[^-]*
-bsd-darwin		darwin			darwin[^-]*
-bsd-dragonflybsd	dragonflybsd		dragonfly[^-]*
-bsd-freebsd		freebsd			freebsd[^-]*
-bsd-netbsd		netbsd			netbsd[^-]*
-bsd-openbsd		openbsd			openbsd[^-]*
-sysv-aix		aix			aix[^-]*
-sysv-solaris		solaris			solaris[^-]*
-uclibceabi-uclinux	uclinux-uclibceabi	uclinux[^-]*-uclibceabi
-uclibc-uclinux		uclinux-uclibc		uclinux[^-]*(-uclibc.*)?
-tos-mint		mint			mint[^-]*
+eabi-uclibc-linux	linux-uclibceabi	linux[^-]*-uclibceabi
+base-uclibc-linux	linux-uclibc		linux[^-]*-uclibc
+eabihf-musl-linux	linux-musleabihf	linux[^-]*-musleabihf
+base-musl-linux		linux-musl		linux[^-]*-musl
+eabihf-gnu-linux	linux-gnueabihf		linux[^-]*-gnueabihf
+eabi-gnu-linux		linux-gnueabi		linux[^-]*-gnueabi
+abin32-gnu-linux	linux-gnuabin32		linux[^-]*-gnuabin32
+abi64-gnu-linux		linux-gnuabi64		linux[^-]*-gnuabi64
+spe-gnu-linux		linux-gnuspe		linux[^-]*-gnuspe
+x32-gnu-linux		linux-gnux32		linux[^-]*-gnux32
+base-gnu-linux		linux-gnu		linux[^-]*(-gnu.*)?
+eabihf-gnu-kfreebsd	kfreebsd-gnueabihf	kfreebsd[^-]*-gnueabihf
+base-gnu-kfreebsd	kfreebsd-gnu		kfreebsd[^-]*(-gnu.*)?
+base-gnu-knetbsd	knetbsd-gnu		knetbsd[^-]*(-gnu.*)?
+base-gnu-kopensolaris	kopensolaris-gnu	kopensolaris[^-]*(-gnu.*)?
+base-gnu-hurd		gnu			gnu[^-]*
+base-bsd-darwin		darwin			darwin[^-]*
+base-bsd-dragonflybsd	dragonflybsd		dragonfly[^-]*
+base-bsd-freebsd	freebsd			freebsd[^-]*
+base-bsd-netbsd		netbsd			netbsd[^-]*
+base-bsd-openbsd	openbsd			openbsd[^-]*
+base-sysv-aix		aix			aix[^-]*
+base-sysv-solaris	solaris			solaris[^-]*
+eabi-uclibc-uclinux	uclinux-uclibceabi	uclinux[^-]*-uclibceabi
+base-uclibc-uclinux	uclinux-uclibc		uclinux[^-]*(-uclibc.*)?
+base-tos-mint		mint			mint[^-]*

+ 0 - 39
data/triplettable

@@ -1,39 +0,0 @@
-# Version=1.0
-#
-# Bidirectional mapping between a Debian triplet and a Debian arch.
-#
-# Supported variables: <cpu>
-#
-# <Debian triplet>	<Debian arch>
-uclibceabi-linux-arm	uclibc-linux-armel
-uclibc-linux-<cpu>	uclibc-linux-<cpu>
-musleabihf-linux-arm	musl-linux-armhf
-musl-linux-<cpu>	musl-linux-<cpu>
-gnueabihf-linux-arm	armhf
-gnueabi-linux-arm	armel
-gnuabin32-linux-mips64r6el	mipsn32r6el
-gnuabin32-linux-mips64r6	mipsn32r6
-gnuabin32-linux-mips64el	mipsn32el
-gnuabin32-linux-mips64	mipsn32
-gnuabi64-linux-mips64r6el	mips64r6el
-gnuabi64-linux-mips64r6	mips64r6
-gnuabi64-linux-mips64el	mips64el
-gnuabi64-linux-mips64	mips64
-gnuspe-linux-powerpc	powerpcspe
-gnux32-linux-amd64	x32
-gnu-linux-<cpu>		<cpu>
-gnueabihf-kfreebsd-arm	kfreebsd-armhf
-gnu-kfreebsd-<cpu>	kfreebsd-<cpu>
-gnu-knetbsd-<cpu>	knetbsd-<cpu>
-gnu-kopensolaris-<cpu>	kopensolaris-<cpu>
-gnu-hurd-<cpu>		hurd-<cpu>
-bsd-dragonflybsd-<cpu>	dragonflybsd-<cpu>
-bsd-freebsd-<cpu>	freebsd-<cpu>
-bsd-openbsd-<cpu>	openbsd-<cpu>
-bsd-netbsd-<cpu>	netbsd-<cpu>
-bsd-darwin-<cpu>	darwin-<cpu>
-sysv-aix-<cpu>		aix-<cpu>
-sysv-solaris-<cpu>	solaris-<cpu>
-uclibceabi-uclinux-arm	uclinux-armel
-uclibc-uclinux-<cpu>	uclinux-<cpu>
-tos-mint-m68k		mint-m68k

+ 39 - 0
data/tupletable

@@ -0,0 +1,39 @@
+# Version=1.0
+#
+# Bidirectional mapping between a Debian arch tuple and a Debian arch name.
+#
+# Supported variables: <cpu>
+#
+# <Debian arch tuple>		<Debian arch name>
+eabi-uclibc-linux-arm		uclibc-linux-armel
+base-uclibc-linux-<cpu>		uclibc-linux-<cpu>
+eabihf-musl-linux-arm		musl-linux-armhf
+base-musl-linux-<cpu>		musl-linux-<cpu>
+eabihf-gnu-linux-arm		armhf
+eabi-gnu-linux-arm		armel
+abin32-gnu-linux-mips64r6el	mipsn32r6el
+abin32-gnu-linux-mips64r6	mipsn32r6
+abin32-gnu-linux-mips64el	mipsn32el
+abin32-gnu-linux-mips64		mipsn32
+abi64-gnu-linux-mips64r6el	mips64r6el
+abi64-gnu-linux-mips64r6	mips64r6
+abi64-gnu-linux-mips64el	mips64el
+abi64-gnu-linux-mips64		mips64
+spe-gnu-linux-powerpc		powerpcspe
+x32-gnu-linux-amd64		x32
+base-gnu-linux-<cpu>		<cpu>
+eabihf-gnu-kfreebsd-arm		kfreebsd-armhf
+base-gnu-kfreebsd-<cpu>		kfreebsd-<cpu>
+base-gnu-knetbsd-<cpu>		knetbsd-<cpu>
+base-gnu-kopensolaris-<cpu>	kopensolaris-<cpu>
+base-gnu-hurd-<cpu>		hurd-<cpu>
+base-bsd-dragonflybsd-<cpu>	dragonflybsd-<cpu>
+base-bsd-freebsd-<cpu>		freebsd-<cpu>
+base-bsd-openbsd-<cpu>		openbsd-<cpu>
+base-bsd-netbsd-<cpu>		netbsd-<cpu>
+base-bsd-darwin-<cpu>		darwin-<cpu>
+base-sysv-aix-<cpu>		aix-<cpu>
+base-sysv-solaris-<cpu>		solaris-<cpu>
+eabi-uclibc-uclinux-arm		uclinux-armel
+base-uclibc-uclinux-<cpu>	uclinux-<cpu>
+base-tos-mint-m68k		mint-m68k

+ 1 - 0
debian/changelog

@@ -58,6 +58,7 @@ dpkg (1.18.11) UNRELEASED; urgency=medium
   * Architecture support:
     - Add support for AIX operating system.
     - Add a version pseudo-field to the arch tables.
+    - Internally represent Debian architectures as quadruplets.
   * Portability:
     - Cast off_t variables to intmax_t when printing them with "%jd".
     - Add missing <string.h> include in libdpkg.

+ 2 - 0
debian/control

@@ -122,6 +122,8 @@ Multi-Arch: foreign
 Depends:
  ${misc:Depends},
  ${perl:Depends},
+# Needed for arch tuples.
+ dpkg (>= 1.18.11),
 Recommends:
 # Used by Dpkg::File.
  libfile-fcntllock-perl,

+ 25 - 8
man/dpkg-architecture.man

@@ -140,10 +140,27 @@ code for the target architecture.
 .IP "Debian architecture" 4
 The Debian architecture string, which specifies the binary tree in the
 FTP archive. Examples: i386, sparc, hurd\-i386.
+.IP "Debian architecture tuple" 4
+A Debian architecture tuple is the fully qualified architecture with all its
+components spelled out.
+This differs with Debian architectures in that at least the \fIcpu\fP
+component does not embed the \fIabi\fP.
+The current tuple has the form \fIabi\fP\-\fIlibc\fP\-\fIos\fP\-\fIcpu\fP.
+Examples: base\-gnu\-linux\-amd64, eabihf\-musl\-linux\-arm.
 .IP "Debian architecture wildcard" 4
-A Debian architecture wildcard is a special architecture string that will match
-any real architecture being part of it. The general form is <kernel>\-<cpu>.
-Examples: linux\-any, any\-i386, hurd\-any.
+A Debian architecture wildcard is a special architecture string that will
+match any real architecture being part of it.
+The general form is a Debian architecture tuple with four or less elements,
+and with at least one of them being \fBany\fP.
+Missing elements of the tuple are prefixed implicitly as \fBany\fP, and thus
+the following pairs are equivalent:
+.nf
+    \fBany\fP\-\fBany\fP\-\fBany\fP\-\fBany\fP = \fBany\fP
+    \fBany\fP\-\fBany\fP\-\fIos\fP\-\fBany\fP = \fIos\fP\-\fBany\fP
+    \fBany\fP\-\fIlibc\fP\-\fBany\fP\-\fBany\fP = \fIlibc\fP\-\fBany\fP\-\fBany\fP
+.fi
+Examples: linux\-any, any\-i386, hurd\-any, eabi\-any\-any\-arm,
+musl\-any\-any.
 .IP "GNU system type" 4
 An architecture specification string consisting of two parts separated by
 a hyphen: cpu and system.
@@ -232,16 +249,16 @@ Format version 1.0 (since dpkg 1.13.2).
 .TP
 .I %PKGDATADIR%/ostable
 Table of known operating system names and mapping to their GNU name.
-Format version 1.0 (since dpkg 1.13.2).
+Format version 2.0 (since dpkg 1.18.11).
 .TP
-.I %PKGDATADIR%/triplettable
-Mapping between Debian architecture triplets and Debian architecture
+.I %PKGDATADIR%/tupletable
+Mapping between Debian architecture tuples and Debian architecture
 names.
-Format version 1.0 (since dpkg 1.14.0).
+Format version 1.0 (since dpkg 1.18.11).
 .TP
 .I %PKGDATADIR%/abitable
 Table of Debian architecture ABI attribute overrides.
-Format version 1.0 (since dpkg 1.16.3).
+Format version 2.0 (since dpkg 1.18.11).
 .SS Packaging support
 .TP
 .I %PKGDATADIR%/architecture.mk

+ 62 - 58
scripts/Dpkg/Arch.pm

@@ -47,13 +47,13 @@ our @EXPORT_OK = qw(
     debarch_is_concerned
     debarch_to_cpuattrs
     debarch_to_gnutriplet
-    debarch_to_debtriplet
+    debarch_to_debtuple
     debarch_to_multiarch
     debarch_list_parse
-    debtriplet_to_debarch
-    debtriplet_to_gnutriplet
+    debtuple_to_debarch
+    debtuple_to_gnutriplet
     gnutriplet_to_debarch
-    gnutriplet_to_debtriplet
+    gnutriplet_to_debtuple
     gnutriplet_to_multiarch
 );
 
@@ -72,8 +72,8 @@ my (%cputable_re, %ostable_re);
 my (%cpubits, %cpuendian);
 my %abibits;
 
-my %debtriplet_to_debarch;
-my %debarch_to_debtriplet;
+my %debtuple_to_debarch;
+my %debarch_to_debtuple;
 
 =head1 FUNCTIONS
 
@@ -163,11 +163,11 @@ sub get_raw_host_arch()
         warning(g_('cannot determine CC system type, falling back to ' .
                    'default (native compilation)'));
     } else {
-        my (@host_archtriplet) = gnutriplet_to_debtriplet($host_gnu_type);
-        $host_arch = debtriplet_to_debarch(@host_archtriplet);
+        my (@host_archtuple) = gnutriplet_to_debtuple($host_gnu_type);
+        $host_arch = debtuple_to_debarch(@host_archtuple);
 
         if (defined $host_arch) {
-            $host_gnu_type = debtriplet_to_gnutriplet(@host_archtriplet);
+            $host_gnu_type = debtuple_to_gnutriplet(@host_archtuple);
         } else {
             warning(g_('unknown CC system type %s, falling back to ' .
                        'default (native compilation)'), $host_gnu_type);
@@ -211,7 +211,7 @@ sub get_valid_arches()
 
     foreach my $os (@os) {
 	foreach my $cpu (@cpu) {
-	    my $arch = debtriplet_to_debarch(split(/-/, $os, 2), $cpu);
+	    my $arch = debtuple_to_debarch(split(/-/, $os, 3), $cpu);
 	    push @arches, $arch if defined($arch);
 	}
     }
@@ -272,47 +272,48 @@ sub _load_abitable()
     });
 }
 
-sub _load_triplettable()
+sub _load_tupletable()
 {
     _load_cputable();
 
-    _load_table('triplettable', sub {
+    _load_table('tupletable', sub {
 	if (m/^(?!\#)(\S+)\s+(\S+)/) {
-	    my $debtriplet = $1;
+	    my $debtuple = $1;
 	    my $debarch = $2;
 
-	    if ($debtriplet =~ /<cpu>/) {
+	    if ($debtuple =~ /<cpu>/) {
 		foreach my $_cpu (@cpu) {
-		    (my $dt = $debtriplet) =~ s/<cpu>/$_cpu/;
+		    (my $dt = $debtuple) =~ s/<cpu>/$_cpu/;
 		    (my $da = $debarch) =~ s/<cpu>/$_cpu/;
 
-		    next if exists $debarch_to_debtriplet{$da}
-		         or exists $debtriplet_to_debarch{$dt};
+		    next if exists $debarch_to_debtuple{$da}
+		         or exists $debtuple_to_debarch{$dt};
 
-		    $debarch_to_debtriplet{$da} = $dt;
-		    $debtriplet_to_debarch{$dt} = $da;
+		    $debarch_to_debtuple{$da} = $dt;
+		    $debtuple_to_debarch{$dt} = $da;
 		}
 	    } else {
-		$debarch_to_debtriplet{$2} = $1;
-		$debtriplet_to_debarch{$1} = $2;
+		$debarch_to_debtuple{$2} = $1;
+		$debtuple_to_debarch{$1} = $2;
 	    }
 	}
     });
 }
 
-sub debtriplet_to_gnutriplet(@)
+sub debtuple_to_gnutriplet(@)
 {
-    my ($abi, $os, $cpu) = @_;
+    my ($abi, $libc, $os, $cpu) = @_;
 
     _load_cputable();
     _load_ostable();
 
-    return unless defined($abi) && defined($os) && defined($cpu) &&
-        exists($cputable{$cpu}) && exists($ostable{"$abi-$os"});
-    return join('-', $cputable{$cpu}, $ostable{"$abi-$os"});
+    return unless
+        defined $abi && defined $libc && defined $os && defined $cpu &&
+        exists $cputable{$cpu} && exists $ostable{"$abi-$libc-$os"};
+    return join('-', $cputable{$cpu}, $ostable{"$abi-$libc-$os"});
 }
 
-sub gnutriplet_to_debtriplet($)
+sub gnutriplet_to_debtuple($)
 {
     my $gnu = shift;
     return unless defined($gnu);
@@ -339,7 +340,7 @@ sub gnutriplet_to_debtriplet($)
     }
 
     return if !defined($cpu) || !defined($os);
-    return (split(/-/, $os, 2), $cpu);
+    return (split(/-/, $os, 3), $cpu);
 }
 
 =item $multiarch = gnutriplet_to_multiarch($gnutriplet)
@@ -373,38 +374,38 @@ sub debarch_to_multiarch($)
     return gnutriplet_to_multiarch(debarch_to_gnutriplet($arch));
 }
 
-sub debtriplet_to_debarch(@)
+sub debtuple_to_debarch(@)
 {
-    my ($abi, $os, $cpu) = @_;
+    my ($abi, $libc, $os, $cpu) = @_;
 
-    _load_triplettable();
+    _load_tupletable();
 
-    if (!defined($abi) || !defined($os) || !defined($cpu)) {
+    if (!defined $abi || !defined $libc || !defined $os || !defined $cpu) {
 	return;
-    } elsif (exists $debtriplet_to_debarch{"$abi-$os-$cpu"}) {
-	return $debtriplet_to_debarch{"$abi-$os-$cpu"};
+    } elsif (exists $debtuple_to_debarch{"$abi-$libc-$os-$cpu"}) {
+	return $debtuple_to_debarch{"$abi-$libc-$os-$cpu"};
     } else {
 	return;
     }
 }
 
-sub debarch_to_debtriplet($)
+sub debarch_to_debtuple($)
 {
     my $arch = shift;
 
     return if not defined $arch;
 
-    _load_triplettable();
+    _load_tupletable();
 
     if ($arch =~ /^linux-([^-]*)/) {
 	# XXX: Might disappear in the future, not sure yet.
 	$arch = $1;
     }
 
-    my $triplet = $debarch_to_debtriplet{$arch};
+    my $tuple = $debarch_to_debtuple{$arch};
 
-    if (defined($triplet)) {
-	return split(/-/, $triplet, 3);
+    if (defined($tuple)) {
+	return split(/-/, $tuple, 4);
     } else {
 	return;
     }
@@ -420,7 +421,7 @@ sub debarch_to_gnutriplet($)
 {
     my $arch = shift;
 
-    return debtriplet_to_gnutriplet(debarch_to_debtriplet($arch));
+    return debtuple_to_gnutriplet(debarch_to_debtuple($arch));
 }
 
 =item $arch = gnutriplet_to_debarch($gnutriplet)
@@ -433,31 +434,33 @@ sub gnutriplet_to_debarch($)
 {
     my $gnu = shift;
 
-    return debtriplet_to_debarch(gnutriplet_to_debtriplet($gnu));
+    return debtuple_to_debarch(gnutriplet_to_debtuple($gnu));
 }
 
-sub debwildcard_to_debtriplet($)
+sub debwildcard_to_debtuple($)
 {
     my $arch = shift;
     my @tuple = split /-/, $arch, 3;
 
     if (any { $_ eq 'any' } @tuple) {
-	if (scalar @tuple == 3) {
+	if (scalar @tuple == 4) {
 	    return @tuple;
-	} elsif (scalar @tuple == 2) {
+	} elsif (scalar @tuple == 3) {
 	    return ('any', @tuple);
+	} elsif (scalar @tuple == 2) {
+	    return ('any', 'any', @tuple);
 	} else {
-	    return ('any', 'any', 'any');
+	    return ('any', 'any', 'any', 'any');
 	}
     } else {
-	return debarch_to_debtriplet($arch);
+	return debarch_to_debtuple($arch);
     }
 }
 
 sub debarch_to_cpuattrs($)
 {
     my $arch = shift;
-    my ($abi, $os, $cpu) = debarch_to_debtriplet($arch);
+    my ($abi, $libc, $os, $cpu) = debarch_to_debtuple($arch);
 
     if (defined($cpu)) {
         _load_abitable();
@@ -481,12 +484,12 @@ sub debarch_eq($$)
 
     return 1 if ($a eq $b);
 
-    my @a = debarch_to_debtriplet($a);
-    my @b = debarch_to_debtriplet($b);
+    my @a = debarch_to_debtuple($a);
+    my @b = debarch_to_debtuple($b);
 
-    return 0 if scalar @a != 3 or scalar @b != 3;
+    return 0 if scalar @a != 4 or scalar @b != 4;
 
-    return ($a[0] eq $b[0] && $a[1] eq $b[1] && $a[2] eq $b[2]);
+    return $a[0] eq $b[0] && $a[1] eq $b[1] && $a[2] eq $b[2] && $a[3] eq $b[3];
 }
 
 =item $bool = debarch_is($arch, $arch_wildcard)
@@ -502,14 +505,15 @@ sub debarch_is($$)
 
     return 1 if ($alias eq $real or $alias eq 'any');
 
-    my @real = debarch_to_debtriplet($real);
-    my @alias = debwildcard_to_debtriplet($alias);
+    my @real = debarch_to_debtuple($real);
+    my @alias = debwildcard_to_debtuple($alias);
 
-    return 0 if scalar @real != 3 or scalar @alias != 3;
+    return 0 if scalar @real != 4 or scalar @alias != 4;
 
     if (($alias[0] eq $real[0] || $alias[0] eq 'any') &&
         ($alias[1] eq $real[1] || $alias[1] eq 'any') &&
-        ($alias[2] eq $real[2] || $alias[2] eq 'any')) {
+        ($alias[2] eq $real[2] || $alias[2] eq 'any') &&
+        ($alias[3] eq $real[3] || $alias[3] eq 'any')) {
 	return 1;
     }
 
@@ -528,10 +532,10 @@ sub debarch_is_wildcard($)
 
     return 0 if $arch eq 'all';
 
-    my @triplet = debwildcard_to_debtriplet($arch);
+    my @tuple = debwildcard_to_debtuple($arch);
 
-    return 0 if scalar @triplet != 3;
-    return 1 if any { $_ eq 'any' } @triplet;
+    return 0 if scalar @tuple != 4;
+    return 1 if any { $_ eq 'any' } @tuple;
     return 0;
 }
 

+ 2 - 2
scripts/Dpkg/Path.pm

@@ -36,7 +36,7 @@ use Exporter qw(import);
 use File::Spec;
 use Cwd qw(realpath);
 
-use Dpkg::Arch qw(get_host_arch debarch_to_debtriplet);
+use Dpkg::Arch qw(get_host_arch debarch_to_debtuple);
 use Dpkg::IPC;
 
 =encoding utf8
@@ -267,7 +267,7 @@ list if none of the files exists.
 sub find_build_file($) {
     my $base = shift;
     my $host_arch = get_host_arch();
-    my ($abi, $host_os, $cpu) = debarch_to_debtriplet($host_arch);
+    my ($abi, $libc, $host_os, $cpu) = debarch_to_debtuple($host_arch);
     my @files;
     foreach my $f ("$base.$host_arch", "$base.$host_os", "$base") {
         push @files, $f if -f $f;

+ 3 - 3
scripts/Dpkg/Vendor/Debian.pm

@@ -29,7 +29,7 @@ use Dpkg::Gettext;
 use Dpkg::ErrorHandling;
 use Dpkg::Control::Types;
 use Dpkg::BuildOptions;
-use Dpkg::Arch qw(get_host_arch debarch_to_debtriplet);
+use Dpkg::Arch qw(get_host_arch debarch_to_debtuple);
 
 use parent qw(Dpkg::Vendor::Default);
 
@@ -269,9 +269,9 @@ sub _add_sanitize_flags {
 sub _add_hardening_flags {
     my ($self, $flags) = @_;
     my $arch = get_host_arch();
-    my ($abi, $os, $cpu) = debarch_to_debtriplet($arch);
+    my ($abi, $libc, $os, $cpu) = debarch_to_debtuple($arch);
 
-    unless (defined $abi and defined $os and defined $cpu) {
+    unless (defined $abi and defined $libc and defined $os and defined $cpu) {
         warning(g_("unknown host architecture '%s'"), $arch);
         ($abi, $os, $cpu) = ('', '', '');
     }

+ 5 - 4
scripts/dpkg-architecture.pl

@@ -28,7 +28,7 @@ use Dpkg::Getopt;
 use Dpkg::ErrorHandling;
 use Dpkg::Arch qw(get_raw_build_arch get_raw_host_arch get_host_gnu_type
                   debarch_to_cpuattrs
-                  get_valid_arches debarch_eq debarch_is debarch_to_debtriplet
+                  get_valid_arches debarch_eq debarch_is debarch_to_debtuple
                   debarch_to_gnutriplet gnutriplet_to_debarch
                   debarch_to_multiarch);
 
@@ -233,6 +233,7 @@ while (@ARGV) {
 
 my %v;
 my $abi;
+my $libc;
 
 #
 # Set build variables
@@ -240,7 +241,7 @@ my $abi;
 
 $v{DEB_BUILD_ARCH} = get_raw_build_arch()
     if (action_needs(DEB_BUILD));
-($abi, $v{DEB_BUILD_ARCH_OS}, $v{DEB_BUILD_ARCH_CPU}) = debarch_to_debtriplet($v{DEB_BUILD_ARCH})
+($abi, $libc, $v{DEB_BUILD_ARCH_OS}, $v{DEB_BUILD_ARCH_CPU}) = debarch_to_debtuple($v{DEB_BUILD_ARCH})
     if (action_needs(DEB_BUILD | DEB_ARCH_INFO));
 ($v{DEB_BUILD_ARCH_BITS}, $v{DEB_BUILD_ARCH_ENDIAN}) = debarch_to_cpuattrs($v{DEB_BUILD_ARCH})
     if (action_needs(DEB_BUILD | DEB_ARCH_ATTR));
@@ -265,7 +266,7 @@ if (action_needs(DEB_BUILD | DEB_GNU_INFO)) {
 
 $v{DEB_HOST_ARCH} = $req_host_arch || get_raw_host_arch()
     if (action_needs(DEB_HOST));
-($abi, $v{DEB_HOST_ARCH_OS}, $v{DEB_HOST_ARCH_CPU}) = debarch_to_debtriplet($v{DEB_HOST_ARCH})
+($abi, $libc, $v{DEB_HOST_ARCH_OS}, $v{DEB_HOST_ARCH_CPU}) = debarch_to_debtuple($v{DEB_HOST_ARCH})
     if (action_needs(DEB_HOST | DEB_ARCH_INFO));
 ($v{DEB_HOST_ARCH_BITS}, $v{DEB_HOST_ARCH_ENDIAN}) = debarch_to_cpuattrs($v{DEB_HOST_ARCH})
     if (action_needs(DEB_HOST | DEB_ARCH_ATTR));
@@ -301,7 +302,7 @@ if (action_needs(DEB_HOST | DEB_GNU_INFO)) {
 
 $v{DEB_TARGET_ARCH} = $req_target_arch || $req_host_arch || get_raw_host_arch()
     if (action_needs(DEB_TARGET));
-($abi, $v{DEB_TARGET_ARCH_OS}, $v{DEB_TARGET_ARCH_CPU}) = debarch_to_debtriplet($v{DEB_TARGET_ARCH})
+($abi, $libc, $v{DEB_TARGET_ARCH_OS}, $v{DEB_TARGET_ARCH_CPU}) = debarch_to_debtuple($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));

+ 15 - 15
scripts/t/Dpkg_Arch.t

@@ -18,30 +18,30 @@ use warnings;
 
 use Test::More tests => 64;
 
-use_ok('Dpkg::Arch', qw(debarch_to_debtriplet debarch_to_multiarch
+use_ok('Dpkg::Arch', qw(debarch_to_debtuple debarch_to_multiarch
                         debarch_eq debarch_is debarch_is_wildcard
                         debarch_is_illegal
                         debarch_to_cpuattrs
                         debarch_list_parse
-                        debtriplet_to_debarch gnutriplet_to_debarch
+                        debtuple_to_debarch gnutriplet_to_debarch
                         get_host_gnu_type
                         get_valid_arches));
 
 my @tuple_new;
 my @tuple_ref;
 
-@tuple_new = debarch_to_debtriplet('unknown');
-is_deeply(\@tuple_new, [], 'unknown triplet');
+@tuple_new = debarch_to_debtuple('unknown');
+is_deeply(\@tuple_new, [], 'unknown tuple');
 
-@tuple_ref = qw(gnu linux amd64);
-@tuple_new = debarch_to_debtriplet('amd64');
-is_deeply(\@tuple_new, \@tuple_ref, 'valid triplet');
+@tuple_ref = qw(base gnu linux amd64);
+@tuple_new = debarch_to_debtuple('amd64');
+is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple');
 
-@tuple_ref = qw(gnu linux amd64);
-@tuple_new = debarch_to_debtriplet('amd64');
-is_deeply(\@tuple_new, \@tuple_ref, 'valid triplet');
-@tuple_new = debarch_to_debtriplet('linux-amd64');
-is_deeply(\@tuple_new, \@tuple_ref, 'valid triplet');
+@tuple_ref = qw(base gnu linux amd64);
+@tuple_new = debarch_to_debtuple('amd64');
+is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple');
+@tuple_new = debarch_to_debtuple('linux-amd64');
+is_deeply(\@tuple_new, \@tuple_ref, 'valid tuple');
 
 is(debarch_to_multiarch('i386'), 'i386-linux-gnu',
    'normalized i386 multiarch triplet');
@@ -112,9 +112,9 @@ ok($@, 'parse concatenated arches failed');
 is(debarch_to_cpuattrs(undef), undef, 'undef cpu attrs');
 is_deeply([ debarch_to_cpuattrs('amd64') ], [ qw(64 little) ], 'amd64 cpu attrs');
 
-is(debtriplet_to_debarch(undef, undef, undef), undef, 'undef debtriplet');
-is(debtriplet_to_debarch('gnu', 'linux', 'amd64'), 'amd64', 'known debtriplet');
-is(debtriplet_to_debarch('unknown', 'unknown', 'unknown'), undef, 'unknown debtriplet');
+is(debtuple_to_debarch(undef, undef, undef, undef), undef, 'undef debtuple');
+is(debtuple_to_debarch('base', 'gnu', 'linux', 'amd64'), 'amd64', 'known debtuple');
+is(debtuple_to_debarch('unknown', 'unknown', 'unknown', 'unknown'), undef, 'unknown debtuple');
 
 is(gnutriplet_to_debarch(undef), undef, 'undef gnutriplet');
 is(gnutriplet_to_debarch('unknown-unknown-unknown'), undef, 'unknown gnutriplet');