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