diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..eadd494 --- /dev/null +++ b/Makefile @@ -0,0 +1,165 @@ +############################################################-*-Makefile-*-#### +# Makefile pour le projet de compilation (nécessite GNUMake). +############################################################################## +# +# Par défaut, ne recompile que les fichiers qui ont été modifiés après +# la dernière compilation réussie. +# Pour forcer la compilation de tous les fichiers, utiliser "make force". +# +# $Id$ +# +############################################################################## + +############################################################################## +# Variables + +# Groupe +GROUP_NUMBER = 39 # remplacez ceci par votre numéro de groupe # +GROUP = $(GROUP_NUMBER:%=compil%) + +COMPILER_MAIN = zweic.ParserTest +EXAMPLES_DIR = $(ROOT)/examples +TESTS_DIR = $(ROOT)/tests/2 + +# Global +ROOT = . +TARGETS += $(SC_TARGET) +SOURCES += $(SC_SOURCES) +OBJECTS += $(SC_OUTPUTDIR) + +# Compilation Scala +SC_COMMAND = scalac +SC_FLAGS = +SC_OUTPUTDIR = $(ROOT)/classes +SC_CLASSPATH = $(SC_OUTPUTDIR) +SC_TARGET = .latest-sc + +SC_FILES += Position +SC_FILES += Report +SC_FILES += Tokens +SC_FILES += Scanner +SC_FILES += ScannerTest +SC_FILES += Name +SC_FILES += Operators +SC_FILES += Tree +SC_FILES += Parser +SC_FILES += ParserTest +SC_SOURCES += $(SC_FILES:%=sources/zweic/%.scala) + +# Execution Scala +SCALA_COMMAND = scala + +# Comptage +WC_COMMAND = wc +WC_FILES = $(SOURCES) + +# Recherche +GREP_COMMAND = grep +GREP_FILES = $(SOURCES) +GREP_ARGS ?= $(ARGS) + +# Utilitaires divers +CHGRP = chgrp +CHMOD = chmod +ECHO = echo +FIND = find +MKDIR = mkdir +MPACK = /home/iclamp/soft/bin/mpack +RM = rm -f +TOUCH = touch +WC = wc +ZIP = zip + +############################################################################## +# Fonctions + +# Affiche puis exécute une commande +run = $(ECHO) $(1); $(1) || exit $$? + +############################################################################## +# Commandes + +all : $(TARGETS) + +force : + $(RM) $(TARGETS) + $(MAKE) all + +clean : + $(RM) $(TARGETS) + $(RM) -r $(OBJECTS) + +distclean : clean + $(RM) $(GROUP).zip + $(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 + +fix-permissions : test-group + $(CHGRP) -R $(GROUP) . + $(CHMOD) -R g=u . + $(CHMOD) -R o-rwx . + +submit : test-group + $(ZIP) $(GROUP).zip $(SOURCES) + $(MPACK) -s "$(GROUP)" $(GROUP).zip "compilation@lampsun1.epfl.ch" + $(RM) $(GROUP).zip + +test-group : + @if [ -z "$(GROUP_NUMBER)" ]; then \ + $(ECHO) "erreur : votre numero de groupe manque"; \ + $(ECHO) "solution: definissez le dans votre fichier Makefile"; \ + exit 1; \ + fi + +tests : all + @for file in `ls -1 $(TESTS_DIR)/*.zwei`; do \ + $(ECHO); \ + $(ECHO) "fichier $$file"; \ + $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \ + done + +examples : all + @for file in `ls -1 $(EXAMPLES_DIR)/*.zwei`; do \ + $(ECHO); \ + $(ECHO) "fichier $$file"; \ + $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \ + done + +.PHONY : all +.PHONY : force +.PHONY : clean +.PHONY : distclean +.PHONY : wc +.PHONY : grep +.PHONY : fix-premissions +.PHONY : submit +.PHONY : test-group +.PHONY : tests +.PHONY : examples + +############################################################################## +# Règles + +$(SC_TARGET) : $(SC_SOURCES) + @if [ ! -d $(SC_OUTPUTDIR) ]; then \ + $(call run,$(MKDIR) -p $(SC_OUTPUTDIR)); \ + fi + $(strip $(SC_COMMAND) $(SC_FLAGS) $(SC_OUTPUTDIR:%=-d %) \ + $(SC_CLASSPATH:%=-classpath %) $?) + $(TOUCH) $@ + +##############################################################################