256 lines
11 KiB
Plaintext
256 lines
11 KiB
Plaintext
.Go 9 "MAKEFILE"
|
|
.PP
|
|
On most Operating Systems, and with most compilers, the "Makefile.mix"
|
|
file is used to control compilation and installation of \*E.
|
|
This section of the manual describes the overall structure of "Makefile.mix",
|
|
and the various configuration options in it.
|
|
.NH 2
|
|
Configuring the Makefile
|
|
.PP
|
|
Begin by copying "Makefile.mix" to "Makefile".
|
|
Never alter the original "Makefile.mix".
|
|
.PP
|
|
Most of the configuration options are controlled via a group of macros.
|
|
Makefile.mix begins with several pre-configured sets of macro definitions \-
|
|
one group for each of the most common supported systems.
|
|
As shipped, all of these macro definitions are commented out;
|
|
you must either uncomment out one of the groups, or
|
|
(for less common systems) construct an entirely new group.
|
|
.NH 2
|
|
Using the Makefile
|
|
.PP
|
|
After configuring the Makefile, you can run "make" to compile the programs.
|
|
There are also some other useful things that the Makefile can do...
|
|
.LD
|
|
.ta 1i 2.2i
|
|
COMMAND RESULT
|
|
make compile all programs
|
|
make install copy the programs to the BIN directory
|
|
make clean remove all object files
|
|
make clobber remove everything except source & documentation
|
|
make uue produce uuencoded compressed tar archives of the source
|
|
make sh produce shar archives of the source
|
|
.DE
|
|
.PP
|
|
Note that the last two will probably work only under UNIX.
|
|
.NH 2
|
|
What "make install" does
|
|
.PP
|
|
To install elvis, we should copy all of the executables into a directory
|
|
where users can find them;
|
|
copy the documentation into a directory where the on-line manual program
|
|
can find them;
|
|
and arrange for edit buffers to be preserved after a system crash.
|
|
The "make install" command tries to do this automatically,
|
|
but there are problems.
|
|
.PP
|
|
Practically all operating systems allow programs to be installed different
|
|
directories.
|
|
As shipped, Makefile.mix contains somebody's best guess as to where you'd
|
|
like them to go.
|
|
You should double check it, though.
|
|
The BIN macro controls where the programs will be installed.
|
|
.PP
|
|
On UNIX systems the "elvprsv" and "elvrec" programs need to be
|
|
installed as SUID-root programs.
|
|
Consequently, you must run "make install" as root;
|
|
then they will automatically be installed as SUID-root.
|
|
.PP
|
|
For text to be recovered after a crash, you need to arrange for the
|
|
"elvprsv" program to be run before the /tmp file is cleaned.
|
|
This means that the /etc/rc file (or whatever) needs to be edited.
|
|
If you have a SysV UNIX system which uses a /etc/rc2.d directory for storing
|
|
start-up commands, then you're lucky.
|
|
"make install" will detect that /etc/rc2.d exists and attempt to
|
|
automatically create a file called "/etc/rc2.d/S03elvis" which runs elvprsv.
|
|
However, for non-UNIX systems, or UNIX systems which don't have a /etc/rc2.d
|
|
directory, you'll need to do this by hand.
|
|
See the "Versions" section of the manual for hints about doing this on
|
|
your particular system.
|
|
.PP
|
|
Non-UNIX systems don't have a standard place where UNIX-style man-pages
|
|
go, so "make install" doesn't attempt to install documentation on those
|
|
systems.
|
|
.PP
|
|
On UNIX systems, there is no standard place either, but you can be
|
|
pretty sure that your system has a non-standard one.
|
|
There is a shell script called "instman.sh" which attempts to figure
|
|
out where the man-pages belong on your system, and then copies them there.
|
|
You might need to edit "instman.sh" to make it work, but try it as-is first.
|
|
"instman.sh" is automatically run by "make install".
|
|
.PP
|
|
Note: It is safe to run "make install" more than once.
|
|
.NH 2
|
|
Summary of Macros
|
|
.PP
|
|
The following describes the configuration macros.
|
|
With most versions of make, a blank macro can simply be left undefined.
|
|
.IP OBJ
|
|
This is the filename extension for unlinked object files
|
|
\- usually .o, but MS-DOS uses .obj.
|
|
.IP EXE
|
|
This is the filename extension for elvis executable file
|
|
\- usually nothing, but MS-DOS uses .exe,
|
|
and other operating systems may use something else.
|
|
.IP COM
|
|
This is the filename extension for the executables of elvis' support programs
|
|
\- usually the same as the EXE macro, but since the support programs are all
|
|
much smaller that elvis, MS-DOS can use the .com format.
|
|
.IP EXTRA
|
|
This is a space-delimited list of version-specific object files to be linked
|
|
into elvis.
|
|
Typically, this list will contain at least one object file which was written
|
|
specifically for a given operating system.
|
|
It may also contain "tinytcap$(OBJ)" or "tinyprnt$(OBJ)".
|
|
.IP EXTRA2
|
|
This is a space-delimited list of version-specific object files used in elvis
|
|
and a few of the support programs.
|
|
For UNIX-like systems, this is typically an empty list.
|
|
For non-UNIX systems, it will usually either be empty, or it will contain
|
|
the name of an object file which contains functions which emulate certain
|
|
UNIX system calls.
|
|
(Not all non-UNIX systems need any special emulation functions, because
|
|
all C libraries try to emulate UNIX. You only need an EXTRA2 list if
|
|
the library doesn't emulate UNIX well enough.)
|
|
.IP LIBS
|
|
This is a list of library flags used while linking elvis.
|
|
UNIX systems need "-ltermcap" or something similar, unless the EXTRA
|
|
macro includes "tinytcap$(OBJ)".
|
|
Most other operating systems use "tinytcap$(OBJ)" and don't need anything else,
|
|
so they leave the LIBS list empty.
|
|
.IP BIN
|
|
This is the directory where executables should be installed by "make install".
|
|
.IP CC
|
|
This is the C compiler command, possibly with "memory model" flags.
|
|
.IP CFLAGS
|
|
This lists the compiler flags used to select compile-time options.
|
|
The "CFLAGS" section of this manual describes this in detail.
|
|
.IP LNK
|
|
This is the name of the linker.
|
|
If you want to use $(CC) as your linker, then you can leave LNK undefined.
|
|
.IP LFLAGS
|
|
This is a list of linker flags used to select link-time options.
|
|
It is almost always blank.
|
|
.IP SMALL
|
|
The flag for special small memory model compilation \- usually blank.
|
|
.IP OF
|
|
The link flag to control the output file's name \- usually -o<space>.
|
|
The Sun version of "make" strips off trailing whitespace, so a pair
|
|
of empty quotes has been added after the space, to protect it.
|
|
On non-Suns, this isn't necessary.
|
|
.IP RF
|
|
The flag used to denote "compile but don't link" \- usually -c
|
|
.IP PROGS
|
|
This is a space-delimited list of all programs.
|
|
This list always includes elvis, ctags, ref, elvrec, and elvprsv.
|
|
Also, everybody gets fmt except for BSD UNIX; it already has its own
|
|
version of fmt as standard equipment.
|
|
.IP
|
|
Most non-UNIX systems also include the vi, ex, and view aliases.
|
|
(UNIX doesn't need those aliases in the PROGS list because it creates
|
|
them via file links during installation.)
|
|
OS-9 doesn't include the ex alias, because there is already a command
|
|
by that name built into its standard shell.
|
|
.IP
|
|
Note: some MS-DOS configurations break this list into two smaller lists,
|
|
to compensate for MS-DOS's limitations on command line length.
|
|
.IP CHMEM
|
|
This is either blank, or a command to be run immediately after linking elvis.
|
|
Under Minix and Coherent, elvis needs to have extra space assigned for the
|
|
stack & heap after it has been linked,
|
|
so their commands to do that are placed here.
|
|
Most other operating systems generally either don't need to have their stacks
|
|
enlarged, or they enlarge it during linking.
|
|
.IP SORT
|
|
This should be defined to be -DSORT if you want your tags list to be sorted,
|
|
or blank if you want it unsorted.
|
|
The real vi requires a sorted tags file, so for the sake of compatibility
|
|
all of the UNIX configurations use -DSORT.
|
|
Elvis doesn't need a sorted tags file, though, so on non-UNIX systems you
|
|
can leave this macro blank.
|
|
.IP RM
|
|
This is the name of a program that deletes files unconditionally.
|
|
It is used during "make clean".
|
|
RM is defined as "rm -f" for UNIX systems, or "del" for most others.
|
|
.IP CP
|
|
This is the name of a program that copies files.
|
|
\- usually "cp" or "copy".
|
|
It is used during "make install".
|
|
.IP SYS
|
|
This is the type of system.
|
|
It is used to select an appropriate style of linking and installation
|
|
that are used by "make" and "make install", respectively.
|
|
The available types are:
|
|
.LD
|
|
.ta 2i 3i
|
|
unx UNIX and UNIX-like systems
|
|
dos MS-DOS
|
|
ami AmigaDos
|
|
tos Atari TOS
|
|
os9 OS-9/68k
|
|
vms VAX/VMS
|
|
xdos cross-compiled on SCO for MS-DOS
|
|
.DE
|
|
.IP DUMMY
|
|
This is used as the "source" filename in the dependency list of
|
|
targets which are supposed to be unconditionally compiled.
|
|
It is usually nothing since most versions of "make" treat an
|
|
empty source file list as a special case,
|
|
but OS-9 needs it defined as "dummy" and further requires that
|
|
there be no actual file named dummy.
|
|
.IP CFG
|
|
The is the name of the compiler configuration file \- usually blank,
|
|
since most compilers don't need a configuration file.
|
|
Some MS-DOS compilers need it, though.
|
|
.NH 2
|
|
Structure of Makefile.mix
|
|
.PP
|
|
Makefile.mix begins with several sets of commented out configuration
|
|
macro definitions, as described above.
|
|
A comment saying "The rest of this Makefile contains no user-serviceable parts"
|
|
marks the end of this section.
|
|
Most people won't need to edit anything after that.
|
|
.PP
|
|
This is followed by macro definitions which are identical,
|
|
regardless of your operating system.
|
|
The OBJS macros list the object files that form the portable parts of
|
|
elvis, and are used together with the EXTRA and EXTRA2 configuration macros
|
|
during linking.
|
|
.PP
|
|
The SRC macros list all of the files mentioned in the "MANIFEST" file.
|
|
These are used to bundle the source code via "make uue" or "make sh".
|
|
.PP
|
|
This is followed by a target named "all" which depends on all of the
|
|
programs listed in the PROGS configuration macro.
|
|
This is followed by detailed instructions describing how each file is
|
|
compiled and linked.
|
|
The only exceptions are the "elvis" program, and the various forms of the
|
|
"alias" program.
|
|
.PP
|
|
Linking a big program like elvis is non-standard on some systems.
|
|
To support this, we just say that elvis depends on "linkelv.$(SYS)",
|
|
where "$(SYS)" is replaced by whatever you defined the SYS configuration
|
|
macro to be.
|
|
The various link styles are listed after that.
|
|
The only really tricky one is for DOS.
|
|
Since the list of files to be linked is too long to fit on a DOS command line,
|
|
a customized response file is created, and the name of the response file
|
|
is passed instead.
|
|
The exact format of the response file depends on the compiler you're using.
|
|
.PP
|
|
This is followed by system-dependent ways of linking the "alias" object
|
|
file to create multiple executables.
|
|
For most systems, we only really link it once to form the "ex" executable,
|
|
and then copy that executable to form the "vi", "view", and "input" executables.
|
|
OS-9, though, doesn't need an "ex" executable and it requires actual
|
|
linking for each alias.
|
|
.PP
|
|
Next comes installation, in all its system dependent forms.
|
|
This uses the now-familiar trick of saying that the "install" target
|
|
depends on a bogus file named "inst.$(SYS)" and then listing each
|
|
installation technique after that.
|
|
There should be no surprises here.
|
|
.PP
|
|
The rest of Makefile.mix contains a few handy pseudo-targets,
|
|
such as "make clean".
|