1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
COMPILING
rc was written in portable ANSI C. If you don't have an ANSI compiler
like gcc or something close (e.g., sgi's cc) read further down on
how to convert rc's source to old C.
rc uses GNU autoconf and automake. The following commands are all you
need to configure, build, test, and install rc.
$ sh configure
$ make
$ make trip
# make install
This will build rc in the source directory (see below for details on how
to build rc in a different directory).
There are lots of options you can give to configure to modify rc's
behaviour. You can also select a command line history library to link
against. For a summary of all options, run `sh configure --help'.
You can specify Makefile variables by setting the corresponding
environment variables. For example, you might want to set `CC=cc', to
prevent configure looking for gcc, or set an initial value for `LIBS',
as in the example below.
Here are the configure options you may want to use, in approximately
descending order of usefulness.
--with-editline
This option tells rc to use Simmule Turner's and Rich $alz's editline
package, which you can get from the following location. This is
essentially a lightweight version of GNU readline, providing EMACS
style command line editing and history.
ftp://ftp.cygnus.co.uk/people/tgoodwin/editline.tar.gz
If the editline library is not installed in a standard place, you can
tell configure where to find it by setting the environment variable
LIBS. For example, the maintainer builds rc by copying libedit.a into
the rc build directory and then running this configure command.
LIBS=-L. sh ../rc-1.5b3/configure --with-editline
--with-readline
This option tells rc to use the GNU readline package, which is similar
to editline, but has many more features. The readline package is
over 6 times the size of editline (whether you count lines of code,
or the library itself). As for editline, you can set the environment
variable LIBS if your readline library is not installed in a standard
place.
--enable-history
Use this option if you want to build and install the programs that
support a crude history mechanism.
You can't use `--with-editline' and `--with-readline' together, of course,
and if you have either of those you probably don't want to bother with
`--enable-history'.
--prefix /path
By default, `prefix' is /usr/local, which means that `make install'
installs rc (and possibly the history programs) in /usr/local/bin, and
man pages in /usr/local/man/man1. Use this option to change where
`make install' puts things.
--disable-builtin-echo
By default, the `echo' command is builtin to rc for efficiency reasons.
It is the only builtin which is not essential, and purists may wish
to omit it.
--with-addon
--with-addon=foo.c
On the other hand, non-purists may wish to add extra builtin commands.
An example of how to do this is included in the files addon.c and
addon.h, which will only be built if you specify `--with-addon'. If
your addons are in another file, you can specify that instead (but
beware that the interface file is still addon.h).
--disable-def-interp
--enable-def-interp=/bin/foo
By default, a program that fails with "Exec format error" is handed to
/bin/sh. This does the Right Thing for scripts that start with `:' to
indicate that they are sh scripts. You can disable this behaviour
entirely, or specify a different default interpreter.
--disable-def-path
--enable-def-path "/usr/local/bin","/usr/bin"
By default, if rc is started with no PATH, it uses a default path.
The default path is constructed at configure time, and consists
of each of the following directories that exist, in order.
/usr/local/bin /usr/bin /usr/ucb /bin .
You can disable this, or specify a different default path. Note that
the quote marks (") must be seen by configure; unless you are already
using rc, you will probably need to quote them to your shell.
--disable-job
By default, rc puts backgrounded processes into a new process group,
as though it were a job control shell (it isn't). This is usually
needed to work around bugs in application programs which install
signal handlers for the keyboard signals without checking whether the
signal was being ignored. This option disables the default behaviour,
making rc behave like a traditional sh. You are unlikely to want this
option on any Unix system.
--disable-protect-env
By default, rc encodes special characters in environment variables.
This is necessary on all known Unix systems to prevent sh either
dying or discarding the variables. This option disables the default
behaviour. You are unlikely to want this option on any Unix system.
After you've built rc, you may wish to run it through a test script
to see that everything is ok. Type `make trip' for this. This will
produce some output, and end with "trip is complete". If the trip ends
with "trip took a wrong turn..." please contact the maintainer.
BUILDING IN ANOTHER DIRECTORY
If you have a suitable `make', you can build rc in a different directory
from where the sources are held. This is particularly useful if you
are building rc for multiple architectures. All you need do is specify
the path to the configure script in the first step. Suitable `make's
include GNU, and SunOS, but not Irix, nor UnixWare.
YACC
The yacc that Sun ships with SunOS 4.1.1 calls malloc() to allocate
space for the state stack, and requires a call to YYACCEPT or YYABORT to
free this memory. This means that if rc takes an interrupt while parsing
a command (say, if ^C is typed), yacc will leak away this memory. The
solution is to use a yacc which statically allocates this array, such
as the yacc in the BSD distribution. Berkeley yacc-generated y.tab.c
and y.tab.h are shipped with rc in case you cannot get hold of Berkeley
yacc.
OLD C
If you need to convert rc's source into K&R C, you need to run the
source through a filter called "unproto", posted in comp.sources.misc.
A sample "cpp" shell script that I used to run unproto under SunOS is
supplied with rc.
|