Newer
Older
zweic / Makefile
  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.PrinterTest
  21. EXAMPLES_DIR = $(ROOT)/examples
  22. TESTS_DIR = $(ROOT)/tests/3
  23.  
  24. TO_ADDRESS = compilation@lampsun1.epfl.ch
  25.  
  26. # Global
  27. ROOT = .
  28. TARGETS += $(SC_TARGET)
  29. SOURCES += $(SC_SOURCES)
  30. OBJECTS += $(SC_OUTPUTDIR)
  31.  
  32. # Compilation Scala
  33. SC_COMMAND = scalac
  34. SC_FLAGS =
  35. SC_OUTPUTDIR = $(ROOT)/classes
  36. SC_CLASSPATH = $(SC_OUTPUTDIR)
  37. SC_TARGET = .latest-sc
  38.  
  39. SC_FILES += Position
  40. SC_FILES += Report
  41. SC_FILES += Tokens
  42. SC_FILES += Scanner
  43. SC_FILES += ScannerTest
  44. SC_FILES += Name
  45. SC_FILES += Operators
  46. SC_FILES += Tree
  47. SC_FILES += Parser
  48. SC_FILES += ParserTest
  49. SC_FILES += Printer
  50. SC_FILES += PrinterTest
  51. SC_SOURCES += $(SC_FILES:%=sources/zweic/%.scala)
  52.  
  53. # Execution Scala
  54. SCALA_COMMAND = scala
  55.  
  56. # Comptage
  57. WC_COMMAND = wc
  58. WC_FILES = $(SOURCES)
  59.  
  60. # Recherche
  61. GREP_COMMAND = grep
  62. GREP_FILES = $(SOURCES)
  63. GREP_ARGS ?= $(ARGS)
  64.  
  65. # Utilitaires divers
  66. CHGRP = chgrp
  67. CHMOD = chmod
  68. ECHO = echo
  69. FIND = find
  70. MKDIR = mkdir
  71. MPACK = /home/iclamp/soft/bin/mpack
  72. PRINTF = printf
  73. RM = rm -f
  74. SED = sed
  75. TOUCH = touch
  76. WC = wc
  77. ZIP = zip
  78.  
  79. ##############################################################################
  80. # Fonctions
  81.  
  82. # Affiche puis exécute une commande
  83. run = $(ECHO) $(1); $(1) || exit $$?
  84.  
  85. ##############################################################################
  86. # Commandes
  87.  
  88. all : $(TARGETS)
  89.  
  90. force :
  91. $(RM) $(TARGETS)
  92. $(MAKE) all
  93.  
  94. clean :
  95. $(RM) $(TARGETS)
  96. $(RM) -r $(OBJECTS)
  97.  
  98. distclean : clean
  99. $(RM) $(GROUP).zip
  100. $(strip $(FIND) . \
  101. \( -name "*~" \
  102. -o -name "*.class" \
  103. -o -name "core" \
  104. \) \
  105. -exec $(RM) "{}" ";")
  106.  
  107. wc :
  108. @$(WC_COMMAND) $(WC_FILES)
  109.  
  110. grep :
  111. @if [ -z $(GREP_ARGS) ]; then \
  112. $(ECHO) "usage: $(MAKE) grep ARGS=<regexp>"; \
  113. else \
  114. $(GREP_COMMAND) $(GREP_ARGS) $(GREP_FILES); \
  115. fi
  116.  
  117. stat :
  118. @sorted=`echo $(JC_SOURCES) $(SC_SOURCES) | xargs -n 1 | sort`; \
  119. total=0; total1=0; \
  120. tmpfile="/tmp/$(USER)_bytes.tmp"; \
  121. for file in $$sorted; do \
  122. size=0; size1=0; \
  123. if [ -f "$$file" ]; then \
  124. size=`stat -L -c%s $$file`; \
  125. total=`echo "$$total + $$size" | bc`; \
  126. $(SED) -es"#^[ \t]*\(.*\)#\1#" $$file > $$tmpfile; \
  127. size1=`stat -L -c%s $$tmpfile`; \
  128. total1=`echo "$$total1 + $$size1" | bc`; \
  129. fi; \
  130. $(PRINTF) "%6d %6d %s\n" $$size $$size1 $$file; \
  131. done; \
  132. $(PRINTF) "%6d %6d\n" $$total $$total1; \
  133. $(RM) $$tmpfile
  134.  
  135. fix-permissions : test-group
  136. $(CHGRP) -R $(GROUP) .
  137. $(CHMOD) -R g=u .
  138. $(CHMOD) -R o-rwx .
  139.  
  140. submit : test-group
  141. $(ZIP) $(GROUP).zip $(SOURCES)
  142. $(MPACK) -s "$(GROUP)" $(GROUP).zip "$(TO_ADDRESS)"
  143. $(RM) $(GROUP).zip
  144.  
  145. test-group :
  146. @if [ -z "$(GROUP_NUMBER)" ]; then \
  147. $(ECHO) "erreur : votre numero de groupe manque"; \
  148. $(ECHO) "solution: definissez-le dans votre fichier Makefile"; \
  149. exit 1; \
  150. fi
  151. @exist=`groups | grep -c $(GROUP)`; \
  152. if [ "$$exist" -lt 1 ]; then \
  153. $(ECHO) "erreur : le groupe Unix \"$(GROUP)\" n'existe pas"; \
  154. $(ECHO) "solution: verifiez votre numero de groupe"; \
  155. exit 1; \
  156. fi
  157.  
  158. tests : all
  159. @for file in `ls -1 $(TESTS_DIR)/*.zwei`; do \
  160. $(ECHO); \
  161. $(ECHO) "fichier $$file"; \
  162. $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \
  163. done
  164.  
  165. examples : all
  166. @for file in `ls -1 $(EXAMPLES_DIR)/*.zwei`; do \
  167. $(ECHO); \
  168. $(ECHO) "fichier $$file"; \
  169. $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \
  170. done
  171.  
  172. .PHONY : all
  173. .PHONY : force
  174. .PHONY : clean
  175. .PHONY : distclean
  176. .PHONY : wc
  177. .PHONY : grep
  178. .PHONY : stat
  179. .PHONY : fix-premissions
  180. .PHONY : submit
  181. .PHONY : test-group
  182. .PHONY : tests
  183. .PHONY : examples
  184.  
  185. ##############################################################################
  186. # Règles
  187.  
  188. $(SC_TARGET) : $(SC_SOURCES)
  189. @if [ ! -d $(SC_OUTPUTDIR) ]; then \
  190. $(call run,$(MKDIR) -p $(SC_OUTPUTDIR)); \
  191. fi
  192. $(strip $(SC_COMMAND) $(SC_FLAGS) $(SC_OUTPUTDIR:%=-d %) \
  193. $(SC_CLASSPATH:%=-classpath %) $?)
  194. $(TOUCH) $@
  195.  
  196. ##############################################################################