Browse Source

* use separate output dirs
* same tree can be used for multiple targets

peter 21 years ago
parent
commit
5534e9ccae
6 changed files with 298 additions and 303 deletions
  1. 43 63
      tests/Makefile
  2. 34 55
      tests/Makefile.fpc
  3. 25 54
      tests/units/Makefile
  4. 16 57
      tests/units/Makefile.fpc
  5. 18 18
      tests/utils/Makefile
  6. 162 56
      tests/utils/dotest.pp

+ 43 - 63
tests/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/10/30]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/11/08]
 #
 default: allexectests
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
@@ -717,7 +717,7 @@ ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
 ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
-ECHO= __missing_command__
+ECHO= __missing_command_ECHO
 else
 ECHO:=$(firstword $(ECHO))
 endif
@@ -731,7 +731,7 @@ DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
 DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
-DATE= __missing_command__
+DATE= __missing_command_DATE
 else
 DATE:=$(firstword $(DATE))
 endif
@@ -745,7 +745,7 @@ GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
 GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
-GINSTALL= __missing_command__
+GINSTALL= __missing_command_GINSTALL
 else
 GINSTALL:=$(firstword $(GINSTALL))
 endif
@@ -757,7 +757,7 @@ export GINSTALL
 ifndef CPPROG
 CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(CPPROG),)
-CPPROG= __missing_command__
+CPPROG= __missing_command_CPPROG
 else
 CPPROG:=$(firstword $(CPPROG))
 endif
@@ -766,7 +766,7 @@ export CPPROG
 ifndef RMPROG
 RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(RMPROG),)
-RMPROG= __missing_command__
+RMPROG= __missing_command_RMPROG
 else
 RMPROG:=$(firstword $(RMPROG))
 endif
@@ -775,7 +775,7 @@ export RMPROG
 ifndef MVPROG
 MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MVPROG),)
-MVPROG= __missing_command__
+MVPROG= __missing_command_MVPROG
 else
 MVPROG:=$(firstword $(MVPROG))
 endif
@@ -786,7 +786,7 @@ MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MKDIRPROG),)
 MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MKDIRPROG),)
-MKDIRPROG= __missing_command__
+MKDIRPROG= __missing_command_MKDIRPROG
 else
 MKDIRPROG:=$(firstword $(MKDIRPROG))
 endif
@@ -841,7 +841,7 @@ export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
 ifndef PPUMOVE
 PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(PPUMOVE),)
-PPUMOVE= __missing_command__
+PPUMOVE= __missing_command_PPUMOVE
 else
 PPUMOVE:=$(firstword $(PPUMOVE))
 endif
@@ -850,7 +850,7 @@ export PPUMOVE
 ifndef FPCMAKE
 FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(FPCMAKE),)
-FPCMAKE= __missing_command__
+FPCMAKE= __missing_command_FPCMAKE
 else
 FPCMAKE:=$(firstword $(FPCMAKE))
 endif
@@ -859,7 +859,7 @@ export FPCMAKE
 ifndef ZIPPROG
 ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ZIPPROG),)
-ZIPPROG= __missing_command__
+ZIPPROG= __missing_command_ZIPPROG
 else
 ZIPPROG:=$(firstword $(ZIPPROG))
 endif
@@ -868,7 +868,7 @@ export ZIPPROG
 ifndef TARPROG
 TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(TARPROG),)
-TARPROG= __missing_command__
+TARPROG= __missing_command_TARPROG
 else
 TARPROG:=$(firstword $(TARPROG))
 endif
@@ -1503,6 +1503,7 @@ endif
 ifndef TEST_OS_TARGET
 TEST_OS_TARGET:=$(word 5,$(TEST_FPC_COMPILERINFO))
 endif
+TEST_FULL_TARGET=$(TEST_CPU_TARGET)-$(TEST_OS_TARGET)
 ifndef TEST_CCOMPILER
 ifeq ($(CPU_TARGET),$(TEST_CPU_TARGET))
 ifeq ($(OS_TARGET),$(TEST_OS_TARGET))
@@ -1513,14 +1514,15 @@ endif
 endif
 endif
 endif
+TEST_OUTPUTDIR=output/$(FULL_TARGET)
 ifndef FAILLIST
-export FAILLIST:=faillist
+export FAILLIST:=$(TEST_OUTPUTDIR)/faillist
 endif
 ifndef LONGLOG
-export LONGLOG:=longlog
+export LONGLOG:=$(TEST_OUTPUTDIR)/longlog
 endif
 ifndef LOG
-export LOG:=log
+export LOG:=$(TEST_OUTPUTDIR)/log
 endif
 TESTSUBDIRS=cg cg/cdecl units/system units/dos units/crt units/objects units/strings units/sysutils units/math
 TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS))
@@ -1547,12 +1549,14 @@ endif
 units:
 	$(MAKE) -C units FPC=$(TEST_FPC) CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) \
 			 OPT="$(TEST_OPT)" CCOMPILER=$(TEST_CCOMPILER) BINUTILSPREFIX=$(TEST_BINUTILSPREFIX)
-copyfiles:
+copyfiles: $(TEST_OUTPUTDIR)
 	$(COPY) test/cg/obj/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)/ctest.o test/cg
-	$(COPY) test/units/system/test*.txt .
-testprep: testprep-stamp.$(TEST_OS_TARGET)
-testprep-stamp.$(TEST_OS_TARGET): utils units copyfiles
-	$(ECHO) $(DATE) > testprep-stamp.$(TEST_OS_TARGET)
+	$(COPY) test/units/system/test*.txt $(TEST_OUTPUTDIR)/tests/units/system
+testprep: testprep-stamp.$(TEST_FULL_TARGET)
+testprep-stamp.$(TEST_FULL_TARGET): $(TEST_OUTPUTDIR) utils units copyfiles
+	$(ECHO) $(DATE) > testprep-stamp.$(TEST_FULL_TARGET)
+$(TEST_OUTPUTDIR):
+	$(MKDIRTREE) $@
 ifneq ($(TEST_FPC),ppc386$(EXEEXT))
 ifeq ($(findstring -c$(TEST_FPC),$(DOTESTOPT)),)
 override DOTESTOPT+=-c$(TEST_FPC)
@@ -1561,7 +1565,7 @@ endif
 ifneq ($(OS_TARGET),$(TEST_OS_TARGET))
 override DOTESTOPT+=-Y-T$(TEST_OS_TARGET)
 endif
-ifneq ($(TEST_BINUTILSPREFIX),) 
+ifneq ($(TEST_BINUTILSPREFIX),)
 override DOTESTOPT+=-Y-XP$(TEST_BINUTILSPREFIX) -Y-Xd
 endif
 ifdef TEST_RSH
@@ -1601,6 +1605,8 @@ ifdef DOALL
 override DOTESTOPT+=-a
 endif
 DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
+vpath %.log $(TEST_OUTPUTDIR)
+vpath %.elg $(TEST_OUTPUTDIR)
 %.log : %.pp
 	$(DOTEST) $(DOTESTOPT) $<
 %.elg : %.pp
@@ -1621,39 +1627,24 @@ allexectest : testprep $(patsubst %.pp,%.elg,$(wildcard $(addsuffix /t*.pp,$(TES
 allexectests: allexectest allexectbs allexectbf allexecwebtbs allexecwebtbf
 .PHONY: clean distclean clean_test
 clean_test:
-	-$(DEL) $(addsuffix /*$(PPUEXT),$(DIRS))
-	-$(DEL) $(addsuffix /*$(OEXT),$(DIRS))
-	-$(DEL) $(addsuffix /*.rst,$(DIRS))
-	-$(DEL) $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-	-$(DEL) $(addsuffix /*.log,$(DIRS))
-	-$(DEL) $(addsuffix /*.elg,$(DIRS))
-	-$(DEL) $(addsuffix /*$(ASMEXT),$(DIRS))
-	-$(DEL) $(addsuffix /*_ppas$(BATCHEXT),$(DIRS))
-ifeq ($(EXEEXT),)
-	-$(DEL) $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
-else
-	-$(DEL) $(addsuffix /*$(EXEEXT),$(DIRS))
-endif
-ifdef DEBUGSYMEXT
-	-$(DEL) $(addsuffix /*$(DEBUGSYMEXT),$(DIRS))
-endif
-	-$(DEL) test*.txt *.tmp *$(SHAREDLIBEXT) *$(OEXT) *$(PPUEXT) core
+	-$(DELTREE) output/$(TEST_FULL_TARGET)
 	-$(DEL) $(LOG) $(LONGLOG) $(FAILLIST)
-	-$(DEL) ppas$(SRCBATCHEXT) gmon.out testprep-stamp.*
-	-$(DEL) *_ppas$(BATCHEXT)
+	-$(DEL) core gmon.out testprep-stamp.$(TEST_FULL_TARGET)
 clean:
 	$(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
 	$(MAKE) -C units clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
 distclean: clean fpc_distclean
+	$(DELTREE) output
 	$(MAKE) -C utils distclean
-.PHONY: all full rundigest dailytest onlyknown onlygraph onlyinteractive
-rundigest : utils
-	-$(DIGEST)
+	-$(DEL) testprep-stamp.*
+.PHONY: all full digest dailytest onlyknown onlygraph onlyinteractive
+digest : utils
+	-$(DIGEST) $(LOG)
 ifeq ($(USESQL),YES)
-	-$(DBDIGEST) -v $(TEST_FPC_VERSION) -o $(TEST_OS_TARGET) -c $(TEST_CPU_TARGET) $(DBDIGESTOPT)
+	-$(DBDIGEST) -v $(TEST_FPC_VERSION) -o $(TEST_OS_TARGET) -c $(TEST_CPU_TARGET) -l $(LOG) $(DBDIGESTOPT)
 endif
 all : allexectests
-full : clean allexectests rundigest
+full : clean allexectests digest
 onlyknown :
 	$(MAKE) full "DOTESTOPT= $(DOTESTOPT) -k-"
 onlygraph :
@@ -1661,9 +1652,9 @@ onlygraph :
 onlyinteractive :
 	$(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
 info :
-	@$(ECHO) This Makefile allows to test the compiler
+	@$(ECHO) "This Makefile allows to test the compiler"
 	@$(ECHO)
-	@$(ECHO) Targets:
+	@$(ECHO) "Targets:"
 	@$(ECHO) "  all   - continue all tests"
 	@$(ECHO) "  full  - clean and run all tests"
 	@$(ECHO) "  dailytest - run full and save results"
@@ -1671,14 +1662,14 @@ info :
 	@$(ECHO) "  onlyknown - run only known bugs"
 	@$(ECHO) "  onlygraph - run only graph tests"
 	@$(ECHO) "  onlyinteractive - run only interactive tests"
-	@$(ECHO) "  rundigest - compute and print test statistics"
+	@$(ECHO) "  digest    - compute and print test statistics"
 	@$(ECHO)
-	@$(ECHO) Driver environment:
-	@$(ECHO) "  $(OS_TARGET)-$(CPU_TARGET)"
+	@$(ECHO) "Host environment:"
+	@$(ECHO) "  $(FULL_TARGET)"
 	@$(ECHO) "  compiler: $(FPC) ver: $(FPC_VERSION)"
 	@$(ECHO)
-	@$(ECHO) Test environment:
-	@$(ECHO) "  $(TEST_OS_TARGET)-$(TEST_CPU_TARGET)"
+	@$(ECHO) "Test environment:"
+	@$(ECHO) "  $(TEST_FULL_TARGET)"
 	@$(ECHO) "  compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
 override DATESUFFIX:=$(shell $(DATE) +%Y.%m.%d)
 ifneq ($(wildcard log.$(DATESUFFIX)),)
@@ -1687,14 +1678,3 @@ endif
 ifneq ($(wildcard lastdate.txt),)
 LASTDATESUFFIX:=$(shell cat lastdate.txt)
 endif
-dailytest : full
-	$(COPY) faillist faillist.$(DATESUFFIX)
-	$(COPY) log log.$(DATESUFFIX)
-	$(COPY) longlog longlog.$(DATESUFFIX)
-	-$(DIGEST) > digest.$(DATESUFFIX)
-ifdef LASTDATESUFFIX
-	-diff -u log.$(LASTDATESUFFIX) log.$(DATESUFFIX) > difflog.$(DATESUFFIX)
-	-diff -u digest.$(LASTDATESUFFIX) digest.$(DATESUFFIX) > diffdigest.$(DATESUFFIX)
-	-diff -u faillist.$(LASTDATESUFFIX) faillist.$(DATESUFFIX) > difflist.$(DATESUFFIX)
-endif
-	@$(ECHO) $(DATESUFFIX) > lastdate.txt

+ 34 - 55
tests/Makefile.fpc

@@ -53,6 +53,7 @@ endif
 ifndef TEST_OS_TARGET
 TEST_OS_TARGET:=$(word 5,$(TEST_FPC_COMPILERINFO))
 endif
+TEST_FULL_TARGET=$(TEST_CPU_TARGET)-$(TEST_OS_TARGET)
 
 ifndef TEST_CCOMPILER
 ifeq ($(CPU_TARGET),$(TEST_CPU_TARGET))
@@ -65,21 +66,24 @@ endif
 endif
 endif
 
+# Target dir where the ppu and binaries are created
+TEST_OUTPUTDIR=output/$(FULL_TARGET)
+
 
 ################################
 # Misc
 #
 
 ifndef FAILLIST
-export FAILLIST:=faillist
+export FAILLIST:=$(TEST_OUTPUTDIR)/faillist
 endif
 
 ifndef LONGLOG
-export LONGLOG:=longlog
+export LONGLOG:=$(TEST_OUTPUTDIR)/longlog
 endif
 
 ifndef LOG
-export LOG:=log
+export LOG:=$(TEST_OUTPUTDIR)/log
 endif
 
 
@@ -136,18 +140,20 @@ units:
 # Copy test environment dependent files ctest.o to test/cg etc
 #
 
-copyfiles:
+copyfiles: $(TEST_OUTPUTDIR)
         $(COPY) test/cg/obj/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)/ctest.o test/cg
-        $(COPY) test/units/system/test*.txt .
+        $(COPY) test/units/system/test*.txt $(TEST_OUTPUTDIR)/tests/units/system
 
 ################################
 # Preparation for tests
 #
 
-testprep: testprep-stamp.$(TEST_OS_TARGET)
-testprep-stamp.$(TEST_OS_TARGET): utils units copyfiles
-        $(ECHO) $(DATE) > testprep-stamp.$(TEST_OS_TARGET)
+testprep: testprep-stamp.$(TEST_FULL_TARGET)
+testprep-stamp.$(TEST_FULL_TARGET): $(TEST_OUTPUTDIR) utils units copyfiles
+        $(ECHO) $(DATE) > testprep-stamp.$(TEST_FULL_TARGET)
 
+$(TEST_OUTPUTDIR):
+        $(MKDIRTREE) $@
 
 ################################
 # Dotest options
@@ -162,7 +168,7 @@ endif
 ifneq ($(OS_TARGET),$(TEST_OS_TARGET))
 override DOTESTOPT+=-Y-T$(TEST_OS_TARGET)
 endif
-ifneq ($(TEST_BINUTILSPREFIX),) 
+ifneq ($(TEST_BINUTILSPREFIX),)
 override DOTESTOPT+=-Y-XP$(TEST_BINUTILSPREFIX) -Y-Xd
 endif
 ifdef TEST_RSH
@@ -217,6 +223,9 @@ endif
 
 DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
 
+vpath %.log $(TEST_OUTPUTDIR)
+vpath %.elg $(TEST_OUTPUTDIR)
+
 %.log : %.pp
         $(DOTEST) $(DOTESTOPT) $<
 
@@ -263,35 +272,18 @@ allexectests: allexectest allexectbs allexectbf allexecwebtbs allexecwebtbf
 .PHONY: clean distclean clean_test
 
 clean_test:
-        -$(DEL) $(addsuffix /*$(PPUEXT),$(DIRS))
-        -$(DEL) $(addsuffix /*$(OEXT),$(DIRS))
-        -$(DEL) $(addsuffix /*.rst,$(DIRS))
-        -$(DEL) $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-        -$(DEL) $(addsuffix /*.log,$(DIRS))
-        -$(DEL) $(addsuffix /*.elg,$(DIRS))
-        -$(DEL) $(addsuffix /*$(ASMEXT),$(DIRS))
-        -$(DEL) $(addsuffix /*_ppas$(BATCHEXT),$(DIRS))
-ifeq ($(EXEEXT),)
-        -$(DEL) $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
-else
-        -$(DEL) $(addsuffix /*$(EXEEXT),$(DIRS))
-endif
-ifdef DEBUGSYMEXT
-        -$(DEL) $(addsuffix /*$(DEBUGSYMEXT),$(DIRS))
-endif
-        -$(DEL) test*.txt *.tmp *$(SHAREDLIBEXT) *$(OEXT) *$(PPUEXT) core
+        -$(DELTREE) output/$(TEST_FULL_TARGET)
         -$(DEL) $(LOG) $(LONGLOG) $(FAILLIST)
-        -$(DEL) ppas$(SRCBATCHEXT) gmon.out testprep-stamp.*
-#          Needed when link on target:
-        -$(DEL) *_ppas$(BATCHEXT)
-
+        -$(DEL) core gmon.out testprep-stamp.$(TEST_FULL_TARGET)
 
 clean:
         $(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
         $(MAKE) -C units clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
 
 distclean: clean fpc_distclean
+        $(DELTREE) output
         $(MAKE) -C utils distclean
+        -$(DEL) testprep-stamp.*
 
 #cleanall: clean
 #        $(MAKE) -C utils cleanall
@@ -300,17 +292,17 @@ distclean: clean fpc_distclean
 # Main rules
 #
 
-.PHONY: all full rundigest dailytest onlyknown onlygraph onlyinteractive
+.PHONY: all full digest dailytest onlyknown onlygraph onlyinteractive
 
-rundigest : utils
-        -$(DIGEST)
+digest : utils
+        -$(DIGEST) $(LOG)
 ifeq ($(USESQL),YES)
-        -$(DBDIGEST) -v $(TEST_FPC_VERSION) -o $(TEST_OS_TARGET) -c $(TEST_CPU_TARGET) $(DBDIGESTOPT)
+        -$(DBDIGEST) -v $(TEST_FPC_VERSION) -o $(TEST_OS_TARGET) -c $(TEST_CPU_TARGET) -l $(LOG) $(DBDIGESTOPT)
 endif
 
 all : allexectests
 
-full : clean allexectests rundigest
+full : clean allexectests digest
 
 onlyknown :
         $(MAKE) full "DOTESTOPT= $(DOTESTOPT) -k-"
@@ -322,9 +314,9 @@ onlyinteractive :
         $(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
 
 info :
-        @$(ECHO) This Makefile allows to test the compiler
+        @$(ECHO) "This Makefile allows to test the compiler"
         @$(ECHO)
-        @$(ECHO) Targets:
+        @$(ECHO) "Targets:"
         @$(ECHO) "  all   - continue all tests"
         @$(ECHO) "  full  - clean and run all tests"
         @$(ECHO) "  dailytest - run full and save results"
@@ -332,14 +324,14 @@ info :
         @$(ECHO) "  onlyknown - run only known bugs"
         @$(ECHO) "  onlygraph - run only graph tests"
         @$(ECHO) "  onlyinteractive - run only interactive tests"
-        @$(ECHO) "  rundigest - compute and print test statistics"
+        @$(ECHO) "  digest    - compute and print test statistics"
         @$(ECHO)
-        @$(ECHO) Driver environment:
-        @$(ECHO) "  $(OS_TARGET)-$(CPU_TARGET)"
+        @$(ECHO) "Host environment:"
+        @$(ECHO) "  $(FULL_TARGET)"
         @$(ECHO) "  compiler: $(FPC) ver: $(FPC_VERSION)"
         @$(ECHO)
-        @$(ECHO) Test environment:
-        @$(ECHO) "  $(TEST_OS_TARGET)-$(TEST_CPU_TARGET)"
+        @$(ECHO) "Test environment:"
+        @$(ECHO) "  $(TEST_FULL_TARGET)"
         @$(ECHO) "  compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
 
 override DATESUFFIX:=$(shell $(DATE) +%Y.%m.%d)
@@ -351,16 +343,3 @@ endif
 ifneq ($(wildcard lastdate.txt),)
 LASTDATESUFFIX:=$(shell cat lastdate.txt)
 endif
-
-
-dailytest : full
-        $(COPY) faillist faillist.$(DATESUFFIX)
-        $(COPY) log log.$(DATESUFFIX)
-        $(COPY) longlog longlog.$(DATESUFFIX)
-        -$(DIGEST) > digest.$(DATESUFFIX)
-ifdef LASTDATESUFFIX
-        -diff -u log.$(LASTDATESUFFIX) log.$(DATESUFFIX) > difflog.$(DATESUFFIX)
-        -diff -u digest.$(LASTDATESUFFIX) digest.$(DATESUFFIX) > diffdigest.$(DATESUFFIX)
-        -diff -u faillist.$(LASTDATESUFFIX) faillist.$(DATESUFFIX) > difflist.$(DATESUFFIX)
-endif
-        @$(ECHO) $(DATESUFFIX) > lastdate.txt

+ 25 - 54
tests/units/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/10/30]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/11/09]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
@@ -221,6 +221,7 @@ endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 override CLEAN_UNITS+=erroru win32err ptest
 override INSTALL_FPCPACKAGE=y
+override COMPILER_TARGETDIR+=$(FULL_TARGET)
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 endif
@@ -718,7 +719,7 @@ ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
 ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
-ECHO= __missing_command__
+ECHO= __missing_command_ECHO
 else
 ECHO:=$(firstword $(ECHO))
 endif
@@ -732,7 +733,7 @@ DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
 DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
-DATE= __missing_command__
+DATE= __missing_command_DATE
 else
 DATE:=$(firstword $(DATE))
 endif
@@ -746,7 +747,7 @@ GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
 GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
-GINSTALL= __missing_command__
+GINSTALL= __missing_command_GINSTALL
 else
 GINSTALL:=$(firstword $(GINSTALL))
 endif
@@ -758,7 +759,7 @@ export GINSTALL
 ifndef CPPROG
 CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(CPPROG),)
-CPPROG= __missing_command__
+CPPROG= __missing_command_CPPROG
 else
 CPPROG:=$(firstword $(CPPROG))
 endif
@@ -767,7 +768,7 @@ export CPPROG
 ifndef RMPROG
 RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(RMPROG),)
-RMPROG= __missing_command__
+RMPROG= __missing_command_RMPROG
 else
 RMPROG:=$(firstword $(RMPROG))
 endif
@@ -776,7 +777,7 @@ export RMPROG
 ifndef MVPROG
 MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MVPROG),)
-MVPROG= __missing_command__
+MVPROG= __missing_command_MVPROG
 else
 MVPROG:=$(firstword $(MVPROG))
 endif
@@ -787,7 +788,7 @@ MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MKDIRPROG),)
 MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MKDIRPROG),)
-MKDIRPROG= __missing_command__
+MKDIRPROG= __missing_command_MKDIRPROG
 else
 MKDIRPROG:=$(firstword $(MKDIRPROG))
 endif
@@ -842,7 +843,7 @@ export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
 ifndef PPUMOVE
 PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(PPUMOVE),)
-PPUMOVE= __missing_command__
+PPUMOVE= __missing_command_PPUMOVE
 else
 PPUMOVE:=$(firstword $(PPUMOVE))
 endif
@@ -851,7 +852,7 @@ export PPUMOVE
 ifndef FPCMAKE
 FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(FPCMAKE),)
-FPCMAKE= __missing_command__
+FPCMAKE= __missing_command_FPCMAKE
 else
 FPCMAKE:=$(firstword $(FPCMAKE))
 endif
@@ -860,7 +861,7 @@ export FPCMAKE
 ifndef ZIPPROG
 ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ZIPPROG),)
-ZIPPROG= __missing_command__
+ZIPPROG= __missing_command_ZIPPROG
 else
 ZIPPROG:=$(firstword $(ZIPPROG))
 endif
@@ -869,7 +870,7 @@ export ZIPPROG
 ifndef TARPROG
 TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(TARPROG),)
-TARPROG= __missing_command__
+TARPROG= __missing_command_TARPROG
 else
 TARPROG:=$(firstword $(TARPROG))
 endif
@@ -1474,50 +1475,20 @@ makefiles: fpc_makefiles
 ifneq ($(wildcard fpcmake.loc),)
 include fpcmake.loc
 endif
-ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
-FCL=fcl
-endif
-.PHONY: rtl $(FCL) extra all clean cleanrtlfcl clean_ctest
+.PHONY: rtl extra all clean cleanrtl clean_ctest
 DUMMYINSTALLDIR=$(BASEDIR)/tmp
-INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)
-ifndef USEUNITDIR
-rtl-stamp:
+INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)/$(COMPILER_TARGETDIR)
+rtl-stamp.$(FULL_TARGET):
 	$(MAKE) -C ../../rtl all "OPT=$(OPT) -n"
+	$(DELTREE) $(COMPILER_TARGETDIR)
 	$(MAKE) -C ../../rtl install $(INSTALLOPT)
-	$(ECHO) Compiled > rtl-stamp
-ifdef FCL
-fcl-stamp:
-	$(MAKE) -C ../../packages/base all "OPT=$(OPT) -n"
-	$(MAKE) -C ../../fcl all "OPT=$(OPT) -n"
-	$(MAKE) -C ../../fcl install $(INSTALLOPT)
-	$(ECHO) Compiled > fcl-stamp
-endif
-cleanrtlfcl : cleanall
+	$(ECHO) Compiled > rtl-stamp.$(FULL_TARGET)
+cleanrtl:
+	$(DELTREE) $(COMPILER_TARGETDIR)
 	$(DELTREE) $(DUMMYINSTALLDIR)
-	-$(DEL) rtl-stamp  fcl-stamp
-else
-rtl-stamp:
-	-$(COPY) $(USEUNITDIR)/*$(PPUEXT) .
-	-$(COPY) $(USEUNITDIR)/*$(OEXT) .
-	-$(COPY) $(USEUNITDIR)/*$(ASMEXT) .
-	-$(COPY) $(USEUNITDIR)/*_ppas$(BATCHEXT) .
-	$(ECHO) Copied > rtl-stamp
-ifdef FCL
-fcl-stamp: rtl-stamp
-	$(ECHO) Copied > fcl-stamp
-endif
-cleanrtlfcl :
-	-$(DEL) *$(PPUEXT)
-	-$(DEL) *$(OEXT)
-	-$(DEL) *$(ASMEXT)
-	-$(DEL) *_ppas$(BATCHEXT)
-	-$(DEL) rtl-stamp fcl-stamp
-endif
-rtl : rtl-stamp
-ifdef FCL
-fcl : fcl-stamp
-endif
-TESTOPT=-n -FE. -Fu. -T$(OS_TARGET) $(OPT)
+	-$(DEL) rtl-stamp.$(FULL_TARGET)
+rtl : rtl-stamp.$(FULL_TARGET)
+TESTOPT=-n -FE$(COMPILER_TARGETDIR) -T$(OS_TARGET) $(OPT)
 ifneq ($(BINUTILSPREFIX),)
 override TESTOPT+=-XP$(BINUTILSPREFIX) -Xc
 endif
@@ -1538,7 +1509,7 @@ extra : erroru$(PPUEXT) ptest$(PPUEXT) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)
 ifeq ($(OS_TARGET),win32)
 extra : win32err$(PPUEXT)
 endif
-all : rtl $(FCL) extra
-clean : cleanrtlfcl fpc_clean
+all : rtl  extra
+clean : cleanrtl cleanall
 clean_ctest :
 	-$(DEL) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o

+ 16 - 57
tests/units/Makefile.fpc

@@ -10,83 +10,42 @@ fpcpackage=y
 [clean]
 units = erroru win32err ptest
 
+[compiler]
+targetdir=$(FULL_TARGET)
+
 [default]
 fpcdir=../..
 
 [rules]
-
-# Only 1.1 has Classes in the RTL
-ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
-FCL=fcl
-endif
-
-.PHONY: rtl $(FCL) extra all clean cleanrtlfcl clean_ctest
+.PHONY: rtl extra all clean cleanrtl clean_ctest
 
 #############################
-# RTL and FCL
+# RTL
 #
 
 DUMMYINSTALLDIR=$(BASEDIR)/tmp
-INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)
+INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)/$(COMPILER_TARGETDIR)
 
-ifndef USEUNITDIR
-
-rtl-stamp:
+rtl-stamp.$(FULL_TARGET):
         $(MAKE) -C ../../rtl all "OPT=$(OPT) -n"
+        $(DELTREE) $(COMPILER_TARGETDIR)
         $(MAKE) -C ../../rtl install $(INSTALLOPT)
-        $(ECHO) Compiled > rtl-stamp
-
-ifdef FCL
-fcl-stamp:
-        $(MAKE) -C ../../packages/base all "OPT=$(OPT) -n"
-        $(MAKE) -C ../../fcl all "OPT=$(OPT) -n"
-        $(MAKE) -C ../../fcl install $(INSTALLOPT)
-        $(ECHO) Compiled > fcl-stamp
-endif
+        $(ECHO) Compiled > rtl-stamp.$(FULL_TARGET)
 
-cleanrtlfcl : cleanall
-#        $(MAKE) -C ../../rtl clean
-#        $(MAKE) -C ../../fcl clean
+cleanrtl:
+        $(DELTREE) $(COMPILER_TARGETDIR)
         $(DELTREE) $(DUMMYINSTALLDIR)
-        -$(DEL) rtl-stamp  fcl-stamp
+        -$(DEL) rtl-stamp.$(FULL_TARGET)
 
-else
+rtl : rtl-stamp.$(FULL_TARGET)
 
-rtl-stamp:
-#       Just copying everything doesn't work, because then the Makefile will be overwritten
-        -$(COPY) $(USEUNITDIR)/*$(PPUEXT) .
-        -$(COPY) $(USEUNITDIR)/*$(OEXT) .
-        -$(COPY) $(USEUNITDIR)/*$(ASMEXT) .
-        -$(COPY) $(USEUNITDIR)/*_ppas$(BATCHEXT) .
-        $(ECHO) Copied > rtl-stamp
-
-ifdef FCL
-fcl-stamp: rtl-stamp
-        $(ECHO) Copied > fcl-stamp
-endif
-
-cleanrtlfcl :
-        -$(DEL) *$(PPUEXT)
-        -$(DEL) *$(OEXT)
-        -$(DEL) *$(ASMEXT)
-        -$(DEL) *_ppas$(BATCHEXT)
-        -$(DEL) rtl-stamp fcl-stamp
-
-endif
-
-
-rtl : rtl-stamp
-
-ifdef FCL
-fcl : fcl-stamp
-endif
 
 #############################
 # Extra units
 #
 
 
-TESTOPT=-n -FE. -Fu. -T$(OS_TARGET) $(OPT)
+TESTOPT=-n -FE$(COMPILER_TARGETDIR) -T$(OS_TARGET) $(OPT)
 ifneq ($(BINUTILSPREFIX),)
 override TESTOPT+=-XP$(BINUTILSPREFIX) -Xc
 endif
@@ -120,9 +79,9 @@ endif
 # Main rules
 #
 
-all : rtl $(FCL) extra
+all : rtl  extra
 
-clean : cleanrtlfcl fpc_clean
+clean : cleanrtl cleanall
 
 clean_ctest :
         -$(DEL) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o

+ 18 - 18
tests/utils/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/10/30]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/11/08]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
@@ -415,14 +415,14 @@ ifeq ($(CPU_TARGET),i386)
 ifneq ($(findstring x86_64,$(shell uname -a)),)
 ifeq ($(BINUTILSPREFIX),)
 GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
-else
-GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`)
 endif
-else
-GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`)
 endif
-else
-GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`)
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
 endif
 endif
 ifndef OTHERLIBDIR
@@ -747,7 +747,7 @@ ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
 ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
-ECHO= __missing_command__
+ECHO= __missing_command_ECHO
 else
 ECHO:=$(firstword $(ECHO))
 endif
@@ -761,7 +761,7 @@ DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
 DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(DATE),)
-DATE= __missing_command__
+DATE= __missing_command_DATE
 else
 DATE:=$(firstword $(DATE))
 endif
@@ -775,7 +775,7 @@ GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
 GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(GINSTALL),)
-GINSTALL= __missing_command__
+GINSTALL= __missing_command_GINSTALL
 else
 GINSTALL:=$(firstword $(GINSTALL))
 endif
@@ -787,7 +787,7 @@ export GINSTALL
 ifndef CPPROG
 CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(CPPROG),)
-CPPROG= __missing_command__
+CPPROG= __missing_command_CPPROG
 else
 CPPROG:=$(firstword $(CPPROG))
 endif
@@ -796,7 +796,7 @@ export CPPROG
 ifndef RMPROG
 RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(RMPROG),)
-RMPROG= __missing_command__
+RMPROG= __missing_command_RMPROG
 else
 RMPROG:=$(firstword $(RMPROG))
 endif
@@ -805,7 +805,7 @@ export RMPROG
 ifndef MVPROG
 MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MVPROG),)
-MVPROG= __missing_command__
+MVPROG= __missing_command_MVPROG
 else
 MVPROG:=$(firstword $(MVPROG))
 endif
@@ -816,7 +816,7 @@ MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MKDIRPROG),)
 MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(MKDIRPROG),)
-MKDIRPROG= __missing_command__
+MKDIRPROG= __missing_command_MKDIRPROG
 else
 MKDIRPROG:=$(firstword $(MKDIRPROG))
 endif
@@ -871,7 +871,7 @@ export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
 ifndef PPUMOVE
 PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(PPUMOVE),)
-PPUMOVE= __missing_command__
+PPUMOVE= __missing_command_PPUMOVE
 else
 PPUMOVE:=$(firstword $(PPUMOVE))
 endif
@@ -880,7 +880,7 @@ export PPUMOVE
 ifndef FPCMAKE
 FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(FPCMAKE),)
-FPCMAKE= __missing_command__
+FPCMAKE= __missing_command_FPCMAKE
 else
 FPCMAKE:=$(firstword $(FPCMAKE))
 endif
@@ -889,7 +889,7 @@ export FPCMAKE
 ifndef ZIPPROG
 ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ZIPPROG),)
-ZIPPROG= __missing_command__
+ZIPPROG= __missing_command_ZIPPROG
 else
 ZIPPROG:=$(firstword $(ZIPPROG))
 endif
@@ -898,7 +898,7 @@ export ZIPPROG
 ifndef TARPROG
 TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(TARPROG),)
-TARPROG= __missing_command__
+TARPROG= __missing_command_TARPROG
 else
 TARPROG:=$(firstword $(TARPROG))
 endif

+ 162 - 56
tests/utils/dotest.pp

@@ -36,6 +36,13 @@ const
 
 var
   Config : TConfig;
+  CompilerLogFile,
+  ExeLogFile,
+  LongLogfile,
+  FailLogfile,
+  RTLUnitsDir,
+  TestOutputDir,
+  OutputDir : string;
   CompilerBin : string;
   CompilerCPU : string;
   CompilerTarget : string;
@@ -45,14 +52,13 @@ var
   TestName : string;
 
 const
-  LongLogfile : string[32] = 'longlog';
-  FailLogfile : string[32] = 'faillist';
   DoGraph : boolean = false;
   DoInteractive : boolean = false;
   DoExecute : boolean = false;
   DoKnown : boolean = false;
   DoAll : boolean = false;
   DoUsual : boolean = true;
+  TargetDir : string = '';
   ExtraCompilerOpts : string = '';
   DelExecutable : boolean = false;
   RemoteAddr : string = '';
@@ -75,6 +81,19 @@ begin
 end;
 
 
+Function PathExists (Const F : String) : Boolean;
+{
+  Returns True if the file exists, False if not.
+}
+Var
+  info : searchrec;
+begin
+  FindFirst (F,anyfile,Info);
+  PathExists:=(DosError=0) and (Info.Attr and Directory=Directory);
+  FindClose (Info);
+end;
+
+
 function ToStr(l:longint):string;
 var
   s : string;
@@ -192,6 +211,30 @@ begin
 end;
 
 
+procedure mkdirtree(const s:string);
+var
+  hs : string;
+begin
+  if s='' then
+    exit;
+  if s[length(s)] in ['\','/'] then
+    hs:=Copy(s,1,length(s)-1)
+  else
+    hs:=s;  
+  if not PathExists(hs) then
+    begin
+      { Try parent first }
+      mkdirtree(SplitPath(hs));
+      { make this dir }
+      Verbose(V_Debug,'Making Directory '+s);
+      {$I-}
+       mkdir(s);
+      {$I+}
+      ioresult;
+    end;
+end;
+
+
     Function RemoveFile(const f:string):boolean;
       var
         g : file;
@@ -347,7 +390,7 @@ begin
   else
     GetCompilerVersion:=true;
   if GetCompilerVersion then
-    Verbose(V_Debug,'Current Compiler Version: "'+CompilerVersion+'"');
+    Verbose(V_Debug,'Compiler Version: "'+CompilerVersion+'"');
 end;
 
 
@@ -358,7 +401,7 @@ begin
   else
     GetCompilerCPU:=true;
   if GetCompilerCPU then
-    Verbose(V_Debug,'Current Compiler CPU: "'+CompilerCPU+'"');
+    Verbose(V_Debug,'Compiler CPU: "'+CompilerCPU+'"');
 end;
 
 
@@ -369,7 +412,25 @@ begin
   else
     GetCompilerTarget:=true;
   if GetCompilerTarget then
-    Verbose(V_Debug,'Current Compiler Target: "'+CompilerTarget+'"');
+    Verbose(V_Debug,'Compiler Target: "'+CompilerTarget+'"');
+end;
+
+
+function GetCompilerFullTarget:string;
+begin
+  GetCompilerFullTarget:=CompilerCPU+'-'+CompilerTarget;
+end;
+
+
+function OutputFileName(Const s,ext:String):String;
+begin
+  OutputFileName:=OutputDir+'/'+ForceExtension(s,ext);
+end;
+
+
+function TestOutputFileName(Const s,ext:String):String;
+begin
+  TestOutputFileName:=TestOutputDir+'/'+ForceExtension(SplitFileName(s),ext);
 end;
 
 
@@ -401,13 +462,14 @@ end;
 
 function RunCompiler:boolean;
 var
-  outname,
-  args : string;
+  args    : string;
   execres : boolean;
 begin
   RunCompiler:=false;
-  OutName:=ForceExtension(PPFile,'log');
-  args:='-n -Fuunits '+ExtraCompilerOpts;
+  args:='-n -Fu'+RTLUnitsDir;
+  args:=args+' -FE'+TestOutputDir;
+  if ExtraCompilerOpts<>'' then
+   args:=args+ExtraCompilerOpts;
 {$ifdef unix}
   { Add runtime library path to current dir to find .so files }
   if Config.NeedLibrary then
@@ -418,7 +480,7 @@ begin
   args:=args+' '+ppfile;
   Verbose(V_Debug,'Executing '+compilerbin+' '+args);
   { also get the output from as and ld that writes to stderr sometimes }
-  execres:=ExecuteRedir(CompilerBin,args,'',OutName,'stdout');
+  execres:=ExecuteRedir(CompilerBin,args,'',CompilerLogFile,'stdout');
   Verbose(V_Debug,'Exitcode '+ToStr(ExecuteResult));
 
   { Error during execution? }
@@ -428,15 +490,15 @@ begin
       AddLog(ResLogFile,failed_to_compile+PPFileInfo);
       AddLog(LongLogFile,line_separation);
       AddLog(LongLogFile,failed_to_compile+PPFileInfo);
-      CopyFile(OutName,LongLogFile,true);
+      CopyFile(CompilerLogFile,LongLogFile,true);
       { avoid to try again }
-      AddLog(ForceExtension(PPFile,'elg'),failed_to_compile+PPFileInfo);
+      AddLog(ExeLogFile,failed_to_compile+PPFileInfo);
       Verbose(V_Abort,'IOStatus: '+ToStr(IOStatus));
       exit;
     end;
 
   { Check for internal error }
-  if ExitWithInternalError(OutName) then
+  if ExitWithInternalError(CompilerLogFile) then
    begin
      AddLog(FailLogFile,TestName);
      if Config.Note<>'' then
@@ -446,9 +508,9 @@ begin
      AddLog(LongLogFile,failed_to_compile+PPFileInfo);
      if Config.Note<>'' then
       AddLog(LongLogFile,Config.Note);
-     CopyFile(OutName,LongLogFile,true);
+     CopyFile(CompilerLogFile,LongLogFile,true);
      { avoid to try again }
-     AddLog(ForceExtension(PPFile,'elg'),'Failed to compile '++PPFileInfo);
+     AddLog(ExeLogFile,'Failed to compile '++PPFileInfo);
      Verbose(V_Abort,'Internal error in compiler');
      exit;
    end;
@@ -460,7 +522,7 @@ begin
       begin
         AddLog(ResLogFile,success_compilation_failed+PPFileInfo);
         { avoid to try again }
-        AddLog(ForceExtension(PPFile,'elg'),success_compilation_failed+PPFileInfo);
+        AddLog(ExeLogFile,success_compilation_failed+PPFileInfo);
         RunCompiler:=true;
       end
      else
@@ -472,10 +534,10 @@ begin
         AddLog(LongLogFile,line_separation);
         AddLog(LongLogFile,failed_compilation_successful+PPFileInfo);
         { avoid to try again }
-        AddLog(ForceExtension(PPFile,'elg'),failed_compilation_successful+PPFileInfo);
+        AddLog(ExeLogFile,failed_compilation_successful+PPFileInfo);
         if Config.Note<>'' then
           AddLog(LongLogFile,Config.Note);
-        CopyFile(OutName,LongLogFile,true);
+        CopyFile(CompilerLogFile,LongLogFile,true);
       end;
    end
   else
@@ -489,7 +551,7 @@ begin
         AddLog(LongLogFile,line_separation);
         AddLog(LongLogFile,known_problem+Config.KnownCompileNote);
         AddLog(LongLogFile,failed_to_compile+PPFileInfo+' ('+ToStr(ExecuteResult)+')');
-        Copyfile(OutName,LongLogFile,true);
+        Copyfile(CompilerLogFile,LongLogFile,true);
         Verbose(V_Abort,known_problem+'exitcode: '+ToStr(ExecuteResult));
       end
      else if ExecuteResult<>0 then
@@ -502,9 +564,9 @@ begin
         AddLog(LongLogFile,failed_to_compile+PPFileInfo);
         if Config.Note<>'' then
           AddLog(LongLogFile,Config.Note);
-        CopyFile(OutName,LongLogFile,true);
+        CopyFile(CompilerLogFile,LongLogFile,true);
         { avoid to try again }
-        AddLog(ForceExtension(PPFile,'elg'),failed_to_compile+PPFileInfo);
+        AddLog(ExeLogFile,failed_to_compile+PPFileInfo);
         Verbose(V_Abort,'Exitcode: '+ToStr(ExecuteResult)+' (expected 0)');
       end
      else
@@ -538,6 +600,7 @@ begin
       begin
         delete(s,1,i+14-1);
         val(s,ExecuteResult,code);
+        if code=0 then;
         CheckTestExitCode:=true;
         break;
       end;
@@ -548,7 +611,8 @@ end;
 
 function RunExecutable:boolean;
 var
-  outname,
+  OldDir,
+  FullExeLogFile,
   TestRemoteExe,
   TestExe  : string;
   execres  : boolean;
@@ -556,7 +620,7 @@ var
   function ExecuteRemote(const prog,args:string):boolean;
   begin
     Verbose(V_Debug,'RemoteExecuting '+Prog+' '+args);
-    ExecuteRemote:=ExecuteRedir(prog,args,'',OutName,'stdout');
+    ExecuteRemote:=ExecuteRedir(prog,args,'',EXELogFile,'stdout');
   end;
 
 begin
@@ -564,10 +628,9 @@ begin
   execres:=true;
   { when remote testing, leave extension away }
   if RemoteAddr='' then
-    TestExe:=ForceExtension(PPFile,ExeExt)
+    TestExe:=OutputFileName(PPFile,ExeExt)
   else
-    TestExe:=ForceExtension(PPFile,'');
-  OutName:=ForceExtension(PPFile,'elg');
+    TestExe:=OutputFileName(PPFile,'');
   if RemoteAddr<>'' then
     begin
       { We don't want to create subdirs, remove paths from the test }
@@ -579,16 +642,28 @@ begin
       execres:=ExecuteRemote(rshprog,RemotePara+' '+RemoteAddr+' '+rquote+'chmod 755 '+TestRemoteExe+
         ' ; cd '+RemotePath+' ; '+TestRemoteExe+' ; echo "TestExitCode: $?"'+rquote);
       { Check for TestExitCode error in output, sets ExecuteResult }
-      CheckTestExitCode(OutName);
+      CheckTestExitCode(EXELogFile);
     end
   else
     begin
+      { Get full name out log file, because we change the directory during
+        execution }
+      FullExeLogFile:=FExpand(EXELogFile);
       Verbose(V_Debug,'Executing '+TestExe);
-      { don't redirect interactive and graph programs .. }
+      {$I-}
+       GetDir(0,OldDir);
+       ChDir(TestOutputDir);
+      {$I+}
+      ioresult;
+      { don't redirect interactive and graph programs }
       if Config.IsInteractive or Config.UsesGraph then
-        execres:=ExecuteRedir(TestExe,'','','','')
+        execres:=ExecuteRedir(SplitFileName(TestExe),'','','','')
       else
-        execres:=ExecuteRedir(TestExe,'','',OutName,'stdout');
+        execres:=ExecuteRedir(SplitFileName(TestExe),'','',FullExeLogFile,'stdout');
+      {$I-}
+       ChDir(OldDir);
+      {$I+}
+      ioresult;
     end;
 
   { Error during execution? }
@@ -599,9 +674,9 @@ begin
       AddLog(ResLogFile,failed_to_run+PPFileInfo);
       AddLog(LongLogFile,line_separation);
       AddLog(LongLogFile,failed_to_run+PPFileInfo);
-      CopyFile(OutName,LongLogFile,true);
+      CopyFile(EXELogFile,LongLogFile,true);
       { avoid to try again }
-      AddLog(ForceExtension(PPFile,'elg'),failed_to_run+PPFileInfo);
+      AddLog(ExeLogFile,failed_to_run+PPFileInfo);
       Verbose(V_Abort,'IOStatus: '+ToStr(IOStatus));
       exit;
     end;
@@ -616,7 +691,7 @@ begin
          AddLog(LongLogFile,line_separation);
          AddLog(LongLogFile,known_problem+Config.KnownRunNote);
          AddLog(LongLogFile,failed_to_run+PPFileInfo+' ('+ToStr(ExecuteResult)+')');
-         Copyfile(OutName,LongLogFile,true);
+         Copyfile(EXELogFile,LongLogFile,true);
          Verbose(V_Abort,known_problem+'exitcode: '+ToStr(ExecuteResult)+' (expected '+ToStr(Config.ResultCode)+')');
        end
      else
@@ -625,7 +700,7 @@ begin
          AddLog(ResLogFile,failed_to_run+PPFileInfo);
          AddLog(LongLogFile,line_separation);
          AddLog(LongLogFile,failed_to_run+PPFileInfo+' ('+ToStr(ExecuteResult)+')');
-         Copyfile(OutName,LongLogFile,true);
+         Copyfile(EXELogFile,LongLogFile,true);
          Verbose(V_Abort,'Exitcode: '+ToStr(ExecuteResult)+' (expected '+ToStr(Config.ResultCode)+')');
        end
    end
@@ -775,11 +850,42 @@ end;
 
 procedure RunTest;
 var
+  PPDir : string;
   Res : boolean;
-  OutName : string;
 begin
   Res:=GetConfig(ppfile,Config);
-  OutName:=ForceExtension(PPFile,'elg');
+
+  if Res then
+    begin
+      Res:=GetCompilerCPU;
+      Res:=GetCompilerTarget;
+      RTLUnitsDir:='units/'+GetCompilerFullTarget;
+      if not PathExists(RTLUnitsDir) then
+        Verbose(V_Abort,'Unit path "'+RTLUnitsDir+'" does not exists');
+      OutputDir:='output/'+GetCompilerFullTarget;
+      if not PathExists(OutputDir) then
+        Verbose(V_Abort,'Output path "'+OutputDir+'" does not exists');
+      { Global log files }
+      ResLogFile:=OutputFileName('log','');
+      LongLogFile:=OutputFileName('longlog','');
+      FailLogFile:=OutputFileName('faillist','');
+      { Make subdir in output if needed }
+      PPDir:=SplitPath(PPFile);
+      if PPDir[length(PPDir)] in ['/','\'] then
+        Delete(PPDir,length(PPDir),1);
+      if PPDir<>'' then
+        begin
+          TestOutputDir:=OutputDir+'/'+PPDir;
+          mkdirtree(TestOutputDir);
+        end
+      else
+        TestOutputDir:=OutputDir;
+      { Per test logfiles }
+      CompilerLogFile:=TestOutputFileName(SplitFileName(PPFile),'log');
+      ExeLogFile:=TestOutputFileName(SplitFileName(PPFile),'elg');
+      Verbose(V_Debug,'Using Compiler logfile: '+CompilerLogFile);
+      Verbose(V_Debug,'Using Execution logfile: '+ExeLogFile);
+    end;
 
   if Res then
    begin
@@ -787,7 +893,7 @@ begin
       begin
         AddLog(ResLogFile,skipping_graph_test+PPFileInfo);
         { avoid a second attempt by writing to elg file }
-        AddLog(OutName,skipping_graph_test+PPFileInfo);
+        AddLog(EXELogFile,skipping_graph_test+PPFileInfo);
         Verbose(V_Abort,skipping_graph_test);
         Res:=false;
       end;
@@ -798,7 +904,7 @@ begin
      if Config.IsInteractive and (not DoInteractive) then
       begin
         { avoid a second attempt by writing to elg file }
-        AddLog(OutName,skipping_interactive_test+PPFileInfo);
+        AddLog(EXELogFile,skipping_interactive_test+PPFileInfo);
         AddLog(ResLogFile,skipping_interactive_test+PPFileInfo);
         Verbose(V_Abort,skipping_interactive_test);
         Res:=false;
@@ -810,7 +916,7 @@ begin
      if Config.IsKnownCompileError and (not DoKnown) then
       begin
         { avoid a second attempt by writing to elg file }
-        AddLog(OutName,skipping_known_bug+PPFileInfo);
+        AddLog(EXELogFile,skipping_known_bug+PPFileInfo);
         AddLog(ResLogFile,skipping_known_bug+PPFileInfo);
         Verbose(V_Abort,skipping_known_bug);
         Res:=false;
@@ -831,7 +937,7 @@ begin
         if CompilerVersion<Config.MinVersion then
          begin
            { avoid a second attempt by writing to elg file }
-           AddLog(OutName,skipping_compiler_version_too_low+PPFileInfo);
+           AddLog(EXELogFile,skipping_compiler_version_too_low+PPFileInfo);
            AddLog(ResLogFile,skipping_compiler_version_too_low+PPFileInfo);
            Verbose(V_Abort,'Compiler version too low '+CompilerVersion+' < '+Config.MinVersion);
            Res:=false;
@@ -848,7 +954,7 @@ begin
         if CompilerVersion>Config.MaxVersion then
          begin
            { avoid a second attempt by writing to elg file }
-           AddLog(OutName,skipping_compiler_version_too_high+PPFileInfo);
+           AddLog(EXELogFile,skipping_compiler_version_too_high+PPFileInfo);
            AddLog(ResLogFile,skipping_compiler_version_too_high+PPFileInfo);
            Verbose(V_Abort,'Compiler version too high '+CompilerVersion+' > '+Config.MaxVersion);
            Res:=false;
@@ -861,11 +967,10 @@ begin
      if Config.NeedCPU<>'' then
       begin
         Verbose(V_Debug,'Required compiler cpu: '+Config.NeedCPU);
-        Res:=GetCompilerCPU;
         if not IsInList(CompilerCPU,Config.NeedCPU) then
          begin
            { avoid a second attempt by writing to elg file }
-           AddLog(OutName,skipping_other_cpu+PPFileInfo);
+           AddLog(EXELogFile,skipping_other_cpu+PPFileInfo);
            AddLog(ResLogFile,skipping_other_cpu+PPFileInfo);
            Verbose(V_Abort,'Compiler cpu "'+CompilerCPU+'" is not in list "'+Config.NeedCPU+'"');
            Res:=false;
@@ -878,11 +983,10 @@ begin
      if Config.SkipCPU<>'' then
       begin
         Verbose(V_Debug,'Skip compiler cpu: '+Config.NeedCPU);
-        Res:=GetCompilerCPU;
         if IsInList(CompilerCPU,Config.SkipCPU) then
          begin
            { avoid a second attempt by writing to elg file }
-           AddLog(OutName,skipping_other_cpu+PPFileInfo);
+           AddLog(EXELogFile,skipping_other_cpu+PPFileInfo);
            AddLog(ResLogFile,skipping_other_cpu+PPFileInfo);
            Verbose(V_Abort,'Compiler cpu "'+CompilerCPU+'" is in list "'+Config.SkipCPU+'"');
            Res:=false;
@@ -895,11 +999,10 @@ begin
      if Config.NeedTarget<>'' then
       begin
         Verbose(V_Debug,'Required compiler target: '+Config.NeedTarget);
-        Res:=GetCompilerTarget;
         if not IsInList(CompilerTarget,Config.NeedTarget) then
          begin
            { avoid a second attempt by writing to elg file }
-           AddLog(OutName,skipping_other_target+PPFileInfo);
+           AddLog(EXELogFile,skipping_other_target+PPFileInfo);
            AddLog(ResLogFile,skipping_other_target+PPFileInfo);
            Verbose(V_Abort,'Compiler target "'+CompilerTarget+'" is not in list "'+Config.NeedTarget+'"');
            Res:=false;
@@ -912,11 +1015,10 @@ begin
      if Config.SkipTarget<>'' then
       begin
         Verbose(V_Debug,'Skip compiler target: '+Config.NeedTarget);
-        Res:=GetCompilerTarget;
         if IsInList(CompilerTarget,Config.SkipTarget) then
          begin
            { avoid a second attempt by writing to elg file }
-           AddLog(OutName,skipping_other_target+PPFileInfo);
+           AddLog(EXELogFile,skipping_other_target+PPFileInfo);
            AddLog(ResLogFile,skipping_other_target+PPFileInfo);
            Verbose(V_Abort,'Compiler target "'+CompilerTarget+'" is in list "'+Config.SkipTarget+'"');
            Res:=false;
@@ -936,14 +1038,14 @@ begin
      if (Config.NoRun) then
       begin
         { avoid a second attempt by writing to elg file }
-        AddLog(OutName,skipping_run_test+PPFileInfo);
+        AddLog(EXELogFile,skipping_run_test+PPFileInfo);
         AddLog(ResLogFile,skipping_run_test+PPFileInfo);
         Verbose(V_Debug,skipping_run_test);
       end
      else if Config.IsKnownRunError and (not DoKnown) then
       begin
         { avoid a second attempt by writing to elg file }
-        AddLog(OutName,skipping_known_bug+PPFileInfo);
+        AddLog(EXELogFile,skipping_known_bug+PPFileInfo);
         AddLog(ResLogFile,skipping_known_bug+PPFileInfo);
         Verbose(V_Abort,skipping_known_bug);
       end
@@ -951,11 +1053,11 @@ begin
       begin
         if (not Config.ShouldFail) and DoExecute then
          begin
-           if FileExists(ForceExtension(PPFile,'ppu')) or
-              FileExists(ForceExtension(PPFile,'ppo')) or
-              FileExists(ForceExtension(PPFile,'ppw')) then
+           if FileExists(TestOutputFilename(PPFile,'ppu')) or
+              FileExists(TestOutputFilename(PPFile,'ppo')) or
+              FileExists(TestOutputFilename(PPFile,'ppw')) then
              begin
-               AddLog(ForceExtension(PPFile,'elg'),skipping_run_unit+PPFileInfo);
+               AddLog(ExeLogFile,skipping_run_unit+PPFileInfo);
                AddLog(ResLogFile,skipping_run_unit+PPFileInfo);
                Verbose(V_Debug,'Unit found, skipping run test')
              end
@@ -973,7 +1075,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.38  2004-09-30 15:38:59  peter
+  Revision 1.39  2004-11-09 17:26:28  peter
+    * use separate output dirs
+    * same tree can be used for multiple targets
+
+  Revision 1.38  2004/09/30 15:38:59  peter
     * chdir to remote path before executing test
 
   Revision 1.37  2004/07/03 18:28:21  florian