1 ##################################################
3 ### Makefile for LCLint
5 ### designed for use with gmake (GNU make)
7 ### original version based on LCL Makefile
8 ### completely revised December 1993
9 ### revised for 1.4a, November 1994
10 ### revised for 2.0, February 1996
11 ### revised for 2.2, August 1996
13 ### This file should not need to be edited.
15 ### Compilers and tools set using the top-level Makefile override settings
16 ### in this file when make is run from the top directory.
21 ### builds a release version of lclint from scratch using optimizations
24 ### builds a local version of lclint (no optimizations)
25 ### (does not remake files)
28 ### runs the test suite
29 ### (must have installed test suite from lclint.test.tar.Z)
32 .SUFFIXES : .h .c .o .l .check
33 .PHONY : all dorerelease retest rerelease homeversion
34 .IGNORE : dorerelease retest rerelease
37 ### system information (compilers, flags, directories, etc.)
43 ### check files before compiling
44 ### (can't be 1 unless you have lclint already!)
47 CHECK = 0 ### set to 1
49 LCLINT = //tmp/lclint-2.5q/bin/lclint
50 #LCLINT = ../bin/lclint
56 include Makefile.sources
70 $(CC) -o lclint $(OBJ) $(LINKFLAGS)
79 ### -p xx flag to bison renames yyparse ==> xxparse, xxlex ==> xxlex
80 ### this is probably NOT compatible with yacc.
83 signature.c : signature.c.der signature.y
85 @$(BISON) $(YFLAGS) -p lsl signature.y
86 @$(CAT) bison.head signature.tab.c > signature.c
87 -@$(MV) Headers/signature_gen.h Headers/signature_gen.bak
88 @$(CAT) bison.head signature.tab.h > Headers/signature_gen.h
90 $(CP) signature.c.der signature.c
93 cgrammar.c : cgrammar.c.der cgrammar.y
95 $(BISON) $(YFLAGS) cgrammar.y
96 @echo '// Expect 119 shift/reduce conflicts and 114 reduce/reduce conflicts.'
97 @echo '// (see cgrammar.y for explanation)'
98 @$(CAT) bison.head cgrammar.tab.c > cgrammar.c
99 -@$(MV) Headers/cgrammar_tokens.h Headers/cgrammar_tokens.bak
100 @$(CAT) bison.head cgrammar.tab.h > Headers/cgrammar_tokens.h
102 $(CP) cgrammar.c.der cgrammar.c
105 ### llgrammar2.h is necessary so +singleinclude may be used
107 llgrammar.c : llgrammar.c.der llgrammar.y
109 $(BISON) $(YFLAGS) -p yl llgrammar.y
110 @echo '// Expect 2 shift/reduce conflicts.'
111 @$(CAT) bison.head llgrammar.tab.c > llgrammar.c
112 -@$(MV) Headers/llgrammar_gen2.h Headers/llgrammar_gen2.bak
113 @$(CAT) bison.head llgrammar.tab.h > Headers/llgrammar_gen2.h
114 -@$(MV) Headers/llgrammar_gen.h Headers/llgrammar_gen.bak
115 @$(CAT) bison.head llgrammar.tab.h > Headers/llgrammar_gen.h
117 $(CP) llgrammar.c.der llgrammar.c
120 cscanner.c : cscanner.c.der cscanner.l
122 $(FLEX) $(LFLAGS) cscanner.l
123 $(CAT) flex.head lex.yy.c > cscanner.c
125 $(CP) cscanner.c.der cscanner.c
129 ### compile without warnings
132 signature.o : signature.c
133 $(CC) $(CPPFLAGS) -c $*.c
135 cgrammar.o : cgrammar.c
136 $(CC) $(CPPFLAGS) -c $*.c
138 llgrammar.o : llgrammar.c
139 $(CC) $(CPPFLAGS) -c $*.c
141 cscanner.o : cscanner.c
142 $(CC) $(CPPFLAGS) -c $*.c
145 ### header files dependant on grammars
148 Headers/signature2.h : signature.c
149 Headers/cgrammar2.h : cgrammar.c
150 Headers/cgrammar_tokens.h : cgrammar.c
151 Headers/llgrammar.h : llgrammar.c
157 ### Flags for checking a single file
158 SINGLEFLAGS = +neverinclude -supcounts +partial -showsummary -load lclint.lcd
160 .c.check: lclint.lcd lclint
161 $(LCLINT) $(LINTFLAGS) $(SINGLEFLAGS) $*.c
163 lcllib.c: Headers/llgrammar.h
164 clabstract.c: Headers/cgrammar_tokens.h
165 scan.c: Headers/signature2.h
169 $(LCLINT) $(LINTFLAGS) $(SINGLEFLAGS) $*.c
171 @echo '// Compiling '$*.c' / compiled: '`$(OFILES)`' (of 120 files)'
172 @$(CC) $(CFLAGS) -c $*.c
175 ### alternatives (tests, releases, backups, etc.)
178 ### -e option makes environment variables take precedence
180 .PHONY : test quicktest opt up
183 ifneq (,$(findstring csh, $(SHELL)))
184 setenv CC '$(CCOPT)' ; $(MAKE) -e lclint
186 CC="$(CCOPT)" ; export CC ; $(MAKE) -e lclint
190 @$(MV) Headers/herald.h Headers/herald.last
191 @echo '/* herald.h - created automatically by gmake updateversion */' > Headers/herald.h
192 @echo '/*@constant observer char *LCL_VERSION;@*/' >> Headers/herald.h
193 @echo '# define LCL_VERSION "LCLint '`cat $(VERSION_NUMBER)`' --- '`cat DATE`'"' \
195 @echo '/*@constant observer char *LCL_PARSE_VERSION;@*/' >> Headers/herald.h
196 @echo '# define LCL_PARSE_VERSION "LCLint '`cat $(VERSION_NUMBER)`'"' \
198 @echo '/*@constant observer char *LCL_COMPILE;@*/' >> Headers/herald.h
199 @echo '# define LCL_COMPILE "Compiled using '$(CC)' on '`uname -a`' by '`whoami`'"' >> Headers/herald.h
202 @$(MV) Headers/local_constants.h Headers/local_constants.last
203 @echo '/* local_constants.h - created automatically by gmake localconstants */' \
204 > Headers/local_constants.h
206 @echo '*** Fatal Error: SYSTEM_LIBDIR not defined.'
208 @echo '/*@constant observer char *SYSTEM_LIBDIR;@*/' >> Headers/local_constants.h
209 @echo '# define SYSTEM_LIBDIR $(SYSTEM_LIBDIR)' >> Headers/local_constants.h
210 ifndef DEFAULT_LARCHPATH
211 @echo '*** Fatal Error: DEFAULT_LARCHPATH not defined.'
213 @echo '/*@constant observer char *DEFAULT_LARCHPATH;@*/' >> Headers/local_constants.h
214 @echo '# define DEFAULT_LARCHPATH $(DEFAULT_LARCHPATH)' >> Headers/local_constants.h
215 ifndef DEFAULT_LCLIMPORTDIR
216 @echo '*** Fatal Error: DEFAULT_LARCHPATH not defined.'
218 @echo '/*@constant observer char *DEFAULT_LCLIMPORTDIR;@*/' >> Headers/local_constants.h
219 @echo '# define DEFAULT_LCLIMPORTDIR $(DEFAULT_LCLIMPORTDIR)' >> Headers/local_constants.h
226 @echo '// Making LCLint'
227 @echo '// Version '`cat $(VERSION_NUMBER)`
229 @echo '// Compiler: '$(CCOPT)
231 @echo '// Bison: '$(BISON)
233 @echo '// Use derived bison files'
236 @echo '// Flex: '$(FLEX)
238 @echo '// Use derived flex files'
240 @echo '// Default cpp command: '$(DEFAULT_CPPCMD)
241 @echo '// System include directory: '$(SYSTEM_LIBDIR)
242 @echo '// Default Larch path: '$(DEFAULT_LARCHPATH)
243 @echo '// Default imports directory: '$(DEFAULT_LCLIMPORTDIR)
248 @echo '// Updating version information'
249 @$(MAKE) -e updateversion
250 @echo '// Updating local constants'
251 ### @$(MAKE) -e localconstants
253 @echo '// Compiling:'
256 @echo '// Done Release '`cat $(VERSION_NUMBER)`
259 Headers/flag_codes.h: flags
262 grep "FLG_" flags.def > Headers/flag_codes.gen
267 ### Standard entries to remove files from the directories
268 ### up --- remove .o files and grammar derivatives
269 ### tidy --- eliminate unwanted files
270 ### clean --- delete derived files, except for spec-derived files
271 ### pristine --- delete all derived files
274 .PHONY .IGNORE : up tidy clean pristine
277 -$(RM) -f *.lcs *.lslo
278 -$(RM) signature.c signature.tab.c signature.tab.h
279 -$(RM) llgrammar.c llgrammar.tab.c llgrammar.tab.h
280 -$(RM) Headers/cgrammar_tokens.h
282 -$(RM) cgrammar.tab.h
283 -$(RM) Headers/*_gen.h* Headers/*_gen2.h*
287 -$(RM) *.out *.output *.bib *.dvi *.idx *.log *.o *.toc
288 -$(RM) cgrammar.c cscanner.c
289 -$(RM) test* Headers/*~ Headers/#*
292 -$(RM) ,* .,* *.CKP *.BAK .emacs_[0-9]* core a.out *.*~
295 -$(RM) cgrammar.c llgrammar.c signature.c cscanner.c
303 $(MAKEDEPEND) $(CINCLUDES) $(CFLAGS) -f Makefile.depend $(SRC) $(GRAMS)
306 ### analysing dependancies takes a long time and doesn't work terribly
307 ### well, so the are NOT included here. NOTE carefully, this means if a
308 ### header file is changed manual recompilation may be necessary.
311 ### include Makefile.depend
318 ### A library is used for the specifications
321 $(CHECKS): lclint.lcd
324 ### other flags are in .lclintrc file
328 # $(LCLINT) -f lclint.lclintrc $(CPPFLAGS) +forcehints +singleinclude -nestcomments -fcnuse -allimponly -modglobsnomods -uniondef -exportlocal -exportheader -abstract -namechecks -protoparammatch -boolops $(ALLSRC) -dump lclint
331 $(LCLINT) -f lclint.lclintrc $(CPPFLAGS) +forcehints +singleinclude -nestcomments -fcnuse -uniondef +allimponly -branchstate -exportlocal -exportheader -abstract -namechecks -protoparammatch -temptrans -boolops $(ALLSRC) -dump lclint
335 -$(RM) -f ../bin/lclint; \