##################################################
###                                            ###
### Makefile for LCLint                        ###
###                                            ### 
### designed for use with gmake (GNU make)     ### 
###                                            ###  
### original version based on LCL Makefile     ###
### completely revised December 1993           ###   
###                                            ###
### All system dependant information is in     ###
### Makefile.sys.   This file should not need  ###
### to be edited.                              ###
###                                            ###
##################################################

.SUFFIXES : .lcl .lcs .lh .h .c .o .check .checkh .checks .check2
.PHONY : all dorerelease retest rerelease homeversion cleanup flags
.IGNORE: dorerelease retest rerelease

CHECK = 0
USEGC = 0
USEDMALLOC = 0
DOANNOTS = 0
NOLCL = 0
SANITIZER = 0

include Makefile.sys
include Makefile.sources

### older versions of gmake insist this comes first!

all: updateversion lclint

# lclint

LINTFLAGS = $(CPPFLAGS) -f lclint.lclintrc -f ~/.lclintrc

NAMESLINTFLAGS = $(LINTFLAGS) +distinctinternalnames \
	-internalnamecaseinsensitive +internalnamelookalike \
	-externalnamelen 24

#LINTFLAGS = -nolh -checks +showscan +stats +charindex -paramuse \
#           -export -repexpose -retalias +voidabstract \
#  	    +forwarddecl -incondefs \
#	    $(CPPFLAGS) +allmacros -S$(SPECDIR)

#LINTFLAGS =  +checks +showscan +stats +charindex \
#            -export -repexpose -retalias +voidabstract \
#  	    +forwarddecl -memchecks +relaxquals -impouts +showsummary \
#	    $(CPPFLAGS) +allmacros -S$(SPECDIR) +null +usereleased \
#	    +branchstate +mustfree +memtrans +showfunc +structimponly \
#	    +globstate +globalias +compdef -supcounts 

#LINTFLAGS = -nolh +checks +showscan +stats +charindex +showfunc -S$(SPECDIR) \
#            -export +voidabstract +forwarddecl +relaxquals -impouts +showsummary \
#	    $(CPPFLAGS) +allmacros \
#            -memchecks -usereleased -mustfree -memtrans -retalias  \
#	    -repexpose +null -globalias \
#	    -branchstate

###
### top level
### 

quick: 
	setenv CHECK 0 ; setenv USEGC $(USEGC) ; \
	setenv USEDMALLOC $(USEDMALLOC) ; setenv DOANNOTS $(DOANNOTS) ; \
	$(MAKE) -e lclint

lclint: $(OBJ) 
	@echo '<<< Linking >>>'
	@$(GCC) $(DEBUGFLAGS) -o lclint $(OBJ) $(LINKFLAGS)

sanitizer: $(SANITIZEROBJ)
	@echo '<<< Linking >>>'
	$(GCC) $(DEBUGFLAGS) -o sanitizer $(SANITIZEROBJ) $(LINKFLAGS)

###
### grammars
###

# -p yl flag to bison renames yyparse ==> ylparse, yllex ==> yllex
# this is probably NOT compatible with yacc.

Headers/signature_gen.h : signature.c
Headers/cgrammar_gen.h : cgrammar.c
Headers/llgrammar_gen.h : llgrammar.c
flags: Headers/flag_codes.gen
Headers/flag_codes.gen: flags.def
	@echo 'Regenrating flag_codes.gen from flags.def'
	@echo -n 'Number of flags: '
	@$(CAT) flags.def | $(GREP) "FLG_" | wc -l
	@$(CAT) flags.def | $(GREP) "FLG_" > Headers/flag_codes.gen

signature.o : signature.y bison.head
	@echo 'Making signature.o'
	@$(YACC) $(YFLAGS) -p lsl signature.y
	@$(CAT) bison.head y.tab.c > signature.c
	@$(CAT) bison.head y.tab.h > Headers/signature_gen.h
	@$(GCC) $(CNWFLAGS) -c signature.c

### 
### this is a hack that depends on yacc producing # define'd tokens
### to generate a header file containing just the tokens.
###

### Some yacc's put output in X.c, others in X.tab.c, other in y.tab.c
### (blecch)

cgrammar.o : cgrammar.y bison.head
	@echo 'Making cgrammar.o'
	@$(YACC) $(YFLAGS) cgrammar.y
	@$(CAT) bison.head y.tab.c > cgrammar.c
	@$(CAT) bison.head y.tab.h bison.reset > Headers/cgrammar_tokens.h
	@$(GCC) $(CNWFLAGS) -c cgrammar.c

sgrammar.o : sgrammar.y bison.head
	@echo 'Making sgrammar.o'
	@$(YACC) $(YFLAGS) sgrammar.y
	@$(CAT) bison.head y.tab.c > sgrammar.c
	@$(CAT) bison.head y.tab.h bison.reset > Headers/sgrammar_tokens.h
	@$(GCC) $(CNWFLAGS) -c sgrammar.c

llgrammar.o  : llgrammar.y bison.head
	@echo 'Making llgrammar.o'
	@$(YACC) $(YFLAGS) -p yl llgrammar.y
	@$(CAT) bison.head y.tab.c bison.reset > llgrammar.c
	@$(CAT) bison.head y.tab.h bison.reset > Headers/llgrammar_gen2.h
	@$(CAT) bison.head y.tab.h bison.reset > Headers/llgrammar_gen.h
	@$(GCC) $(CNWFLAGS) -c llgrammar.c

###
### scanner
###

cscanner.o : cscanner.c
	$(GCC) $(CNWFLAGS) -c cscanner.c -o cscanner.o

###	@$(GCC) -DYY_USE_PROTOS $(CNWFLAGS) -c cscanner.c -o cscanner.o

###
### defaults
###

# .lcl.lh:
#	$(LCL) -h $*

.lcl.lcs:
	$(LCLINT) $*

.l.c:  flex.head
	$(LEX) $(LFLAGS) $*.l
	@cat flex.head lex.yy.c > $*.c

flags.o: flags.c flags.def Headers/flag_codes.gen
ctype.o: ctype.c cttable.i ctbase.i
exprNode.o: exprNode.c exprData.i

message.o: message.c
	@echo 'Compiling 'message.c'...'
	@$(GCC) $(CNCFLAGS) -c message.c

simp_message.o: simp_message.c
	@echo 'Compiling 'simp_message.c'...'
	@$(GCC) $(CNCFLAGS) -c simp_message.c

abstract.o: abstract.c
	@echo 'Compiling 'abstract.c'...'
	@$(GCC) $(CFLAGS) -O2 -c abstract.c

cscanner.check: cscanner.l cscanner.c

.c.check: lclint.lcd lclint
	$(BASEDIR)/src/lclint $(LINTFLAGS) +neverinclude +partial -showsummary -load lclint.lcd $*.c

.c.check2: lclint.lcd lclint
	$(BASEDIR)/release/lclint2.0 $(LINTFLAGS) +neverinclude +partial -showsummary -load lclint2.lcd $*.c

bogus:
	$(BASEDIR)/src/lclint $(LINTFLAGS) +neverinclude +partial -showsummary -load lclint.lcd llgrammar.c context.c

.c.checkh: lclint.lcd lclint
	$(RELEASEDIR)/lclint $(LINTFLAGS) +neverinclude +partial -load lclint.lcd Headers/$*.h $*.c -dump lclint.lcd

.c.checks: lclint.lcd lclint
	$(BASEDIR)/src/lclint $(LINTFLAGS) +singleinclude +partial -load lclint.lcd $*.c -dump lclint.lcd

.c.o:   Headers/flag_codes.gen
	@if ($(CHECK)) $(BASEDIR)/release/lclint $(LINTFLAGS) \
	   +tmpcomments +neverinclude -supcounts +partial -showsummary $*.c \
           -load lclint.lcd
	@echo 'Compiling '$*.c'...'
	$(GCC) $(CFLAGS) -c $*.c

###
### checking
###

lclint.lcd: ~/lclint/lib/stdlibs.lcd allheaders.c
	@echo 'Making lclint.lcd library file'
	$(BASEDIR)/src/lclint $(LINTFLAGS) allheaders.c +partial -dump lclint.lcd 

fast:     up quick retest lint
remake:   up quick
complete: flags cleanup backup dorelease lint

lintnolib:   
	./lclint $(LINTFLAGS) -singleinclude $(ALLSRC)

# cppmain.c uentry.c cpplib.c exprNode.c +partial

# $(ALLSRC)

# was +partial

lint:   
	which ./lclint
	./lclint $(LINTFLAGS) +singleinclude $(SRC) -dump lclint +partial

lintone:   
	which ./lclint
	./lclint $(LINTFLAGS) cpptest.c +partial +singleinclude

lint2.0:   
	which $(BASEDIR)/release/lclint2.0
	$(BASEDIR)/release/lclint2.0 -load $(BASEDIR)/release/standard2.0.lcd $(LINTFLAGS) +singleinclude $(ALLSRC) -dump lclint2

lintprof:   
	pixie lclint
	lclint.pixie $(LINTFLAGS) +singleinclude $(ALLSRC) -dump lclint
	prof -pixie lclint lclint.Counts lclint.Addrs

lintall:   
	which lclint
	lclint $(LINTFLAGS) +singleinclude $(ALLSRC) -dump lclint

plainLint: 
	lint -IHeaders $(SRC)

lintStrict: lclint.lcd
	lclint $(LINTSTRICTFLAGS) +singleinclude $(SRC) -load lclint.lcd

###
### misc
###

indent:
	echo "Don't do it!"
#	$(foreach file, $(SRC), \
#	  echo $(file) ;  $(INDENT) $(file) ;)

###
### alternatives (tests, releases, backups, etc.)
###

        ### -e option makes environment variables take precedence

.PHONY : test quicktest opt backup

cmake:
	$(MAKE) quick ; $(MAKE) test 

kmake:
	$(MAKE) up ; $(MAKE) backup ; $(MAKE) quick ; $(MAKE) test ; $(MAKE) lint

test: 
	cd ~/lclint/test ; setenv LCLINTP ~/lclint-2.4/lclint ; time $(MAKE) -e fulltest

quicktest: lclint
	cd $(TESTDIR) ; setenv $(LCLINT) $(WORKDIR)/$(LCLINT) ; $(MAKE) quicktest

opt: flags
	$(MAKE) up ; \
	setenv GCC '$(GCCOPT)' ; \
	setenv CHECK 0 ; \
	$(MAKE) -e lclint

contopt :
	setenv GCC '$(GCCOPT)' ; \
	$(MAKE) -e lclint

contquickopt :
	setenv GCC '$(GCCOPT)' ; \
	setenv CHECK 0 ; \
	$(MAKE) -e lclint

prof : 
	$(GCC) $(DEBUGFLAGS) -p -o lclint.prof $(OBJ) $(LINKFLAGS)


stags:	
	etags -d -t $(SRC)


tags:
	etags -d -t $(SRC) *.i flags.def $(GRAMS)

alltags:
	etags -d -t $(SRC) ctbase.i cttable.i exprData.i flags.def $(GRAMS) Headers/*.h 

htags:
	etags -d -t Headers/*List.h 

localconstants:
	@mv Headers/local_constants.h Headers/local_constants.last
	@echo '/* local_constants.h - created automatically by gmake localconstants */' \
		> Headers/local_constants.h
	@echo '/*@constant observer char *DEFAULT_CPPCMD;@*/' >> Headers/local_constants.h
	@echo '# define DEFAULT_CPPCMD $(DEFAULT_CPPCMD)' \ >> Headers/local_constants.h
	@echo '/*@constant observer char *SYSTEM_LIBDIR;@*/' >> Headers/local_constants.h
	@echo '# define SYSTEM_LIBDIR $(SYSTEM_LIBDIR)' >> Headers/local_constants.h
	@echo '/*@constant observer char *DEFAULT_LARCHPATH;@*/' >> Headers/local_constants.h
	@echo '# define DEFAULT_LARCHPATH $(DEFAULT_LARCHPATH)' >> Headers/local_constants.h
	@echo '/*@constant observer char *DEFAULT_LCLIMPORTDIR;@*/' >> Headers/local_constants.h
	@echo '# define DEFAULT_LCLIMPORTDIR $(DEFAULT_LCLIMPORTDIR)' >> Headers/local_constants.h

updateversion:
	@mv Headers/herald.h Headers/herald.last
	@echo '/* herald.h - created automatically by gmake updateversion */' > Headers/herald.h
	@echo '/*@constant observer char *LCL_VERSION;@*/' >> Headers/herald.h
	@echo '# define LCL_VERSION "LCLint '`cat $(VERSION_NUMBER)`' --- '`date +"%d %b %y"`'"' \
              >> Headers/herald.h
	@echo '/*@constant observer char *LCL_PARSE_VERSION;@*/' >> Headers/herald.h
	@echo '# define LCL_PARSE_VERSION "LCLint '`cat $(VERSION_NUMBER)`'"' \
              >> Headers/herald.h

	@echo '/*@constant observer char *LCL_COMPILE;@*/' >> Headers/herald.h
	@echo '# define LCL_COMPILE "Compiled using '$(GCCOPT)' on '`uname -a`' by '`whoami`'"' >> Headers/herald.h

supdateversion:
	@mv Headers/sHerald.h Headers/sHerald.last
	@echo '/* sHerald.h - created automatically by gmake updateversion */' > Headers/herald.h
	@echo '/*@constant observer char *SANITIZE_VERSION;@*/' >> Headers/sHerald.h
	@echo '# define SANITIZE_VERSION "Sanitizer '`cat sLastVersion`' --- '`date +"%d %b %y"`'"' \
              >> Headers/sHerald.h
	@echo '/*@constant observer char *SANITIZE_COMPILE;@*/' >> Headers/sHerald.h
	@echo '# define SANITIZE_COMPILE "Compiled using '$(GCCOPT)' on '`uname -a`' by '`whoami`'"' >> Headers/sHerald.h

shomeversion:
	@mv Headers/sHerald.h Headers/sHerald.last
	@echo '/* sHerald.h - created automatically by gmake updateversion */' > Headers/herald.h
	@echo '/*@constant observer char *SANITIZE_VERSION;@*/' >> Headers/sHerald.h
	@echo '# define SANITIZE_VERSION "Sanitizer '`cat sLastVersion`'+ --- '`date`'"' \
              >> Headers/sHerald.h
	@echo '/*@constant observer char *SANITIZE_COMPILE;@*/' >> Headers/sHerald.h
	@echo '# define SANITIZE_COMPILE "Compiled using '$(GCCOPT)' on '`uname -a`' by '`whoami`'"' >> Headers/sHerald.h

homeversion:
	@mv Headers/herald.h Headers/herald.last
	@echo '/* herald.h - created automatically by gmake homeversion */' > Headers/herald.h
	@echo '/*@constant observer char *LCL_VERSION;@*/' >> Headers/herald.h
	@echo '# define LCL_VERSION "LCLint '`cat $(VERSION_NUMBER)`'+ --- '`date`'"' >> Headers/herald.h
	@echo '/*@constant observer char *LCL_PARSE_VERSION;@*/' >> Headers/herald.h
	@echo '# define LCL_PARSE_VERSION "LCLint '`cat $(VERSION_NUMBER)`'+"' \
                >> Headers/herald.h
	@echo '/*@constant observer char *LCL_COMPILE;@*/' >> Headers/herald.h
	@echo '# define LCL_COMPILE "Compiled using '$(GCCOPT)' on '`uname -a`' by '`whoami`'"' >> Headers/herald.h

dorelease: 
	@echo 'Making Release '`cat $(VERSION_NUMBER)`
	$(MAKE) updateversion 
	setenv CHECK 0 ; $(MAKE) opt
	@echo 'Libraries...'
	-$(MAKE) libs
	@echo 'Testing...'
	-$(MAKE) test
	@cp lclint $(RELEASEDIR)/lclint	
	@$(MAKE) homeversion 
	@echo '*** Done Release '`cat $(VERSION_NUMBER)`

linkrelease: 
	@echo 'Making Release '`cat $(VERSION_NUMBER)`
	$(MAKE) updateversion && $(MAKE) contopt
	@echo 'Testing...'
	-$(MAKE) 
	@cp lclint $(RELEASEDIR)/lclint	
	@$(MAKE) homeversion 
	@echo '*** Done Release '`cat $(VERSION_NUMBER)`

rerelease : dorelease

backup:
	@echo 'Backup: '`cat $(VERSION_NUMBER)`	
	tar cf '$(RELEASEDIR)/bk-'`date +"%y-%m-%d-%H"`.tar $(SRC) $(GRAMS) \
             *.head *.reset flags.def *.i Headers/*.h Headers/*.nf Headers/*.gen \
             Makefile* lclint.lclintrc cgrammar.c cscanner.c
	gzip $(RELEASEDIR)/bk-`date +"%y-%m-%d-%H"`*.tar
# assumes year, month, day, and hour haven't changed yet!

countlines:
	wc -l $(SRC) Headers/*.h
	wc -l $(ALLSRC) Headers/*.h

###
### libraries
###

libs:
	$(CP) $(REALDIR)/lib/ansi.lcd $(REALDIR)/lib/ansi.bak
	$(LCLINT) +impconj -nolib $(LIBSPECSDIR)/ansi.h -dump $(REALDIR)/lib/ansi.lcd
	$(CP) $(REALDIR)/lib/ansistrict.lcd $(REALDIR)/lib/ansistrict.bak
	$(LCLINT) +impconj -nolib -DSTRICT $(LIBSPECSDIR)/ansi.h -dump $(REALDIR)/lib/ansistrict.lcd
	$(CP) $(REALDIR)/lib/posix.lcd $(REALDIR)/lib/posix.bak
	$(LCLINT) +impconj -nolib $(LIBSPECSDIR)/ansi.h $(LIBSPECSDIR)/posix.h -dump $(REALDIR)/lib/posix.lcd
	$(CP) $(REALDIR)/lib/posixstrict.lcd $(REALDIR)/lib/posixstrict.bak
	$(LCLINT) +impconj -nolib -DSTRICT $(LIBSPECSDIR)/ansi.h $(LIBSPECSDIR)/posix.h -dump $(REALDIR)/lib/posixstrict.lcd
	$(CP) $(REALDIR)/lib/unix.lcd $(REALDIR)/lib/unix.bak
	$(LCLINT) +impconj -nolib $(LIBSPECSDIR)/ansi.h $(LIBSPECSDIR)/posix.h $(LIBSPECSDIR)/unix.h -dump $(REALDIR)/lib/unix.lcd
	$(CP) $(REALDIR)/lib/unixstrict.lcd $(REALDIR)/lib/unixstrict.bak
	$(LCLINT) +impconj -nolib -DSTRICT $(LIBSPECSDIR)/ansi.h $(LIBSPECSDIR)/posix.h $(LIBSPECSDIR)/unix.h -dump $(REALDIR)/lib/unixstrict.lcd

###
### cleaning
###
### Standard entries to remove files from the directories
###    up       --- remove .o files and grammar derivatives
###    tidy     --- eliminate unwanted files
###    clean    --- delete derived files, except for spec-derived files
###    pristine --- delete all derived files
###

.PHONY .IGNORE : up tidy clean pristine

pristine: clean
	-rm -f *.lcs *.lslo

cleanup:
	-rm -rf ~/tmp
	-rm /tmp/ll*.c
	-rm /tmp/cl*.c
	-rm /tmp/lmx*.c
	-mkdir ~/tmp

clean: tidy
	-rm -f core lclint lclint.lcd 
	-rm -f *.bib *.dvi *.idx  *.log *.o *.ps *.toc
	-rm -f cgrammar.c lex.yy.c test* #*# 
	-rm Headers/*~ Headers/#*#

tidy:
	-rm -f ,* .,* *.CKP *.BAK .emacs_[0-9]* core a.out *.*~

up: 
	-rm -f *.o cgrammar.c llgrammar.c signature.c

###
### dependancies
###

depend:
	$(MAKEDEPEND) $(CINCLUDES) $(CFLAGS) -f Makefile.depend $(SRC) $(GRAMS)

general.o: Makefile.sys Headers/general.h Makefile
llmain.o: Makefile.sys Makefile

include Makefile.nodepend

lclint.lcd: Headers/lclintMacros.nf Headers/llbasic.h Headers/basic.h
lclint.lcd: Headers/general.h
lclint.lcd: Headers/forwardTypes.h Headers/cstring.h Headers/bool.h
lclint.lcd: Headers/system_constants.h Headers/misc.h Headers/ynm.h
lclint.lcd: Headers/message.h Headers/fileloc.h
lclint.lcd: Headers/fileId.h Headers/globals.h Headers/lltok.h
lclint.lcd: Headers/clause.h Headers/cstringSList.h
lclint.lcd: Headers/flag_codes.h Headers/flag_codes.gen Headers/flags.h
lclint.lcd: Headers/llerror.h Headers/code.h Headers/source.h
lclint.lcd: Headers/mapping.h Headers/sort.h Headers/lclctypes.h
lclint.lcd: Headers/paramNode.h Headers/paramNodeList.h Headers/lsymbol.h
lclint.lcd: Headers/abstract.h Headers/ltokenList.h Headers/importNode.h
lclint.lcd: Headers/importNodeList.h Headers/sortList.h
lclint.lcd: Headers/lsymbolList.h Headers/lsymbolSet.h Headers/sortSet.h
lclint.lcd: Headers/pairNode.h Headers/pairNodeList.h
lclint.lcd: Headers/declaratorInvNode.h Headers/declaratorInvNodeList.h
lclint.lcd: Headers/typeExpr.h Headers/declaratorNode.h
lclint.lcd: Headers/declaratorNodeList.h Headers/arrayQualNode.h
lclint.lcd: Headers/varNode.h Headers/varNodeList.h
lclint.lcd: Headers/quantifierNode.h Headers/quantifierNodeList.h
lclint.lcd: Headers/storeRefNode.h Headers/storeRefNodeList.h
lclint.lcd: Headers/modifyNode.h Headers/letDeclNode.h
lclint.lcd: Headers/letDeclNodeList.h Headers/programNode.h
lclint.lcd: Headers/programNodeList.h Headers/lclPredicateNode.h
lclint.lcd: Headers/exposedNode.h Headers/CTypesNode.h
lclint.lcd: Headers/initDeclNode.h Headers/initDeclNodeList.h
lclint.lcd: Headers/constDeclarationNode.h Headers/varDeclarationNode.h
lclint.lcd: Headers/varDeclarationNodeList.h Headers/globalList.h
lclint.lcd: Headers/claimNode.h Headers/fcnNode.h Headers/fcnNodeList.h
lclint.lcd: Headers/iterNode.h Headers/abstBodyNode.h
lclint.lcd: Headers/abstractNode.h Headers/stDeclNode.h
lclint.lcd: Headers/stDeclNodeList.h Headers/taggedUnionNode.h
lclint.lcd: Headers/typeNode.h Headers/strOrUnionNode.h
lclint.lcd: Headers/enumSpecNode.h Headers/qual.h Headers/qualList.h
lclint.lcd: Headers/lclTypeSpecNode.h Headers/typeNamePack.h
lclint.lcd: Headers/typeNameNode.h Headers/typeNameNodeList.h
lclint.lcd: Headers/opFormNode.h Headers/quantifiedTermNode.h
lclint.lcd: Headers/sigNode.h Headers/sigNodeSet.h Headers/signNode.h
lclint.lcd: Headers/nameNode.h
lclint.lcd: Headers/replaceNode.h
lclint.lcd: Headers/replaceNodeList.h Headers/renamingNode.h
lclint.lcd: Headers/traitRefNode.h Headers/traitRefNodeList.h
lclint.lcd: Headers/exportNode.h Headers/privateNode.h
lclint.lcd: Headers/interfaceNode.h Headers/interfaceNodeList.h
lclint.lcd: Headers/termNode.h Headers/termNodeList.h Headers/stmtNode.h
lclint.lcd: Headers/sortSetList.h
lclint.lcd: Headers/symtable.h Headers/exprNodeList.h Headers/cprim.h
lclint.lcd: Headers/hashTable.h Headers/filelocList.h
lclint.lcd: Headers/enumNameList.h Headers/enumNameSList.h
lclint.lcd: Headers/varKinds.h Headers/sRefSet.h Headers/ekind.h
lclint.lcd: Headers/usymIdSet.h Headers/usymId.h Headers/uentryList.h
lclint.lcd: Headers/indxMap.h Headers/globSet.h Headers/ctypeList.h
lclint.lcd: Headers/aliasTable.h Headers/usymtab.h Headers/lctype.h
lclint.lcd: Headers/qtype.h Headers/idDecl.h Headers/multiVal.h
lclint.lcd: Headers/uentry.h Headers/sRef.h Headers/guardSet.h
lclint.lcd: Headers/exprNode.h Headers/typeIdSet.h Headers/idDeclList.h
lclint.lcd: Headers/clabstract.h Headers/sRefSetList.h Headers/context.h
lclint.lcd: Headers/flagMarkerList.h Headers/flagMarker.h
lclint.lcd: Headers/macrocache.h Headers/fileTable.h Headers/messageLog.h
lclint.lcd: Headers/clauseStack.h Headers/llglobals.h Headers/ltoken.h

cpplib.o: Headers/cpplib.h Headers/cpp.h Headers/cppexp.h Headers/cpperror.h
cppmain.o: Headers/cpplib.h Headers/cpp.h Headers/cppexp.h Headers/cpperror.h
cppexp.o: Headers/cpplib.h Headers/cpp.h Headers/cppexp.h Headers/cpperror.h
cpperror.o: Headers/cpplib.h Headers/cpp.h Headers/cppexp.h Headers/cpperror.h
