                              NDMAKE version 4.5
                              ------------------
                     Copyright (C) 1985, 1986 D. G. Kneller
                              All rights reserved.



This README file describes the differences between NDMAKE 4.3 (which
has been documented in MAKE.DOC) and NDMAKE 4.5, which is the newer
version but has not been completely documented.

Here are several NDMAKE executables, each slightly different.  The release
version of NDMAKE is version 4.5.  The executable is MAKE45.EXE. 
A large model (1 Meg of data space) version of 4.5 has also been included
and is called MAKE45L.EXE.  As the 4.5 version is relatively new and
involved a complete rewrite of NDMAKE's internals, the older version 4.3
is also included in case 4.5 turns out to be buggy.

In MAKE.DOC there are some references to a demo version of NDMAKE 4.3
called MAKE43D. This version no longer exists and the documentation
pretaining to it (marked with a | in the right column) can be ignored.



Changes from 4.3 to 4.5
------------------------
1) total rewrite of internals for 30 - 50 % more speed.
2) new features to macros:
	- recursively defined macro *names*.  For example:
		LOBJS = Lmain.obj Lsub.obj
		SOBJS = Smain.obj Ssub.obj
		MODEL = L
		OBJS = ${$(MODEL)OBJS}

		and $(OBJS) will evaluate to $(LOBJS). 

	- string replacement in macros
	  For string replacement, the syntax for the macro is
	  "${name:s1=s2)".  The macro "name" is evaluated and
	  occurrences of string "s1" are replaced with string
	  "s2".  As an example:

		XXOBJS = XXmain.obj XXsub.obj
		MODEL = S
		OBJS = $(XXOBJS:XX=${MODEL})

		When $(OBJS) are referenced, the XX string will be
		replaced with the ${MODEL} string.  In this case
		$(OBJS) will be "Smain.obj Ssub.obj".
		
	Or you could have:

		OBJS = main.obj sub.obj
		SRCS = $(OBJS:.obj=.c)

		In which case SRCS are "main.c sub.c".


	Currently, the string replacement only works properly on
	"simple" macro names, not on recursively defined names.

3) additional names are supported for automatic response files.  Previously
   NDMAKE would generate response files automatically only for commands
   that were named "link" and "lib".  Now it is possible to add other names
   to the list of acceptable names.  The special targets .RESPONSE_LINK and
   .RESPONSE_LIB are a list of acceptable names for link and lib response
   files, respectively.  For example:

	.RESPONSE_LINK:	tlink link4
	.RESPONSE_LIB:	tlib

   will cause NDMAKE to generate link response files for "link", "tlink"
   and "link4", and lib response files for "lib" and "tlib".  The response
   files are formated for Microsoft "link" and "lib".

4) the comment character `#' is treated as does UNIX make -- in a
   shell line, the comment character is passed.  So:

	target:
		echo ### This will be echoed

	Will produce:
	### This will be echoed

	To comment out a shell line, the comment character has to be the first
	character in the line:

	target:
	#	The next shell line has been commented out
	#	chmod +w target.exe
		echo This is a command.

	produces:
	This is a command.

5) a longstanding bug in how command line macros are handled has been
   fixed so something like:

	MODEL = S

	$(MODEL)main.obj: main.c
		cl -A$(MODEL) -c main.c -Fo$(MODEL)main.obj

	will compile main.c into Lmain.obj if make is invoked with:
	C> make45 MODEL=L


PS. Please excuse my not having merged this readme into the general
MAKE.DOC. I have been working on MAKE50 which will have all the current
features and more as well as having new documentation.

	Don
