Makefile.fpc 25 KB

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