X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_installmanpages;h=cc6a6f6f2c59c8f4330a51f44a6cc8c92cdfe96f;hb=18a0da8092ea9f3dc48bca92b36f592af25a608d;hp=9dbf1c9381e68e2f2b1c9d7ec14090f4569b86a0;hpb=938b66ee19e113785e6655b1c3e73e9003e6464c;p=debhelper.git diff --git a/dh_installmanpages b/dh_installmanpages index 9dbf1c9..cc6a6f6 100755 --- a/dh_installmanpages +++ b/dh_installmanpages @@ -1,31 +1,207 @@ -#!/bin/sh -e -# -# Automatically find and install man pages. -# This is a little bit DWIMish, but still very handy. - -PATH=debian:$PATH:/usr/lib/debhelper -source dh_lib - -# Note: this was mostly copied from debstd, and not verified to work. -# Find all filenames that look like man pages. -for file in `find * -name "*.[1-9]*" ! -name "*.ex" ! -name "*.in"`; do - # Make sure they arn't alreadt in debian/tmp - if ! expr $file : 'debian/tmp/.*' >/dev/null; then - # Make sure file thinks they are man pages. - if file $file|grep -q roff; then - if echo $file|grep -q /; then - NAME=`expr $file : '.*/\(.*\)'` - else - NAME=$file - fi - SECTION=man`expr $NAME : '.*\.\([123456789]\)'` - if [ ! -e debian/tmp/usr/man/$SECTION/$NAME -a \ - ! -e debian/tmp/usr/X11*/man/$SECTION/$NAME ]; then - if [ ! -d debian/tmp/usr/man/$SECTION ]; then - doit "install -d debian/tmp/usr/man/$SECTION" - fi - doit "install -p -m644 $file debian/tmp/usr/man/$SECTION/$NAME" - fi - fi - fi -done +#!/usr/bin/perl -w + +=head1 NAME + +dh_installmanpages - old-style man page installer (deprecated) + +=cut + +use strict; +use File::Find; +use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B [S>] [S ...>] + +=head1 DESCRIPTION + +B is a debhelper program that is responsible for +automatically installing man pages into F +in package build directories. + +This is a DWIM-style program, with an interface unlike the rest of +debhelper. It is deprecated, and you are encouraged to use +L instead. + +B scans the current directory and all subdirectories for +filenames that look like man pages. (Note that only real files are looked +at; symlinks are ignored.) It uses L to verify that the files are +in the correct format. Then, based on the files' extensions, it installs +them into the correct man directory. + +All filenames specified as parameters will be skipped by B. +This is useful if by default it installs some man pages that you do not +want to be installed. + +After the man page installation step, B will check to see +if any of the man pages are F<.so> links. If so, it changes them to symlinks. + +=head1 OPTIONS + +=over 4 + +=item I ... + +Do not install these files as man pages, even if they look like valid man +pages. + +=back + +=head1 BUGS + +B will install the man pages it finds into B packages +you tell it to act on, since it can't tell what package the man +pages belong in. This is almost never what you really want (use B<-p> to work +around this, or use the much better L program instead). + +Files ending in F<.man> will be ignored. + +Files specified as parameters that contain spaces in their filenames will +not be processed properly. + +=cut + +warning("This program is deprecated, switch to dh_installman."); + +init(); + +# Check if a file is a man page, for use by File::Find. +my @manpages; +my @allpackages; +sub find_man { + # Does its filename look like a man page? + # .ex files are examples installed by deb-make, + # we don't want those, or .in files, which are + # from configure, nor do we want CVS .#* files. + if (! (-f $_ && /^.*\.[1-9].*$/ && ! /\.(ex|in)$/ && ! /^\.#/)) { + return; + } + + # It's not in a tmp directory is it? + if ($File::Find::dir=~m:debian/.*tmp.*:) { + return; + } + foreach my $dir (@allpackages) { + if ($File::Find::dir=~m:debian/\Q$dir\E:) { + return; + } + } + + # And file does think it's a real man page? + my $type=`file -z $_`; + if ($type !~ m/:.*roff/) { + return; + } + + # Good enough. + push @manpages,"$File::Find::dir/$_"; +} + +# Check if a file is a .so man page, for use by File::Find. +my @sofiles; +my @sodests; +sub find_so_man { + # The -s test is becuase a .so file tends to be small. We don't want + # to open every man page. 1024 is arbitrary. + if (! -f $_ || -s $_ > 1024) { + return; + } + + # Test first line of file for the .so thing. + open (SOTEST,$_); + my $l=; + close SOTEST; + if ($l=~m/\.so\s+(.*)/) { + my $solink=$1; + # This test is here to prevent links like ... man8/../man8/foo.8 + if (basename($File::Find::dir) eq + dirname($solink)) { + $solink=basename($solink); + } + else { + $solink="../$solink"; + } + + push @sofiles,"$File::Find::dir/$_"; + push @sodests,$solink; + } +} + +foreach my $package (@{$dh{DOPACKAGES}}) { + next if is_udeb($package); + + my $tmp=tmpdir($package); + + # Find all filenames that look like man pages. + @manpages=(); + @allpackages=getpackages(''); + find(\&find_man,'.'); # populates @manpages + + foreach my $page (@manpages) { + $page=~s:^\./::; # just for looks + + my $basename=basename($page); + + # Skip all files listed on command line. + my $install=1; + foreach my $skip (@ARGV) { + # Look at basename of what's on connect line + # for backwards compatibility. + if ($basename eq basename($skip)) { + $install=undef; + last; + } + } + + if ($install) { + my $extdir="share"; + + my ($section)=$basename=~m/.*\.([1-9])/; + + my $destdir="$tmp/usr/$extdir/man/man$section/"; + + # Handle translated man pages. + my $instname=$basename; + my ($langcode)=$basename=~m/.*\.([a-z][a-z])\.([1-9])/; + if (defined $langcode && $langcode ne '') { + $destdir="$tmp/usr/$extdir/man/$langcode/man$section/"; + $instname=~s/\.$langcode\./\./; + } + + $destdir=~tr:/:/:s; # just for looks + + if (! -e "$destdir/$basename" && !-l "$destdir/$basename") { + if (! -d $destdir) { + doit "install","-d",$destdir; + } + doit "install","-p","-m644",$page,$destdir.$instname; + } + } + } + + # Now the .so conversion. + @sofiles=@sodests=(); + foreach my $dir (qw{usr/share/man}) { + if (-e "$tmp/$dir") { + find(\&find_so_man, "$tmp/$dir"); + } + } + foreach my $sofile (@sofiles) { + my $sodest=shift(@sodests); + doit "rm","-f",$sofile; + doit "ln","-sf",$sodest,$sofile; + } +} + +=head1 SEE ALSO + +L + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess + +=cut