MKPKG -- Package maintenance utility.

    The MKPKG utility is used to maintain the IRAF system libraries as well
as the system executables and the applications packages.  The file "mkpkg.csh"
in this directory will make and install the initial mkpkg.e executable.
The libraries lib$libboot.a and lib$libos.a must have been made first.
Once MKPKG is up it can be used to remake itself.


NOTES

    The MKPKG utility is used to keep libraries and/or packages up to date.
The dates of the library modules are compared to the corresponding SOURCE
(not object) files in the directories contributing to the library.
Any source files newer than their corresponding library modules are
compiled and the library is updated.  Note that the sources contributing
to the library may reside in multiple subdirectories as well as in the
current directory.  Each source file may depend on zero or more other files.
If any of these files are newer than the source file, the source file is
recompiled and replaced in the library.

MKPKG is built upon a preprocessor front end providing macro replacement
and conditional interpretation facilities.  These facilities, in combination
with the OS escape mechanism used to send commands to the host system,
make it possible to use MKPKG for more than just updating libraries.

As far as possible, the system dependent functions required by MKPKG have
been isolated and placed in separate small files.  The bulk of the code is
machine independent.  Additional system dependent functions are provided
by the BOOTLIB library (LIBBOOT) and by the IRAF kernel (LIBOS).  The MKPKG
specific functions required are the following:
 
	[1] Given the NAME of a source file, return the date of the
	    corresponding object module in a library.
	[2] Replace (or add) a series of object modules in a library,
	    creating the library if it does not already exist.
	[3] "Rebuild" the library after all updates are complete.

The library functions are normally implemented by formatting a command
for the host librarian utility and sending it to the host with the ZOSCMD
utility.  Note that an entire command script can be built in a temporary
file if the ZOSCMD interface is too inefficient for multiple small calls
on your system.

All filenames in the portable code (and in the Makelib files) are in the
IRAF format, which is very similar to UNIX format.  Do not change the high
level code to manipulate host system filenames directly.  All filename
mapping should be performed in the host interface code; the VFN2OSFN
function is convenient to use for this purpose.

For simplicity, most buffers are fixed in size.  Dynamically allocating
everything is less efficient and is not warranted since the memory
requirements of this program are modest.  If a buffer overflows simply
increase the allocation below and remake mkpkg.
