/contrib/groff/PROBLEMS
https://bitbucket.org/freebsd/freebsd-head/ · #! · 916 lines · 663 code · 253 blank · 0 comment · 0 complexity · 1875928943fa844f194471817896ca16 MD5 · raw file
- 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.
- ----------------------------------------------------------------------
- Generic Problems
- ================
- * Displaying a man page on a terminal with/without my favourite pager
- only gives garbage.
- groff by default now uses SGR escape sequences (`ANSI color') to
- control the display attributes (bold, underlined, colour) on TTYs.
- Some terminals (e.g. `kterm') don't understand SGR, and some pagers
- (e.g. older versions of `less' or `less' without the -R option) don't
- understand SGR either. There are three solutions to fix this, in order
- of preference; please read the grotty man page for more details.
- The fourth and probably best option is to update your terminal program
- and pager to versions which can handle SGR.
- 1. Set the GROFF_NO_SGR environment variable.
- 2. Pass option -c to grotty.
- 3. Append the following fragment to the `troffrc' file:
- --- start ---
- .if n \{\
- . nr _C \n(.C
- . cp 0
- .
- . \" The following code sets a top-of-page trap to disable grotty's TTY
- . \" mode. Since neither \X nor .output can be used before the first
- . \" page has started, we must use a trap. To make it work with troff's
- . \" -o option, we wait until the first printed page.
- .
- . de sgr@dummy
- . .
- .
- . rn wh wh@old
- .
- . \" The stand-alone version. If no other trap is set, we can safely
- . \" insert the truncated vertical space caused by the trap (if any).
- . \" Otherwise we assume that the document's main macro package takes
- . \" care of that. As soon as the trap has been executed, it is removed.
- . de1 no@sgr
- . if \\n[.P] \{\
- . if (\\n[.t] == \\n[.p]) \{\
- . rn wh@old wh
- . rm no@sgr
- . wh 0
- . sp \\n[.trunc]
- . nop \X'tty: sgr 0'
- . sp -1
- . \}\}
- . .
- .
- . wh@old 0 no@sgr
- .
- . \" The piggyback version to be appended to macros planted with the
- . \" modified `wh' request.
- . de1 no@sgr1
- . if \\n[.P] \{\
- . rn wh@old wh
- . ds no@sgr1
- . nop \X'tty: sgr 0'
- . sp -1
- . \}
- . .
- .
- . \" We redefine the `wh' request so that `no@sgr1' is appended to
- . \" the trap macro.
- . de1 wh
- . am1 \\$2 sgr@dummy
- . no@sgr1
- . sgr@dummy
- . wh@old \\$1 \\$2
- . .
- .
- . cp \n[_C]
- .\}
- --- end ---
- ----------------------------------------------------------------------
- * The UTF-8 output of grotty has strange characters for the minus, the
- hyphen, and the right quote. Why?
- The used Unicode characters (U+2212 for the minus sign and U+2010 for
- the hyphen) are the correct ones, but many programs can't search them
- properly. The same is true for the right quote (U+201D). To map those
- characters back to the ASCII characters, insert the following code
- snippet into the `troffrc' configuration file:
- .if '\*[.T]'utf8' \{\
- . char \- \N'45'
- . char - \N'45'
- . char ' \N'39'
- .\}
- ----------------------------------------------------------------------
- * My document says that the current year is 19100, not 2000.
- In groff, as in traditional troff, the yr number register yields the
- year minus 1900. Unfortunately, there is a longstanding bug in the
- Troff User's Manual <http://cm.bell-labs.com/cm/cs/cstr/54.ps.gz>,
- which incorrectly claims that yr is the last two digits of the year.
- This claim was never true of either Unix troff or of groff.
- If your text looks like this:
- .\" Wrong:
- This document was formatted in 19\n(yr.
- you can correct it as follows:
- This document was formatted in \n[year].
- or, if you want to be portable to older troff versions, as follows:
- .nr y4 1900+\n(yr
- This document was formatted in \n(y4.
- ----------------------------------------------------------------------
- * groff can't handle my troff document. It works fine with AT&T
- troff.
- Read the section on incompatibilities in groff_diff(7). Try using
- the -C option. Alternatively there's the sed script
- `tmac/fixmacros.sed' which will attempt to edit a file of macros so
- that it can be used with groff without the -C flag.
- ----------------------------------------------------------------------
- * 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.
- ----------------------------------------------------------------------
- * groff -Tdvi produces dvi files that use fonts at weird
- magnifications.
- Yes, it does. You may need to compile fonts with Metafont at these
- magnifications. The CompileFonts script in the devdvi/generate
- directory may help you to do this. (It will take a *long* time on
- slow computers.)
- ----------------------------------------------------------------------
- * Groff doesn't use the font names I'm used to.
- Use the `ftr' request. See groff_diff(7).
- ----------------------------------------------------------------------
- * 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.
- ----------------------------------------------------------------------
- * 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.
- ----------------------------------------------------------------------
- * 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
- put modified macros from tmac/an-old.tmac into man.local. More
- information is available in groff_man(7).
- ----------------------------------------------------------------------
- * Where can I get grap?
- Ted Faber <faber@lunabase.org> has written a freely available grap:
- http://www.lunabase.org/~faber/Vault/software/grap/
- ----------------------------------------------------------------------
- * The \n(st and \n(sb registers don't seem to work. I thought \w set
- them to the height and depth of its argument, but the registers
- always seem to be 0.
- \n(st and \n(sb aren't supposed to give the height and depth of the
- string rather they give the minimum and maximum vertical displacement
- of the baseline. For example for \v'2u'\v'-3u', \n(st will be 1 and
- \n(sb will be -2. The height and depth of the string is available in
- the \n[rst] and \n[rsb] registers: these are groff extensions.
- ----------------------------------------------------------------------
- * 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
- ----------------------------------------------------------------------
- * I'm having problems formatting man pages produced by the perl
- wrapman script.
- Some versions of wrapman have a superfluous blank line before the .TH
- line. This must be deleted. Then either use groff -C, or apply the
- following patch:
- *** wrapman.~2~ Sun Jan 19 12:10:24 1992
- --- wrapman Tue Aug 10 02:06:41 1993
- ***************
- *** 35,41 ****
- $line1 .= <IN> if $line1 =~ /eval/;
- $line1 .= <IN> if $line1 =~ /argv/;
- $line2 = <IN>;
- ! next if $line2 eq "'di';\n";
-
- # Pull the old switcheroo.
-
- --- 35,41 ----
- $line1 .= <IN> if $line1 =~ /eval/;
- $line1 .= <IN> if $line1 =~ /argv/;
- $line2 = <IN>;
- ! next if $line2 eq "'di ';\n" || $line2 eq "'di';\n";
-
- # Pull the old switcheroo.
-
- ***************
- *** 49,56 ****
-
- print OUT $line1;
- print OUT <<EOF;
- ! 'di';
- ! 'ig00';
- #
- # $header
- #
- --- 49,58 ----
-
- print OUT $line1;
- print OUT <<EOF;
- ! 'di ';
- ! 'ds 00 \\"';
- ! 'eo ';
- ! 'ig 00 ';
- #
- # $header
- #
- ***************
- *** 72,85 ****
-
- # These next few lines are legal in both Perl and nroff.
-
- ! $null.00; # finish .ig
-
- 'di \\" finish diversion--previous line must be blank
- .nr nl 0-1 \\" fake up transition to first page again
- .nr % 0 \\" start at page 1
- ! '; __END__ ##### From here on it's a standard manual page #####
- .TH $PROG 1 "$month $mday, 19$year"
- - .AT 3
- .SH NAME
- $prog \\- whatever
- .SH SYNOPSIS
- --- 74,87 ----
-
- # These next few lines are legal in both Perl and nroff.
-
- ! $null.00 ; # finish .ig
- ! 'ec \\';
-
- 'di \\" finish diversion--previous line must be blank
- .nr nl 0-1 \\" fake up transition to first page again
- .nr % 0 \\" start at page 1
- ! .\\"'; __END__ ##### From here on it's a standard manual page #####
- .TH $PROG 1 "$month $mday, 19$year"
- .SH NAME
- $prog \\- whatever
- .SH SYNOPSIS
- ----------------------------------------------------------------------
- * groff uses up an enormous amount of memory processing large files.
- I'm using 386BSD 0.1.
- 386BSD includes an old version of g++, 1.39, which has a bug that
- causes a major memory leak in gtroff. Apply the following fix to g++
- and recompile groff:
- *** cplus-decl.c.~1~ Mon Aug 6 05:28:59 1990
- --- cplus-decl.c Wed Jun 5 08:55:04 1991
- ***************
- *** 7951,7961 ****
-
- /* At the end, call delete if that's what's requested. */
- if (TREE_GETS_DELETE (current_class_type))
- exprstmt = build_method_call (build1 (NOP_EXPR, TYPE_POINTER_TO (current_class_type), error_mark_node),
- get_identifier (OPERATOR_DELETE_FORMAT),
- ! build_tree_list (NULL_TREE, integer_zero_node),
- NULL_TREE, LOOKUP_NORMAL);
- else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
- exprstmt = build_x_delete (ptr_type_node, current_class_decl, 0);
- else
- exprstmt = 0;
- --- 7951,7961 ----
-
- /* At the end, call delete if that's what's requested. */
- if (TREE_GETS_DELETE (current_class_type))
- exprstmt = build_method_call (build1 (NOP_EXPR, TYPE_POINTER_TO (current_class_type), error_mark_node),
- get_identifier (OPERATOR_DELETE_FORMAT),
- ! build_tree_list (NULL_TREE, current_class_decl),
- NULL_TREE, LOOKUP_NORMAL);
- else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
- exprstmt = build_x_delete (ptr_type_node, current_class_decl, 0);
- else
- exprstmt = 0;
- Printing and Display Problems
- =============================
- * I'm having problems including PostScript illustrations (EPS) using
- the PSPIC macro and/or \X'ps: import ...'.
- 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).
- The most convenient program to get the bounding box of a document is
- the `ps2epsi' script coming with GhostScript.
- If you can't use this program, another 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.)
- If an EPS file to be included via \X'ps: import' does not start with
- `%!PS-Adobe-...', gtroff will still include the file, but grops will
- not add any fonts to the generated output file that are listed in the
- EPS file, even though the files are listed in the `download' file and
- are available in the devps directory.
- ----------------------------------------------------------------------
- * 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 during configuration 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.
- A convenient way to set paper dimensions is to use the -dpaper option
- of groff, together with proper -P options for the postprocessor
- (overriding the default). For example, use the following for PS
- output on A4 paper in landscape orientation:
- groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
- See groff_tmac(5) for more information.
- ----------------------------------------------------------------------
- * When I print the output of groff -Tps, the output is always shifted
- up by about 0.7 inches; I'm using 8.5x11 inch paper.
- Make sure that the paper size is `letter'. See groff_tmac(5).
- ----------------------------------------------------------------------
- * When I try to run gxditview, I get the error:
- Error: Widget viewport has zero width and/or height
- This error means you haven't correctly installed the application
- defaults file, GXditview.ad; `make install' does this for you
- automatically, so either you didn't do `make install', or you haven't
- passed a good `--appresdir=<DIR>' argument to groff's configure script.
- See the X(7) man page for information how and where application resource
- files have to be located. Look for the XAPPLRESDIR and XUSERFILESEARCHPATH
- environment variables.
- ----------------------------------------------------------------------
- * When I preview documents using -TX75 or -TX100, the layout is not
- the same as when I print the document with -Tps: the line and page
- breaks come in different places.
- Use `groff -X -Tps'.
- ----------------------------------------------------------------------
- * 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'm using TranScript spooling software.
- This is a bug in the page reversal filter in early versions of
- TranScript. Change the `broken' parameter in
- /usr/local/lib/groff/font/devps/DESC to 7.
- ----------------------------------------------------------------------
- * 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. Change the `broken' parameter in
- /usr/local/lib/groff/font/devps/DESC to 2.
- ----------------------------------------------------------------------
- * With groff -TX75, -TX100 or -X, I can only view the first page.
- The left mouse button brings up a menu that allows you to view other
- pages.
- ----------------------------------------------------------------------
- * 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 correctly
- 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.
- ----------------------------------------------------------------------
- * How can I use groff with an old LaserJet printer that doesn't work
- with groff -Tlj4?
- You have at least 3 options:
- - use groff -Tps with GNU Ghostscript;
- - use groff -Tdvi with a TeX .dvi to Laserjet driver;
- - use groff with the LaserJet driver in Chris Lewis' psroff package
- (available for ftp from:
- ftp.uunet.ca:/distrib/chris_lewis/psroff3.0pl17).
- ----------------------------------------------------------------------
- * Groff seems to generate level 3 Postscript, but my printer is only a
- level 1 or 2 PostScript printer.
- In fact groff generates only level 2 PostScript (or rather level 1
- with some extensions; see grops(1) for more information how to disable
- them). The `%!PS-Adobe-3.0' comment at the beginning of PostScript
- output generated by groff indicates that the file conforms to
- version 3.0 of the Adobe Document Structuring Conventions. The output
- generated by groff should be printable on any PostScript printer.
- Problems with groff output's not printing are most often caused by the
- spooling system.
- Platform-Dependent Macro Problems
- =================================
- * I get lots of errors when I use groff with the AT&T -mm macros.
- Use the groff -mm macros.
- ----------------------------------------------------------------------
- * groff produces wrapper macros for `ms' and friends which call the
- system's original macros. Then, to get groff's ms macro package I
- have to use `-mgs' instead `-ms'. Can I avoid this?
- Yes. Configure and compile groff as usual, but install it with
- make install tmac_wrap=""
- Then no wrapper files are produced, and `-ms' will use groff's `ms'
- macros.
- ----------------------------------------------------------------------
- * I'm having problems formatting HP-UX 9.0 man pages with groff -man.
- Copy HP's tmac.an into /usr/local/share/groff/site-tmac/an.tmac, and
- either put `.cp 1' at the beginning or filter it (and any files it
- .so's) through tmac/fixmacros.sed.
- ----------------------------------------------------------------------
- * 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
- ----------------------------------------------------------------------
- * I'm having problems formatting Ultrix man pages with groff -man.
- The Ultrix man pages use a number of non-standard extensions to the
- Unix man macros. One solution is to use the Ultrix -man macros with
- groff. Copy /usr/lib/tmac/tmac.an to
- /usr/local/share/groff/site-tmac/an.tmac and apply the following patch
- (from Frank Wortner):
- *** /usr/local/lib/groff/tmac/tmac.an Wed Sep 9 12:29:28 1992
- --- /usr/lib/tmac/tmac.an Fri Jul 24 19:58:19 1992
- ***************
- *** 489,495 ****
- . \" make special case of shift out of italic
- .de }S
- .ds ]F
- ! .if \\$12 .if !\\$5 .ds ]F \^
- .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
- .el \\$3
- .}f
- --- 489,495 ----
- . \" make special case of shift out of italic
- .de }S
- .ds ]F
- ! .if \\$12 .if !\\$5 .ds ]F\^
- .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
- .el \\$3
- .}f
- Another possible solution is to install tmac/man.ultrix as
- /usr/local/share/groff/site-tmac/man.local.
- ----------------------------------------------------------------------
- * On an SGI system, how can I make the man command use groff?
- From David Hinds <dhinds@allegro.stanford.edu> (some of these steps
- are unnecessary if you install with the `g' Makefile variable defined
- as empty):
- Create a script called 'eqn':
- > #! /bin/sh
- > if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi
- > geqn $*
- and a script called 'neqn':
- > #! /bin/sh
- > if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi
- > geqn -Tascii $*
- and do:
- > ln -s gnroff nroff
- and edit the end of the gnroff script to be:
- > rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
- > exec groff -Wall -mtty-char $T $opts $rest
- To get PostScript output from 'man -t', you also need to create a
- 'psroff' script similar to 'nroff'. Here are the context diffs:
- *** /usr/local/bin/nroff Sat Feb 13 15:51:09 1993
- --- /usr/local/bin/psroff Sat Feb 13 17:45:46 1993
- ***************
- *** 1,8 ****
- #! /bin/sh
- ! # Emulate nroff with groff.
- prog="$0"
- ! T=-Tascii
- opts=
- for i
- --- 1,8 ----
- #! /bin/sh
- ! # Emulate psroff with groff.
- prog="$0"
- ! T=-Tps
- opts=
- for i
- ***************
- *** 25,30 ****
- --- 25,33 ----
- -Tascii|-Tlatin1)
- T=$1
- ;;
- + -t)
- + # ignore -- default is send to stdout
- + ;;
- -T*)
- # ignore other devices
- ;;
- ***************
- *** 49,53 ****
- rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
- # This shell script is intended for use with man, so warnings are
- # probably not wanted. Also load nroff-style character definitions.
- ! exec groff -Wall -mtty-char $T $opts $rest
- --- 52,56 ----
- rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
- # This shell script is intended for use with man, so warnings are
- ! # probably not wanted.
- ! exec groff -Wall $T $opts $rest
- Compilation Problems
- ====================
- * Compilation dies with
- y.tab.c: In function `int yyparse()':
- y.tab.c: `size_t' undeclared in namespace `std'
- * bison reports conflicts (either on stderr or in the `pic.output'
- file) while processing `pic.y', and the produced pic binary doesn't
- work at all.
- You need bison version 1.875b or greater. Alternatively, use yacc or
- byacc.
- ----------------------------------------------------------------------
- * There are many empty `Makefile.dep' files. Is this a bug?
- No. Real dependency files are created with a `make depend' call.
- ----------------------------------------------------------------------
- * On HP-UX, the compiler complains about missing symbol `alloca'.
- Say
- export LDFLAGS=-lPW
- before starting the configure script.
- ----------------------------------------------------------------------
- * The configure script fails on OS/390 (z/OS) Unix.
- [This has been fixed in z/OS V1R3 (aka OS/390 R13).]
- There is a bug in the Language Environment (LE) whereby the test
- program for static destructors fails. You will see the message
- `configure: error: a working C++ compiler is required'
- Applying PTF UQ42006 is supposed to fix this, but the test program is
- still returning the wrong value (1). To work around this problem, you
- can comment out the following in the configure script (near line 2029).
- This will effectively bypass the test (static constructors and
- destructors do actually work properly):
- #if { (eval echo "$as_me:2029: \"$ac_link\"") >&5
- # (eval $ac_link) 2>&5
- # ac_status=$?
- # echo "$as_me:2032: \$? = $ac_status" >&5
- # (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- # { (eval echo "$as_me:2034: \"$ac_try\"") >&5
- # (eval $ac_try) 2>&5
- # ac_status=$?
- # echo "$as_me:2037: \$? = $ac_status" >&5
- # (exit $ac_status); }; }; then
- # echo "$as_me:2039: result: yes" >&5
- #echo "${ECHO_T}yes" >&6
- #else
- # echo "$as_me: program exited with status $ac_status" >&5
- #echo "$as_me: failed program was:" >&5
- #cat conftest.$ac_ext >&5
- #echo "$as_me:2045: result: no" >&5
- #echo "${ECHO_T}no" >&6;{ { echo "$as_me:2046: error: a working C++ compiler is required" >&5
- #echo "$as_me: error: a working C++ compiler is required" >&2;}
- # { (exit 1); exit 1; }; }
- #fi
- ----------------------------------------------------------------------
- * I get errors when I try to compile groff with DEC C++.
- Fix the declaration of write() in <unistd.h> so that the second
- argument is a const char *. Fix the declaration of open() in
- <sys/file.h> so that the first argument is a const char *.
- ----------------------------------------------------------------------
- * On a host using Unix make (e.g. Solaris), if you are compiling for
- multiple architectures by building in a subdirectory, the make stops
- with a message like this:
- make: Fatal error: Don't know how to make target `assert.o'
- or like this:
- make: Fatal error: Can't find /u/src/groff/src/include/Makefile.sub': No such file or directory
- This occurs because GNU make and Unix make handle VPATH differently,
- and the groff build relies on GNU make's VPATH handling.
- Use GNU make <http://www.gnu.org/software/make/> to work around this.
- In Solaris 8 and 9, GNU make is on the Software Companion CD in
- package SFWgmake and is installed as /opt/sfw/bin/gmake. Prebuilt
- versions of GNU make for Solaris are also available from
- sunfreeware.com.
- ----------------------------------------------------------------------
- * On Ultrix, the make program stops with the message
- *** Error code 1
- Stop.
- for no apparent reason.
- Use GNU make.
- ----------------------------------------------------------------------
- * I'm having problems compiling groff on 386BSD 0.1.
- If you're using ash as /bin/sh, you'll need the following patch.
- *** gendef.sh.org Sun Jun 30 13:30:36 1991
- --- gendef.sh Sun Feb 28 10:23:49 1993
- ***************
- *** 3,9 ****
- file=$1
- shift
-
- ! defs="#define $1"
- shift
- for def
- do
- --- 3,10 ----
- file=$1
- shift
-
- ! x=$1
- ! defs="#define $x"
- shift
- for def
- do
- You'll also need to change dirnamemax.c so that it doesn't use
- pathconf().
- ----------------------------------------------------------------------
- * While compiling on Xenix, ranlib libgroff.a fails.
- The system ranlib can't handle externals longer than 40 characters.
- Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1
- instead.
- ----------------------------------------------------------------------
- * I get errors when I try to compile groff with Sun C++ version 3 or
- earlier.
- Groff requires header files that are moderately compatible with AT&T
- C++ and ANSI C. With some versions of Sun C++, the supplied header
- files need some of the following changes to meet this requirement:
- <string.h> must declare the mem* functions, (just add `#include
- <memory.h>' to <string.h>); the first argument to fopen and freopen
- should be declared as `const char *'; the first argument to fread
- should be declared as `void *'; the first argument to fwrite should be
- declared as `const void *'; malloc should be declared to return
- `void *'; in <alloca.h>, the declaration `extern "C" { void
- *__builtin_alloca(int); }' should be added; in <sys/signal.h> the
- return type and the second argument type of signal() should be changed
- to be `void (*)(int)'.
- You can either change them in place, or copy them to some other
- directory and include that directory with a -I option.
- ----------------------------------------------------------------------
- * I get errors when I try to compile groff with Forte Development 6
- or 6u1, or Sun C++ version 5.0 through 5.2.
- This is a known problem; see Sun bug #4301919. See Sun patches
- 109482, 109490, 109508, and 109509 for fixes.
- ----------------------------------------------------------------------
- * I get warnings from the Sun linker while using gcc 3.4.0:
- ld: warning: relocation error: R_SPARC_UA32:
- file groff/src/libs/libgroff/libgroff.a(getopt.o): symbol optarg:
- external symbolic relocation against non-allocatable
- section .debug_info; cannot be processed at runtime:
- relocation ignored
- This seems to be a known problem (Sun bugs #4910101 and #4910810,
- filed in September 2003; gcc bug #15599, filed May 2004) without a
- public fix as of this writing. A work-around is to use option
- `-gstabs+' instead of `-g' (and a high probability that the output is
- only debuggable with gdb but not with Sun's debuggers).
- ----------------------------------------------------------------------
- * 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.
- Make sure -DCFRONT_ANSI_BUG is included in DEFINES in the top-level
- Makefile. If that doesn't solve the problem, define INT_MIN as
- -INT_MAX in libgroff/lib.h.
- ----------------------------------------------------------------------
- * When compiling on MacOS X, groff compiles but does not run well,
- especially `eqn', causing many `can't break line' messages.
- Use ./configure CXX=g++2 then make as usual.