diff options
Diffstat (limited to 'lib/Buildd/ClientConf.pm')
-rw-r--r-- | lib/Buildd/ClientConf.pm | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/lib/Buildd/ClientConf.pm b/lib/Buildd/ClientConf.pm new file mode 100644 index 0000000..e38eb7c --- /dev/null +++ b/lib/Buildd/ClientConf.pm @@ -0,0 +1,177 @@ +# +# ClientConf.pm: configuration library for wanna-build clients +# Copyright © 1998 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de> +# Copyright © 2005 Ryan Murray <rmurray@debian.org> +# Copyright © 2006-2009 Roger Leigh <rleigh@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, see +# <http://www.gnu.org/licenses/>. +# +####################################################################### + +package Buildd::ClientConf; + +use strict; +use warnings; + +use Sbuild::Sysconfig; +use File::Spec; + +BEGIN { + use Exporter (); + our (@ISA, @EXPORT); + + @ISA = qw(Exporter); + + @EXPORT = qw(setup); +} + +sub setup ($) { + my $conf = shift; + + my $validate_program = sub { + my $conf = shift; + my $entry = shift; + my $key = $entry->{'NAME'}; + my $program = $conf->get($key); + + die "$key binary is not defined" + if !defined($program) || !$program; + + # Emulate execvp behaviour by searching the binary in the PATH. + my @paths = split(/:/, $ENV{'PATH'}); + # Also consider the empty path for absolute locations. + push (@paths, ''); + my $found = 0; + foreach my $path (@paths) { + $found = 1 if (-x File::Spec->catfile($path, $program)); + } + + die "$key binary '$program' does not exist or is not executable" + if !$found; + }; + + my $validate_ssh = sub { + my $conf = shift; + my $entry = shift; + +# TODO: Provide self, config and entry contexts, which functions to +# get at needed data. Provide generic configuration functions. +# + $validate_program->($conf, $conf->{'KEYS'}->{'SSH'}); + + my $ssh = $conf->get('SSH'); + my $sshuser = $conf->get('WANNA_BUILD_SSH_USER'); + my $sshhost = $conf->get('WANNA_BUILD_SSH_HOST'); + my @sshoptions = @{$conf->get('WANNA_BUILD_SSH_OPTIONS')}; + my $sshsocket = $conf->get('WANNA_BUILD_SSH_SOCKET'); + + my @command = (); + + if ($sshhost) { + push (@command, $ssh); + push (@command, '-l', $sshuser) if $sshuser; + push (@command, '-S', $sshsocket) if $sshsocket; + push (@command, @sshoptions) if @sshoptions; + push (@command, $sshhost); + } + + $conf->set('WANNA_BUILD_SSH_CMD', \@command); + }; + + our $HOME = $conf->get('HOME'); + my $arch = $conf->get('ARCH'); + + my %db_keys = ( + 'SSH' => { + TYPE => 'STRING', + VARNAME => 'ssh', + GROUP => 'Programs', + DEFAULT => 'ssh', + CHECK => $validate_ssh, + HELP => 'Path to ssh binary' + }, + 'WANNA_BUILD_SSH_CMD' => { + TYPE => 'STRING', + GROUP => '__INTERNAL', + DEFAULT => '', + HELP => 'Command to run wanna-build (set automatically from the other wanna-build options)' + }, + 'WANNA_BUILD_SSH_USER' => { + TYPE => 'STRING', + VARNAME => 'wanna_build_ssh_user', + GROUP => 'wanna-build client', + DEFAULT => '', + CHECK => $validate_ssh, + HELP => 'Username for SSH connection' + }, + 'WANNA_BUILD_SSH_HOST' => { + TYPE => 'STRING', + VARNAME => 'wanna_build_ssh_host', + GROUP => 'wanna-build client', + DEFAULT => '', + CHECK => $validate_ssh, + HELP => 'Host for SSH connection' + }, + 'WANNA_BUILD_SSH_SOCKET' => { + TYPE => 'STRING', + VARNAME => 'wanna_build_ssh_socket', + GROUP => 'wanna-build client', + DEFAULT => '', + CHECK => $validate_ssh, + HELP => 'Socket for SSH connection' + }, + 'WANNA_BUILD_SSH_OPTIONS' => { + TYPE => 'ARRAY:STRING', + VARNAME => 'wanna_build_ssh_options', + GROUP => 'wanna-build client', + DEFAULT => [], + CHECK => $validate_ssh, + HELP => 'SSH options. Note this is an array reference.' + }, + 'WANNA_BUILD_DB_NAME' => { + TYPE => 'STRING', + VARNAME => 'wanna_build_db_name', + GROUP => 'wanna-build client', + DEFAULT => undef, + HELP => 'Database name' + }, + 'WANNA_BUILD_DB_USER' => { + TYPE => 'STRING', + VARNAME => 'wanna_build_db_user', + GROUP => 'wanna-build client', + DEFAULT => $conf->get('USERNAME'), + # arch:all packages must not differ depending on which user is + # building the source package, so don't show the default for + # example config and man page generation + IGNORE_DEFAULT => 1, + HELP => 'Database user' + }, + 'BUILT_ARCHITECTURE' => { + TYPE => 'STRING', + VARNAME => 'wanna_build_built_architecture', + GROUP => 'wanna-build client', + DEFAULT => $arch, + # the $native_arch is different depending on the machine where + # sbuild is built but arch:all packages must not differ depending on + # the architecture they are built on, so don't show the default for + # example config and man page generation + IGNORE_DEFAULT => 1, + HELP => 'Architecture for database' + }); + + $conf->set_allowed_keys(\%db_keys); +} + +1; |