home *** CD-ROM | disk | FTP | other *** search
- Groff has been compiled on a Sun 4 under SunOS 4.0.3 with g++ 1.37.1
- and with AT&T C++ 2.0, and on a 386 PC under 386/ix 2.0.1 with g++
- 1.37.1 using Michael Bloom's GNU COFF patches. You may encounter
- problems on other machines that I cannot anticipate.
-
- If you are using g++, you will need to install the header files from
- libg++. The only other parts of libg++ used by groff are contained in
- the files xyzzy.c and gnulib3.c; the libg++.a that I use contains only
- xyzzy.o and gnulib3.o. You don't need xyzzy.o unless you're using GNU
- ld.
-
- If you are using g++ 1.37.2 alpha, you'll need the following fix (from
- Michael Tiemann):
-
- *** cplus-tree.c~ Sat Jun 23 16:10:41 1990
- --- cplus-tree.c Sat Jun 30 23:45:09 1990
- ***************
- *** 685,688 ****
- --- 685,689 ----
- }
-
- + /* Constructor for hashed lists. */
- tree
- hash_tree_chain (value, chain)
- ***************
- *** 701,705 ****
- --- 702,721 ----
- }
-
- + /* Similar, but used for concatenating two lists. */
- tree
- + hash_chainon (list1, list2)
- + tree list1, list2;
- + {
- + if (list2 == 0)
- + return list1;
- + if (list1 == 0)
- + return list2;
- + if (TREE_CHAIN (list1) == NULL_TREE)
- + return hash_tree_chain (TREE_VALUE (list1), list2);
- + return hash_tree_chain (TREE_VALUE (list1),
- + hash_chainon (TREE_CHAIN (list1), list2));
- + }
- +
- + tree
- build_decl_list_1 (value)
- tree value;
- ***************
- *** 926,930 ****
- {
- if (DECL_NAME (decl))
- ! return IDENTIFIER_POINTER (DECL_NAME (decl));
- return "((anonymous))";
- }
- --- 942,950 ----
- {
- if (DECL_NAME (decl))
- ! {
- ! if (THIS_NAME_P (DECL_NAME (decl)))
- ! return "this";
- ! return IDENTIFIER_POINTER (DECL_NAME (decl));
- ! }
- return "((anonymous))";
- }
- *** cplus-parse.y~ Mon Jun 4 23:52:34 1990
- --- cplus-parse.y Sat Jun 30 23:45:09 1990
- ***************
- *** 501,505 ****
- error ("no base initializers given following ':'");
- setup_vtbl_ptr ();
- ! }
- ;
-
- --- 501,505 ----
- error ("no base initializers given following ':'");
- setup_vtbl_ptr ();
- ! }
- ;
-
- ***************
- *** 1274,1278 ****
- { $$ = hash_tree_chain ($1, $2); }
- | declmods typespec reserved_declspecs
- ! { $$ = hash_tree_chain ($2, chainon ($3, $1)); }
- ;
-
- --- 1274,1278 ----
- { $$ = hash_tree_chain ($1, $2); }
- | declmods typespec reserved_declspecs
- ! { $$ = hash_tree_chain ($2, hash_chainon ($3, $1)); }
- ;
-
- ***************
- *** 1319,1323 ****
- { $$ = decl_tree_cons (NULL_TREE, $1, $2); }
- | nonempty_type_quals typespec reserved_typespecquals
- ! { $$ = decl_tree_cons (NULL_TREE, $2, chainon ($3, $1)); }
- ;
-
- --- 1319,1323 ----
- { $$ = decl_tree_cons (NULL_TREE, $1, $2); }
- | nonempty_type_quals typespec reserved_typespecquals
- ! { $$ = decl_tree_cons (NULL_TREE, $2, hash_chainon ($3, $1)); }
- ;
-
-
- If you're using g++ 1.39 on a sparc you'll probably want to apply the
- following fix (from Casper H.S. Dik):
-
- *** config/out-sparc.c.org Wed Dec 12 03:13:57 1990
- --- config/out-sparc.c Sat Feb 23 23:21:26 1991
- ***************
- *** 908,925 ****
- else if (GET_CODE (XEXP (operands[1], 0)) == PLUS)
- {
- rtx inc_reg = XEXP (XEXP (operands[1], 0), 0);
- if (inc_reg == frame_pointer_rtx
- && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == REG
- ! && XEXP (XEXP (operands[1], 0), 0) != frame_pointer_rtx)
- inc_reg = XEXP (XEXP (operands[1], 0), 1);
- if (inc_reg == frame_pointer_rtx)
- {
- output_asm_insn ("mov %%fp,%%g1", xoperands);
- inc_reg = gen_rtx (REG, SImode, 1);
- }
- xoperands[1] = inc_reg;
- output_asm_insn ("add 4,%1,%1", xoperands);
- ! xoperands[1] = operands[1];
- output_asm_insn ("ld %1,%0", xoperands);
- xoperands[1] = inc_reg;
- output_asm_insn ("add -4,%1,%1", xoperands);
- --- 908,931 ----
- else if (GET_CODE (XEXP (operands[1], 0)) == PLUS)
- {
- rtx inc_reg = XEXP (XEXP (operands[1], 0), 0);
- + rtx from = operands[1];
- if (inc_reg == frame_pointer_rtx
- && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == REG
- ! && XEXP (XEXP (operands[1], 0), 1) != frame_pointer_rtx)
- inc_reg = XEXP (XEXP (operands[1], 0), 1);
- if (inc_reg == frame_pointer_rtx)
- {
- output_asm_insn ("mov %%fp,%%g1", xoperands);
- inc_reg = gen_rtx (REG, SImode, 1);
- + from = gen_rtx (GET_CODE (operands[1]),
- + GET_MODE (operands[1]),
- + gen_rtx (PLUS, GET_MODE (XEXP (operands[1], 0)),
- + inc_reg,
- + XEXP (XEXP (operands[1], 0), 1)));
- }
- xoperands[1] = inc_reg;
- output_asm_insn ("add 4,%1,%1", xoperands);
- ! xoperands[1] = from;
- output_asm_insn ("ld %1,%0", xoperands);
- xoperands[1] = inc_reg;
- output_asm_insn ("add -4,%1,%1", xoperands);
- ***************
- *** 989,1006 ****
- else if (GET_CODE (XEXP (operands[0], 0)) == PLUS)
- {
- rtx inc_reg = XEXP (XEXP (operands[0], 0), 0);
- if (inc_reg == frame_pointer_rtx
- && GET_CODE (XEXP (XEXP (operands[0], 0), 1)) == REG
- ! && XEXP (XEXP (operands[0], 0), 0) != frame_pointer_rtx)
- inc_reg = XEXP (XEXP (operands[0], 0), 1);
- if (inc_reg == frame_pointer_rtx)
- {
- output_asm_insn ("mov %%fp,%%g1", xoperands);
- inc_reg = gen_rtx (REG, SImode, 1);
- }
- xoperands[0] = inc_reg;
- output_asm_insn ("add 4,%0,%0", xoperands);
- ! xoperands[0] = operands[0];
- output_asm_insn ("st %r1,%0", xoperands);
- xoperands[0] = inc_reg;
- output_asm_insn ("add -4,%0,%0", xoperands);
- --- 995,1018 ----
- else if (GET_CODE (XEXP (operands[0], 0)) == PLUS)
- {
- rtx inc_reg = XEXP (XEXP (operands[0], 0), 0);
- + rtx to = operands[0];
- if (inc_reg == frame_pointer_rtx
- && GET_CODE (XEXP (XEXP (operands[0], 0), 1)) == REG
- ! && XEXP (XEXP (operands[0], 0), 1) != frame_pointer_rtx)
- inc_reg = XEXP (XEXP (operands[0], 0), 1);
- if (inc_reg == frame_pointer_rtx)
- {
- output_asm_insn ("mov %%fp,%%g1", xoperands);
- inc_reg = gen_rtx (REG, SImode, 1);
- + to = gen_rtx (GET_CODE (operands[0]),
- + GET_MODE (operands[0]),
- + gen_rtx (PLUS, GET_MODE (XEXP (operands[0], 0)),
- + inc_reg,
- + XEXP (XEXP (operands[0], 0), 1)));
- }
- xoperands[0] = inc_reg;
- output_asm_insn ("add 4,%0,%0", xoperands);
- ! xoperands[0] = to;
- output_asm_insn ("st %r1,%0", xoperands);
- xoperands[0] = inc_reg;
- output_asm_insn ("add -4,%0,%0", xoperands);
-
- On a Sun 3 and other 68k machines, using libg++ 1.37.0 you will need
- to apply the following change to g++-include/math.h:
-
- *** math.h- Sat Jan 6 14:09:52 1990
- --- math.h Tue Mar 13 02:07:01 1990
- ***************
- *** 32,39 ****
-
-
- #ifdef __HAVE_68881__ /* MC68881/2 Floating-Point Coprocessor */
- - #include <math-68881.h>
- extern "C" { /* fill in what we've left out */
-
- double acosh(double);
- double asinh(double);
- --- 32,39 ----
-
-
- #ifdef __HAVE_68881__ /* MC68881/2 Floating-Point Coprocessor */
- extern "C" { /* fill in what we've left out */
- + #include <math-68881.h>
-
- double acosh(double);
- double asinh(double);
-
- If you have bison 1.11, you will need to apply the following fix to
- bison.simple if you want change any of the grammars:
-
- *** bison.simple.~1~ Fri Aug 10 12:13:41 1990
- --- bison.simple Fri Aug 10 12:24:46 1990
- ***************
- *** 20,26 ****
- --- 20,28 ----
-
-
- #ifdef __GNUC__
- + #ifndef alloca
- #define alloca __builtin_alloca
- + #endif /* Not alloca. */
- #else /* Not GNU C. */
- #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
- #include <alloca.h>
- ***************
- *** 114,123 ****
- --- 116,129 ----
- /* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
- static void
- + #ifdef __cplusplus
- + __yy_bcopy (char *from, char *to, int count)
- + #else
- __yy_bcopy (from, to, count)
- char *from;
- char *to;
- int count;
- + #endif
- {
- register char *f = from;
- register char *t = to;
- ***************
- *** 127,133 ****
- *t++ = *f++;
- }
-
- ! #line 131 "/usr/local/lib/bison.simple"
- int
- yyparse()
- {
- --- 133,139 ----
- *t++ = *f++;
- }
-
- ! #line 137 "/usr/local/lib/bison.simple"
- int
- yyparse()
- {
-
- For gas 1.36 on a Sun 4, the following fix is desirable:
-
- *** sparc.c.~1~ Mon May 21 19:06:18 1990
- --- sparc.c Sat Aug 11 11:09:12 1990
- ***************
- *** 56,65 ****
- --- 56,67 ----
- static struct hash_control *op_hash = NULL;
-
- static void s_seg(), s_proc(), s_data1(), s_reserve(), s_common();
- + static void s_sparc_align();
- extern void s_globl(), s_long(), s_short(), s_space(), cons();
-
- pseudo_typeS
- md_pseudo_table[] = {
- + { "align", s_sparc_align, 0 },
- { "common", s_common, 0 },
- { "global", s_globl, 0 },
- { "half", cons, 2 },
-
- *** read.c.~1~ Tue Mar 6 21:08:29 1990
- --- read.c Sat Aug 11 11:07:23 1990
- ***************
- *** 175,181 ****
- --- 175,183 ----
- potable[] =
- {
- { "abort", s_abort, 0 },
- + #ifndef SPARC
- { "align", s_align, 0 },
- + #endif
- { "ascii", stringer, 0 },
- { "asciz", stringer, 1 },
- { "byte", cons, 1 },
-
-
- On a Sequent Symmetry S27 running Dynix 3.0.17, you'll need to use GNU
- make or add 'MAKE=make' to Makefiles which use $(MAKE). You'll also
- need to change
-
- dev=${GROFF_TYPESETTER:-@DEVICE@}
-
- to
-
- dev=$GROFF_TYPESETTER
-
- in groff.sh. You should use gcc to compile xditview.
-
- You should only have to edit the top-level Makefile. The comments
- should make it clear what has to be changed. If you don't have a
- separate directory tree for local manual pages you can make
- MAN[157]EXT be l (that's an ell) or n, and MANROOT be /usr/man. The
- changes you make to the top-level Makefile will be propagated to
- sub-makes, but this won't happen if you invoke make in the
- sub-directories.
-
- You might also need to edit groff.sh. This is a shell-script that
- runs gtroff, an appropriate postprocessor and optionally various
- preprocessors. (Actually, the shell-script is created from groff.sh
- by substituting for some variables surrounded by @s). If your kernel
- doesn't understand #!, you will need to arrange for the script to be
- run by /bin/sh in some other way.
-
- If you want to use existing troff drivers you should change groff.sh
- so that it recognises them. It is also a good idea to copy over the
- dev* directory for the device into a directory that's only searched by
- groff (eg /usr/local/lib/groff/font), so that you can take advantage
- of the groff extensions to the DESC and font formats. Groff only uses
- the ASCII versions of the device files so you only need copy them. If
- you want to use GNU eqn, it is essential that the font files contain
- correct height and depth information. The format for this information
- is described in the groff_font(5) page. The best way to add this
- information is to modify the program that generates the font files.
- As a last resort you could try using the program addftinfo: it
- attempts to guess plausible heights and depths. To obtain good
- results you would probably have to do more work on addftinfo.
-
- To compile everything, just do a `make'. If that works, then do a
- `make install'.
-
- If you have problems compiling pic/pic.tab.c or eqn/eqn.tab.c, you might
- want to try using your system's yacc. Set YACC=yacc in the top-level
- Makefile, and also do
-
- mv pic/pic.tab.c pic/pic.tab.c.dist
- mv eqn/eqn.tab.c eqn/eqn.tab.c.dist
-
- so that the parsers will be regenerated using yacc (the supplied
- *.tab.[ch] files were generated by bison.)
-
- If you want to install xditview, you'll need to do that separately:
- change directory to xditview, edit the Makefile, do a make and a make
- install. You'll need to be running X11R4.
-
- The dvi files produced by grodvi can use fonts at non-standard
- magnifications. You may need to compile fonts with Metafont at these
- magnifications. The CompileFonts script in the dvi/devdvi directory
- may help you to do this. (It will take a *long* time.)
-
- If you have problems printing existing troff documents, read the
- section on `Incompatbilities' in gtroff(1). If you have existing
- macro packages that are in the habit of omitting the space between a
- macro or request and its arguments, it is good idea to produce a
- version with spaces so that you can use it with groff (without having
- to use the -C flag). The file macros/fixmacros.sed is a sed script
- which will attempt to edit a file of macros so that it can be used
- with groff without the -C flag. If you have the DWB 2.0 mm macros
- installed on your machine, you might want to do a `make install.mm';
- this will copy the mm macros to groff's macro directory and fix a few
- problems that occur when using the mm macros with groff; this requires
- the `patch' program. If the patch in macros/mm.diff is rejected,
- carefully apply it by hand.
-
- You can share groff with a friend who has the same type of machine as
- you, but does not have a C++ compiler. First do `make bindist'; this
- will create a subdirectory `bindist' containing a set of binaries, a
- Makefile and a README. If you want to strip the binaries, now do a
- `make strip' in the bindist directory. Rename the bindist directory
- to something more meaningful, tar it up, and give to your friend along
- with the original groff source distribution. Your friend can then
- install groff just by editing the Makefile in the bindist directory
- and doing a make there; this will automatically install the non-binary
- parts of the groff source distribution as well as the binaries from
- the bindist directory.
-