The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/bin/sh
#
# Usage: roffitall [-nroff|-psroff|-groff]
#
# Authors: Tom Christiansen, Raphael Manfredi

me=roffitall
tmp=.

if test -f ../config.sh; then
	. ../config.sh
fi

mandir=$installman1dir
libdir=$installman3dir

test -d $mandir || mandir=/usr/new/man/man1
test -d $libdir || libdir=/usr/new/man/man3

case "$1" in
-nroff) cmd="nroff -man"; ext='txt';;
-psroff) cmd="psroff -t"; ext='ps';;
-groff) cmd="groff -man"; ext='ps';;
*)
	echo "Usage: roffitall [-nroff|-psroff|-groff]" >&2
	exit 1
	;;
esac

# NEEDS TO BE BUILT BASED ON Makefile (or Makefile.SH, should such happen)
toroff=`
	echo		\
	$mandir/perl.1	\
	$mandir/perl5004delta.1	\
	$mandir/perl5005delta.1	\
	$mandir/perl56delta.1	\
	$mandir/perlapi.1	\
	$mandir/perlapio.1	\
	$mandir/perlbook.1	\
	$mandir/perlboot.1	\
	$mandir/perlbot.1	\
	$mandir/perlcall.1	\
	$mandir/perlcompile.1	\
	$mandir/perldata.1	\
	$mandir/perldbmfilter.1	\
	$mandir/perldebguts.1	\
	$mandir/perldebug.1	\
	$mandir/perldelta.1	\
	$mandir/perldiag.1	\
	$mandir/perldsc.1	\
	$mandir/perlembed.1	\
	$mandir/perlfaq.1	\
	$mandir/perlfaq1.1	\
	$mandir/perlfaq2.1	\
	$mandir/perlfaq3.1	\
	$mandir/perlfaq4.1	\
	$mandir/perlfaq5.1	\
	$mandir/perlfaq6.1	\
	$mandir/perlfaq7.1	\
	$mandir/perlfaq8.1	\
	$mandir/perlfaq9.1	\
	$mandir/perlfilter.1	\
	$mandir/perlfork.1	\
	$mandir/perlform.1	\
	$mandir/perlfunc.1	\
	$mandir/perlguts.1	\
	$mandir/perlhack.1	\
	$mandir/perlhist.1	\
	$mandir/perlintern.1	\
	$mandir/perlipc.1	\
	$mandir/perllexwarn.1	\
	$mandir/perllocale.1	\
	$mandir/perllol.1	\
	$mandir/perlmod.1	\
	$mandir/perlmodinstall.1	\
	$mandir/perlmodlib.1	\
	$mandir/perlnewmod.1	\
	$mandir/perlnumber.1	\
	$mandir/perlobj.1	\
	$mandir/perlop.1	\
	$mandir/perlopentut.1	\
	$mandir/perlpod.1	\
	$mandir/perlport.1	\
	$mandir/perlre.1	\
	$mandir/perlref.1	\
	$mandir/perlreftut.1	\
	$mandir/perlrequick.1	\
	$mandir/perlretut.1	\
	$mandir/perlrun.1	\
	$mandir/perlsec.1	\
	$mandir/perlstyle.1	\
	$mandir/perlsub.1	\
	$mandir/perlsyn.1	\
	$mandir/perlthrtut.1	\
	$mandir/perltie.1	\
	$mandir/perltoc.1	\
	$mandir/perltodo.1	\
	$mandir/perltooc.1	\
	$mandir/perltoot.1	\
	$mandir/perltrap.1	\
	$mandir/perlunicode.1	\
	$mandir/perlutil.1	\
	$mandir/perlvar.1	\
	$mandir/perlxs.1	\
	$mandir/perlxstut.1	\
	\
    $mandir/a2p.1	\
    $mandir/c2ph.1	\
    $mandir/dprofpp.1	\
    $mandir/h2ph.1	\
    $mandir/h2xs.1	\
    $mandir/perlbug.1	\
    $mandir/perldoc.1	\
    $mandir/pl2pm.1	\
    $mandir/pod2html.1	\
    $mandir/pod2man.1	\
    $mandir/s2p.1	\
    $mandir/splain.1	\
    $mandir/xsubpp.1	\
			\
    $libdir/autouse.3	\
    $libdir/base.3	\
    $libdir/blib.3	\
    $libdir/constant.3	\
    $libdir/diagnostics.3	\
    $libdir/fields.3	\
    $libdir/filetest.3	\
    $libdir/integer.3	\
    $libdir/less.3	\
    $libdir/lib.3	\
    $libdir/locale.3	\
    $libdir/ops.3	\
    $libdir/overload.3	\
    $libdir/re.3	\
    $libdir/sigtrap.3	\
    $libdir/strict.3	\
    $libdir/subs.3	\
    $libdir/vars.3	\
	\
    $libdir/AnyDBM_File.3	\
    $libdir/AutoLoader.3	\
    $libdir/AutoSplit.3	\
    $libdir/B.3	\
    $libdir/B::Asmdata.3	\
    $libdir/B::Assembler.3	\
    $libdir/B::Bblock.3	\
    $libdir/B::Bytecode.3	\
    $libdir/B::C.3	\
    $libdir/B::CC.3	\
    $libdir/B::Debug.3	\
    $libdir/B::Deparse.3	\
    $libdir/B::Disassembler.3	\
    $libdir/B::Lint.3	\
    $libdir/B::Showlex.3	\
    $libdir/B::Stackobj.3	\
    $libdir/B::Terse.3	\
    $libdir/B::Xref.3	\
    $libdir/Benchmark.3	\
    $libdir/Carp.3	\
    $libdir/CGI.3	\
    $libdir/CGI::Apache.3	\
    $libdir/CGI::Carp.3	\
    $libdir/CGI::Cookie.3	\
    $libdir/CGI::Fast.3	\
    $libdir/CGI::Push.3	\
    $libdir/CGI::Switch.3	\
    $libdir/Class::Struct.3	\
    $libdir/Config.3	\
    $libdir/CPAN.3	\
    $libdir/CPAN::FirstTime.3	\
    $libdir/CPAN::Nox.3	\
    $libdir/Cwd.3	\
    $libdir/Data::Dumper.3	\
    $libdir/DB_File.3	\
    $libdir/Devel::SelfStubber.3	\
    $libdir/DirHandle.3	\
    $libdir/DynaLoader.3	\
    $libdir/Dumpvalue.3	\
    $libdir/English.3	\
    $libdir/Env.3	\
    $libdir/Errno.3	\
    $libdir/Exporter.3	\
    $libdir/ExtUtils::Command.3	\
    $libdir/ExtUtils::Embed.3	\
    $libdir/ExtUtils::Install.3	\
    $libdir/ExtUtils::Installed.3	\
    $libdir/ExtUtils::Liblist.3	\
    $libdir/ExtUtils::MakeMaker.3	\
    $libdir/ExtUtils::Manifest.3	\
    $libdir/ExtUtils::Miniperl.3	\
    $libdir/ExtUtils::Mkbootstrap.3	\
    $libdir/ExtUtils::Mksymlists.3	\
    $libdir/ExtUtils::MM_OS2.3	\
    $libdir/ExtUtils::MM_Unix.3	\
    $libdir/ExtUtils::MM_VMS.3	\
    $libdir/ExtUtils::MM_Win32.3	\
    $libdir/ExtUtils::Packlist.3	\
    $libdir/ExtUtils::testlib.3	\
    $libdir/Fatal.3	\
    $libdir/Fcntl.3	\
    $libdir/File::Basename.3	\
    $libdir/File::CheckTree.3	\
    $libdir/File::Compare.3	\
    $libdir/File::Copy.3	\
    $libdir/File::DosGlob.3	\
    $libdir/File::Find.3	\
    $libdir/File::Path.3	\
    $libdir/File::Spec.3	\
    $libdir/File::Spec::Mac.3	\
    $libdir/File::Spec::OS2.3	\
    $libdir/File::Spec::Unix.3	\
    $libdir/File::Spec::VMS.3	\
    $libdir/File::Spec::Win32.3	\
    $libdir/File::stat.3	\
    $libdir/FileCache.3	\
    $libdir/FileHandle.3	\
    $libdir/FindBin.3	\
    $libdir/GDBM_File.3	\
    $libdir/Getopt::Long.3	\
    $libdir/Getopt::Std.3	\
    $libdir/I18N::Collate.3	\
    $libdir/IO.3 \
    $libdir/IO::File.3 \
    $libdir/IO::Handle.3 \
    $libdir/IO::Pipe.3 \
    $libdir/IO::Seekable.3 \
    $libdir/IO::Select.3 \
    $libdir/IO::Socket.3 \
    $libdir/IPC::Msg.3	\
    $libdir/IPC::Open2.3	\
    $libdir/IPC::Open3.3	\
    $libdir/IPC::Semaphore.3	\
    $libdir/IPC::SysV.3	\
    $libdir/Math::BigFloat.3	\
    $libdir/Math::BigInt.3	\
    $libdir/Math::Complex.3	\
    $libdir/Math::Trig.3	\
    $libdir/NDBM_File.3	\
    $libdir/Net::hostent.3	\
    $libdir/Net::netent.3	\
    $libdir/Net::Ping.3	\
    $libdir/Net::protoent.3	\
    $libdir/Net::servent.3	\
    $libdir/O.3	\
    $libdir/Opcode.3	\
    $libdir/Pod::Html.3	\
    $libdir/Pod::Text.3	\
    $libdir/POSIX.3	\
    $libdir/Safe.3	\
    $libdir/SDBM_File.3	\
    $libdir/Search::Dict.3	\
    $libdir/SelectSaver.3	\
    $libdir/SelfLoader.3	\
    $libdir/Shell.3	\
    $libdir/Socket.3	\
    $libdir/Symbol.3	\
    $libdir/Sys::Hostname.3	\
    $libdir/Sys::Syslog.3	\
    $libdir/Term::Cap.3	\
    $libdir/Term::Complete.3	\
    $libdir/Term::ReadLine.3	\
    $libdir/Test.3	\
    $libdir/Test::Harness.3	\
    $libdir/Text::Abbrev.3	\
    $libdir/Text::ParseWords.3	\
    $libdir/Text::Soundex.3	\
    $libdir/Text::Tabs.3	\
    $libdir/Text::Wrap.3	\
    $libdir/Tie::Array.3	\
    $libdir/Tie::Handle.3	\
    $libdir/Tie::Hash.3	\
    $libdir/Tie::RefHash.3	\
    $libdir/Tie::Scalar.3	\
    $libdir/Tie::SubstrHash.3	\
    $libdir/Time::gmtime.3	\
    $libdir/Time::Local.3	\
    $libdir/Time::localtime.3	\
    $libdir/Time::tm.3		\
    $libdir/UNIVERSAL.3		\
    $libdir/User::grent.3		\
    $libdir/User::pwent.3 | \
    perl -ne 'map { -r && print "$_ " } split'`

    # Bypass internal shell buffer limit -- can't use case
    if perl -e '$a = shift; exit($a =~ m|/|)' $toroff; then
	echo "$me: empty file list -- did you run install?" >&2
	exit 1
    fi

    #psroff -t -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.ps 2>$tmp/PerlTOC.raw
    #nroff -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.txt 2>$tmp/PerlTOC.nr.raw

    # First, create the raw data
    run="$cmd -rC1 -rD1 -rF1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
    echo "$me: running $run"
    eval $run $toroff

    #Now create the TOC
    echo "$me: parsing TOC"
    ./rofftoc $tmp/PerlTOC.$ext.raw > $tmp/PerlTOC.tmp.man
    run="$cmd $tmp/PerlTOC.tmp.man >$tmp/PerlTOC.$ext"
    echo "$me: running $run"
    eval $run

    # Finally, recreate the Doc, without the blank page 0
    run="$cmd -rC1 -rD1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
    echo "$me: running $run"
    eval $run $toroff
    rm -f $tmp/PerlTOC.tmp.man $tmp/PerlTOC.$ext.raw
    echo "$me: leaving you with $tmp/PerlDoc.$ext and $tmp/PerlTOC.$ext"