Makefile.fpc 11 KB

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