summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels Thykier <niels@thykier.net>2019-09-29 20:48:48 +0000
committerNiels Thykier <niels@thykier.net>2019-09-29 20:48:52 +0000
commitc07134c6a844e9b5cc3a44748ba35fa6916cff9d (patch)
treeabcaff5d1bb4c440677b49a9a42bc7512d47fadf
parent488e6310d5c512b12079f4b353c039deefca3dea (diff)
downloaddebhelper-c07134c6a844e9b5cc3a44748ba35fa6916cff9d.tar.gz
dh_installman: Use man-recode(1) when present
It is a lot faster for any package with a non-trivial amount of manpages- Signed-off-by: Niels Thykier <niels@thykier.net>
-rw-r--r--debian/changelog5
-rwxr-xr-xdh_installman37
2 files changed, 29 insertions, 13 deletions
diff --git a/debian/changelog b/debian/changelog
index d6806f4c..51edd7e2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,11 @@ debhelper (12.6.2) UNRELEASED; urgency=medium
* dh_installman: Avoid error message when man-db is not unstalled
(only occurs in debhelper's own buid as man-db is a mandatory
dependency).
+ * dh_installman: Use man-recode(1) when available to massively
+ speed up re-encoding performance for any package with a non-
+ trivial amount of manpages. Thanks to Robert Luberda for
+ reporting the issue and Colin Watson for writing man-recode
+ (Closes: #933576)
[ Helmut Grohne ]:
* cmake buildsystem: Fix CMAKE_SYSTEM_PROCESSOR for 32bit arms.
diff --git a/dh_installman b/dh_installman
index 55a13fa5..461764d0 100755
--- a/dh_installman
+++ b/dh_installman
@@ -272,6 +272,9 @@ on_items_in_parallel(\@all_packages, sub {
});
# Now utf-8 conversion.
+my $has_man_recode = 0;
+$has_man_recode = 1 if has_man_db_tool('man-recode');
+
if (has_man_db_tool('man')) {
my (@manpages_to_reencode, @issues);
for my $package (@{$dh{DOPACKAGES}}) {
@@ -296,19 +299,7 @@ if (has_man_db_tool('man')) {
}
}
if (@manpages_to_reencode) {
- on_items_in_parallel(\@manpages_to_reencode, sub {
- for my $manpage (@_) {
- my $manpage_tmp = "${manpage}.dh-new";
- my $manpage_cmd = ($manpage =~ m{^/}) ? $manpage : "./${manpage}";
- doit({ stdout => $manpage_tmp }, 'man', '-l', '--recode', 'UTF-8', $manpage_cmd);
- # recode uncompresses compressed pages
- my $orig = $manpage;
- rm_files($orig) if $manpage =~ s/\.(gz|Z)$//;
- rename_path($manpage_tmp, $manpage);
- }
- # Bulk reset permissions of all re-encoded files
- xargs(\@_, 'chmod', '0644', '--');
- });
+ on_items_in_parallel(\@manpages_to_reencode, \&reencode_manpages);
}
} else {
# Should only occur during debhelper building itself (to avoid a B-D on man-db).
@@ -370,6 +361,26 @@ sub has_man_db_tool {
return $res;
}
+sub reencode_manpages {
+ my (@manpages) = @_;
+ if ($has_man_recode) {
+ xargs(\@manpages, 'man-recode', '--to-code', 'UTF-8', '--suffix', '.dh-new');
+ }
+ for my $manpage (@manpages) {
+ my $manpage_tmp = "${manpage}.dh-new";
+ if (not $has_man_recode) {
+ my $manpage_cmd = ($manpage =~ m{^/}) ? $manpage : "./${manpage}";
+ doit({ stdout => $manpage_tmp }, 'man', '-l', '--recode', 'UTF-8', $manpage_cmd);
+ }
+ # recode uncompresses compressed pages
+ my $orig = $manpage;
+ rm_files($orig) if $manpage =~ s/\.(gz|Z)$//;
+ rename_path($manpage_tmp, $manpage);
+ }
+ # Bulk reset permissions of all re-encoded files
+ xargs(\@manpages, 'chmod', '0644', '--');
+}
+
=head1 SEE ALSO
L<debhelper(7)>