Newer
Older
zweic / Makefile
@glproj03 glproj03 on 20 Nov 2005 3 KB *** empty log message ***
############################################################-*-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) $@

##############################################################################