[comp.sources.misc] v15i052: dmake version 3.6

dvadura@watdragon.waterloo.edu (Dennis Vadura) (10/15/90)

Posting-number: Volume 15, Issue 52
Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
Archive-name: dmake-3.6/part00

#!/bin/sh
# This is the DMAKE version 3.6 distribution.  DMAKE is a Make like tool that
# has been written by me and has been used by individuals at the University of
# Waterloo for about a year and a half now.  This release replaces the previous
# version 3.5 release which is no longer supported.  Please read the file
# 'readme/release' which accompanies this distribution and describes details
# of this release (This note is found in readme/cover).
#
# This release addresses a claim made by Mortice Kern Systems of Waterloo,
# Ontario, Canada.  See below or the file readme/release for details.  I
# therefore ask that all versions previous versions of dmake distributed as
# version 3.5 patch level 1 and patch level 2 be removed from any archive
# sites on which they reside and be replaced by this release.
# 
# dmake is available for anonymous ftp from watmsg.uwaterloo.ca address is
# 129.97.129.9.  It is in the pub/src directory, set your mode to binary,
# and copy either:
# 
# 	dmake-3.6.tar.Z		- compressed tar format
# 	dmake-3.6.zoo		- zoo archive
# 
# dmake is different from other versions of make in that it supports significant
# enhancements (See the man page).  A short summary of the more important
# ones follows:
# 
# 	. support for portable makefiles
# 	. runs on many platforms (DOS, generic unix [sysv and bsd4.3],
# 	  apollo, and others)
# 	. significantly enhanced macro facilities
# 	. transitive closure on inference graph
# 	. sophisticated inference algorithm
# 	. support for traversing the file sytem both during making of targets
# 	  and during inference
# 	. %-meta rules for specifying rules to be used for inferring
# 	  prerequisites
# 	. highly configurable
# 	. support for libraries
# 	. parallel making of targets on architectures that support it
# 	. attributed targets
# 	. text diversions
# 	. group recipes
# 	. swapping itself to DISK under MSDOS
# 	. supports MKS extended argument passing convention
# 
# All code found in this distribution is original and written by me except where
# noted in the source and the following:
# 
# - dbug package from Fred Fish  (dmake DEBUG=1, to make a debugging version
#   of dmake)
# 
# - malloc.c package, came from the net originally, author name wasn't
#   on it when I found it, I can't even remember where I got it.
# -----------------------------------------------------------------------------
# 
# DMAKE VERSION 3.6 RELEASE NOTES  (readme/release file in distribution):
# 
# MANDATORY REPLACEMENT FOR VERSION 3.5 PATCH LEVEL 1 and PATCH LEVEL 2
# 
# Nature:   This version of dmake MUST replace all versions of dmake 3.5 patch
# -------   levels 1 and 2, and all versions of dmake 3.5 patch level 1 and 2
#           must then be DELETED.  This release addresses several issues.
# 
# 		1. Copyright infringement claim made by MKS, of Waterloo.
# 		2. Modifications to text diversion processing.
# 		3. Support for DOS Swapping, and MKS argument passing.
# 		4. Other minor nits and tweaks.
# 
# 	  This distribution advances dmake to Version 3.6, patch level 1.  This
# 	  version is certified free of MKS copyrighted code.  See below for
# 	  details.
#           
# Availability:
# -------------
# 	  dmake is available via anonymous ftp from watmsg.uwaterloo.edu
# 	  (129.97.129.9) as:
# 
# 	     pub/src/dmake-3.6.tar.Z
# 	     pub/src/dmake-3.6.zoo 
# 
# 	  and comes in either a compressed tar or zoo archive take your pick.
# 
# Acknowledgements:
# -----------------
# 	  Thanks to all who submitted code for new features, suggestions for
# 	  improvements, and bug fixes.  Special thanks to those who helped
# 	  test this version of dmake on the many platforms that the
# 	  distribution now supports.  I have tried to make sure no gotchas
# 	  remain, if you encounter problems installing or running dmake please
# 	  let me know.  As always, I am always happy to receive e-mail.
# 
# 
# DETAILS OF CHANGES:
# ===================
# 
# MKS Copyright Infringement:
# ---------------------------
#    Due to a misunderstanding over past contractual obligations between
#    myself and Mortice Kern Systems of Waterloo, Ontario, Canada (MKS),
#    the original posting of dmake unitentionally contains some code
#    derived from MKS proprietary code.
# 
#    This version rectifies that situation and MUST replace all versions
#    of DMAKE and DMAKE patches that have been previously distributed.
#    Please delete from any archive site versions of DMAKE source code
#    labeled 3.5 patch level 1 or patch level 2 and dmake 3.5 patch 1.
# 
#    Version 3.6 of the dmake source replaces *ALL* MKS proprietary code.
#    In particular, putenv.c in the bsd43 and sysvr1 directories is new.
#    Three routines in percent.c;  Add_dfa, Construct_dfa, and Advance_dfa
#    have been replaced.  Lastly, TEXT DIVERSION processing has been removed
#    from make.c and <+...+> constructions are replaced by the $(mktmp ...)
#    construct (see below for more details).  The changes relating to the
#    above mentioned modifications have been reviewed by MKS and certified by
#    MKS to be free of MKS proprietary code.  The note below is from MKS
#    and releases dmake version 3.6 patch level 1 from any MKS copyright
#    infringement claims.
# 
# 	"MKS has reviewed the latest sources, as of 90.09.20,
# 	 for the files make.c, putenv.c, and percent.c, which
# 	 are part of the program dmake version 3.6, and found
# 	 these files to be free of MKS proprietary source code."
# 
#    No functionality is lost as a result of these changes, however
#    certain constructs may have to be expressed using a new syntax.  See
#    the documentation and the comments below for details.
# 
# 
# Text Diversion Processing:
# --------------------------
#    As alluded to above, the <+...+> text diversion facility has been
#    officially replaced by a new facility of the form $(mktmp ...) details of
#    which may be found in the TEXT DIVERSION section of the documentation.
#    Briefly, the construct:
# 
#         exe:; link @<+$(OBJFILES:t"+\n")+>
# 
#    is replaced by:
# 
#         exe:; link @$(mktmp $(OBJFILES:t"+\n"))
# 
#    similarly the construct:
# 
#         all :
#                 echo hi <+
#                 line1
#                 line2 +>
# 
#    is replaced by:
# 
#         all :
#                 echo hi $(mktmp\
#                 line1\n\
#                 line2)
# 
#    where the \n\ is added to the end of each line within the data portion of
#    the $(mktmp ...) construction.  For a number of reasons it is my belief
#    that this new construct is a better implementation of text diversions than
#    the previous <+...+> as it can be used in macro expressions that appear
#    anywhere in the makefile.
# 
#    Compatibility is retained for previous versions of dmake that utilize
#    a simple form of the <+...+> construct.  If your <+...+> constructs do not
#    span multiple lines (cf second example above), then the new version of
#    dmke will recognize these and will map them to the appropriate
#    $(mktmp ...) construct.  Thus, If you use <+...+> and you do not allow the
#    interior data to span multiple lines and both <+ and +> appear as clear
#    text in the same recipe line or macro value, then dmake will process these
#    correctly and the output is 100% compatible to version 3.5 patch level 2.
#    Any other use of <+...+> must be converted to the new $(mktmp ...) form.
# 
#    The new form also provides for massaging the name of the temporary file
#    which replaces the text in the recipe.  See the documentation regarding
#    the special macros USESHELL, TMPFILE, and DIVSHELL.  This is of most use
#    in an MSDOS environment.
# 
# 
# DOS Swapping, and MKS argument passing:
# ---------------------------------------
#    dmake now supports swapping the executable image to secondary storage when
#    it executes a child.  Swapping is enabled by setting the new attribute
#    .SWAP to on, either for a target or globally, or by specifying the '%'
#    modifier to a recipe line.  So for example:
# 
# 	xx .SWAP :; recipe
# 
#    and
# 
# 	xx :;% recipe
# 
#    are equivalent.
# 
#    The MKS DOS argument passing conventions are now supported, and dmake is
#    able to communicate with programs that understand those conventions.  The
#    global variable .MKSARGS is used to enable/disable this facility.  With
#    these modifications, dmake now supports long command lines for running
#    commands that understand the MKS argument passing convention, and it does
#    not run into memory limitations when executing child processes in most
#    situations.
# 
#    Both .SWAP and .MKSARGS are ignored by non-MSDOS versions of dmake.
#    See the manual page for further details.
# 
# 
# Other tweaks modifications and BUG FIXES:
# -----------------------------------------
# -- Slight modifications to msdos/startup.mk files.  Set DIRSEPSTR to \
#    if using command.com as the shell, otherwise set internaly to /.
#    Removed -o $@ from MSC startup.mk, and added $(ASFLAGS) to %$O : %$S
#    rule, in all default DOS startup.mk files.
# 
# -- Added POSIX '+' character to start of recipe lines.  You can use this
#    to force the recipe line to be executed by a shell, in addition to the
#    test used for .SHELLMETAS.
# 
#    To make the '+' fit into the dmake mold, a new attribute has been created.
#    the .USESHELL attribute forces the use of a shell for the target or
#    recipe group for which it is specified.  If it is specified as a global
#    attribute then all recipes executed will use a shell.  The macro variable
#    .USESHELL corresponds to the special target '.USESHELL :' in the same way
#    that .IGNORE corresponds to '.IGNORE :'.
# 
# -- Added *= and *:= macro assignmen operator, patches from 
#    Piercarlo Grandi <pcg@compsci.aberystwyth.ac.uk>, see the documentation
#    for more details.
# 
# -- Changed makefile.mk to force use of a shell (via '+') to make OBJDIR,
#    doesn't break on baren DOS systems that way :-).  Many other small changes
#    to msdos and unix versions of various config.mk files.
# 
# -- Added two new macros related to diversion file processing.
#    See the TEXT DIVERSIONS section of the man page for an explanation of this
#    functionality.
# 
#         TMPFILE - is set to the name of the temporary file whenever
#                   a temporary file is opened by dmake.
#         USESHELL- It's value is 'no' if the current recipe line is not forced
# 		  to use a shell via a '+' or .USESHELL directive.  It's
# 		  value is 'yes' if such a directive is given.
# 	DIVFILE - is defined in startup.mk and gives a macro to use to set
# 		  name of the diversion file, (under UNIX, DIVFILE defaults to
# 		  $(TMPFILE), under MSDOS it is the value of $(TMPFILE) with
# 		  any / replaced by the appropriate number of \ depending, on
# 		  if a shell is used or not).
# 
# -- \\ appearing at the end of a line does not cause a continuation to the next
#    line.
# 
# -- Modified the definition of macro supplied from the command line to allow
#    macros defined using += or +:= to be modified further from within the
#    makefile.
# 
# -- Added MAKETARGETS macro which contains the name of the target(s), if any,
#    specified on the command line.
# 
# -- Modified Pack_argv in sysintf.c to use dynamic memory allocation rather
#    than limit it to a fixed number of arguments.
# 
# -- BIG BUG FIX:
#    This one is cute.  It turns out that all individual recipe line
#    attributes supplied via '@', '-', and now '+' and '%' characters were
#    getting or'ed together and applied to ALL recipe lines of the recipe, yulk!
# 
# -- BUG FIX:
#    Fixed off by one error in make.c:_print_cmnd when remapping \n after
#    printing the text.
# 
# -- BUG FIX:  Bug reported by holos0!lbr@gatech.edu
#    Inferred prerequisites were not getting made when a target was found to
#    be out of date relative to a non-inferred prerequisite, and the inferred
#    prerequisite did not exist but the file it could be made from did and was
#    not out of date relative to the target.  This was a problem with the
#    following setup.
# 
#         file.o : header.h
# 
#    File system contains file.o, header.h and RCS/file.c,v, If file.o is newer
#    than RCS/file.c,v and older than header.h, then dmake didn't check out
#    file.c prior to doing the compile.
# 
# -- BUG FIX: Applied patch from UUCP: twc@legal or ...sun!ys2!legal!twc
#    to msdos/_chdir.c to fix changing of directory in OS/2 protected mode
# 
# -- BUG FIX: Applied patch from UUCP: twc@legal or ...sun!ys2!legal!twc
#    to msdos/switchar.c to read environment variable SWITCHAR instead of using
#    unsupported call in DOS.  OS/2 doesn't have _get_switchar call!  (It damn
#    well should though!  Microsoft is really dumb in this respect!)
# 
#    Extended this patch to use SWITCHAR environment variable in all DOS
#    versions.  This ensures that DOS 4.0 can selectively change SWITCHAR by
#    using the environment variable.
# 
#    Dmake now first gets SWITCHAR from the environment and if that fails it
#    tries the unsupported MSDOS call.  Under UNIX getswitchar returns '-'
#    as before.
# 
# -- BUG FIX: Changed the line _ar.ar_size = atol(arhdr.ar_size) found in
#    ar_scan() in arlib.c to not use atol() if ASCARCH is FALSE.  I forget who
#    reported this one :-)
# -----------------------------------------------------------------------------
exit 0