From b78f13c0608e4c83ff5171d7a903b483c5979a1f Mon Sep 17 00:00:00 2001 From: joey Date: Fri, 21 Apr 2000 22:09:14 +0000 Subject: [PATCH] Finished conversion. --- Alien/Package/Tgz.pm | 52 ++++++++++++++++++------ lib/Fromtgz.pm | 96 -------------------------------------------- lib/Totgz.pm | 71 -------------------------------- 3 files changed, 40 insertions(+), 179 deletions(-) delete mode 100644 lib/Fromtgz.pm delete mode 100644 lib/Totgz.pm diff --git a/Alien/Package/Tgz.pm b/Alien/Package/Tgz.pm index 8be7270..f338bde 100644 --- a/Alien/Package/Tgz.pm +++ b/Alien/Package/Tgz.pm @@ -16,6 +16,27 @@ use base qw(Alien::Package); This is an object class that represents a tgz package, as used in Slackware. It is derived from Alien::Package. +=head1 CLASS DATA + +=over 4 + +=item scripttrans + +Translation table between canoical script names and the names used in +tgz's. + +=cut + +use constant + scriptrans => { + postinst => 'doinst.sh', + postrm => 'delete.sh', + prerm => 'predelete.sh', + preinst => 'predoinst.sh', + }; + +=back + =head1 FIELDS =over 4 @@ -48,8 +69,8 @@ sub install { =item scan -Scan a tgz file for fields. Has to scan the actual filename, since -there is little useful data in the file itself. +Scan a tgz file for fields. Has to scan the filename for most of the +information, since there is little useful metadata in the file itself. =cut @@ -112,14 +133,8 @@ sub scan { $this->filelist(\@filelist); # Now get the scripts. - my %scripttrans=( - 'postinst' => 'doinst.sh', - 'postrm' => 'delete.sh', - 'prerm' => 'predelete.sh', - 'preinst' => 'predoinst.sh', - ); - foreach my $script (keys(%scripttrans)) { - $this->$script(`tar Oxzf $file install/$scripttrans{$script} 2>/dev/null`); + foreach my $script (keys %{scripttrans()}) { + $this->$script(`tar Oxzf $file install/${scripttrans()}{$script} 2>/dev/null`); } return 1; @@ -146,7 +161,7 @@ sub unpack { =item prep -Adds a populated install/ directory to the build tree. +Adds a populated install directory to the build tree. =cut @@ -154,7 +169,20 @@ sub prep { my $this=shift; my $dir=$this->unpacked_tree || die "The package must be unpacked first!"; - + my $install_made=0; + foreach my $script (keys %{scriptrans()}) { + my $data=$this->$script; + next if ! defined $data || $data =~ m/^\s*$/; + if (!$install_made) { + mkdir $this->unpacked_tree."/install", 0755; + $install_made=1; + } + open OUT (">".$this->unpacked_tree."/install/$script") || + die $this->unpacked_tree."/install/$script: $!" + print OUT $data; + close OUT; + chmod 0755, $this->unpacked_tree."/install/$script"; + } } =item build diff --git a/lib/Fromtgz.pm b/lib/Fromtgz.pm deleted file mode 100644 index 16b7b73..0000000 --- a/lib/Fromtgz.pm +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/perl -# -# Package for converting from a tgz file. - -package From::tgz; - -use strict; - -# Query a tgz file for fields, and return a hash of the fields found. -# Pass the filename of the tgz file to query. -sub GetFields { my ($self,$file)=@_; - my %fields; - - # Get basename of the filename. - my ($basename)=('/'.$file)=~m#^/?.*/(.*?)$#; - - # Strip out any tar extentions. - $basename=~s/\.(tgz|tar\.(gz|Z))$//; - - if ($basename=~m/(.*)-(.*)/ ne undef) { - $fields{NAME}=$1; - $fields{VERSION}=$2; - } - else { - $fields{NAME}=$basename; - $fields{VERSION}=1; - } - - $fields{ARCH}='all'; - if ($main::tgzdescription eq undef) { - $fields{SUMMARY}='Converted Slackware tgz package'; - } - else { - $fields{SUMMARY}=$main::tgzdescription; - } - $fields{DESCRIPTION}=$fields{SUMMARY}; - $fields{COPYRIGHT}="unknown"; - $fields{RELEASE}=1; - $fields{DISTRIBUTION}="Slackware"; - - # Now figure out the conffiles. Assume anything in etc/ is a conffile. - # It's a little nasty to do it here, but it's much cleaner than waiting - # until the tar file is unpacked and then doing it. - $fields{CONFFILES}=''; - open (FILELIST,"tar zvtf $file | grep etc/ |") - || Alien::Error("Getting filelist: $!"); - while () { - # Make sure it's a normal file. This is looking at the - # permissions, and making sure the first character is '-'. - # Ie: -rw-r--r-- - if (m:^-:) { - # Strip it down to the filename. - m/^(.*) (.*)$/; - $fields{CONFFILES}.="/$2\n"; - } - } - close FILELIST; - - # Now get the whole filelist. We have to add leading /'s to the - # filenames. We have to ignore all files under /install/ - $fields{FILELIST}=''; - open (FILELIST, "tar ztf $file |"); - while () { - if ($_=~m:^install/: eq undef) { - $fields{FILELIST}.="/$_"; - } - } - close FILELIST; - - # Now get the scripts. - if ($main::scripts) { - my %scripttrans=( - 'doinst.sh' => 'POSTINST', - 'delete.sh' => 'POSTRM', - 'predelete.sh' => 'PRERM', - 'predoinst.sh' => 'PREINST', - ); - my $script; - foreach $script (keys(%scripttrans)) { - $fields{$scripttrans{$script}}= - `tar Oxzf $file install/$script 2>/dev/null`; - } - } - - return %fields; -} - -# Handles unpacking of tgz's. -sub Unpack { my ($self,$file)=@_; - Alien::SafeSystem ("(cd ..;cat $file) | tar zxpf -","Error unpacking $file\n"); - - # Delete this install directory that has slackware info in it. - Alien::SafeSystem ("rm -rf install"); -} - -1 diff --git a/lib/Totgz.pm b/lib/Totgz.pm deleted file mode 100644 index dd6680f..0000000 --- a/lib/Totgz.pm +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/perl -# -# Package for converting to .tgz file. - -package To::tgz; - -use strict; - -sub FixFields { my ($self,%fields)=@_; - # Nothing to do. - - return %fields; -} - -sub Convert { my ($self,$workdir,$nopatch,%fields)=@_; - if ($main::scripts) { - my $install_made=undef; - my %scripttrans=( - 'doinst.sh' => 'POSTINST', - 'delete.sh' => 'POSTRM', - 'predelete.sh' => 'PRERM', - 'predoinst.sh' => 'PREINST', - ); - my $script; - foreach $script (keys(%scripttrans)) { - if ($fields{$scripttrans{$script}}) { - if (!$install_made) { - Alien::Status("Setting up scripts."); - mkdir "$fields{NAME}-$fields{VERSION}/install",0755 - || Alien::Error("Unable to make install directory"); - $install_made=1; - } - open (OUT,">$workdir/install/$script") || - Alien::Error("$workdir/install/$script: $!");; - print OUT $fields{$scripttrans{$script}}; - close OUT; - chmod 0755,"$workdir/install/$script"; - } - } - } - - if ($main::generate) { - print "Directory $workdir prepared.\n"; - } -} - -# Passed the available info about the package in a hash, return the name of -# the tgz package that will be made. -sub GetPackageName { my ($self,%fields)=@_; - return "$fields{NAME}-$fields{VERSION}-$fields{RELEASE}.tgz"; -} - -# Build a tgz file. -sub Build { my ($self,%fields)=@_; - Alien::SafeSystem("tar czf ../".$self->GetPackageName(%fields)." ."); -} - -# Install the passed tgz file. -sub Install { my ($self,$package)=@_; - if (-x "/sbin/installpkg") { - Alien::SafeSystem("/sbin/installpkg $package"); - } - else { - Alien::Warning("Sorry, I cannot install the generated .tgz file,"); - Alien::Warning("\"$package\" because /sbin/installpkg is not"); - Alien::Warning("present. You can use tar to install it yourself."); - exit 1; # otherwise alien will delete the package file on us. - } -} - -1