404 lines
13 KiB
Gnuplot
404 lines
13 KiB
Gnuplot
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.
|