This is an automated email from the git hooks/post-receive script. intrigeri pushed a commit to branch master in repository libparse-debianchangelog-perl.
commit 4877c445a4ca057fa05b1bf222eb631dea06a6cb Author: intrigeri <[email protected]> Date: Sun May 24 14:52:33 2015 +0000 Build.PL-when-a-PO_BUILD_DATE-environment-variable-i.patch: new patch, that makes the build system fake the time for running po4a-{translate, updatepo}, xgettext, msgmerge and msgfmt, when a PO_BUILD_DATE environment variable is passed. This allows the Debian package to be built reproducibly. --- ...en-a-PO_BUILD_DATE-environment-variable-i.patch | 135 +++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 136 insertions(+) diff --git a/debian/patches/Build.PL-when-a-PO_BUILD_DATE-environment-variable-i.patch b/debian/patches/Build.PL-when-a-PO_BUILD_DATE-environment-variable-i.patch new file mode 100644 index 0000000..b0d9963 --- /dev/null +++ b/debian/patches/Build.PL-when-a-PO_BUILD_DATE-environment-variable-i.patch @@ -0,0 +1,135 @@ +From: intrigeri <[email protected]> +Date: Sun, 24 May 2015 14:45:46 +0000 +Subject: Build.PL: when a PO_BUILD_DATE environment variable is passed, + use it to fake the time for running po4a-{translate, updatepo}, xgettext, + msgmerge and msgfmt. + +The build system updates POT files, and in turn .po and .mo files. As a result, +.mo files created as part of the Debian package build process embed timestamps, +which prevent the package from building reproducibly. + +With this change in, the Debian packaging can pass whatever $PO_BUILD_DATE it +wants to (most likely: the date of the most recent entry in debian/changelog), +and then the package can be built reproducibly. +--- + Build.PL | 33 ++++++++++++++++++++++----------- + 1 file changed, 22 insertions(+), 11 deletions(-) + +diff --git a/Build.PL b/Build.PL +index 76c9fa5..ae28a95 100644 +--- a/Build.PL ++++ b/Build.PL +@@ -10,6 +10,8 @@ my $builder = Module::Build->subclass + class => 'My::Builder', + code => q{ + { use strict; ++ use String::ShellQuote; ++ __PACKAGE__->add_property('po_faketime_cmd'); + my $bin_po_dir = 'po'; + my $bin_pot_file = 'bin.pot'; + my $bin_po_prefix = 'bin.'; +@@ -49,7 +51,7 @@ my $builder = Module::Build->subclass + unless ($self->up_to_date(\@files, $bin_pot_path)) { + print "XX Update $bin_pot_path\n"; + my $podfiles = join ("", map { " $base_dir/$_" } @files); +- system("cd $bin_po_dir; xgettext --copyright-holder=\"Frank Lichtenheld\" --keyword=__g --msgid-bugs-address=frank\@lichtenheld.de -L Perl $podfiles -o $bin_pot_file.new") && die; ++ system("cd $bin_po_dir; ".$self->po_faketime_str." xgettext --copyright-holder=\"Frank Lichtenheld\" --keyword=__g --msgid-bugs-address=frank\@lichtenheld.de -L Perl $podfiles -o $bin_pot_file.new") && die; + if ( -e $bin_pot_path) { + my $diff = qx(diff -q -I'#:' -I'POT-Creation-Date:' -I'PO-Revision-Date:' $bin_pot_path $bin_pot_path.new); + if ( $diff eq "" ) { +@@ -77,7 +79,8 @@ my $builder = Module::Build->subclass + unless ($self->up_to_date($bin_pot_path, + "$bin_po_dir/$bin_po_prefix$lang.po")) { + print "XX Sync $bin_po_dir/$bin_po_prefix$lang.po: "; +- system('msgmerge', "$bin_po_dir/$bin_po_prefix$lang.po", ++ system(@{$self->po_faketime_cmd}, ++ 'msgmerge', "$bin_po_dir/$bin_po_prefix$lang.po", + "$bin_pot_path", + "-o", "$bin_po_dir/$bin_po_prefix$lang.po.new") + && die; +@@ -102,7 +105,7 @@ my $builder = Module::Build->subclass + "blib/po/$lang/LC_MESSAGES/$bin_mo_file.mo")) { + print "X Generate $bin_mo_file.mo for $lang.\n"; + system('mkdir', '-p', "blib/po/$lang/LC_MESSAGES") && die; +- system('msgfmt', '-o', ++ system(@{$self->po_faketime_cmd}, 'msgfmt', '-o', + "blib/po/$lang/LC_MESSAGES/$bin_mo_file.mo", + "$bin_po_dir/$bin_po_prefix$lang.po") && die; + } else { +@@ -120,7 +123,7 @@ my $builder = Module::Build->subclass + unless ($self->up_to_date(\@files, $doc_pot_path)) { + my $podfiles = join ("", map {" -m $base_dir/$_" } @files); + print "XX Update documentation pot files: "; +- system("cd $doc_po_dir; ${po4a_path}po4a-updatepo -f pod $podfiles -M utf-8 -p $doc_pot_file") ++ system("cd $doc_po_dir; ".$self->po_faketime_str." ${po4a_path}po4a-updatepo -f pod $podfiles -M utf-8 -p $doc_pot_file") + && die; + my ($atime, $mtime) = (time,time); + utime $atime, $mtime, $doc_pot_path; +@@ -138,8 +141,8 @@ my $builder = Module::Build->subclass + unless ($self->up_to_date($doc_pot_path, + "$doc_po_dir/$doc_po_prefix$lang.po")) { + print "XX Update documentation $doc_po_prefix$lang.po: "; +- +- system('msgmerge', "$doc_po_dir/$doc_po_prefix$lang.po", ++ system(@{$self->po_faketime_cmd}, ++ 'msgmerge', "$doc_po_dir/$doc_po_prefix$lang.po", + "$doc_pot_path", + '-o', "$doc_po_dir/$doc_po_prefix$lang.po.new") + && die; +@@ -164,7 +167,7 @@ my $builder = Module::Build->subclass + "blib/po/$lang/LC_MESSAGES/$doc_mo_file.mo")) { + print "X Generate $doc_mo_file.mo for $lang.\n"; + system('mkdir', '-p', "blib/po/$lang/LC_MESSAGES") && die; +- system('msgfmt', '-o', ++ system(@{$self->po_faketime_cmd}, 'msgfmt', '-o', + "blib/po/$lang/LC_MESSAGES/$doc_mo_file.mo", + "$doc_po_dir/$doc_po_prefix$lang.po") && die; + } else { +@@ -200,7 +203,7 @@ my $builder = Module::Build->subclass + foreach my $lang (@langs) { + print ("X Translate binary manpages to $lang\n"); + foreach my $file (keys(%{$self->script_files()})) { +- system("${po4a_path}po4a-translate $options -m $file -p $doc_po_dir/$doc_po_prefix$lang.po -l blib/man/$file") ++ system($self->po_faketime_str." ${po4a_path}po4a-translate $options -m $file -p $doc_po_dir/$doc_po_prefix$lang.po -l blib/man/$file") + && die; + if (-e "blib/man/$file") { + system("mkdir", "-p", "blib/man/$lang/man1") && die; +@@ -224,7 +227,7 @@ my $builder = Module::Build->subclass + foreach my $file (@{$self->rscan_dir('lib',qr/\.pm$/)}) { + $file =~ /.*\/(.*)\.pm$/; + my $filename = $1; +- system("${po4a_path}po4a-translate $options -m $file -p $doc_po_dir/$doc_po_prefix$lang.po -l blib/man/$filename") ++ system($self->po_faketime_str." ${po4a_path}po4a-translate $options -m $file -p $doc_po_dir/$doc_po_prefix$lang.po -l blib/man/$filename") + && die; + if (-e "blib/man/$filename") { + system ("mkdir", "-p", "blib/man/$lang/man3") && die; +@@ -276,13 +279,20 @@ my $builder = Module::Build->subclass + my $stat = `msgfmt -o /dev/null -c -v --statistics $file 2>&1`; + print " $lang: $stat"; + } +- } } ++ } ++ sub po_faketime_str { ++ my $self = shift; ++ # return '"' . join('" "', @{$self->po_faketime_cmd}) . '"'; ++ return shell_quote @{$self->po_faketime_cmd}; ++ } } + }, + ); + + my $base= $Config::Config{man1dir}; + $base =~ s/\/man\/man1//; + ++my $po_build_date = $ENV{PO_BUILD_DATE}; ++ + my $b = $builder->new + ( module_name => 'Parse-DebianChangelog', + license => 'gpl', +@@ -298,5 +308,6 @@ my $b = $builder->new + install_path => {po => $base.'/locale', man => $base.'/man'}, + create_packlist => 0, + dist_abstract => 'parse Debian changelogs and output them in other formats', +- dist_author => ['Frank Lichtenheld <[email protected]>'] ++ dist_author => ['Frank Lichtenheld <[email protected]>'], ++ po_faketime_cmd => defined $po_build_date ? ['faketime', '-f', $po_build_date] : [], + )->create_build_script; diff --git a/debian/patches/series b/debian/patches/series index e8b221e..4213542 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -2,3 +2,4 @@ 0001_de.po.patch 0001_ftbfs_changes_line.patch 0001_P-DC-Support-open-handles-as-input.patch +Build.PL-when-a-PO_BUILD_DATE-environment-variable-i.patch -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libparse-debianchangelog-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits
