[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#180128: dpkg - cross compile patch



Package: dpkg
Version: 1.10.9
Severity: wishlist

this patch makes cross compilation with dpkg easier. automake build
environments should work with them without modifications.

bastian

-- 
I've already got a female to worry about.  Her name is the Enterprise.
		-- Kirk, "The Corbomite Maneuver", stardate 1514.0
Index: Makefile.in
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/Makefile.in,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- Makefile.in	14 Jul 2002 20:15:06 -0000	1.1.1.1
+++ Makefile.in	23 Dec 2002 17:55:49 -0000	1.2
@@ -19,6 +19,8 @@
 	$(mkinstalldirs) $(DESTDIR)$(dpkgsharedir)/origins
 	$(INSTALL_DATA) $(srcdir)/origin $(DESTDIR)$(dpkgconfdir)/origins/debian
 	$(INSTALL_DATA) $(srcdir)/archtable $(DESTDIR)$(dpkgsharedir)/archtable
+	$(mkinstalldirs) $(DESTDIR)$(dpkgconfdir)/cross
+	$(INSTALL_DATA) $(srcdir)/cross/* $(DESTDIR)$(dpkgconfdir)/cross/
 
 clean: clean-recursive
 	rm -f $(GENFILES)
Index: cross/config
===================================================================
RCS file: cross/config
diff -N cross/config
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/config	23 Dec 2002 18:26:08 -0000	1.2
@@ -0,0 +1,11 @@
+if [ -f `dirname $ac_site_file`/cpu.$DEB_HOST_GNU_CPU ]; then
+	. `dirname $ac_site_file`/cpu.$DEB_HOST_GNU_CPU
+else
+	echo "can't find cpu config `dirname $ac_site_file`/cpu.$DEB_HOST_GNU_CPU"
+fi
+if [ -f `dirname $ac_site_file`/system.$DEB_HOST_GNU_SYSTEM ]; then
+	. `dirname $ac_site_file`/system.$DEB_HOST_GNU_SYSTEM
+else
+	echo "can't find system config `dirname $ac_site_file`/cpu.$DEB_HOST_GNU_CPU"
+fi
+
Index: cross/cpu.i386
===================================================================
RCS file: cross/cpu.i386
diff -N cross/cpu.i386
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/cpu.i386	23 Dec 2002 18:45:44 -0000	1.2
@@ -0,0 +1,18 @@
+#
+# i386 specific configure variables
+#
+ac_cv_c_bigendian=no
+ac_cv_c_char_unsigned=no
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_int=4
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_short=2
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_float=4
+ac_cv_sizeof_double=8
+ac_cv_sizeof_long_double=12
Index: cross/cpu.m68k
===================================================================
RCS file: cross/cpu.m68k
diff -N cross/cpu.m68k
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/cpu.m68k	23 Dec 2002 18:45:44 -0000	1.2
@@ -0,0 +1,18 @@
+#
+# m68k specific configure variables
+#
+ac_cv_c_bigendian=yes
+ac_cv_c_char_unsigned=no
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_int=4
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_short=2
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_float=4
+ac_cv_sizeof_double=8
+ac_cv_sizeof_long_double=12
Index: cross/cpu.mips
===================================================================
RCS file: cross/cpu.mips
diff -N cross/cpu.mips
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/cpu.mips	23 Dec 2002 18:45:44 -0000	1.2
@@ -0,0 +1,11 @@
+#
+# mips bigendian specific configure variables
+#
+ac_cv_c_bigendian=yes
+ac_cv_c_char_unsigned=no
+ac_cv_sizeof_long=4
+ac_cv_sizeof_int=4
+ac_cv_sizeof_char_p=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_int=4
Index: cross/cpu.powerpc
===================================================================
RCS file: cross/cpu.powerpc
diff -N cross/cpu.powerpc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/cpu.powerpc	23 Dec 2002 18:26:16 -0000	1.1
@@ -0,0 +1,18 @@
+#
+# powerpc specific configure variables
+#
+ac_cv_c_bigendian=yes
+ac_cv_c_char_unsigned=no
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_int=4
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_short=2
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_float=4
+ac_cv_sizeof_double=8
+ac_cv_sizeof_long_double=8
Index: cross/system.gnu
===================================================================
RCS file: cross/system.gnu
diff -N cross/system.gnu
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/system.gnu	23 Dec 2002 18:45:44 -0000	1.2
@@ -0,0 +1,9 @@
+#
+# gnu (hurd) specific configure variables
+#
+ac_cv_header_stdc=yes
+ac_cv_func_closedir_void=no
+kb_cv_func_putenv_malloc=no
+ac_cv_func_vfork=yes
+ac_cv_func_setvbuf_reversed=no
+
Index: cross/system.linux
===================================================================
RCS file: cross/system.linux
diff -N cross/system.linux
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross/system.linux	23 Dec 2002 18:45:44 -0000	1.2
@@ -0,0 +1,12 @@
+#
+# linux specific configure variables
+#
+ac_cv_header_stdc=yes
+ac_cv_func_closedir_void=no
+ac_cv_func_vfork=yes
+ac_cv_func_setvbuf_reversed=no
+ac_cv_func_getpgrp_void=yes
+ac_cv_sys_restartable_syscalls=yes
+ac_cv_func_fnmatch_works=yes
+ac_cv_func_getpagesize=yes
+
Index: debian/changelog
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/debian/changelog,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- debian/changelog	15 Sep 2002 18:22:38 -0000	1.1.1.1
+++ debian/changelog	23 Dec 2002 17:55:49 -0000	1.2
@@ -1,3 +1,9 @@
+dpkg (1.10.9.0.cross) unstable; urgency=low
+
+  * partialy merge dpkg-cross changes.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 23 Dec 2002 18:53:58 +0100
+
 dpkg (1.10.9) unstable; urgency=low
 
   * Fix dereference in main/help.c:cu_closefd(), which was the cause of
Index: debian/dpkg-dev.conffiles
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/debian/dpkg-dev.conffiles,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- debian/dpkg-dev.conffiles	20 Nov 2000 22:03:32 -0000	1.1.1.1
+++ debian/dpkg-dev.conffiles	23 Dec 2002 18:47:28 -0000	1.3
@@ -1,2 +1,9 @@
+/etc/dpkg/cross/config
+/etc/dpkg/cross/cpu.i386
+/etc/dpkg/cross/cpu.m68k
+/etc/dpkg/cross/cpu.mips
+/etc/dpkg/cross/cpu.powerpc
+/etc/dpkg/cross/system.gnu
+/etc/dpkg/cross/system.linux
 /etc/dpkg/shlibs.default
 /etc/dpkg/shlibs.override
Index: debian/rules
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/debian/rules,v
retrieving revision 1.1.1.1
retrieving revision 1.4
diff -u -r1.1.1.1 -r1.4
--- debian/rules	29 Aug 2002 20:12:24 -0000	1.1.1.1
+++ debian/rules	23 Dec 2002 18:02:42 -0000	1.4
@@ -100,6 +100,7 @@
 	install -d -m 755 -o root -g root $(TMP_DPKG)/sbin
 	install -d -m 755 -o root -g root $(TMP_DPKG)/var/lib/dpkg
 	-test -d $(INSTALL_TMP)/etc && cp -a $(INSTALL_TMP)/etc $(TMP_DPKG)/
+	rm -r $(TMP_DPKG)/etc/dpkg/cross/
 	set -e ; for i in info alternatives parts updates ; do \
 		cp -a $(INSTALL_TMP)/var/lib/dpkg/$$i $(TMP_DPKG)/var/lib/dpkg/ ; \
 	done
@@ -184,6 +185,8 @@
 		$(TMP_DPKG_DEV)/etc/dpkg/
 	install -p -m 644 -o root -g root debian/shlibs.override \
 		$(TMP_DPKG_DEV)/etc/dpkg/
+	install -d -m 755 -o root -g root $(TMP_DPKG_DEV)/etc/dpkg/cross
+	mv $(INSTALL_TMP)/etc/dpkg/cross/* $(TMP_DPKG_DEV)/etc/dpkg/cross/
 	install -d -m 755 -o root -g root $(TMP_DPKG_DEV)/usr/lib/dpkg
 	install -d -m 755 -o root -g root $(TMP_DPKG_DEV)/usr/share
 	install -d -m 755 -o root -g root $(TMP_DPKG_DEV)/usr/bin
Index: scripts/dpkg-architecture.pl
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/scripts/dpkg-architecture.pl,v
retrieving revision 1.1.1.1
retrieving revision 1.6
diff -u -r1.1.1.1 -r1.6
--- scripts/dpkg-architecture.pl	15 Sep 2002 18:26:00 -0000	1.1.1.1
+++ scripts/dpkg-architecture.pl	23 Dec 2002 18:26:08 -0000	1.6
@@ -40,37 +40,43 @@
 #  1.0.7  -q should not imply -f, because this prevents setting
 #         make variables with non-standard names correctly.
 
-$version="1.0.0";
+use strict;
+use warnings;
+
+my $version="1.0.0";
 $0 = `basename $0`; chomp $0;
 
-$dpkglibdir="/usr/lib/dpkg";
+my $dpkglibdir="/usr/lib/dpkg";
 push(@INC,$dpkglibdir);
 require 'controllib.pl';
 
-%archtable=('i386',		'i386-linux',
-	    'sparc',		'sparc-linux',
-	    'sparc64',		'sparc64-linux',
-	    'alpha',		'alpha-linux',
-	    'm68k',		'm68k-linux',
-            'arm',		'arm-linux',
-            'powerpc',		'powerpc-linux',
-	    'mips',		'mips-linux',
-	    'mipsel',		'mipsel-linux',
-	    'sh3',		'sh3-linux',
-	    'sh4',		'sh4-linux',
-	    'sh3eb',		'sh3eb-linux',
-	    'sh4eb',		'sh4eb-linux',
-	    'hppa',		'hppa-linux',
-	    'hurd-i386',	'i386-gnu',
-	    's390',		's390-linux',
-	    's390x',		's390x-linux',
-	    'ia64',		'ia64-linux',
-	    'openbsd-i386',	'i386-openbsd',
-	    'freebsd-i386',	'i386-freebsd',
-	    'darwin-powerpc',	'powerpc-darwin',
-	    'darwin-i386',	'i386-darwin');
+my %archtable=(
+    'i386' =>		[ 'i386-linux', 'elf32-i386' ],
+    'sparc'=>		[ 'sparc-linux', 'unknown' ],
+    'sparc64' =>	[ 'sparc64-linux', 'unknown' ],
+    'alpha' =>		[ 'alpha-linux', 'unknown' ],
+    'm68k' =>		[ 'm68k-linux', 'unknown' ],
+    'arm' =>		[ 'arm-linux', 'unknown' ],
+    'powerpc' =>	[ 'powerpc-linux', 'elf32-powerpc' ],
+    'mips' =>		[ 'mips-linux', 'unknown' ],
+    'mipsel' =>		[ 'mipsel-linux', 'unknown' ],
+    'sh3' =>		[ 'sh3-linux', 'unknown' ],
+    'sh4' =>		[ 'sh4-linux', 'unknown' ],
+    'sh3eb' =>		[ 'sh3eb-linux', 'unknown' ],
+    'sh4eb' =>		[ 'sh4eb-linux', 'unknown' ],
+    'hppa' =>		[ 'hppa-linux', 'unknown' ],
+    'hurd-i386' =>	[ 'i386-gnu', 'unknown' ],
+    's390' =>		[ 's390-linux', 'unknown' ],
+    's390x' =>		[ 's390x-linux', 'unknown' ],
+    'ia64' =>		[ 'ia64-linux', 'unknown' ],
+    'openbsd-i386' =>	[ 'i386-openbsd', 'unknown' ],
+    'freebsd-i386' =>	[ 'i386-freebsd', 'unknown' ],
+    'darwin-powerpc' =>	[ 'powerpc-darwin', 'unknown' ],
+    'darwin-i386' =>	[ 'i386-darwin', 'unknown' ],
+);
 
 sub usageversion {
+    $_{$archtable{$_}->[0]} = 1 foreach keys %archtable;
     print STDERR
 "Debian $0 $version.  Copyright (C) 1999,2000,2001 Marcus Brinkmann.
 This is free software; see the GNU General Public Licence version 2
@@ -89,13 +95,13 @@
        -u                 print command to unset environment variables
        -c <command>       set environment and run the command in it.
 
-Known Debian Architectures are ".join(", ",keys %archtable)."
-Known GNU System Types are ".join(", ",map ($archtable{$_},keys %archtable))."
+Known Debian Architectures are ".join(", ",sort keys %archtable)."
+Known GNU System Types are ".join(", ",sort keys %_)."
 ";
 }
 
 sub rewrite_gnu_cpu {
-	local ($_) = @_;
+	$_ = shift;
 
 	s/(?:i386|i486|i586|i686|pentium)(.*linux)/i386$1/;
 	s/ppc/powerpc/;
@@ -103,73 +109,52 @@
 }
 
 sub gnu_to_debian {
-	local ($gnu) = @_;
-	local (@list);
-	local ($a);
+	my $gnu = shift;
+	my @list;
 
 	$gnu = &rewrite_gnu_cpu($gnu);
 
-	foreach $a (keys %archtable) {
-		push @list, $a if $archtable{$a} eq $gnu;
+	foreach (keys %archtable) {
+		push @list, $_ if $archtable{$_}->[0] eq $gnu;
 	}
 	return @list;
 }
 
-# Set default values:
-
-$deb_build_arch = `dpkg --print-installation-architecture`;
-if ($?>>8) {
-	&syserr("dpkg --print-installation-architecture filed");
-}
-chomp $deb_build_arch;
-$deb_build_gnu_type = $archtable{$deb_build_arch};
-$deb_build_gnu_cpu = $deb_build_gnu_type;
-$deb_build_gnu_system = $deb_build_gnu_type;
-$deb_build_gnu_cpu =~ s/-.*$//;
-$deb_build_gnu_system =~ s/^.*-//;
-
-# Default host: Current gcc.
-$gcc = `\${CC:-gcc} --print-libgcc-file-name`;
-if ($?>>8) {
-    &warn("Couldn't determine gcc system type, falling back to default (native compilation)");
-    $gcc = '';
-} else {
-    $gcc =~ s!^.*gcc-lib/([^/]*)/(?:egcs-)?\d+(?:[.\da-z]*)/libgcc.*$!$1!s;
-    if (defined $1 and $1 ne '') {
-	$gcc = $1;
-    } else {
-	&warn("Couldn't determine gcc system type, falling back to default (native compilation)");
-	$gcc = '';
-    }
-}
-
-if ($gcc ne '') {
-    @list = &gnu_to_debian($gcc);
-    if ($#list == -1) {
-	&warn ("Unknown gcc system type $gcc, falling back to default (native compilation)"),
-    } elsif ($#list > 0) {
-	&warn ("Ambiguous gcc system type $gcc, you must specify Debian architecture, too (one of ".join(", ",@list).")");
-    } else {
-	$gcc=$archtable{$list[0]};
-	$deb_host_arch = $list[0];
-	$deb_host_gnu_type = $gcc;
-        ($deb_host_gnu_system = $gcc) =~ s/^.*-//;
-        ($deb_host_gnu_cpu = $gcc ) =~ s/-.*$//;
-    }
-}
-if (!defined($deb_host_arch)) {
-    # Default host: Native compilation.
-    $deb_host_arch = $deb_build_arch;
-    $deb_host_gnu_cpu = $deb_build_gnu_cpu;
-    $deb_host_gnu_system = $deb_build_gnu_system;
-    $deb_host_gnu_type = $deb_build_gnu_type;
-}
-
+my %env;
+my @list;
 
-$req_host_arch = '';
-$req_host_gnu_type = '';
-$action='l';
-$force=0;
+my @ordered_d = qw(
+    DEB_BUILD_ARCH
+    DEB_BUILD_GNU_CPU
+    DEB_BUILD_GNU_SYSTEM
+    DEB_BUILD_GNU_TYPE
+    DEB_BUILD_ELF_TYPE
+    DEB_HOST_ARCH
+    DEB_HOST_GNU_CPU
+    DEB_HOST_GNU_SYSTEM
+    DEB_HOST_GNU_TYPE
+    DEB_HOST_ELF_TYPE
+);
+
+my @ordered_r = qw(
+   CC
+   CXX
+   AS
+   AR
+   LD
+   RANLIB
+   STRIP
+   CONFIG_SITE
+   MAKEFLAGS
+   PKG_CONFIG_PATH
+);
+
+my $req_host_arch = '';
+my $req_host_gnu_type = '';
+my $req_variable_to_print;
+my $action = 'l';
+my $force = 0;
+my $type = 'd';
 
 while (@ARGV) {
     $_=shift(@ARGV);
@@ -188,14 +173,74 @@
     } elsif (m/^-c$/) {
        $action = 'c';
        last;
+    } elsif (m/^-r$/) {
+       $type = 'r';
     } else {
 	usageerr("unknown option \`$_'");
     }
 }
 
+# Set default values:
+
+$env{'DEB_BUILD_ARCH'} = `dpkg --print-installation-architecture`;
+if ($?>>8) {
+	&syserr("dpkg --print-installation-architecture filed");
+}
+chomp $env{'DEB_BUILD_ARCH'};
+$env{'DEB_BUILD_GNU_TYPE'} = $env{'DEB_BUILD_GNU_CPU'} = $env{'DEB_BUILD_GNU_SYSTEM'} = $archtable{$env{'DEB_BUILD_ARCH'}}->[0];
+$env{'DEB_BUILD_GNU_CPU'} =~ s/-.*$//;
+$env{'DEB_BUILD_GNU_SYSTEM'} =~ s/^.*-//;
+$env{'DEB_BUILD_ELF_TYPE'} = $archtable{$env{'DEB_BUILD_ARCH'}}->[1];
+
+$env{CC} = "gcc";
+$env{CXX} = "g++";
+$env{AR} = "ar";
+$env{AS} = "as";
+$env{LD} = "ld";
+$env{RANLIB} = "ranlib";
+$env{STRIP} = "strip";
+
+# Default host: Current gcc.
+my $gcc = '';
+if (!$req_host_arch) {
+    $gcc = `\${CC:-gcc} --print-libgcc-file-name`;
+    if ($?>>8) {
+	&warn("Couldn't determine gcc system type, falling back to default (native compilation)");
+	$gcc = '';
+    } else {
+	$gcc =~ s#^.*gcc-lib/([^/]*)/(?:egcs-)?\d+(?:[.\da-z]*)/libgcc.*$#$1#s;
+	if (defined $1 and $1 ne '') {
+	    $gcc = $1;
+	} else {
+	    &warn("Couldn't determine gcc system type, falling back to default (native compilation)");
+	    $gcc = '';
+	}
+    }
+}
+
+if ($gcc ne '') {
+    @list = &gnu_to_debian($gcc);
+    if ($#list == -1) {
+	&warn ("Unknown gcc system type $gcc, falling back to default (native compilation)"),
+    } elsif ($#list > 0) {
+	&warn ("Ambiguous gcc system type $gcc, you must specify Debian architecture, too (one of ".join(", ",@list).")");
+    } else {
+	$gcc=$archtable{$list[0]}->[0];
+	$env{'DEB_HOST_ARCH'} = $list[0];
+	$env{'DEB_HOST_GNU_TYPE'} = $gcc;
+        ($env{'DEB_HOST_GNU_SYSTEM'} = $gcc) =~ s/^.*-//;
+        ($env{'DEB_HOST_GNU_CPU'} = $gcc ) =~ s/-.*$//;
+	$env{'DEB_HOST_ELF_TYPE'} =  $archtable{$list[0]}->[1];
+    }
+}
+if (!defined($env{'DEB_HOST_ARCH'})) {
+    # Default host: Native compilation.
+    $env{'DEB_HOST_'.$_} = $env{'DEB_BUILD_'.$_} foreach qw(ARCH GNU_CPU GNU_SYSTEM GNU_TYPE ELF_TYPE);
+}
+
 if ($req_host_arch ne '' && $req_host_gnu_type eq '') {
     die ("unknown Debian architecture $req_host_arch, you must specify GNU system type, too") if !exists $archtable{$req_host_arch};
-    $req_host_gnu_type = $archtable{$req_host_arch}
+    $req_host_gnu_type = $archtable{$req_host_arch}->[0]
 }
 
 if ($req_host_gnu_type ne '' && $req_host_arch eq '') {
@@ -205,56 +250,73 @@
     $req_host_arch = $list[0];
 }
 
-if (exists $archtable{$req_host_arch}) {
-    &warn("Default GNU system type $archtable{$req_host_arch} for Debian arch $req_host_arch does not match specified GNU system type $req_host_gnu_type\n") if $archtable{$req_host_arch} ne $req_host_gnu_type;
+if (exists $archtable{$req_host_arch}->[0]) {
+    &warn("Default GNU system type ".$archtable{$req_host_arch}->[0]." for Debian arch $req_host_arch does not match specified GNU system type $req_host_gnu_type\n") if $archtable{$req_host_arch}->[0] ne $req_host_gnu_type;
 }
 
 die "couldn't parse GNU system type $req_host_gnu_type, must be arch-os or arch-vendor-os" if $req_host_gnu_type !~ m/^([\w\d]+(-[\w\d]+){1,2})?$/;
 
-$deb_host_arch = $req_host_arch if $req_host_arch ne '';
+$env{'DEB_HOST_ARCH'} = $req_host_arch if $req_host_arch ne '';
 if ($req_host_gnu_type ne '') {
-    $deb_host_gnu_cpu = $deb_host_gnu_system = $deb_host_gnu_type = $req_host_gnu_type;
-    $deb_host_gnu_cpu =~ s/-.*$//;
-    $deb_host_gnu_system =~ s/^.*-//;
+    $env{'DEB_HOST_GNU_CPU'} = $env{'DEB_HOST_GNU_SYSTEM'} = $env{'DEB_HOST_GNU_TYPE'} = $req_host_gnu_type;
+    $env{'DEB_HOST_GNU_CPU'} =~ s/-.*$//;
+    $env{'DEB_HOST_GNU_SYSTEM'} =~ s/^.*-//;
+    @list = &gnu_to_debian ($req_host_gnu_type);
+    $env{'DEB_HOST_ELF_TYPE'} = $archtable{$list[0]}->[1];
 }
 
-#$gcc = `\${CC:-gcc} --print-libgcc-file-name`;
-#$gcc =~ s!^.*gcc-lib/(.*)/\d+(?:.\d+)*/libgcc.*$!$1!s;
-&warn("Specified GNU system type $deb_host_gnu_type does not match gcc system type $gcc.") if ($gcc ne '') && ($gcc ne $deb_host_gnu_type);
+&warn("Specified GNU system type $env{'DEB_HOST_GNU_TYPE'} does not match gcc system type $gcc.") if ($gcc ne '') && ($gcc ne $env{'DEB_HOST_GNU_TYPE'});
+
+if ($env{'DEB_HOST_ARCH'} ne $env{'DEB_BUILD_ARCH'}) {
+    foreach (qw(CC CXX)) {
+	$env{$_} = $env{'DEB_HOST_GNU_TYPE'} . "-" . $env{$_};
+    }
+
+    $env{PKG_CONFIG_PATH} = "/usr/" . $env{'DEB_HOST_GNU_TYPE'} . "/lib/pkgconfig/";
+}
+else {
+    $env{PKG_CONFIG_PATH} = "/usr/lib/pkgconfig/";
+}
+if ($env{'DEB_HOST_GNU_CPU'} ne $env{'DEB_BUILD_GNU_CPU'}) {
+    foreach (qw(AR AS LD RANLIB STRIP)) {
+	$env{$_} = $env{'DEB_HOST_GNU_TYPE'} . "-" . $env{$_};
+    }
+}
+
+$env{CONFIG_SITE} = "/etc/dpkg/cross/config";
+
+my $makeflags = "w -- ";
+if (!$force and exists $ENV{'MAKEFLAGS'}) {
+	$makeflags = $ENV{'MAKEFLAGS'};
+	$makeflags .= " -- " if $makeflags !~ / -- /;
+}
+foreach (qw(CC CXX AR AS LD RANLIB STRIP)) {
+	$makeflags .= " $_=$env{$_}";
+}
+$env{'MAKEFLAGS'} = "\"$makeflags\"";
+
+my @ordered;
+
+if ($type eq 'd') {
+    @ordered = @ordered_d;
+}
+elsif ($type eq 'r') {
+    @ordered = @ordered_r;
+}
 
-%env = ();
 if (!$force) {
-    $deb_build_arch = $ENV{DEB_BUILD_ARCH} if (exists $ENV{DEB_BUILD_ARCH});
-    $deb_build_gnu_cpu = $ENV{DEB_BUILD_GNU_CPU} if (exists $ENV{DEB_BUILD_GNU_CPU});
-    $deb_build_gnu_system = $ENV{DEB_BUILD_GNU_SYSTEM} if (exists $ENV{DEB_BUILD_GNU_SYSTEM});
-    $deb_build_gnu_type = $ENV{DEB_BUILD_GNU_TYPE} if (exists $ENV{DEB_BUILD_GNU_TYPE});
-    $deb_host_arch = $ENV{DEB_HOST_ARCH} if (exists $ENV{DEB_HOST_ARCH});
-    $deb_host_gnu_cpu = $ENV{DEB_HOST_GNU_CPU} if (exists $ENV{DEB_HOST_GNU_CPU});
-    $deb_host_gnu_system = $ENV{DEB_HOST_GNU_SYSTEM} if (exists $ENV{DEB_HOST_GNU_SYSTEM});
-    $deb_host_gnu_type = $ENV{DEB_HOST_GNU_TYPE} if (exists $ENV{DEB_HOST_GNU_TYPE});
-}
-
-@ordered = qw(DEB_BUILD_ARCH DEB_BUILD_GNU_CPU
-	      DEB_BUILD_GNU_SYSTEM DEB_BUILD_GNU_TYPE
-	      DEB_HOST_ARCH DEB_HOST_GNU_CPU
-	      DEB_HOST_GNU_SYSTEM DEB_HOST_GNU_TYPE);
-
-$env{'DEB_BUILD_ARCH'}=$deb_build_arch;
-$env{'DEB_BUILD_GNU_CPU'}=$deb_build_gnu_cpu;
-$env{'DEB_BUILD_GNU_SYSTEM'}=$deb_build_gnu_system;
-$env{'DEB_BUILD_GNU_TYPE'}=$deb_build_gnu_type;
-$env{'DEB_HOST_ARCH'}=$deb_host_arch;
-$env{'DEB_HOST_GNU_CPU'}=$deb_host_gnu_cpu;
-$env{'DEB_HOST_GNU_SYSTEM'}=$deb_host_gnu_system;
-$env{'DEB_HOST_GNU_TYPE'}=$deb_host_gnu_type;
+    foreach (@ordered) {
+	$env{$_} = $ENV{$_} if exists $ENV{$_};
+    }
+}
 
 if ($action eq 'l') {
-    foreach $k (@ordered) {
-	print "$k=$env{$k}\n";
+    foreach (@ordered) {
+	print "$_=$env{$_}\n";
     }
 } elsif ($action eq 's') {
-    foreach $k (@ordered) {
-	print "$k=$env{$k}; ";
+    foreach (@ordered) {
+	print "$_=$env{$_}; ";
     }
     print "export ".join(" ",@ordered)."\n";
 } elsif ($action eq 'u') {
Index: scripts/dpkg-buildpackage.sh
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/scripts/dpkg-buildpackage.sh,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- scripts/dpkg-buildpackage.sh	25 May 2002 02:57:15 -0000	1.1.1.1
+++ scripts/dpkg-buildpackage.sh	23 Dec 2002 18:51:19 -0000	1.3
@@ -157,6 +157,12 @@
 pv="${package}_${sversion}"
 pva="${package}_${sversion}_${arch}"
 
+if [ "$arch" != "source" ]; then
+	if [ "$targetarch" ]; then
+		eval `dpkg-architecture -a${targetarch} -t${targetgnusystem} -s -r`
+	fi
+fi
+
 signfile () {
 	if test "$signinterface" = "gpg" ; then
 		(cat "../$1" ; echo "") | \
Index: scripts/dpkg-shlibdeps.pl
===================================================================
RCS file: /home/bastian/debian/cvs/dpkg/scripts/dpkg-shlibdeps.pl,v
retrieving revision 1.1.1.1
retrieving revision 1.5
diff -u -r1.1.1.1 -r1.5
--- scripts/dpkg-shlibdeps.pl	20 Jun 2001 16:30:15 -0000	1.1.1.1
+++ scripts/dpkg-shlibdeps.pl	23 Dec 2002 19:00:51 -0000	1.5
@@ -23,6 +23,13 @@
 push(@INC,$dpkglibdir);
 require 'controllib.pl';
 
+$cross = 0;
+
+if (defined $ENV{'DEB_BUILD_ARCH'} and defined $ENV{'DEB_HOST_ARCH'} and $ENV{'DEB_BUILD_ARCH'} ne $ENV{'DEB_HOST_ARCH'}) {
+    $cross = 1;
+    $cross_arch = $ENV{'DEB_HOST_GNU_TYPE'};
+}
+
 sub usageversion {
     print STDERR
 "Debian dpkg-shlibdeps $version.
@@ -97,14 +104,16 @@
     # First we get an ldd output to see what libs + paths we have at out
     # disposal.
     my %so2path = ();
-    defined($c= open(P,"-|")) || syserr("cannot fork for ldd");
-    if (!$c) { exec("ldd","--",$exec[$i]); syserr("cannot exec ldd"); }
-    while (<P>) {
-	if (m,^\s+(\S+)\s+=>\s+(\S+)\s+\(0x.+\)?$,) {
-	    $so2path{$1} = $2;
+    if (!$cross) {
+	defined($c= open(P,"-|")) || syserr("cannot fork for ldd");
+	if (!$c) { exec("ldd","--",$exec[$i]); syserr("cannot exec ldd"); }
+	while (<P>) {
+	    if (m,^\s+(\S+)\s+=>\s+(\S+)\s+\(0x.+\)?$,) {
+		$so2path{$1} = $2;
+	    }
 	}
+	close(P); $? && subprocerr("ldd on \`$exec[$i]'");
     }
-    close(P); $? && subprocerr("ldd on \`$exec[$i]'");
 
     # Now we get the direct deps of the program. We then check back with
     # the ldd output from above to see what our path is.
@@ -116,13 +125,25 @@
 	    if (m,^\s*NEEDED\s+((\S+)\.so\.(\S+))$,) {
 		push(@libname,$2); push(@libsoname,$3);
 		push(@libf,$execf[$i]);
-		&warn("could not find path for $1") unless defined($so2path{$1});
-		push(@libfiles,$so2path{$1});
+		if ($cross) {
+		    &warn("could not find path for $1") unless -f "/usr/".$cross_arch."/lib/".$1;
+		    push(@libfiles,"/usr/".$cross_arch."/lib/".$1);
+		}
+		else {
+		    &warn("could not find path for $1") unless defined($so2path{$1});
+		    push(@libfiles,$so2path{$1});
+		}
 	    } elsif (m,^\s*NEEDED\s+((\S+)-(\S+)\.so)$,) {
 		push(@libname,$2); push(@libsoname,$3);
 		push(@libf,$execf[$i]);
-		&warn("could not find path for $1") unless defined($so2path{$1});
-		push(@libfiles,$so2path{$1});
+		if ($cross) {
+		    &warn("could not find path for $1") unless -f "/usr/".$cross_arch."/lib/".$1;
+		    push(@libfiles,"/usr/".$cross_arch."/lib/".$1);
+		}
+		else {
+		    &warn("could not find path for $1") unless defined($so2path{$1});
+		    push(@libfiles,$so2path{$1});
+		}
 	    } else {
 		m,^\s*NEEDED\s+(\S+)$,;
 		&warn("format of $1 not recognized");

Attachment: pgp3NsaJx4sEU.pgp
Description: PGP signature


Reply to: