EVERYTHING FROM THE OTHER REPO
This commit is contained in:
@@ -0,0 +1,301 @@
|
||||
#!/usr/bin/perl
|
||||
# This file was preprocessed, do not edit!
|
||||
|
||||
|
||||
package Debconf::Config;
|
||||
use warnings;
|
||||
use strict;
|
||||
use Debconf::Question;
|
||||
use Debconf::Gettext;
|
||||
use Debconf::Priority qw(priority_valid priority_list);
|
||||
use Debconf::Log qw(warn);
|
||||
use Debconf::Db;
|
||||
|
||||
use fields qw(config templates frontend frontend_forced priority terse reshow
|
||||
admin_email log debug nowarnings smileys sigils
|
||||
noninteractive_seen c_values);
|
||||
our $config=fields::new('Debconf::Config');
|
||||
|
||||
our @config_files=("/etc/debconf.conf", "/usr/share/debconf/debconf.conf");
|
||||
if ($ENV{DEBCONF_SYSTEMRC}) {
|
||||
unshift @config_files, $ENV{DEBCONF_SYSTEMRC};
|
||||
} else {
|
||||
unshift @config_files, ((getpwuid($>))[7])."/.debconfrc";
|
||||
}
|
||||
|
||||
|
||||
sub _hashify ($$) {
|
||||
my $text=shift;
|
||||
my $hash=shift;
|
||||
|
||||
$text =~ s/\$\{([^}]+)\}/$ENV{$1}/eg;
|
||||
|
||||
my %ret;
|
||||
my $i;
|
||||
foreach my $line (split /\n/, $text) {
|
||||
next if $line=~/^\s*#/; # comment
|
||||
next if $line=~/^\s*$/; # blank
|
||||
$line=~s/^\s+//;
|
||||
$line=~s/\s+$//;
|
||||
$i++;
|
||||
my ($key, $value)=split(/\s*:\s*/, $line, 2);
|
||||
$key=~tr/-/_/;
|
||||
die "Parse error" unless defined $key and length $key;
|
||||
$hash->{lc($key)}=$value;
|
||||
}
|
||||
return $i;
|
||||
}
|
||||
|
||||
sub _env_to_driver {
|
||||
my $value=shift;
|
||||
|
||||
my ($name, $options) = $value =~ m/^(\w+)(?:{(.*)})?$/;
|
||||
return unless $name;
|
||||
|
||||
return $name if Debconf::DbDriver->driver($name);
|
||||
|
||||
my %hash = @_; # defaults from params
|
||||
$hash{driver} = $name;
|
||||
|
||||
if (defined $options) {
|
||||
foreach (split ' ', $options) {
|
||||
if (/^(\w+):(.*)/) {
|
||||
$hash{$1}=$2;
|
||||
}
|
||||
else {
|
||||
$hash{filename}=$_;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Debconf::Db->makedriver(%hash)->{name};
|
||||
}
|
||||
|
||||
sub load {
|
||||
my $class=shift;
|
||||
my $cf=shift;
|
||||
my @defaults=@_;
|
||||
|
||||
if (! $cf) {
|
||||
for my $file (@config_files) {
|
||||
$file = "$ENV{DPKG_ROOT}$file" if exists $ENV{DPKG_ROOT};
|
||||
if (-e $file) {
|
||||
$cf = $file;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
die "No config file found" unless $cf;
|
||||
|
||||
open (my $debconf_config, "<", $cf) or die "$cf: $!\n";
|
||||
local $/="\n\n"; # read a stanza at a time
|
||||
|
||||
1 until _hashify(<$debconf_config>, $config) || eof $debconf_config;
|
||||
|
||||
if (! exists $config->{config}) {
|
||||
print STDERR "debconf: ".gettext("Config database not specified in config file.")."\n";
|
||||
exit(1);
|
||||
}
|
||||
if (! exists $config->{templates}) {
|
||||
print STDERR "debconf: ".gettext("Template database not specified in config file.")."\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (exists $config->{sigils} || exists $config->{smileys}) {
|
||||
print STDERR "debconf: ".gettext("The Sigils and Smileys options in the config file are no longer used. Please remove them.")."\n";
|
||||
}
|
||||
|
||||
while (<$debconf_config>) {
|
||||
my %config=(@defaults);
|
||||
if (exists $ENV{DEBCONF_DB_REPLACE}) {
|
||||
$config{readonly} = "true";
|
||||
}
|
||||
if (exists $ENV{DPKG_ROOT}) {
|
||||
$config{root} = $ENV{DPKG_ROOT};
|
||||
}
|
||||
next unless _hashify($_, \%config);
|
||||
eval {
|
||||
Debconf::Db->makedriver(%config);
|
||||
};
|
||||
if ($@) {
|
||||
print STDERR "debconf: ".sprintf(gettext("Problem setting up the database defined by stanza %s of %s."),$., $cf)."\n";
|
||||
die $@;
|
||||
}
|
||||
}
|
||||
close $debconf_config;
|
||||
|
||||
if (exists $ENV{DEBCONF_DB_REPLACE}) {
|
||||
$config->{config} = _env_to_driver($ENV{DEBCONF_DB_REPLACE},
|
||||
name => "_ENV_REPLACE");
|
||||
Debconf::Db->makedriver(
|
||||
driver => "Pipe",
|
||||
name => "_ENV_REPLACE_templates",
|
||||
infd => "none",
|
||||
outfd => "none",
|
||||
);
|
||||
my @template_stack = ("_ENV_REPLACE_templates", $config->{templates});
|
||||
Debconf::Db->makedriver(
|
||||
driver => "Stack",
|
||||
name => "_ENV_stack_templates",
|
||||
stack => join(", ", @template_stack),
|
||||
);
|
||||
$config->{templates} = "_ENV_stack_templates";
|
||||
}
|
||||
|
||||
my @finalstack = ($config->{config});
|
||||
if (exists $ENV{DEBCONF_DB_OVERRIDE}) {
|
||||
unshift @finalstack, _env_to_driver($ENV{DEBCONF_DB_OVERRIDE},
|
||||
name => "_ENV_OVERRIDE");
|
||||
}
|
||||
if (exists $ENV{DEBCONF_DB_FALLBACK}) {
|
||||
push @finalstack, _env_to_driver($ENV{DEBCONF_DB_FALLBACK},
|
||||
name => "_ENV_FALLBACK",
|
||||
readonly => "true");
|
||||
}
|
||||
if (@finalstack > 1) {
|
||||
Debconf::Db->makedriver(
|
||||
driver => "Stack",
|
||||
name => "_ENV_stack",
|
||||
stack => join(", ", @finalstack),
|
||||
);
|
||||
$config->{config} = "_ENV_stack";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub getopt {
|
||||
my $class=shift;
|
||||
my $usage=shift;
|
||||
|
||||
my $showusage=sub { # closure
|
||||
print STDERR $usage."\n";
|
||||
print STDERR gettext(<<EOF);
|
||||
-f, --frontend Specify debconf frontend to use.
|
||||
-p, --priority Specify minimum priority question to show.
|
||||
--terse Enable terse mode.
|
||||
EOF
|
||||
exit 1;
|
||||
};
|
||||
|
||||
return unless grep { $_ =~ /^-/ } @ARGV;
|
||||
|
||||
require Getopt::Long;
|
||||
Getopt::Long::Configure('bundling');
|
||||
Getopt::Long::GetOptions(
|
||||
'frontend|f=s', sub { shift; $class->frontend(shift); $config->frontend_forced(1) },
|
||||
'priority|p=s', sub { shift; $class->priority(shift) },
|
||||
'terse', sub { $config->{terse} = 'true' },
|
||||
'help|h', $showusage,
|
||||
@_,
|
||||
) || $showusage->();
|
||||
}
|
||||
|
||||
|
||||
sub frontend {
|
||||
my $class=shift;
|
||||
|
||||
return $ENV{DEBIAN_FRONTEND} if exists $ENV{DEBIAN_FRONTEND};
|
||||
$config->{frontend}=shift if @_;
|
||||
return $config->{frontend} if exists $config->{frontend};
|
||||
|
||||
my $ret='dialog';
|
||||
my $question=Debconf::Question->get('debconf/frontend');
|
||||
if ($question) {
|
||||
$ret=lcfirst($question->value) || $ret;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub frontend_forced {
|
||||
my ($class, $val) = @_;
|
||||
$config->{frontend_forced} = $val
|
||||
if defined $val || exists $ENV{DEBIAN_FRONTEND};
|
||||
return $config->{frontend_forced} ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
sub priority {
|
||||
my $class=shift;
|
||||
return $ENV{DEBIAN_PRIORITY} if exists $ENV{DEBIAN_PRIORITY};
|
||||
if (@_) {
|
||||
my $newpri=shift;
|
||||
if (! priority_valid($newpri)) {
|
||||
warn(sprintf(gettext("Ignoring invalid priority \"%s\""), $newpri));
|
||||
warn(sprintf(gettext("Valid priorities are: %s"), join(" ", priority_list())));
|
||||
}
|
||||
else {
|
||||
$config->{priority}=$newpri;
|
||||
}
|
||||
}
|
||||
return $config->{priority} if exists $config->{priority};
|
||||
|
||||
my $ret='high';
|
||||
my $question=Debconf::Question->get('debconf/priority');
|
||||
if ($question) {
|
||||
$ret=$question->value || $ret;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub terse {
|
||||
my $class=shift;
|
||||
return $ENV{DEBCONF_TERSE} if exists $ENV{DEBCONF_TERSE};
|
||||
$config->{terse}=$_[0] if @_;
|
||||
return $config->{terse} if exists $config->{terse};
|
||||
return 'false';
|
||||
}
|
||||
|
||||
|
||||
sub nowarnings {
|
||||
my $class=shift;
|
||||
return $ENV{DEBCONF_NOWARNINGS} if exists $ENV{DEBCONF_NOWARNINGS};
|
||||
$config->{nowarnings}=$_[0] if @_;
|
||||
return $config->{nowarnings} if exists $config->{nowarnings};
|
||||
return 'false';
|
||||
}
|
||||
|
||||
|
||||
sub debug {
|
||||
my $class=shift;
|
||||
return $ENV{DEBCONF_DEBUG} if exists $ENV{DEBCONF_DEBUG};
|
||||
return $config->{debug} if exists $config->{debug};
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
sub admin_email {
|
||||
my $class=shift;
|
||||
return $ENV{DEBCONF_ADMIN_EMAIL} if exists $ENV{DEBCONF_ADMIN_EMAIL};
|
||||
return $config->{admin_email} if exists $config->{admin_email};
|
||||
return 'root';
|
||||
}
|
||||
|
||||
|
||||
sub noninteractive_seen {
|
||||
my $class=shift;
|
||||
return $ENV{DEBCONF_NONINTERACTIVE_SEEN} if exists $ENV{DEBCONF_NONINTERACTIVE_SEEN};
|
||||
return $config->{noninteractive_seen} if exists $config->{noninteractive_seen};
|
||||
return 'false';
|
||||
}
|
||||
|
||||
|
||||
sub c_values {
|
||||
my $class=shift;
|
||||
return $ENV{DEBCONF_C_VALUES} if exists $ENV{DEBCONF_C_VALUES};
|
||||
return $config->{c_values} if exists $config->{c_values};
|
||||
return 'false';
|
||||
}
|
||||
|
||||
|
||||
sub AUTOLOAD {
|
||||
(my $field = our $AUTOLOAD) =~ s/.*://;
|
||||
my $class=shift;
|
||||
|
||||
return $config->{$field}=shift if @_;
|
||||
return $config->{$field} if defined $config->{$field};
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
1
|
||||
Reference in New Issue
Block a user