Makefile.fpc 11 KB

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