On 08/11/2020 19:27, Ken Brown via Cygwin-patches wrote:
On 11/8/2020 1:52 PM, Jon Turney wrote:
On 08/11/2020 18:19, Ken Brown via Cygwin-patches wrote:
On 11/5/2020 2:47 PM, Jon Turney wrote:
+# temporary directory to be used for files created by tests (as an absolute, +# /cygdrive path, so it can be understood by the test DLL, which will have
+# different mount table)
+tmpdir = $(shell cygpath -ma $(objdir)/testsuite/tmp/ | sed -e 's#^\([A-Z]\):#/cygdrive/\L\1#')

This isn't right if the cygdrive prefix is not 'cygdrive'.  Maybe use 'proc/cygdrive' instead of 'cygdrive'?


That's how I originally had it.  Unfortunately, test ltp/symlink01 relies on the test directory being specified as a canonicalized pathname (i.e. is the same after realpath()).

Since there's no /etc/fstab in the the filesystem relative to the test DLL, I think it should always be using the default cygdrive prefix?

But there's a mkdir command that seems to be run in the context of the user running 'make check'.  If the cygdrive prefix is not 'cygdrive', 'make check' fails as follows:

ERROR: tcl error sourcing /home/kbrown/src/cygdll/newlib-cygwin/winsup/testsuite/winsup.api/winsup.exp.
ERROR: can't create directory "/cygdrive": permission denied
     while executing
"file mkdir $tmpdir/$base"


Ah, I see.

Maybe something like the attached is needed.
From 3f14d1a3c6197e52e083eb8a869573c5e2aab4ef Mon Sep 17 00:00:00 2001
From: Jon Turney <jon.tur...@dronecode.org.uk>
Date: Mon, 9 Nov 2020 13:48:38 +0000
Subject: [PATCH] Fix testsuite tmpdir creation with non-default cygdrive
 prefix

---
 winsup/testsuite/Makefile.in           | 10 ++++++----
 winsup/testsuite/winsup.api/winsup.exp |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index 7e1881761..da1684aef 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -108,10 +108,11 @@ $(RUNTIME) : $(cygwin_build)/Makefile
 # Set to $(target_alias)/ for cross.
 target_subdir = @target_subdir@
 
-# temporary directory to be used for files created by tests (as an absolute,
-# /cygdrive path, so it can be understood by the test DLL, which will have
-# different mount table)
-tmpdir = $(shell cygpath -ma $(objdir)/testsuite/tmp/ | sed -e 
's#^\([A-Z]\):#/cygdrive/\L\1#')
+# a temporary directory, to be used for files created by tests
+tmpdir = $(abspath $(objdir)/testsuite/tmp/)
+# the same temporary directory, as an absolute, /cygdrive path (so it can be
+# understood by the test DLL, which will have a different mount table)
+testdll_tmpdir = $(shell cygpath -ma $(tmpdir) | sed -e 
's#^\([A-Z]\):#/cygdrive/\L\1#')
 
 site.exp: ./config.status Makefile
        @echo "Making a new config file..."
@@ -132,6 +133,7 @@ site.exp: ./config.status Makefile
        @echo "set CFLAGS \"$(INCLUDES)\"" >> ./tmp0
        @echo "set MINGW_CXX \"$(MINGW_CXX)\"" >> ./tmp0
        @echo "set tmpdir $(tmpdir)" >> ./tmp0
+       @echo "set testdll_tmpdir $(testdll_tmpdir)" >> ./tmp0
        @echo "set ltp_includes \"$(realpath $(libltp_srcdir))/include\"" >> 
./tmp0
        @echo "## All variables above are generated by configure. Do Not Edit 
##" >> ./tmp0
        @cat ./tmp0 > site.exp
diff --git a/winsup/testsuite/winsup.api/winsup.exp 
b/winsup/testsuite/winsup.api/winsup.exp
index cd5964d47..4978136a1 100644
--- a/winsup/testsuite/winsup.api/winsup.exp
+++ b/winsup/testsuite/winsup.api/winsup.exp
@@ -69,7 +69,7 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c 
$srcdir/$subdir/*/*.{cc
               set redirect_output /dev/null
            }
            file mkdir $tmpdir/$base
-           ws_spawn "$rootme/cygrun ./$base.exe $tmpdir/$base > 
$redirect_output"
+           ws_spawn "$rootme/cygrun ./$base.exe $testdll_tmpdir/$base > 
$redirect_output"
            file delete -force $tmpdir/$base
            if { $rv } {
                fail "$testcase (execute)"
-- 
2.29.2

Reply via email to