Newer
Older
zweic / Makefile
@glproj03 glproj03 on 20 Nov 2005 3 KB *** empty log message ***
  1. ############################################################-*-Makefile-*-####
  2. # Makefile pour le projet de compilation (nécessite GNUMake).
  3. ##############################################################################
  4. #
  5. # Par défaut, ne recompile que les fichiers qui ont été modifiés après
  6. # la dernière compilation réussie.
  7. # Pour forcer la compilation de tous les fichiers, utiliser "make force".
  8. #
  9. # $Id$
  10. #
  11. ##############################################################################
  12.  
  13. ##############################################################################
  14. # Variables
  15.  
  16. # Groupe
  17. GROUP_NUMBER = 39 # remplacez ceci par votre numéro de groupe #
  18. GROUP = $(GROUP_NUMBER:%=compil%)
  19.  
  20. COMPILER_MAIN = zweic.ParserTest
  21. EXAMPLES_DIR = $(ROOT)/examples
  22. TESTS_DIR = $(ROOT)/tests/2
  23.  
  24. # Global
  25. ROOT = .
  26. TARGETS += $(SC_TARGET)
  27. SOURCES += $(SC_SOURCES)
  28. OBJECTS += $(SC_OUTPUTDIR)
  29.  
  30. # Compilation Scala
  31. SC_COMMAND = scalac
  32. SC_FLAGS =
  33. SC_OUTPUTDIR = $(ROOT)/classes
  34. SC_CLASSPATH = $(SC_OUTPUTDIR)
  35. SC_TARGET = .latest-sc
  36.  
  37. SC_FILES += Position
  38. SC_FILES += Report
  39. SC_FILES += Tokens
  40. SC_FILES += Scanner
  41. SC_FILES += ScannerTest
  42. SC_FILES += Name
  43. SC_FILES += Operators
  44. SC_FILES += Tree
  45. SC_FILES += Parser
  46. SC_FILES += ParserTest
  47. SC_SOURCES += $(SC_FILES:%=sources/zweic/%.scala)
  48.  
  49. # Execution Scala
  50. SCALA_COMMAND = scala
  51.  
  52. # Comptage
  53. WC_COMMAND = wc
  54. WC_FILES = $(SOURCES)
  55.  
  56. # Recherche
  57. GREP_COMMAND = grep
  58. GREP_FILES = $(SOURCES)
  59. GREP_ARGS ?= $(ARGS)
  60.  
  61. # Utilitaires divers
  62. CHGRP = chgrp
  63. CHMOD = chmod
  64. ECHO = echo
  65. FIND = find
  66. MKDIR = mkdir
  67. MPACK = /home/iclamp/soft/bin/mpack
  68. RM = rm -f
  69. TOUCH = touch
  70. WC = wc
  71. ZIP = zip
  72.  
  73. ##############################################################################
  74. # Fonctions
  75.  
  76. # Affiche puis exécute une commande
  77. run = $(ECHO) $(1); $(1) || exit $$?
  78.  
  79. ##############################################################################
  80. # Commandes
  81.  
  82. all : $(TARGETS)
  83.  
  84. force :
  85. $(RM) $(TARGETS)
  86. $(MAKE) all
  87.  
  88. clean :
  89. $(RM) $(TARGETS)
  90. $(RM) -r $(OBJECTS)
  91.  
  92. distclean : clean
  93. $(RM) $(GROUP).zip
  94. $(strip $(FIND) . \
  95. \( -name "*~" \
  96. -o -name "*.class" \
  97. -o -name "core" \
  98. \) \
  99. -exec $(RM) "{}" ";")
  100.  
  101. wc :
  102. @$(WC_COMMAND) $(WC_FILES)
  103.  
  104. grep :
  105. @if [ -z $(GREP_ARGS) ]; then \
  106. $(ECHO) "usage: $(MAKE) grep ARGS=<regexp>"; \
  107. else \
  108. $(GREP_COMMAND) $(GREP_ARGS) $(GREP_FILES); \
  109. fi
  110.  
  111. fix-permissions : test-group
  112. $(CHGRP) -R $(GROUP) .
  113. $(CHMOD) -R g=u .
  114. $(CHMOD) -R o-rwx .
  115.  
  116. submit : test-group
  117. $(ZIP) $(GROUP).zip $(SOURCES)
  118. $(MPACK) -s "$(GROUP)" $(GROUP).zip "compilation@lampsun1.epfl.ch"
  119. $(RM) $(GROUP).zip
  120.  
  121. test-group :
  122. @if [ -z "$(GROUP_NUMBER)" ]; then \
  123. $(ECHO) "erreur : votre numero de groupe manque"; \
  124. $(ECHO) "solution: definissez le dans votre fichier Makefile"; \
  125. exit 1; \
  126. fi
  127.  
  128. tests : all
  129. @for file in `ls -1 $(TESTS_DIR)/*.zwei`; do \
  130. $(ECHO); \
  131. $(ECHO) "fichier $$file"; \
  132. $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \
  133. done
  134.  
  135. examples : all
  136. @for file in `ls -1 $(EXAMPLES_DIR)/*.zwei`; do \
  137. $(ECHO); \
  138. $(ECHO) "fichier $$file"; \
  139. $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \
  140. done
  141.  
  142. .PHONY : all
  143. .PHONY : force
  144. .PHONY : clean
  145. .PHONY : distclean
  146. .PHONY : wc
  147. .PHONY : grep
  148. .PHONY : fix-premissions
  149. .PHONY : submit
  150. .PHONY : test-group
  151. .PHONY : tests
  152. .PHONY : examples
  153.  
  154. ##############################################################################
  155. # Règles
  156.  
  157. $(SC_TARGET) : $(SC_SOURCES)
  158. @if [ ! -d $(SC_OUTPUTDIR) ]; then \
  159. $(call run,$(MKDIR) -p $(SC_OUTPUTDIR)); \
  160. fi
  161. $(strip $(SC_COMMAND) $(SC_FLAGS) $(SC_OUTPUTDIR:%=-d %) \
  162. $(SC_CLASSPATH:%=-classpath %) $?)
  163. $(TOUCH) $@
  164.  
  165. ##############################################################################