- ############################################################-*-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) $@
- ##############################################################################