> You forgot patch itself :) Every time I say, do not forget to attach the file, the file do not forget to do it but... >}8| -- Raphael Bossek
diff --exclude=CVS -Nru dpkg-cross.cvs/ChangeLog dpkg-cross-1.20.4.checkbuilddeps.1/ChangeLog
--- dpkg-cross.cvs/ChangeLog 2004-12-03 22:42:55.000000000 +0100
+++ dpkg-cross-1.20.4.checkbuilddeps.1/ChangeLog 2004-12-15 10:59:00.000000000 +0100
@@ -1,3 +1,22 @@
+2004-12-14 Raphael Bossek <bossekr@debian.org>
+
+ * dpkg-cross, dpkg-cross.pl: moved rewrite_dependencies(),
+ rewrite_alternatives() and rewrite_item() to dpkg-cross.pl for reusage in
+ dpkg-checkbuilddeps. rewrite_item() rename only packages that are in
+ section libdevel or libs or are listed in "crossdeps" configuration
+ variable. Set DPKGCROSSARCH environment variable so dpkg-checkbuilddeps
+ know to run in dpkg-cross environment. Fixed issue where @keepdeps and
+ @removedeps are are not set as arrays. Introduced the "checkbuilddeps"
+ configuration variable which should be set to 1 if dpkg-checkbuilddeps
+ support is designated. ARCH is set but not used to determine if we are
+ wihtin a dpkg-cross envrionment. DPKGCROSSARCH was introduced to avoid
+ interferences with the "unset" feature and packages which uses ARCH for
+ its own purposes.
+ * dpkg-checkbuilddeps: support for Build-* information in debian/control
+ in sence of dpkg-cross and cross-build environments added.
+ * cross-compile.example: added "crossdeps" and "checkbuilddeps"
+ documentation.
+
2004-12-03 Nikita V. Youshchenko <yoush@cs.msu.su>
* dpkg-cross.pl: implemented 'unset' feature for configuration file.
diff --exclude=CVS -Nru dpkg-cross.cvs/cross-compile.example dpkg-cross-1.20.4.checkbuilddeps.1/cross-compile.example
--- dpkg-cross.cvs/cross-compile.example 2004-12-03 22:42:55.000000000 +0100
+++ dpkg-cross-1.20.4.checkbuilddeps.1/cross-compile.example 2004-12-15 10:43:10.000000000 +0100
@@ -31,6 +31,13 @@
# keepdeps : comma-separated list of package names thet should be kept
# in depends/conflicts/etc fields as is, without adding
# -arch-cross.
+# crossdeps : comma-seperated list of package names that have to be
+# extended with -arch-cross. This is required because only
+# packages which belongs to sections libdevel and libs are
+# renamed by default.
+# checkbuilddeps : By default the Build-* dependencies are not validated
+# by the dpkg-cross tool chain. You have to set checkbuilddeps
+# to 1 if you intent to check Build-* dependencies.
#
# Usually, you need only set crossbase, or maybe also crossdir
#
diff --exclude=CVS -Nru dpkg-cross.cvs/debian/changelog dpkg-cross-1.20.4.checkbuilddeps.1/debian/changelog
--- dpkg-cross.cvs/debian/changelog 2004-12-03 22:42:55.000000000 +0100
+++ dpkg-cross-1.20.4.checkbuilddeps.1/debian/changelog 2004-12-15 11:08:05.000000000 +0100
@@ -1,3 +1,9 @@
+dpkg-cross (1.20.4.checkbuilddeps.1) unstable; urgency=low
+
+ * Added support for dpkg-checkbuilddeps.
+
+ -- Raphael Bossek <bossekr@debian.org> Sun, 12 Dec 2004 17:32:26 +0100
+
dpkg-cross (1.20.4) unstable; urgency=low
* Implemented 'unset' feature for configuration file (Closes: #246061).
diff --exclude=CVS -Nru dpkg-cross.cvs/debian/control dpkg-cross-1.20.4.checkbuilddeps.1/debian/control
--- dpkg-cross.cvs/debian/control 2004-10-29 23:13:19.000000000 +0200
+++ dpkg-cross-1.20.4.checkbuilddeps.1/debian/control 2004-12-14 10:23:35.000000000 +0100
@@ -7,7 +7,7 @@
Package: dpkg-cross
Architecture: all
-Depends: dpkg-dev (>= 1.9.21), binutils, file
+Depends: dpkg-dev (>= 1.9.21), binutils, file, libapt-pkg-perl
Suggests: binutils-multiarch, fakeroot
Conflicts: pkg-config (<< 0.15.0)
Description: Tools for cross compiling Debian packages
diff --exclude=CVS -Nru dpkg-cross.cvs/debian/postrm dpkg-cross-1.20.4.checkbuilddeps.1/debian/postrm
--- dpkg-cross.cvs/debian/postrm 2004-08-25 03:11:14.000000000 +0200
+++ dpkg-cross-1.20.4.checkbuilddeps.1/debian/postrm 2004-12-14 10:43:07.000000000 +0100
@@ -27,6 +27,10 @@
dpkg-divert --package dpkg-cross --remove --rename \
--divert /usr/bin/dpkg-shlibdeps.orig \
/usr/bin/dpkg-shlibdeps
+
+ dpkg-divert --package dpkg-cross --remove --rename \
+ --divert /usr/bin/dpkg-checkbuilddeps.orig \
+ /usr/bin/dpkg-checkbuilddeps
;;
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
diff --exclude=CVS -Nru dpkg-cross.cvs/debian/preinst dpkg-cross-1.20.4.checkbuilddeps.1/debian/preinst
--- dpkg-cross.cvs/debian/preinst 2004-08-25 03:11:14.000000000 +0200
+++ dpkg-cross-1.20.4.checkbuilddeps.1/debian/preinst 2004-12-12 17:35:12.000000000 +0100
@@ -22,6 +22,9 @@
dpkg-divert --package dpkg-cross --add --rename \
--divert /usr/bin/dpkg-shlibdeps.orig /usr/bin/dpkg-shlibdeps
+
+ dpkg-divert --package dpkg-cross --add --rename \
+ --divert /usr/bin/dpkg-checkbuilddeps.orig /usr/bin/dpkg-checkbuilddeps
;;
abort-upgrade)
diff --exclude=CVS -Nru dpkg-cross.cvs/dpkg-buildpackage dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-buildpackage
--- dpkg-cross.cvs/dpkg-buildpackage 2004-11-15 22:22:38.000000000 +0100
+++ dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-buildpackage 2004-12-15 12:06:19.427003727 +0100
@@ -114,6 +114,13 @@
}
}
$ENV{'PATH'} = "$gccrossdir:" . $ENV{'PATH'};
+
+ if ($checkbuilddeps != 0) {
+ # Force dpkg-buildpackage.orig to use dpkg-checkbuilddeps by adding -D at
+ # the end of the command line parameters. It is important to set -D as
+ # last because other parameters override this setting, e.g. -a.
+ push (@ADD_ARGS, "-D");
+ }
}
# If exactly one .changes file for the current package exists in the parent
diff --exclude=CVS -Nru dpkg-cross.cvs/dpkg-checkbuilddeps dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-checkbuilddeps
--- dpkg-cross.cvs/dpkg-checkbuilddeps 1970-01-01 01:00:00.000000000 +0100
+++ dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-checkbuilddeps 2004-12-15 12:07:17.785293612 +0100
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+#
+# dpkg-checkbuilddeps - Support for dpkg-cross build packages
+# Copyright (C) 2004 Raphael Bossek <bossekr@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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# $Id$
+
+require "dpkg-cross.pl";
+
+dpkgcross_application();
+
+read_config();
+setup();
+
+# Where to find the debian/control file. This can be changed by dpkg-checkbuilddeps
+# option.
+$debian_control_file = "debian/control";
+$tmp_control_file = "";
+@new_argv = ();
+
+# We search the options for an alternative debian/control file.
+foreach $arg (@ARGV) {
+ if ($arg =~ /^-/) {
+ push (@new_argv, $arg);
+ }
+ else {
+ $debian_control_file = $arg;
+ }
+}
+
+# Recreate the $debian_control_file file with new package names.
+if (-f $debian_control_file) {
+ $tmp_control_file = `tempfile`;
+ open (OUTF, ">$tmp_control_file") || die "Cannot open $tmp_control_file for writting: $!\n";
+ open (INF, "<$debian_control_file") || die "Cannot open $debian_control_file for reading: $!\n";
+ while (<INF>) {
+ chomp;
+ if (/^(Build-\S+):\s+(.*)/) {
+ print OUTF "$1: " . rewrite_dependencies ($2) . "\n";
+ }
+ else {
+ print OUTF "$_\n";
+ }
+ }
+ close (INF);
+ close (OUTF);
+
+ $debian_control_file = $tmp_control_file;
+}
+push (@new_argv, $debian_control_file);
+
+$rv = system ("/usr/bin/dpkg-checkbuilddeps.orig", @new_argv) >> 8;
+
+if ($debian_control_file eq $tmp_control_file) {
+ unlink ($tmp_control_file);
+}
+
+exit $rv;
diff --exclude=CVS -Nru dpkg-cross.cvs/dpkg-cross dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-cross
--- dpkg-cross.cvs/dpkg-cross 2004-08-26 21:51:12.000000000 +0200
+++ dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-cross 2004-12-12 17:09:03.000000000 +0100
@@ -850,37 +850,3 @@
return $? == 0;
}
-sub rewrite_dependencies {
- my $str = shift;
-
- @list = map( rewrite_alternatives($_), split( /\s*,\s*/, $str));
- # remove empty elements
- @list = map { $_ ? ( $_ ) : () } @list;
- return join(", ", @list );
-}
-
-sub rewrite_alternatives {
- my $str = shift;
-
- @list = map( rewrite_item($_), split( /\s*\|\s*/, $str ));
- # if any of the alternatives became empty (because of @removedeps),
- # the complete dependency should be removed
- my @list = ();
- for my $item (split( /\s*\|\s*/, $str )) {
- $item = rewrite_item($item);
- return () if not $item;
- push @list, $item
- }
- return join( " | ", @list );
-}
-
-sub rewrite_item {
- my $str = shift;
-
- $str =~ /^([^ (]+)/;
- return () if grep { $_ eq $1 } @removedeps;
- return $str if grep { $_ eq $1 } @keepdeps;
- $str =~ s/^([^ (]+)/$1-$arch-cross/;
- return $str;
-}
-
diff --exclude=CVS -Nru dpkg-cross.cvs/dpkg-cross.pl dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-cross.pl
--- dpkg-cross.cvs/dpkg-cross.pl 2004-12-03 22:42:55.000000000 +0100
+++ dpkg-cross-1.20.4.checkbuilddeps.1/dpkg-cross.pl 2004-12-15 12:09:44.756134430 +0100
@@ -19,6 +19,10 @@
#
# $Id: dpkg-cross.pl,v 1.20 2004/12/03 21:42:55 yoush-guest Exp $
+# Use the libapt-pkg-perl module for simply and detailed retival of package
+# informations. This information is used for package name conversion.
+use AptPkg::Cache;
+
# Determine if the system wide or user defined cross-compile configuration
# have to be read.
$conffile = "/etc/dpkg/cross-compile";
@@ -31,7 +35,8 @@
# List of variables which can be overriden by the cross-compile
# definitions.
@intern_vars = qw( crossbase crossprefix crossdir crossbin crosslib crosslib64 crossinc
- crossinfo maintainer default_arch removedeps keepdeps compilerpath );
+ crossinfo maintainer default_arch removedeps keepdeps compilerpath
+ crossdeps checkbuilddeps );
# Avoid warnings about unused @intern_vars variables.
foreach my $var_ ( @intern_vars ) {
eval( "\$$var_ = ''" );
@@ -162,6 +167,11 @@
$current_mode_ ||= "default";
+ # The dpkg-checkbuilddeps feature is disabled by default. You have to
+ # enable it by setting the configuration variable ``checkbuilddeps''
+ # to 1.
+ $checkbuilddeps = 0;
+
open (F, "<$conffile") || return;
while (<F>) {
chomp;
@@ -232,10 +242,9 @@
# Returns the current architecture.
# return: Current architecture or empty if not set.
sub get_architecture {
- return $ENV{'ARCH'} || $arch || $default_arch;
+ return $ENV{'DPKGCROSSARCH'} || $arch || $default_arch;
}
-
################################################################################
# setup():
# Set global variables ``$arch'', ``$arch_cpu'', ``$arch_os'',
@@ -298,6 +307,12 @@
subst (\$pkgvars{$scope_}{$var_}, $var_, @vars_);
}
}
+
+ # For easier use we convert ``removedeps'', ``keepdeps'' and ``crossdeps''
+ # to an array of package names.
+ @removedeps = split (/[\s,]+/, $removedeps);
+ @keepdeps = split (/[\s,]+/, $keepdeps);
+ @crossdeps = split (/[\s,]+/, $crossdeps);
}
################################################################################
@@ -456,6 +471,9 @@
# Put ``$arch'' into environment through MAKEFLAGS.
$makeflags_{'ARCH'} = $arch;
+ # Save ``$arch'' also as environment for dpkg-cross applications which
+ # are not called via Makefile (e.g. dpkg-checkbuilddeps).
+ $ENV{'DPKGCROSSARCH'} = $arch;
# Also set new `dpkg-architecture' environment veriables.
chomp ($tmp_ = `dpkg-architecture -a$arch -qDEB_HOST_ARCH 2>/dev/null`);
@@ -540,7 +558,7 @@
# return: none
sub dpkgcross_application {
exec "$0.orig", @ARGV
- unless (($arch = $ENV{'ARCH'}) && $ENV{'MAKEFLAGS'} =~ /\bCC=/) ||
+ unless (($arch = $ENV{'DPKGCROSSARCH'}) && $ENV{'MAKEFLAGS'} =~ /\bCC=/) ||
$arch =~ /^hurd-/;
}
@@ -601,4 +619,99 @@
return $path
}
+################################################################################
+# rewrite_dependencies():
+# Convert package names for a cross-compiler environment in the same
+# manner as dpkg-cross does. This function support packages divided by a
+# , (comma).
+# By default only packages belongs to section libdevel or libs are
+# converted. The package names will also be converted if section can
+# not be determined.
+# $1: Packages to rewrite in sence of dpkg-cross naming.
+# return: Converted package names.
+sub rewrite_dependencies {
+ my $str_ = shift;
+
+ my @list_ = map( rewrite_alternatives($_), split( /\s*,\s*/, $str_));
+ # remove empty elements
+ @list = map { $_ ? ( $_ ) : () } @list_;
+ return join(", ", @list_);
+}
+
+################################################################################
+# rewrite_alternatives():
+# Convert package names for a cross-compiler environment in the same
+# manner as dpkg-cross does. This function support packages divided
+# by a | (vertical bar).
+# By default only packages belongs to section libdevel or libs are
+# converted. The package names will also be converted if section can
+# not be determined.
+# $1: Packages to rewrite in sence of dpkg-cross naming.
+# return: Converted package names.
+sub rewrite_alternatives {
+ my $str_ = shift;
+
+ my @list_ = map( rewrite_item($_), split( /\s*\|\s*/, $str_ ));
+ # if any of the alternatives became empty (because of @removedeps),
+ # the complete dependency should be removed
+ my @list_ = ();
+ for my $item_ (split( /\s*\|\s*/, $str_ )) {
+ $item_ = rewrite_item($item_);
+ return () if not $item_;
+ push @list_, $item_;
+ }
+ return join( " | ", @list_ );
+}
+
+################################################################################
+# rewrite_alternatives():
+# Convert package names for a cross-compiler environment in the same
+# manner as dpkg-cross does.
+# By default only packages belongs to section libdevel or libs are
+# converted. The package names will also be converted if section can
+# not be determined.
+# $1: Packages to rewrite in sence of dpkg-cross naming.
+# return: Converted package names.
+sub rewrite_item {
+ my $str_ = shift;
+
+ $str_ =~ /^([^ (]+)/;
+ return () if grep { $_ eq $1 } @removedeps;
+ return $str_ if grep { $_ eq $1 } @keepdeps;
+
+ my $section_ = "";
+ if ($checkbuilddeps != 0 and not grep { $_ eq $1 } @crossdeps) {
+ $section_ = determine_package_section ($1);
+ }
+ # Maybe package not available for host architecture or package
+ # db is not uptodate. We assume old behaviour if $section_ is empty.
+ if ($section_ eq "" or $section_ eq "libdevel" or $section_ eq "libs") {
+ $str_ =~ s/^([^ (]+)/$1-$arch-cross/;
+ }
+ return $str_;
+}
+
+################################################################################
+# determine_package_section():
+# Determine section of a package based on the dpkg databse.
+# $1: Package to determine the section for.
+# return: Section name for the package or an empty string if the package could
+# not be found.
+sub determine_package_section {
+ my $pkg_ = shift;
+ if (not $aptpkg_cache) {
+ $aptpkg_cache = AptPkg::Cache->new;
+ }
+ my $data_ = $aptpkg_cache->{$pkg_};
+ my $section_;
+
+ if ($data_) {
+ $section_ = $data_->{"Section"};
+ }
+ else {
+ $section_ = "";
+ }
+ return $section_;
+}
+
1;
diff --exclude=CVS -Nru dpkg-cross.cvs/Makefile dpkg-cross-1.20.4.checkbuilddeps.1/Makefile
--- dpkg-cross.cvs/Makefile 2004-10-29 22:41:55.000000000 +0200
+++ dpkg-cross-1.20.4.checkbuilddeps.1/Makefile 2004-12-12 17:39:17.000000000 +0100
@@ -18,7 +18,7 @@
#
# $Id: Makefile,v 1.11 2004/10/29 20:41:55 yoush-guest Exp $
-SCRIPTS = dpkg-cross dpkg-buildpackage dpkg-shlibdeps gccross
+SCRIPTS = dpkg-cross dpkg-buildpackage dpkg-shlibdeps gccross dpkg-checkbuilddeps
SHARESCRIPTS = strip
CONFFILES = $(shell ls -1 cross-config.*) crosstools
MAN1 = dpkg-cross.1 gccross.1
Attachment:
pgp79al_JufwG.pgp
Description: PGP signature