Makefile.fpc 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. #
  2. # Makefile.fpc for Free Pascal Tests directory
  3. #
  4. [defaults]
  5. defaultrule=info
  6. [sections]
  7. none=1
  8. exts=1
  9. [rules]
  10. # For linux by default no graph tests
  11. ifdef inlinux
  12. NOGRAPH=1
  13. endif
  14. DIRS=tf ts tbs tbf test tesi to webtbs webtbf
  15. # defining NOGRAPH excludes tests using the graph unit, defining
  16. # GRAPH includes those tests.
  17. ifdef NOGRAPH
  18. include graph.lst
  19. endif
  20. ifdef GRAPH
  21. graphlst=
  22. endif
  23. all : info
  24. tests : clean all_compilations
  25. cont_tests : all_compilations
  26. getret$(EXEEXT) : getret.pp
  27. $(FPC) getret
  28. getreturncode : getret$(EXEEXT)
  29. ifndef inlinux
  30. redir -ea $(FILE).log -oa $(FILE).log getret $(COMMAND)
  31. cp retcode $(FILE).$(RESEXT)
  32. else
  33. getret $(COMMAND) > $(FILE).log 2>$(FILE).log
  34. cp retcode $(FILE).$(RESEXT)
  35. # @echo "Return code of $(FILE) is $(cat retcode)"
  36. endif
  37. # retcode should be between 0 and 255
  38. # 256 is for halt
  39. # 512+doserror if doserror<>0
  40. # 1024 RESFILE does not exist
  41. # 2048 RESFILE is not set
  42. ifndef RESFILE
  43. RETVAL=2048
  44. else
  45. ifeq ($(wildcard $(RESFILE)*),$(RESFILE))
  46. RETVAL=$(shell cat $(RESFILE))
  47. else
  48. RETVAL=1024
  49. endif
  50. endif
  51. ifeq ($(RETVAL),0)
  52. testsuccess:
  53. @echo "Test for $(FILE) success (compiles)"
  54. @echo "Test for $(FILE) success (compiles)" >>$(LOG)
  55. else
  56. testsuccess:
  57. @echo "Test for $(FILE) fails (does not compile) error $(RETVAL)"
  58. @echo "Test for $(FILE) fails (does not compile) error $(RETVAL)" >>$(LOG)
  59. ifdef LONGLOG
  60. @echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" >> $(LONGLOG)
  61. @echo "Test for $(FILE) fails (does not compile) error $(RETVAL)" >> $(LONGLOG)
  62. @echo "" >> $(LONGLOG)
  63. cat $(FILE).log >> $(LONGLOG)
  64. @echo "" >> $(LONGLOG)
  65. endif
  66. @echo $(FILE) >> ts_fail
  67. @echo $(FILE) >> faillist
  68. endif
  69. ifdef EXCFILE
  70. ifeq ($(wildcard $(EXCFILE)*),$(EXCFILE))
  71. EXERETVAL:=$(shell cat $(EXCFILE))
  72. else
  73. EXERETVAL=$(EXCFILE) does not exist
  74. endif
  75. else
  76. EXERETVAL=No EXCFILE variable defined
  77. endif
  78. ifeq ($(EXERETVAL),0)
  79. testexecsuccess:
  80. @echo "Test for exec $(FILE) success (runs without error)"
  81. @echo "Test for $(FILE) success (runs without error)" >> $(LOG)
  82. else
  83. testexecsuccess:
  84. @echo "Test for exec $(FILE) fails exec error $(EXERETVAL)"
  85. @echo "Test for exec $(FILE) fails exec error $(EXERETVAL)" >> $(LOG)
  86. ifdef LONGLOG
  87. @echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" >> $(LONGLOG)
  88. @echo "Test for exec $(FILE) fails exec error $(EXERETVAL)" >> $(LONGLOG)
  89. @echo "" >> $(LONGLOG)
  90. cat $(FILE).elg >> $(LONGLOG)
  91. @echo $(FILE) >> ex_fail
  92. endif
  93. endif
  94. ifeq ($(wildcard $(FILE)$(EXEEXT)),$(FILE)$(EXEEXT))
  95. testexec:
  96. @echo "Testing $(FILE)$(EXEEXT)"
  97. ifdef NOREDIR
  98. getret $(FILE)$(EXEEXT)
  99. else
  100. ifndef inlinux
  101. redir -e $(FILE).elg -o $(FILE).elg getret $(FILE)$(EXEEXT)
  102. else
  103. getret $(FILE)$(EXEEXT) > $(FILE).elg 2>$(FILE).elg
  104. endif
  105. endif
  106. cp -f retcode $(FILE).exc
  107. $(MAKE) testexecsuccess 'FILE=$(FILE)' 'EXCFILE=$(FILE).exc'
  108. else
  109. testexec:
  110. ifeq ($(wildcard $(FILE)$(PPUEXT)),$(FILE)$(PPUEXT))
  111. @echo "file is a unit $(FILE)$(PPUEXT)"
  112. @echo "unit" > $(FILE).elg
  113. else
  114. @echo "No exefile $(FILE)$(EXEEXT)"
  115. @echo $(FILE) >> faillist
  116. ifdef LONGLOG
  117. @echo "No exefile $(FILE)$(EXEEXT) was generated" >> $(LONGLOG)
  118. endif
  119. endif
  120. endif
  121. test_exc :
  122. @echo $(wildcard $(FILE).exc*)
  123. @echo xx$(wildcard $(EXCFILE)*)xx xx$(EXCFILE)xx
  124. cat $(FILE).exc
  125. ifneq ($(RETVAL),0)
  126. testfail:
  127. @echo "Test for $(FILE) success (does not compile) error $(RETVAL)"
  128. @echo "Test for $(FILE) success (does not compile) error $(RETVAL)" >> $(LOG)
  129. else
  130. testfail:
  131. @echo "Test for $(FILE) fails (does compile and should not)"
  132. @echo "Test for $(FILE) fails (does compile and should not)" >> $(LOG)
  133. ifdef LONGLOG
  134. @echo "Test for $(FILE) fails (does compile and should not)" >> $(LONGLOG)
  135. endif
  136. @echo $(FILE) >> tf_fail
  137. @echo $(FILE) >> faillist
  138. endif
  139. ifndef LONGLOG
  140. export LONGLOG:=longlog
  141. endif
  142. ifndef LOG
  143. export LOG:=log
  144. endif
  145. ifdef FILE
  146. OPTFILE=$(wildcard $(FILE).opt)
  147. endif
  148. ifdef OPTFILE
  149. override OPT+=$(OPTFILE)
  150. endif
  151. ifndef FILE
  152. FILE=ts/ts00001.pp
  153. endif
  154. testone :
  155. $(MAKE) getreturncode 'COMMAND=$(FPC) $(OPT) $(FILE).pp' 'RESEXT=$(RESEXT)' 'FILE=$(FILE)'
  156. %.res : %.pp
  157. $(MAKE) testone 'FILE=$*' 'RESEXT=res'
  158. $(MAKE) testsuccess 'FILE=$*' 'RESFILE=$*.res'
  159. %.ref : %.pp
  160. $(MAKE) testone 'FILE=$*' 'RESEXT=ref'
  161. $(MAKE) testfail 'FILE=$*' 'RESFILE=$*.ref'
  162. # exec log files
  163. # creates two files
  164. # *.elg log file
  165. # *.exc exicode of program
  166. %.elg : %.res
  167. $(MAKE) testexec 'FILE=$*'
  168. %.eli : %.res
  169. $(MAKE) testexec 'FILE=$*' 'NOREDIR=YES'
  170. allts : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard ts/ts*.pp)))
  171. alltbs : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tbs/tbs*.pp)))
  172. allwebtbs : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard webtbs/tbug*.pp)))
  173. tbs0to99 : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tbs/tbs00*.pp)))
  174. tbs100to199 : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tbs/tbs01*.pp)))
  175. tbs200to299 : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tbs/tbs02*.pp)))
  176. tbs300to399 : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tbs/tbs03*.pp)))
  177. alltest : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard test/test*.pp)))
  178. alltesi : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tesi/tesi*.pp)))
  179. alltis : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard tis/tis*.pp)))
  180. alltf : $(patsubst %.pp,%.ref,$(filter-out $(graphlst),$(wildcard tf/tf*.pp)))
  181. alltbf : $(patsubst %.pp,%.ref,$(filter-out $(graphlst),$(wildcard tbf/tbf*.pp)))
  182. allwebtbf : $(patsubst %.pp,%.ref,$(filter-out $(graphlst),$(wildcard webtbf/tbug*.pp)))
  183. allto : $(patsubst %.pp,%.res,$(filter-out $(graphlst),$(wildcard to/to*.pp)))
  184. ifndef TS_FAIL_LIST
  185. ifeq ($(wildcard ts_fail*),ts_fail)
  186. TS_FAIL_LIST=$(shell cat ts_fail)
  187. export TS_FAIL_LIST
  188. endif
  189. endif
  190. ifndef TF_FAIL_LIST
  191. ifeq ($(wildcard tf_fail*),tf_fail)
  192. TF_FAIL_LIST=$(shell cat tf_fail)
  193. export TF_FAIL_LIST
  194. endif
  195. endif
  196. ifndef EXEC_FAIL_LIST
  197. ifeq ($(wildcard ex_fail*),ex_fail)
  198. EXEC_FAIL_LIST=$(shell cat ex_fail)
  199. export EXEC_FAIL_LIST
  200. endif
  201. endif
  202. clean_fail :
  203. -rm -f $(addsuffix .res,$(TS_FAIL_LIST))
  204. -rm -f $(addsuffix .ref,$(TF_FAIL_LIST))
  205. -rm -f $(addsuffix .res,$(EXEC_FAIL_LIST))
  206. -rm -f $(addsuffix .elg,$(EXEC_FAIL_LIST))
  207. # Test all failure of last time
  208. # don't forget to try to run them again
  209. again :
  210. $(MAKE) internal_again LOG=again.log LONGLOG=again.llg
  211. internal_again : clean_fail $(addsuffix .res,$(TS_FAIL_LIST)) \
  212. $(addsuffix .ref,$(TF_FAIL_LIST)) \
  213. $(addsuffix .elg,$(EXEC_FAIL_LIST) $(TS_FAIL_LIST))
  214. grep fails $(LOG)
  215. all_compilations : allts alltbs allwebtbs alltf alltbf allwebtbf allto alltest alltesi alltis
  216. grep fails $(LOG)
  217. allexec : alltsexec alltbsexec allwebtbsexec alltestexec
  218. grep fails $(LOG)
  219. alltestexec: $(patsubst %.pp,%.elg,$(wildcard test/test*.pp))
  220. allfails :
  221. grep fails $(LOG) > fails.log
  222. # these test are interactive
  223. # no redirection !!!
  224. alltesiexec: $(patsubst %.pp,%.eli,$(filter-out $(graphlst),$(wildcard tesi/tesi*.pp)))
  225. alltsexec: $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard ts/ts*.pp)))
  226. alltbsexec: $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard tbs/tbs*.pp)))
  227. allwebtbsexec: $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard webtbs/tbug*.pp)))
  228. tbsexec0to99 : $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard tbs/tbs00*.pp)))
  229. tbsexec100to199 : $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard tbs/tbs01*.pp)))
  230. tbsexec200to299 : $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard tbs/tbs02*.pp)))
  231. tbsexec300to399 : $(patsubst %.pp,%.elg,$(filter-out $(graphlst),$(wildcard tbs/tbs03*.pp)))
  232. alltisexec: $(patsubst %.pp,%.eli,$(filter-out $(graphlst),$(wildcard tis/tis*.pp)))
  233. clean:
  234. -rm -f $(addsuffix /*.re*,$(DIRS))
  235. -rm -f $(addsuffix /*$(PPUEXT),$(DIRS))
  236. -rm -f $(addsuffix /*$(OEXT),$(DIRS))
  237. -rm -f $(addsuffix /*.log,$(DIRS))
  238. -rm -f $(addsuffix /*.elg,$(DIRS))
  239. -rm -f $(addsuffix /*.exc,$(DIRS))
  240. ifdef inlinux
  241. -rm -f $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS))))
  242. else
  243. -rm -f $(addsuffix /*$(EXEEXT),$(DIRS))
  244. endif
  245. -rm -f *.tmp
  246. -rm -f $(LOG) $(LONGLOG) faillist ts_fail tf_fail ex_fail
  247. -rm -f fpcmaked ppas.sh ppas.bat retcode
  248. info :
  249. @echo This Makefile allows to test the compiler
  250. @echo compilation of 'ts*.pp' should succeed
  251. @echo compilation of 'tf*.pp' should fail
  252. @echo compilation of 'test*.pp' should succeed
  253. @echo 'to*.pp' files should also compile
  254. @echo simply run \'make tests\' to test all compilation
  255. @echo run \'make allexec\' to test also if the executables
  256. @echo created behave like the should
  257. @echo run \'make tesiexec\' to test executables
  258. @echo that require interactive mode