package install_any;

use diagnostics;
use strict;
use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK);

@ISA = qw(Exporter);
%EXPORT_TAGS = (
    all => [ qw(versionString getNextStep spawnSync spawnShell addToBeDone) ],
);
@EXPORT_OK = map { @$_ } values %EXPORT_TAGS;

use common qw(:common :system);
use pkgs;
use smp;
use log;

1;

sub relGetFile($) {
    local $_ = member($_[0], qw(compss depslist hdlist)) ? "base" : "RPMS";
    $_ = "Mandrake/$_/$_[0]";
    s/i386/i586/;
    $_;
}
sub getFile($) { 
    open getFile, "/tmp/rhimage/" . relGetFile($_[0]) or return;
    \*getFile;
}

sub versionString {
    my $kernel = $::o->{packages}{kernel};
    $kernel && $kernel->{header} or die "I couldn't find the kernel package!";
    
    c::headerGetEntry($kernel->{header}, 'version') . "-" .
    c::headerGetEntry($kernel->{header}, 'release');
}


sub getNextStep {
    my ($s) = $::o->{steps}{first};
    $s = $::o->{steps}{$s}{next} while $::o->{steps}{$s}{done};
    $s;
}

sub spawnSync {
    return if $::o->{localInstall} || $::testing;

    fork and return;
    while (1) { sleep(30); sync(); }
}

sub spawnShell {
    return if $::o->{localInstall} || $::testing;

    -x "/bin/sh" or die "cannot open shell - /usr/bin/sh doesn't exist";

    fork and return;

    local *F;
    sysopen F, "/dev/tty2", 2 or die "cannot open /dev/tty2 -- no shell will be provided";

    open STDIN, "<&F" or die;
    open STDOUT, ">&F" or die;
    open STDERR, ">&F" or die;
    close F;

    c::setsid();

    ioctl(STDIN, c::TIOCSCTTY(), 0) or warn "could not set new controlling tty: $!";

    exec {"/bin/sh"} "-/bin/sh" or log::l("exec of /bin/sh failed: $!");
}

sub mouse_detect() {
    my %l;
    @l{qw(MOUSETYPE XMOUSETYPE DEVICE)} = split("\n", `mouseconfig --nointeractive 2>/dev/null`) or die "mouseconfig failed";
    \%l;
}

sub shells($) {
    my ($o) = @_;
    my @l = grep { -x "$o->{prefix}$_" } @{$o->{default}{shells}};
    @l ? @l : "/bin/bash";
}

sub setPackages {
    my ($o) = @_;

    eval { $o->{packages} = pkgs::psUsingHdlist() };
    $@ and $o->{packages} = pkgs::psUsingDirectory();
    pkgs::getDeps($o->{packages});

    $o->{compss} = pkgs::readCompss($o->{packages});
    push @{$o->{base}}, "kernel-smp" if smp::detect();

    $o->{packages}{$_}{base} = 1 foreach @{$o->{base}};

    pkgs::setCompssSelected($o->{compss}, $o->{packages}, $o->{installClass}, $o->{lang});
}

sub addToBeDone(&$) {
    my ($f, $step) = @_;

    return &$f() if $::o->{steps}{$step}{done};

    push @{$::o->{steps}{$step}{toBeDone}}, $f;
}

sub upgrFindInstall {
#    int rc;
#
#    if (!$::o->{table}.parts) { 
#	 rc = findAllPartitions(NULL, &$::o->{table});
#	 if (rc) return rc;
#    }
#
#    umountFilesystems(&$::o->{fstab});
#    
#    #  rootpath upgrade support 
#    if (strcmp($::o->{rootPath} ,"/mnt"))
#	 return INST_OKAY;
#    
#    #  this also turns on swap for us 
#    rc = readMountTable($::o->{table}, &$::o->{fstab});
#    if (rc) return rc;
#
#    if (!testing) {
#	 mountFilesystems(&$::o->{fstab});
#
#	 if ($::o->{method}->prepareMedia) {
#	     rc = $::o->{method}->prepareMedia($::o->{method}, &$::o->{fstab});
#	     if (rc) {
#		 umountFilesystems(&$::o->{fstab});
#		 return rc;
#	     }
#	 }
#    }
#
#    return 0;
}

sub upgrChoosePackages {
#    static int firstTime = 1;
#    char * rpmconvertbin;
#    int rc;
#    char * path;
#    char * argv[] = { NULL, NULL };
#    char buf[128];
#
#    if (testing)
#	 path = "/";
#    else
#	 path = $::o->{rootPath};
#
#    if (firstTime) {
#	 snprintf(buf, sizeof(buf), "%s%s", $::o->{rootPath},
#		  "/var/lib/rpm/packages.rpm");
#	 if (access(buf, R_OK)) {
#	 snprintf(buf, sizeof(buf), "%s%s", $::o->{rootPath},
#		  "/var/lib/rpm/packages");
#	     if (access(buf, R_OK)) {
#		 errorWindow("No RPM database exists!");
#		 return INST_ERROR;
#	     }
#
#	     if ($::o->{method}->getFile($::o->{method}, "rpmconvert", 
#		     &rpmconvertbin)) {
#		 return INST_ERROR;
#	     }
#
#	     symlink("/mnt/var", "/var");
#	     winStatus(35, 3, _("Upgrade"), _("Converting RPM database..."));
#	     chmod(rpmconvertbin, 0755);
#	     argv[0] = rpmconvertbin;
#	     rc = runProgram(RUN_LOG, rpmconvertbin, argv);
#	     if ($::o->{method}->rmFiles)
#		 unlink(rpmconvertbin);
#
#	     newtPopWindow();
#	     if (rc) return INST_ERROR;
#	 }
#	 winStatus(35, 3, "Upgrade", _("Finding packages to upgrade..."));
#	 rc = ugFindUpgradePackages(&$::o->{packages}, path);
#	 newtPopWindow();
#	 if (rc) return rc;
#	 firstTime = 0;
#	 psVerifyDependencies(&$::o->{packages}, 1);
#    }
#
#    return psSelectPackages(&$::o->{packages}, &$::o->{compss}, NULL, 0, 1);
}
4cdb8f6f54e70d8582df9ab84fbe07193bb5a1'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/software/drakx-backup-do-not-use/commit/?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>root</a>/<a href='/software/drakx-backup-do-not-use/commit/perl-install?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>perl-install</a>/<a href='/software/drakx-backup-do-not-use/commit/perl-install/share?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>share</a>/<a href='/software/drakx-backup-do-not-use/commit/perl-install/share/po?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>po</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='V9_3_15mdk'/><input type='hidden' name='id' value='844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'>
<tr><th>author</th><td>Pablo Saratxaga &lt;pablo@mandriva.com&gt;</td><td class='right'>2002-09-02 19:33:18 +0000</td></tr>
<tr><th>committer</th><td>Pablo Saratxaga &lt;pablo@mandriva.com&gt;</td><td class='right'>2002-09-02 19:33:18 +0000</td></tr>
<tr><th>commit</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/commit/perl-install/share/po?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>844cdb8f6f54e70d8582df9ab84fbe07193bb5a1</a> (<a href='/software/drakx-backup-do-not-use/patch/perl-install/share/po?id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>patch</a>)</td></tr>
<tr><th>tree</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/tree/?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>ce5da9b4b43e8eeb569cb702a65093d3b8760101</a> /<a href='/software/drakx-backup-do-not-use/tree/perl-install/share/po?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>perl-install/share/po</a></td></tr>
<tr><th>parent</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/commit/perl-install/share/po?h=V9_3_15mdk&amp;id=b7989e1e846b40298f132260d6ad28a22d831e76'>b7989e1e846b40298f132260d6ad28a22d831e76</a> (<a href='/software/drakx-backup-do-not-use/diff/perl-install/share/po?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1&amp;id2=b7989e1e846b40298f132260d6ad28a22d831e76'>diff</a>)</td></tr><tr><th>download</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar'>drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar.gz'>drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar.gz</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar.bz2'>drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar.bz2</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar.xz'>drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.tar.xz</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.zip'>drakx-backup-do-not-use-844cdb8f6f54e70d8582df9ab84fbe07193bb5a1.zip</a><br/></td></tr></table>
<div class='commit-subject'>updated pot file</div><div class='commit-msg'></div><div class='diffstat-header'><a href='/software/drakx-backup-do-not-use/diff/?h=V9_3_15mdk&amp;id=844cdb8f6f54e70d8582df9ab84fbe07193bb5a1'>Diffstat</a> (limited to 'perl-install/share/po')</div><table summary='diffstat' class='diffstat'>