Makefile.fpc 11 KB

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