make change history
12/01/93 3.0 release
10/31/93 fix make.probe stdlib test for preroot systems
instrument={insight,purify,sentinel,etc} instead of purify=1
fix VROOT,VOFFSET in 3d
add :T=QV: to select defined variables
fix pdp11 archive header swapping and alignment -- used by SCO!
add break [n], continue [n]
handle hp archive member name truncation at 14 rather than 15!
10/11/93 5e inspired upgrade and beta fixes
convert multiple metarule prereq pattern A%B to A$(%)B
add .DONTCARE. pattern association to intercept don't know how to ...
add :P=B: for physical binding
-lm : .DONTCARE in makerules for systems that combine it with -lc
fix :G=pat: to handle secondary targets
fix unbind() to set rule.view=0
09/30/93 bias unique() aliases towards shorter pathnames
add .MAKEDONE to correspond with .MAKEINIT
.SCAN.* state change causes rescan
preserve matches :B:S: if no / in pattern
purify=1 adds -g to CCFLAGS rather than replaces CCFLAGS with -g
fix += interaction bugs between command line and makefile
fix cancel bug that ignored top view state for lower view
09/11/93 fix scan attribute propagation bug that ignored scanrules |OX|
fix view+cancel+accept inconsistency where action always triggered
add set option=<flag>,<name>[,<type>,<set>] for external options
fix rebind/unbind bug that kept old bound name
add arclean to [de]select .ARCLEAN files
fix binding bug that didn't break it soon enough for r.status==UPDATE
fix :A=.MAKE: bug that missed (internal.make.property&P_make)==0
fix :P=L[*!]: bug that failed for non-3d views
08/11/93 S|action| (start) and F|action| (finish) added to scan language
O|options| now takes delimiter for scan language consistency
all scan actions but [OQ] accept [AMR]
|O*| sets scan match flags: X inhibits scan propagation
no scan propagation for D_scanned files
$(<r1 r2 ...) now supported
{ .ENTRIES .MEMBER .REGULAR .SCANNED } under user control
:T=R<tmform-pattern>: added
makefile prereq state atoms initialized as courtesy to query
fix aliasing bug that skipped action trigger
fix metarule bug that skipped %:%.x !!
add .ACTIVE readonly attribute
07/17/93 add -o regress=dir (-R dir) for regression output
properly handle * in scanexec()
handle archive member name truncation
complete $(%) $(<<) etc. scan definitions
change I|*|P to use M+function in scanrules
fix `termination code' error checks and messages
fix cancel bug that ignored implicit prereq event time
-o option=-c[absx]name allows user option by flag declarations
.TERMINAL .SOURCE dirs skipped for dir/base file binding
MAKERULES name change forces reread, duh
:LIBRARY: properly handles rhs -l*
06/11/93 bindfile,makerule,getrule,hashlook optimizations via gprof,purify
fix old bug that forced attribute names to start with .
fix alias bug in expand.attribute() and variable.scanprereqs()
.MAKE .FUNCTIONAL no longer gets .FOREGROUND by default
:LIBRARY: CC.PIC check ignores case
06/01/93 fix interrupt traps to honor critical regions via trap.c
04/01/93 add s5r4 long member names to portarch scan
add +l<lib> for selective static link
fix probe_pic probe
metarule for a/b tries a prefix before plain b on rhs
optimize bindfile() for relative prefix searches
03/01/93 change source() to handle modified prereqs before compile
add optional timestamp to .BIND.% return value
01/28/93 add :T=O[-][+][=data]: to complement :T=I[-]:
fix attribute propagation bug when ()r in state but r not
01/22/93 fix *.m[os] .BUILT tests (fixes :MAKE: clobber bugs)
fix :cc: cancel bug that failed to propagate lower .o's to link
fix `did not complete' bug that counted .MAKE status == UPDATE
add T|pattern|Rmakefile-chunk to .SCAN
.UNBIND on metarule drops chain for metarule
fix attribute assignment in assertion parser (very old bug)
01/18/93 3.0 beta release
* portable, extensible and compact object format
* makefile prereq code understandable
* no MAKEBUFFERSIZE
* MAKECONVERT for compile time makefile conversion
01/15/93 switch to sfio write strings
most buffer limits (especially MAKEBUFFERSIZE) eliminated
:P=L*: returns all views of bound file
01/11/93 fix C++ PTR makerules
fix .FUNCTION -MAKE
:O: returns token count, :O!: returns token strlen
:H<=: lo to hi numeric sort, :H>=: hi to lo numeric sort
12/25/92 switch to sfputu/sfgetu architecture independent object format
old format (8/11/92 sequence 0,1,2) read but not written
object files now 30-60% smaller due to sfputu and omitted fields
object format now decoupled from the internal struct layout
change rule.runtime from allocated pointer to direct field
11/30/92 fine tune -I and -L generation
handle `vpath /lib $(LIBDIR)'
11/11/92 convert .ATTRIBUTE and .SCAN inconsistencies on statefile load
warn about conflicting scan strategies
don't drop .mo in virtual dot
delay .ml drop in virtual dot until first sh action / touch
10/12/92 allow multiple .INSERT/.APPEND
fix clobber.install and list.install for $(CC.SO)
fix scan looping bug for @
10/01/92 fix bug in make() that lost original name for unalias()
fix joint bug that failed to decrement rule.must in cancel()
09/11/92 block on targets with .MAKE after prereqs
08/11/92 add -o mamtrace=file for runtime mam trace
unkown option now exits non-zero
07/17/92 extend :PACKAGE: to handle X11, etc. with mam
:operator: with .IGNORE does not expand args
add editcontext() to edit operator error messages
:M re match now uses egrep style patterns
add ``begin @ % @ end'' multi-line scan match
06/11/92 fix missing include bug that failed to recheck on next run
06/01/92 add `print' statement and prompt only for isatty(stdin)
update probe for typed $stdinclude dirs
04/28/92 #pragma prototyped the source
04/16/92 fix stdarg.h proto(1) courtesy by adding .TERMINAL
04/01/92 2.3 release
02/29/92 shared -l% are marked .IGNORE to avoid no-op ld
warn on invalid variable name in assignment
fix joint $(<) and $(^) bug
fix $(!) bug that omitted explicit after build
fix += cmd arg bug that ignored original value
02/11/92 fix $(>) state test
fix isstatevar() test
fix frozen var bug that missed := and += on cmd line
fix $(=) to generate == for V_scan vars
add $(CCLD) for .o vs. a.out control
add purify=1 control for easy purification
11/11/91 try ccc -> .CCC on first arg at interpreter prompt
fix metarule closure sequence error
add :PACKAGE:
fix BEFORE,AFTER command.c inconsistencies
10/11/91 change over to feature command
fix D_member|D_membertoo logic
scan() now assigns .TERMINAL to .PFX.INCLUDE files (cannot generate)
fix not in view 0 check to also check cancel time
fix state.touch to work with state.exec
'***' error messages now error level 2 (make: prefix)
makerules tmp files use tmp=$COTEMP as base
assertion operators now always have [lr]hs expanded before entry
var definitions in load action can override import vars
add CC.PIC, CC.SHARED, CC.SHARED.LIBRARY to probe
09/11/91 parameterize makerules ancestor with ancestor_list and ancestor_source
handle MAKEFILES=...$(PWD)... in :MAKE:
08/11/91 add @ repeat op in scan patterns
add C++ ptrepository makerules support
make .DONE before state saved
fix merge() to merge only if to.status==NOTYET or from.use
fix makerules .ARCLEAN to not delete .TERMINAL's
fix -g *.mk out of date with *.mo panic
add X scan rule op to ignore line
move queue() logic into trigger()
fix state.exec==0 .BEFORE and .AFTER trace
add :P=H[=suffix]: to generated short hash file names
fix mam .ALWAYS expansions
change .OPERATOR local vars to .*.
add idempotent wrapper to y.tab.h generation
move $ include from .SCAN.F to .SCAN.sql
07/17/91 add metaclose() to fix metarule closure
move secondary metarule search to metarule() -- nice encapsulation
fix trigger() and queue() to properly handle non-action targets
pass defined option=xxx options in $(-) and $(+)
fix multiple target metarules by using joint
fix :P=I: usage in makerules .DO.INSTALL
finally implemented `A Case for Make' event time algorithm
SEQUENCE=2 to handle event times
fix freevar()-newvar() bug that did not clear value
fix :T=G: to handle P_terminal
delete .UNTOUCH, change .TOUCH to .REBIND
.REBIND finally supports targets generated in .SOURCE dirs
fix ignore,keepgoing,dontcare interactions
add syntax check for local var declarations (i.e., no assignment)
delete .MAKESCAN -- not used
add _feature_ to Makeinstall.mk
delete .PRECIOUS in liu of rule.state.event=0
06/11/91 unknown :operator: attempt `include "operator"' before failing
fix .ATTRIBUTE clash load bug by not doing free()
fix functional recursion
fix view bug that missed files under missing intermediate views
05/11/91 add newfile(*.mo) in compile()
fix :MAKE: to omit lhs on recursion
change D_alias getrule() to makerule() -- may be dropped from .m[os]
04/11/91 add :LIBRARY: $(LIBDIR)/lib/xxx, -lxxx .REQUIRE. support
add .REQUIRE. pattern association for atom multiplexing
:INSTALLDIR: now mkdir's to any depth
fix '...', "...", /*...*/ interactions with #...\n
04/01/91 add .LOCAL to separate CO_LOCAL from .ALWAYS
replace P_noclear with P_local
fix :MAKE: to use .VIEW instead of .
03/11/91 add + to .BIND.% association
add LDLIBRARIES to FEATURE/% in makerules
02/11/91 pass scoped COATTRIBUTES to coexec()
delete OPT_headerstate (-x), add OPT_expandview (-x)
add :K=<pfx>: operator to break long lines
remove P_target attr from internal.interpreter
add ``$(ARSCAN|AR) $(ARSCANFLAGS|"tv")'' scan for unknown archives
fix VPATH bug that omitted some nodes
fix scan bug that dumped when given a 24K /*...*/ comment!
01/31/91 minor fixes
add aix archive format to archive.c (thanks to Jim Gentilesco)
01/01/91 add package to makerules
add more dirs to .SOURCE.mk initialization for user include support
12/11/90 change $(v(a1 ... an)) to $(v a1 ... an)
recursive functionals: args in $(%), `return value' for return
add statetime(r,-1) to resolve makeafter() target
add .FUNCTION pseudo-attribute to makerules
.BIND.* and .MAMNAME. are now .FUNCTION
.SCAN map arg match changed from $(.SCAN.) to $(%)
add .ARPREVIOUS to fix $(AR) d bug in .ARCHIVE.o
fix newvar() bug that clobbered import values
fix frozen var checks again
11/11/90 2.2 release
in unbind() if r->uname putrule(r->name,0)
active target prerequisites may be appended
10/11/90 fix jobs bug that scheduled pending jobs after error with nokeepgoing
switch over to libx/malloc
.BIND.-l% with CC.PROFILE now checks libX-P.a and libP/libX.a
fix OLDMAKE bug that omitted x=y args
add cc- for making profile/debug versions
change .ARCLEAN to exec immediately after main action
10/01/90 add mips ar format out of date check
fix :MAKE: one more time, concurrency -> recurse in makerules
add $(v(a1 ... an)) functional var with args support
add pathcheck() call for optional runtime validation
08/11/90 fix .JOINT for .SCAN.* targets
fix .JOINT state bug that built targets twice
fix libx/hashnext() bug that mishandled hashput(t,n,0)
add :T=SF.: to force rule, :T=SA: to get atom from staterule
add :T=XSFA: to .SELECT. to get statrules w/o related atoms
fix view bug that allowed target view to be higher than min prereq
add I pattern attribute and property propagation to OM in scanmacro()
add .M4.INCLUDE to .SCAN.m4 in Scanrules
handle dangling rule.status==IMPLICIT in make()
fix += n**2 malloc hog by expanding in chunks
fix nostrictview mixed rel/abs dir cross product bug
fix view dir alias bugs
delay state.jobs=0 until final cleanup complete()
move premature unparse() in finish()
move .SAVEARGS from :MAKE: to .DO.MAKE in Makerules
add "label=" args to coopen() and coexec()
07/17/90 add * to .SCAN patterns
guard against multiple push() in command.c
drop -D-Lmake from MAKEPPFLAGS to fix makefile line syncs
fix frozen bug that complained about global value changes
fix scanexec() buffer bug that missed quote in first row,col
06/01/90 add limit=n to limit :MAKE: recursion
add fresolve() to rstat() for NFS-coshell workaround
05/30/90 relax cross-product rhs absolute path restrictions
05/11/90 fix $(...) mark bug
05/01/90 coshell library sync
action error now recorded in state
04/11/90 numeric option arguments optional
-S now takes optional view level arg
makerules liblink control var changed to link=<pattern>
MAKEIMPORT var preceded by ! can be overridden by global var def
04/01/90 files linked to mode 0 ... are `opaque' in lower views
add cancel() to undo actions by targets that don't change
add :E: edit op to evaluate if expressions
add :P=R: (again) to compute relative path from a to b
add bindattribute() to uniformly propagate bind time attributes
add maxview and fsview check to localview()
add (CC) : (CPP) in .MAKEINIT
fix prereqchange() check in make()
fix $(^) expansion for files down view only
allow relative pathnames in view names
cancel() only if target newer than prereqs!
.CLEAR implies .UNBIND
03/28/90 fix comment error message line numbers
add nested /* ... */ comment error message
fix bind bug that missed .SOURCE* alias
03/24/90 turn the bootstrap volume down another notch
03/22/90 add :LIBRARY: and linklib to makerules
add MAKE_OPTIONS check to makerules load
set $(^) for top view too
03/20/90 fix source() bug that eliminated some valid view components
add source() call to atom prereq references in getval()
fix ccprobe -tp -B probe
add <prefix>cpp checks to ccprobe
internal P_immediate actions always done
move .VIEW init from initdynamic to initview()
-L options generated in LDFLAGS for DYNAMIC -l args
03/15/90 fix level>2 view state bug in staterule()
fix .BIND. and bindfile() bug that missed makefile -l% == lib%.a
.VIEW x .SOURCE cross product now done by bindfile()
replace Makeinit.mk with char*init in version.c
.VIEW marked readonly after level>0 assertion
fix lockfile bug that unlinked valid foreign on exit
03/01/90 add `-' as makerules synchronization atom
fix frozen bug when new var in env but frozen not in env
02/28/90 fix scanprereqs() bug that missed active implicit primary prereqs
fix active frame bug that clobbered prev value for recursive targets
02/26/90 fix .TERMINAL metaget() bug that blew the sccs example
02/11/90 delete MAKESHELLTYPE, _make_, @, silent [-+]
add .READ
02/08/90 delete OPT_move (it never did work)
02/07/90 add job frame context for make/expand/job consistency
change :T=H: to :T=I[-]:, - doesn't expand file contents
02/01/90 recode for libcoshell interface
01/30/90 fix make() state.unwind bug that set KEEPGOING in enter()
set PWD in case MAKESHELL doesn't
change .SCAN @ to % for metarule consistency
01/26/90 delete :E,:W,:T=[BM].:R->:T=R,:T=R->:R (non-tokenizing),:[EHJKUW] free
01/22/90 add :L[<=>[pattern]] for base name generation on scanned dirs
01/19/90 update CIA makerules for intermediate C++ support
12/15/89 add test for empty statefiles
replace $(+.) with $(.$(*:O=1))
fix :P=U: bug for non-rules
12/01/89 restore old job control signal handler command/costop()
rework engine .JOINT
fix += makefile interaction with cmd arg assignment during .mo compile
fix local var bug that did not set local.length
fix archive member not in . handling
11/28/89 add :A<=.xxx.: for associate() tie-in
add .INSTALL.<pattern> to makerules install
don't mergestate() state vars
11/11/89 global insert|append for non-targets too
fix scanmacro() for m4 scan
fix makerules LDLIBRARIES, .BIND.LIB.DYNAMIC., :JOINT:
add archive member (A) to scan pattern language
rule.archive&&rule.scan -> scan() rather than walkar()
make .INTERPRETER for interactive interface
.ERROR made for fatal errors, no exit if EXISTS
fix statefile reference sticky property bug
10/31/89 minor .VIRTUAL fixes in make()
add .SCAN.F to makerules
change readargs() to vecargs()
10/18/89 add (CC.PROBE) prereq to (CC) related state vars in .MAKEINIT
10/11/89 for loops no longer makerule() the vars
external.sourcepath -> internal.source
----- minor sync release -----
10/01/89 OPT_mismatch sets OPT_accept if no top level and low level mismatch
fix scandir() bug that broke the dir<->atom name equivalence
add :P=I=path: file equality test
09/22/89 fix staterule()+accept+view bug that always touched statevars
.BIND. -> .SOURCE. && .ALIAS. -> .BIND. for consistency
add :P=G[-]: to generate sorted list of dir-scanned file names
file top level loops ok
09/11/89 rework scan.c -- .SCAN.* now defined in Makerules
OPT_mismatch checked for lower view state files
add D_index and SEQUENCE=1 for index atom load consistency
08/30/89 add $(...) to expand to all atoms (could be a big list)
08/24/89 replace makecc with ccc
08/14/89 delete D_changed usage
08/11/89 fix statevar bug in stateview() that let undefined vars override
use lib/probe for runtime compiler probes
clean up environment dependencies
07/11/89 change makerules to key $(CC) info from full path
add mkinfo to probe C compiler wrappers at user runtime
07/04/89 use lower view files for !state.exec
06/28/89 hack localrule() bugs -- cleanup when BINDINDEX enabled
06/27/89 fix statetime()/rule.originalbind interaction bug
canonicalize path in checkcurrent() for statetime()
06/26/89 change makerules `-o ancestor' to `ancestor=3'
delete :K=: and :U=: edit ops and ancestor()
06/22/89 initial BINDINDEX code -- not enabled yet
fix staterule() consistency bug
06/11/89 fix include bugs, add include - for dontcare
add .JOINT, change :JOINT: to use .JOINT
fix load() attribute checks
delete staterule(SOURCE,...)
fix -l by .ALIAS.<pattern> and .BIND.<pattern> bindfile() hooks
new object VERSION for .PFX.INCLUDE scan attribute
06/02/89 OPT_keepgoing errors tracked and cause non-zero exit
fix getstate() bug in scan.c that botched "\<newline> quotes
06/01/89 special job control signal handling eliminated
05/11/89 minor makerules fixes
05/09/89 ``target :'' assertion sets rule.target
05/02/89 fix :MAKE: to do dirs only once
05/01/89 add trigraphs to c_scan()
04/11/89 strictview cross-product marks must have multiple attribute
04/04/89 change Makeinit VPATHVERIFY to VPATH_OPTIONS {verify[=n] [no]strict}
delete state.override checks for rule.hasafter & rule.hasbefore
03/30/89 preprocessor optional, only called if directive encountered
C comments stripped by make parser
03/28/89 avoid multiple prefix in c_scan()
03/27/89 OPT_stream -> OPT_mam
03/17/89 fine tune makerules OPT_stream support
03/14/89 drop OPT_script, change OPT_stream to output generic shell
03/07/89 allow metarule "" rhs to get something from nothing
02/28/89 use bound name in `replaced by an older version' message
02/27/89 propagate metarule rule.accept to matched target
02/22/89 fix state.localview variable references with localvar()
02/21/89 change .MAKESCAN to place file name in $(>)
add rule.terminal checks to control metarule closure
02/11/89 add some rule.originalbind checks
add rule.runtime for run time info, 4-bytes spare
02/01/89 add delete op to addprereq()
metarule .CLEAR now prunes the intermediate prereq graph
01/24/89 change compiled struct members for machine independence
.mo and .ms now compatible for CHAR_BIT=8, sizeof(char*,long)=4
change compile.c/setold() to use rule.status==OLDRULE
fix .CROSS.COMPILE to redefine CC, etc. in env rather than cmd line
close lockstate() window that left lock files hanging
fix -l[rv] to not re-dump on interrupt
new VERSION to handle struct changes
add object sequence to allow small diffs between versions
add OPT_strictview & -V for strict view interpretation
01/20/89 new object VERSION to handle rule.state & rule.semaphore changes
add tmp fix to make.c/update() to avoid clobbering lower view targets
base rules must contain a null #rules directive
base and global rules now compiled with -bcf
restrict .CLEAN and .CLOBBER to top view
01/18/89 replace rule.semcount with rule.semaphore==(semcount-1)
change .NOIMPLICIT to .TERMINAL
delete .NEGATE; add -<attribute>, +<attribute> assertion syntax
change compile.c/setold() to pun on rule.attributes+rule.attribute
add attributes to metarule pattern propagation
add .SCAN.IGNORE to not scan and to ignore scan times of prereqs
01/11/89 change .ATTRIBUTE.* to generalized metarule pattern propagation
clean up metarule assertion parsing
decouple $(MAKEPP) from $(CPP)
----- testing continues -----
12/11/88 fix atomize() panic by using setold() in load()
11/30/88 fix pathop() and attribute() alias references
11/22/88 add state.buffersize and env MAKEBUFFERSIZE
11/19/88 fix atomize() stray mark panic during invalidate()
11/16/88 add .NEGATE assertion attribute and remove .NOIMPLICIT kluge
11/11/88 make directive keywords must be C_SEP separated
11/09/88 fix minor view bugs in :P=D: and Makeinit
11/01/88 :D: returns ``.'' instead of empty string
10/21/88 $(^) set only if $(<) covers another view
10/11/88 fix staterule() bug that botched state view merging
fix shquote() to pass `
10/05/88 fix .IMPLICIT and .NOIMPLICIT merging
09/30/88 fix metaget() to ignore status==UPDATE prereqs
fix .TOUCH to bind before touching
fix cosend() to add `trap 0 ERR' for ksh FOREGROUND actions
09/20/88 fix :G: edit op using proper nonterminal metarule reference
add hang test for cc list before ccinfo call in Makefile
09/11/88 remove `warped from future' message
09/09/88 add `:MKOLD: makefile' to makerules
09/01/88 add ppdefault.h #assert's to Makeinstall.mk
update Makerules .CIADB for new cia
08/31/88 fix bug in $(+x) automatic variable dereference
08/24/88 beta release
08/18/88 update scanner in parse, add ++, --, +=, -= to set numeric options
add OPT_frame for state.frameref
fix :JOINT: using set frame++
08/03/88 add metarule.c for metarule routines
add ???O for original value if non-null
add .TERMINAL for terminal match-anything metarules (in rule.regular)
07/25/88 replace rule.link with active target stack frame
add `%' metarule stem match (like other makes) -- `*' now obsolete
07/22/88 switch rest of department over to latest version
fix makerules :: bug that lost dir info from *.o prereqs
07/17/88 first makefile `block' scanned for type info
add .SCAN.NONE to inhibit scanning for some files
07/08/88 fix null pointer dereference in localrule()
07/07/88 change $(%) to $(#), reserve $(%) for metarule target `stem'
clean up makebefore() and makeafter() calls
fix bug in secondary() that saved invalid state time
fix view bug in bindfile() that goofed on ..
07/04/88 bind .mo files on .SOURCE.mk
07/01/88 add OPT_writestate and decouple from OPT_override
change OPT_ignorestate to OPT_readstate
fix `has been replaced by an older version' warning test
fix time test in bindfile() that allows archive .o files to stay
delete sql_scan and .SCAN.sql -- generic f_scan() does it now
add quick makefile type check to #rules parse
06/22/88 add OPT_filetype to enable automatic makefile type check
update punt() to do a better job with external.old arguments
06/21/88 delete "*.a : *.b : *.c" explicit intermediate metarules
add "*.a *.b ... : *.c" auxiliary metarule targets
add metarule transitive closure (`chaining')
06/19/88 temper lockstate() on view by checking lock file uid
06/18/88 fix bug in stateview() that didn't pass rule.attributes
06/16/88 remove MAKEINCLUDE and MAKELIB from Makerules.mk
add MAKELIB, maketype.sh and .MAKETYPE to Makeinstall.mk
add generic include statement to f_scan()
06/15/88 remove .COINIT because of execution ambigiuity
06/14/88 convert to new libx strmatch()
remove automatic .ALWAYS for $(MAKE) actions
06/08/88 add ccinfo.sh to probe for c compiler wrapper info
add `.READ : file ...' to bind and read file ...
fix rule.scanned propagation in load()
avoid merging old atoms in merge()
add rootpath() to relieve hard coded path problems
-o nowarn is now the default, more tests for state.warn
06/01/88 convert to new hash library interface
add MAKEIMPORT for explicit environment override of makefile vars
lockstate() now checks lock files down the view
invalid options produce warning rather than error exit
update Makerules :INSTALL: to check needed directories
fix sequencing bug in trigger() that bombed null action targets
05/19/88 change .ARCHIVE and .OBJECT usage in Makerules
fix shquote() to handle v9 sh {} botch; move C_SHELL to shquote()
05/17/88 fix metarule state and state.tolerance checks in make()
05/16/88 add $(?) for generating all prereqs with no selection
05/11/88 move null trigger() before scan() in make()
fix alternate binding for .LCL.INCLUDE files
fix :MAKE: to handle .VIEW
05/09/88 pass attributes for secondary bindings in bindfile()
05/06/88 fix -o vardump core dump bug in dumpvar() call from setvar()
add .ARUPDATE to .DO.INSTALL
05/04/88 add :P=U: to return unbound path name
05/03/88 check for MARK in expandvar()
05/01/88 virtual state vars made when expanded
04/30/88 canonicalize .SOURCE* names before scanning
04/29/88 check for !r->statevar && r->state in staterule()
virtual state atom time changes only by assignment value change
04/28/88 fix bug in Makerules .LINT that botched generated .c intermediates
fix :G: to accept suffix list as well as full names
fix $(...::) infinite loop bug
change %D%* to $("%")D%* in Makeinit for SCCS users
04/26/88 redo Makerules :JOINT:
update Makerules .CIABASE, rename to .CIADB
04/22/88 remove install.prof from .SAVE. in Makerules
04/19/88 add .ALL:.NULL to Makerules for common actions with no ::
04/18/88 multi hard link files are not sync'd by statetime()
04/14/88 update internal.making in maketop()
04/11/88 ----- LC 2.0 beta release -----
04/11/88 fix bug in enter() that executed action even if prereqs failed
fix bug in Makerules.mk/.MAKEINIT that set CC without binding (CC)
04/07/88 change makerules .SCRIPT to test if *.mk.sh was generated
.MAKEINIT now part of user activities
add $(MAKECC) to makerules for cc's with fixed cpp
add vardef() for -o oldfile and -o script
04/06/88 fix dynamic() unbounded recursion bug on indirect prereq references
add #rules base rule directive consistency checks
state.rules is base name of active base rules
fix prereqchange() to check out of order rule.use prerequisites
04/04/88 installed rules are now lower case by convention
03/30/88 re-make() targets that were not scanned the first time around
fix r->ignore time propagation bug in make()
fix :JOINT: to check all lhs when one is updated
add .APPEND* for symmetry with .INSERT* global prereqs
add .NOIMPLICIT and rule.noimplicit to inhibit metarule application
add .NOIMPLICT to makerules prereqs
03/25/88 update makerules command actions .OLDFILE and .SCRIPT
fix c_scan() and sql_scan() for non-terminated comments on include
add output file pointer arg to dump routines
03/24/88 add OPT_errorid for better recursive make tracing
03/23/88 add alias consistency checks; fix internal.unbind to unalias
03/22/88 makefile must exist; `-o file -' deleted
1st line of 1st makefile: #rules "alternate-base-rules"
base rules and global files not loaded until 1st line of 1st makefile
delete OPT_rules; MAKERULES reset to actual rules name
delete OPT_bypass and add OPT_base (-b)
new options to compile base|global rules: -bc -f file
.VIEW initialization moved from makerules to Makeinit.mk
main() bootstrap re-ordered (again) -- args read before Makeinit.mk
fix link bug for OPT_move
03/18/88 fix bug in $(VAR1|VAR2...) implementation (there since the beginning!)
expand external.* variables (except external.shell) before use
fix bindfile() bug that improperly called bindalias()
03/17/88 fix CON_for + CON_scan full match scan test
insert . on .SOURCE.c in makerules to fix -I generation bug
OPT_bypass and OPT_global now expanded in $(-)
add state.bypass to decouple OPT_bypass from state.global
OPT_rules omitted from non-global makefile same as setting to default
03/16/88 add :P=S: edit op and fix .SELECT. in makerules
fix :T=F: bug that let some non-files slip through
03/14/88 fix bindalias() bug that caused alias loops
03/10/88 delete `or first argument with .mk suffix'
fix forcescan()
02/29/88 ignore SIGPIPE after coshell forked
clean up command.c comments
clean up makerules .DO.INSTALL* again
fix statetime() heuristic for hard link updates
change makerules yacc action to move y.output to $(<:B:S=.grammar)
add cia (C information abstractor) makerules support
OPT_bypass not expanded in $(-), like OPT_global and OPT_file
add :SAVE:, .GRIND and .GRINDEX to makerules
support .MAKE : <semaphore>
return -1 -> target FAILED, return 0 -> no time update
add internal.args, internal.making, delete $(?) and OPT_main
stomped bit field assigment/test bug in 3b20 compiler
add :PACKAGE: to makerules
02/26/88 clean up hardwired script
add .DO.INSTALL.SAVE to .DO.INSTALL
rule.ignore prereqs ignored in prereqchange() comparisons
fix job control bug that deleted active targets on SIGTSTP
delete internal.dump and OPT_dump
add OPT_interrupt, set nointerrupt for multiple internal.interrupt
make internal.debug to enter interactive input mode
internal.debug immediate rule debug prints prereqs
fix makerules archive delete bug
clean up coshell message and job table tracing
02/25/88 confine all external engine names to external.* and initrules()
02/24/88 fix a few inappropriate free() calls
fix stateview propagation of rule.build
02/22/88 replace .SCAN.ifs with .SCAN.sql (awaiting formal sql syntax)
add Makeinit.mk to localize engine initialization
02/18/88 add parent prefix directory binding c_bind() to c_scan()
02/11/88 add apply() and fapply() to replace cmdopen()
fapply() .MAKEPP action for makefile preprocessing
fapply() .MAKESCAN action for .SCAN.MAKESCAN scanning
change makerules .LINT to use silent +
02/10/88 fix internal.make inconsistency that cleared rule.make
fix alias bug that improperly applied unalias()
02/09/88 fix scan() bug that missed built files with OPT_accept
add newbuffer() wrapper to expandvar()
02/08/88 new VERSION: rule.synctime shared with rule.data and rule.uname
reorganize attributes to take advantage of merge(*,*,[-1,0,1])
add .USE .ATTRIBUTE to combine builtin and named attributes
add changed attributes test to prereqchanged()
.ACCEPT->attributes masks attributes that may change without update
.IGNORE->attributes masks attributes that are not propagated
.RETAIN->attributes masks attributes that are retained from .ms
02/06/88 add .ATTRIBUTE<suffix> to generalize inherited suffix attributes
modify merge() to do attribute propagation
02/04/88 fix scan() bug that botched non-terminated quotes in directives
properly set and test rule.triggered
02/03/88 add multi level concurrency -- finally did it right
02/01/88 fix makerules .VIEWINIT to set .VIEW iff in first node of VPATH
fix makerules .ARCHIVE.o to delete unused archive members
fix improper state prereqs clear for !state.scan in make()
OPT_force no longer touches non-action state variables
01/31/88 ----- limited alpha release -----
01/27/88 fix bug that botched interrupt of last job
fix state.oldfile '...' and "..." output bug
01/26/88 demote 'alias has changed' and 'is also specified as' to message -2
01/22/88 fix staterule() bug that omitted search for global view staterules
01/20/88 fix OPT_accept to properly set staterule->built
01/11/88 add state.localview for state.oldfile and state.script
honor "..." in $("...")
yet another coshell interface update, this time for SH_OLD
01/07/88 add `<var> == <value>' to replace `set state ... set nostate'
01/05/88 add sepcmp() to expand ops
fix inappropriate .VIEW . dup warning
01/04/88 tweak makerules :READONLY: scripts
12/24/87 fix make() prereqchange() bug on newly promoted source files
update yacc header rule in makerules
12/22/87 fix internal.attribute compile bug in compile()
change intermediate metarule to handle prereqs and action
change yacc and lex metarules to use intermediate in makerules
change .READONLY attribute to :READONLY: operator in makerules
12/11/87 add :COMMAND: operator to makerules
update Makefile for Genrules and makerules examples and docs
OPT_global no longer expanded in $(-)
fix staterule(SOURCE) bug that didn't track view changes
add .UNKNOWN to do unknown command line target name translation
add .DO.LEX++ lex.yy.c post edit for C++ in makerules
change option parsing to meet getopt(3) standard
`-bcfg file' is now `-bc -f file -g file' as per getopt(3)
change OPT_made to OPT_main, delete state.notmade
add internal.tmplist to avoid internal pointer munging by load()
delay unknown command line option check until after makefiles read
add .SEQUENTIAL for self and child actions in foreground
12/08/87 add unalias() before update() calls in make()
recode for updated hash library interface
12/01/87 fix expand(var=...) trace message
add OPT_mismatch to accept if state file mismatch
use $(SHELL) before punting to /bin/sh
change .GLOBAL to .INSERT
add Version.mk for version stamp fine tuning
state.reread changed to count, 2 levels allowed
11/30/87 add .REPEAT to .ARCHIVE related .AFTER rules in makerules
fix archive scan bug for port archives with no symbol directory
11/22/87 fix BSD job control hang bug by ignoring SIG_IGN
fix @.sh and _make_.sh bug that sent newline to stdout
11/20/87 add MAKESHELLTYPE for ksh vs. old sh dependencies
fix implicit suffix rule bug that botched a/x.y prereqs
11/18/87 update makerules to properly use Makeinstall variables
11/11/87 re-order MAKEPP -I options
change OPT_skew to OPT_tolerance, add timecmp()
11/10/87 fix state.rules checks and option handling in general
11/05/87 add .SCAN.MAKESCAN for external perequisite scanning via $(MAKESCAN)
add rule.internal to mark internal non-compile rules
fix spurious core dumps by adding internal.readprereqs
add rule.readonly to inhibit user mods
11/04/87 add `set option=[*]name' to declare external boolean [string] options
delete :T=<op>: operands that have been supplanted by :A=<attribute>:
11/01/87 add :?: and :Y: conditional edit op
state.scan=0 is the compiled default -- must be set in default rules
change $(-) and $(+) to use named options
delete .SET and change option storage in make object files
add state.rules and OPT_rules for alternate standard rules support
fix :M: bug that dumped core
change makerules to use `ancestor' named option
`set noancestor' is the makerules default
`set noscan' is the make default
10/29/87 fix state.forcescan checks with more than one view
10/28/87 fix warped from future message by first checking rule.bound
inhibit some file warning messages if state rule exists
10/27/87 delete state.unique and OPT_unique - views make this obsolete
add rule.alias and rule.aliaschanged to fix alias bug
10/26/87 add MARK to properly handle "'s in conditional expressions
delete error="...", trace="..." and warning="..." `options'
add error and set to parse()
10/23/87 fix constack[] overflow check in parse.c
add unparse() to unwind parse stack on errors
don't make .DONE or .INTERRUPT if state.compileonly
fix fd handling in main() and coinit()
10/22/87 remove OPT_implicit, state.implicit
state.scan (+x) inhibits implicit file prereq scanning and checking
10/21/87 treat "..." and <...> #include files the same in makefiles
add :P=L[=n]: bound view level edit op
close spurious open fd's before coshell exec
10/20/87 fix $(*) bug for implicit targets with explicit source prereqs
add OPT_warn (-w) to disable some source file warnings
add rule.alias to handle different atoms binding to same atom
10/17/87 remove `\' interpretation in expand() -> (...) must balance
add $(<var>`<del>...<del>) top level alternate edit op delimiter
change rule.fired -> rule.triggered, rule.generated -> rule.built
change LOCALROOT -> INSTALLROOT
10/16/87 fix :: op to enter explicit source prerequisites
fix make() to check explicit source prerequisites for implicit rules
10/15/87 fix bug that omitted tstate check for implicit rules in make()
fix staterule() bug that omitted stateview() call
10/14/87 fix OPT_oldfile bug with rule.make and rule.virtual targets
10/11/87 change shell order to $MAKESHELL, ksh, /bin/sh
10/09/87 add reason(fmt,...) for OPT_explain
make rule.semcount a separate field
10/06/87 fix .SOURCE directory aliasing bug using rule.uname
handle interrupts before any calls to maketop() or make()
X=a..c, $(X:B)=a, $(X:S)=..c
10/02/87 fix .ACCEPT and .TOUCH
add :JOINT: operator for joint (multiple) target generation
10/01/87 add .SPECIAL to avoid setting .MAIN
change $(var.$(CC)) to $(var.$(CC:B))
09/30/87 add STDINCLUDE.$(compiler), change $(CCFLAGS.$(CC)) to $(ALTPP.$(CC))
09/29/87 add :INSTALLDIR: to makerules
update Makefile for alternate rules
09/25/87 add `* : * : *' and rule.intermediate
09/24/87 fix parentage() to properly list applied operators
09/23/87 decouple state.ignore and state.keepgoing
fix trap on ERR bug in foreground coshell
coshell command and message trace bumped from level 3 to 8
fix rule.statevar clobber in load()
add rule.changed to note statevar prereq and action changes
add @ non-tokenizing edit prefix operator
pass job control signals (SIGTSTP,SIGTTIN,SIGTTOU) to shell
09/18/87 fix state.touch bug from 09/11/87 batch change
09/17/87 update lex and yacc implicit suffix rules
09/16/87 add newfile() to add newly generated non-dot files to hash
09/15/87 $(>) == $(*) for implicit suffix rule actions
09/14/87 add $(MAKE:D) to .SOURCE.mk in hardwired script
change state.builtin to state.global (builtin -> default)
09/11/87 rule.target set only if actions or non-attribute prerequisites
change rule.commands to rule.action and docommands() to doaction()
delete rule.updated
add rule.fired to properly set rule.generated
call complete() before implicit suffix rule test
use statetime() in place of rstat() in a few key routines
update "::" in makerules to use .MULTIPLE for .ARCHIVE prereqs
delete internal.prerequisites and .PREREQUISITES
.FUNCTIONAL and .VIRTUAL no longer .IMMEDIATE
.FILES. and .OUTPUT. now .FUNCTIONAL in makerules
09/08/87 fix generated builtin rules makefile dependency bug
fix bug that omitted named attribute checks for rule.statevar
09/03/87 change `dependency' terminology to `prerequisite'
add .MULTIPLE attribute for multi prereq occurrences
operator syntax forced to be `:<identifier>:'
09/01/87 add :Z: op to expand in parent reference frame (cumulative)
08/31/87 use unbound name in staterule()
fix generated target state bug in scan()
walkthrough and lint cleanup
08/27/87 add :BUILD: and .GENSYM. to makerules
fine tune .TOUCH
08/26/87 fix state.keepgoing interaction with coshell
state.readstate also controls view state files
fix bug that allowed env var override compiling global makefiles
08/25/87 fix bug in readfp() that didn't update rule pointer after load()
fix <...> and "..." warnings in c_scan()
fix expandops() bug that inappropriately left trailing blanks
fix reread() to close open file descriptors
08/24/87 don't automatically clear commands for immediate rules
.ALWAYS for operator expands before application
08/22/87 add .NOIMPLICIT `attribute' to disable implicit rules on target
unwind make() to topmost dontcare target on errors
08/21/87 add :MAKE: recursive make operator
suppress `not updated' warning for directories
move `recursive var' test to expandvar()
08/20/87 fix immediate() to do dynamic() only if target selected
change .CROSS.COMPILE to be makerules immediate rule
fix bindrule() bug that choked on views with no state
08/19/87 fix lockstate() for geteuid()==0
add bintab to handle bound dir of files starting with ../
08/18/87 fix staterule() bug that omitted r->scan generated files
08/13/87 fix local var bug that inappropriatley set v->import
fix :P=R: and :P=T: for degenerate cases
fix .VIEWINIT interaction with -a makerules option
08/11/87 adjust for new <re.h> library interface
07/28/87 fix return to take expression arg
add :INSTALL: operator to makerules for nice .DOINSTALL stuff
07/24/87 optimize silent shell function to fork only on failure
07/23/87 add .RETAIN for retained variables
add `silent' and `silent -' for selective tracing
07/22/87 add -o headerstate and -H to ignore state vars from headers
07/17/87 loosen tight binding of :U: operator on .SOURCE.[ah]
07/14/87 add r->view, state.view, state.maxview and .VIEW for state views
07/10/87 add -[DIU]* command line options to makefile dependencies
07/09/87 fix `a :: lib.a' makerules bug
fix bindfile() bug that bound ../x -> x (if x already bound)
add r->garbage and state file GC to compile.c
07/08/87 use seterror() and remove err_* references
change :Z=<op>: to :P=<op>: and add :P=D:
change :I: to be simple path name intersection
07/07/87 makefile dependencies fixed with time equality tests
07/06/87 first attempt at return -- must reconcile with r->updated
07/02/87 change :I=*: and :X=*: arg to be list to be expanded
06/17/87 add :M=<RE>: for RE match version of :N=<sh-pattern>:
fix :op: bug that removed too many backslashes
06/15/87 add ifs_scan for #include "file" and {INCLUDE "file"
call getstate() in scan even if !state.fullscan for comments
06/05/87 fix bug in `local' that failed with more than one arg
suppress `is also specified as' message if r->dontcare
06/04/87 add :LINK: operator to makerules
add r->dynamic to merge code in dynamic()
06/03/87 order dependent options not included in $(-), i.e., -[bfg]
add $(TMPDIR) to makerules
06/01/87 fix msgfd allocation bug in coinit()
use libx/regexp routines for :/old/new/: edit op
05/26/87 fix interrupt() and finish() for recursive make signals
04/27/87 update archive access for proper fseek()-ftell() interactions
04/23/87 fix .CLEAR to not clear r->state if isstate(r->name)
04/22/87 add time pointer arg to complete() for dep time propagation
04/20/87 coinit() now uses any 0<=msgfd<=9 for coshell->make messages
fix semantics for .VIRTUAL state vars
fix '\n'->0 bug in recursive parse()
04/17/87 add `local <var> ...' local var declarations for .MAKE actions
add `.FUNCTIONAL : <var> ...' to make rule <var> on expansion
04/16/87 fix bug that missed explicit .BEFORE deps for implicit rules
add long integer arithmetic in if expressions
delete test.c; add `let <expression>' to parser
fix error staus propagation from dependencies to target
04/15/87 ignore .USE rules in dependency change check
:R: returns relative time in seconds
04/10/87 fix state.oldfile to append " ; " to avoid generating ";;"
add remtmp() to clean up temporary files during savestate()
fix superfluous `frozen variable changed' bug in load()
04/09/87 add r->semaphore and .SEMAPHORE for fine grain serialization
variable names may now contain any characters
`(x) = v' initializes a virtual state var -- no relation to $(x)
add .EXPORT to mark additional name=value pairs for $(=)
delete .LOAD for lack of use
.CLEAR and .INSERT on active targets invalid
04/08/87 change .SEARCH* to .SCAN* and search* to scan* for consistency
04/03/87 fix bug in :A: edit op that botched non-rules for the != case
fix bug in bindstate() that sometime returned 0 even if r->state!=0
04/02/87 add r->entries to decouple r->bind from directory search
add OPT_skew and state.skew to handle RFS time sk[r]ew botch
04/01/87 fix parse bug that interpreted wrong keywords in skipped if blocks
delete .NOTOUCH; add .IGNORE, .REPEAT and .VIRTUAL
delete .IFPARENT and .POST; add .BEFORE and .AFTER (ifparent implied)
delete .CLEANUP; add .ACCEPT (state.accept on per-rule basis)
03/26/87 check for abnormal termination in exit status diagnostic
OPT_builtin now turns off all previous OPT_global flags
:A=attr: fixed to check for builtin as well as named attributes
fix frozen var bug that omitted cmd line args from .mo file
add .UNTOUCH as inverse of .TOUCH
03/24/87 fix update() in make.c to properly update rule state
03/23/87 change .FORCE to only force target once per make
03/20/87 make .STATE an attribute
fix `multiple commands for...' message for dynamic updates
03/19/87 fix parser `\\n' bug for .MAKE scripts
fix parser bug that appended bad immediate deps on special.dependencies
03/18/87 delete obsolete -q and OPT_question
03/16/87 fix .MAKE interaction with complete(); -j0 -> serialize on update
03/11/87 update immediate() to properly handle .MAKE args and commands
fix `x was not updated' warning and `...lags...' warning bug
03/06/87 add :A: to return list of attributes for rule
skip for loop with no pattern
add `set +o monitor' to coshell startup
03/05/87 update error(3) interface
03/03/87 fix pp->cp->block bug in parse() push section
add oldshell to command() for automatic Bourne shell compatibility
03/02/87 change ROOT to LOCALROOT; change -lfmalloc to -lfaloc
02/27/87 change finish() to use switch over if ladder
change `stack cleanup commands' to `queue cleanup commands'
02/26/87 fix bug in compvar() that took length of normalized value
02/24/87 fix makefile dependency bug in parse
02/05/87 delete state.work and `x is up to date' message
02/04/87 change expand:shquote() to \\ quote all sh meta chars
02/02/87 add state.script to support .SCRIPT
01/30/87 add .SCRIPT to generate *.mk.sh bootstrap shell script
01/29/87 fix invalidate() again; delete state.last; add r->synctime for r->state
01/28/87 add state.last to fix call to invalidate(); add marks to invalidate()
modify depchange() to check for dependency re-orderings
01/27/87 switch to libpp.a standalone passthrough preprocessor
01/05/87 change `:' edit op separator missing error to warning
#include <> vs. "" warning only if !dontcare
12/19/86 add :///G: suffix to inhibit tokenizing; required for ' ' in from part
use C_ID2 to check operator characters
12/11/86 fix :T=G:
fix CON_eval bug that did not pass along CON_skip in getline()
fix readline() to translate \\\n to \\n
use dynamic arrays to construct makepp argv
complain about no makefile for -c option
12/08/86 update S support in makerules; do statetime(parent) only if r->post
12/07/86 .SOURCE.mk used to bind all makefiles (default uses $(MAKERULESPATH))
12/05/86 fix bug in $(-) portion of getval() that always returned null
12/02/86 add .SHAR builtin target; clarify option argument parsing
12/01/86 add ALTSOURCE & ALTDEPS to staterule() calls
()<rule> previous state of <rule>
(ALTSOURCE)<rule> alternate dirs to search for <rule>
(ALTDEPS)<rule> internal deps if <rule> generated
add special.openfile & special.openfd to optimize rstat() & search()
fix state.force to update targets with commands but no deps
add .SEARCH.nroff to detect .so dependencies
11/26/86 fix error() to gracefully handle long messages
11/25/86 use getcwd() from libx; clarify parse expansion conditions
11/24/86 add (.SEARCH)<rule> for state of generated .SEARCH rules
make() -> maketop(); make0() -> make()
11/21/86 change `.SEARCH : var' to `.STATE : var'
11/20/86 add parentage() to `don't know how to make' message in make0()
11/19/86 change .UPDATED to .IFPARENT; add ifparent:1, hasifparent:1, haspost:1
11/18/86 add rule merge to dynamic(); HOME no longer frozen by ::
`.SET : state' marks assigned vars as statevars until `.SET : nostate'
-R changed to -o reread
11/14/86 working version finally generated
11/07/86 change .OPTIONS to .SET
11/06/86 add options by name
11/01/86 add newbuffer() and freebuffer(); delete buf0, buf1 and buf2
delete prefix rules and all references to prefixes
add nested if, while, for and eval flow control blocks
replace gram.y and scan.c with parse.c and test.c
10/31/86 ----- internal release -----
10/31/86 big batch change:
add T=R expansion to replace ARUPDATE
add .COMPINIT to main() initilization sequence
add .MAKEPATHINIT to Makerules for makefile chain support
add .MAKEDEPS to replace .INTERNAL for makefile dependencies
add :U=(mark)dir: and :X=(mark)dir:
fix r->implicit check in implicit rule portion of make0()
fix cmd arg/compile omission on v->search variables in setvar()
fix compvar() to not compile cmd arg var definitions
add { :=+ } checks in scanner
fix attribute consistency checks in load()
fix `don't know how to make' check for state conflict
fix ** for MAKEPATH; add state.operator; fix state.question
.UNTOUCH -> .UNBIND; add .BIND; update Makerules
add static header in compile(); fix tstate check in make0()
relaxed r->search check in make0()
add .COMMAND.o, .ARCHIVE.o, .OBJECT, .DEFAULT<suffix>
.GLOBAL -> .GLOBAL.COMMAND, .GLOBAL.a -> .GLOBAL.ARCHIVE
.MATCHRULES -> .FORRULE, .MATCHVARS -> .FORVARS
add .DEPENDENCIES rule; add :G=<:; update .CLEAN and .CLOBBER
reverse op order to :N:, :G:; :T=F: does not expand symlinks
fix $_i_ and MAKEPATH sequencing in .CROSS.COMPILE
delete "very old" time
fix :: and :- ; delete $((<var>)) expansion; silence read warnings
add . to MAKEPATH; update cross()
add .UPDATED for .POST rules to be made only if target updated
r->precmds -> r->commands
delete ... syntax and r->poscmds; add .CLEANUP to stack til cleanup
fix INSTALL expansion of $(HOME) that froze HOME in :: operator
add $() to stop re-expansion at beginning of line
add ' quotes to getlin()
:T=P: if r->post, :T=U: if r->use
add $(~) to expand all target dependencies; :T=U: -> :T=X:
.NULL -> .COMMAND; r->null -> r->command
delete r->statedeps; all file targets now have corresponding rulestate
save precmds in state file and check for changes
add depchange() to check for changed dependencies
fixed r->search bound check in search()
retain special.target for dynamic() of r->use rules
expand -l notation in LDLIBRARIES
add .PARAMETER state var search to .PARAMETER files in search()
delete <file>(<var>) state vars -- use .PARAMETER state vars instead
change VERSION to string in compile()
.PARAMETER state variables are not expanded
add check to search() for added|deleted implicit dependencies
fix quote bug in getstate() that omitted some state vars
fix state.forcesearch to mark state vars with r->force at start
split RELEASE into BRANCH.RELEASE in compile.c
add canon() to intersect(), ancestor() & bsd_compatability to Makerules
use <error.h> and error() from libx
change -L to -K; "source has changed" error only if file found
add !isalnum() check for operators
switched malloc.c over to #include <fastmalloc.h>
add null pointer check in compvar(); fix delim check in cowait()
fix bindbase() and $(>) expansion for r->member rules
add utime() call to touch(); add :T=L: for archive (lib) members
add -a to Makerules to disable :U=include: and :U=lib: ops
delete unneeded "-l* : .DONTCARE" from :: operator definition
add time==0 check to rstat()
add BRANCH and RELEASE components to VERSION
add ".SOURCE.h : .INSERT ." to .MAKEINIT in Makerules
add state.user to note start of user activities (i.e. save state)
use hash rather than linear search for unique()
add .SEARCH; add statevar(), filevar() and varstate() to localize
add .VPATHINIT to Makerules for VPATH support
add :Z=R: and :Z=T[=s]: path name ops for VPATH support
do not remove symbolic link targets on interrupt
search attributes are inherited by dependencies; add :T=M: op
$(=) expands ARG_READ args; use hashalloc() & nohashalloc()
add :T=U<op>: for unbound rule typing
localize state var format to state.c; add rulestate()
check for polluted environment in readenv(); update isspecial()
allow :O[><=]=<n>: in expand1(); ALLOCATE() -> allocate()
fix !v loop in setopt(); check r->dontcare in scandeps()
delete "[]&" from C_TERMINAL; reset '|' in attributes()
expand <ret> in :T=<type>?<ret>: if true
delete state.autocompile; MAKERULESDIR -> MAKERULESPATH
.MAKEFILES -> MAKEFILES (var); vspecial() assumes : separated lists
optimized compile() and load() for state.compilestate
fix MSGFD dup2() bug in coinit() that closed good fd
add .ONOBJECT to Makerules for .CROSS.COMPILE support
add _make_ quit <exit-code>; add MAKECROSS for cross compilation
MAKERULES & MAKERULESDIR now `:' lists; add r->status=IMPLICIT
add MAKEEXCLUDE `:' list of excluded :U=<dir>: prefixes
fix multiple -g builtin rule checks; read env first
.IMMEDIATE implies .NOTOUCH -- clear deps if not .DONTCARE
add .IMMEDIATE -> make when read or loaded; matchscan() now recursive
add .OPTIONS : <var> for $(=)
.MATCHSCAN -> .MATCHRULES; add .MATCHVARS, .LOAD; DMAKERULESDIR
add -cfg to compile builtin rules; add // stop mark to :U=<dir>: op
fix token state bug in expand.c; fix implicit suffix check in make0()
fix sequencing in interrupt() and finish()
fix r->link bug in make.c; add symlink check to .DOINSTALL
add $(^) for alternate bound name of active r->current target
add clearlink() to compile() -- too many puns on r->link!
use bindfile() for state file; aim for position independent makefiles
delete INCLUDEDIR & LIBDIR, add MAKEINCLUDE & MAKELIB to Makerules
add | operator to edit matching; change VPATH -> MAKEPATH
add :U=<dir>: ancestor operator -- now catches .h and .a on VPATH
add $(TEST) and ** operator to Makerules; add r->force; VERSION=10
add state file locking; add :O=[<>=]<n>: component offset edit op
parameterize Makerules.mk using #if exists(x,$PATH); update finish()
delete configure.h -- put configuration switches in Makefile
fix r->status checks in make0()
fix .CLOBBER to also remove state file
".UNTOUCH .TOUCH : dir" causes dir to be ignored in bindfile()
add freelist(), freerule(), freevar(), newlist(), newrule(), newvar()
update Makerules with .*. var names; merge code[] into ctype[]
general cleanup; re-evaluate warning messages; add istype() macro
delete r->touch; add r->status==TOUCH; VERSION=9
add implicit state vars to search(); add var->search:1; VERSION=8
update $(!) and $(&) to generate all deps; add special.freerules
add file system and local system sync checks; add $(-!xy!z...)
change "* : *" -> .NULL and "*.a : *" -> .ARCHIVE
add .IDENT target using $(MKIDENT) and $(!)
add /local and /usr/local checks to Makerules
add *.EXCLUDE in bindfile() to exclude suffixes from prefix binding
invert -u option; add option.c; reorganize rule.c, variable.c
change bindbase() to lazily search *.SOURCE*
use r->bound with binddir() for *.SOURCE* deps; add bindar()
delete search(); change finddeps() to search(); add m4_search()
delete :M: edit component
fix *.l and *.y rules for remote directory compatability
replace getdefine() with subcase of finddeps()
fix $(+...) bug in variable.c; put language dep searches in search.c
add .c, .f, .F and .r to searchtab[]; add readargs() to modify argv
use bindfile() for finding makefiles
add $(VPATH) to Makerules using .MATCHSCAN on .SOURCE*
delete $(SRCPATH); add .MATCHSCAN to scan and match all rules
add .SEARCH(file) to handle binding for #include "a.[!h]"
add ".SEARCH.x : .y .z" for .y and .z files to inherit .x search
add file dependency search strategies in searchtab[]; r->search:3
change r->prealways,r->posalways to r->always; delete r->fullsearch
change CCFLAGS definition to only expand required -I options
add :I=s: prefix intersection op; :I: and :X: now gen valid dirs
add $(!) to expand all source dependencies
add "[target]" to dumprule(); use .ATTRIBUTE->deps, not ->link
fix "* : *" bug in gram.y
".SOURCE.h : $(INCLUDEDIR)" & ".SOURCE.a : $(LIBDIR)" -> Makerules
add "@ .UNTOUCH : *.h" to "*.c : *.y" rule
change release(sun) references to machine(sun)
10/08/86 ----- gsf returns to labs -----
09/30/86 ----- msf distributions -- vpath-nmake branches off -----
02/01/86 ----- jes distributions -----
08/30/85 ----- third distribution -----
last AT&T modifications by ulysses!gsf -- transfer to ulysses!make
08/29/85 add -lx expansion to libx.a in ::, remove .SOURCE.a -> -L connection
08/24/85 move strmatch() to libx.a
08/21/85 fix sequencing in compile() to preserve .mo on error
08/20/85 fix bug in make0() where odeps did not restore original r->deps
add CCFLAGS and F77FLAGS to "* : *"; "* : *.a" -> "*.a : *"
08/11/85 in make0() generate x() if x->time > 0 (if x is an existing file)
08/06/85 delete .SEARCH verifcation of 07/26/85 for now
08/05/85 set $(MAKEFILE) to the name of the first makefile
08/02/85 fix bug involving multiple operators in large makefiles
save original dependencies in make0(); fix r->compiled .ms bug
08/01/85 commit to ksh -- check MAKESHELL before SHELL for non-ksh users
07/31/85 nmake: nmake.1, nmake-intro.0, mkcv.1, mkold.1, mkold.sh
change all `make' references to `nmake' for AT&T Toolchest(TM)
07/30/85 add man pages *.[1-9]* to .INSTALL; use BINDIR, ETCDIR, LIBDIR, MANDIR
07/26/85 verify that .SEARCH files will be found by the preprocessor|compiler
07/25/85 fix bug for .NULL targets with suffixes; add :F=format: operator
for make install check .INSTALL.x for command x
add ctags builtin action; check state var deps for *.sh targets
for "*.x : *.y", add both .x and .y to .SUFFIXES
07/24/85 -k option makes "don't know how to make" a warning
do not expand $(-) with -o option on
07/23/85 search x if "x : .SEARCH" and x dynamically generated; add SRCPATH
fix null dereference error in main.c for no makefile case
07/11/85 ----- second distribution -----
07/10/85 more make object checks; allow space before initial { in commands
07/09/85 add .FOREGROUND to *.y rules to synchronize y.tab.h generation
07/08/85 use v->oldvalue in compile.c to detect frozen variables
add invalidate() to invalidate targets with source dependencies
07/07/85 state file for 'make x' with no makefile is 'x.ms'
07/05/85 pass "*.x : *.y" dependencies to each implicit target
append .x to .SUFFIXES for "*.a : *.x"; update .LINT
07/03/85 fix scanner to ignore "[ \t]*\n" lines in addition to "\n" lines
07/02/85 allow += to modify command line variable definitions
06/30/85 make \n a token in gettok(); delete :L: operator; $("\n") -> newline
06/27/85 fix make clean|clobber to only remove files in . unless -m is set
fix default rules to support (CCFLAGS) as a state var dependency
save var values in oldtab for .mo when var defined on command line
allow .MAKEINIT rules to modify command line variable definitions
fix bug with multiple -f or any -g files; add -R recursion check
add user attributes, .ATTRIBUTE and $(:A=a|b) access
add consistency checks in cowait(); generalize builtin attributes
use rstat() [open(),fstat()] instead of stat() -- the same as cpp
06/26/85 use unbound name in "source has changed" message
06/24/85 fix $(..|"X") to allow editing on "X"
06/22/85 update :: rule to properly handle ./* and ../* dependencies
invert meaning of -h -- search by default, -h turns off search
06/21/85 reverse .MAKEFILES to "Makefile makefile"
06/20/85 add "* : *.l" with -ll; ".SOURCE.h : /usr/include" handled
".ms" is the default state file if there is no makefile
06/19/85 handle `X+= Y' which was interpreted as `X+ = Y' producing a warning
eliminate some string duplications; re-use old variable value space
fix '\\' tokenizing in $(..); add "make print x" and .FILES.x
iteratively evaluate $(..) tokens in col 1; $$(..) -> $(..) and stops
06/18/85 add $(:E=<msg>) and $(:W=<msg>) error|warning message hooks
06/17/85 `x :: x.sh' properly handled using .IMPLICIT
.MAIN handled by rule name; special.main now .MAIN rule pointer
06/11/85 add :T=t=pat:, :T=t!=pat: and :T=t?ret: edit forms
06/10/85 fix wrong += frozen message; fix System V .LINT
clean up error messages in read.c; use $(SED) for .READONLY.*
06/09/85 add automatic makefile dependency checking (no state vars -- sorry)
06/07/85 add `.' to hide internal variables in Makerules.mk; update make.1
add .LPROF action for System V line count profiling
.NOTOUCH rules always made; .GLOBAL.x deps dynamically expanded
fix dumprule() to handle { } commands; move dumpcmd() to dump.c
06/06/85 fix .CLEAR to reset r->dynamic and r->use; set r->link=0 in load()
06/05/85 command line variable assignment ordered from left to right
06/04/85 fix frozen var checks in compile() -- env was not handled properly
06/01/85 ----- first distribution -----
add state.reading and v->frozen to warn about frozen vars
change argv[] stuff in main(), add $(=) $(?) hooks to argv[]
05/30/85 add new .LINT, override check to precious()
add :T=T: operator for explicit targets, new .POST .NOTOUCH meaning
05/28/85 add -O (state.override) and -M (state.nomade) options for lint
05/21/85 fix placement of immediate() call in load()
05/20/85 add "*.o : *.c" to ".c.o:" conversion syntax
05/18/85 fix make0() interface to properly handle r->link
05/03/85 update hash table interface
05/02/85 add -k state.keepgoing option to continue with sibling deps on error
fix bug where .o ignored if not in .a but older than .a
05/01/85 releases: 4.2 BSD, 5.2 System V, 8th Edition, uts
machines: vax, UN*X PC, 3B2, 3B20, power6
04/25/85 -L -> -Wl,-L in Makerules.mk for system V; add buf check for +=
-A implies -S; fix .y and .l .READONLY rules for concurrency
04/24/85 add $(s:G=<suf>) to expand components that can generate <suf> files
04/19/85 properly handle case where file modify time is less than previous
remove alias compilations -- only unbound names in make objects
retain unbound rule names for compilation and file dep states
04/16/85 move implicit prefix checks to bindfile()
04/09/85 remove state.exact, put -x with state.implicit
04/08/85 add C_VARIABLE to check makefile variable names
04/05/85 switch to <generic.h>; add r->cmdspecial & r->fullsearch (unused)
04/04/85 compile unbound rule names from akatab; fix -h, -x and -H options
04/03/85 add :N!=<pattern>: edit op
03/31/85 add state.accept -A to accept existing targets
03/30/85 move chksrc() logic to bindfile(); add implicit r->current logic
03/29/85 fix prefix rules -- they didn't work since 10/31/85 !!
add touchar() verification; add .MAKEFILES for default makefiles
03/28/85 add .SOURCE.a to Makerules; add .[UN]TOUCH, remove _make_ [un]touch
03/26/85 change <.h> to .SOURCE.h; fix .INIT bug; add .APPEND.x
03/22/85 use .PARAMETER in make(); add CPPSCAN -T test code to state.c
03/21/85 fix -t with -m option; add .PARAMETER file attribute
03/20/85 fix sequencing in finish(); fix ar member exact time; fix ar .INSTALL
03/19/85 only expand $(...) symbols; $$(...) expands to $(...)
03/18/85 symbol names recursively expanded
add .USE attribute check by make0(); .READONLY is generic
03/15/85 fix -s option; cmd opts take precedence
03/12/85 change ignored functions to (void)
03/11/85 update Makerules.mk
03/09/85 fix bug when touching archive members with state var dependencies
03/08/85 fix bug in make malloc() -- max was not in sync with brk
check for `first-arg'.mk if no makefiles found -- gobble arg if found
add .CURRENT and .SEARCH attributes; remove .ARCHIVES and .INCLUDES
03/07/85 all files automatically preprocessed by MAKEPP
03/06/85 add rules: target to make Makefile to compile and install Makerules
03/04/85 make edit() delete one trailing `/'
add $(..:C@..) to add delimiter @ to substitute; allow any alpha option
03/01/85 add r->attribute; add -c to force compile only; add .DONTCARE
02/28/85 change bind() to return bound rule pointer; clarify $< $* $& usage
02/25/85 clean up archive.c; kill alias bug in compile.c
02/21/85 add .IMPLICIT attribute to force implicit dep checks; handle zombies
02/20/85 fix signal handling for background jobs
02/19/85 fix semantics of rules with state var deps; add compstate()
02/18/85 use state.option instead of ON(OPTION); special.rule instead of r_rule
02/14/85 add dump.c and read.c; compile rule aliases
02/13/85 optimize expand() by adding a few subroutines
add compiled makefile.ms; atomize() to enforce one rule per name
02/12/85 fix grammar; add :V: to substitute value without expanding
add += append assignment; add $@ and $# to operators; update Makerules
02/11/85 add :T=x<pat>: to match shell <pat> on expanded value
.MAIN handling fixed; docompile() added to recursively set r->compiled
02/08/85 always compile into makefile.mo; move .(makefile) to makefile.ms
add $& for list of explicit dependencies
02/07/85 Install suplied for make bootstrap installation
02/05/85 add compiler interface; builtin rules put in MAKERULES
02/04/85 split files.c into bind.c, compile.c and state.c
02/01/85 preprocess only if -p or if #preprocess first line in makefile
add malloc() optimized for little or no free() calls
add /*..*/ and //..\n comments to makefile
add #..\n comments to .(makefile) -- leaves room for version info
01/30/85 add .ALL and .LINT builtin actions
01/29/85 if makefile specified then try `.TARGET' if `target' not defined
01/28/85 add any() replacing strpbrk(); gettok(), settok() replacing strtok()
add :X=<sym>: cross product substitution
01/25/85 fix bug with strtok() and state vars -- strtok() modifies buffer!
01/24/85 add OLDCPP switch to check for new and old CPP, use -N in new cpp
01/23/85 add .OPERATOR attribute, change .ABBREV to "::", remove $(.ARG*)
01/22/85 little fixes, clean up builtin[] and -l option
01/21/85 put VPATH dependent stuff in .MAKEINIT
add immediate() to check rules with r->immediate when modified
add .UPDATE and .UCPIO, .UPRINT, .UTAR for update maintenance
add .MAKE attribute -- allows docmd() for all command lists
01/18/85 $(-xy) == 1 if -x or -y option set, null otherwise
01/17/85 remove shell file expansion in dep lists because of binding ambiguity
remove dir->entries -- not used because of shell expansion deletion
add .TAR, .INSTALL and .DOINSTALL builtin rules
add .NULL and "" rule for generating null suffix targets
01/16/85 use parse1(.ABBREV) for interpreting :: input
add parse1(.MAKEINIT) to main() before make(.INIT)
add -g option to read in global makefile definitions
01/15/85 unify variable edit forms: :N=<pattern>:T=<type>:
add :: abbreviation and associated abbrev[] rules
add ://..&../: notation to substitute form
add .CLEAN, .CLOBBER, .CPIO and .PRINT builtin actions
add $(+...) to access child dependencies in automatic variables
01/14/85 expand() edit expressions in variable substitutions
change .y.o & .l.o rules to use .y.c and .l.c
01/11/85 add r->dontcare -- no error if rule can't be made
01/09/85 miscellaneous fixes to expand()
01/07/85 add sys error message for DEBUG errors
01/04/85 warn when #define state variable is inside a conditional
put bound state variable names in .(makefile)
-m option fixed
01/01/85 "fourth generation make"
12/18/84 keep -h files in .(makefile), only search when date changes
add $(x|y|z...) to expand first non-null value
add $(file(var)) to expand to #define value of var in file
12/14/84 add -m (MOVE) to move targets to corresponding source dir
12/11/84 add $@ [pre-commands] and $# [post-commands], $(X[rule]) for any rule
12/10/84 miscellaneous changes to option handling, `-' prepended on $-
for automatic var x: $(xx) corresponds to parent target
fix getlin() to always expand first part of line that has `$(x)' in it
fix archive sequencing in bindfile()
change .y.o and .y.c to produce $(<:DBS=.h) instead of y.tab.h
add silent coshell function to not echo selected commands
add alias(); add .WAIT as an alias for .FOREGROUND
add .POST attribute; dependencies made after target is made
12/08/84 change _message_ to _make_, `_make_ make' to `_make_ read'
12/07/84 fix scan() method of handling {} command lists
echo `x is up to date' for x on command line and !x->target
don't include notouch, post or state dependencies in $< or $*
add line number argument to parse()
# is only comment char if preceded by space (or beginning of line)
12/06/84 use bit states in gram.y
remove `(error)' from error messages, add .USE error check
move `# <line> <file>' interpreter from yylex() to getlin()
12/05/84 make precious(.INTERNAL) always true
12/04/84 fix expand() to count parentheses
change flags variable for command XX to XX-
change .NOJOB to .FOREGROUND and r->nojob to r->foreground
add FOREGROUND state to execute commands in foreground and block
11/30/84 x := y evaluates y when makefile is read
cmd expansion delayed until job slot freed in cosend()
check VPATH to set -u and .INSERT onto .SOURCE (build emulation)
$(x/OLD/NEW/) substitutes NEW for OLD in each compnent of x's expansion
11/29/84 add .INSERT to insert instead of append dependencies
add -u option (DUPLICATE) that allows duplicate files (build emulation)
11/28/84 add Machine to file name components, (warning) for unknown component
add +option to turn option off
11/27/84 interpret "dir/file" rule names correctly
add -h to search for #include header files
11/20/84 use static buffers buf0 & buf1, watching out for recursion
some minor fixes and code consolidation
11/19/84 remove -e, [export], setenv(); set proper var order in main()
description files now free format except for `...'
add {...} command list specification -- alternative to tabs
add quoted rule names to scan.c ("name")
11/17/84 move make(.INIT) before special rule check
change .ORPHAN to .INTERNAL for clarity
11/16/84 add <file>(<var>) state variables; state is value of `#define <var>'
11/06/84 add coshell() and cowait() interface to co-shell
11/01/84 initial state variable ideas, state file added
10/31/84 ideas about generic hash table interface -- hash.h
10/27/84 $(<), $(>) and $(*) defined
edit operators applied to each token in variable value
10/25/84 edit operator syntax defined; add post commands, .INIT and .DONE
10/19/84 code structure conversion -- "third generation make"
10/11/84 .CLEAR dependency defined
10/10/84 old make works on system5 and BSD; .MAIN added
10/07/84 add shell as co-process; <.x> predecessor of .SOURCE.x
10/05/84 add duplicate source message to old make
10/03/84 add .SOURCE to old make
09/19/84 first thoughts -- add mk script with cpp front end to old make