summaryrefslogtreecommitdiff
path: root/beagle/debian-rfs/usr/bin/debconf-set-selections
diff options
context:
space:
mode:
Diffstat (limited to 'beagle/debian-rfs/usr/bin/debconf-set-selections')
-rwxr-xr-xbeagle/debian-rfs/usr/bin/debconf-set-selections148
1 files changed, 148 insertions, 0 deletions
diff --git a/beagle/debian-rfs/usr/bin/debconf-set-selections b/beagle/debian-rfs/usr/bin/debconf-set-selections
new file mode 100755
index 0000000..abf361c
--- /dev/null
+++ b/beagle/debian-rfs/usr/bin/debconf-set-selections
@@ -0,0 +1,148 @@
+#!/usr/bin/perl
+# This file was preprocessed, do not edit!
+
+
+sub usage {
+ print STDERR <<EOF;
+Usage: debconf-set-selections [-vcu] [file]
+ -v, --verbose verbose output
+ -c, --checkonly only check the input file format
+ -u, --unseen do not set the 'seen' flag when preseeding values
+EOF
+ exit(1);
+}
+
+
+use warnings;
+use strict;
+use Debconf::Db;
+use Debconf::Template;
+use Getopt::Long;
+
+use vars qw(%opts $filename $debug $error $checkonly $unseen);
+
+sub info {
+ my $msg = shift;
+ print STDERR "info: $msg\n" if $debug;
+}
+
+sub warning {
+ my $msg = shift;
+ print STDERR "warning: $msg\n";
+}
+
+sub error {
+ my $msg = shift;
+ print STDERR "error: $msg\n";
+ $error++
+}
+
+sub load_answer {
+ my ($owner, $label, $type, $content) = @_;
+
+ info "Loading answer for '$label'";
+
+ my $template=Debconf::Template->get($label);
+ if (! $template) {
+ $template=Debconf::Template->new($label, $owner, $type);
+ $template->description("Dummy template");
+ $template->extended_description("This is a fake template used to pre-seed the debconf database. If you are seeing this, something is probably wrong.");
+ }
+ else {
+ $template->default($content);
+ }
+ $template->type($type);
+
+ my $question=Debconf::Question->get($label);
+ if (! $question) {
+ error("Cannot find a question for $label");
+ return;
+ }
+ $question->addowner($owner, $type);
+ $question->value($content);
+ if (! $unseen) {
+ $question->flag("seen", "true");
+ }
+}
+
+sub set_flag {
+ my ($owner, $label, $flag, $content) = @_;
+
+ info "Setting $flag flag";
+
+ my $question=Debconf::Question->get($label);
+ if (! $question) {
+ error("Cannot find a question for $label");
+ return;
+ }
+ $question->flag($flag, $content);
+}
+
+my @knowntypes = qw(select boolean string multiselect note password text title);
+my @knownflags = qw(seen);
+
+sub ok_format {
+ my ($owner, $label, $type, $content) = @_;
+ if (! defined $owner || ! defined $label || ! defined $content) {
+ error "parse error on line $.: '$_'";
+ return;
+ }
+ elsif (! grep { $_ eq $type } @knowntypes, @knownflags) {
+ warning "Unknown type $type, skipping line $.";
+ return;
+ }
+ else {
+ return 1;
+ }
+}
+
+sub mungeline ($) {
+ my $line=shift;
+ chomp $line;
+ $line=~s/\#.*$//;
+ $line=~s/\r$//;
+ return $line;
+}
+
+
+GetOptions(
+ "verbose|v" => \$debug,
+ "checkonly|c" => \$checkonly,
+ "unseen|u" => \$unseen,
+) || usage();
+
+Debconf::Db->load;
+
+$error = 0;
+
+while (<>) {
+ $_=mungeline($_);
+ while (/\\$/ && ! eof) {
+ s/\\$//;
+ $_.=mungeline(<>);
+ }
+ next if /^\s*$/;
+ my ($owner, $label, $type, $content) = /^\s*(\S+)\s+(\S+)\s+(\S+)(?:\s(.*))?/;
+ if (! defined $content) {
+ $content='';
+ }
+ if (ok_format($owner, $label, $type, $content)) {
+ if (grep { $_ eq $type } @knownflags) {
+ info "Trying to set '$type' flag to '$content'";
+ set_flag($owner, $label, $type, $content);
+ }
+ else {
+ info "Trying to set '$label' [$type] to '$content'";
+ load_answer($owner, $label, $type, $content);
+ }
+ }
+}
+
+if (! $checkonly) {
+ Debconf::Db->save;
+}
+
+if ($error) {
+ exit 1;
+}
+