## Note: starting comments with ## means they don't end up in Makefile
AUTOMAKE_OPTIONS = 1.5 foreign
SUFFIXES = .h .c .o .l .check
# Check files before compiling; requires splint!
CHECK = 1
# Some preferences
### We use the no-lines option to prevent confusion with splint flag settings.
### Should fix splint to avoid this...
YFLAGS = -v -t -d --debug --no-lines
LFLAGS = -L
BISON_SRC = cgrammar.y llgrammar.y mtgrammar.y signature.y
## We only build Splint
bin_PROGRAMS = splint
## This is a fake program, so we can easily substitute in the extra LCL objects
EXTRA_PROGRAMS = lcl
AM_CPPFLAGS = -IHeaders
## The main sources
SETSRC = globSet.c intSet.c typeIdSet.c guardSet.c usymIdSet.c sRefSet.c
LISTSRC = clauseStack.c filelocStack.c \
cstringList.c cstringSList.c sRefSetList.c ctypeList.c \
enumNameList.c enumNameSList.c exprNodeList.c exprNodeSList.c \
uentryList.c fileIdList.c filelocList.c qualList.c sRefList.c \
flagMarkerList.c idDeclList.c flagSpec.c
CPPSRC = cppmain.c cpplib.c cppexp.c cpphash.c cpperror.c
CSRC = context.c uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \
stateClauseList.c ctype.c cvar.c clabstract.c idDecl.c clause.c \
globalsClause.c modifiesClause.c warnClause.c functionClause.c \
functionClauseList.c metaStateConstraint.c metaStateConstraintList.c \
metaStateExpression.c metaStateSpecifier.c functionConstraint.c \
pointers.c cscannerHelp.c
SPLINTSRC = exprNode.c exprChecks.c llmain.c help.c rcfiles.c
CHECKSRC = structNames.c transferChecks.c varKinds.c nameChecks.c
GLOBSRC = globals.c flags.c general.c osd.c reader.c mtreader.c
GRAMSRC = cgrammar.c cscanner.c mtscanner.c mtgrammar.c llgrammar.c signature.c
OVERFLOWCHSRC = constraintList.c constraintResolve.c \
constraintGeneration.c constraintTerm.c \
constraintExprData.c constraintExpr.c constraint.c \
loopHeuristics.c
GENERALSRC = exprData.c cstring.c fileloc.c message.c inputStream.c \
fileTable.c cstringTable.c valueTable.c stateValue.c \
llerror.c messageLog.c flagMarker.c aliasTable.c ynm.c \
sRefTable.c genericTable.c ekind.c usymtab.c multiVal.c \
lltok.c sRef.c lcllib.c randomNumbers.c fileLib.c
METASTATESRC = stateInfo.c stateCombinationTable.c metaStateTable.c \
metaStateInfo.c annotationTable.c annotationInfo.c mttok.c \
mtDeclarationNode.c mtDeclarationPieces.c mtDeclarationPiece.c \
mtContextNode.c mtValuesNode.c mtDefaultsNode.c \
mtAnnotationsNode.c mtMergeNode.c mtAnnotationList.c \
mtAnnotationDecl.c mtTransferClauseList.c mtTransferClause.c \
mtTransferAction.c mtLoseReferenceList.c mtLoseReference.c \
mtDefaultsDeclList.c mtDefaultsDecl.c mtMergeItem.c \
mtMergeClause.c mtMergeClauseList.c
## These are only used if LCL is enabled
LCLONLYSRC = usymtab_interface.c abstract.c ltoken.c lclscanline.c \
lclsyntable.c lcltokentable.c sort.c symtable.c lclinit.c \
shift.c lclscan.c lsymbol.c mapping.c
LSLSRC = tokentable.c scan.c scanline.c lslparse.c \
lh.c checking.c lclctypes.c imports.c lslinit.c syntable.c
LCLSETSRC = lsymbolSet.c sigNodeSet.c lslOpSet.c sortSet.c
LCLLISTSRC = initDeclNodeList.c sortList.c declaratorInvNodeList.c \
interfaceNodeList.c sortSetList.c declaratorNodeList.c \
letDeclNodeList.c stDeclNodeList.c storeRefNodeList.c \
lslOpList.c lsymbolList.c termNodeList.c ltokenList.c \
traitRefNodeList.c pairNodeList.c typeNameNodeList.c \
fcnNodeList.c paramNodeList.c programNodeList.c \
varDeclarationNodeList.c varNodeList.c quantifierNodeList.c \
replaceNodeList.c importNodeList.c
HEADERSRC = Headers/abstBodyNode.h Headers/ltokenList.h \
Headers/abstract.h Headers/macrocache.h \
Headers/abstractNode.h Headers/mapping.h \
Headers/message.h \
Headers/aliasStack.h Headers/messageLog.h \
Headers/aliasTable.h Headers/metaStateConstraint.h \
Headers/annotationInfo.h Headers/metaStateConstraintList.h \
Headers/annotationTable.h Headers/metaStateExpression.h \
Headers/arrayQualNode.h Headers/metaStateInfo.h \
Headers/basic.h Headers/metaStateSpecifier.h \
Headers/bool.h Headers/metaStateTable.h \
Headers/boolStack.h Headers/misc.h \
Headers/cgrammar.h Headers/modifiesClause.h \
Headers/cgrammar_tokens.h Headers/modifyNode.h \
Headers/checking.h Headers/mtAnnotationDecl.h \
Headers/clabstract.h Headers/mtAnnotationList.h \
Headers/claimNode.h Headers/mtAnnotationsNode.h \
Headers/clause.h Headers/mtContextNode.h \
Headers/clauseStack.h Headers/mtDeclarationNode.h \
Headers/code.h Headers/mtDeclarationPiece.h \
Headers/constants.h Headers/mtDeclarationPieces.h \
Headers/constDeclarationNode.h Headers/mtDefaultsDecl.h \
Headers/constraintExprData.h Headers/mtDefaultsDeclList.h \
Headers/constraintExpr.h Headers/mtDefaultsNode.h \
Headers/constraint.h Headers/mtgrammar.h \
Headers/constraintList2.h Headers/mtgrammar.tab.h \
Headers/constraintList.h Headers/mtgrammar_tokens.h \
Headers/constraintOutput.h Headers/mtincludes.h \
Headers/constraintResolve.h Headers/mtLoseReference.h \
Headers/constraintTerm.h Headers/mtLoseReferenceList.h \
Headers/context.h Headers/mtMergeClause.h \
Headers/cpperror.h Headers/mtMergeClauseList.h \
Headers/cppexp.h Headers/mtMergeItem.h \
Headers/cpp.h Headers/mtMergeNode.h \
Headers/cpphash.h Headers/mtreader.h \
Headers/cpplib.h Headers/mtscanner.h \
Headers/cprim.h Headers/mttok.h \
Headers/cscanner.h Headers/mtTransferAction.h \
Headers/cstring.h Headers/mtTransferClause.h \
Headers/cstringList.h Headers/mtTransferClauseList.h \
Headers/cstringSList.h Headers/mtValuesNode.h \
Headers/cstringTable.h Headers/multiVal.h \
Headers/ctokens.h Headers/nameChecks.h \
Headers/ctypeList.h Headers/nameNode.h \
Headers/CTypesNode.h Headers/opFormNode.h \
Headers/cvar.h Headers/osd.h \
Headers/declaratorInvNode.h Headers/pairNode.h \
Headers/declaratorInvNodeList.h Headers/pairNodeList.h \
Headers/declaratorNode.h Headers/paramNode.h \
Headers/declaratorNodeList.h Headers/paramNodeList.h \
Headers/dmalloc.h Headers/osd.h \
Headers/ekind.h Headers/pp.h \
Headers/enumNameList.h Headers/privateNode.h \
Headers/enumNameSList.h Headers/programNode.h \
Headers/enumSpecNode.h Headers/programNodeList.h \
Headers/exportNode.h Headers/qtype.h \
Headers/exposedNode.h Headers/qual.h \
Headers/exprChecks.h Headers/qualList.h \
Headers/exprData.h Headers/quantifiedTermNode.h \
Headers/exprNode.h Headers/quantifierNode.h \
Headers/exprNodeList.h Headers/quantifierNodeList.h \
Headers/exprNodeSList.h Headers/randomNumbers.h \
Headers/fcnNode.h Headers/rcfiles.h \
Headers/fcnNodeList.h Headers/reader.h \
Headers/fileId.h Headers/refTable-branch.h \
Headers/fileIdList.h Headers/renamingNode.h \
Headers/fileLib.h Headers/replaceNode.h \
Headers/fileloc.h Headers/replaceNodeList.h \
Headers/filelocList.h Headers/scan.h \
Headers/filelocStack.h Headers/scanline.h \
Headers/fileTable.h Headers/sgrammar_tokens.h \
Headers/flag_codes.h Headers/sHerald.h \
Headers/flagMarker.h Headers/shift.h \
Headers/flagMarkerList.h Headers/signature2.h \
Headers/flags.h Headers/signature_gen.h \
Headers/flagSpec.h Headers/signature.h \
Headers/forwardTypes.h Headers/signNode.h \
Headers/functionClause.h Headers/sigNode.h \
Headers/functionClauseList.h Headers/sigNodeSet.h \
Headers/functionConstraint.h Headers/sort.h \
Headers/general.h Headers/sortList.h \
Headers/genericTable.h Headers/sortSet.h \
Headers/globalList.h Headers/sortSetList.h \
Headers/globalsClause.h \
Headers/globals.h \
Headers/globSet.h Headers/sRef.h \
Headers/gram.h Headers/sRefList.h \
Headers/guardSet.h Headers/sRefSet.h \
Headers/handle.h Headers/sRefSetList.h \
Headers/sRefSetStack.h \
Headers/idDecl.h Headers/sRefTable.h \
Headers/idDeclList.h Headers/stateClause.h \
Headers/importNode.h Headers/stateClauseList.h \
Headers/importNodeList.h Headers/stateCombinationTable.h \
Headers/imports.h Headers/stateInfo.h \
Headers/initDeclNode.h Headers/stateValue.h \
Headers/initDeclNodeList.h Headers/stDeclNode.h \
Headers/inputStream.h Headers/stDeclNodeList.h \
Headers/interfaceNode.h Headers/stmtNode.h \
Headers/interfaceNodeList.h Headers/storeRefNode.h \
Headers/intSet.h Headers/storeRefNodeList.h \
Headers/intTable.h Headers/strOrUnionNode.h \
Headers/iterNode.h Headers/structNames.h \
Headers/lcl_constants.h Headers/symtable.h \
Headers/lclctypes.h Headers/syntable.h \
Headers/lclForwardTypes.h Headers/system_constants.h \
Headers/lclinit.h Headers/taggedUnionNode.h \
Headers/lcllib.h Headers/termNode.h \
Headers/lclMisc.h Headers/termNodeList.h \
Headers/lclPredicateNode.h Headers/tmpname.h \
Headers/lclscan.h Headers/tokentable.h \
Headers/lclscanline.h Headers/traitRefNode.h \
Headers/lclsyntable.h Headers/traitRefNodeList.h \
Headers/lcltokentable.h Headers/transferChecks.h \
Headers/lclTypeSpecNode.h Headers/typeExpr.h \
Headers/lctype.h Headers/typeIdSet.h \
Headers/letDeclNode.h Headers/typeNameNode.h \
Headers/letDeclNodeList.h Headers/typeNameNodeList.h \
Headers/lh.h Headers/typeNamePack.h \
Headers/limwr.h Headers/typeNode.h \
Headers/uentry.h \
Headers/llerror.h Headers/uentryList.h \
Headers/llglobals.h Headers/usymId.h \
Headers/llgrammar2.h Headers/usymIdSet.h \
Headers/llgrammar_gen2.h \
Headers/llgrammar_gen.h Headers/usymtab.h \
Headers/llgrammar.h Headers/usymtab_interface.h \
Headers/llmain.h Headers/valueMatrix.h \
Headers/lltok.h Headers/valueTable.h \
Headers/lslinit.h Headers/varDeclarationNode.h \
Headers/lslOp.h Headers/varDeclarationNodeList.h \
Headers/lslOpList.h Headers/varKinds.h \
Headers/lslOpSet.h Headers/varNode.h \
Headers/lslparse.h Headers/varNodeList.h \
Headers/lsymbol.h Headers/version.h \
Headers/lsymbolList.h Headers/warnClause.h \
Headers/lsymbolSet.h Headers/ynm.h \
Headers/ltoken.h Headers/splintMacros.nf \
Headers/typeId.h \
Headers/pointers.h Headers/mstring.h Headers/help.h
IFILES = ctbase.i cttable.i exprDataQuite.i
## Non-built files we need to distribute
EXTRA_DIST = $(BISON_SRC) bison.head bison.reset $(HEADERSRC) \
flags.def cscanner.l flex.head flex.reset $(IFILES) \
.splintrc LICENSE \
Headers/cscannerHelp.h \
Headers/256_random_numbers.nf Headers/splintMacros.nf Headers/reservedNames.nf
#Makefile.binary.am Makefile.binary.in
#Files that are used on systems that do not have bison or yacc
DER_BISON_FILES = signature.c.der cgrammar.c.der mtgrammar.c.der \
llgrammar.c.der
DER_FILES = $(DER_BISON_FILES)
COMMONSRC = $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \
$(GLOBSRC) $(IFACESRC) $(LISTSRC) $(SETSRC) $(METASTATESRC)
ALLSRC = $(GRAMSRC) $(COMMONSRC) $(SPLINTSRC) $(OVERFLOWCHSRC) $(DER_FILES) $(HEADERSRC)
#files to run Splint on
LINTSRC = $(COMMONSRC) $(SPLINTSRC)
# cscanner.c cgrammar.c
#ALLSRC = $(COMMONSRC) $(SPLINTSRC) $(DER_FILES) $(HEADERSRC)
LCLSRC = $(LCLSETSRC) $(LCLLISTSRC) $(LSLSRC) $(CMNSRC) $(LCLONLYSRC)
lcl_SOURCES = $(LCLSRC)
splint_SOURCES = $(ALLSRC)
splint_LDADD = $(LCLOBJ) @LEXLIB@
# Ensure the LCL objects get built if needed
splint_DEPENDENCIES = $(LCLOBJ)
# Keep it fake
.PHONY: lcl$(EXEEXT)
lcl$(EXEEXT):
@echo "This is a fake target"; \
echo "Use configure's --with-lcl option to enable lcl"
## Sources that need to be built
BUILT_SOURCES = Headers/signature_gen.h Headers/cgrammar_tokens.h \
Headers/llgrammar_gen.h Headers/llgrammar_gen2.h \
Headers/mtgrammar_tokens.h signature.c cgrammar.c \
llgrammar.c mtgrammar.c Headers/flag_codes.gen \
$(DER_FILES)
## Grammars
signature.c.der:
@if test x$(BISON) = xno; then \
echo "Cannot make signature.c.der because bison is not here" \
else \
echo '* Making signature.c'; \
$(BISON) $(YFLAGS) -p lsl signature.y; \
$(CAT) bison.head signature.tab.c bison.reset >signature.c; \
$(CP) signature.c signature.c.der; \
$(MV) Headers/signature_gen.h Headers/signature_gen.bak || true; \
$(CAT) bison.head signature.tab.h bison.reset >Headers/signature_gen.h; \
$(RM) signature.tab.c signature.tab.h; \
fi
Headers/signature_gen.h signature.c: signature.c.der signature.y
@if test x$(BISON) = xno; then \
$(CP) signature.c.der signature.c; \
else \
echo '* Making signature.c'; \
$(BISON) $(YFLAGS) -p lsl signature.y; \
$(CAT) bison.head signature.tab.c bison.reset >signature.c; \
$(CP) signature.c signature.c.der; \
$(MV) Headers/signature_gen.h Headers/signature_gen.bak; \
$(CAT) bison.head signature.tab.h bison.reset >Headers/signature_gen.h; \
$(RM) signature.tab.c signature.tab.h; \
fi
## 11/29/001 drl added copy so that the file cgrammar.c.der is created
Headers/cgrammar_tokens.h cgrammar.c: cgrammar.c.der cgrammar.y bison.head bison.reset
@if test x$(BISON) = xno; then \
$(CP) cgrammar.c.der cgrammar.c; \
else \
echo '* Making cgrammar.c'; \
echo '* Note: Expect 157 shift/reduce conflicts and 123 reduce/reduce conflicts. (see cgrammar.y for explanation)'; \
$(BISON) $(YFLAGS) cgrammar.y; \
$(CAT) bison.head cgrammar.tab.c bison.reset | $(SED) 's/YYSTYPE/cgrammar_YYSTYPE/g' | $(SED) 's/lsllex/cgrammar_lsllex/g' > cgrammar.c; \
$(CP) cgrammar.c cgrammar.c.der; \
$(MV) Headers/cgrammar_tokens.h Headers/cgrammar_tokens.bak || true; \
$(CAT) bison.head cgrammar.tab.h bison.reset | $(SED) 's/YYSTYPE/cgrammar_YYSTYPE/g' | $(SED) 's/lsllex/cgrammar_lsllex/g' > Headers/cgrammar_tokens.h; \
$(RM) cgrammar.tab.c cgrammar.tab.h; \
fi
## 10/16/001 drl added copy so that the file mtgrammar.c.der is created
## also removed the dependency for this file on mtgrammary.c
Headers/mtgrammar_tokens.h mtgrammar.c: mtgrammar.y
@if test x$(BISON) = xno; then \
$(CP) mtgrammar.c.der mtgrammar.c; \
else \
echo '* Making mtgrammar.c'; \
echo '* Note: Expect 11 shift/reduce conflicts.'; \
$(BISON) $(YFLAGS) -p mt mtgrammar.y; \
$(CAT) bison.head mtgrammar.tab.c bison.reset >mtgrammar.c; \
$(CP) mtgrammar.c mtgrammar.c.der; \
$(MV) Headers/mtgrammar_tokens.h Headers/mtgrammar_tokens.bak; \
$(CAT) bison.head mtgrammar.tab.h bison.reset >Headers/mtgrammar_tokens.h; \
$(RM) mtgrammar.tab.c mtgrammar.tab.h; \
fi
## 11/29/001 drl added copy so that the file llgrammar.c.der is created
Headers/llgrammar_gen.h Headers/llgrammar_gen2.h llgrammar.c: llgrammar.c.der llgrammar.y
@if test x$(BISON) = xno; then \
$(CP) llgrammar.c.der llgrammar.c; \
else \
echo '* Making llgrammar.c'; \
echo '* Note: Expect 2 shift/reduce conflicts'; \
$(BISON) $(YFLAGS) -p yl llgrammar.y; \
$(CAT) bison.head llgrammar.tab.c bison.reset >llgrammar.c; \
$(CP) llgrammar.c llgrammar.c.der; \
$(MV) Headers/llgrammar_gen2.h Headers/llgrammar_gen2.bak; \
$(CAT) bison.head llgrammar.tab.h bison.reset >Headers/llgrammar_gen2.h; \
$(MV) Headers/llgrammar_gen.h Headers/llgrammar_gen.bak; \
$(CAT) bison.head llgrammar.tab.h bison.reset >Headers/llgrammar_gen.h; \
$(RM) llgrammar.tab.c llgrammar.tab.h; \
fi
cscanner.c: cscanner.l
$(LEX) $(LFLAGS) cscanner.l
$(CAT) flex.head @LEX_OUTPUT_ROOT@.c flex.reset | $(SED) 's/YYSTYPE/cgrammar_YYSTYPE/g' | $(SED) 's/lsllex/cgrammar_lsllex/g' > cscanner.c
Headers/flag_codes.gen: flags.def
grep "FLG_" flags.def > Headers/flag_codes.gen
$(MAKE)
cd ../lib; $(MAKE)
## Checking rules
CHECKS = $(subst .c,.check,$(splint_SOURCES))
## Other rules
.PHONY: nocheck
nocheck:
$(MAKE) CHECK=0
.PHONY: test
test:
${MAKE} ; cd ../test; ${MAKE} --no-print-directory
.PHONY: libs
libs:
${MAKE} ; cd ../lib; ${MAKE} --no-print-directory
### Automake generates wrong tags
.PHONY: etags
etags:
maketags
lintnew: splintme
splintme:
./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(OVERFLOWCHSRC) $(LINTSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw -mts tainted
splintmebounds:
./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(OVERFLOWCHSRC) $(LINTSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw -mts tainted +bounds +impboundsconstraints
splintmesupcounts:
./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(OVERFLOWCHSRC) $(LINTSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -fcnuse -incondefs -exportlocal -supcounts -constuse -mts file -mts filerw
lintbuffercheck:
./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(OVERFLOWCHSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw +bounds -DLINTBUFFERCHECK
valsplint:
valgrind -v --leak-resolution=high --num-callers=20 --show-reachable=no --leak-check=yes ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(OVERFLOWCHSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw
splintsome:
./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude lcllib.c -dump lclint +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw +partial
# drl changed to use # for comment
#/* $(LINTSRC) $(LCLSRC)*/
splinttest:
./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude test.c +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw +keep +supcounts +partial -null
binDir = bin
all: splint$(EXEEXT) ../$(top_builddir)/$(binDir)/splint$(EXEEXT)
../$(top_builddir)/$(binDir)/splint$(EXEEXT): splint$(EXEEXT)
-$(RM) -f $(top_builddir)/$(binDir)/splint$(EXEEXT)
ln -s $(top_builddir)/src/splint$(EXEEXT) $(top_builddir)/$(binDir)/splint$(EXEEXT)
up:
-rm cgrammar.c llgrammar.c mtgrammar.c signature.c cscanner.c
$(MAKE) clean
CLEANFILES = splint$(EXEEXT) ../$(top_builddir)/$(binDir)/splint$(EXEEXT)
.c.o:
@echo "Compiling "$<"..."; \
source='$<' object='$@' libtool=no \
depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \
$(CCDEPMODE) $(depcomp) \
$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
syntax highlighted by Code2HTML, v. 0.9.1