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