Makefile.fpc 9.3 KB

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