-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Wed, 19 Dec 2007, Roger Leigh wrote:

> Michael Banck <[EMAIL PROTECTED]> writes:
>
> > On Wed, Dec 19, 2007 at 08:10:37AM +0100, Jan-Marek Glogowski wrote:
> >> > Isn't it usual sbuild behaviour to only try the first package of a set
> >> > of alternatives?
> >>
> >> Currently yes, but I consider this a bug. The patched code already runs
> >> in a loop to check for all alternatives, but it currently fails, if it
> >> can't satisfy a versioned dependency.
> >
> > Maybe this is a divergence of the sbuild package from upstream sbuild
> > then.  Fact is that the buildds will show this behaviour, so I am not
> > sure changing it in the sbuild package is the best solution.
>

...

> However, I wouldn't be opposed to adding a command-line and/or
> configuration option which would allow the user to alter this, so long
> as it is not the default behaviour.  Adding a variable to
> Sbuild/Conf.pm is pretty easy, as is a new command-line option.  If
> you would like to make a patch for that, that would be super.

Ok - I have attached a new patch to make the dependeny check algorith
select and configureable. Default is the old behaviour, but it can be
changed to check for alternatives via sbuild argument (-C) or by changing
check_depends_algorithm in the SBUILD BEHAVIOUR config group.

Tested with the bzr-svn package, which still fails with default, but
finishes with the alternatives algorithm.

Jan-Marek
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFHa4ftj6MK58wZA3cRAjI9AJ9HFuarByB6ia8+TmGtA1HORTprrwCfTJkw
zkXece2T+Thtk1QQwkO8BoU=
=aSRQ
-----END PGP SIGNATURE-----
diff --git a/Sbuild/Conf.pm b/Sbuild/Conf.pm
index 7413bc5..9bb58d1 100644
--- a/Sbuild/Conf.pm
+++ b/Sbuild/Conf.pm
@@ -127,6 +127,7 @@ our %alternatives = ("info-browser"         => "info",
                     "freetype2-dev"            => "libttf-dev");
 
 our @no_auto_upgrade = qw(dpkg apt bash libc6 libc6-dev dpkg-dev);
+our $check_depends_algorithm = "first_only";
 
 # read conf files
 require "/etc/sbuild/sbuild.conf" if -r "/etc/sbuild/sbuild.conf";
diff --git a/debian/changelog b/debian/changelog
index c626aaa..186fbea 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,11 @@ sbuild (0.57) unstable; urgency=low
     - Add additional syntax checks.  Thanks to Jan-Marek Glogowski.
     - filter_dependencies: Remove redundant conditional.  Thanks to
       Jan-Marek Glogowski.
+    - Add --check-depends-algorithm to select the algorithm to check the build
+      dependencies. Also adds the config option $check_depends_algorithm to
+      change this in your sbuild configuration. Thanks to Jan-Marek Glogowski.
+    - Cleanup sbuild.conf and example.sbuildrc to declare valid variables when
+      uncommented. Thanks to Jan-Marek Glogowski.
 
  -- Roger Leigh <[EMAIL PROTECTED]>  Sun, 02 Dec 2007 15:03:04 +0000
 
diff --git a/example.sbuildrc b/example.sbuildrc
index 6e64499..9f42a2f 100644
--- a/example.sbuildrc
+++ b/example.sbuildrc
@@ -64,11 +64,11 @@
 
 # Time (in minutes) of inactivity after which a build is terminated. Activity
 # is measured by output to the log file.
-#stalled_pkg_timeout = 150;
+#$stalled_pkg_timeout = 150;
 
 # Some packages may exceed the general timeout (e.g. redirecting output to
 # a file) and need a different timeout. Below are some examples.
-#individual_stalled_pkg_timeout = (smalleiffel => 300,
[EMAIL PROTECTED] = (smalleiffel => 300,
 #                                 jade => 300,
 #                                 atlas => 300,
 #                                 glibc => 1000,
diff --git a/sbuild b/sbuild
index e9c32e3..7d7ebb5 100755
--- a/sbuild
+++ b/sbuild
@@ -117,6 +117,12 @@ exit 1 if !GetOptions ("arch=s" => \$main::user_arch,
                       "a|add-depends=s" => sub {
                           push( @main::manual_srcdeps, "a".$_[1] );
                       },
+                      "C|check-depends-algorithm=s" => sub {
+                          die "Bad build dependency check alorithm\n"
+                               if( ! ($_[1] eq "first_only" 
+                                   || $_[1] eq "alternatives") );
+                          $conf::check_depends_algorithm = $_[1];
+                      },
                       "b|batch" => \$main::batchmode,
                       "make-binNMU=s" => sub {
                           $main::binNMU = $_[1];
@@ -1331,6 +1337,7 @@ sub filter_dependencies {
                        }
                        if(!$installable) {
                            print PLOG "no suitable version found. Skipping for 
now, maybe there are alternatives.\n";
+                           next if ($conf::check_depends_algorithm eq 
"alternatives");
                        }
                    } else {
                        print PLOG "Using default version " . 
$policy{$name}->{defversion} . "\n";
diff --git a/sbuild.1.in b/sbuild.1.in
index 7ed2fcc..8e8d023 100644
--- a/sbuild.1.in
+++ b/sbuild.1.in
@@ -94,6 +94,12 @@ instead of \-B.
 Operate in batchmode, i.e. write a build-progress file during execution
 and files on shutdown to facilitate a clean restart.
 .TP
+.IR \-C , "\-\-check\-depends\-algorithm=<algorithm>"
+Selects the algorithm to check for build dependencies. The default algorithm 
+(\fIfirst_only\fP) just checks the first package, even if there are alternative
+dependencies available. The second algorithm (\fIalternatives\fP) also tries to
+satisfy the build dependencies using these alternatives.
+.TP
 .IR \-d , "\-\-distribution=<distribution>"
 Fetch source packages from specified distribution.
 .TP
diff --git a/sbuild.conf b/sbuild.conf
index 20cc489..6b5c8ee 100644
--- a/sbuild.conf
+++ b/sbuild.conf
@@ -24,10 +24,9 @@
 
 # Mail address where logs are sent to (mandatory, no default)
 #$mailto = "frankie";
-#$mailto = "";
 
 # Name of log sender
-#mailfrom = "Source Builder <sbuild>";
+#$mailfrom = "Source Builder <sbuild>";
 
 
 ##
@@ -96,16 +95,16 @@
 #
 # Most buildds run with clean chroots at the moment, so the default
 #list is now empty.
-#watches = ();
[EMAIL PROTECTED] = ();
 
 # Ignore watches on the following packages if the package doesn't have its own
 # build dependencies in the .dsc
-#ignore_watches_no_build_deps = qw();
[EMAIL PROTECTED] = qw();
 
 # If a source dependency is an alternative that is provided by more than one
 # package, this list can select which one will be installed (if nothing is
 # defined, a random provider will be used)
-#alternatives = ("info-browser"                        => "info",
[EMAIL PROTECTED] = ("info-browser"                     => "info",
 #               "httpd"                        => "apache",
 #               "postscript-viewer"            => "ghostview",
 #               "postscript-preview"           => "psutils",
@@ -135,11 +134,14 @@
 #               "freetype2-dev"                => "libttf-dev");
 
 # Packages which should not be upgraded automatically.
-#no_auto_upgrade = qw(dpkg apt bash libc6 libc6-dev dpkg-dev);
[EMAIL PROTECTED] = qw(dpkg apt bash libc6 libc6-dev dpkg-dev);
 
 # Regular expressions identifying toolchain packages.
 [EMAIL PROTECTED] = ( 'binutils$', 'gcc-[\d.]+$', 'g\+\+-[\d.]+$', 
'libstdc\+\+', 'libc[\d.]+-dev$', 'linux-kernel-headers$' );
 
+# Change algorithm for build dependency checks: possible values are 
+# "first_only" or "alternatives". Default: "first_only".
+#$check_depends_algorithm = "first_only";
 
 ##
 ## TIMEOUTS
@@ -150,11 +152,11 @@
 
 # Time (in minutes) of inactivity after which a build is terminated. Activity
 # is measured by output to the log file.
-#stalled_pkg_timeout = 150;
+#$stalled_pkg_timeout = 150;
 
 # Some packages may exceed the general timeout (e.g. redirecting output to
 # a file) and need a different timeout. Below are some examples.
-#individual_stalled_pkg_timeout = (smalleiffel => 300,
[EMAIL PROTECTED] = (smalleiffel => 300,
 #                                 jade => 300,
 #                                 atlas => 300,
 #                                 glibc => 1000,
@@ -193,7 +195,7 @@
 ##
 
 # Program to mail log files.
-#mailprog = "/usr/sbin/sendmail";
+#$mailprog = "/usr/sbin/sendmail";
 # dpkg binary.
 #$dpkg = "/usr/bin/dpkg";
 # su binary.

Reply via email to