From 552b13ca6df790e58a486e137bd2d80f8233ec35 Mon Sep 17 00:00:00 2001 From: "William F. Jolitz" Date: Tue, 30 Apr 1991 14:39:34 -0800 Subject: [PATCH] 386BSD 0.1 development Work on file usr/src/usr.bin/groff/Makefile.gnu Work on file usr/src/usr.bin/groff/PROBLEMS Co-Authored-By: Lynne Greer Jolitz Synthesized-from: 386BSD-0.1 --- usr/src/usr.bin/groff/Makefile.gnu | 285 +++++++++++++++++++++++++++++ usr/src/usr.bin/groff/PROBLEMS | 285 +++++++++++++++++++++++++++++ 2 files changed, 570 insertions(+) create mode 100644 usr/src/usr.bin/groff/Makefile.gnu create mode 100644 usr/src/usr.bin/groff/PROBLEMS diff --git a/usr/src/usr.bin/groff/Makefile.gnu b/usr/src/usr.bin/groff/Makefile.gnu new file mode 100644 index 0000000000..65a5495054 --- /dev/null +++ b/usr/src/usr.bin/groff/Makefile.gnu @@ -0,0 +1,285 @@ +#Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc. +# Written by James Clark (jjc@jclark.uucp) +# +#This file is part of groff. +# +#groff is free software; you can redistribute it and/or modify it under +#the terms of the GNU General Public License as published by the Free +#Software Foundation; either version 1, or (at your option) any later +#version. +# +#groff is distributed in the hope that it will be useful, but WITHOUT ANY +#WARRANTY; without even the implied warranty of MERCHANTABILITY or +#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +#for more details. +# +#You should have received a copy of the GNU General Public License along +#with groff; see the file LICENSE. If not, write to the Free Software +#Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +# Define PAGE to be letter if your PostScript printer uses 8.5x11 paper (USA) +# and define it to be A4, if it uses A4 paper (rest of the world). +PAGE=A4 +#PAGE=letter + +# BINDIR says where to install executables. +BINDIR=/usr/local/bin + +GROFFLIBDIR=/usr/local/lib/groff + +# FONTDIR says where to install dev*/*. +FONTDIR=$(GROFFLIBDIR)/font + +# FONTPATH says where to look for dev*/*. +FONTPATH=.:$(FONTDIR):/usr/local/lib/font:/usr/lib/font + +# MACRODIR says where to install macros. +MACRODIR=$(GROFFLIBDIR)/tmac + +# MACROPATH says where to look for macro files. +MACROPATH=.:$(MACRODIR):/usr/lib/tmac + +# DEVICE is the default device. +DEVICE=ps + +# PSPRINT is the command to use for printing a PostScript file. +# It must be a simple command, not a pipeline. +PSPRINT=lpr + +# DVIPRINT is the command to use for printing a TeX dvi file. +# It must be a simple command, not a pipeline. +DVIPRINT=lpr -d + +# HYPHENFILE is the file containing the hyphenation patterns. +HYPHENFILE=$(GROFFLIBDIR)/hyphen + +# MANROOT is the root of the man page directory tree. +MANROOT=/usr/local/man + +# MAN1EXT is the man section for user commands. +MAN1EXT=1 +MAN1DIR=$(MANROOT)/man$(MAN1EXT) + +# MAN5EXT is the man section for file formats. +MAN5EXT=5 +MAN5DIR=$(MANROOT)/man$(MAN5EXT) + +# MAN7EXT is the man section for macros. +MAN7EXT=7 +MAN7DIR=$(MANROOT)/man$(MAN7EXT) + +# The groff ms macros will be available as -m$(TMAC_S). +# If you use `TMAC_S=s', you can use the Unix ms macros by using +# groff -ms -M/usr/lib/tmac. +TMAC_S=gs + +# Include -DBROKEN_SPOOLER in CPPDEFINES if you have a PostScript +# spooler or previewer that is unable to cope with anything after +# %%EndProlog and before the first page (old versions of TranScript +# have this problem) or gets confused by included documents (the Sun +# pageview previewer has this problem), or if you are going to be +# sharing PostScript documents with others who might be running such a +# spooler or previewer. +# Include -DCFRONT_ANSI_BUG if you are using AT&T C++ 2.0 with an ANSI C +# compiler backend. +# Include -DHAVE_VFORK if you have vfork(). +# Include -DHAVE_SYS_SIGLIST if you have sys_siglist[]. +# Include -DHAVE_UNION_WAIT if wait() is declared by osfcn.h to take +# an argument of type union wait * (Sun C++ does this). Don't include +# it if you're using the libg++ header files. +CPPDEFINES=-DBROKEN_SPOOLER -DHAVE_VFORK -DHAVE_SYS_SIGLIST # -DHAVE_UNION_WAIT -DCFRONT_ANSI_BUG + +# Uncomment the next line if you don't have fmod in your math library. +# I believe this is needed on Ultrix and BSD 4.3. +# FMOD=fmod.o + +# Uncomment the next line if you don't have strtol in your C library. +# I believe this is needed on BSD 4.3. +# STRTOL=strtol.o + +# Additional flags needed to compile lib/malloc.c +# Use this with BSD. +MALLOCFLAGS=-DBSD +# Use this with System V +# MALLOCFLAGS=-DUSG +# Use this with SunOS 4.1 +# MALLOCFLAGS=-DBSD -DSUNOS_LOCALTIME_BUG + +# Comment this out if the GNU malloc gives you problems, or if you would +# prefer to use the system malloc. +MALLOC=malloc.o + +GROFF= +# Comment the next line out if groff.c gives problems. +GROFF=groff + +# CC is the C++ compiler +CC=g++ +# I'm told that -fno-inline is needed on a 68030-based Apollo +# CC=g++ -fno-inline + +# OLDCC is the C compiler. +OLDCC=gcc + +PROFILE_FLAG= +DEBUG_FLAG=-g +OPTIMIZE_FLAG=-O +WARNING_FLAGS=#-Wall -Wcast-qual -Wwrite-strings + +# Use this to pass additional flags on the command line. +XCFLAGS= + +# CFLAGS are passed to sub makes +CFLAGS=$(PROFILE_FLAG) $(DEBUG_FLAG) $(OPTIMIZE_FLAG) $(WARNING_FLAGS) \ + $(CPPDEFINES) $(XCFLAGS) + +XOLDCFLAGS= +# OLDCFLAGS are passed to sub makes +OLDCFLAGS=$(DEBUG_FLAG) $(PROFILE_FLAG) $(OPTIMIZE_FLAG) $(XOLDCFLAGS) + +XLDFLAGS= +LDFLAGS=$(PROFILE_FLAG) $(DEBUG_FLAG) $(XLDFLAGS) +# Libraries needed for linking C++ programs. +LIBS= +# Libraries needed for linking C++ programs that use libm.a. +MLIBS=$(LIBS) -lm + +AR=ar + +# Define RANLIB to be empty if you don't have ranlib. +RANLIB=ranlib + +# YACC can be either yacc or bison -y +YACC=bison -y +YACCFLAGS=-v + +ETAGS=/usr/local/bin/etags +# Flag to make etags treat *.[ch] files as C++ +ETAGSFLAGS=-p + +SHELL=/bin/sh + +SUBDIRS=lib troff pic tbl eqn etc driver ps tty dvi macros man + +# SUBFLAGS says what flags to pass to sub makes +SUBFLAGS="CC=$(CC)" "CFLAGS=$(CFLAGS)" "LDFLAGS=$(LDFLAGS)" \ + "OLDCC=$(OLDCC)" "OLDCFLAGS=$(OLDCFLAGS)" \ + "YACC=$(YACC)" "YACCFLAGS=$(YACCFLAGS)" \ + "DEVICE=$(DEVICE)" "FONTPATH=$(FONTPATH)" "MACROPATH=$(MACROPATH)" \ + "MALLOCFLAGS=$(MALLOCFLAGS)" "MALLOC=$(MALLOC)" \ + "FMOD=$(FMOD)" "STRTOL=$(STRTOL)" \ + "AR=$(AR)" "RANLIB=$(RANLIB)" "LIBS=$(LIBS)" "MLIBS=$(MLIBS)" \ + "FONTDIR=$(FONTDIR)" "BINDIR=$(BINDIR)" "PAGE=$(PAGE)" \ + "MACRODIR=$(MACRODIR)" "HYPHENFILE=$(HYPHENFILE)" \ + "TMAC_S=$(TMAC_S)" "MAN1EXT=$(MAN1EXT)" "MAN1DIR=$(MAN1DIR)" \ + "MAN5EXT=$(MAN5EXT)" "MAN5DIR=$(MAN5DIR)" \ + "MAN7EXT=$(MAN7EXT)" "MAN7DIR=$(MAN7DIR)" + +all: $(SUBDIRS) $(GROFF) shgroff + +$(SUBDIRS): FORCE + @cd $@; \ + echo Making all in $@; \ + $(MAKE) $(SUBFLAGS) all + +troff pic tbl eqn etc ps tty dvi: lib +ps tty dvi: driver + +TAGS: FORCE + @for dir in $(SUBDIRS); do \ + echo Making TAGS in $$dir; \ + (cd $$dir; $(MAKE) "ETAGSFLAGS=$(ETAGSFLAGS)" "ETAGS=$(ETAGS)" TAGS); \ + done + +topclean: FORCE + -rm -f shgroff + -rm -f groff *.o core + +clean: topclean FORCE + @for dir in $(SUBDIRS) doc; do \ + echo Making clean in $$dir; \ + (cd $$dir; $(MAKE) clean); done + +distclean: topclean FORCE + @for dir in $(SUBDIRS) doc; do \ + echo Making distclean in $$dir; \ + (cd $$dir; $(MAKE) distclean); done + +# You really don't want to use this target. +realclean: topclean FORCE + @for dir in $(SUBDIRS) doc; do \ + echo Making realclean in $$dir; \ + (cd $$dir; $(MAKE) realclean); done + +install.nobin: FORCE shgroff + -[ -d $(BINDIR) ] || mkdir $(BINDIR) + -[ -d $(GROFFLIBDIR) ] || mkdir $(GROFFLIBDIR) + -[ -d $(MANROOT) ] || mkdir $(MANROOT) + @for dir in $(SUBDIRS); do \ + echo Making install.nobin in $$dir; \ + (cd $$dir; $(MAKE) $(SUBFLAGS) install.nobin); done + if [ -z "$(GROFF)" ] ; then cp shgroff $(BINDIR)/groff ; fi + +install.bin: FORCE $(GROFF) + -[ -d $(BINDIR) ] || mkdir $(BINDIR) + @for dir in $(SUBDIRS); do \ + echo Making install.bin in $$dir; \ + (cd $$dir; $(MAKE) $(SUBFLAGS) install.bin); done + if [ -n "$(GROFF)" ] ; then cp groff $(BINDIR)/groff ; fi + +install: install.bin install.nobin + +install.mm: FORCE + -[ -d $(GROFFLIBDIR) ] || mkdir $(GROFFLIBDIR) + -[ -d $(MACRODIR) ] || mkdir $(MACRODIR) + sed -f macros/fixmacros.sed -e 's;/usr/lib/tmac;$(MACRODIR);' \ + /usr/lib/macros/mmt >$(MACRODIR)/tmac.m + sed -f macros/fixmacros.sed /usr/lib/tmac/sys.name \ + >$(MACRODIR)/sys.name + patch -s $(MACRODIR)/tmac.m macros/mm.diff + +shgroff: groff.sh + @echo Making $@ from groff.sh + @-rm -f $@ + @sed -e "s;@BINDIR@;$(BINDIR);" \ + -e "s;@DEVICE@;$(DEVICE);" \ + -e "s;@PROG_PREFIX@;$(PROG_PREFIX);" \ + -e "s;@FONTDIR@;$(FONTDIR);" \ + -e "s;@PSPRINT@;$(PSPRINT);" \ + -e "s;@DVIPRINT@;$(DVIPRINT);" \ + groff.sh >$@ || rm -f $@ + @chmod +x $@ + +groff: groff.o lib/libgroff.a + $(CC) $(LDFLAGS) -o $@ groff.o lib/libgroff.a $(LIBS) + +lib/libgroff.a: lib + +groff.o: groff.c stringify + $(CC) -c -Ilib $(CFLAGS) -DDEVICE=\"$(DEVICE)\" \ + "-DPSPRINT=`$(SHELL) stringify $(PSPRINT)`" \ + "-DDVIPRINT=`$(SHELL) stringify $(DVIPRINT)`" \ + groff.c + +groff.o: lib/lib.h lib/errarg.h lib/error.h lib/stringclass.h lib/font.h + +bindist: all VERSION Makefile.bd README.bd FORCE + -[ -d bindist ] || mkdir bindist + @topdir=`pwd`; \ + for dir in $(SUBDIRS); do \ + (cd $$dir; $(MAKE) "BINDIR=$$topdir/bindist" install.bin); done + cp README.bd bindist/README + cp VERSION bindist + if [ "$(GROFF)" ] ; then cp groff bindist/groff ; fi + @echo Making bindist/Makefile + @sed -e "s;@GROFFLIBDIR@;$(GROFFLIBDIR);" \ + -e "s;@FONTDIR@;$(FONTDIR);" \ + -e "s;@FONTPATH@;$(FONTPATH);" \ + -e "s;@MACRODIR@;$(MACRODIR);" \ + -e "s;@MACROPATH@;$(MACROPATH);" \ + -e "s;@HYPHENFILE@;$(HYPHENFILE);" \ + -e "s;@DEVICE@;$(DEVICE);" \ + -e "s;@GROFF@;$(GROFF);" \ + Makefile.bd >bindist/Makefile + +FORCE: diff --git a/usr/src/usr.bin/groff/PROBLEMS b/usr/src/usr.bin/groff/PROBLEMS new file mode 100644 index 0000000000..17d9be6b3e --- /dev/null +++ b/usr/src/usr.bin/groff/PROBLEMS @@ -0,0 +1,285 @@ +This file describes various problems that have been encountered in +compiling, installing and running groff. Suggestions for additions or +other improvements to this file are welcome. + +* I am having problems compiling groff with g++ on a DECstation or +other machine using a MIPS processor (such as SGI machines). + +Try getting g++ from foobar.colorado.edu:pub/Gnu-For-Pmax. + +* I am having problems compiling groff with g++ on a 386 PC +running SVR3.2. + +I recommend using Michael Bloom's GNU COFF patches +(tut.cis.ohio-state.edu:pub/gnu/coff/gnu-coff.tar.Z). + +* I get lots of `numeric overflow' error messages whenever I run +groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler. + +Include -DCFRONT_ANSI_BUG in CPPDEFINES in the top-level Makefile. If +that doesn't solve the problem, define INT_MIN as -INT_MAX in +lib/lib.h. + +* Using SunOS 4.1, gtroff aborts in malloc. + +Include -DSUNOS_LOCALTIME_BUG in MALLOCFLAGS in the top-level Makefile. + +* g++ 1.37.2 alpha gives the following error while compiling groff: +Failed assertion `TREE_CHAIN (list) == NULL_TREE' at line 777 of `cplus-tree.c' + +Apply the fix given in the groff INSTALL file. I recommend using g++ +1.37.1 in preference to 1.37.2 alpha. + +* When I try to compile groff with g++, I get lots of parse errors +from files in /usr/include. + +You must install C++ versions of the standard include files; these are +included with libg++. + +* g++ complains about conflicting declarations of fmod() while +compiling pic.tab.c; I'm using a 68k based machine. + +This is a bug in the libg++ header files. Apply the fix given in the +INSTALL file. + +* I get errors when I try to compile groff with Sun C++. + +Groff requires ANSI C style header files. The Sun C++ header files +need some changes to meet this requirement: must declare +the mem* functions, (just add `#include ' to ); +the first argument to fopen and freopen should be declared as `const +char *'; the first argument to fread should be declared as `void *'; +malloc should be declared to return `void *'. You can either change +them in place, or copy them to some other directory and include that +directory with a -I option. + +* I get the error `make[2]: execve: /bin/sh: Arg list too long.'. + +If you're using GNU make, try using /bin/make instead. Otherwise if +you have the `env' command, try changing occurrences of $(MAKE) in the +top-level Makefile to + env - PATH=/bin:/usr/bin $(MAKE) + +* The pic Makefile refers to a program called gperf; I can't find +gperf anywhere. + +You don't need gperf unless you want to add new keywords to gpic: +gperf is only used to generate key.c and a suitable key.c is supplied +in the distribution. Gperf is distributed with libg++; it's a perfect +hash function generator + +* pic output is not centered horizontally; pictures sometimes run off +the bottom of the page. + +The macro package you are using is not supplying appropriate definitions +of PS and PE. Give groff a -mpic option. + +* I'm having problems including PostScript illustrations using the PSPIC +macro. + +A PostScript document must meet three requirements in order to be +included with the PSPIC macro: it must comply with the Adobe Document +Structuring Conventions; it must contain a BoundingBox line; it must +be ``well-behaved''. The BoundingBox line should be of the form: + + %%BoundingBox: llx lly urx ury + +where llx, lly, urx, ury are the coordinates of the lower left x, +lower left y, upper right x, upper right y of the bounding box of +marks on the page expressed as integers in the default PostScript +coordinate system (72 units per inch, origin at bottom left corner). +A useful tactic is to print out the illustration by itself (you may +need to add a `showpage' at the end), and physically measure the +bounding box. For more detail on these requirements, read the +specification of Encapsulated PostScript format. (This is available +from the Adobe file server; send a message with a body of `help' to +ps-file-server@adobe.com.) + +* I am trying to include a PostScript illustration by using: + \!% + \!PB + + \!PE + \!. + +This mechanism for including PostScript illustrations is a feature +peculiar to Adobe's TranScript software. It is not supported by +groff. You should switch to using the PSPIC macro. + +* I've configured groff for A4 paper, but gtroff still seems to think +that the length of a page (as returned by \n(.p) is 11 inches. + +This is intentional. The PAGE option is used only by grops. For +compatibility with ditroff, the default page length in gtroff is +always 11 inches. The page length can be changed with the `pl' +request. + +* Groff doesn't use the font names I'm used to. + +Use the `ftr' request. See gtroff(1). + +* I get errors using the Unix -ms macros with groff -e -C. + +Apply this change: + +*** /usr/lib/ms/ms.eqn Tue Apr 25 02:14:28 1989 +--- ms.eqn Sun Nov 11 10:33:59 1990 +*************** +*** 22,29 **** + .. + . \" EN - end of a displayed equation + .de EN +! .if !\\*(10 .br + .di + .rm EZ + .nr ZN \\n(dn + .if \\n(ZN>0 .if \\n(YE=0 .LP +--- 22,30 ---- + .. + . \" EN - end of a displayed equation + .de EN +! .if \\n(.k>0 .br + .di ++ .ds 10 \\*(EZ\\ + .rm EZ + .nr ZN \\n(dn + .if \\n(ZN>0 .if \\n(YE=0 .LP + + +* gpic doesn't accept the syntax `chop N M' for chopping both ends of a +line. + +The correct syntax is `chop N chop M'. + +* With gpic -t, when I print `line ->; box' using a dvi to ps +program, the arrow head sticks through into the inside of the box. + +The dvi to ps program should be modified to set the line cap and +line join parameters to 1 while printing tpic specials. + +* When I print the output groff -Tps, the output is always shifted up +by about 0.7 inches; I'm using 8.5x11 inch paper. + +Make sure that PAGE is defined to be `letter' in the top-level +Makefile. If you failed to do this, you can fix the problem by doing: + cp ps/devps/DESC-letter /usr/local/lib/groff/font/devps/DESC + +* When I try to print the output of groff -Tps, I get no output at all +from the printer, and the log file shows the error +%%[ error: undefined; offendingcommand: BP ]%% +I using TranScript spooling software. + +This is a bug in the page reversal filter in early versions of +TranScript. Include -DBROKEN_SPOOLER in CPPDEFINES in the top-level +Makefile, and rebuild grops. + +* When I preview groff -Tps output using the Sun OpenWindows 2.0 pageview +program, all the pages are displayed on top of each other. + +This is a defect in pageview. Include -DBROKEN_SPOOLER in CPPDEFINES +in the top-level Makefile, and rebuild grops. + +* When I try to preview the output of groff -Tps using ralpage, I get +errors from ralpage. + +This is a bug in ralpage. You may be able to work around the bug by +defining MF and SF in ps/devps/prologue using `def' instead of `bind +def'. + +* With groff -TX75 or -TX100, I can only view the first page. + +The left mouse button brings up a menu that allows you to view other +pages. + +* Documents that use mainly 12-point text exhibit poor letter spacing +when previewed with groff -TX75 or -TX100. + +Use groff -TX75-12 or groff -TX100-12. + +* When I print the output of groff -Tdvi, I just get a black dot in +upper left corner. + +Some dvi drivers (notably early versions of xtex) do not correct +handle dvi files that use a resolution different from that used by dvi +files produced by TeX. Try getting a more up to date driver. + +* I get lots of errors when I use groff with -mm. + +-mm needs a few changes to work with groff; `make install.mm' will +copy your -mm macros to groff's macro directory and make the necessary +changes. You may need to edit the commands for the install.mm target +in the Makefile. + +* gtroff doesn't understand lines like `.ce99' with no space between +the name of the request or macro and the arguments. + +Gtroff requires a space between macro or request and its arguments +because it allows the use of long names for macros and requests. You +can use the -C option or the `cp' request to put gtroff into a +compatibility mode in which it is not possible to use long names for +macros but in which no space is required between macros and their +arguments. The use of compatibility mode is strongly discouraged. + +* gtroff gives warnings about lines like + .ev \" a comment +(with a tab after the .ev). + +A tab character cannot be used as a substitute for a space character +(except in one case: between a control character at the beginning of a +line and the name of a macro or request). For example, in Unix troff + .ps \" restore the previous point size +(with a tab after the .ps) will NOT restore the previous point-size; +instead it will be silently ignored. Since this is very likely to be +an error, gtroff can give a warning about it. If you want to align +comments, you can do it like this: + .ev\" \" a comment + +* I don't like the page headers and footers produced by groff -man. + +There seem to be many different styles of page header and footer +produced by different versions of the -man macros. You will need to +modify macros/tmac.an to suit your personal taste. For example, if +you want the center of the page header to say + UNIX Programmer's Manual +you will need to change the line + .el .ds an-extra3 \"UNIX Programmer's Manual +to + .el .ds an-extra3 UNIX Programmer's Manual + +* Where is the document ``Groff Character Names'' that is mentioned in various +man pages? + +It is in doc/chars.tr. You can print it out with each device to see +what characters are available for that device. + +* While formatting a manual page, groff complains about not being able to +break lines. The problem seems to be caused by a line like: + .TP \w'label'+2 + +The -man documentation says that the default scale indicator for TP +macro is `n'. The groff -man macros implement this correctly, so that +the argument will be evaluated as if it were + \w'label'n+2n +The Unix -man macros don't implement this correctly (probably because +it's hard to do in Unix troff); they just append `n' to the entire +argument, so that it will be evaluated as if it were + \w'label'u+2n +The solution is to fix the manual page: + .TP \w'label'u+2 + +* When I preview documents using -TX75 or -TX100, the layout is not the same +as when I print the document with -Tps or -Tdvi: the line and page +breaks come in different places. + +This is the way xditview works: the widths of characters in the X +fonts don't match the widths of characters in the PostScript fonts, so +the layout usually comes out differently. The idea of xditview is +just to give you a readable representation of your document on screen, +rather than to give you a simulation of how it will look when printed. +If you want that, then you could use a PostScript previewer or a dvi +previewer according as you're using -Tps or -Tdvi. Alternatively you +could port xtroff. + +* In gpic expressions don't work at all. I'm using g++ 1.39 on a sparc. + +This is a bug in gcc/g++ 1.39. Apply the fix given in the INSTALL file. -- 2.20.1