Makefile.fpc 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837
  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. else
  298. ifneq ($(findstring -j,-$(MAKEFLAGS)),)
  299. override DOTESTOPT+=-L
  300. endif
  301. endif
  302. # Also display benchmarks
  303. ifdef TEST_BENCH
  304. override DOTESTOPT+=-D
  305. endif
  306. ifdef V
  307. Q=
  308. QECHO=
  309. else
  310. Q=@
  311. QECHO=@echo $(1)
  312. endif
  313. ifdef TEST_REMOTEOPT
  314. override DOTESTOPT+=-U$(TEST_REMOTEOPT)
  315. endif
  316. ifdef TEST_PUTTY
  317. override DOTESTOPT+=-R$(TEST_PUTTY) -W
  318. endif
  319. ifdef TEST_ADB
  320. override DOTESTOPT+=-ADB -R$(TEST_ADB)
  321. endif
  322. ifdef TEST_OPT
  323. # handles several options as well
  324. override DOTESTOPT+=$(addprefix -Y, $(TEST_OPT))
  325. endif
  326. ifdef TEST_REMOTEPW
  327. # handles several options as well
  328. override DOTESTOPT+=-U-pw -U$(TEST_REMOTEPW)
  329. endif
  330. ifdef GRAPH
  331. override DOTESTOPT+=-g
  332. endif
  333. ifdef INTERACTIVE
  334. override DOTESTOPT+=-i
  335. endif
  336. ifdef DOALL
  337. override DOTESTOPT+=-a
  338. endif
  339. ifdef EMULATOR
  340. override DOTESTOPT+=-M$(EMULATOR)
  341. endif
  342. ifdef EMULATOR_OPTS
  343. override DOTESTOPT+=-N$(EMULATOR_OPTS)
  344. endif
  345. ifdef USEENV
  346. override DOTESTENV:=$(DOTESTOPT)
  347. override DOTESTOPT=!DOTESTENV
  348. export DOTESTENV
  349. endif
  350. ################################
  351. # Run tests
  352. #
  353. DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
  354. vpath %.log $(TEST_OUTPUTDIR)
  355. vpath %.elg $(TEST_OUTPUTDIR)
  356. vpath %.o $(C_SUBDIR)
  357. ifdef SINGLEDOTESTRUNS
  358. TBSREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard tbs/t*.pp)))
  359. TBFREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard tbf/t*.pp)))
  360. WEBTBSREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard webtbs/t*.pp)))
  361. WEBTBFREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard webtbf/t*.pp)))
  362. TESTREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))))
  363. else
  364. TBSREQ=$(TEST_OUTPUTDIR)/tbsdir-stamp.$(TEST_FULL_TARGET)
  365. TBFREQ=$(TEST_OUTPUTDIR)/tbfdir-stamp.$(TEST_FULL_TARGET)
  366. WEBTBSREQ=$(TEST_OUTPUTDIR)/webtbsdir-stamp.$(TEST_FULL_TARGET)
  367. WEBTBFREQ=$(TEST_OUTPUTDIR)/webtbfdir-stamp.$(TEST_FULL_TARGET)
  368. TESTREQ=$(TEST_OUTPUTDIR)/testdir-stamp.$(TEST_FULL_TARGET)
  369. endif
  370. %.log : %.pp testprep-stamp.$(TEST_FULL_TARGET)
  371. $(call QECHO," COMPILE $<")
  372. $(Q)$(DOTEST) $(DOTESTOPT) $<
  373. %.elg : %.pp testprep-stamp.$(TEST_FULL_TARGET)
  374. $(call QECHO," EXECUTE $<")
  375. $(Q)$(DOTEST) $(DOTESTOPT) -e $<
  376. ifdef TEST_CCOMPILER
  377. %.o : %.c
  378. $(TEST_CCOMPILER) -c $< -o $(@D)/$(C_SUBDIR)/$(@F)
  379. %.o : %.cc
  380. $(TEST_CCOMPILER) -c $< -o $(@D)/$(C_SUBDIR)/$(@F)
  381. endif
  382. ################################
  383. # Compile tests
  384. #
  385. .PHONY: alltbs alltbf allwebtbs allwebtbf alltest alltests
  386. alltbs : testprep $(patsubst %.pp,%.log,$(sort $(wildcard tbs/t*.pp)))
  387. alltbf : testprep $(patsubst %.pp,%.log,$(sort $(wildcard tbf/t*.pp)))
  388. allwebtbs : testprep $(patsubst %.pp,%.log,$(sort $(wildcard webtbs/t*.pp)))
  389. allwebtbf : testprep $(patsubst %.pp,%.log,$(sort $(wildcard webtbf/t*.pp)))
  390. alltest : testprep $(patsubst %.pp,%.log,$(sort $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))))
  391. ifndef SINGLEDOTESTRUNS
  392. $(Q)$(DOTEST) $(DOTESTOPT) -e $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))
  393. endif
  394. alltests: alltest alltbs alltbf allwebtbs allwebtbf
  395. test_c_objects: testprep
  396. $(MAKE) $(patsubst %.pp,%.log, $(wildcard test/cg/cdecl/tcalext*.pp))
  397. $(MAKE) $(patsubst %.pp,%.elg, $(wildcard test/cg/cdecl/tcalext*.pp))
  398. $(MAKE) $(patsubst %.pp,%.log, $(wildcard test/cg/cdecl/tcppcl*.pp))
  399. $(MAKE) $(patsubst %.pp,%.elg, $(wildcard test/cg/cdecl/tcppcl*.pp))
  400. ################################
  401. # Compile and Run tests
  402. #
  403. ifdef SINGLEDOTESTRUNS
  404. .PHONY: allexectbs allexectbf allexecwebtbs allexecwebtbf allexectest allexectests
  405. allexectbs: $(addsuffix .tbslog, $(LOGFILES))
  406. allexectbf: $(addsuffix .tbflog, $(LOGFILES))
  407. allexecwebtbs: $(addsuffix .webtbslog, $(LOGFILES))
  408. allexecwebtbf: $(addsuffix .webtbflog, $(LOGFILES))
  409. allexectest: $(addsuffix .testlog, $(LOGFILES))
  410. $(TEST_OUTPUTDIR)/%.mergedlog : $(TEST_OUTPUTDIR)/%.testlog $(TEST_OUTPUTDIR)/%.tbslog $(TEST_OUTPUTDIR)/%.tbflog $(TEST_OUTPUTDIR)/%.webtbslog $(TEST_OUTPUTDIR)/%.webtbflog
  411. $(Q)$(CONCAT) $^ $@
  412. $(Q)$(COPY) $@ $(basename $@)
  413. $(TEST_OUTPUTDIR)/%.tbslog : $(TBSREQ)
  414. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.tbslog
  415. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.tbslog
  416. $(TEST_OUTPUTDIR)/%.tbflog : $(TBFREQ)
  417. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.tbflog
  418. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.tbflog
  419. $(TEST_OUTPUTDIR)/%.webtbslog : $(WEBTBSREQ)
  420. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.webtbslog
  421. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.webtbslog
  422. $(TEST_OUTPUTDIR)/%.webtbflog : $(WEBTBFREQ)
  423. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.webtbflog
  424. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.webtbflog
  425. $(TEST_OUTPUTDIR)/%.testlog : $(TESTREQ)
  426. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.testlog
  427. $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.testlog
  428. # run all tests, then merge log files
  429. allexectests: $(TEST_OUTPUTDIR)/log.testlog $(TEST_OUTPUTDIR)/log.tbslog \
  430. $(TEST_OUTPUTDIR)/log.tbflog $(TEST_OUTPUTDIR)/log.webtbslog \
  431. $(TEST_OUTPUTDIR)/log.webtbflog \
  432. $(addprefix $(TEST_OUTPUTDIR)/,$(foreach EXT, $(LOGEXT), $(addsuffix $(EXT), faillist longlog))) \
  433. $(addsuffix .mergedlog, $(LOGFILES))
  434. # SINGLEDOTESTRUNS
  435. else
  436. .PHONY: allexectests gparmake_allexectests
  437. MAKEINC=$(TEST_OUTPUTDIR)/MakeChunks-$(TEST_TARGETSUFFIX).inc
  438. $(GPARMAKE): utils/gparmake.pp $(CREATELST)
  439. $(Q)$(MAKE) $(COMPILER_UNITTARGETDIR)
  440. $(FPC) -FE. utils/gparmake.pp $(OPT)
  441. $(CREATELST): utils/createlst.pp
  442. $(Q)$(MAKE) $(COMPILER_UNITTARGETDIR)
  443. $(FPC) -FE. utils/createlst.pp $(OPT)
  444. ifdef MAKEINC_SEPARATE
  445. GPARMAKE_OPT=-f
  446. else
  447. GPARMAKE_OPT=
  448. endif
  449. # Can't have testprep as prerequisite, because that is a phony target and
  450. # phony targets are always remade. Since the makefile will be reparsed
  451. # after making the MakeChunks file (because it has to be included) and all
  452. # up-to-date checks will be re-evaluated, this means that the testprep rule
  453. # (or testprep timestamp file, which depends on phony rules and hence has
  454. # the same behaviour) will always be considered newer than the MakeChunks
  455. # file and hence the MakeChunks will be regenerated in an infinite loop
  456. # (although some make versions appear to contain a bug that prevents this
  457. # from happening)
  458. # As a result, we list TEST_OUTPUTDIR as a dependency (that just creates
  459. # the directory) and have an explicit rule to build GPARMAKE rather than
  460. # building it via the utils Makefile
  461. $(MAKEINC): $(GPARMAKE) $(CREATELST)
  462. # generate rules for parallel executions of dotest
  463. # gparmake now also needs an additional parameter for the name of the
  464. # used subdirectory. Note also that the index must be increasing for each
  465. # new call with a gap insuring that all the previous files have lower index
  466. # even if CHUNKSIZE is equal to 1.
  467. $(Q)$(MAKE) $(TEST_OUTPUTDIR)
  468. $(Q)$(CREATELST) filelisttest.lst $(TESTDIRS)
  469. $(Q)$(GPARMAKE) $(GPARMAKE_OPT) $(MAKEINC) test 1 $(CHUNKSIZE) @filelisttest.lst
  470. $(Q)$(CREATELST) filelisttbs.lst tbs
  471. $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) tbs 10000 $(CHUNKSIZE) @filelisttbs.lst
  472. $(Q)$(CREATELST) filelisttbf.lst tbf
  473. $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) tbf 15000 $(CHUNKSIZE) @filelisttbf.lst
  474. $(Q)$(CREATELST) filelistwebtbs.lst webtbs
  475. $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) webtbs 20000 $(CHUNKSIZE) @filelistwebtbs.lst
  476. $(Q)$(CREATELST) filelistwebtbf.lst webtbf
  477. $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) webtbf 30000 $(CHUNKSIZE) @filelistwebtbf.lst
  478. # only include the targets to compile/run the tests when we want to
  479. # run them (in particular: not when cleaning)
  480. ifeq (,$(findstring clean,$(firstword $(MAKECMDGOALS))))
  481. ifneq (,$(findstring all,$(MAKECMDGOALS)))
  482. ifneq (,$(wildcard $(MAKEINC)))
  483. # include the rules we just generated
  484. include $(TEST_OUTPUTDIR)/MakeChunks-$(TEST_TARGETSUFFIX).inc
  485. endif
  486. endif
  487. endif
  488. # this is pretty cool: MakeChunks-$(TEST_TARGETSUFFIX).inc will contain
  489. # additional prerequisites for the allexectests target, and after it is
  490. # generated it will be included by the above "include" statement, and those
  491. # additional prerequisites will be added on the fly and also be evaluated.
  492. # However, to avoid problems on some targets that seem to have problems
  493. # handling missing include files, we first create MAKEINC file
  494. # and rerun MAKE with gparmake_allexectests target.
  495. allexectests: $(MAKEINC)
  496. $(MAKE) gparmake_allexectests
  497. # SINGLEDOTESTRUNS
  498. endif
  499. ################################
  500. # Clean
  501. #
  502. .PHONY: clean distclean clean_test clean_sources
  503. # Remove any possible PPU files
  504. clean_sources:
  505. -$(DEL) $(wildcard $(patsubst %.pp,%$(PPUEXT),$(wildcard $(addsuffix /*.pp,$(DIRS)))))
  506. clean_test:
  507. -$(DELTREE) $(TEST_OUTPUTDIR)
  508. -$(DEL) core gmon.out testprep-stamp.$(TEST_FULL_TARGET) dotgz$(SRCBATCHEXT)
  509. clean: clean_sources fpc_clean
  510. $(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH)
  511. $(MAKE) -C tstunits clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH)
  512. -$(DEL) filelisttest.lst filelisttbs.lst filelisttbf.lst filelistwebtbs.lst filelistwebtbf.lst
  513. distclean: clean fpc_distclean
  514. $(DELTREE) output
  515. $(MAKE) -C utils distclean
  516. $(MAKE) -C tstunits distclean
  517. -$(DEL) testprep-stamp.*
  518. #cleanall: clean
  519. # $(MAKE) -C utils cleanall
  520. ################################
  521. # Main rules
  522. #
  523. .PHONY: all full digest onlyknown onlygraph onlyinteractive
  524. digest : utils
  525. -$(DIGEST) $(LOG)
  526. SVNVERSION:=$(firstword $(wildcard $(addsuffix /svnversion$(SRCEXEEXT),$(SEARCHPATH))))
  527. GIT:=$(firstword $(wildcard $(addsuffix /git$(SRCEXEEXT),$(SEARCHPATH))))
  528. ifneq ($(wildcard ../.git),)
  529. ifneq ($(GIT),)
  530. GIT_GET_HASH=$(GIT) log -1 --format=%h
  531. SVN_TESTS_REV_STR=$(shell $(GIT_GET_HASH) .)
  532. SVN_COMPILER_REV_STR=$(shell $(GIT_GET_HASH) ../compiler)
  533. SVN_RTL_REV_STR=$(shell $(GIT_GET_HASH) ../rtl)
  534. SVN_PACKAGES_REV_STR=$(shell $(GIT_GET_HASH) ../packages)
  535. endif
  536. else
  537. ifneq ($(SVNVERSION),)
  538. SVN_TESTS_REV_STR=$(shell $(SVNVERSION) -c .)
  539. SVN_COMPILER_REV_STR=$(shell $(SVNVERSION) -c ../compiler)
  540. SVN_RTL_REV_STR=$(shell $(SVNVERSION) -c ../rtl)
  541. SVN_PACKAGES_REV_STR=$(shell $(SVNVERSION) -c ../packages)
  542. endif
  543. endif
  544. ifeq ($(TEST_COMMENT),)
  545. TEST_COMMENT=$(TEST_OPT)
  546. endif
  547. $(TEST_OUTPUTDIR)/dbdigest.cfg:
  548. $(ECHOREDIR) OS=$(TEST_OS_TARGET) > $(TEST_OUTPUTDIR)/dbdigest.cfg
  549. $(ECHOREDIR) CPU=$(TEST_CPU_TARGET) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  550. $(ECHOREDIR) Version=$(TEST_FPC_VERSION) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  551. $(ECHOREDIR) LogFile=log >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  552. ifneq ($(TEST_USE_LONGLOG),)
  553. $(ECHOREDIR) LongLogFile=longlog >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  554. endif
  555. $(ECHOREDIR) Submitter=$(TEST_USER) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  556. $(ECHOREDIR) Machine=$(TEST_HOSTNAME) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  557. $(ECHOREDIR) Comment=$(TEST_COMMENT) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  558. ifneq ($(TEST_DATETIME),)
  559. $(ECHOREDIR) Date=$(TEST_DATETIME) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  560. endif
  561. ifneq ($(TEST_FPC_DATE),)
  562. $(ECHOREDIR) CompilerDate=$(TEST_FPC_DATE) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  563. endif
  564. ifneq ($(TEST_FPC_FULLVERSION),)
  565. $(ECHOREDIR) CompilerFullVersion=$(TEST_FPC_FULLVERSION) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  566. endif
  567. ifneq ($(SVN_TESTS_REV_STR),)
  568. $(ECHOREDIR) svntestsrevision=$(SVN_TESTS_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  569. $(ECHOREDIR) svncompilerrevision=$(SVN_COMPILER_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  570. $(ECHOREDIR) svnrtlrevision=$(SVN_RTL_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  571. $(ECHOREDIR) svnpackagesrevision=$(SVN_PACKAGES_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
  572. endif
  573. # OpenBSD system tar executable doesn't know
  574. # about --files-from option, but supports -I
  575. ifeq ($(OS_SOURCE),openbsd)
  576. ifeq ($(TARPROG),$(subst gtar,,$(TARPROG)))
  577. BSD_SYSTEM_TAR=1
  578. endif
  579. endif
  580. ifdef BSD_SYSTEM_TAR
  581. TARFROM=-I tar.lst
  582. else
  583. TARFROM=--files-from=tar.lst
  584. endif
  585. # Pass option -ll to prepup if we use longlog file
  586. # instead of add all *.log and *.elg files to DB_TARGZ
  587. ifneq ($(TEST_USE_LONGLOG),)
  588. PREPUP_OPT=-ll
  589. else
  590. PREPUP_OPT=
  591. endif
  592. ifndef inWinDOS
  593. $(TEST_OUTPUTDIR)/tar.lst:
  594. ifdef inOS2
  595. ifeq ($(TEST_USE_LONGLOG),)
  596. cd $(subst /,\,$(TEST_OUTPUTDIR)) && gnufind . -name "*.log" -o -name "*.elg" > tar.lst
  597. else
  598. $(ECHOREDIR) longlog > $(TEST_OUTPUTDIR)/tar.lst
  599. endif
  600. $(ECHOREDIR) log>> $(TEST_OUTPUTDIR)/tar.lst
  601. $(ECHOREDIR) dbdigest.cfg>> $(TEST_OUTPUTDIR)/tar.lst
  602. else
  603. ifeq ($(TEST_USE_LONGLOG),)
  604. cd $(TEST_OUTPUTDIR) && find . -name '*.log' -o -name '*.elg' > tar.lst
  605. else
  606. $(ECHOREDIR) "longlog" > $(TEST_OUTPUTDIR)/tar.lst
  607. endif
  608. $(ECHOREDIR) "log" >> $(TEST_OUTPUTDIR)/tar.lst
  609. $(ECHOREDIR) "dbdigest.cfg" >> $(TEST_OUTPUTDIR)/tar.lst
  610. endif
  611. $(TEST_OUTPUTDIR)/$(DB_TARGZ): $(TEST_OUTPUTDIR)/tar.lst $(TEST_OUTPUTDIR)/dbdigest.cfg
  612. ifdef inCygWin
  613. dos2unix $(TEST_OUTPUTDIR)/tar.lst
  614. endif
  615. ifdef inOS2
  616. dos2unix $(TEST_OUTPUTDIR)/tar.lst
  617. cd $(subst /,\,$(TEST_OUTPUTDIR)) && $(TARPROG) czf $(DB_TARGZ) $(TARFROM)
  618. else
  619. cd $(TEST_OUTPUTDIR) && $(TARPROG) czf $(DB_TARGZ) $(TARFROM)
  620. endif
  621. else
  622. $(TEST_OUTPUTDIR)/$(DB_TARGZ): $(TEST_OUTPUTDIR)/dbdigest.cfg
  623. ifdef inDOS
  624. $(ECHOREDIR) @echo off > dotgz$(SRCBATCHEXT)
  625. $(ECHOREDIR) cd $(subst /,\,$(TEST_OUTPUTDIR)) >> dotgz$(SRCBATCHEXT)
  626. $(ECHOREDIR) $(subst /,\,../../$(PREPUP)) $(PREPUP_OPT) $(DB_TARGZ) >> dotgz$(SRCBATCHEXT)
  627. $(ECHOREDIR) if errorlevel 1 $(DEL) $(DB_TARGZ) >> dotgz$(SRCBATCHEXT)
  628. $(ECHOREDIR) cd $(subst /,\,../../) >> dotgz$(SRCBATCHEXT)
  629. $(RUNBATCH) dotgz$(SRCBATCHEXT)
  630. else
  631. ifdef inOS2
  632. cd "$(subst /,\,$(TEST_OUTPUTDIR))" && "$(subst /,\,../../$(PREPUP))" $(PREPUP_OPT) $(DB_TARGZ)
  633. else
  634. cd "$(TEST_OUTPUTDIR)" && "../../$(PREPUP)" $(PREPUP_OPT) $(DB_TARGZ)
  635. endif
  636. endif
  637. endif
  638. # Use Putty, unless we set DB_USE_SSH to force ssh usage
  639. # Useful for cygwin
  640. ifndef DB_USE_SSH
  641. ifdef inWinDOS
  642. UsePutty=1
  643. endif
  644. endif
  645. uploadrun: $(TEST_OUTPUTDIR)/$(DB_TARGZ)
  646. ifdef UsePutty
  647. pscp -load "[email protected]" $(TEST_OUTPUTDIR)/$(DB_TARGZ) $(DB_HOST):$(DB_UPLOADDIR)/$(DB_TARGZ).part $(SSH_EXTRA)
  648. plink -load "[email protected]" "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
  649. else
  650. scp $(DB_SSH_EXTRA) $(TEST_OUTPUTDIR)/$(DB_TARGZ) $(DB_HOST):$(DB_UPLOADDIR)/$(DB_TARGZ).part
  651. ifdef inOS2
  652. $(ECHOREDIR) . | ssh $(DB_SSH_EXTRA) $(DB_HOST) "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
  653. else
  654. ssh $(DB_SSH_EXTRA) $(DB_HOST) "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
  655. endif
  656. endif
  657. all : allexectests
  658. full :
  659. $(MAKE) clean
  660. $(MAKE) allexectests
  661. $(MAKE) digest
  662. fulldb :
  663. $(MAKE) clean
  664. $(MAKE) allexectests
  665. $(MAKE) digest
  666. $(MAKE) uploadrun
  667. tarfile : $(TEST_OUTPUTDIR)/$(DB_TARGZ)
  668. onlyknown :
  669. $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -k-"
  670. onlygraph :
  671. $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -g-"
  672. onlyinteractive :
  673. $(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
  674. info :
  675. @$(ECHO) "This Makefile allows to test the compiler"
  676. @$(ECHO)
  677. @$(ECHO) "Basic Targets:"
  678. @$(ECHO) " all - continue all tests"
  679. @$(ECHO) " full - clean and run all tests"
  680. @$(ECHO) " fulldb - full and upload test results"
  681. @$(ECHO) " digest - compute and print test statistics"
  682. @$(ECHO)
  683. @$(ECHO) "Advanced Targets:"
  684. @$(ECHO) " onlyknown - run only known bugs"
  685. @$(ECHO) " onlygraph - run only graph tests"
  686. @$(ECHO) " onlyinteractive - run only interactive tests"
  687. @$(ECHO)
  688. @$(ECHO) "Host environment:"
  689. @$(ECHO) " $(FULL_TARGET)"
  690. @$(ECHO) " compiler: $(FPC) ver: $(FPC_VERSION)"
  691. @$(ECHO)
  692. @$(ECHO) "Test environment:"
  693. @$(ECHO) " $(TEST_FULL_TARGET)"
  694. @$(ECHO) " compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
  695. @$(ECHO)
  696. @$(ECHO) "Output settings:"
  697. @$(ECHO) " DateTime : $(TEST_DATETIME)"
  698. @$(ECHO) " Outputdir: $(TEST_OUTPUTDIR)"
  699. @$(ECHO) " Uploaddir: $(DB_UPLOADDIR)"
  700. @$(ECHO) " tar.gz : $(DB_TARGZ)"