public inbox for cygwin-patches@cygwin.com
 help / color / mirror / Atom feed
* [PATCH 00/11] testsuite refurbishment
@ 2020-11-05 19:47 Jon Turney
  2020-11-05 19:47 ` [PATCH 01/11] Add testsuite directory to autogen.sh Jon Turney
                   ` (11 more replies)
  0 siblings, 12 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Fix testsuite Makefile/configure, so I have some idea what it's supposed to
be doing, prior to cleanup and Automake-ification.

> $ make check
[...]
> # of expected passes            253
> # of unexpected failures        23
> # of unexpected successes       1
> # of expected failures          7
 
Future work:
- Investigate and fix failing tests
- Tests are re-compiled every time they are run
- No parallelization of tests

For ease of reviewing, this patch series doesn't contain changes to
generated files which would be made by an autoreconf.

Jon Turney (11):
  Add testsuite directory to autogen.sh
  Always configure in testsuite subdirectory
  Add rule to testsuite Makefile to regenerate it when needed
  Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning
  Move adding libltp to VPATH after Makefile.common
  Define target_builddir autoconf and Makefile variables
  Detect and use MinGW compilers for testsuite wrappers
  Use absolute path to libltp includes
  Check exit code of a test, rather than stdout
  Set PATH for tests to pick up cygwin0.dll
  Ensure temporary directory used by tests exists

 winsup/Makefile.in                      |  16 +-
 winsup/autogen.sh                       |   2 +-
 winsup/configure.ac                     |   2 +-
 winsup/testsuite/Makefile.in            |  31 +-
 winsup/testsuite/aclocal.m4             | 831 ------------------------
 winsup/testsuite/autogen.sh             |   4 +
 winsup/testsuite/configure.ac           |   9 +
 winsup/testsuite/cygrun.c               |   5 +-
 winsup/testsuite/winsup.api/cygload.exp |   2 +-
 winsup/testsuite/winsup.api/winsup.exp  |  24 +-
 10 files changed, 60 insertions(+), 866 deletions(-)
 delete mode 100644 winsup/testsuite/aclocal.m4
 create mode 100755 winsup/testsuite/autogen.sh

-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 01/11] Add testsuite directory to autogen.sh
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 02/11] Always configure in testsuite subdirectory Jon Turney
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Also remove unneeded aclocal.m4 for an old aclocal version.
---
 winsup/autogen.sh           |   2 +-
 winsup/testsuite/aclocal.m4 | 831 ------------------------------------
 winsup/testsuite/autogen.sh |   4 +
 3 files changed, 5 insertions(+), 832 deletions(-)
 delete mode 100644 winsup/testsuite/aclocal.m4
 create mode 100755 winsup/testsuite/autogen.sh

diff --git a/winsup/autogen.sh b/winsup/autogen.sh
index 12373891e..b5cbe3cec 100755
--- a/winsup/autogen.sh
+++ b/winsup/autogen.sh
@@ -11,7 +11,7 @@ fi
 /usr/bin/autoconf -f
 /bin/rm -rf autom4te.cache
 res=0
-for d in cygwin utils cygserver; do
+for d in cygwin utils cygserver testsuite; do
     (cd $d && exec ./autogen.sh) || res=1
 done
 exit $res
diff --git a/winsup/testsuite/aclocal.m4 b/winsup/testsuite/aclocal.m4
deleted file mode 100644
index 177c0134b..000000000
--- a/winsup/testsuite/aclocal.m4
+++ /dev/null
@@ -1,831 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p6
-
-dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# lib-prefix.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
-  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
-  AC_REQUIRE([AC_PROG_CC])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-  dnl By default, look in $includedir and $libdir.
-  use_additional=yes
-  AC_LIB_WITH_FINAL_PREFIX([
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-  ])
-  AC_LIB_ARG_WITH([lib-prefix],
-[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
-  --without-lib-prefix    don't search for libraries in includedir and libdir],
-[
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-        AC_LIB_WITH_FINAL_PREFIX([
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-        ])
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/lib"
-      fi
-    fi
-])
-  if test $use_additional = yes; then
-    dnl Potentially add $additional_includedir to $CPPFLAGS.
-    dnl But don't add it
-    dnl   1. if it's the standard /usr/include,
-    dnl   2. if it's already present in $CPPFLAGS,
-    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
-    dnl   4. if it doesn't exist as a directory.
-    if test "X$additional_includedir" != "X/usr/include"; then
-      haveit=
-      for x in $CPPFLAGS; do
-        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-        if test "X$x" = "X-I$additional_includedir"; then
-          haveit=yes
-          break
-        fi
-      done
-      if test -z "$haveit"; then
-        if test "X$additional_includedir" = "X/usr/local/include"; then
-          if test -n "$GCC"; then
-            case $host_os in
-              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-            esac
-          fi
-        fi
-        if test -z "$haveit"; then
-          if test -d "$additional_includedir"; then
-            dnl Really add $additional_includedir to $CPPFLAGS.
-            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
-          fi
-        fi
-      fi
-    fi
-    dnl Potentially add $additional_libdir to $LDFLAGS.
-    dnl But don't add it
-    dnl   1. if it's the standard /usr/lib,
-    dnl   2. if it's already present in $LDFLAGS,
-    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
-    dnl   4. if it doesn't exist as a directory.
-    if test "X$additional_libdir" != "X/usr/lib"; then
-      haveit=
-      for x in $LDFLAGS; do
-        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-        if test "X$x" = "X-L$additional_libdir"; then
-          haveit=yes
-          break
-        fi
-      done
-      if test -z "$haveit"; then
-        if test "X$additional_libdir" = "X/usr/local/lib"; then
-          if test -n "$GCC"; then
-            case $host_os in
-              linux*) haveit=yes;;
-            esac
-          fi
-        fi
-        if test -z "$haveit"; then
-          if test -d "$additional_libdir"; then
-            dnl Really add $additional_libdir to $LDFLAGS.
-            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
-          fi
-        fi
-      fi
-    fi
-  fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
-  dnl Unfortunately, prefix and exec_prefix get only finally determined
-  dnl at the end of configure.
-  if test "X$prefix" = "XNONE"; then
-    acl_final_prefix="$ac_default_prefix"
-  else
-    acl_final_prefix="$prefix"
-  fi
-  if test "X$exec_prefix" = "XNONE"; then
-    acl_final_exec_prefix='${prefix}'
-  else
-    acl_final_exec_prefix="$exec_prefix"
-  fi
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-  prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  $1
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-])
-
-# lib-link.m4 serial 6 (gettext-0.14.3)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ(2.50)
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
-  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-  AC_REQUIRE([AC_LIB_RPATH])
-  define([Name],[translit([$1],[./-], [___])])
-  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
-    AC_LIB_LINKFLAGS_BODY([$1], [$2])
-    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
-    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
-    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
-  ])
-  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
-  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
-  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
-  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-  AC_SUBST([LIB]NAME)
-  AC_SUBST([LTLIB]NAME)
-  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
-  dnl results of this search when this library appears as a dependency.
-  HAVE_LIB[]NAME=yes
-  undefine([Name])
-  undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
-  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-  AC_REQUIRE([AC_LIB_RPATH])
-  define([Name],[translit([$1],[./-], [___])])
-  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
-  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
-  dnl accordingly.
-  AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
-  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
-  dnl because if the user has installed lib[]Name and not disabled its use
-  dnl via --without-lib[]Name-prefix, he wants to use it.
-  ac_save_CPPFLAGS="$CPPFLAGS"
-  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
-  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
-    ac_save_LIBS="$LIBS"
-    LIBS="$LIBS $LIB[]NAME"
-    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
-    LIBS="$ac_save_LIBS"
-  ])
-  if test "$ac_cv_lib[]Name" = yes; then
-    HAVE_LIB[]NAME=yes
-    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
-    AC_MSG_CHECKING([how to link with lib[]$1])
-    AC_MSG_RESULT([$LIB[]NAME])
-  else
-    HAVE_LIB[]NAME=no
-    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
-    dnl $INC[]NAME either.
-    CPPFLAGS="$ac_save_CPPFLAGS"
-    LIB[]NAME=
-    LTLIB[]NAME=
-  fi
-  AC_SUBST([HAVE_LIB]NAME)
-  AC_SUBST([LIB]NAME)
-  AC_SUBST([LTLIB]NAME)
-  undefine([Name])
-  undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
-  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
-  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
-  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
-  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
-  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
-  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
-  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
-    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
-    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
-    . ./conftest.sh
-    rm -f ./conftest.sh
-    acl_cv_rpath=done
-  ])
-  wl="$acl_cv_wl"
-  libext="$acl_cv_libext"
-  shlibext="$acl_cv_shlibext"
-  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-  hardcode_direct="$acl_cv_hardcode_direct"
-  hardcode_minus_L="$acl_cv_hardcode_minus_L"
-  dnl Determine whether the user wants rpath handling at all.
-  AC_ARG_ENABLE(rpath,
-    [  --disable-rpath         do not hardcode runtime library paths],
-    :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
-  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-  dnl By default, look in $includedir and $libdir.
-  use_additional=yes
-  AC_LIB_WITH_FINAL_PREFIX([
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-  ])
-  AC_LIB_ARG_WITH([lib$1-prefix],
-[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
-  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
-[
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-        AC_LIB_WITH_FINAL_PREFIX([
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-        ])
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/lib"
-      fi
-    fi
-])
-  dnl Search the library and its dependencies in $additional_libdir and
-  dnl $LDFLAGS. Using breadth-first-seach.
-  LIB[]NAME=
-  LTLIB[]NAME=
-  INC[]NAME=
-  rpathdirs=
-  ltrpathdirs=
-  names_already_handled=
-  names_next_round='$1 $2'
-  while test -n "$names_next_round"; do
-    names_this_round="$names_next_round"
-    names_next_round=
-    for name in $names_this_round; do
-      already_handled=
-      for n in $names_already_handled; do
-        if test "$n" = "$name"; then
-          already_handled=yes
-          break
-        fi
-      done
-      if test -z "$already_handled"; then
-        names_already_handled="$names_already_handled $name"
-        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
-        dnl or AC_LIB_HAVE_LINKFLAGS call.
-        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
-        eval value=\"\$HAVE_LIB$uppername\"
-        if test -n "$value"; then
-          if test "$value" = yes; then
-            eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
-            eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
-          else
-            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
-            dnl that this library doesn't exist. So just drop it.
-            :
-          fi
-        else
-          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
-          dnl and the already constructed $LIBNAME/$LTLIBNAME.
-          found_dir=
-          found_la=
-          found_so=
-          found_a=
-          if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
-                fi
-              fi
-            fi
-          fi
-          if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIB[]NAME; do
-              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
-                      found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
-                      fi
-                    fi
-                  fi
-                  ;;
-              esac
-              if test "X$found_dir" != "X"; then
-                break
-              fi
-            done
-          fi
-          if test "X$found_dir" != "X"; then
-            dnl Found the library.
-            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
-            if test "X$found_so" != "X"; then
-              dnl Linking with a shared library. We attempt to hardcode its
-              dnl directory into the executable's runpath, unless it's the
-              dnl standard /usr/lib.
-              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-                dnl No hardcoding is needed.
-                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-              else
-                dnl Use an explicit option to hardcode DIR into the resulting
-                dnl binary.
-                dnl Potentially add DIR to ltrpathdirs.
-                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
-                haveit=
-                for x in $ltrpathdirs; do
-                  if test "X$x" = "X$found_dir"; then
-                    haveit=yes
-                    break
-                  fi
-                done
-                if test -z "$haveit"; then
-                  ltrpathdirs="$ltrpathdirs $found_dir"
-                fi
-                dnl The hardcoding into $LIBNAME is system dependent.
-                if test "$hardcode_direct" = yes; then
-                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
-                  dnl resulting binary.
-                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-                else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-                    dnl Use an explicit option to hardcode DIR into the resulting
-                    dnl binary.
-                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-                    dnl Potentially add DIR to rpathdirs.
-                    dnl The rpathdirs will be appended to $LIBNAME at the end.
-                    haveit=
-                    for x in $rpathdirs; do
-                      if test "X$x" = "X$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      rpathdirs="$rpathdirs $found_dir"
-                    fi
-                  else
-                    dnl Rely on "-L$found_dir".
-                    dnl But don't add it if it's already contained in the LDFLAGS
-                    dnl or the already constructed $LIBNAME
-                    haveit=
-                    for x in $LDFLAGS $LIB[]NAME; do
-                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                      if test "X$x" = "X-L$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
-                    fi
-                    if test "$hardcode_minus_L" != no; then
-                      dnl FIXME: Not sure whether we should use
-                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
-                      dnl here.
-                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-                    else
-                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
-                      dnl here, because this doesn't fit in flags passed to the
-                      dnl compiler. So give up. No hardcoding. This affects only
-                      dnl very old systems.
-                      dnl FIXME: Not sure whether we should use
-                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
-                      dnl here.
-                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-                    fi
-                  fi
-                fi
-              fi
-            else
-              if test "X$found_a" != "X"; then
-                dnl Linking with a static library.
-                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
-              else
-                dnl We shouldn't come here, but anyway it's good to have a
-                dnl fallback.
-                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
-              fi
-            fi
-            dnl Assume the include files are nearby.
-            additional_includedir=
-            case "$found_dir" in
-              */lib | */lib/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
-                additional_includedir="$basedir/include"
-                ;;
-            esac
-            if test "X$additional_includedir" != "X"; then
-              dnl Potentially add $additional_includedir to $INCNAME.
-              dnl But don't add it
-              dnl   1. if it's the standard /usr/include,
-              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
-              dnl   3. if it's already present in $CPPFLAGS or the already
-              dnl      constructed $INCNAME,
-              dnl   4. if it doesn't exist as a directory.
-              if test "X$additional_includedir" != "X/usr/include"; then
-                haveit=
-                if test "X$additional_includedir" = "X/usr/local/include"; then
-                  if test -n "$GCC"; then
-                    case $host_os in
-                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-                    esac
-                  fi
-                fi
-                if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INC[]NAME; do
-                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                    if test "X$x" = "X-I$additional_includedir"; then
-                      haveit=yes
-                      break
-                    fi
-                  done
-                  if test -z "$haveit"; then
-                    if test -d "$additional_includedir"; then
-                      dnl Really add $additional_includedir to $INCNAME.
-                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
-                    fi
-                  fi
-                fi
-              fi
-            fi
-            dnl Look for dependencies.
-            if test -n "$found_la"; then
-              dnl Read the .la file. It defines the variables
-              dnl dlname, library_names, old_library, dependency_libs, current,
-              dnl age, revision, installed, dlopen, dlpreopen, libdir.
-              save_libdir="$libdir"
-              case "$found_la" in
-                */* | *\\*) . "$found_la" ;;
-                *) . "./$found_la" ;;
-              esac
-              libdir="$save_libdir"
-              dnl We use only dependency_libs.
-              for dep in $dependency_libs; do
-                case "$dep" in
-                  -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
-                    dnl But don't add it
-                    dnl   1. if it's the standard /usr/lib,
-                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
-                    dnl   3. if it's already present in $LDFLAGS or the already
-                    dnl      constructed $LIBNAME,
-                    dnl   4. if it doesn't exist as a directory.
-                    if test "X$additional_libdir" != "X/usr/lib"; then
-                      haveit=
-                      if test "X$additional_libdir" = "X/usr/local/lib"; then
-                        if test -n "$GCC"; then
-                          case $host_os in
-                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-                          esac
-                        fi
-                      fi
-                      if test -z "$haveit"; then
-                        haveit=
-                        for x in $LDFLAGS $LIB[]NAME; do
-                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                            dnl Really add $additional_libdir to $LIBNAME.
-                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
-                          fi
-                        fi
-                        haveit=
-                        for x in $LDFLAGS $LTLIB[]NAME; do
-                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                            dnl Really add $additional_libdir to $LTLIBNAME.
-                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
-                          fi
-                        fi
-                      fi
-                    fi
-                    ;;
-                  -R*)
-                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-                    if test "$enable_rpath" != no; then
-                      dnl Potentially add DIR to rpathdirs.
-                      dnl The rpathdirs will be appended to $LIBNAME at the end.
-                      haveit=
-                      for x in $rpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        rpathdirs="$rpathdirs $dir"
-                      fi
-                      dnl Potentially add DIR to ltrpathdirs.
-                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
-                      haveit=
-                      for x in $ltrpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        ltrpathdirs="$ltrpathdirs $dir"
-                      fi
-                    fi
-                    ;;
-                  -l*)
-                    dnl Handle this in the next round.
-                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-                    ;;
-                  *.la)
-                    dnl Handle this in the next round. Throw away the .la's
-                    dnl directory; it is already contained in a preceding -L
-                    dnl option.
-                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-                    ;;
-                  *)
-                    dnl Most likely an immediate library name.
-                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
-                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
-                    ;;
-                esac
-              done
-            fi
-          else
-            dnl Didn't find the library; assume it is in the system directories
-            dnl known to the linker and runtime loader. (All the system
-            dnl directories known to the linker should also be known to the
-            dnl runtime loader, otherwise the system is severely misconfigured.)
-            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
-          fi
-        fi
-      fi
-    done
-  done
-  if test "X$rpathdirs" != "X"; then
-    if test -n "$hardcode_libdir_separator"; then
-      dnl Weird platform: only the last -rpath option counts, the user must
-      dnl pass all path elements in one option. We can arrange that for a
-      dnl single library, but not when more than one $LIBNAMEs are used.
-      alldirs=
-      for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
-      done
-      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
-      acl_save_libdir="$libdir"
-      libdir="$alldirs"
-      eval flag=\"$hardcode_libdir_flag_spec\"
-      libdir="$acl_save_libdir"
-      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
-    else
-      dnl The -rpath options are cumulative.
-      for found_dir in $rpathdirs; do
-        acl_save_libdir="$libdir"
-        libdir="$found_dir"
-        eval flag=\"$hardcode_libdir_flag_spec\"
-        libdir="$acl_save_libdir"
-        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
-      done
-    fi
-  fi
-  if test "X$ltrpathdirs" != "X"; then
-    dnl When using libtool, the option that works for both libraries and
-    dnl executables is -R. The -R options are cumulative.
-    for found_dir in $ltrpathdirs; do
-      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
-    done
-  fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
-  for element in [$2]; do
-    haveit=
-    for x in $[$1]; do
-      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      [$1]="${[$1]}${[$1]:+ }$element"
-    fi
-  done
-])
-
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  acl_cv_prog_gnu_ld=yes ;;
-*)
-  acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by GCC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]* | [A-Za-z]:[\\/]*)]
-      [re_direlt='/[^/][^/]*/\.\./']
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break ;;
-      *)
-	test "$with_gnu_ld" != yes && break ;;
-      esac
-    fi
-  done
-  IFS="$ac_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-
diff --git a/winsup/testsuite/autogen.sh b/winsup/testsuite/autogen.sh
new file mode 100755
index 000000000..dc2c8b70a
--- /dev/null
+++ b/winsup/testsuite/autogen.sh
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+/usr/bin/aclocal --system-acdir=..
+/usr/bin/autoconf -f
+exec /bin/rm -rf autom4te.cache
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 02/11] Always configure in testsuite subdirectory
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
  2020-11-05 19:47 ` [PATCH 01/11] Add testsuite directory to autogen.sh Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 03/11] Add rule to testsuite Makefile to regenerate it when needed Jon Turney
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Doing this properly using AC_CONFIG_SUBDIRS is necessary to get the
correct paths in flags given to the compiler specified in CC/CXX.
---
 winsup/Makefile.in  | 16 +---------------
 winsup/configure.ac |  2 +-
 2 files changed, 2 insertions(+), 16 deletions(-)

diff --git a/winsup/Makefile.in b/winsup/Makefile.in
index f1c1ce771..ba6ed092c 100644
--- a/winsup/Makefile.in
+++ b/winsup/Makefile.in
@@ -94,22 +94,8 @@ Makefile: Makefile.in $(srcdir)/configure config.status
 config.status: configure
 	$(SHELL) config.status --recheck
 
-# The below rule is intended to run configure only when "make check" is
-# actually specified, i.e., not in a cross-compilation environment.  The
-# cygwin configuration is copied and modified to ensure that the same configuration
-# parameters are passed when the testsuite is configured as when cygwin was configured.
 check: cygwin
-	@if [ -f testsuite/config.status ]; then \
-	    cd testsuite; \
-	else \
-	    (mkdir testsuite 2>/dev/null || exit 0); \
-	    cd testsuite; \
-	    sed -e 's%winsup/cygwin\>%winsup/testsuite%g' ../cygwin/config.status > config.status; \
-	    chmod a+x config.status; \
-	    sh ./config.status --recheck; \
-	    sh ./config.status; \
-	fi; \
-	$(MAKE) check
+	$(MAKE) -C testsuite check
 
 utils: cygwin
 
diff --git a/winsup/configure.ac b/winsup/configure.ac
index 65369ae7f..5b420396d 100644
--- a/winsup/configure.ac
+++ b/winsup/configure.ac
@@ -29,7 +29,7 @@ AC_LANG(C++)
 
 AC_CYGWIN_INCLUDES
 
-AC_CONFIG_SUBDIRS(cygwin cygserver doc)
+AC_CONFIG_SUBDIRS(cygwin cygserver doc testsuite)
 if test "x$with_cross_bootstrap" != "xyes"; then
     AC_CONFIG_SUBDIRS([utils])
 fi
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 03/11] Add rule to testsuite Makefile to regenerate it when needed
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
  2020-11-05 19:47 ` [PATCH 01/11] Add testsuite directory to autogen.sh Jon Turney
  2020-11-05 19:47 ` [PATCH 02/11] Always configure in testsuite subdirectory Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 04/11] Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning Jon Turney
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

---
 winsup/testsuite/Makefile.in | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index 1b0d0de59..0e7f6ff1e 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -165,3 +165,6 @@ cygrun.o: cygrun.c
 
 cygrun.exe : cygrun.o
 	${MINGW_FE} $(CC) ${MINGW_LDFLAGS} -o $@ $<
+
+Makefile: Makefile.in $(srcdir)/configure config.status
+	$(SHELL) config.status
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 04/11] Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (2 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 03/11] Add rule to testsuite Makefile to regenerate it when needed Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 05/11] Move adding libltp to VPATH after Makefile.common Jon Turney
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Avoid a 'Makefile.in seems to ignore the --datarootdir setting' warning
when configuring.
---
 winsup/testsuite/Makefile.in | 1 +
 1 file changed, 1 insertion(+)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index 0e7f6ff1e..50319cda4 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -35,6 +35,7 @@ endif
 else
 tooldir:=$(exec_prefix)/$(target_alias)
 endif
+datarootdir:=@datarootdir@
 datadir:=${DESTDIR}@datadir@
 infodir:=${DESTDIR}@infodir@
 includedir:=${DESTDIR}@includedir@
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 05/11] Move adding libltp to VPATH after Makefile.common
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (3 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 04/11] Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 06/11] Define target_builddir autoconf and Makefile variables Jon Turney
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Move adding libltp to the VPATH after Makefile.common, which sets VPATH.
---
 winsup/testsuite/Makefile.in | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index 50319cda4..aaa5851b2 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -13,8 +13,6 @@ srcdir:=@srcdir@
 objdir:=.
 libltp_srcdir=$(srcdir)/libltp
 
-VPATH:=$(srcdir):$(libltp_srcdir)/lib
-
 target_alias:=@target_alias@
 build_alias:=@build_alias@
 host_alias:=@host_alias@
@@ -64,6 +62,8 @@ MINGW_FE:=$(dir ${srcdir})/utils/mingw
 #
 include $(srcdir)/../Makefile.common
 
+VPATH+=$(libltp_srcdir)/lib
+
 override CC:=$(CC) $(GCC_INCLUDE)
 export CC
 
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 06/11] Define target_builddir autoconf and Makefile variables
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (4 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 05/11] Move adding libltp to VPATH after Makefile.common Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 07/11] Detect and use MinGW compilers for testsuite wrappers Jon Turney
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

This now required as cygwin_build is defined in terms of
target_builddir.

(Note that in other subdirectories, the autoconf variable
target_builddir is AC_SUBST-ed as a side-effect of using a macro from
winsup/acinclude.m4, which is perhaps less than ideal)
---
 winsup/testsuite/Makefile.in  | 1 +
 winsup/testsuite/configure.ac | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index aaa5851b2..2a44fec07 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -12,6 +12,7 @@ SHELL:=@SHELL@
 srcdir:=@srcdir@
 objdir:=.
 libltp_srcdir=$(srcdir)/libltp
+target_builddir:=@target_builddir@
 
 target_alias:=@target_alias@
 build_alias:=@build_alias@
diff --git a/winsup/testsuite/configure.ac b/winsup/testsuite/configure.ac
index 46f9fb092..effea48c9 100755
--- a/winsup/testsuite/configure.ac
+++ b/winsup/testsuite/configure.ac
@@ -12,8 +12,12 @@ AC_PREREQ(2.59)
 AC_INIT([Cygwin Testsuite],[0],[cygwin@cygwin.com],[cygwin],[https://cygwin.com])
 AC_CONFIG_SRCDIR(Makefile.in)
 
+. ${srcdir}/../configure.cygwin
+
 AC_PROG_CC
 AC_PROG_CPP
 AC_CHECK_TOOL(AR,ar)
 
+AC_SUBST(target_builddir)
+
 AC_OUTPUT(Makefile)
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 07/11] Detect and use MinGW compilers for testsuite wrappers
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (5 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 06/11] Define target_builddir autoconf and Makefile variables Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 08/11] Use absolute path to libltp includes Jon Turney
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Drop MINGW_FE, which I can't find any trace of, and instead detect and
use MinGW compilers.

This requires adding AC_CANONICAL_TARGET, to set $target_cpu.
---
 winsup/testsuite/Makefile.in            | 8 +++++---
 winsup/testsuite/configure.ac           | 5 +++++
 winsup/testsuite/winsup.api/cygload.exp | 2 +-
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index 2a44fec07..53eb67308 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -56,7 +56,8 @@ endif
 
 AR:=@AR@
 AR_FLAGS:=qv
-MINGW_FE:=$(dir ${srcdir})/utils/mingw
+MINGW_CC:= @MINGW_CC@
+MINGW_CXX:= @MINGW_CXX@
 
 #
 # Include common definitions for winsup directory
@@ -140,6 +141,7 @@ site.exp: ./config.status Makefile
 	@echo "set CC \"$(CC)\"" >> ./tmp0
 # CFLAGS is set even though it's empty to show we reserve the right to set it.
 	@echo "set CFLAGS \"$(ALL_CFLAGS)\"" >> ./tmp0
+	@echo "set MINGW_CXX \"$(MINGW_CXX)\"" >> ./tmp0
 	echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
 	@echo "set ltp_includes \"$(libltp_srcdir)/include\"" >> ./tmp0
 	@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
@@ -163,10 +165,10 @@ check: $(TESTSUP_LIB_NAME) $(RUNTIME) cygrun.exe testsuite/site.exp
 	cd testsuite; runtest --tool winsup $(RUNTESTFLAGS)
 
 cygrun.o: cygrun.c
-	${MINGW_FE} $(CC) $(MINGW_CFLAGS) -o $@ -c $<
+	$(MINGW_CC) $(MINGW_CFLAGS) -o $@ -c $<
 
 cygrun.exe : cygrun.o
-	${MINGW_FE} $(CC) ${MINGW_LDFLAGS} -o $@ $<
+	$(MINGW_CC) $(MINGW_LDFLAGS) -o $@ $<
 
 Makefile: Makefile.in $(srcdir)/configure config.status
 	$(SHELL) config.status
diff --git a/winsup/testsuite/configure.ac b/winsup/testsuite/configure.ac
index effea48c9..b82ec7f60 100755
--- a/winsup/testsuite/configure.ac
+++ b/winsup/testsuite/configure.ac
@@ -14,10 +14,15 @@ AC_CONFIG_SRCDIR(Makefile.in)
 
 . ${srcdir}/../configure.cygwin
 
+AC_CANONICAL_TARGET
+
 AC_PROG_CC
 AC_PROG_CPP
 AC_CHECK_TOOL(AR,ar)
 
 AC_SUBST(target_builddir)
 
+AC_CHECK_PROGS(MINGW_CXX, ${target_cpu}-w64-mingw32-g++)
+AC_CHECK_PROGS(MINGW_CC, ${target_cpu}-w64-mingw32-gcc)
+
 AC_OUTPUT(Makefile)
diff --git a/winsup/testsuite/winsup.api/cygload.exp b/winsup/testsuite/winsup.api/cygload.exp
index a07a549f9..e7b439512 100644
--- a/winsup/testsuite/winsup.api/cygload.exp
+++ b/winsup/testsuite/winsup.api/cygload.exp
@@ -14,7 +14,7 @@ proc ws_spawn {cmd args} {
     verbose send "catchCode = $rv\n"
 }
 
-ws_spawn "gcc -mno-cygwin $srcdir/$subdir/cygload.cc -o mingw-cygload.exe -lstdc++ -Wl,-e,_cygloadCRTStartup@0"
+ws_spawn "$MINGW_CXX $srcdir/$subdir/cygload.cc -o mingw-cygload.exe -lstdc++ -Wl,-e,_cygloadCRTStartup@0"
 
 if { $rv != {0 {}} } {
     verbose -log "$rv"
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 08/11] Use absolute path to libltp includes
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (6 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 07/11] Detect and use MinGW compilers for testsuite wrappers Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 09/11] Check exit code of a test, rather than stdout Jon Turney
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Use an absolute path to libltp includes, to allow for the fact that
we'll be compiling tests in a subdirectory.
---
 winsup/testsuite/Makefile.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index 53eb67308..a9388ef6a 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -143,7 +143,7 @@ site.exp: ./config.status Makefile
 	@echo "set CFLAGS \"$(ALL_CFLAGS)\"" >> ./tmp0
 	@echo "set MINGW_CXX \"$(MINGW_CXX)\"" >> ./tmp0
 	echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
-	@echo "set ltp_includes \"$(libltp_srcdir)/include\"" >> ./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
 	@cat site.bak | sed \
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 09/11] Check exit code of a test, rather than stdout
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (7 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 08/11] Use absolute path to libltp includes Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 10/11] Set PATH for tests to pick up cygwin0.dll Jon Turney
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

In winsup.exp, don't consider a command failed if it produced any output
(e.g. if the compiler produced warnings).  Instead check the exit code.
---
 winsup/testsuite/winsup.api/winsup.exp | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/winsup/testsuite/winsup.api/winsup.exp b/winsup/testsuite/winsup.api/winsup.exp
index 639096267..1550b9445 100644
--- a/winsup/testsuite/winsup.api/winsup.exp
+++ b/winsup/testsuite/winsup.api/winsup.exp
@@ -20,11 +20,19 @@ if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } {
     set test_filter "$env(CYGWIN_TESTSUITE_TESTS)"
 }
 
-proc ws_spawn {cmd args} {
+proc ws_spawn {cmd} {
     global rv
     verbose "running $cmd\n"
-    catch "exec $cmd" rv
-    verbose send "catchCode = $rv\n"
+    try {
+	set msg [exec -ignorestderr {*}$cmd "2>@1"]
+	set rv 0
+    } trap CHILDSTATUS {results options} {
+	verbose "returned $::errorCode\n"
+	set msg $results
+	set rv 1
+    }
+    verbose -log "$msg"
+    return $rv
 }
 
 verbose "Filter: $test_filter"
@@ -52,8 +60,7 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc
 	source "$srcdir/$subdir/$basename.exp"
     } else {
 	ws_spawn "$CC -nodefaultlibs -mwin32 $CFLAGS $src $add_includes $add_libs $runtime_root/binmode.o -lgcc $runtime_root/libcygwin0.a -lkernel32 -luser32 -o $base.exe"
-	if { $rv != "" } {
-	    verbose -log "$rv"
+	if { $rv } {
 	    fail "$testcase (compile)"
 	} else {
 	    if { $verbose } {
@@ -62,8 +69,7 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc
 	       set redirect_output /dev/null
 	    }
 	    ws_spawn "$rootme/cygrun ./$base.exe > $redirect_output"
-	    if { $rv != "" } {
-		verbose -log "$testcase: $rv"
+	    if { $rv } {
 		fail "$testcase (execute)"
 		if { $xfail_expected } {
 		    catch { file delete "$base.exe" } err
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 10/11] Set PATH for tests to pick up cygwin0.dll
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (8 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 09/11] Check exit code of a test, rather than stdout Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-05 19:47 ` [PATCH 11/11] Ensure temporary directory used by tests exists Jon Turney
  2020-11-06  9:44 ` [PATCH 00/11] testsuite refurbishment Corinna Vinschen
  11 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

Set the PATH so that tests can pick up cygwin0.dll.  Looks like this was
dropped by accident in 2e488e95 ("Don't rely on in-build tools"), so
restore it as it was prior to 9d89f634.
---
 winsup/testsuite/Makefile.in | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index a9388ef6a..b77961878 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -162,6 +162,8 @@ testsuite/site.exp: site.exp
 # Note: we set the PATH so that we can pick up cygwin0.dll
 
 check: $(TESTSUP_LIB_NAME) $(RUNTIME) cygrun.exe testsuite/site.exp
+	rootme=`pwd` ;\
+	PATH=$$rootme/../cygwin:$${PATH} ;\
 	cd testsuite; runtest --tool winsup $(RUNTESTFLAGS)
 
 cygrun.o: cygrun.c
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (9 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 10/11] Set PATH for tests to pick up cygwin0.dll Jon Turney
@ 2020-11-05 19:47 ` Jon Turney
  2020-11-08 18:19   ` Ken Brown
  2020-11-06  9:44 ` [PATCH 00/11] testsuite refurbishment Corinna Vinschen
  11 siblings, 1 reply; 20+ messages in thread
From: Jon Turney @ 2020-11-05 19:47 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

By default, libltp tests will create temporary files in a subdirectory
of /tmp, which will (nowadays) be located relative to the test DLL (by
assuming that it is in /bin).  This will evaluate to the directory
$target_builddir/winsup/tmp, which doesn't exist.

The location used for these temporary files can be explicitly controlled
by setting the TDIRECTORY env var.  Arrange to set that env var to the
/cygdrive path of a tmp subdirectory of the build directory.

Unfortunately, libltp doesn't clean the temporary directory if
TDIRECTORY is set, and some tests assume they are started in a clean
directory, so we need to do that in tcl.
---
 winsup/testsuite/Makefile.in           | 10 ++++++++--
 winsup/testsuite/cygrun.c              |  5 ++++-
 winsup/testsuite/winsup.api/winsup.exp |  4 +++-
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
index b77961878..3b5a251b2 100644
--- a/winsup/testsuite/Makefile.in
+++ b/winsup/testsuite/Makefile.in
@@ -97,7 +97,8 @@ force:
 install:
 
 clean:
-	-rm -f *.o *.dll *.a *.exp junk *.bak *.base *.exe testsuite/* *.d *.dat
+	-rm -f *.o *.dll *.a *.exp junk *.bak *.base *.exe *.d *.dat
+	-rm -rf testsuite
 
 maintainer-clean realclean: clean
 	@echo "This command is intended for maintainers to use;"
@@ -123,6 +124,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#')
+
 site.exp: ./config.status Makefile
 	@echo "Making a new config file..."
 	-@rm -f ./tmp?
@@ -142,7 +148,7 @@ site.exp: ./config.status Makefile
 # CFLAGS is set even though it's empty to show we reserve the right to set it.
 	@echo "set CFLAGS \"$(ALL_CFLAGS)\"" >> ./tmp0
 	@echo "set MINGW_CXX \"$(MINGW_CXX)\"" >> ./tmp0
-	echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
+	@echo "set tmpdir $(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/cygrun.c b/winsup/testsuite/cygrun.c
index d1f53aad3..65d859d59 100644
--- a/winsup/testsuite/cygrun.c
+++ b/winsup/testsuite/cygrun.c
@@ -25,10 +25,13 @@ main (int argc, char **argv)
 
   if (argc < 2)
     {
-      fprintf (stderr, "Usage: cygrun [program]\n");
+      fprintf (stderr, "Usage: cygrun [program] [tmpdir]\n");
       exit (0);
     }
 
+  if (argc >= 3)
+    SetEnvironmentVariable ("TDIRECTORY", argv[2]);
+
   SetEnvironmentVariable ("CYGWIN_TESTING", "1");
   if ((p = getenv ("CYGWIN")) == NULL || (strstr (p, "ntsec") == NULL))
     {
diff --git a/winsup/testsuite/winsup.api/winsup.exp b/winsup/testsuite/winsup.api/winsup.exp
index 1550b9445..cd5964d47 100644
--- a/winsup/testsuite/winsup.api/winsup.exp
+++ b/winsup/testsuite/winsup.api/winsup.exp
@@ -68,7 +68,9 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc
 	    } else {
 	       set redirect_output /dev/null
 	    }
-	    ws_spawn "$rootme/cygrun ./$base.exe > $redirect_output"
+	    file mkdir $tmpdir/$base
+	    ws_spawn "$rootme/cygrun ./$base.exe $tmpdir/$base > $redirect_output"
+	    file delete -force $tmpdir/$base
 	    if { $rv } {
 		fail "$testcase (execute)"
 		if { $xfail_expected } {
-- 
2.29.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 00/11] testsuite refurbishment
  2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
                   ` (10 preceding siblings ...)
  2020-11-05 19:47 ` [PATCH 11/11] Ensure temporary directory used by tests exists Jon Turney
@ 2020-11-06  9:44 ` Corinna Vinschen
  11 siblings, 0 replies; 20+ messages in thread
From: Corinna Vinschen @ 2020-11-06  9:44 UTC (permalink / raw)
  To: cygwin-patches

On Nov  5 19:47, Jon Turney wrote:
> Fix testsuite Makefile/configure, so I have some idea what it's supposed to
> be doing, prior to cleanup and Automake-ification.
> 
> > $ make check
> [...]
> > # of expected passes            253
> > # of unexpected failures        23
> > # of unexpected successes       1
> > # of expected failures          7
>  
> Future work:
> - Investigate and fix failing tests
> - Tests are re-compiled every time they are run
> - No parallelization of tests
> 
> For ease of reviewing, this patch series doesn't contain changes to
> generated files which would be made by an autoreconf.
> 
> Jon Turney (11):
>   Add testsuite directory to autogen.sh
>   Always configure in testsuite subdirectory
>   Add rule to testsuite Makefile to regenerate it when needed
>   Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning
>   Move adding libltp to VPATH after Makefile.common
>   Define target_builddir autoconf and Makefile variables
>   Detect and use MinGW compilers for testsuite wrappers
>   Use absolute path to libltp includes
>   Check exit code of a test, rather than stdout
>   Set PATH for tests to pick up cygwin0.dll
>   Ensure temporary directory used by tests exists
> 
>  winsup/Makefile.in                      |  16 +-
>  winsup/autogen.sh                       |   2 +-
>  winsup/configure.ac                     |   2 +-
>  winsup/testsuite/Makefile.in            |  31 +-
>  winsup/testsuite/aclocal.m4             | 831 ------------------------
>  winsup/testsuite/autogen.sh             |   4 +
>  winsup/testsuite/configure.ac           |   9 +
>  winsup/testsuite/cygrun.c               |   5 +-
>  winsup/testsuite/winsup.api/cygload.exp |   2 +-
>  winsup/testsuite/winsup.api/winsup.exp  |  24 +-
>  10 files changed, 60 insertions(+), 866 deletions(-)
>  delete mode 100644 winsup/testsuite/aclocal.m4
>  create mode 100755 winsup/testsuite/autogen.sh
> 
> -- 
> 2.29.0

Looks good, please push.


Thanks,
Corinna

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-05 19:47 ` [PATCH 11/11] Ensure temporary directory used by tests exists Jon Turney
@ 2020-11-08 18:19   ` Ken Brown
  2020-11-08 18:52     ` Jon Turney
  0 siblings, 1 reply; 20+ messages in thread
From: Ken Brown @ 2020-11-08 18:19 UTC (permalink / raw)
  To: Jon Turney, cygwin-patches

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'?

Ken

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-08 18:19   ` Ken Brown
@ 2020-11-08 18:52     ` Jon Turney
  2020-11-08 19:27       ` Ken Brown
  0 siblings, 1 reply; 20+ messages in thread
From: Jon Turney @ 2020-11-08 18:52 UTC (permalink / raw)
  To: Cygwin Patches

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?

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-08 18:52     ` Jon Turney
@ 2020-11-08 19:27       ` Ken Brown
  2020-11-08 23:38         ` Brian Inglis
  2020-11-09 16:25         ` Jon Turney
  0 siblings, 2 replies; 20+ messages in thread
From: Ken Brown @ 2020-11-08 19:27 UTC (permalink / raw)
  To: cygwin-patches

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"

Ken

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-08 19:27       ` Ken Brown
@ 2020-11-08 23:38         ` Brian Inglis
  2020-11-09 16:25         ` Jon Turney
  1 sibling, 0 replies; 20+ messages in thread
From: Brian Inglis @ 2020-11-08 23:38 UTC (permalink / raw)
  To: Cygwin Patches

On 2020-11-08 12: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"

Unfortunately, cygpath has limitations dealing with paths with trailing
component symlinks, and readlink has limitations dealing with paths with leading
symlinks, while realpath overcomes those limitations and has other options to
deal with symlink issues:

$ cygpath ~/RPi
/home/bwi/RPi
$ readlink ~/RPi
Documents/Info/RPi
$ realpath ~/RPi
/.../Documents/Info/RPi

Could you not use:
tmpdir = $(shell realpath $(cygpath -aU $(objdir)/testsuite/tmp/))
or:
tmpdir = $(shell cygpath -aU $(objdir)/testsuite/tmp/ | xargs realpath)
otherwise:
	pfx=$(realpath /proc/cygdrive)
to get the drive prefix and use that directly when appropriate?

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-08 19:27       ` Ken Brown
  2020-11-08 23:38         ` Brian Inglis
@ 2020-11-09 16:25         ` Jon Turney
  2020-11-09 17:48           ` Ken Brown
  1 sibling, 1 reply; 20+ messages in thread
From: Jon Turney @ 2020-11-09 16:25 UTC (permalink / raw)
  To: Cygwin Patches

[-- Attachment #1: Type: text/plain, Size: 1465 bytes --]

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.

[-- Attachment #2: 0001-Fix-testsuite-tmpdir-creation-with-non-default-cygdr.patch --]
[-- Type: text/plain, Size: 2505 bytes --]

From 3f14d1a3c6197e52e083eb8a869573c5e2aab4ef Mon Sep 17 00:00:00 2001
From: Jon Turney <jon.turney@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


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-09 16:25         ` Jon Turney
@ 2020-11-09 17:48           ` Ken Brown
  2020-11-09 21:01             ` Jon Turney
  0 siblings, 1 reply; 20+ messages in thread
From: Ken Brown @ 2020-11-09 17:48 UTC (permalink / raw)
  To: cygwin-patches

On 11/9/2020 11:25 AM, Jon Turney wrote:
> 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.

That fixes it, thanks.  I get

                 === winsup Summary ===

# of expected passes            253
# of unexpected failures        23
# of unexpected successes       1
# of expected failures          7

Is that consistent with what you see?  I especially like the unexpected success. 
  That made my day.

I think it's great that you're resurrecting the test suite.  Thanks for doing that.

I have my own suite of fifo tests that I run every time I change something, and 
it's very tedious to do it by hand.  Currently almost all of them are set up to 
run interactively.  For example, they might involve typing "echo blah > 
/tmp/myfifo" in one terminal and checking for a response in a second terminal. 
I'll have to figure out how to make them run non-interactively.

Ken

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 11/11] Ensure temporary directory used by tests exists
  2020-11-09 17:48           ` Ken Brown
@ 2020-11-09 21:01             ` Jon Turney
  0 siblings, 0 replies; 20+ messages in thread
From: Jon Turney @ 2020-11-09 21:01 UTC (permalink / raw)
  To: Cygwin Patches

On 09/11/2020 17:48, Ken Brown via Cygwin-patches wrote:
> On 11/9/2020 11:25 AM, Jon Turney wrote:
>> 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.
> 
> That fixes it, thanks.  I get
> 
>                  === winsup Summary ===
> 
> # of expected passes            253
> # of unexpected failures        23
> # of unexpected successes       1
> # of expected failures          7

Yup. I get the same numbers.

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2020-11-09 21:01 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-05 19:47 [PATCH 00/11] testsuite refurbishment Jon Turney
2020-11-05 19:47 ` [PATCH 01/11] Add testsuite directory to autogen.sh Jon Turney
2020-11-05 19:47 ` [PATCH 02/11] Always configure in testsuite subdirectory Jon Turney
2020-11-05 19:47 ` [PATCH 03/11] Add rule to testsuite Makefile to regenerate it when needed Jon Turney
2020-11-05 19:47 ` [PATCH 04/11] Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning Jon Turney
2020-11-05 19:47 ` [PATCH 05/11] Move adding libltp to VPATH after Makefile.common Jon Turney
2020-11-05 19:47 ` [PATCH 06/11] Define target_builddir autoconf and Makefile variables Jon Turney
2020-11-05 19:47 ` [PATCH 07/11] Detect and use MinGW compilers for testsuite wrappers Jon Turney
2020-11-05 19:47 ` [PATCH 08/11] Use absolute path to libltp includes Jon Turney
2020-11-05 19:47 ` [PATCH 09/11] Check exit code of a test, rather than stdout Jon Turney
2020-11-05 19:47 ` [PATCH 10/11] Set PATH for tests to pick up cygwin0.dll Jon Turney
2020-11-05 19:47 ` [PATCH 11/11] Ensure temporary directory used by tests exists Jon Turney
2020-11-08 18:19   ` Ken Brown
2020-11-08 18:52     ` Jon Turney
2020-11-08 19:27       ` Ken Brown
2020-11-08 23:38         ` Brian Inglis
2020-11-09 16:25         ` Jon Turney
2020-11-09 17:48           ` Ken Brown
2020-11-09 21:01             ` Jon Turney
2020-11-06  9:44 ` [PATCH 00/11] testsuite refurbishment Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).