Hi!

Here's my proposed patch to implement --setup-hook, which exports the build
settings, as well as the build Config into the environment.

-Kees

-- 
Kees Cook                                            @debian.org
--- sbuild-0.58.2.orig/bin/sbuild
+++ sbuild-0.58.2/bin/sbuild
@@ -213,6 +213,25 @@
 	    goto cleanup_close;
 	}
 
+	# Setup command
+	if ($conf->get('SETUP_HOOK')) {
+            my $pipe = $session->pipe_command({
+		COMMAND => [$conf->get('SETUP_HOOK')],
+		ENV => $build->get_env('SBUILD_BUILD_'),
+		USER => "root",
+		PRIORITY => 0,
+		CHROOT => 1 });
+	    while(<$pipe>) {
+		$build->log($_);
+	    }
+	    close($pipe);
+	    if ($?) {
+		$build->log("setup-hook failed\n");
+		$build->set('Pkg Status', 'skipped');
+		goto cleanup_packages;
+	    }
+	}
+
 	$build->set('Pkg Fail Stage', 'install-deps');
 	if (!$build->install_deps()) {
 	    $build->log("Source-dependencies not satisfied; skipping " .
only in patch2:
unchanged:
--- sbuild-0.58.2.orig/lib/Sbuild/Options.pm
+++ sbuild-0.58.2/lib/Sbuild/Options.pm
@@ -157,6 +157,9 @@
 		       "stats-dir=s" => sub {
 			   $self->set_conf('STATS_DIR', $_[1]);
 		       },
+		       "setup-hook=s" => sub {
+			   $self->set_conf('SETUP_HOOK', $_[1]);
+		       },
 		       "use-snapshot" => sub {
 			   $self->set_conf('GCC_SNAPSHOT', 1);
 			   $self->set_conf('LD_LIBRARY_PATH',
only in patch2:
unchanged:
--- sbuild-0.58.2.orig/lib/Sbuild/Conf.pm
+++ sbuild-0.58.2/lib/Sbuild/Conf.pm
@@ -298,6 +298,9 @@
 	'SBUILD_MODE'				=> {
 	    DEFAULT => 'user'
 	},
+	'SETUP_HOOK'				=> {
+	    DEFAULT => undef
+	},
 	'FORCE_ORIG_SOURCE'			=> {
 	    DEFAULT => 0
 	},
@@ -471,6 +474,7 @@
     our $sbuild_mode = undef;
     our $debug = undef;
     our $force_orig_source = undef;
+    our $setup_hook = undef;
     our %individual_stalled_pkg_timeout;
     undef %individual_stalled_pkg_timeout;
     our $path = undef;
@@ -537,6 +541,7 @@
     $self->set('CHROOT_SPLIT', $chroot_split);
     $self->set('SBUILD_MODE', $sbuild_mode);
     $self->set('FORCE_ORIG_SOURCE', $force_orig_source);
+    $self->set('SETUP_HOOK', $setup_hook);
     $self->set('INDIVIDUAL_STALLED_PKG_TIMEOUT',
 	       \%individual_stalled_pkg_timeout);
     $self->set('PATH', $path);
only in patch2:
unchanged:
--- sbuild-0.58.2.orig/lib/Sbuild/Base.pm
+++ sbuild-0.58.2/lib/Sbuild/Base.pm
@@ -66,6 +66,30 @@
     return $self->get('Config')->get($key);
 }
 
+# Produce a hash suitable for ENV export
+sub get_env ($$) {
+    my $self = shift;
+    my $prefix = shift;
+
+    sub _env_loop ($$$$) {
+        my ($env,$ref,$keysref,$prefix) = @_;
+
+        foreach my $key (keys( %{ $keysref } )) {
+            my $value = $ref->get($key);
+            next if (!defined($value));
+            next if (ref($value));
+            my $name = "${prefix}${key}";
+            $name =~ s/ /_/g;
+            $env->{$name} = $value;
+        }
+    }
+
+    my $envlist = {};
+    _env_loop($envlist, $self, $self, $prefix);
+    _env_loop($envlist, $self->get('Config'), $self->get('Config')->{'KEYS'}, "${prefix}CONF_");
+    return $envlist;
+}
+
 sub set_conf {
     my $self = shift;
     my $key = shift;

Reply via email to