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

Re: dpkg-checkbuilddeps ready for first impressions and future development



> 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


Reply to: