Makefile.fpc 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. #
  2. # Makefile.fpc for Free Pascal Tests directory
  3. #
  4. [install]
  5. fpcpackage=y
  6. [default]
  7. fpcdir=..
  8. rule=allexectests
  9. [target]
  10. programs=gparmake createlst
  11. [rules]
  12. unexport FPC_VERSION
  13. ################################
  14. # Test environment setup
  15. #
  16. TEST_HOSTNAME:=$(firstword $(subst ., ,$(shell hostname)))
  17. override TEST_FPC:=$(subst \,/,$(TEST_FPC))
  18. ifndef TEST_FPC
  19. #Use development version of the compiler
  20. TEST_FPC=$(wildcard $(dir $(CURDIR))compiler/$(notdir $(FPC)))
  21. ifeq ($(TEST_FPC), )
  22. $(error "*** ERROR: TEST_FPC is missing ***")
  23. endif
  24. endif
  25. #Defaults *not* to OPT
  26. ifndef TEST_OPT
  27. TEST_OPT=
  28. endif
  29. # Use TEST_USE_LONGLOG by default, as it transfers less data to server
  30. ifndef TEST_DISABLE_LONGLOG
  31. TEST_USE_LONGLOG=1
  32. endif
  33. # disable directory cache; completely loading all directories significantly
  34. # slows down running the testsuite because the programs use very few units
  35. # and most testsuite directories contain thousands of files
  36. override TEST_OPT+=-Fd
  37. # Retrieve Test compiler info
  38. ifndef TEST_FPC_VERSION
  39. TEST_FPC_COMPILERINFO:=$(shell $(TEST_FPC) -iVSPTPSOTODW)
  40. TEST_FPC_VERSION:=$(word 1,$(TEST_FPC_COMPILERINFO))
  41. endif
  42. export TEST_FPC TEST_FPC_VERSION TEST_FPC_COMPILERINFO
  43. ifneq ($(words $(TEST_FPC_COMPILERINFO)),7)
  44. TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iSP)
  45. TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iTP)
  46. TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iSO)
  47. TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iTO)
  48. TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iD)
  49. TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iW)
  50. endif
  51. ifndef TEST_CPU_SOURCE
  52. TEST_CPU_SOURCE:=$(word 2,$(TEST_FPC_COMPILERINFO))
  53. endif
  54. ifndef TEST_CPU_TARGET
  55. TEST_CPU_TARGET:=$(word 3,$(TEST_FPC_COMPILERINFO))
  56. endif
  57. ifndef TEST_OS_SOURCE
  58. TEST_OS_SOURCE:=$(word 4,$(TEST_FPC_COMPILERINFO))
  59. endif
  60. ifndef TEST_OS_TARGET
  61. TEST_OS_TARGET:=$(word 5,$(TEST_FPC_COMPILERINFO))
  62. endif
  63. ifndef TEST_FPC_DATE
  64. TEST_FPC_DATE:=$(word 6,$(TEST_FPC_COMPILERINFO))
  65. endif
  66. ifndef TEST_FPC_FULLVERSION
  67. TEST_FPC_FULLVERSION:=$(word 7,$(TEST_FPC_COMPILERINFO))
  68. endif
  69. TEST_FULL_TARGET=$(TEST_CPU_TARGET)-$(TEST_OS_TARGET)
  70. ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
  71. TEST_TARGETSUFFIX=$(TEST_OS_TARGET)
  72. else
  73. ifneq ($(findstring $(TEST_OS_TARGET),$(LIMIT83fs)),)
  74. TEST_TARGETSUFFIX=$(TEST_OS_TARGET)
  75. else
  76. TEST_TARGETSUFFIX=$(TEST_FULL_TARGET)
  77. endif
  78. endif
  79. ifndef TEST_CCOMPILER
  80. ifeq ($(CPU_TARGET),$(TEST_CPU_TARGET))
  81. ifeq ($(OS_TARGET),$(TEST_OS_TARGET))
  82. TEST_CCOMPILER:=$(strip $(wildcard $(addsuffix /gcc$(SRCEXEEXT),$(SEARCHPATH))))
  83. ifneq ($(TEST_CCOMPILER),)
  84. TEST_CCOMPILER:=$(firstword $(TEST_CCOMPILER))
  85. endif
  86. endif
  87. endif
  88. endif
  89. # always enable smartlinking for msdos
  90. ifeq ($(TEST_OS_TARGET),msdos)
  91. override TEST_OPT+=-XX
  92. endif
  93. # Target dir where the ppu and binaries are created
  94. TEST_OUTPUTDIR=output/$(TEST_TARGETSUFFIX)
  95. C_SUBDIR=$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)
  96. # Date and time the testsuite was run
  97. ifneq ($(DATE),__missing_command_DATE)
  98. TEST_DATETIME:=$(shell $(DATE) -u +%Y%m%d%H%M)
  99. else
  100. # Use a spaceless string, as it will be used for file names
  101. TEST_DATETIME="No-date"
  102. endif
  103. ifndef TEST_USER
  104. TEST_USER=$(USER)
  105. ifeq ($(TEST_USER),)
  106. TEST_USER=$(USERNAME)
  107. endif
  108. endif
  109. # Testsuite upload
  110. DB_TARGZ=$(TEST_HOSTNAME)-$(TEST_DATETIME).tar.gz
  111. [email protected]
  112. DB_UPLOADDIR=/home/fpc/testsuite/incoming
  113. ifdef inWinNT
  114. inWinDOS=1
  115. endif
  116. ifeq ($(OS_SOURCE),go32v2)
  117. inWinDOS=1
  118. inDOS=1
  119. SINGLEDOTESTRUNS=1
  120. endif
  121. ################################
  122. # Misc
  123. #
  124. ifndef FAILLIST
  125. export FAILLIST:=$(TEST_OUTPUTDIR)/faillist
  126. endif
  127. ifndef LONGLOG
  128. export LONGLOG:=$(TEST_OUTPUTDIR)/longlog
  129. endif
  130. ifndef LOG
  131. export LOG:=$(TEST_OUTPUTDIR)/log
  132. endif
  133. # locations of all logfiles
  134. LOGFILES=$(TEST_OUTPUTDIR)/log $(TEST_OUTPUTDIR)/longlog $(TEST_OUTPUTDIR)/faillist
  135. LOGEXT=.testlog .tbslog .tbflog .webtbslog .webtbflog
  136. # Subdirs available in the test subdir
  137. TESTUNITDIRS=system dos crt objects strings sysutils math sharemem strutils matrix lineinfo ucomplex fpwidestring cpu fmtbcd windows classes character dateutil fpcunit softfpu variants sortbase sortalgs linux unixutil types nullable contnrs convutils
  138. TESTDIRECTDIRS=
  139. TESTSUBDIRS=cg cg/variants cg/cdecl cpu8/avr cpu16 cpu16/i8086 library opt wasm $(addprefix units/,$(TESTUNITDIRS))
  140. TESTPACKAGESDIRS=win-base webtbs hash fcl-registry fcl-process zlib fcl-db fcl-xml cocoaint bzip2 fcl-net
  141. TESTPACKAGESUBDIRS=$(addprefix packages/,$(TESTPACKAGESDIRS))
  142. TESTPACKAGESDIRECTDIRS=rtl-objpas rtl-generics hash regexpr fcl-registry fcl-passrc fcl-json fcl-image pastojs fcl-process
  143. TESTPACKAGESDIRECTSUBDIRS=$(addprefix ../packages/,$(addsuffix /tests,$(TESTPACKAGESDIRECTDIRS)))
  144. ifdef QUICKTEST
  145. export QUICKTEST
  146. else
  147. override TESTSUBDIRS+=$(TESTPACKAGESUBDIRS) alglib
  148. override TESTDIRECTDIRS+=$(TESTPACKAGESDIRECTSUBDIRS)
  149. endif
  150. # number of tests to run per (potentially parallel) chunk/dotest invocation
  151. ifndef CHUNKSIZE
  152. export CHUNKSIZE:=100
  153. endif
  154. # All full dirnames in the test/ dir including the subdir self
  155. TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS)) $(TESTDIRECTDIRS)
  156. .PHONY: utils tstunits copyfiles testprep
  157. ################################
  158. # Utilities
  159. #
  160. $(TEST_OUTPUTDIR):
  161. $(MKDIRTREE) $(TEST_OUTPUTDIR)
  162. utils:
  163. $(MAKE) -C utils utils
  164. utilsdb:
  165. $(MAKE) -C utils utilsdb
  166. ifndef DIGEST
  167. DIGEST=utils/digest
  168. endif
  169. ifndef DOTEST
  170. DOTEST=utils/dotest
  171. endif
  172. ifndef CONCAT
  173. CONCAT=utils/concat
  174. endif
  175. ifndef GPARMAKE
  176. GPARMAKE=./gparmake$(SRCEXEEXT)
  177. endif
  178. ifndef PREPUP
  179. PREPUP=utils/prepup
  180. endif
  181. ifndef CREATELST
  182. CREATELST=./createlst$(SRCEXEEXT)
  183. endif
  184. ################################
  185. # Units
  186. #
  187. tstunits:
  188. ifdef inOS2
  189. $(MAKE) -C tstunits FPC_VERSION= FPC=$(TEST_FPC) NATIVE_FPC=$(FPC) CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH) "OPT=$(TEST_OPT)" CCOMPILER=$(TEST_CCOMPILER) BINUTILSPREFIX=$(TEST_BINUTILSPREFIX)
  190. else
  191. $(MAKE) -C tstunits FPC_VERSION= FPC=$(TEST_FPC) NATIVE_FPC=$(FPC) CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH) 'OPT=$(TEST_OPT)' CCOMPILER=$(TEST_CCOMPILER) BINUTILSPREFIX=$(TEST_BINUTILSPREFIX)
  192. endif
  193. ################################
  194. # Copy test environment dependent files ctest.o, cext3.o, cext4.o to test/cg etc
  195. #
  196. .PHONY: create_c_objects delete_c_objects copyfiles test_c_objects
  197. C_SOURCE_DIR=test/cg/obj
  198. C_SOURCES=ctest.c tcext3.c tcext4.c tcext5.c tcext6.c tcext7.c
  199. CPP_SOURCES=cpptcl1.cpp cpptcl2.cpp
  200. TASM_SOURCES=ttasm1.asm
  201. ifneq ($(TEST_ABI),)
  202. C_OBJECTS_DIR=$(C_SOURCE_DIR)/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)-$(TEST_ABI)
  203. else
  204. C_OBJECTS_DIR=$(C_SOURCE_DIR)/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)
  205. endif
  206. C_OBJECTS=$(addprefix $(C_OBJECTS_DIR)/, $(subst .c,.o, $(C_SOURCES)))
  207. CPP_OBJECTS=$(addprefix $(C_OBJECTS_DIR)/, $(subst .cpp,.o, $(CPP_SOURCES)))
  208. TASM_OBJECTS=$(addprefix $(C_OBJECTS_DIR)/, $(subst .asm,.obj, $(TASM_SOURCES)))
  209. create_c_objects:
  210. ifneq ($(TEST_CCOMPILER),)
  211. $(MKDIRTREE) $(C_OBJECTS_DIR)
  212. -$(COPY) $(addprefix $(C_SOURCE_DIR)/, $(C_SOURCES)) $(C_OBJECTS_DIR)
  213. $(MAKE) $(C_OBJECTS)
  214. -$(COPY) $(addprefix $(C_SOURCE_DIR)/, $(CPP_SOURCES)) $(C_OBJECTS_DIR)
  215. $(MAKE) $(CPP_OBJECTS)
  216. -$(DEL) $(addprefix $(C_OBJECTS_DIR)/, $(C_SOURCES) $(CPP_SOURCES))
  217. else
  218. $(ECHO) create_c_objects rule needs a valid C compiler in TEST_CCOMPILER variable
  219. $(ECHO) TEST_CFLAGS variable is passed as options is used to compile the objects
  220. endif
  221. delete_c_objects:
  222. ifneq ($(TEST_CCOMPILER),)
  223. -$(DEL) $(C_OBJECTS) $(CPP_OBJECTS)
  224. else
  225. $(ECHO) delete_c_objects rule needs a valid C compiler in TEST_CCOMPILER variable
  226. $(ECHO) to be able to recompile the objects using create_objects rule.
  227. endif
  228. $(C_OBJECTS) : %.o: %.c
  229. $(TEST_CCOMPILER) -c $(TEST_CFLAGS) $< -o $@
  230. $(CPP_OBJECTS) : %.o: %.cpp
  231. $(TEST_CCOMPILER) -c $(TEST_CFLAGS) $< -o $@
  232. copyfiles:
  233. -$(MKDIRTREE) $(TEST_OUTPUTDIR)/test/cg
  234. -$(COPY) $(C_OBJECTS) $(TEST_OUTPUTDIR)/test/cg
  235. -$(COPY) $(CPP_OBJECTS) $(TEST_OUTPUTDIR)/test/cg
  236. ifeq ($(FULL_TARGET),i8086-msdos)
  237. -$(COPY) $(TASM_OBJECTS) $(TEST_OUTPUTDIR)/test/cg
  238. endif
  239. -$(MKDIRTREE) $(TEST_OUTPUTDIR)/test/units/system
  240. ################################
  241. # Preparation for tests
  242. #
  243. testprep: testprep-stamp.$(TEST_FULL_TARGET)
  244. testprep-stamp.$(TEST_FULL_TARGET): utils tstunits copyfiles
  245. $(ECHOREDIR) $(TEST_DATETIME) > testprep-stamp.$(TEST_FULL_TARGET)
  246. ################################
  247. # Dotest options
  248. #
  249. ifneq ($(TEST_FPC),ppc386$(EXEEXT))
  250. ifeq ($(findstring -c$(TEST_FPC),$(DOTESTOPT)),)
  251. override DOTESTOPT+=-c$(TEST_FPC)
  252. endif
  253. endif
  254. ifneq ($(FULL_TARGET),$(TEST_FULL_TARGET))
  255. override DOTESTOPT+=-T$(TEST_FULL_TARGET)
  256. endif
  257. ifneq ($(TEST_BINUTILSPREFIX),)
  258. override DOTESTOPT+=-Y-XP$(TEST_BINUTILSPREFIX) -Y-Xd
  259. endif
  260. # Don't use comspec for dos:
  261. # command.com returns 0 if it manages to execute a program
  262. # regardless of the program's exit code
  263. ifdef inDOS
  264. override DOTESTOPT+=-X
  265. endif
  266. ifdef TEST_RSH
  267. override DOTESTOPT+=-R$(TEST_RSH)
  268. endif
  269. ifdef TEST_SSH
  270. override DOTESTOPT+=-R$(TEST_SSH) -S
  271. endif
  272. ifdef TEST_REMOTEPATH
  273. override DOTESTOPT+=-P$(TEST_REMOTEPATH)
  274. endif
  275. ifdef TEST_DELBEFORE
  276. override DOTESTOPT+=-B
  277. endif
  278. ifdef TEST_DELTEMP
  279. override DOTESTOPT+=-Z
  280. endif
  281. ifdef TEST_TIMEOUT
  282. override DOTESTOPT+=-O
  283. endif
  284. ifdef TEST_VERBOSE
  285. override DOTESTOPT+=-V
  286. endif
  287. ifdef TEST_PARALLEL
  288. override DOTESTOPT+=-L
  289. endif
  290. # Also display benchmarks
  291. ifdef TEST_BENCH
  292. override DOTESTOPT+=-D
  293. endif
  294. ifdef V
  295. Q=
  296. QECHO=
  297. else
  298. Q=@
  299. QECHO=@echo $(1)
  300. endif
  301. ifdef TEST_REMOTEOPT
  302. override DOTESTOPT+=-U$(TEST_REMOTEOPT)
  303. endif
  304. ifdef TEST_PUTTY
  305. override DOTESTOPT+=-R$(TEST_PUTTY) -W
  306. endif
  307. ifdef TEST_ADB
  308. override DOTESTOPT+=-ADB -R$(TEST_ADB)
  309. endif
  310. ifdef TEST_OPT
  311. # handles several options as well
  312. override DOTESTOPT+=$(addprefix -Y, $(TEST_OPT))
  313. endif
  314. ifdef TEST_REMOTEPW
  315. # handles several options as well
  316. override DOTESTOPT+=-U-pw -U$(TEST_REMOTEPW)
  317. endif
  318. ifdef GRAPH
  319. override DOTESTOPT+=-g
  320. endif
  321. ifdef INTERACTIVE
  322. override DOTESTOPT+=-i
  323. endif
  324. ifdef DOALL
  325. override DOTESTOPT+=-a
  326. endif
  327. ifdef EMULATOR
  328. override DOTESTOPT+=-M$(EMULATOR)
  329. endif
  330. ifdef EMULATOR_OPTS
  331. override DOTESTOPT+=-N$(EMULATOR_OPTS)
  332. endif
  333. ifdef USEENV
  334. override DOTESTENV:=$(DOTESTOPT)
  335. override DOTESTOPT=!DOTESTENV
  336. export DOTESTENV
  337. endif
  338. ################################
  339. # Run tests
  340. #
  341. DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
  342. vpath %.log $(TEST_OUTPUTDIR)
  343. vpath %.elg $(TEST_OUTPUTDIR)
  344. vpath %.o $(C_SUBDIR)
  345. ifdef SINGLEDOTESTRUNS
  346. TBSREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard tbs/t*.pp)))
  347. TBFREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard tbf/t*.pp)))
  348. WEBTBSREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard webtbs/t*.pp)))
  349. WEBTBFREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard webtbf/t*.pp)))
  350. TESTREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))))
  351. else
  352. TBSREQ=$(TEST_OUTPUTDIR)/tbsdir-stamp.$(TEST_FULL_TARGET)
  353. TBFREQ=$(TEST_OUTPUTDIR)/tbfdir-stamp.$(TEST_FULL_TARGET)
  354. WEBTBSREQ=$(TEST_OUTPUTDIR)/webtbsdir-stamp.$(TEST_FULL_TARGET)
  355. WEBTBFREQ=$(TEST_OUTPUTDIR)/webtbfdir-stamp.$(TEST_FULL_TARGET)
  356. TESTREQ=$(TEST_OUTPUTDIR)/testdir-stamp.$(TEST_FULL_TARGET)
  357. endif
  358. %.log : %.pp testprep-stamp.$(TEST_FULL_TARGET)
  359. $(call QECHO," COMPILE $<")
  360. $(Q)$(DOTEST) $(DOTESTOPT) $<
  361. %.elg : %.pp testprep-stamp.$(TEST_FULL_TARGET)
  362. $(call QECHO," EXECUTE $<")
  363. $(Q)$(DOTEST) $(DOTESTOPT) -e $<
  364. ifdef TEST_CCOMPILER
  365. %.o : %.c
  366. $(TEST_CCOMPILER) -c $< -o $(@D)/$(C_SUBDIR)/$(@F)
  367. %.o : %.cc
  368. $(TEST_CCOMPILER) -c $< -o $(@D)/$(C_SUBDIR)/$(@F)
  369. endif
  370. ################################
  371. # Compile tests
  372. #
  373. .PHONY: alltbs alltbf allwebtbs allwebtbf alltest alltests
  374. alltbs : testprep $(patsubst %.pp,%.log,$(sort $(wildcard tbs/t*.pp)))
  375. alltbf : testprep $(patsubst %.pp,%.log,$(sort $(wildcard tbf/t*.pp)))
  376. allwebtbs : testprep $(patsubst %.pp,%.log,$(sort $(wildcard webtbs/t*.pp)))
  377. allwebtbf : testprep $(patsubst %.pp,%.log,$(sort $(wildcard webtbf/t*.pp)))
  378. alltest : testprep $(patsubst %.pp,%.log,$(sort $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))))
  379. ifndef SINGLEDOTESTRUNS
  380. $(Q)$(DOTEST) $(DOTESTOPT) -e $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))
  381. endif
  382. alltests: alltest alltbs alltbf allwebtbs allwebtbf
  383. test_c_objects: testprep
  384. $(MAKE) $(patsubst %.pp,%.log, $(wildcard test/cg/cdecl/tcalext*.pp))
  385. $(MAKE) $(patsubst %.pp,%.elg, $(wildcard test/cg/cdecl/tcalext*.pp))
  386. $(MAKE) $(patsubst %.pp,%.log, $(wildcard test/cg/cdecl/tcppcl*.pp))
  387. $(MAKE) $(patsubst %.pp,%.elg, $(wildcard test/cg/cdecl/tcppcl*.pp))
  388. ################################
  389. # Compile and Run tests
  390. #
  391. ifdef SINGLEDOTESTRUNS
  392. .PHONY: allexectbs allexectbf allexecwebtbs allexecwebtbf allexectest allexectests
  393. allexectbs: $(addsuffix .tbslog, $(LOGFILES))
  394. allexectbf: $(addsuffix .tbflog, $(LOGFILES))
  395. allexecwebtbs: $(addsuffix .webtbslog, $(LOGFILES))
  396. allexecwebtbf: $(addsuffix .webtbflog, $(LOGFILES))
  397. allexectest: $(addsuffix .testlog, $(LOGFILES))
  398. $(TEST_OUTPUTDIR)/%.mergedlog : $(TEST_OUTPUTDIR)/%.testlog $(TEST_OUTPUTDIR)/%.tbslog $(TEST_OUTPUTDIR)/%.tbflog $(TEST_OUTPUTDIR)/%.webtbslog $(TEST_OUTPUTDIR)/%.webtbflog
  399. $(Q)$(CONCAT) $^ $@
  400. $(Q)$(COPY) $@ $(basename $@)
  401. $(TEST_OUTPUTDIR)/%.tbslog : $(TBSREQ)
  402. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.tbslog
  403. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.tbslog
  404. $(TEST_OUTPUTDIR)/%.tbflog : $(TBFREQ)
  405. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.tbflog
  406. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.tbflog
  407. $(TEST_OUTPUTDIR)/%.webtbslog : $(WEBTBSREQ)
  408. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.webtbslog
  409. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.webtbslog
  410. $(TEST_OUTPUTDIR)/%.webtbflog : $(WEBTBFREQ)
  411. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.webtbflog
  412. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.webtbflog
  413. $(TEST_OUTPUTDIR)/%.testlog : $(TESTREQ)
  414. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.testlog
  415. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.testlog
  416. # run all tests, then merge log files
  417. allexectests: $(TEST_OUTPUTDIR)/log.testlog $(TEST_OUTPUTDIR)/log.tbslog \
  418. $(TEST_OUTPUTDIR)/log.tbflog $(TEST_OUTPUTDIR)/log.webtbslog \
  419. $(TEST_OUTPUTDIR)/log.webtbflog \
  420. $(addprefix $(TEST_OUTPUTDIR)/,$(foreach EXT, $(LOGEXT), $(addsuffix $(EXT), faillist longlog))) \
  421. $(addsuffix .mergedlog, $(LOGFILES))
  422. # SINGLEDOTESTRUNS
  423. else
  424. .PHONY: allexectests gparmake_allexectests
  425. MAKEINC=$(TEST_OUTPUTDIR)/MakeChunks-$(TEST_TARGETSUFFIX).inc
  426. $(GPARMAKE): utils/gparmake.pp $(CREATELST)
  427. $(Q)$(MAKE) $(COMPILER_UNITTARGETDIR)
  428. $(FPC) -FE. utils/gparmake.pp $(OPT)
  429. $(CREATELST): utils/createlst.pp
  430. $(Q)$(MAKE) $(COMPILER_UNITTARGETDIR)
  431. $(FPC) -FE. utils/createlst.pp $(OPT)
  432. # Can't have testprep as prerequisite, because that is a phony target and
  433. # phony targets are always remade. Since the makefile will be reparsed
  434. # after making the MakeChunks file (because it has to be included) and all
  435. # up-to-date checks will be re-evaluated, this means that the testprep rule
  436. # (or testprep timestamp file, which depends on phony rules and hence has
  437. # the same behaviour) will always be considered newer than the MakeChunks
  438. # file and hence the MakeChunks will be regenerated in an infinite loop
  439. # (although some make versions appear to contain a bug that prevents this
  440. # from happening)
  441. # As a result, we list TEST_OUTPUTDIR as a dependency (that just creates
  442. # the directory) and have an explicit rule to build GPARMAKE rather than
  443. # building it via the utils Makefile
  444. $(MAKEINC): $(GPARMAKE) $(CREATELST)
  445. # generate rules for parallel executions of dotest
  446. # gparmake now also needs an additional parameter for the name of the
  447. # used subdirectory. Note also that the index must be increasing for each
  448. # new call with a gap insuring that all the previous files have lower index
  449. # even if CHUNKSIZE is equal to 1.
  450. $(Q)$(MAKE) $(TEST_OUTPUTDIR)
  451. $(Q)$(CREATELST) filelisttest.lst $(TESTDIRS)
  452. $(Q)$(GPARMAKE) $(MAKEINC) test 1 $(CHUNKSIZE) @filelisttest.lst
  453. $(Q)$(CREATELST) filelisttbs.lst tbs
  454. $(Q)$(GPARMAKE) -a $(MAKEINC) tbs 10000 $(CHUNKSIZE) @filelisttbs.lst
  455. $(Q)$(CREATELST) filelisttbf.lst tbf
  456. $(Q)$(GPARMAKE) -a $(MAKEINC) tbf 15000 $(CHUNKSIZE) @filelisttbf.lst
  457. $(Q)$(CREATELST) filelistwebtbs.lst webtbs
  458. $(Q)$(GPARMAKE) -a $(MAKEINC) webtbs 20000 $(CHUNKSIZE) @filelistwebtbs.lst
  459. $(Q)$(CREATELST) filelistwebtbf.lst webtbf
  460. $(Q)$(GPARMAKE) -a $(MAKEINC) webtbf 30000 $(CHUNKSIZE) @filelistwebtbf.lst
  461. # only include the targets to compile/run the tests when we want to
  462. # run them (in particular: not when cleaning)
  463. ifeq (,$(findstring clean,$(firstword $(MAKECMDGOALS))))
  464. ifneq (,$(findstring all,$(MAKECMDGOALS)))
  465. ifneq (,$(wildcard $(MAKEINC)))
  466. # incude the rules we just generated
  467. include $(TEST_OUTPUTDIR)/MakeChunks-$(TEST_TARGETSUFFIX).inc
  468. endif
  469. endif
  470. endif
  471. # this is pretty cool: MakeChunks-$(TEST_TARGETSUFFIX).inc will contain
  472. # additional prerequisites for the allexectests target, and after it is
  473. # generated it will be included by the above "include" statement, and those
  474. # additional prerequisites will be added on the fly and also be evaluated.
  475. # However, to avoid problems on some targets that seem to have problems
  476. # handling missing include files, we first create MAKEINC file
  477. # and rerun MAKE with gparmake_allexectests target.
  478. allexectests: $(MAKEINC)
  479. $(MAKE) gparmake_allexectests
  480. # SINGLEDOTESTRUNS
  481. endif
  482. ################################
  483. # Clean
  484. #
  485. .PHONY: clean distclean clean_test clean_sources
  486. # Remove any possible PPU files
  487. clean_sources:
  488. -$(DEL) $(wildcard $(patsubst %.pp,%$(PPUEXT),$(wildcard $(addsuffix /*.pp,$(DIRS)))))
  489. clean_test:
  490. -$(DELTREE) $(TEST_OUTPUTDIR)
  491. -$(DEL) core gmon.out testprep-stamp.$(TEST_FULL_TARGET) dotgz$(SRCBATCHEXT)
  492. clean: clean_sources fpc_clean
  493. $(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH)
  494. $(MAKE) -C tstunits clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH)
  495. -$(DEL) filelisttest.lst filelisttbs.lst filelisttbf.lst filelistwebtbs.lst filelistwebtbf.lst
  496. distclean: clean fpc_distclean
  497. $(DELTREE) output
  498. $(MAKE) -C utils distclean
  499. $(MAKE) -C tstunits distclean
  500. -$(DEL) testprep-stamp.*
  501. #cleanall: clean
  502. # $(MAKE) -C utils cleanall
  503. ################################
  504. # Main rules
  505. #
  506. .PHONY: all full digest onlyknown onlygraph onlyinteractive
  507. digest : utils
  508. -$(DIGEST) $(LOG)
  509. SVNVERSION:=$(firstword $(wildcard $(addsuffix /svnversion$(SRCEXEEXT),$(SEARCHPATH))))
  510. GIT:=$(firstword $(wildcard $(addsuffix /git$(SRCEXEEXT),$(SEARCHPATH))))
  511. ifneq ($(wildcard ../.git),)
  512. ifneq ($(GIT),)
  513. GIT_GET_HASH=$(GIT) log -1 --format=%h
  514. SVN_TESTS_REV_STR=$(shell $(GIT_GET_HASH) .)
  515. SVN_COMPILER_REV_STR=$(shell $(GIT_GET_HASH) ../compiler)
  516. SVN_RTL_REV_STR=$(shell $(GIT_GET_HASH) ../rtl)
  517. SVN_PACKAGES_REV_STR=$(shell $(GIT_GET_HASH) ../packages)
  518. endif
  519. else
  520. ifneq ($(SVNVERSION),)
  521. SVN_TESTS_REV_STR=$(shell $(SVNVERSION) -c .)
  522. SVN_COMPILER_REV_STR=$(shell $(SVNVERSION) -c ../compiler)
  523. SVN_RTL_REV_STR=$(shell $(SVNVERSION) -c ../rtl)
  524. SVN_PACKAGES_REV_STR=$(shell $(SVNVERSION) -c ../packages)
  525. endif
  526. endif
  527. ifeq ($(TEST_COMMENT),)
  528. TEST_COMMENT=$(TEST_OPT)
  529. endif
  530. $(TEST_OUTPUTDIR)/dbdigest.cfg:
  531. $(ECHOREDIR) OS=$(TEST_OS_TARGET) > $(TEST_OUTPUTDIR)/dbdigest.cfg
  532. $(ECHOREDIR) CPU=$(TEST_CPU_TARGET) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  533. $(ECHOREDIR) Version=$(TEST_FPC_VERSION) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  534. $(ECHOREDIR) LogFile=log >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  535. ifneq ($(TEST_USE_LONGLOG),)
  536. $(ECHOREDIR) LongLogFile=longlog >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  537. endif
  538. $(ECHOREDIR) Submitter=$(TEST_USER) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  539. $(ECHOREDIR) Machine=$(TEST_HOSTNAME) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  540. $(ECHOREDIR) Comment=$(TEST_COMMENT) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  541. ifneq ($(TEST_DATETIME),)
  542. $(ECHOREDIR) Date=$(TEST_DATETIME) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  543. endif
  544. ifneq ($(TEST_FPC_DATE),)
  545. $(ECHOREDIR) CompilerDate=$(TEST_FPC_DATE) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  546. endif
  547. ifneq ($(TEST_FPC_FULLVERSION),)
  548. $(ECHOREDIR) CompilerFullVersion=$(TEST_FPC_FULLVERSION) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  549. endif
  550. ifneq ($(SVN_TESTS_REV_STR),)
  551. $(ECHOREDIR) svntestsrevision=$(SVN_TESTS_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  552. $(ECHOREDIR) svncompilerrevision=$(SVN_COMPILER_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  553. $(ECHOREDIR) svnrtlrevision=$(SVN_RTL_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  554. $(ECHOREDIR) svnpackagesrevision=$(SVN_PACKAGES_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  555. endif
  556. # OpenBSD system tar executable doesn't know
  557. # about --files-from option, but supports -I
  558. ifeq ($(OS_SOURCE),openbsd)
  559. ifeq ($(TARPROG),$(subst gtar,,$(TARPROG)))
  560. BSD_SYSTEM_TAR=1
  561. endif
  562. endif
  563. ifdef BSD_SYSTEM_TAR
  564. TARFROM=-I tar.lst
  565. else
  566. TARFROM=--files-from=tar.lst
  567. endif
  568. # Pass option -ll to perpup if we use longlog file
  569. # instead of add all *.log and *.elg files to DB_TARGZ
  570. ifneq ($(TEST_USE_LONGLOG),)
  571. PREPUP_OPT=-ll
  572. else
  573. PREPUP_OPT=
  574. endif
  575. ifndef inWinDOS
  576. $(TEST_OUTPUTDIR)/tar.lst:
  577. ifdef inOS2
  578. cd $(subst /,\,$(TEST_OUTPUTDIR)) && gnufind . -name "*.log" -o -name "*.elg" > tar.lst
  579. $(ECHOREDIR) log>> $(TEST_OUTPUTDIR)/tar.lst
  580. $(ECHOREDIR) dbdigest.cfg>> $(TEST_OUTPUTDIR)/tar.lst
  581. else
  582. ifeq ($(TEST_USE_LONGLOG),)
  583. cd $(TEST_OUTPUTDIR) && find . -name '*.log' -o -name '*.elg' > tar.lst
  584. else
  585. $(ECHOREDIR) "longlog" > $(TEST_OUTPUTDIR)/tar.lst
  586. endif
  587. $(ECHOREDIR) "log" >> $(TEST_OUTPUTDIR)/tar.lst
  588. $(ECHOREDIR) "dbdigest.cfg" >> $(TEST_OUTPUTDIR)/tar.lst
  589. endif
  590. $(TEST_OUTPUTDIR)/$(DB_TARGZ): $(TEST_OUTPUTDIR)/tar.lst $(TEST_OUTPUTDIR)/dbdigest.cfg
  591. ifdef inCygWin
  592. dos2unix $(TEST_OUTPUTDIR)/tar.lst
  593. endif
  594. ifdef inOS2
  595. dos2unix $(TEST_OUTPUTDIR)/tar.lst
  596. cd $(subst /,\,$(TEST_OUTPUTDIR)) && $(TARPROG) czf $(DB_TARGZ) $(TARFROM)
  597. else
  598. cd $(TEST_OUTPUTDIR) && $(TARPROG) czf $(DB_TARGZ) $(TARFROM)
  599. endif
  600. else
  601. $(TEST_OUTPUTDIR)/$(DB_TARGZ): $(TEST_OUTPUTDIR)/dbdigest.cfg
  602. ifdef inDOS
  603. $(ECHOREDIR) @echo off > dotgz$(SRCBATCHEXT)
  604. $(ECHOREDIR) cd $(subst /,\,$(TEST_OUTPUTDIR)) >> dotgz$(SRCBATCHEXT)
  605. $(ECHOREDIR) $(subst /,\,../../$(PREPUP)) $(DB_TARGZ) >> dotgz$(SRCBATCHEXT)
  606. $(ECHOREDIR) if errorlevel 1 $(DEL) $(DB_TARGZ) >> dotgz$(SRCBATCHEXT)
  607. $(ECHOREDIR) cd $(subst /,\,../../) >> dotgz$(SRCBATCHEXT)
  608. $(RUNBATCH) dotgz$(SRCBATCHEXT)
  609. else
  610. ifdef inOS2
  611. cd "$(subst /,\,$(TEST_OUTPUTDIR))" && "..\..\$(PREPUP)" $(DB_TARGZ)
  612. else
  613. cd "$(TEST_OUTPUTDIR)" && "../../$(PREPUP)" $(DB_TARGZ)
  614. endif
  615. endif
  616. endif
  617. # Use Putty, unless we set DB_USE_SSH to force ssh usage
  618. # Useful for cygwin
  619. ifndef DB_USE_SSH
  620. ifdef inWinDOS
  621. UsePutty=1
  622. endif
  623. endif
  624. uploadrun: $(TEST_OUTPUTDIR)/$(DB_TARGZ)
  625. ifdef UsePutty
  626. pscp -load "[email protected]" $(TEST_OUTPUTDIR)/$(DB_TARGZ) $(DB_HOST):$(DB_UPLOADDIR)/$(DB_TARGZ).part $(SSH_EXTRA)
  627. plink -load "[email protected]" "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
  628. else
  629. scp $(DB_SSH_EXTRA) $(TEST_OUTPUTDIR)/$(DB_TARGZ) $(DB_HOST):$(DB_UPLOADDIR)/$(DB_TARGZ).part
  630. ifdef inOS2
  631. $(ECHOREDIR) . | ssh $(DB_SSH_EXTRA) $(DB_HOST) "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
  632. else
  633. ssh $(DB_SSH_EXTRA) $(DB_HOST) "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
  634. endif
  635. endif
  636. all : allexectests
  637. full :
  638. $(MAKE) clean
  639. $(MAKE) allexectests
  640. $(MAKE) digest
  641. fulldb :
  642. $(MAKE) clean
  643. $(MAKE) allexectests
  644. $(MAKE) digest
  645. $(MAKE) uploadrun
  646. tarfile : $(TEST_OUTPUTDIR)/$(DB_TARGZ)
  647. onlyknown :
  648. $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -k-"
  649. onlygraph :
  650. $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -g-"
  651. onlyinteractive :
  652. $(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
  653. info :
  654. @$(ECHO) "This Makefile allows to test the compiler"
  655. @$(ECHO)
  656. @$(ECHO) "Basic Targets:"
  657. @$(ECHO) " all - continue all tests"
  658. @$(ECHO) " full - clean and run all tests"
  659. @$(ECHO) " fulldb - full and upload test results"
  660. @$(ECHO) " digest - compute and print test statistics"
  661. @$(ECHO)
  662. @$(ECHO) "Advanced Targets:"
  663. @$(ECHO) " onlyknown - run only known bugs"
  664. @$(ECHO) " onlygraph - run only graph tests"
  665. @$(ECHO) " onlyinteractive - run only interactive tests"
  666. @$(ECHO)
  667. @$(ECHO) "Host environment:"
  668. @$(ECHO) " $(FULL_TARGET)"
  669. @$(ECHO) " compiler: $(FPC) ver: $(FPC_VERSION)"
  670. @$(ECHO)
  671. @$(ECHO) "Test environment:"
  672. @$(ECHO) " $(TEST_FULL_TARGET)"
  673. @$(ECHO) " compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
  674. @$(ECHO)
  675. @$(ECHO) "Output settings:"
  676. @$(ECHO) " DateTime : $(TEST_DATETIME)"
  677. @$(ECHO) " Outputdir: $(TEST_OUTPUTDIR)"
  678. @$(ECHO) " Uploaddir: $(DB_UPLOADDIR)"
  679. @$(ECHO) " tar.gz : $(DB_TARGZ)"