Go to the previous, next section.
gawk
This chapter provides instructions for installing gawk on the
various platforms that are supported by the developers. The primary
developers support Unix (and one day, GNU), while the other ports were
contributed. The file `ACKNOWLEDGMENT' in the gawk
distribution lists the electronic mail addresses of the people who did
the respective ports.
gawk Distribution
This section first describes how to get and extract the gawk
distribution, and then discusses what is in the various files and
subdirectories.
gawk Distribution
gawk is distributed as a tar file compressed with the
GNU Zip program, gzip. You can
get it via anonymous ftp to the Internet host prep.ai.mit.edu.
Like all GNU software, it will be archived at other well known systems,
from which it will be possible to use some sort of anonymous uucp to
obtain the distribution as well.
You can also order gawk on tape or CD-ROM directly from the
Free Software Foundation. (The address is on the copyright page.)
Doing so directly contributes to the support of the foundation and to
the production of more free software.
Once you have the distribution (for example,
`gawk-2.15.0.tar.z'), first use gzip to expand the
file, and then use tar to extract it. You can use the following
pipeline to produce the gawk distribution:
# Under System V, add 'o' to the tar flags gzip -d -c gawk-2.15.0.tar.z | tar -xvpf -
This will create a directory named `gawk-2.15' in the current directory.
The distribution file name is of the form `gawk-2.15.n.tar.Z'. The n represents a patchlevel, meaning that minor bugs have been fixed in the major release. The current patchlevel is 0, but when retrieving distributions, you should get the version with the highest patchlevel.
If you are not on a Unix system, you will need to make other arrangements
for getting and extracting the gawk distribution. You should consult
a local expert.
gawk Distribution
gawk has a number of C source files, documentation files,
subdirectories and files related to the configuration process
(see section Compiling and Installing gawk on Unix),
and several subdirectories related to different, non-Unix,
operating systems.
The C and YACC source files are the actual gawk source code.
gawk under Unix, and the
rest for the various hardware and software combinations.
gawk has been ported, and which
have successfully run the test suite.
gawk since the last release or patch.
gawk's performance.
Most of these depend on the hardware or operating system software, and
are not limits in gawk itself.
troff source for a manual page describing gawk.
texinfo source file for this manual.
It should be processed with TeX to produce a printed manual, and
with makeinfo to produce the Info file.
gawk
for various Unix systems. They are explained in detail in
section Compiling and Installing gawk on Unix.
gawk on an Atari ST.
See section Installing gawk on the Atari ST, for details.
gawk under MS-DOS.
See section Installing gawk on MS-DOS, for details.
gawk under VMS.
See section Compiling, Installing, and Running gawk on VMS, for details.
awk programs, provided as a test suite for
gawk. You can use `make test' from the top level gawk
directory to run your version of gawk against the test suite.
If gawk successfully passes `make test' then you can
be confident of a successful port.
gawk on Unix
Often, you can compile and install gawk by typing only two
commands. However, if you do not use a supported system, you may need
to configure gawk for your system yourself.
gawk for a Supported Unix Version
After you have extracted the gawk distribution, cd
to `gawk-2.15'. Look in the `config' subdirectory for a
file that matches your hardware/software combination. In general,
only the software is relevant; for example sunos41 is used
for SunOS 4.1, on both Sun 3 and Sun 4 hardware.
If you find such a file, run the command:
# assume you have SunOS 4.1 ./configure sunos41
This produces a `Makefile' and `config.h' tailored to your
system. You may wish to edit the `Makefile' to use a different
C compiler, such as gcc, the GNU C compiler, if you have it.
You may also wish to change the CFLAGS variable, which controls
the command line options that are passed to the C compiler (such as
optimization levels, or compiling for debugging).
After you have configured `Makefile' and `config.h', type:
make
and shortly thereafter, you should have an executable version of gawk.
That's all there is to it!
(This section is of interest only if you know something about using the C language and the Unix operating system.)
The source code for gawk generally attempts to adhere to industry
standards wherever possible. This means that gawk uses library
routines that are specified by the ANSI C standard and by the POSIX
operating system interface standard. When using an ANSI C compiler,
function prototypes are provided to help improve the compile-time checking.
Many older Unix systems do not support all of either the ANSI or the
POSIX standards. The `missing' subdirectory in the gawk
distribution contains replacement versions of those subroutines that are
most likely to be missing.
The `config.h' file that is created by the configure program
contains definitions that describe features of the particular operating
system where you are attempting to compile gawk. For the most
part, it lists which standard subroutines are not available.
For example, if your system lacks the `getopt' routine, then
`GETOPT_MISSING' would be defined.
`config.h' also defines constants that describe facts about your
variant of Unix. For example, there may not be an `st_blksize'
element in the stat structure. In this case `BLKSIZE_MISSING'
would be defined.
Based on the list in `config.h' of standard subroutines that are missing, `missing.c' will do a `#include' of the appropriate file(s) from the `missing' subdirectory.
Conditionally compiled code in the other source files relies on the other definitions in the `config.h' file.
Besides creating `config.h', configure produces a `Makefile'
from `Makefile.in'. There are a number of lines in `Makefile.in'
that are system or feature specific. For example, there is line that begins
with `##MAKE_ALLOCA_C##'. This is normally a comment line, since
it starts with `#'. If a configuration file has `MAKE_ALLOCA_C'
in it, then configure will delete the `##MAKE_ALLOCA_C##'
from the beginning of the line. This will enable the rules in the
`Makefile' that use a C version of `alloca'. There are several
similar features that work in this fashion.
gawk for a New System
(This section is of interest only if you know something about using the
C language and the Unix operating system, and if you have to install
gawk on a system that is not supported by the gawk distribution.
If you are a C or Unix novice, get help from a local expert.)
If you need to configure gawk for a Unix system that is not
supported in the distribution, first see
section The Configuration Process.
Then, copy `config.in' to `config.h', and copy
`Makefile.in' to `Makefile'.
Next, edit both files. Both files are liberally commented, and the necessary changes should be straightforward.
While editing `config.h', you need to determine what library
routines you do or do not have by consulting your system documentation, or
by perusing your actual libraries using the ar or nm utilities.
In the worst case, simply do not define any of the macros for missing
subroutines. When you compile gawk, the final link-editing step
will fail. The link editor will provide you with a list of unresolved external
references--these are the missing subroutines. Edit `config.h' again
and recompile, and you should be set.
Editing the `Makefile' should also be straightforward. Enable or
disable the lines that begin with `##MAKE_whatever##', as
appropriate. Select the correct C compiler and CFLAGS for it.
Then run make.
Getting a correct configuration is likely to be an iterative process. Do not be discouraged if it takes you several tries. If you have no luck whatsoever, please report your system type, and the steps you took. Once you do have a working configuration, please send it to the maintainers so that support for your system can be added to the official release.
See section Reporting Problems and Bugs, for information on how to report
problems in configuring gawk. You may also use the same mechanisms
for sending in new configurations.
gawk on VMS
This section describes how to compile and install gawk under VMS.
gawk under VMS
To compile gawk under VMS, there is a DCL command procedure that
will issue all the necessary CC and LINK commands, and there is
also a `Makefile' for use with the MMS utility. From the source
directory, use either
$ @[.VMS]VMSBUILD.COM
or
$ MMS/DESCRIPTION=[.VMS]DECSRIP.MMS GAWK
Depending upon which C compiler you are using, follow one of the sets of instructions in this table:
CC/OPTIMIZE=NOLINE, which is essential for Version 3.0.
gawk 2.15 has been tested under VAX/VMS 5.5-1 using VAX C V3.2,
GNU C 1.40 and 2.3. It should work without modifications for VMS V4.6 and up.
gawk on VMS
To install gawk, all you need is a "foreign" command, which is
a DCL symbol whose value begins with a dollar sign.
$ GAWK :== $device:[directory]GAWK
(Substitute the actual location of gawk.exe for
`device:[directory]'.) The symbol should be placed in the
`login.com' of any user who wishes to run gawk,
so that it will be defined every time the user logs on.
Alternatively, the symbol may be placed in the system-wide
`sylogin.com' procedure, which will allow all users
to run gawk.
Optionally, the help entry can be loaded into a VMS help library:
$ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP
(You may want to substitute a site-specific help library rather than the standard VMS library `HELPLIB'.) After loading the help text,
$ HELP GAWK
will provide information about both the gawk implementation and the
awk programming language.
The logical name `AWK_LIBRARY' can designate a default location
for awk program files. For the `-f' option, if the specified
filename has no device or directory path information in it, gawk
will look in the current directory first, then in the directory specified
by the translation of `AWK_LIBRARY' if the file was not found.
If after searching in both directories, the file still is not found,
then gawk appends the suffix `.awk' to the filename and the
file search will be re-tried. If `AWK_LIBRARY' is not defined, that
portion of the file search will fail benignly.
gawk on VMS
Command line parsing and quoting conventions are significantly different
on VMS, so examples in this manual or from other sources often need minor
changes. They are minor though, and all awk programs
should run correctly.
Here are a couple of trivial tests:
$ gawk -- "BEGIN {print ""Hello, World!""}"
$ gawk -"W" version ! could also be -"W version" or "-W version"
Note that upper-case and mixed-case text must be quoted.
The VMS port of gawk includes a DCL-style interface in addition
to the original shell-style interface (see the help entry for details).
One side-effect of dual command line parsing is that if there is only a
single parameter (as in the quoted string program above), the command
becomes ambiguous. To work around this, the normally optional `--'
flag is required to force Unix style rather than DCL parsing. If any
other dash-type options (or multiple parameters such as data files to be
processed) are present, there is no ambiguity and `--' can be omitted.
The default search path when looking for awk program files specified
by the `-f' option is "SYS$DISK:[],AWK_LIBRARY:". The logical
name `AWKPATH' can be used to override this default. The format
of `AWKPATH' is a comma-separated list of directory specifications.
When defining it, the value should be quoted so that it retains a single
translation, and not a multi-translation RMS searchlist.
gawk under VMS POSIXIgnore the instructions above, although `vms/gawk.hlp' should still be made available in a help library. Make sure that the two scripts, `configure' and `mungeconf', are executable; use `chmod +x' on them if necessary. Then execute the following commands:
$ POSIX psx> configure vms-posix psx> make awktab.c gawk
The first command will construct files `config.h' and `Makefile'
out of templates. The second command will compile and link gawk.
Due to a make bug in VMS POSIX V1.0 and V1.1,
the file `awktab.c' must be given as an explicit target or it will
not be built and the final link step will fail. Ignore the warning
`"Could not find lib m in lib list"'; it is harmless, caused by the
explicit use of `-lm' as a linker option which is not needed
under VMS POSIX. Under V1.1 (but not V1.0) a problem with the yacc
skeleton `/etc/yyparse.c' will cause a compiler warning for
`awktab.c', followed by a linker warning about compilation warnings
in the resulting object module. These warnings can be ignored.
Once built, gawk will work like any other shell utility. Unlike
the normal VMS port of gawk, no special command line manipulation is
needed in the VMS POSIX environment.
gawk on MS-DOS
The first step is to get all the files in the gawk distribution
onto your PC. Move all the files from the `pc' directory into
the main directory where the other files are. Edit the file
`make.bat' so that it will be an acceptable MS-DOS batch file.
This means making sure that all lines are terminated with the ASCII
carriage return and line feed characters.
restrictions.
gawk has only been compiled with version 5.1 of the Microsoft
C compiler. The file `make.bat' from the `pc' directory
assumes that you have this compiler.
Copy the file `setargv.obj' from the library directory where it
resides to the gawk source code directory.
Run `make.bat'. This will compile gawk for you, and link it.
That's all there is to it!
gawk on the Atari STThis section assumes that you are running TOS. It applies to other Atari models (STe, TT) as well.
In order to use gawk, you need to have a shell, either text or
graphics, that does not map all the characters of a command line to
upper case. Maintaining case distinction in option flags is very
important (see section Invoking awk). Popular shells
like gulam or gemini will work, as will newer versions of
desktop. Support for I/O redirection is necessary to make it easy
to import awk programs from other environments. Pipes are nice to have,
but not vital.
If you have received an executable version of gawk, place it,
as usual, anywhere in your PATH where your shell will find it.
While executing, gawk creates a number of temporary files.
gawk looks for either of the environment variables TEMP
or TMPDIR, in that order. If either one is found, its value
is assumed to be a directory for temporary files. This directory
must exist, and if you can spare the memory, it is a good idea to
put it on a RAM drive. If neither TEMP nor TMPDIR
are found, then gawk uses the current directory for its
temporary files.
The ST version of gawk searches for its program files as
described in section The AWKPATH Environment Variable.
On the ST, the default value for the AWKPATH variable is
".,c:\lib\awk,c:\gnu\lib\awk".
The search path can be modified by explicitly setting AWKPATH to
whatever you wish. Note that colons cannot be used on the ST to separate
elements in the AWKPATH variable, since they have another, reserved,
meaning. Instead, you must use a comma to separate elements in the path.
If you are recompiling gawk on the ST, then you can choose a new
default search path, by setting the value of `DEFPATH' in the file
`...\config\atari'. You may choose a different separator character
by setting the value of `ENVSEP' in the same file. The new values will
be used when creating the header file `config.h'.
Although awk allows great flexibility in doing I/O redirections
from within a program, this facility should be used with care on the ST.
In some circumstances the OS routines for file handle pool processing
lose track of certain events, causing the computer to crash, and requiring
a reboot. Often a warm reboot is sufficient. Fortunately, this happens
infrequently, and in rather esoteric situations. In particular, avoid
having one part of an awk program using print
statements explicitly redirected to "/dev/stdout", while other
print statements use the default standard output, and a
calling shell has redirected standard output to a file.
When gawk is compiled with the ST version of gcc and its
usual libraries, it will accept both `/' and `\' as path separators.
While this is convenient, it should be remembered that this removes one,
technically legal, character (`/') from your file names, and that
it may create problems for external programs, called via the system()
function, which may not support this convention. Whenever it is possible
that a file created by gawk will be used by some other program,
use only backslashes. Also remember that in awk, backslashes in
strings have to be doubled in order to get literal backslashes.
The initial port of gawk to the ST was done with gcc.
If you wish to recompile gawk from scratch, you will need to use
a compiler that accepts ANSI standard C (such as gcc, Turbo C,
or Prospero C). If sizeof(int) != sizeof(int *), the correctness
of the generated code depends heavily on the fact that all function calls
have function prototypes in the current scope. If your compiler does
not accept function prototypes, you will probably have to add a
number of casts to the code.
If you are using gcc, make sure that you have up-to-date libraries.
Older versions have problems with some library functions (atan2(),
strftime(), the `%g' conversion in sprintf()) which
may affect the operation of gawk.
In the `atari' subdirectory of the gawk distribution is
a version of the system() function that has been tested with
gulam and msh; it should work with other shells as well.
With gulam, it passes the string to be executed without spawning
an extra copy of a shell. It is possible to replace this version of
system() with a similar function from a library or from some other
source if that version would be a better choice for the shell you prefer.
The files needed to recompile gawk on the ST can be found in
the `atari' directory. The provided files and instructions below
assume that you have the GNU C compiler (gcc), the gulam shell,
and an ST version of sed. The `Makefile' is set up to use
`byacc' as a `yacc' replacement. With a different set of tools some
adjustments and/or editing will be needed.
cd to the `atari' directory. Copy `Makefile.st' to
`makefile' in the source (parent) directory. Possibly adjust
`../config/atari' to suit your system. Execute the script `mkconf.g'
which will create the header file `../config.h'. Go back to the source
directory. If you are not using gcc, check the file `missing.c'.
It may be necessary to change forward slashes in the references to files
from the `atari' subdirectory into backslashes. Type make and
enjoy.
Compilation with gcc of some of the bigger modules, like
`awk_tab.c', may require a full four megabytes of memory. On smaller
machines you would need to cut down on optimizations, or you would have to
switch to another, less memory hungry, compiler.
Go to the previous, next section.