summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am6
-rw-r--r--abitable9
-rw-r--r--debian/changelog1
-rw-r--r--scripts/Dpkg/Arch.pm32
4 files changed, 46 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am
index a916f1da8..78a4f5ed0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,7 +18,11 @@ SUBDIRS = \
ACLOCAL_AMFLAGS = -I m4
-dist_pkgdata_DATA = cputable ostable triplettable
+dist_pkgdata_DATA = \
+ cputable \
+ ostable \
+ abitable \
+ triplettable
EXTRA_DIST = \
.mailmap \
diff --git a/abitable b/abitable
new file mode 100644
index 000000000..57198954a
--- /dev/null
+++ b/abitable
@@ -0,0 +1,9 @@
+# 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.
+#
+# Column 1 is the Debian name for the ABI.
+# Column 2 is the size (in bits) of the ABI integers/pointers.
+#
+# <Debian name> <Bits>
diff --git a/debian/changelog b/debian/changelog
index a2993128f..40ed2650d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -27,6 +27,7 @@ dpkg (1.16.3) UNRELEASED; urgency=low
current locale (although this was only affecting the old deb format).
* Ignore the minor format version number for deb-split format, unifying
the behaviour with the deb format.
+ * Add support for an abitable containing arch attribute overrides.
[ Helge Kreutzmann ]
* Fix a typo in man/dpkg-buildflags.1.
diff --git a/scripts/Dpkg/Arch.pm b/scripts/Dpkg/Arch.pm
index 858e0fb9a..72fe2d9cf 100644
--- a/scripts/Dpkg/Arch.pm
+++ b/scripts/Dpkg/Arch.pm
@@ -28,6 +28,7 @@ our @EXPORT_OK = qw(get_raw_build_arch get_raw_host_arch
debtriplet_to_debarch debarch_to_debtriplet
gnutriplet_to_multiarch debarch_to_multiarch);
+use POSIX qw(:errno_h);
use Dpkg;
use Dpkg::Gettext;
use Dpkg::ErrorHandling;
@@ -36,6 +37,7 @@ my (@cpu, @os);
my (%cputable, %ostable);
my (%cputable_re, %ostable_re);
my (%cpubits, %cpuendian);
+my %abibits;
my %debtriplet_to_debarch;
my %debarch_to_debtriplet;
@@ -169,6 +171,32 @@ sub read_ostable
close OSTABLE;
}
+my $abitable_loaded = 0;
+sub abitable_load()
+{
+ return if ($abitable_loaded);
+
+ local $_;
+ local $/ = "\n";
+
+ # Because the abitable is only for override information, do not fail if
+ # it does not exist, as that will only mean the other tables do not have
+ # an entry needing to be overridden. This way we do not require a newer
+ # dpkg by libdpkg-perl.
+ if (open ABITABLE, "$pkgdatadir/abitable") {
+ while (<ABITABLE>) {
+ if (m/^(?!\#)(\S+)\s+(\S+)/) {
+ $abibits{$1} = $2;
+ }
+ }
+ close ABITABLE;
+ } elsif ($! != ENOENT) {
+ syserr(_g("cannot open %s"), "abitable");
+ }
+
+ $abitable_loaded = 1;
+}
+
sub read_triplettable()
{
read_cputable() if (!@cpu);
@@ -336,7 +364,9 @@ sub debarch_to_cpuattrs($)
my ($abi, $os, $cpu) = debarch_to_debtriplet($arch);
if (defined($cpu)) {
- return ($cpubits{$cpu}, $cpuendian{$cpu});
+ abitable_load();
+
+ return ($abibits{$abi} || $cpubits{$cpu}, $cpuendian{$cpu});
} else {
return undef;
}