At Tue, 4 Nov 2003 09:45:11 -0500, "Olson, Arthur David (NIH/NCI)" <olsona@dc37a.nci.nih.gov> writes:
+ TXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \ + time2posix.3.txt tzfile.5.txt tzselect.8.txt \ + zic.8.txt zdump.8.txt date.1.txt ... + newctime.3.txt: newctime.3 + newstrftime.3.txt: newstrftime.3 + newtzset.3.txt: newtzset.3 + time2posix.3.txt: time2posix.3 + tzfile.5.txt: tzfile.5 + tzselect.8.txt: tzselect.8 + zic.8.txt: zic.8 + zdump.8.txt: zdump.8 + date.1.txt: date.1
Rather than continue to maintain TXTS and these dependencies by hand, how about if we use $(MANS) to derive the man pages? The patch proposed below does this in a portable way.
+ ./workman $(@:.txt=) > $@
Since workman looks at stdin, stdin should be redirected to /dev/null here, so that 'make' operates the same regardless of where stdin is. If it matters, ancient 'make' implementations don't support the $(@:... notation.
+ chmod +x $@
This should be "chmod a+x", perhaps?
+ tty -s
"tty -s" isn't portable (not required by POSIX); better to use plain "tty" and redirect stdout.
+ if (($. % 66) <= 7) {
This calculation didn't work for me on Solaris, since Solaris nroff uses different margins; the result was that the wrong lines were deleted from the output. Rather than try to figure this out in Perl, it's probably easier to fix it at the nroff level. Patch proposed below.
+ 0) more ;;
This should probably look at the PAGER environment variable, for folks who like 'less'. Here's a proposed revamping of the patch. =================================================================== RCS file: RCS/Makefile,v retrieving revision 2002.2 diff -pu -r2002.2 Makefile --- Makefile 2002/01/28 17:56:01 2002.2 +++ Makefile 2003/11/08 01:23:45 @@ -267,7 +267,7 @@ TABDATA= iso3166.tab zone.tab DATA= $(YDATA) $(NDATA) $(SDATA) $(TABDATA) leapseconds yearistype.sh WEB_PAGES= tz-art.htm tz-link.htm MISC= usno1988 usno1989 usno1989a usno1995 usno1997 usno1998 \ - $(WEB_PAGES) checktab.awk + $(WEB_PAGES) checktab.awk workman.sh ENCHILADA= $(DOCS) $(SOURCES) $(DATA) $(MISC) # And for the benefit of csh users on systems that assume the user @@ -374,24 +374,35 @@ check_web: $(WEB_PAGES) clean: rm -f core *.o *.out tzselect zdump zic yearistype date \ - ,* *.tar.gz + ,* *.tar.gz *.made *.txt workman names: @echo $(ENCHILADA) # The zics below ensure that each data file can stand on its own. -public: $(ENCHILADA) zic +public: $(ENCHILADA) zic txts.made -mkdir /tmp/,tzpublic for i in $(TDATA) ; do zic -d /tmp/,tzpublic $$i ; done rm -f -r /tmp/,tzpublic $(AWK) -f checktab.awk $(PRIMARY_YDATA) - tar cf - $(DOCS) $(SOURCES) $(MISC) | gzip -9 > tzcode.tar.gz + tar cf - $(DOCS) $(SOURCES) $(MISC) *.txt | gzip -9 > tzcode.tar.gz tar cf - $(DATA) | gzip -9 > tzdata.tar.gz zonenames: $(TDATA) @$(AWK) '/^Zone/ { print $$2 } /^Link/ { print $$3 }' $(TDATA) +txts.made: workman $(MANS) + rm -f *.txt + for i in $(MANS); do \ + ./workman $$i < /dev/null > $$i.txt || exit; \ + done + echo made >$@ + +workman: workman.sh + cp $? $@ + chmod a+x $@ + asctime.o: private.h tzfile.h date.o: private.h difftime.o: private.h --- /dev/null 2003-09-05 10:38:07.000000000 -0700 +++ workman.sh 2003-11-07 17:19:22.000000000 -0800 @@ -0,0 +1,34 @@ +#! /bin/sh + +# @(#)workman.sh 1.3 + +tty >/dev/null +ttyval=$? + +case $# in + 0) nroff -man ;; + 1) if [ -f "$1" ] + then + ( echo .hy 0; echo .na; echo .pl 100i ) | nroff -man - "$1" + else + man "$1" + fi ;; + *) man ${1+"$@"} ;; +esac | perl -ne ' + chomp; + s/.\010//g; + s/[ ]*$//; + if (/^$/) { + $sawblank = 1; + next; + } else { + if ($sawblank) { + print "\n"; + $sawblank = 0; + } + print "$_\n"; + } +' | case $ttyval in + 0) ${PAGER-more} ;; + *) cat ;; +esac