123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837 |
- #
- # Makefile.fpc for Free Pascal Tests directory
- #
- [install]
- fpcpackage=y
- [default]
- fpcdir=..
- rule=allexectests
- [target]
- programs=gparmake createlst
- [rules]
- unexport FPC_VERSION
- ################################
- # Test environment setup
- #
- TEST_HOSTNAME:=$(firstword $(subst ., ,$(shell hostname)))
- override TEST_FPC:=$(subst \,/,$(TEST_FPC))
- ifndef TEST_FPC
- #Use development version of the compiler
- TEST_FPC=$(wildcard $(dir $(CURDIR))compiler/$(notdir $(FPC)))
- ifeq ($(TEST_FPC), )
- $(error "*** ERROR: TEST_FPC is missing ***")
- endif
- endif
- #Defaults *not* to OPT
- ifndef TEST_OPT
- TEST_OPT=
- endif
- # Use TEST_USE_LONGLOG by default, as it transfers less data to server
- ifndef TEST_DISABLE_LONGLOG
- TEST_USE_LONGLOG=1
- endif
- # disable directory cache; completely loading all directories significantly
- # slows down running the testsuite because the programs use very few units
- # and most testsuite directories contain thousands of files
- override TEST_OPT+=-Fd
- # Retrieve Test compiler info
- ifndef TEST_FPC_VERSION
- TEST_FPC_COMPILERINFO:=$(shell $(TEST_FPC) -iVSPTPSOTODW)
- TEST_FPC_VERSION:=$(word 1,$(TEST_FPC_COMPILERINFO))
- endif
- export TEST_FPC TEST_FPC_VERSION TEST_FPC_COMPILERINFO
- ifneq ($(words $(TEST_FPC_COMPILERINFO)),7)
- TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iSP)
- TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iTP)
- TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iSO)
- TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iTO)
- TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iD)
- TEST_FPC_COMPILERINFO+=$(shell $(TEST_FPC) -iW)
- endif
- ifndef TEST_CPU_SOURCE
- TEST_CPU_SOURCE:=$(word 2,$(TEST_FPC_COMPILERINFO))
- endif
- ifndef TEST_CPU_TARGET
- TEST_CPU_TARGET:=$(word 3,$(TEST_FPC_COMPILERINFO))
- endif
- ifndef TEST_OS_SOURCE
- TEST_OS_SOURCE:=$(word 4,$(TEST_FPC_COMPILERINFO))
- endif
- ifndef TEST_OS_TARGET
- TEST_OS_TARGET:=$(word 5,$(TEST_FPC_COMPILERINFO))
- endif
- ifndef TEST_FPC_DATE
- TEST_FPC_DATE:=$(word 6,$(TEST_FPC_COMPILERINFO))
- endif
- ifndef TEST_FPC_FULLVERSION
- TEST_FPC_FULLVERSION:=$(word 7,$(TEST_FPC_COMPILERINFO))
- endif
- TEST_FULL_TARGET=$(TEST_CPU_TARGET)-$(TEST_OS_TARGET)
- ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
- TEST_TARGETSUFFIX=$(TEST_OS_TARGET)
- else
- ifneq ($(findstring $(TEST_OS_TARGET),$(LIMIT83fs)),)
- TEST_TARGETSUFFIX=$(TEST_OS_TARGET)
- else
- TEST_TARGETSUFFIX=$(TEST_FULL_TARGET)
- endif
- endif
- ifndef TEST_CCOMPILER
- ifeq ($(CPU_TARGET),$(TEST_CPU_TARGET))
- ifeq ($(OS_TARGET),$(TEST_OS_TARGET))
- TEST_CCOMPILER:=$(strip $(wildcard $(addsuffix /gcc$(SRCEXEEXT),$(SEARCHPATH))))
- ifneq ($(TEST_CCOMPILER),)
- TEST_CCOMPILER:=$(firstword $(TEST_CCOMPILER))
- endif
- endif
- endif
- endif
- # always enable smartlinking for msdos
- ifeq ($(TEST_OS_TARGET),msdos)
- override TEST_OPT+=-XX
- endif
- # Target dir where the ppu and binaries are created
- TEST_OUTPUTDIR=output/$(TEST_TARGETSUFFIX)
- C_SUBDIR=$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)
- # Date and time the testsuite was run
- ifneq ($(DATE),__missing_command_DATE)
- TEST_DATETIME:=$(shell $(DATE) -u +%Y%m%d%H%M)
- else
- # Use a spaceless string, as it will be used for file names
- TEST_DATETIME="No-date"
- endif
- ifndef TEST_USER
- TEST_USER=$(USER)
- ifeq ($(TEST_USER),)
- TEST_USER=$(USERNAME)
- endif
- endif
- # Testsuite upload
- DB_TARGZ=$(TEST_HOSTNAME)-$(TEST_DATETIME).tar.gz
- [email protected]
- DB_UPLOADDIR=/home/fpc/testsuite/incoming
- ifdef inWinNT
- inWinDOS=1
- endif
- ifeq ($(OS_SOURCE),go32v2)
- inWinDOS=1
- inDOS=1
- SINGLEDOTESTRUNS=1
- endif
- ################################
- # Misc
- #
- ifndef FAILLIST
- export FAILLIST:=$(TEST_OUTPUTDIR)/faillist
- endif
- export TEST_FAILLIST:=$(TEST_OUTPUTDIR)/faillist
- ifndef LONGLOG
- export LONGLOG:=$(TEST_OUTPUTDIR)/longlog
- endif
- export TEST_LONGLOG:=$(TEST_OUTPUTDIR)/longlog
- ifndef LOG
- export LOG:=$(TEST_OUTPUTDIR)/log
- endif
- export TEST_LOG:=$(TEST_OUTPUTDIR)/log
- ifndef TEST_SEPLOG
- ifdef MAKEINC_SEPARATE
- export TEST_SEPLOG:=$(TEST_OUTPUTDIR)/seplog
- endif
- endif
- # locations of all logfiles
- LOGFILES=$(TEST_LOG) $(TEST_LONGLOG) $(TEST_FAILLIST) $(TEST_SEPLOG)
- LOGEXT=.testlog .tbslog .tbflog .webtbslog .webtbflog
- # Subdirs available in the test subdir
- 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
- TESTDIRECTDIRS=
- TESTSUBDIRS=cg cg/variants cg/cdecl cpu8/avr cpu16 cpu16/i8086 library opt wasm $(addprefix units/,$(TESTUNITDIRS))
- TESTPACKAGESDIRS=bzip2 cocoaint fcl-base fcl-db fcl-image fcl-registry fcl-xml hash rtl-objpas univint webtbs win-base zlib
- TESTPACKAGESUBDIRS=$(addprefix packages/,$(TESTPACKAGESDIRS))
- TESTPACKAGESDIRECTDIRS=rtl-objpas rtl-generics hash regexpr fcl-registry fcl-passrc fcl-json fcl-image pastojs fcl-process
- TESTPACKAGESDIRECTSUBDIRS=$(addprefix ../packages/,$(addsuffix /tests,$(TESTPACKAGESDIRECTDIRS)))
- ifdef QUICKTEST
- export QUICKTEST
- else
- override TESTSUBDIRS+=$(TESTPACKAGESUBDIRS) alglib
- override TESTDIRECTDIRS+=$(TESTPACKAGESDIRECTSUBDIRS)
- endif
- # number of tests to run per (potentially parallel) chunk/dotest invocation
- ifndef CHUNKSIZE
- export CHUNKSIZE:=100
- endif
- # All full dirnames in the test/ dir including the subdir self
- TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS)) $(TESTDIRECTDIRS)
- .PHONY: utils tstunits copyfiles testprep
- ################################
- # Utilities
- #
- $(TEST_OUTPUTDIR):
- $(MKDIRTREE) $(TEST_OUTPUTDIR)
- utils:
- $(MAKE) -C utils utils
- utilsdb:
- $(MAKE) -C utils utilsdb
- ifndef DIGEST
- DIGEST=utils/digest
- endif
- ifndef DOTEST
- DOTEST=utils/dotest
- endif
- ifndef CONCAT
- CONCAT=utils/concat
- endif
- ifndef GPARMAKE
- GPARMAKE=./gparmake$(SRCEXEEXT)
- endif
- ifndef PREPUP
- PREPUP=utils/prepup
- endif
- ifndef CREATELST
- CREATELST=./createlst$(SRCEXEEXT)
- endif
- ################################
- # Units
- #
- tstunits:
- ifdef inOS2
- $(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)
- else
- $(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)
- endif
- ################################
- # Copy test environment dependent files ctest.o, cext3.o, cext4.o to test/cg etc
- #
- .PHONY: create_c_objects delete_c_objects copyfiles test_c_objects
- C_SOURCE_DIR=test/cg/obj
- C_SOURCES=ctest.c tcext3.c tcext4.c tcext5.c tcext6.c tcext7.c
- CPP_SOURCES=cpptcl1.cpp cpptcl2.cpp
- TASM_SOURCES=ttasm1.asm
- ifneq ($(TEST_ABI),)
- C_OBJECTS_DIR=$(C_SOURCE_DIR)/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)-$(TEST_ABI)
- else
- C_OBJECTS_DIR=$(C_SOURCE_DIR)/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)
- endif
- C_OBJECTS=$(addprefix $(C_OBJECTS_DIR)/, $(subst .c,.o, $(C_SOURCES)))
- CPP_OBJECTS=$(addprefix $(C_OBJECTS_DIR)/, $(subst .cpp,.o, $(CPP_SOURCES)))
- TASM_OBJECTS=$(addprefix $(C_OBJECTS_DIR)/, $(subst .asm,.obj, $(TASM_SOURCES)))
- create_c_objects:
- ifneq ($(TEST_CCOMPILER),)
- $(MKDIRTREE) $(C_OBJECTS_DIR)
- -$(COPY) $(addprefix $(C_SOURCE_DIR)/, $(C_SOURCES)) $(C_OBJECTS_DIR)
- $(MAKE) $(C_OBJECTS)
- -$(COPY) $(addprefix $(C_SOURCE_DIR)/, $(CPP_SOURCES)) $(C_OBJECTS_DIR)
- $(MAKE) $(CPP_OBJECTS)
- -$(DEL) $(addprefix $(C_OBJECTS_DIR)/, $(C_SOURCES) $(CPP_SOURCES))
- else
- $(ECHO) create_c_objects rule needs a valid C compiler in TEST_CCOMPILER variable
- $(ECHO) TEST_CFLAGS variable is passed as options is used to compile the objects
- endif
- delete_c_objects:
- ifneq ($(TEST_CCOMPILER),)
- -$(DEL) $(C_OBJECTS) $(CPP_OBJECTS)
- else
- $(ECHO) delete_c_objects rule needs a valid C compiler in TEST_CCOMPILER variable
- $(ECHO) to be able to recompile the objects using create_objects rule.
- endif
- $(C_OBJECTS) : %.o: %.c
- $(TEST_CCOMPILER) -c $(TEST_CFLAGS) $< -o $@
- $(CPP_OBJECTS) : %.o: %.cpp
- $(TEST_CCOMPILER) -c $(TEST_CFLAGS) $< -o $@
- copyfiles:
- -$(MKDIRTREE) $(TEST_OUTPUTDIR)/test/cg
- -$(COPY) $(C_OBJECTS) $(TEST_OUTPUTDIR)/test/cg
- -$(COPY) $(CPP_OBJECTS) $(TEST_OUTPUTDIR)/test/cg
- ifeq ($(FULL_TARGET),i8086-msdos)
- -$(COPY) $(TASM_OBJECTS) $(TEST_OUTPUTDIR)/test/cg
- endif
- -$(MKDIRTREE) $(TEST_OUTPUTDIR)/test/units/system
- ################################
- # Preparation for tests
- #
- testprep: testprep-stamp.$(TEST_FULL_TARGET)
- testprep-stamp.$(TEST_FULL_TARGET): utils tstunits copyfiles
- $(ECHOREDIR) $(TEST_DATETIME) > testprep-stamp.$(TEST_FULL_TARGET)
- ################################
- # Dotest options
- #
- ifneq ($(TEST_FPC),ppc386$(EXEEXT))
- ifeq ($(findstring -c$(TEST_FPC),$(DOTESTOPT)),)
- override DOTESTOPT+=-c$(TEST_FPC)
- endif
- endif
- ifneq ($(FULL_TARGET),$(TEST_FULL_TARGET))
- override DOTESTOPT+=-T$(TEST_FULL_TARGET)
- endif
- ifneq ($(TEST_BINUTILSPREFIX),)
- override DOTESTOPT+=-Y-XP$(TEST_BINUTILSPREFIX) -Y-Xd
- endif
- # Don't use comspec for dos:
- # command.com returns 0 if it manages to execute a program
- # regardless of the program's exit code
- ifdef inDOS
- override DOTESTOPT+=-X
- endif
- ifdef TEST_RSH
- override DOTESTOPT+=-R$(TEST_RSH)
- endif
- ifdef TEST_SSH
- override DOTESTOPT+=-R$(TEST_SSH) -S
- endif
- ifdef TEST_REMOTEPATH
- override DOTESTOPT+=-P$(TEST_REMOTEPATH)
- endif
- ifdef TEST_DELBEFORE
- override DOTESTOPT+=-B
- endif
- ifdef TEST_DELTEMP
- override DOTESTOPT+=-Z
- endif
- ifdef TEST_TIMEOUT
- override DOTESTOPT+=-O
- endif
- ifdef TEST_VERBOSE
- override DOTESTOPT+=-V
- endif
- ifdef TEST_PARALLEL
- override DOTESTOPT+=-L
- else
- ifneq ($(findstring -j,-$(MAKEFLAGS)),)
- override DOTESTOPT+=-L
- endif
- endif
- # Also display benchmarks
- ifdef TEST_BENCH
- override DOTESTOPT+=-D
- endif
- ifdef V
- Q=
- QECHO=
- else
- Q=@
- QECHO=@echo $(1)
- endif
- ifdef TEST_REMOTEOPT
- override DOTESTOPT+=-U$(TEST_REMOTEOPT)
- endif
- ifdef TEST_PUTTY
- override DOTESTOPT+=-R$(TEST_PUTTY) -W
- endif
- ifdef TEST_ADB
- override DOTESTOPT+=-ADB -R$(TEST_ADB)
- endif
- ifdef TEST_OPT
- # handles several options as well
- override DOTESTOPT+=$(addprefix -Y, $(TEST_OPT))
- endif
- ifdef TEST_REMOTEPW
- # handles several options as well
- override DOTESTOPT+=-U-pw -U$(TEST_REMOTEPW)
- endif
- ifdef GRAPH
- override DOTESTOPT+=-g
- endif
- ifdef INTERACTIVE
- override DOTESTOPT+=-i
- endif
- ifdef DOALL
- override DOTESTOPT+=-a
- endif
- ifdef EMULATOR
- override DOTESTOPT+=-M$(EMULATOR)
- endif
- ifdef EMULATOR_OPTS
- override DOTESTOPT+=-N$(EMULATOR_OPTS)
- endif
- ifdef USEENV
- override DOTESTENV:=$(DOTESTOPT)
- override DOTESTOPT=!DOTESTENV
- export DOTESTENV
- endif
- ################################
- # Run tests
- #
- DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
- vpath %.log $(TEST_OUTPUTDIR)
- vpath %.elg $(TEST_OUTPUTDIR)
- vpath %.o $(C_SUBDIR)
- ifdef SINGLEDOTESTRUNS
- TBSREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard tbs/t*.pp)))
- TBFREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard tbf/t*.pp)))
- WEBTBSREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard webtbs/t*.pp)))
- WEBTBFREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard webtbf/t*.pp)))
- TESTREQ=$(patsubst %.pp,%.elg,$(sort $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))))
- else
- TBSREQ=$(TEST_OUTPUTDIR)/tbsdir-stamp.$(TEST_FULL_TARGET)
- TBFREQ=$(TEST_OUTPUTDIR)/tbfdir-stamp.$(TEST_FULL_TARGET)
- WEBTBSREQ=$(TEST_OUTPUTDIR)/webtbsdir-stamp.$(TEST_FULL_TARGET)
- WEBTBFREQ=$(TEST_OUTPUTDIR)/webtbfdir-stamp.$(TEST_FULL_TARGET)
- TESTREQ=$(TEST_OUTPUTDIR)/testdir-stamp.$(TEST_FULL_TARGET)
- endif
- %.log : %.pp testprep-stamp.$(TEST_FULL_TARGET)
- $(call QECHO," COMPILE $<")
- $(Q)$(DOTEST) $(DOTESTOPT) $<
- %.elg : %.pp testprep-stamp.$(TEST_FULL_TARGET)
- $(call QECHO," EXECUTE $<")
- $(Q)$(DOTEST) $(DOTESTOPT) -e $<
- ifdef TEST_CCOMPILER
- %.o : %.c
- $(TEST_CCOMPILER) -c $< -o $(@D)/$(C_SUBDIR)/$(@F)
- %.o : %.cc
- $(TEST_CCOMPILER) -c $< -o $(@D)/$(C_SUBDIR)/$(@F)
- endif
- ################################
- # Compile tests
- #
- .PHONY: alltbs alltbf allwebtbs allwebtbf alltest alltests
- alltbs : testprep $(patsubst %.pp,%.log,$(sort $(wildcard tbs/t*.pp)))
- alltbf : testprep $(patsubst %.pp,%.log,$(sort $(wildcard tbf/t*.pp)))
- allwebtbs : testprep $(patsubst %.pp,%.log,$(sort $(wildcard webtbs/t*.pp)))
- allwebtbf : testprep $(patsubst %.pp,%.log,$(sort $(wildcard webtbf/t*.pp)))
- alltest : testprep $(patsubst %.pp,%.log,$(sort $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))))
- ifndef SINGLEDOTESTRUNS
- $(Q)$(DOTEST) $(DOTESTOPT) -e $(wildcard $(addsuffix /t*.pp,$(TESTDIRS)))
- endif
- alltests: alltest alltbs alltbf allwebtbs allwebtbf
- test_c_objects: testprep
- $(MAKE) $(patsubst %.pp,%.log, $(wildcard test/cg/cdecl/tcalext*.pp))
- $(MAKE) $(patsubst %.pp,%.elg, $(wildcard test/cg/cdecl/tcalext*.pp))
- $(MAKE) $(patsubst %.pp,%.log, $(wildcard test/cg/cdecl/tcppcl*.pp))
- $(MAKE) $(patsubst %.pp,%.elg, $(wildcard test/cg/cdecl/tcppcl*.pp))
- ################################
- # Compile and Run tests
- #
- ifdef SINGLEDOTESTRUNS
- .PHONY: allexectbs allexectbf allexecwebtbs allexecwebtbf allexectest allexectests
- allexectbs: $(addsuffix .tbslog, $(LOGFILES))
- allexectbf: $(addsuffix .tbflog, $(LOGFILES))
- allexecwebtbs: $(addsuffix .webtbslog, $(LOGFILES))
- allexecwebtbf: $(addsuffix .webtbflog, $(LOGFILES))
- allexectest: $(addsuffix .testlog, $(LOGFILES))
- $(TEST_OUTPUTDIR)/%.mergedlog : $(TEST_OUTPUTDIR)/%.testlog $(TEST_OUTPUTDIR)/%.tbslog $(TEST_OUTPUTDIR)/%.tbflog $(TEST_OUTPUTDIR)/%.webtbslog $(TEST_OUTPUTDIR)/%.webtbflog
- $(Q)$(CONCAT) $^ $@
- $(Q)$(COPY) $@ $(basename $@)
- $(TEST_OUTPUTDIR)/%.tbslog : $(TBSREQ)
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.tbslog
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.tbslog
- $(TEST_OUTPUTDIR)/%.tbflog : $(TBFREQ)
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.tbflog
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.tbflog
- $(TEST_OUTPUTDIR)/%.webtbslog : $(WEBTBSREQ)
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.webtbslog
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.webtbslog
- $(TEST_OUTPUTDIR)/%.webtbflog : $(WEBTBFREQ)
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.webtbflog
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.webtbflog
- $(TEST_OUTPUTDIR)/%.testlog : $(TESTREQ)
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/faillist.testlog
- $(Q)$(ECHO) -n >> $(TEST_OUTPUTDIR)/longlog.testlog
- # run all tests, then merge log files
- allexectests: $(TEST_OUTPUTDIR)/log.testlog $(TEST_OUTPUTDIR)/log.tbslog \
- $(TEST_OUTPUTDIR)/log.tbflog $(TEST_OUTPUTDIR)/log.webtbslog \
- $(TEST_OUTPUTDIR)/log.webtbflog \
- $(addprefix $(TEST_OUTPUTDIR)/,$(foreach EXT, $(LOGEXT), $(addsuffix $(EXT), faillist longlog))) \
- $(addsuffix .mergedlog, $(LOGFILES))
- # SINGLEDOTESTRUNS
- else
- .PHONY: allexectests gparmake_allexectests
- MAKEINC=$(TEST_OUTPUTDIR)/MakeChunks-$(TEST_TARGETSUFFIX).inc
- $(GPARMAKE): utils/gparmake.pp $(CREATELST)
- $(Q)$(MAKE) $(COMPILER_UNITTARGETDIR)
- $(FPC) -FE. utils/gparmake.pp $(OPT)
- $(CREATELST): utils/createlst.pp
- $(Q)$(MAKE) $(COMPILER_UNITTARGETDIR)
- $(FPC) -FE. utils/createlst.pp $(OPT)
- ifdef MAKEINC_SEPARATE
- GPARMAKE_OPT=-f
- else
- GPARMAKE_OPT=
- endif
- # Can't have testprep as prerequisite, because that is a phony target and
- # phony targets are always remade. Since the makefile will be reparsed
- # after making the MakeChunks file (because it has to be included) and all
- # up-to-date checks will be re-evaluated, this means that the testprep rule
- # (or testprep timestamp file, which depends on phony rules and hence has
- # the same behaviour) will always be considered newer than the MakeChunks
- # file and hence the MakeChunks will be regenerated in an infinite loop
- # (although some make versions appear to contain a bug that prevents this
- # from happening)
- # As a result, we list TEST_OUTPUTDIR as a dependency (that just creates
- # the directory) and have an explicit rule to build GPARMAKE rather than
- # building it via the utils Makefile
- $(MAKEINC): $(GPARMAKE) $(CREATELST)
- # generate rules for parallel executions of dotest
- # gparmake now also needs an additional parameter for the name of the
- # used subdirectory. Note also that the index must be increasing for each
- # new call with a gap insuring that all the previous files have lower index
- # even if CHUNKSIZE is equal to 1.
- $(Q)$(MAKE) $(TEST_OUTPUTDIR)
- $(Q)$(CREATELST) filelisttest.lst $(TESTDIRS)
- $(Q)$(GPARMAKE) $(GPARMAKE_OPT) $(MAKEINC) test 1 $(CHUNKSIZE) @filelisttest.lst
- $(Q)$(CREATELST) filelisttbs.lst tbs
- $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) tbs 10000 $(CHUNKSIZE) @filelisttbs.lst
- $(Q)$(CREATELST) filelisttbf.lst tbf
- $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) tbf 15000 $(CHUNKSIZE) @filelisttbf.lst
- $(Q)$(CREATELST) filelistwebtbs.lst webtbs
- $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) webtbs 20000 $(CHUNKSIZE) @filelistwebtbs.lst
- $(Q)$(CREATELST) filelistwebtbf.lst webtbf
- $(Q)$(GPARMAKE) -a $(GPARMAKE_OPT) $(MAKEINC) webtbf 30000 $(CHUNKSIZE) @filelistwebtbf.lst
- # only include the targets to compile/run the tests when we want to
- # run them (in particular: not when cleaning)
- ifeq (,$(findstring clean,$(firstword $(MAKECMDGOALS))))
- ifneq (,$(findstring all,$(MAKECMDGOALS)))
- ifneq (,$(wildcard $(MAKEINC)))
- # include the rules we just generated
- include $(TEST_OUTPUTDIR)/MakeChunks-$(TEST_TARGETSUFFIX).inc
- endif
- endif
- endif
- # this is pretty cool: MakeChunks-$(TEST_TARGETSUFFIX).inc will contain
- # additional prerequisites for the allexectests target, and after it is
- # generated it will be included by the above "include" statement, and those
- # additional prerequisites will be added on the fly and also be evaluated.
- # However, to avoid problems on some targets that seem to have problems
- # handling missing include files, we first create MAKEINC file
- # and rerun MAKE with gparmake_allexectests target.
- allexectests: $(MAKEINC)
- $(MAKE) gparmake_allexectests
- # SINGLEDOTESTRUNS
- endif
- ################################
- # Clean
- #
- .PHONY: clean distclean clean_test clean_sources
- # Remove any possible PPU files
- clean_sources:
- -$(DEL) $(wildcard $(patsubst %.pp,%$(PPUEXT),$(wildcard $(addsuffix /*.pp,$(DIRS)))))
- clean_test:
- -$(DELTREE) $(TEST_OUTPUTDIR)
- -$(DEL) core gmon.out testprep-stamp.$(TEST_FULL_TARGET) dotgz$(SRCBATCHEXT)
- clean: clean_sources fpc_clean
- $(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH)
- $(MAKE) -C tstunits clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) SUBARCH=$(TEST_SUBARCH)
- -$(DEL) filelisttest.lst filelisttbs.lst filelisttbf.lst filelistwebtbs.lst filelistwebtbf.lst
- distclean: clean fpc_distclean
- $(DELTREE) output
- $(MAKE) -C utils distclean
- $(MAKE) -C tstunits distclean
- -$(DEL) testprep-stamp.*
- #cleanall: clean
- # $(MAKE) -C utils cleanall
- ################################
- # Main rules
- #
- .PHONY: all full digest onlyknown onlygraph onlyinteractive
- digest : utils
- -$(DIGEST) $(LOG)
- SVNVERSION:=$(firstword $(wildcard $(addsuffix /svnversion$(SRCEXEEXT),$(SEARCHPATH))))
- GIT:=$(firstword $(wildcard $(addsuffix /git$(SRCEXEEXT),$(SEARCHPATH))))
- ifneq ($(wildcard ../.git),)
- ifneq ($(GIT),)
- GIT_GET_HASH=$(GIT) log -1 --format=%h
- SVN_TESTS_REV_STR=$(shell $(GIT_GET_HASH) .)
- SVN_COMPILER_REV_STR=$(shell $(GIT_GET_HASH) ../compiler)
- SVN_RTL_REV_STR=$(shell $(GIT_GET_HASH) ../rtl)
- SVN_PACKAGES_REV_STR=$(shell $(GIT_GET_HASH) ../packages)
- endif
- else
- ifneq ($(SVNVERSION),)
- SVN_TESTS_REV_STR=$(shell $(SVNVERSION) -c .)
- SVN_COMPILER_REV_STR=$(shell $(SVNVERSION) -c ../compiler)
- SVN_RTL_REV_STR=$(shell $(SVNVERSION) -c ../rtl)
- SVN_PACKAGES_REV_STR=$(shell $(SVNVERSION) -c ../packages)
- endif
- endif
- ifeq ($(TEST_COMMENT),)
- TEST_COMMENT=$(TEST_OPT)
- endif
- $(TEST_OUTPUTDIR)/dbdigest.cfg:
- $(ECHOREDIR) OS=$(TEST_OS_TARGET) > $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) CPU=$(TEST_CPU_TARGET) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) Version=$(TEST_FPC_VERSION) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) LogFile=log >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- ifneq ($(TEST_USE_LONGLOG),)
- $(ECHOREDIR) LongLogFile=longlog >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- endif
- $(ECHOREDIR) Submitter=$(TEST_USER) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) Machine=$(TEST_HOSTNAME) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) Comment=$(TEST_COMMENT) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- ifneq ($(TEST_DATETIME),)
- $(ECHOREDIR) Date=$(TEST_DATETIME) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- endif
- ifneq ($(TEST_FPC_DATE),)
- $(ECHOREDIR) CompilerDate=$(TEST_FPC_DATE) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- endif
- ifneq ($(TEST_FPC_FULLVERSION),)
- $(ECHOREDIR) CompilerFullVersion=$(TEST_FPC_FULLVERSION) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- endif
- ifneq ($(SVN_TESTS_REV_STR),)
- $(ECHOREDIR) svntestsrevision=$(SVN_TESTS_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) svncompilerrevision=$(SVN_COMPILER_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) svnrtlrevision=$(SVN_RTL_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- $(ECHOREDIR) svnpackagesrevision=$(SVN_PACKAGES_REV_STR) >> $(TEST_OUTPUTDIR)/dbdigest.cfg
- endif
- # OpenBSD system tar executable doesn't know
- # about --files-from option, but supports -I
- ifeq ($(OS_SOURCE),openbsd)
- ifeq ($(TARPROG),$(subst gtar,,$(TARPROG)))
- BSD_SYSTEM_TAR=1
- endif
- endif
- ifdef BSD_SYSTEM_TAR
- TARFROM=-I tar.lst
- else
- TARFROM=--files-from=tar.lst
- endif
- # Pass option -ll to prepup if we use longlog file
- # instead of add all *.log and *.elg files to DB_TARGZ
- ifneq ($(TEST_USE_LONGLOG),)
- PREPUP_OPT=-ll
- else
- PREPUP_OPT=
- endif
- ifndef inWinDOS
- $(TEST_OUTPUTDIR)/tar.lst:
- ifdef inOS2
- ifeq ($(TEST_USE_LONGLOG),)
- cd $(subst /,\,$(TEST_OUTPUTDIR)) && gnufind . -name "*.log" -o -name "*.elg" > tar.lst
- else
- $(ECHOREDIR) longlog > $(TEST_OUTPUTDIR)/tar.lst
- endif
- $(ECHOREDIR) log>> $(TEST_OUTPUTDIR)/tar.lst
- $(ECHOREDIR) dbdigest.cfg>> $(TEST_OUTPUTDIR)/tar.lst
- else
- ifeq ($(TEST_USE_LONGLOG),)
- cd $(TEST_OUTPUTDIR) && find . -name '*.log' -o -name '*.elg' > tar.lst
- else
- $(ECHOREDIR) "longlog" > $(TEST_OUTPUTDIR)/tar.lst
- endif
- $(ECHOREDIR) "log" >> $(TEST_OUTPUTDIR)/tar.lst
- $(ECHOREDIR) "dbdigest.cfg" >> $(TEST_OUTPUTDIR)/tar.lst
- endif
- $(TEST_OUTPUTDIR)/$(DB_TARGZ): $(TEST_OUTPUTDIR)/tar.lst $(TEST_OUTPUTDIR)/dbdigest.cfg
- ifdef inCygWin
- dos2unix $(TEST_OUTPUTDIR)/tar.lst
- endif
- ifdef inOS2
- dos2unix $(TEST_OUTPUTDIR)/tar.lst
- cd $(subst /,\,$(TEST_OUTPUTDIR)) && $(TARPROG) czf $(DB_TARGZ) $(TARFROM)
- else
- cd $(TEST_OUTPUTDIR) && $(TARPROG) czf $(DB_TARGZ) $(TARFROM)
- endif
- else
- $(TEST_OUTPUTDIR)/$(DB_TARGZ): $(TEST_OUTPUTDIR)/dbdigest.cfg
- ifdef inDOS
- $(ECHOREDIR) @echo off > dotgz$(SRCBATCHEXT)
- $(ECHOREDIR) cd $(subst /,\,$(TEST_OUTPUTDIR)) >> dotgz$(SRCBATCHEXT)
- $(ECHOREDIR) $(subst /,\,../../$(PREPUP)) $(PREPUP_OPT) $(DB_TARGZ) >> dotgz$(SRCBATCHEXT)
- $(ECHOREDIR) if errorlevel 1 $(DEL) $(DB_TARGZ) >> dotgz$(SRCBATCHEXT)
- $(ECHOREDIR) cd $(subst /,\,../../) >> dotgz$(SRCBATCHEXT)
- $(RUNBATCH) dotgz$(SRCBATCHEXT)
- else
- ifdef inOS2
- cd "$(subst /,\,$(TEST_OUTPUTDIR))" && "$(subst /,\,../../$(PREPUP))" $(PREPUP_OPT) $(DB_TARGZ)
- else
- cd "$(TEST_OUTPUTDIR)" && "../../$(PREPUP)" $(PREPUP_OPT) $(DB_TARGZ)
- endif
- endif
- endif
- # Use Putty, unless we set DB_USE_SSH to force ssh usage
- # Useful for cygwin
- ifndef DB_USE_SSH
- ifdef inWinDOS
- UsePutty=1
- endif
- endif
- uploadrun: $(TEST_OUTPUTDIR)/$(DB_TARGZ)
- ifdef UsePutty
- pscp -load "[email protected]" $(TEST_OUTPUTDIR)/$(DB_TARGZ) $(DB_HOST):$(DB_UPLOADDIR)/$(DB_TARGZ).part $(SSH_EXTRA)
- plink -load "[email protected]" "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
- else
- scp $(DB_SSH_EXTRA) $(TEST_OUTPUTDIR)/$(DB_TARGZ) $(DB_HOST):$(DB_UPLOADDIR)/$(DB_TARGZ).part
- ifdef inOS2
- $(ECHOREDIR) . | ssh $(DB_SSH_EXTRA) $(DB_HOST) "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
- else
- ssh $(DB_SSH_EXTRA) $(DB_HOST) "mv $(DB_UPLOADDIR)/$(DB_TARGZ).part $(DB_UPLOADDIR)/$(DB_TARGZ)"
- endif
- endif
- all : allexectests
- full :
- $(MAKE) clean
- $(MAKE) allexectests
- $(MAKE) digest
- fulldb :
- $(MAKE) clean
- $(MAKE) allexectests
- $(MAKE) digest
- $(MAKE) uploadrun
- tarfile : $(TEST_OUTPUTDIR)/$(DB_TARGZ)
- onlyknown :
- $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -k-"
- onlygraph :
- $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -g-"
- onlyinteractive :
- $(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
- info :
- @$(ECHO) "This Makefile allows to test the compiler"
- @$(ECHO)
- @$(ECHO) "Basic Targets:"
- @$(ECHO) " all - continue all tests"
- @$(ECHO) " full - clean and run all tests"
- @$(ECHO) " fulldb - full and upload test results"
- @$(ECHO) " digest - compute and print test statistics"
- @$(ECHO)
- @$(ECHO) "Advanced Targets:"
- @$(ECHO) " onlyknown - run only known bugs"
- @$(ECHO) " onlygraph - run only graph tests"
- @$(ECHO) " onlyinteractive - run only interactive tests"
- @$(ECHO)
- @$(ECHO) "Host environment:"
- @$(ECHO) " $(FULL_TARGET)"
- @$(ECHO) " compiler: $(FPC) ver: $(FPC_VERSION)"
- @$(ECHO)
- @$(ECHO) "Test environment:"
- @$(ECHO) " $(TEST_FULL_TARGET)"
- @$(ECHO) " compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
- @$(ECHO)
- @$(ECHO) "Output settings:"
- @$(ECHO) " DateTime : $(TEST_DATETIME)"
- @$(ECHO) " Outputdir: $(TEST_OUTPUTDIR)"
- @$(ECHO) " Uploaddir: $(DB_UPLOADDIR)"
- @$(ECHO) " tar.gz : $(DB_TARGZ)"
|