############################################################-*-Makefile-*-#### # Makefile for the compilation project (requires GNUMake). ############################################################################## # # By default compiles only the files that were modified # since the last successful compilation. # To force the compilation of all files use "make force" # # $Id: Makefile,v 1.1 2004/02/24 15:57:04 schinz Exp $ # ############################################################################## ############################################################################## # Variables # Global ROOT = . TARGETS += $(JC_TARGET) OBJECTS += $(JC_OUTPUTDIR) CUP_RUNTIME = /home/iclamp/local/packages/CUP/lib/rt.jar EXPR = $(ROOT)/src/expressive SPEC = $(ROOT)/src/spec EVM = $(EXPR)/evm # Java compilation JC_COMMAND = javac JC_FLAGS = -g -deprecation -source 1.4 JC_OUTPUTDIR = $(ROOT)/classes JC_CLASSPATH = $(JC_OUTPUTDIR):$(CUP_RUNTIME) JC_TARGET = .latest-jc # Javadoc generation JD_COMMAND = javadoc JD_FLAGS = -source 1.4 -quiet -sourcepath $(ROOT)/src JD_OUTPUTDIR = $(ROOT)/javadoc JD_CLASSPATH = $(JC_OUTPUTDIR):$(CUP_RUNTIME) JD_TARGET = .latest-jd SCANNER = $(EXPR)/Scanner.java SCANNER_LEX = $(SPEC)/expressive.lex TOKENS = $(EXPR)/Tokens.java PARSER_CLASS = Parser PARSER = $(EXPR)/$(PARSER_CLASS).java PARSER_CUP = $(SPEC)/expressive.cup SOURCES += $(EXPR)/Position.java SOURCES += $(EXPR)/Global.java SOURCES += $(EXPR)/AbstractMain.java SOURCES += $(EXPR)/ScannerTest.java SOURCES += $(EXPR)/ParserTest.java #SOURCES += $(EXPR)/Tree.java #SOURCES += $(EXPR)/Type.java #SOURCES += $(EXPR)/Visitor.java #SOURCES += $(EXPR)/Symbol.java JC_SOURCES = $(SOURCES) JC_SOURCES += $(TOKENS) JC_SOURCES += $(SCANNER) JC_SOURCES += $(PARSER) # JLex & CUP JLEX = /home/iclamp/soft/bin/jlex JAVA_CUP = /home/iclamp/soft/bin/cup # Accounting WC_COMMAND = wc WC_FILES = $(SOURCES) # Searching GREP_COMMAND = grep GREP_FILES = $(SOURCES) GREP_ARGS ?= $(ARGS) # various utilities ECHO = echo RM = rm FIND = find MKDIR = mkdir TOUCH = touch WC = wc ############################################################################## # Functions # Print and execute command run = $(ECHO) $(1); $(1) || exit $$? ############################################################################## # Commands all : $(TARGETS) force : clean $(MAKE) all clean : $(RM) -f $(TARGETS) $(RM) -rf $(OBJECTS) $(RM) -f $(SCANNER) $(PARSER) $(TOKENS) doc : all $(JD_TARGET) doc-clean : $(RM) -f $(JD_TARGET) $(RM) -rf $(JD_OUTPUTDIR) distclean : clean doc-clean $(strip $(FIND) . \ \( -name "*~" \ -o -name "*.class" \ -o -name "core" \ \) \ -exec $(RM) "{}" ";") wc : @$(WC_COMMAND) $(WC_FILES) grep : @if [ -z $(GREP_ARGS) ]; then \ $(ECHO) "usage: make grep ARGS="; \ else \ $(GREP_COMMAND) $(GREP_ARGS) $(GREP_FILES); \ fi help : @$(ECHO) "USAGE:" @$(ECHO) " make - same as 'make all'" @$(ECHO) " make all - builds the project by compiling only the files\ that changed since the last build" @$(ECHO) " make clean - deletes the files generated by the build process" @$(ECHO) " make force - compiles all files" @$(ECHO) " make doc - creates documentation in Javadoc format; look at ./javadoc/index.html" @$(ECHO) " make doc-clean - deletes the generated documentation" @$(ECHO) " make distclean - deletes all generated files" @$(ECHO) " make wc - count the number on lines in source files" @$(ECHO) " make help - displays this message" @$(ECHO) @$(ECHO) "Note: on some platforms you may need to use 'gmake' instead of 'make'" .PHONY : all force clean distclean doc doc-clean wc grep help ############################################################################## # Rules $(JC_TARGET) : $(JC_SOURCES) @if [ ! -d $(JC_OUTPUTDIR) ]; then \ $(call run,$(MKDIR) -p $(JC_OUTPUTDIR)); \ fi $(strip $(JC_COMMAND) $(JC_FLAGS) $(JC_OUTPUTDIR:%=-d %) \ $(JC_CLASSPATH:%=-classpath %) $?) $(TOUCH) $@ $(JD_TARGET) : $(SOURCES) @if [ ! -d $(JD_OUTPUTDIR) ]; then \ $(call run,$(MKDIR) -p $(JD_OUTPUTDIR)); \ fi $(strip $(JD_COMMAND) $(JD_FLAGS) $(JD_OUTPUTDIR:%=-d %) \ $(JD_CLASSPATH:%=-classpath %) $(SOURCES)) $(TOUCH) $@ $(SCANNER) : $(SCANNER_LEX) $(JLEX) $(SCANNER_LEX) mv $(SCANNER_LEX).java $(SCANNER) $(PARSER) : $(PARSER_CUP) $(JAVA_CUP) -interface -symbols Tokens -parser $(PARSER_CLASS) < $(PARSER_CUP) mv $(PARSER_CLASS).java $(PARSER) mv Tokens.java $(EXPR) $(TOKENS) : $(PARSER) ##############################################################################