diff --git a/scripts/mkdeb.pl b/scripts/mkdeb.pl index 4d5972aa4679d63e95b1585c054d19cd9cc825b5..f369445e387e2cdd4c6d9d6111e1c410dadf6902 100755 --- a/scripts/mkdeb.pl +++ b/scripts/mkdeb.pl @@ -10,15 +10,44 @@ my $pkg_base= $ENV{PKGBASE} || '~/tmp/pkg'; my @packages= (); my $pkg_arch= 'all'; +my $compress_suffix= 'zst'; +my @compress_suffixes= qw(gz xz zst); + +my @pkg_paths= (); while (my $arg= shift (@ARGV)) { - if ($arg eq '--arch') { my $pkg_arch= shift(@ARGV); } + if ($arg =~ /^--(.+)/) + { + my ($opt, $val)= split('=', $1); + if ($opt eq 'arch') { $pkg_arch= $val || shift(@ARGV); } + elsif ($opt eq 'compress-suffix') { $compress_suffix= $val || shift(@ARGV); } + else { usage(); } + } + elsif ($arg =~ /^-/) + { + usage(); + } else { - mk_package_by_path($arg, $pkg_arch); + push(@pkg_paths, $arg); } } +# downgrade compression to xz or gz if zstd or xz binaries are not available +$compress_suffix= 'xz' if ($compress_suffix eq 'zst' && !-x '/usr/bin/zstd'); +$compress_suffix= 'gz' if ($compress_suffix eq 'xz' && !-x '/usr/bin/xz'); + +if ($compress_suffix eq 'gz' && !-x '/bin/gzip') +{ + die "no usable compression algorithm"; +} + +foreach my $arg (@pkg_paths) +{ + mk_package_by_path($arg, $pkg_arch); +} +exit(0); + sub mk_package_by_path { my $arg= shift; @@ -68,20 +97,45 @@ sub mk_package print __LINE__, " deb=[$deb]\n"; # mk_md5sums(); - unlink('control.tar.xz'); - unlink('data.tar.xz'); + foreach my $part (qw(control data)) + { + foreach my $suffix (@compress_suffixes) + { + my $fnm= join('.', $part, 'tar', $suffix); + unlink ($fnm) if (-f $fnm); + } + } cmd("(cd data && find [a-z]* -type f -print | xargs md5sum) >control/md5sums"); cmd('(cd control && tar -cf ../control.tar .)'); cmd('(cd data && tar -cf ../data.tar .)'); - cmd(qw(xz -z control.tar data.tar)); + my $control_compressed; + my $data_compressed; + if ($compress_suffix eq 'zst') + { + cmd(qw(xz -z control.tar data.tar)); + $control_compressed= 'control.tar.zst'; + $data_compressed= 'data.tar.zst'; + } + elsif ($compress_suffix eq 'xz') + { + cmd(qw(xz -z control.tar data.tar)); + $control_compressed= 'control.tar.xz'; + $data_compressed= 'data.tar.xz'; + } + elsif ($compress_suffix eq 'gz') + { + cmd(qw(gzip control.tar data.tar)); + $control_compressed= 'control.tar.gz'; + $data_compressed= 'data.tar.gz'; + } # the ar file must contain these fils in this order and should be wiped before unlink($deb); cmd('ar', 'rcSv', $deb, 'debian-binary'); - cmd('ar', 'rcSv', $deb, 'control.tar.xz'); - cmd('ar', 'rcSv', $deb, 'data.tar.xz'); + cmd('ar', 'rcSv', $deb, $control_compressed); + cmd('ar', 'rcSv', $deb, $data_compressed); chdir('..'); chdir('..');