#!/usr/bin/env perl # Pragmata use 5.10.0; use strict; use warnings; # Utility use autodie qw( chdir unlink ); use File::Basename qw( basename ); use FindBin qw( $Bin $Script ); use Getopt::Long qw( GetOptions ); use IPC::System::Simple qw( capturex system ); use IO::All qw( io ); use POSIX qw( ceil ); use Readonly qw( Readonly ); use Term::ReadKey qw( GetTerminalSize ); # ------------------------------------- Readonly my $TERM_WIDTH => (GetTerminalSize)[0]; my $Clean = 'clean' eq lc $Script; my $DryRun = 0; # Subrs ------------------------------------------------------------------------ sub run { my ($cmd, $exit) = @_; my $cmdstring = join ' ', @$cmd; if ( $DryRun ) { say "CMD: $cmdstring"; return; } my $dash_width = ($TERM_WIDTH - length($cmdstring) - 2) / 2; say STDERR ''; say STDERR '-' x $dash_width, ' ', $cmdstring, ' ', '-' x ceil $dash_width; say STDERR ''; $exit ||= [0]; # not systemx, so we can, e.g., yes | debuild # (pipes do not work with systemx) system $exit, @$cmd; say STDERR ''; } # ------------------------------------- # inplace edit file sub hackit { my ($fn, $rules) = @_; my $io = io($fn)->open('+<'); my @lines; for my $l ($io->chomp->slurp) { $l = $_->($l) for @$rules; push @lines, $l if defined $l; } $io->seek(0, 0) or confess "failed to seek to start on $fn: $!\n"; $io < join '', map "$_\n", @lines; } # Main ----------------------------------------------------------------------- GetOptions('C|clean' => \$Clean, 'n|dry-run' => \$DryRun, ) or die "options parsing failed\n"; chdir $Bin; my $hmod = basename $Bin; # hyphenated module name (my $mod = $hmod) =~ s/-/::/g; my $mod_version = capturex qw( perl -I lib ), "-M$mod", -e => "print \$${mod}::VERSION"; my $libstub = sprintf 'lib%s-perl_', lc $hmod; run(['./Build' => 'distclean']) if -e 'Build'; FN: for my $fn (grep -e, map glob($_), "$libstub*", "$hmod-*.tar.gz", qw( debian MANIFEST.bak Makefile.PL META.yml Makefile ), ) { if ( $DryRun ) { say "RM : $fn"; next FN; } unlink $fn; } exit 0 if $Clean; say "Building... $mod: $mod_version"; run([perl => 'Build.PL']); run(['./Build' => $_]) for qw( test distmeta distcheck distsign disttest dist distdir ); run(['dh-make-perl', '--closes' => 0, "$hmod-$mod_version"]); chdir "$hmod-$mod_version"; hackit("debian/control", [sub { my ($x) = @_; $x =~ s!\bperl/(libparams-validate-perl)\b!$1!; $x =~ s!\b(perl\s+\(>= )v([\d.]+)\)!$1$2)!; return $x; }]); run(['yes | debuild'],[29]); say 'Now run:'; printf " sudo dpkg --install lib%s-perl_%s-1_all.deb\n", lc $hmod, $mod_version;