############################################################-*-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=<regexp>"; \
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) $@
##############################################################################