remove use of Archive::Zip

Change-Id: I7c1e0057c3c1c0b6be524d1e9ad37357259ebd7c
This commit is contained in:
David Tardon 2016-06-03 17:09:14 +02:00
parent c3393443b4
commit 4e3dc8c141
3 changed files with 48 additions and 43 deletions

View file

@ -20,8 +20,6 @@ sudo -s
pkg install git make gcc-45 autoconf autogen automake-110 gnu-m4
perl -MCPAN -e 'install Archive::Zip::Archive'
pkg install pkg:/system/header@0.5.11-0.175.0.0.0.2.1
pkg install pkg:/developer/gperf@3.0.3-0.175.0.0.0.2.537
pkg install pkg:/developer/parser/bison@2.3-0.175.0.0.0.2.537

View file

@ -5122,15 +5122,11 @@ dnl Testing for required Perl modules
dnl ===================================================================
AC_MSG_CHECKING([for required Perl modules])
if `$PERL -e 'use Archive::Zip; use Cwd; use Digest::MD5'>/dev/null 2>&1`; then
if `$PERL -e 'use Cwd; use Digest::MD5'>/dev/null 2>&1`; then
AC_MSG_RESULT([all modules found])
else
AC_MSG_RESULT([failed to find some modules])
# Find out which modules are missing.
missing_perl_modules=
if ! `$PERL -e 'use Archive::Zip;'>/dev/null 2>&1`; then
missing_perl_modules=Archive::Zip
fi
if ! `$PERL -e 'use Cwd;'>/dev/null 2>&1`; then
missing_perl_modules="$missing_perl_modules Cwd"
fi

View file

@ -27,9 +27,10 @@ use strict;
use Getopt::Long;
use File::Find;
use File::Basename;
use File::Copy qw(copy);
use File::Path qw(make_path);
require File::Temp;
use File::Temp ();
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
#### globals ####
@ -91,7 +92,8 @@ remove_links_from_zip_list($zip_hash_ref, \%links);
$do_rebuild = is_file_newer($zip_hash_ref) if $do_rebuild == 0;
if ( $do_rebuild == 1 ) {
create_zip_archive($zip_hash_ref, \%links);
my $tmpdir = copy_images($zip_hash_ref);
create_zip_archive($zip_hash_ref, \%links, $tmpdir);
replace_file($tmp_out_file, $out_file);
print_message("packing $out_file finished.") if $verbose;
} else {
@ -351,40 +353,50 @@ sub optimize_zip_layout($)
return @sorted;
}
sub create_zip_archive
sub copy_images($)
{
my $zip_hash_ref = shift;
my $links_hash_ref = shift;
my ($zip_hash_ref) = @_;
my $dir = File::Temp->newdir();
foreach (keys %$zip_hash_ref) {
my $path = $zip_hash_ref->{$_} . "/$_";
my $outpath = $dir . "/$_";
print_message("copying '$path' to '$outpath' ...") if $extra_verbose;
if ( -e $path) {
my $dirname = dirname($outpath);
if (!-d $dirname) {
make_path($dirname);
}
copy($path, $outpath)
or print_error("can't add file '$path' to image dir: $!", 5);
}
}
return $dir;
}
sub create_zip_archive($$$)
{
my ($zip_hash_ref, $links_hash_ref, $image_dir_ref) = @_;
print_message("creating image archive ...") if $verbose;
my $zip = Archive::Zip->new();
my $linktmp;
chdir $image_dir_ref;
if (keys %{$links_hash_ref}) {
$linktmp = write_links($links_hash_ref);
my $member = $zip->addFile($linktmp->filename, "links.txt", COMPRESSION_DEFLATED);
if (!$member) {
print_error("failed to add links file: $!", 5);
}
write_links($links_hash_ref, $image_dir_ref);
system "zip $tmp_out_file links.txt";
# print_error("failed to add links file: $!", 5);
}
# FIXME: test - $member = addfile ... $member->desiredCompressionMethod( COMPRESSION_STORED );
# any measurable performance win/loss ?
foreach ( optimize_zip_layout($zip_hash_ref) ) {
my $path = $zip_hash_ref->{$_} . "/$_";
print_message("zipping '$path' ...") if $extra_verbose;
if ( -e $path) {
my $member = $zip->addFile($path, $_, COMPRESSION_STORED);
if ( !$member ) {
print_error("can't add file '$path' to image zip archive: $!", 5);
}
}
my @sorted_list = optimize_zip_layout($zip_hash_ref);
my $sorted_file = File::Temp->new();
foreach my $item (@sorted_list) {
print $sorted_file "$item\n";
}
my $status = $zip->writeToFileNamed($tmp_out_file);
if ( $status != AZ_OK ) {
print_error("write image zip archive '$tmp_out_file' failed. Reason: $status", 6);
}
return;
binmode $sorted_file; # flush
system "cat $sorted_file | zip -0 -@ $tmp_out_file";
# print_error("write image zip archive '$tmp_out_file' failed. Reason: $!", 6);
chdir; # just go out of the temp dir
}
sub replace_file
@ -486,18 +498,17 @@ sub read_links($$)
close ($fh);
}
# write out the links to a tmp file
sub write_links($)
# write out the links
sub write_links($$)
{
my $links = shift;
my $tmp = File::Temp->new( TEMPLATE => "linksXXXXXXX" );
$tmp || die "can't create tmp: $!";
my ($links, $out_dir_ref) = @_;
open (my $fh, ">", "$out_dir_ref/links.txt")
|| die "can't create links.txt";
for my $missing (sort keys %{$links}) {
my $line = $missing . " " . $links->{$missing} . "\n";
print $tmp $line;
print $fh $line;
}
binmode $tmp; # force flush
return $tmp;
close $fh;
}
# Ensure that no link points to another link