Makefile.fpc 24 KB

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