From 5238ad5a0c4a9e1c8cd036f5de4055e39bd71297 Mon Sep 17 00:00:00 2001 From: Manuel Traut Date: Fri, 29 Apr 2011 09:09:27 +0200 Subject: added debootstrap stuff Signed-off-by: Manuel Traut --- .../share/perl5/Debconf/FrontEnd/Passthrough.pm | 287 +++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Passthrough.pm (limited to 'beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Passthrough.pm') diff --git a/beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Passthrough.pm b/beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Passthrough.pm new file mode 100644 index 0000000..96a3f0b --- /dev/null +++ b/beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Passthrough.pm @@ -0,0 +1,287 @@ +#!/usr/bin/perl -w +# This file was preprocessed, do not edit! + + +package Debconf::FrontEnd::Passthrough; +use strict; +use Carp; +use IO::Socket; +use IO::Handle; +use Debconf::FrontEnd; +use Debconf::Element; +use Debconf::Element::Select; +use Debconf::Element::Multiselect; +use Debconf::Log qw(:all); +use Debconf::Encoding; +use base qw(Debconf::FrontEnd); + +my ($READFD, $WRITEFD, $SOCKET); +if (defined $ENV{DEBCONF_PIPE}) { + $SOCKET = $ENV{DEBCONF_PIPE}; +} elsif (defined $ENV{DEBCONF_READFD} && defined $ENV{DEBCONF_WRITEFD}) { + $READFD = $ENV{DEBCONF_READFD}; + $WRITEFD = $ENV{DEBCONF_WRITEFD}; +} else { + die "Neither DEBCONF_PIPE nor DEBCONF_READFD and DEBCONF_WRITEFD were set\n"; +} + + +sub init { + my $this=shift; + + if (defined $SOCKET) { + $this->{readfh} = $this->{writefh} = IO::Socket::UNIX->new( + Type => SOCK_STREAM, + Peer => $SOCKET + ) || croak "Cannot connect to $SOCKET: $!"; + } else { + $this->{readfh} = IO::Handle->new_from_fd(int($READFD), "r") || croak "Failed to open fd $READFD: $!"; + $this->{writefh} = IO::Handle->new_from_fd(int($WRITEFD), "w") || croak "Failed to open fd $WRITEFD: $!"; + } + + binmode $this->{readfh}, ":utf8"; + binmode $this->{writefh}, ":utf8"; + + $this->{readfh}->autoflush(1); + $this->{writefh}->autoflush(1); + + $this->elements([]); + $this->interactive(1); + $this->need_tty(0); +} + + +sub talk { + my $this=shift; + my $command=join(' ', map { Debconf::Encoding::to_Unicode($_) } @_); + my $reply; + + my $readfh = $this->{readfh} || croak "Broken pipe"; + my $writefh = $this->{writefh} || croak "Broken pipe"; + + debug developer => "----> $command"; + print $writefh $command."\n"; + $writefh->flush; + $reply = <$readfh>; + chomp($reply); + debug developer => "<---- $reply"; + my ($tag, $val) = split(' ', $reply, 2); + $val = '' unless defined $val; + $val = Debconf::Encoding::convert("UTF-8", $val); + + return ($tag, $val) if wantarray; + return $tag; +} + + +sub makeelement +{ + my $this=shift; + my $question=shift; + + my $type=$question->type; + if ($type eq "select" || $type eq "multiselect") { + $type=ucfirst($type); + return "Debconf::Element::$type"->new(question => $question); + } else { + return Debconf::Element->new(question => $question); + } +} + + +sub capb_backup +{ + my $this=shift; + my $val = shift; + + $this->{capb_backup} = $val; + $this->talk('CAPB', 'backup') if $val; +} + + +sub capb +{ + my $this=shift; + my $ret; + return $this->{capb} if exists $this->{capb}; + + ($ret, $this->{capb}) = $this->talk('CAPB'); + return $this->{capb} if $ret eq '0'; +} + + +sub title +{ + my $this = shift; + return $this->{title} unless @_; + my $title = shift; + + $this->{title} = $title; + $this->talk('TITLE', $title); +} + + +sub settitle +{ + my $this = shift; + my $question = shift; + + $this->{title} = $question->description; + + my $tag = $question->template->template; + my $type = $question->template->type; + my $desc = $question->description; + my $extdesc = $question->extended_description; + + $this->talk('DATA', $tag, 'type', $type); + + if ($desc) { + $desc =~ s/\n/\\n/g; + $this->talk('DATA', $tag, 'description', $desc); + } + + if ($extdesc) { + $extdesc =~ s/\n/\\n/g; + $this->talk('DATA', $tag, 'extended_description', $extdesc); + } + + $this->talk('SETTITLE', $tag); +} + + +sub go { + my $this = shift; + + my @elements=grep $_->visible, @{$this->elements}; + foreach my $element (@elements) { + my $question = $element->question; + my $tag = $question->template->template; + my $type = $question->template->type; + my $desc = $question->description; + my $extdesc = $question->extended_description; + my $default; + if ($type eq 'select') { + $default = $element->translate_default; + } elsif ($type eq 'multiselect') { + $default = join ', ', $element->translate_default; + } else { + $default = $question->value; + } + + $this->talk('DATA', $tag, 'type', $type); + + if ($desc) { + $desc =~ s/\n/\\n/g; + $this->talk('DATA', $tag, 'description', $desc); + } + + if ($extdesc) { + $extdesc =~ s/\n/\\n/g; + $this->talk('DATA', $tag, 'extended_description', + $extdesc); + } + + if ($type eq "select" || $type eq "multiselect") { + my $choices = $question->choices; + $choices =~ s/\n/\\n/g if ($choices); + $this->talk('DATA', $tag, 'choices', $choices); + } + + $this->talk('SET', $tag, $default) if $default ne ''; + + my @vars=$Debconf::Db::config->variables($question->{name}); + for my $var (@vars) { + my $val=$Debconf::Db::config->getvariable($question->{name}, $var); + $val='' unless defined $val; + $this->talk('SUBST', $tag, $var, $val); + } + + $this->talk('INPUT', $question->priority, $tag); + } + + if (@elements && (scalar($this->talk('GO')) eq "30") && $this->{capb_backup}) { + return; + } + + foreach my $element (@{$this->elements}) { + if ($element->visible) { + my $tag = $element->question->template->template; + my $type = $element->question->template->type; + + my ($ret, $val)=$this->talk('GET', $tag); + if ($ret eq "0") { + if ($type eq 'select') { + $element->value($element->translate_to_C($val)); + } elsif ($type eq 'multiselect') { + $element->value(join(', ', map { $element->translate_to_C($_) } split(', ', $val))); + } else { + $element->value($val); + } + debug developer => "Got \"$val\" for $tag"; + } + } else { + $element->show; + } + } + + return 1; +} + + +sub progress_data { + my $this=shift; + my $question=shift; + + my $tag=$question->template->template; + my $type=$question->template->type; + my $desc=$question->description; + my $extdesc=$question->extended_description; + + $this->talk('DATA', $tag, 'type', $type); + + if ($desc) { + $desc =~ s/\n/\\n/g; + $this->talk('DATA', $tag, 'description', $desc); + } + + if ($extdesc) { + $extdesc =~ s/\n/\\n/g; + $this->talk('DATA', $tag, 'extended_description', $extdesc); + } +} + +sub progress_start { + my $this=shift; + + $this->progress_data($_[2]); + return $this->talk('PROGRESS', 'START', $_[0], $_[1], $_[2]->template->template); +} + +sub progress_set { + my $this=shift; + + return (scalar($this->talk('PROGRESS', 'SET', $_[0])) ne "30"); +} + +sub progress_step { + my $this=shift; + + return (scalar($this->talk('PROGRESS', 'STEP', $_[0])) ne "30"); +} + +sub progress_info { + my $this=shift; + + $this->progress_data($_[0]); + return (scalar($this->talk('PROGRESS', 'INFO', $_[0]->template->template)) ne "30"); +} + +sub progress_stop { + my $this=shift; + + return $this->talk('PROGRESS', 'STOP'); +} + + +1 + -- cgit v1.2.3