public inbox for cygwin-patches@cygwin.com
 help / color / mirror / Atom feed
* [PATCH] Use automake (v3)
@ 2020-11-24 13:37 Jon Turney
  2020-11-30 10:25 ` Corinna Vinschen
  0 siblings, 1 reply; 15+ messages in thread
From: Jon Turney @ 2020-11-24 13:37 UTC (permalink / raw)
  To: cygwin-patches; +Cc: Jon Turney

For ease of reviewing, this patch doesn't contain changes to generated
files which would be made by running ./autogen.sh.

v2:
* Include tzmap.h in BUILT_SOURCES
* Make per-file flags appear after user-supplied CXXFLAGS, so they can
override optimization level.
* Correct .o files used to define symbols exported by libm.a
* Drop gcrt0.o mistakenly incuded in libgmon.a
* Add missing line continuations in GMON_FILES value

v3:
* use per-file flags for .c compilation
* override C{XX,}FLAGS, as they are set on the command line by top-level make
---
 winsup/Makefile.am                     |  19 +
 winsup/Makefile.am.common              |  15 +
 winsup/Makefile.common                 |  51 --
 winsup/autogen.sh                      |   1 +
 winsup/configure.ac                    |  21 +-
 winsup/cygserver/Makefile.am           |  58 ++
 winsup/cygwin/Makefile.am              | 769 +++++++++++++++++++++++++
 winsup/cygwin/config.h.in              |   2 +-
 winsup/doc/Makefile.am                 | 155 +++++
 winsup/testsuite/Makefile.am           |  64 ++
 winsup/testsuite/config/default.exp    |   4 +-
 winsup/testsuite/cygrun/Makefile.am    |  21 +
 winsup/testsuite/winsup.api/winsup.exp |   6 +-
 winsup/utils/Makefile.am               |  81 +++
 winsup/utils/mingw/Makefile.am         |  50 ++
 15 files changed, 1258 insertions(+), 59 deletions(-)
 create mode 100644 winsup/Makefile.am
 create mode 100644 winsup/Makefile.am.common
 delete mode 100644 winsup/Makefile.common
 create mode 100644 winsup/cygserver/Makefile.am
 create mode 100644 winsup/cygwin/Makefile.am
 create mode 100644 winsup/doc/Makefile.am
 create mode 100644 winsup/testsuite/Makefile.am
 create mode 100644 winsup/testsuite/cygrun/Makefile.am
 create mode 100644 winsup/utils/Makefile.am
 create mode 100644 winsup/utils/mingw/Makefile.am

diff --git a/winsup/Makefile.am b/winsup/Makefile.am
new file mode 100644
index 000000000..067f74688
--- /dev/null
+++ b/winsup/Makefile.am
@@ -0,0 +1,19 @@
+# Makefile.am for winsup stuff
+#
+# This file is part of Cygwin.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+# This makefile requires GNU make.
+
+cygdocdir = $(datarootdir)/doc/Cygwin
+
+cygdoc_DATA = \
+	CYGWIN_LICENSE \
+	COPYING
+
+SUBDIRS = cygwin cygserver doc utils testsuite
+
+cygserver utils testsuite: cygwin
diff --git a/winsup/Makefile.am.common b/winsup/Makefile.am.common
new file mode 100644
index 000000000..884194df2
--- /dev/null
+++ b/winsup/Makefile.am.common
@@ -0,0 +1,15 @@
+# Makefile.am.common - common definitions for the winsup directory
+#
+# This file is part of Cygwin.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+flags_common=-Wall -Wstrict-aliasing -Wwrite-strings -fno-common -pipe -fbuiltin -fmessage-length=0
+
+# compiler flags commonly used (but not for MinGW compilation, because they
+# include the Cygwin header paths via @INCLUDES@)
+
+cxxflags_common=$(INCLUDES) -fno-rtti -fno-exceptions -fno-use-cxa-atexit $(flags_common)
+cflags_common=$(INCLUDES) $(flags_common)
diff --git a/winsup/Makefile.common b/winsup/Makefile.common
deleted file mode 100644
index 3141bd111..000000000
--- a/winsup/Makefile.common
+++ /dev/null
@@ -1,51 +0,0 @@
-# Makefile.common - common definitions for the winsup directory
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-define justdir
-$(patsubst %/,%,$(dir $1))
-endef
-
-define libname
-$(realpath $(shell ${CC} --print-file-name=$1 $2))
-endef
-
-export PATH:=${winsup_srcdir}:${PATH}
-
-# Allow CFLAGS=-O,-g to control CXXFLAGS too
-opt=$(filter -O%,${CFLAGS}) $(filter -g%,${CFLAGS})
-override CXXFLAGS:=${filter-out -g%,$(filter-out -O%,${CXXFLAGS})} ${opt}
-
-cflags_common:=-Wall -Wstrict-aliasing -Wwrite-strings -fno-common -pipe -fbuiltin -fmessage-length=0
-COMPILE.cc=${CXX} ${INCLUDES} ${CXXFLAGS} -fno-rtti -fno-exceptions -fno-use-cxa-atexit ${cflags_common}
-COMPILE.c=${CC} ${INCLUDES} ${CFLAGS} ${cflags_common}
-
-top_srcdir:=$(call justdir,${winsup_srcdir})
-top_builddir:=$(call justdir,${target_builddir})
-
-cygwin_build:=${target_builddir}/winsup/cygwin
-newlib_build:=${target_builddir}/newlib
-
-VPATH:=${srcdir}
-
-.SUFFIXES:
-.SUFFIXES: .c .cc .def .S .a .o .d .s .E
-
-%.o: %.cc
-	$(strip ${COMPILE.cc} -c -o $@ $<)
-
-%.o: %.c
-	$(strip ${COMPILE.c} -c -o $@ $<)
-
-%.E: %.cc
-	$(strip ${COMPILE.cc} -E -dD -o $@ $<)
-
-%.E: %.c
-	$(strip ${COMPILE.c} -E -dD -o $@ $<)
-
-%.o: %.S
-	$(strip ${COMPILE.S} -c -o $@ $<)
diff --git a/winsup/autogen.sh b/winsup/autogen.sh
index 4a60ef39f..1db91add9 100755
--- a/winsup/autogen.sh
+++ b/winsup/autogen.sh
@@ -1,3 +1,4 @@
 /usr/bin/aclocal --force
 /usr/bin/autoconf -f
+/usr/bin/automake -ac
 /bin/rm -rf autom4te.cache
diff --git a/winsup/configure.ac b/winsup/configure.ac
index 438e629e7..9a11411ab 100644
--- a/winsup/configure.ac
+++ b/winsup/configure.ac
@@ -10,8 +10,10 @@ dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.59])
 AC_INIT([Cygwin],[0],[cygwin@cygwin.com],[cygwin],[https://cygwin.com])
-AC_CONFIG_SRCDIR(Makefile.in)
 AC_CONFIG_AUX_DIR(..)
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE([dejagnu foreign no-define no-dist subdir-objects -Wall -Wno-portability -Wno-extra-portability])
+AM_SILENT_RULES([yes])
 
 realdirpath() {
     test -z "$1" && return 1
@@ -26,13 +28,15 @@ realdirpath() {
 winsup_srcdir="$(realdirpath $srcdir)"
 target_builddir="$(realdirpath ..)"
 
-AC_PROG_INSTALL
 AC_NO_EXECUTABLES
-AC_CANONICAL_TARGET
 
+AC_PROG_INSTALL
+AC_PROG_MKDIR_P
 AC_PROG_CC
 AC_PROG_CXX
 AC_PROG_CPP
+AM_PROG_AS
+
 AC_LANG(C)
 AC_LANG(C++)
 
@@ -82,6 +86,8 @@ AC_SUBST(DEF_DLL_ENTRY)
 AC_SUBST(DIN_FILE)
 AC_SUBST(TLSOFFSETS_H)
 
+AM_CONDITIONAL(TARGET_X86_64, [test $target_cpu = "x86_64"])
+
 AC_CHECK_PROGS([DOCBOOK2XTEXI], [docbook2x-texi db2x_docbook2texi], [true])
 
 if test "x$with_cross_bootstrap" != "xyes"; then
@@ -90,15 +96,24 @@ if test "x$with_cross_bootstrap" != "xyes"; then
     AC_CHECK_PROGS(MINGW_CC, ${target_cpu}-w64-mingw32-gcc)
     test -n "$MINGW_CC" || AC_MSG_ERROR([no acceptable MinGW gcc found in \$PATH])
 fi
+AM_CONDITIONAL(CROSS_BOOTSTRAP, [test "x$with_cross_bootstrap" != "xyes"])
+
 AC_EXEEXT
 
+AC_CHECK_LIB([bfd], [bfd_init], [true],
+	     AC_MSG_WARN([Not building dumper.exe since some required libraries or headers are missing]))
+
+AM_CONDITIONAL(BUILD_DUMPER, [test "x$ac_cv_lib_bfd_bfd_init" = "xyes"])
+
 AC_CONFIG_FILES([
     Makefile
     cygwin/Makefile
     cygserver/Makefile
     doc/Makefile
     utils/Makefile
+    utils/mingw/Makefile
     testsuite/Makefile
+    testsuite/cygrun/Makefile
 ])
 
 AC_OUTPUT
diff --git a/winsup/cygserver/Makefile.am b/winsup/cygserver/Makefile.am
new file mode 100644
index 000000000..d52f93ce0
--- /dev/null
+++ b/winsup/cygserver/Makefile.am
@@ -0,0 +1,58 @@
+# Makefile for Cygwin server
+
+# This file is part of Cygwin.
+
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+include $(top_srcdir)/Makefile.am.common
+
+cygserver_flags=$(cxxflags_common) -Wimplicit-fallthrough=5 -Werror -DSYSCONFDIR="\"$(sysconfdir)\""
+
+noinst_LIBRARIES = libcygserver.a
+sbin_PROGRAMS = cygserver
+bin_SCRIPTS = cygserver-config
+
+cygserver_SOURCES = \
+	bsd_helper.cc \
+	bsd_log.cc \
+	bsd_mutex.cc \
+	client.cc \
+	cygserver.cc \
+	msg.cc \
+	process.cc \
+	pwdgrp.cc \
+	sem.cc \
+	setpwd.cc \
+	shm.cc \
+	sysv_msg.cc \
+	sysv_sem.cc \
+	sysv_shm.cc \
+	threaded_queue.cc \
+	transport.cc \
+	transport_pipes.cc
+
+cygserver_CXXFLAGS = $(cygserver_flags) -D__OUTSIDE_CYGWIN__
+cygserver_LDADD = -lntdll
+cygserver_LDFLAGS = -static -static-libgcc
+
+# Note: the objects in libcygserver are built without -D__OUTSIDE_CYGWIN__,
+# unlike cygserver.exe
+
+libcygserver_a_SOURCES = \
+	$(cygserver_SOURCES)
+
+libcygserver_a_CXXFLAGS = $(cygserver_flags)
+
+cygdocdir = $(datarootdir)/doc/Cygwin
+
+install-data-local:
+	@$(MKDIR_P) $(DESTDIR)$(cygdocdir)
+	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(cygdocdir)/cygserver.README
+	@$(MKDIR_P) $(DESTDIR)$(sysconfdir)/defaults/etc
+	$(INSTALL_DATA) $(srcdir)/cygserver.conf $(DESTDIR)$(sysconfdir)/defaults/etc/cygserver.conf
+
+uninstall-local:
+	rm -f $(DESTDIR)$(cygdocdir)/cygserver.README
+	rm -f $(DESTDIR)$(sysconfdir)/defaults/etc/cygserver.conf
diff --git a/winsup/cygwin/Makefile.am b/winsup/cygwin/Makefile.am
new file mode 100644
index 000000000..05d112732
--- /dev/null
+++ b/winsup/cygwin/Makefile.am
@@ -0,0 +1,769 @@
+# Makefile.am for Cygwin.
+#
+# This file is part of Cygwin.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+# This makefile requires GNU make.
+
+include $(top_srcdir)/Makefile.am.common
+
+COMMON_CFLAGS=-Wimplicit-fallthrough=5 -Werror -fmerge-constants -ftracer
+if TARGET_X86_64
+COMMON_CFLAGS+=-mcmodel=small
+endif
+
+AM_CFLAGS=$(cflags_common) $(COMMON_CFLAGS)
+AM_CXXFLAGS=$(cxxflags_common) $(COMMON_CFLAGS)
+
+if TARGET_X86_64
+# Needed by mcountFunc.S to choose the right code path and symbol names
+AM_CCASFLAGS=-D_WIN64
+endif
+
+target_builddir=@target_builddir@
+newlib_build=$(target_builddir)/newlib
+
+#
+# Specialize libdir and includedir to use tooldir prefixed paths (containing
+# target_alias) as used by newlib, because we overwrite library and header files
+# installed there by newlib.
+#
+
+toollibdir=$(prefix)/$(target_alias)/lib
+toolincludedir=$(prefix)/$(target_alias)/include
+
+# Parameters used in building the cygwin.dll.
+
+DLL_NAME=cygwin1.dll
+TEST_DLL_NAME=cygwin0.dll
+DIN_FILE=@DIN_FILE@
+DEF_FILE=cygwin.def
+TLSOFFSETS_H=@TLSOFFSETS_H@
+LIB_NAME=libcygwin.a
+TEST_LIB_NAME=libcygwin0.a
+
+#
+# sources
+#
+
+# These objects are included directly into the import library
+LIB_FILES= \
+	lib/_cygwin_crt0_common.cc \
+	lib/atexit.c \
+	lib/cygwin_attach_dll.c \
+	lib/cygwin_crt0.c \
+	lib/dll_entry.c \
+	lib/dll_main.cc \
+	lib/dso_handle.c \
+	lib/libcmain.c \
+	lib/premain0.c \
+	lib/premain1.c \
+	lib/premain2.c \
+	lib/premain3.c \
+	lib/pseudo-reloc-dummy.c
+
+LIBC_FILES= \
+	libc/arc4random_stir.c \
+	libc/base64.c \
+	libc/bsdlib.cc \
+	libc/call_once.c \
+	libc/cnd.c \
+	libc/fnmatch.c \
+	libc/fts.c \
+	libc/ftw.c \
+	libc/getentropy.cc \
+	libc/getopt.c \
+	libc/inet_addr.c \
+	libc/inet_network.c \
+	libc/minires-os-if.c \
+	libc/minires.c \
+	libc/msgcat.c \
+	libc/mtx.c \
+	libc/nftw.c \
+	libc/rcmd.cc \
+	libc/rexec.cc \
+	libc/strfmon.c \
+	libc/strptime.cc \
+	libc/thrd.c \
+	libc/tss.c \
+	libc/xsique.cc
+
+MATH_FILES= \
+	math/acoshl.c \
+	math/acosl.c \
+	math/asinhl.c \
+	math/asinl.c \
+	math/atan2l.c \
+	math/atanhl.c \
+	math/atanl.c \
+	math/cabsl.c \
+	math/cacosl.c \
+	math/cargl.c \
+	math/casinl.c \
+	math/catanl.c \
+	math/cbrtl.c \
+	math/ccosl.c \
+	math/ceill.S \
+	math/cephes_emath.c \
+	math/cexpl.c \
+	math/cimagl.c \
+	math/clog10l.c \
+	math/clogl.c \
+	math/conjl.c \
+	math/copysignl.S \
+	math/coshl.c \
+	math/cosl.c \
+	math/cosl_internal.S \
+	math/cossin.c \
+	math/cpowl.c \
+	math/cprojl.c \
+	math/creall.c \
+	math/csinl.c \
+	math/csqrtl.c \
+	math/ctanl.c \
+	math/erfl.c \
+	math/exp10l.c \
+	math/exp2l.S \
+	math/expl.c \
+	math/expm1l.c \
+	math/fabsl.c \
+	math/fdiml.c \
+	math/finite.c \
+	math/floorl.S \
+	math/fmal.c \
+	math/fmaxl.c \
+	math/fminl.c \
+	math/fmodl.c \
+	math/frexpl.S \
+	math/ilogbl.S \
+	math/internal_logl.S \
+	math/isinf.c \
+	math/isnan.c \
+	math/ldexpl.c \
+	math/lgammal.c \
+	math/llrint.c \
+	math/llrintf.c \
+	math/llrintl.c \
+	math/llroundl.c \
+	math/log10l.S \
+	math/log1pl.S \
+	math/log2l.S \
+	math/logbl.c \
+	math/logl.c \
+	math/lrint.c \
+	math/lrintf.c \
+	math/lrintl.c \
+	math/lroundl.c \
+	math/modfl.c \
+	math/nearbyint.S \
+	math/nearbyintf.S \
+	math/nearbyintl.S \
+	math/nextafterl.c \
+	math/nexttoward.c \
+	math/nexttowardf.c \
+	math/pow10l.c \
+	math/powil.c \
+	math/powl.c \
+	math/remainder.S \
+	math/remainderf.S \
+	math/remainderl.S \
+	math/remquol.S \
+	math/rint.c \
+	math/rintf.c \
+	math/rintl.c \
+	math/roundl.c \
+	math/scalbl.S \
+	math/scalbnl.S \
+	math/sinhl.c \
+	math/sinl.c \
+	math/sinl_internal.S \
+	math/sqrtl.c \
+	math/tanhl.c \
+	math/tanl.S \
+	math/tgammal.c \
+	math/truncl.c
+
+REGEX_FILES = \
+	regex/regcomp.c \
+	regex/regerror.c \
+	regex/regexec.c \
+	regex/regfree.c
+
+TZCODE_FILES= \
+	tzcode/localtime_wrapper.c
+
+DLL_FILES= \
+	advapi32.cc \
+	aio.cc \
+	assert.cc \
+	autoload.cc \
+	clock.cc \
+	ctype.cc \
+	cxx.cc \
+	cygheap.cc \
+	cygthread.cc \
+	cygtls.cc \
+	cygwait.cc \
+	cygxdr.cc \
+	dcrt0.cc \
+	debug.cc \
+	devices.cc \
+	dir.cc \
+	dlfcn.cc \
+	dll_init.cc \
+	dtable.cc \
+	environ.cc \
+	errno.cc \
+	exceptions.cc \
+	exec.cc \
+	external.cc \
+	fcntl.cc \
+	fenv.cc \
+	fhandler.cc \
+	fhandler_clipboard.cc \
+	fhandler_console.cc \
+	fhandler_cygdrive.cc \
+	fhandler_dev.cc \
+	fhandler_disk_file.cc \
+	fhandler_dsp.cc \
+	fhandler_fifo.cc \
+	fhandler_floppy.cc \
+	fhandler_netdrive.cc \
+	fhandler_nodevice.cc \
+	fhandler_pipe.cc \
+	fhandler_proc.cc \
+	fhandler_process.cc \
+	fhandler_process_fd.cc \
+	fhandler_procnet.cc \
+	fhandler_procsys.cc \
+	fhandler_procsysvipc.cc \
+	fhandler_random.cc \
+	fhandler_raw.cc \
+	fhandler_registry.cc \
+	fhandler_serial.cc \
+	fhandler_signalfd.cc \
+	fhandler_socket.cc \
+	fhandler_socket_inet.cc \
+	fhandler_socket_local.cc \
+	fhandler_socket_unix.cc \
+	fhandler_tape.cc \
+	fhandler_termios.cc \
+	fhandler_timerfd.cc \
+	fhandler_tty.cc \
+	fhandler_virtual.cc \
+	fhandler_windows.cc \
+	fhandler_zero.cc \
+	flock.cc \
+	fork.cc \
+	forkable.cc \
+	glob.cc \
+	glob_pattern_p.cc \
+	globals.cc \
+	grp.cc \
+	heap.cc \
+	hookapi.cc \
+	init.cc \
+	ioctl.cc \
+	ipc.cc \
+	kernel32.cc \
+	ldap.cc \
+	libstdcxx_wrapper.cc \
+	loadavg.cc \
+	lsearch.cc \
+	malloc_wrapper.cc \
+	miscfuncs.cc \
+	mktemp.cc \
+	mmap.cc \
+	mmap_alloc.cc \
+	msg.cc \
+	mount.cc \
+	net.cc \
+	netdb.cc \
+	nfs.cc \
+	nlsfuncs.cc \
+	ntea.cc \
+	passwd.cc \
+	path.cc \
+	pinfo.cc \
+	poll.cc \
+	posix_ipc.cc \
+	posix_timer.cc \
+	pseudo-reloc.cc \
+	pthread.cc \
+	quotactl.cc \
+	random.cc \
+	registry.cc \
+	resource.cc \
+	scandir.cc \
+	sched.cc \
+	sec_acl.cc \
+	sec_auth.cc \
+	sec_helper.cc \
+	sec_posixacl.cc \
+	security.cc \
+	select.cc \
+	sem.cc \
+	setlsapwd.cc \
+	shared.cc \
+	shm.cc \
+	signal.cc \
+	sigproc.cc \
+	smallprint.cc \
+	spawn.cc \
+	strace.cc \
+	strfuncs.cc \
+	strsep.cc \
+	strsig.cc \
+	sync.cc \
+	syscalls.cc \
+	sysconf.cc \
+	syslog.cc \
+	termios.cc \
+	thread.cc \
+	timerfd.cc \
+	times.cc \
+	tls_pbuf.cc \
+	tty.cc \
+	uinfo.cc \
+	uname.cc \
+	wait.cc \
+	wincap.cc \
+	window.cc \
+	winf.cc
+
+MALLOC_FILES= \
+	malloc.cc
+
+GMON_FILES= \
+	gmon.c \
+	mcount.c \
+	profil.c \
+	mcountFunc.S
+
+GENERATED_FILES= \
+	sigfe.s
+
+liblib_a_SOURCES= \
+	$(LIB_FILES)
+
+libdll_a_SOURCES= \
+	$(DLL_FILES) \
+	$(REGEX_FILES) \
+	$(MALLOC_FILES) \
+	$(LIBC_FILES) \
+	$(MATH_FILES) \
+	$(TZCODE_FILES) \
+	$(GENERATED_FILES)
+
+#
+# generated sources
+#
+
+shared_info_magic.h: cygmagic shared_info.h
+	$(srcdir)/cygmagic $@ "$(CC) $(INCLUDES) $(CPPFLAGS) -E -x c++" $(word 2,$^) SHARED_MAGIC 'class shared_info' USER_MAGIC 'class user_info'
+
+child_info_magic.h: cygmagic child_info.h
+	$(srcdir)/cygmagic $@ "$(CC) $(INCLUDES) $(CPPFLAGS) -E -x c++" $(word 2,$^) CHILD_INFO_MAGIC 'class child_info'
+
+globals.h: mkglobals_h globals.cc
+	$^ > $@
+
+localtime.patched.c: tzcode/localtime.c tzcode/localtime.c.patch
+	patch -u -o localtime.patched.c \
+		    $(srcdir)/tzcode/localtime.c \
+		    $(srcdir)/tzcode/localtime.c.patch
+
+$(srcdir)/devices.cc: gendevices devices.in devices.h
+	$(wordlist 1,2,$^) $@
+
+$(srcdir)/$(TLSOFFSETS_H): gentls_offsets cygtls.h
+	$^ $@ $(target_cpu) $(CC) $(AM_CFLAGS) -c || rm $@
+
+BUILT_SOURCES = \
+	child_info_magic.h \
+	shared_info_magic.h \
+	globals.h \
+	localtime.patched.c
+
+# Every time we touch a source file, the version info has to be rebuilt
+# to maintain a correct build date, especially in uname release output
+dirs = $(srcdir) $(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math $(srcdir)/tzcode
+find_src_files = $(wildcard $(dir)/*.[chS]) $(wildcard $(dir)/*.cc)
+src_files := $(foreach dir,$(dirs),$(find_src_files))
+
+# mkvers.sh creates version.cc in the first place, winver.o always
+# second, so version.cc is always older than winver.o
+version.cc: mkvers.sh include/cygwin/version.h winver.rc $(src_files)
+	@echo "Making version.cc and winver.o";\
+	export CC="$(CC)";\
+	/bin/sh $(word 1,$^) $(word 2,$^) $(word 3,$^) $(WINDRES) $(CFLAGS)
+
+winver.o: version.cc
+
+VERSION_OFILES = version.o winver.o
+
+#
+# export renames for mkimport
+#
+
+NEW_FUNCTIONS=$(addprefix --replace=,\
+	atexit= \
+	timezone= \
+	uname=uname_x \
+	__xdrrec_getrec= \
+	__xdrrec_setnonblock= \
+	xdr_array= \
+	xdr_bool= \
+	xdr_bytes= \
+	xdr_char= \
+	xdr_double= \
+	xdr_enum= \
+	xdr_float= \
+	xdr_free= \
+	xdr_hyper= \
+	xdr_int= \
+	xdr_int16_t= \
+	xdr_int32_t= \
+	xdr_int64_t= \
+	xdr_int8_t= \
+	xdr_long= \
+	xdr_longlong_t= \
+	xdr_netobj= \
+	xdr_opaque= \
+	xdr_pointer= \
+	xdr_reference= \
+	xdr_short= \
+	xdr_sizeof= \
+	xdr_string= \
+	xdr_u_char= \
+	xdr_u_hyper= \
+	xdr_u_int= \
+	xdr_u_int16_t= \
+	xdr_u_int32_t= \
+	xdr_u_int64_t= \
+	xdr_u_int8_t= \
+	xdr_u_long= \
+	xdr_u_longlong_t= \
+	xdr_u_short= \
+	xdr_uint16_t= \
+	xdr_uint32_t= \
+	xdr_uint64_t= \
+	xdr_uint8_t= \
+	xdr_union= \
+	xdr_vector= \
+	xdr_void= \
+	xdr_wrapstring= \
+	xdrmem_create= \
+	xdrrec_create= \
+	xdrrec_endofrecord= \
+	xdrrec_eof= \
+	xdrrec_skiprecord= \
+	xdrstdio_create= \
+)
+
+if !TARGET_X86_64
+NEW_FUNCTIONS+=$(addprefix --replace=,\
+	acl=_acl32 \
+	aclcheck=_aclcheck32 \
+	aclfrommode=_aclfrommode32 \
+	aclfrompbits=_aclfrompbits32 \
+	aclfromtext=_aclfromtext32 \
+	aclsort=_aclsort32 \
+	acltomode=_acltomode32 \
+	acltopbits=_acltopbits32 \
+	acltotext=_acltotext32 \
+	chown=_chown32 \
+	facl=_facl32 \
+	fchown=_fchown32 \
+	fcntl=_fcntl64 \
+	fdopen=_fdopen64 \
+	fgetpos=_fgetpos64 \
+	fopen=_fopen64 \
+	freopen=_freopen64 \
+	fseeko=_fseeko64 \
+	fsetpos=_fsetpos64 \
+	fstat=_fstat64 \
+	ftello=_ftello64 \
+	ftruncate=_ftruncate64 \
+	getegid=_getegid32 \
+	geteuid=_geteuid32 \
+	getgid=_getgid32 \
+	getgrent=_getgrent32 \
+	getgrgid=_getgrgid32 \
+	getgrnam=_getgrnam32 \
+	getgroups=_getgroups32 \
+	getpwuid=_getpwuid32 \
+	getpwuid_r=_getpwuid_r32 \
+	getuid=_getuid32 \
+	initgroups=_initgroups32 \
+	lchown=_lchown32 \
+	lseek=_lseek64 \
+	lstat=_lstat64 \
+	mknod=_mknod32 \
+	mmap=_mmap64 \
+	open=_open64 \
+	setegid=_setegid32 \
+	seteuid=_seteuid32 \
+	setgid=_setgid32 \
+	setgroups=_setgroups32 \
+	setregid=_setregid32 \
+	setreuid=_setreuid32 \
+	setuid=_setuid32 \
+	stat=_stat64 \
+	tmpfile=_tmpfile64 \
+	truncate=_truncate64 \
+)
+endif
+
+#
+# per-file compilation flags
+#
+# (these come after, and thus override, the user-supplied CXXFLAGS, as they need
+# to be able to fiddle with the optimization level)
+#
+
+override CFLAGS += $($(*F)_CFLAGS)
+override CXXFLAGS += $($(*F)_CFLAGS)
+
+localtime_wrapper_CFLAGS=-I$(srcdir)/tzcode -fwrapv
+
+# required since gcc 9.x
+exec_CFLAGS=-fno-builtin-execve
+
+fhandler_proc_CFLAGS=-DUSERNAME="\"$(USER)\"" -DHOSTNAME="\"$(HOSTNAME)\"" \
+		     -DGCC_VERSION="\"`$(CC) -v 2>&1 | tail -n 1`\""
+
+if !TARGET_X86_64
+# on x86, exceptions.cc must be compiled with a frame-pointer as it uses RtlCaptureContext()
+exceptions_CFLAGS=-fno-omit-frame-pointer
+endif
+
+dtable_CFLAGS=-fcheck-new
+
+# If an optimization level is explicitly set in CXXFLAGS, set -O3 for these files
+# XXX: this seems to assume it's not -O0?
+#
+# (the indentation here prevents automake trying to process this as an automake
+# conditional)
+ ifneq "${filter -O%,$(CXXFLAGS)}" ""
+  malloc_CFLAGS=-O3
+  sync_CFLAGS=-O3
+ endif
+
+#
+# libraries and installed objects
+#
+# (Don't ever try to use automake's shared library support via libtool to build
+# Cygwin. Instead we have explicit rules to build it.)
+#
+
+SUBLIBS = \
+	libpthread.a \
+	libutil.a \
+	libm.a \
+	libc.a \
+	libdl.a \
+	libresolv.a \
+	librt.a \
+	libacl.a \
+	libssp.a
+
+EXTRALIBS = \
+	libautomode.a \
+	libbinmode.a \
+	libtextmode.a \
+	libtextreadmode.a
+
+noinst_LIBRARIES = \
+	libdll.a \
+	liblib.a
+
+toollib_LIBRARIES = \
+	libgmon.a \
+	$(EXTRALIBS)
+
+CYGWIN_START=crt0.o
+GMON_START=gcrt0.o
+INSTOBJS=automode.o binmode.o textmode.o textreadmode.o
+
+toollib_DATA = \
+	$(CYGWIN_START) \
+	$(GMON_START) \
+	$(INSTOBJS) \
+	$(LIB_NAME) \
+	$(SUBLIBS)
+
+libgmon_a_SOURCES = $(GMON_FILES)
+libgmon_a_LIBADD =
+
+libautomode_a_SOURCES =
+libautomode_a_LIBADD = automode.o
+
+libbinmode_a_SOURCES =
+libbinmode_a_LIBADD = binmode.o
+
+libtextmode_a_SOURCES =
+libtextmode_a_LIBADD = textmode.o
+
+libtextreadmode_a_SOURCES =
+libtextreadmode_a_LIBADD = textreadmode.o
+
+# cygserver library
+cygserver_blddir = ${target_builddir}/winsup/cygserver
+LIBSERVER = $(cygserver_blddir)/libcygserver.a
+
+$(LIBSERVER):
+	$(MAKE) -C $(cygserver_blddir) libcygserver.a
+
+# We build as cygwin0.dll and rename at install time to overcome native
+# rebuilding issues (we don't want the build tools to see a partially built
+# cygwin.dll and attempt to use it instead of the old one).
+
+# linker script
+LDSCRIPT=cygwin.sc
+$(LDSCRIPT): $(LDSCRIPT).in
+	$(CC) -E - -P < $^ -o $@
+
+# cygwin dll
+$(TEST_DLL_NAME): $(LDSCRIPT) dllfixdbg libdll.a $(VERSION_OFILES) $(LIBSERVER)
+	$(CXX) $(CXXFLAGS) \
+	-mno-use-libstdc-wrappers \
+	-Wl,--gc-sections -nostdlib -Wl,-T$(LDSCRIPT) -static \
+	-Wl,--heap=0 -Wl,--out-implib,cygdll.a -shared -o $@ \
+	-e @DLL_ENTRY@ $(DEF_FILE) \
+	-Wl,-whole-archive libdll.a -Wl,-no-whole-archive \
+	$(VERSION_OFILES) \
+	$(LIBSERVER) \
+	$(newlib_build)/libm/libm.a \
+	$(newlib_build)/libc/libc.a \
+	-lgcc -lkernel32 -lntdll -Wl,-Map,cygwin.map
+	$(srcdir)/dllfixdbg $(OBJDUMP) $(OBJCOPY) $@ cygwin1.dbg
+	@ln -f $@ new-cygwin1.dll
+
+# cygwin import library
+toolopts=--cpu=@target_cpu@ --ar=@AR@ --as=@AS@ --nm=@NM@ --objcopy=@OBJCOPY@
+
+$(DEF_FILE): gendef $(srcdir)/$(TLSOFFSETS_H) $(DIN_FILE) common.din
+	$(srcdir)/gendef --cpu=@target_cpu@ --output-def=$(DEF_FILE) --tlsoffsets=$(srcdir)/$(TLSOFFSETS_H) $(srcdir)/$(DIN_FILE) $(srcdir)/common.din
+
+sigfe.s: $(DEF_FILE)
+	@[ -s $@ ] || \
+	{ rm -f $(DEF_FILE); $(MAKE) -s -j1 $(DEF_FILE); }; \
+	[ -s $@ ] && touch $@
+
+LIBCOS=$(addsuffix .o,$(basename $(LIB_FILES)))
+$(LIB_NAME): $(DEF_FILE) $(LIBCOS) | $(TEST_DLL_NAME)
+	$(srcdir)/mkimport $(toolopts) $(NEW_FUNCTIONS) $@ cygdll.a $(wordlist 2,99,$^)
+
+# cygwin import library used by testsuite
+$(TEST_LIB_NAME): $(LIB_NAME)
+	perl -p -e 'BEGIN{binmode(STDIN); binmode(STDOUT);}; s/cygwin1/cygwin0/g' < $? > $@
+
+# sublibs
+# import libraries for some subset of symbols indicated by given objects
+speclib=\
+	$(srcdir)/speclib $(toolopts) \
+	--exclude='cygwin' \
+	--exclude='(?i:dll)' \
+	--exclude='reloc' \
+	--exclude='^main$$' \
+	--exclude='^_main$$'
+
+libc.a: $(LIB_NAME) libm.a libpthread.a libutil.a
+	$(speclib) $^ -v $(@F)
+
+libm.a: $(LIB_NAME) $(newlib_build)/libm/libm.a $(addsuffix .o,$(basename $(MATH_FILES)))
+	$(speclib) $^ $(@F)
+
+libpthread.a: $(LIB_NAME) pthread.o thread.o libc/call_once.o libc/cnd.o \
+	      libc/mtx.o libc/thrd.o libc/tss.o
+	$(speclib) $^ $(@F)
+
+libutil.a: $(LIB_NAME) libc/bsdlib.o
+	$(speclib) $^ $(@F)
+
+libdl.a: $(LIB_NAME) dlfcn.o
+	$(speclib) $^ $(@F)
+
+libresolv.a: $(LIB_NAME) libc/minires.o
+	$(speclib) $^ $(@F)
+
+librt.a: $(LIB_NAME) posix_ipc.o
+	$(speclib) $^ $(@F)
+
+libacl.a: $(LIB_NAME) sec_posixacl.o
+	$(speclib) $^ $(@F)
+
+libssp.a: $(LIB_NAME) $(newlib_build)/libc/ssp/lib.a
+	$(speclib) $^ $(@F)
+
+#
+# all
+#
+
+all-local: $(LIB_NAME) $(TEST_LIB_NAME) $(SUBLIBS)
+
+#
+# clean
+#
+
+clean-local:
+	-rm -f $(BUILT_SOURCES)
+	-rm -f $(DEF_FILE) sigfe.s
+	-rm -f cygwin.sc cygdll.a cygwin.map $(TEST_DLL_NAME) cygwin1.dbg new-cygwin1.dll
+	-rm -f $(LIB_NAME) $(TEST_LIB_NAME) $(SUBLIBS)
+	-rm -f version.cc
+
+maintainer-clean-local:
+	-rm -f $(srcdir)/$(TLSOFFSETS_H) $(srcdir)/devices.cc
+
+#
+# install
+#
+
+man_MANS = regex/regex.3 regex/regex.7
+
+install-exec-hook: install-libs
+install-data-local: install-headers install-ldif
+
+install-libs:
+	@$(MKDIR_P) $(DESTDIR)$(bindir)
+	$(INSTALL_PROGRAM) $(TEST_DLL_NAME) $(DESTDIR)$(bindir)/$(DLL_NAME)
+	(cd $(DESTDIR)$(toollibdir) && ln -sf $(LIB_NAME) libg.a)
+
+install-headers:
+	cd $(srcdir)/include; \
+	for sub in `find . -type d -print | sort`; do \
+	    $(MKDIR_P) $(DESTDIR)$(toolincludedir)/$$sub; \
+	    for i in $$sub/*.h ; do \
+	      $(INSTALL_DATA) $$i $(DESTDIR)$(toolincludedir)/$$sub/`basename $$i` ; \
+	    done ; \
+	done ;
+
+install-ldif:
+	@$(MKDIR_P) $(DESTDIR)$(datarootdir)/cygwin
+	$(INSTALL_DATA) $(srcdir)/cygwin.ldif $(DESTDIR)$(datarootdir)/cygwin
+
+#
+# uninstall
+#
+
+uninstall-hook: uninstall-headers uninstall-ldif uninstall-libs
+
+uninstall-libs:
+	rm -f $(DESTDIR)$(bindir)/cygwin1.dll
+	rm -f $(DESTDIR)$(toollibdir)/libg.a
+
+uninstall-headers:
+	cd $(srcdir)/include; \
+	for sub in `find . -type d -print | sort`; do \
+	    for i in $$sub/*.h ; do \
+	      rm -f $(DESTDIR)$(toolincludedir)/$$sub/`basename $$i` ; \
+	    done ; \
+	done ;
+
+uninstall-ldif:
+	rm -f $(DESTDIR)$(datarootdir)/cygwin/cygwin.ldif
diff --git a/winsup/cygwin/config.h.in b/winsup/cygwin/config.h.in
index 5ddff249f..1c4940951 100644
--- a/winsup/cygwin/config.h.in
+++ b/winsup/cygwin/config.h.in
@@ -1,4 +1,4 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
+/* cygwin/config.h.in.  Generated from configure.ac by autoheader.  */
 
 /* Define if DEBUGGING support is requested. */
 #undef DEBUGGING
diff --git a/winsup/doc/Makefile.am b/winsup/doc/Makefile.am
new file mode 100644
index 000000000..72b803c49
--- /dev/null
+++ b/winsup/doc/Makefile.am
@@ -0,0 +1,155 @@
+# -*- Makefile -*- for winsup/doc
+#
+# This file is part of Cygwin.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+man1_MANS =
+man3_MANS =
+
+doc_DATA = \
+	cygwin-ug-net/cygwin-ug-net.pdf \
+	cygwin-api/cygwin-api.pdf
+
+htmldir = $(datarootdir)/doc
+
+XMLTO=xmlto --skip-validation --with-dblatex
+DOCBOOK2XTEXI=@DOCBOOK2XTEXI@ --xinclude --info --utf8trans-map=charmap
+
+-include Makefile.dep
+
+.PHONY: install-extra-man install-etc
+
+all-local: Makefile.dep \
+	cygwin-api/cygwin-api.html \
+	cygwin-ug-net/cygwin-ug-net.html \
+	faq/faq.html faq/faq.body \
+	cygwin-ug-net/cygwin-ug-net-nochunks.html.gz \
+	api2man.stamp intro2man.stamp utils2man.stamp \
+	cygwin-api.info cygwin-ug-net.info
+
+clean-local:
+	rm -f Makefile.dep
+	rm -f *.html *.html.gz
+	rm -Rf cygwin-api cygwin-ug-net faq
+	rm -f api2man.stamp intro2man.stamp utils2man.stamp
+	rm -f *.1
+	rm -f *.3
+	rm -f *.info* charmap
+
+install-html-local: cygwin-ug-net/cygwin-ug-net.html cygwin-api/cygwin-api.html
+	@$(MKDIR_P) $(DESTDIR)$(htmldir)/cygwin-ug-net
+	$(INSTALL_DATA) cygwin-ug-net/*.html $(DESTDIR)$(htmldir)/cygwin-ug-net
+	(cd $(DESTDIR)$(htmldir)/cygwin-ug-net && ln -f cygwin-ug-net.html index.html)
+	$(INSTALL_DATA) $(srcdir)/docbook.css $(DESTDIR)$(htmldir)/cygwin-ug-net
+	@$(MKDIR_P) $(DESTDIR)$(htmldir)/cygwin-api
+	$(INSTALL_DATA) cygwin-api/*.html $(DESTDIR)$(htmldir)/cygwin-api
+	(cd $(DESTDIR)$(htmldir)/cygwin-api && ln -f cygwin-api.html index.html)
+	$(INSTALL_DATA) $(srcdir)/docbook.css $(DESTDIR)$(htmldir)/cygwin-api
+
+install-extra-man: api2man.stamp intro2man.stamp utils2man.stamp
+	@$(MKDIR_P) $(DESTDIR)$(man1dir)
+	$(INSTALL_DATA) *.1 $(DESTDIR)$(man1dir)
+	@$(MKDIR_P) $(DESTDIR)$(man3dir)
+	$(INSTALL_DATA) *.3 $(DESTDIR)$(man3dir)
+
+install-info-local: cygwin-ug-net.info cygwin-api.info
+	@$(MKDIR_P) $(DESTDIR)$(infodir)
+	$(INSTALL_DATA) *.info* $(DESTDIR)$(infodir)
+
+install-etc:
+	@$(MKDIR_P) $(DESTDIR)$(sysconfdir)/postinstall
+	$(INSTALL_SCRIPT) $(srcdir)/etc.postinstall.cygwin-doc.sh $(DESTDIR)$(sysconfdir)/postinstall/cygwin-doc.sh
+	@$(MKDIR_P) $(DESTDIR)$(sysconfdir)/preremove
+	$(INSTALL_SCRIPT) $(srcdir)/etc.preremove.cygwin-doc.sh $(DESTDIR)$(sysconfdir)/preremove/cygwin-doc.sh
+
+install-data-hook: install-extra-man install-html-local install-info-local install-etc
+
+uninstall-extra-man:
+	for i in *.1 ; do \
+	    rm -f $(DESTDIR)$(man1dir)/$$i ; \
+	done
+	for i in *.3 ; do \
+	    rm -f $(DESTDIR)$(man3dir)/$$i ; \
+	done
+
+uninstall-html:
+	for i in cygwin-ug-net/*.html ; do \
+	    rm -f $(DESTDIR)$(htmldir)/$$i ; \
+	done ;
+	rm -f $(DESTDIR)$(htmldir)/cygwin-ug-net/index.html
+	rm -f $(DESTDIR)$(htmldir)/cygwin-ug-net/docbook.css
+	for i in cygwin-api/*.html ; do \
+	    rm -f $(DESTDIR)$(htmldir)/$$i ; \
+	done ;
+	rm -f $(DESTDIR)$(htmldir)/cygwin-api/index.html
+	rm -f $(DESTDIR)$(htmldir)/cygwin-api/docbook.css
+
+uninstall-info:
+	for i in *.info* ; do \
+	    rm -f $(DESTDIR)$(infodir)/$$i ; \
+	done ;
+
+uninstall-etc:
+	rm -f $(DESTDIR)$(sysconfdir)/postinstall/cygwin-doc.sh
+	rm -f $(DESTDIR)$(sysconfdir)/preremove/cygwin-doc.sh
+
+uninstall-hook: uninstall-extra-man uninstall-html uninstall-info uninstall-etc
+
+# nochunks ug html is not installed, but will be deployed to website
+cygwin-ug-net/cygwin-ug-net-nochunks.html.gz: $(cygwin-ug-net_SOURCES) html.xsl
+	$(XMLTO) html-nochunks -m $(srcdir)/html.xsl $<
+	@$(MKDIR_P) cygwin-ug-net
+	cp cygwin-ug-net.html cygwin-ug-net/cygwin-ug-net-nochunks.html
+	rm -f cygwin-ug-net/cygwin-ug-net-nochunks.html.gz
+	gzip cygwin-ug-net/cygwin-ug-net-nochunks.html
+
+cygwin-ug-net/cygwin-ug-net.html: $(cygwin-ug-net_SOURCES) html.xsl
+	$(XMLTO) html -o cygwin-ug-net/ -m $(srcdir)/html.xsl $<
+
+cygwin-ug-net/cygwin-ug-net.pdf: $(cygwin-ug-net_SOURCES) fo.xsl
+	$(XMLTO) pdf -o cygwin-ug-net/ -m $(srcdir)/fo.xsl $<
+
+utils2man.stamp: $(cygwin-ug-net_SOURCES) man.xsl
+	$(XMLTO) man -m $(srcdir)/man.xsl $<
+	@touch $@
+
+cygwin-ug-net.info: $(cygwin-ug-net_SOURCES) charmap
+	$(DOCBOOK2XTEXI) $(srcdir)/cygwin-ug-net.xml --string-param output-file=cygwin-ug-net
+
+cygwin-api/cygwin-api.html: $(cygwin-api_SOURCES) html.xsl
+	$(XMLTO) html -o cygwin-api/ -m $(srcdir)/html.xsl $<
+
+cygwin-api/cygwin-api.pdf: $(cygwin-api_SOURCES) fo.xsl
+	$(XMLTO) pdf -o cygwin-api/ -m $(srcdir)/fo.xsl $<
+
+api2man.stamp: $(cygwin-api_SOURCES) man.xsl
+	$(XMLTO) man -m $(srcdir)/man.xsl $<
+	@touch $@
+
+cygwin-api.info: $(cygwin-api_SOURCES) charmap
+	$(DOCBOOK2XTEXI) $(srcdir)/cygwin-api.xml --string-param output-file=cygwin-api
+
+# this generates a custom charmap for docbook2x-texi which has a mapping for &reg;
+charmap:
+	cp /usr/share/docbook2X/charmaps/texi.charmap charmap
+	echo "ae (R)" >>charmap
+
+intro2man.stamp: intro.xml man.xsl
+	$(XMLTO) man -m $(srcdir)/man.xsl $<
+	@echo ".so intro.1" >cygwin.1
+	@touch $@
+
+faq/faq.html: $(faq_SOURCES) html.xsl
+	$(XMLTO) html -o faq -m $(srcdir)/html.xsl $(srcdir)/faq.xml
+	sed -i 's;<a name="id[mp][0-9]*"></a>;;g' faq/faq.html
+
+# faq body is not installed, but is intended to be deployed to website, where it
+# can be SSI included in a framing page
+faq/faq.body: faq/faq.html
+	$(srcdir)/bodysnatcher.pl $<
+
+Makefile.dep: cygwin-ug-net.xml cygwin-api.xml faq.xml intro.xml
+	cd $(srcdir) && ./xidepend $^ > "$(CURDIR)/$@"
diff --git a/winsup/testsuite/Makefile.am b/winsup/testsuite/Makefile.am
new file mode 100644
index 000000000..4b8c7dbb7
--- /dev/null
+++ b/winsup/testsuite/Makefile.am
@@ -0,0 +1,64 @@
+# Makefile.am for Cygwin's testsuite.
+#
+# This file is part of Cygwin.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+# This makefile requires GNU make.
+
+noinst_LIBRARIES = libltp.a
+
+libltp_a_CPPFLAGS=-I$(srcdir)/libltp/include
+
+libltp_a_SOURCES = \
+	libltp/lib/dataascii.c \
+	libltp/lib/databin.c \
+	libltp/lib/datapid.c \
+	libltp/lib/forker.c \
+	libltp/lib/get_high_address.c \
+	libltp/lib/libtestsuite.c \
+	libltp/lib/open_flags.c \
+	libltp/lib/parse_opts.c \
+	libltp/lib/pattern.c \
+	libltp/lib/rmobj.c \
+	libltp/lib/search_path.c \
+	libltp/lib/str_to_bytes.c \
+	libltp/lib/string_to_tokens.c \
+	libltp/lib/tst_res.c \
+	libltp/lib/tst_sig.c \
+	libltp/lib/tst_tmpdir.c \
+	libltp/lib/write_log.c
+
+DEJATOOL = winsup
+
+# Add '-v' to RUNTESTFLAGS if V=1
+RUNTESTFLAGS_1 = -v
+RUNTESTFLAGS = $(RUNTESTFLAGS_$(V))
+
+# 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-extra.exp: ../config.status Makefile
+	@rm -f ./tmp0
+	@echo "set runtime_root \"`pwd`/../cygwin\"" >> ./tmp0
+	@echo "set CC \"$(CC)\"" >> ./tmp0
+	@echo "set CFLAGS \"\"" >> ./tmp0
+	@echo "set MINGW_CXX \"$(MINGW_CXX)\"" >> ./tmp0
+	@echo "set tmpdir $(tmpdir)" >> ./tmp0
+	@echo "set testdll_tmpdir $(testdll_tmpdir)" >> ./tmp0
+	@echo "set ltp_includes \"$(srcdir)/libltp/include\"" >> ./tmp0
+	@echo "set ltp_libs \"`pwd`/libltp.a\"" >> ./tmp0
+	@echo "set cygrun \"`pwd`/cygrun/cygrun\"" >> ./tmp0
+	@mv ./tmp0 site-extra.exp
+
+EXTRA_DEJAGNU_SITE_CONFIG = site-extra.exp
+
+clean-local:
+	rm -f *.log *.exe *.exp *.bak *.stackdump winsup.sum
+
+SUBDIRS = cygrun
diff --git a/winsup/testsuite/config/default.exp b/winsup/testsuite/config/default.exp
index 8033ea627..7ef16ee6a 100644
--- a/winsup/testsuite/config/default.exp
+++ b/winsup/testsuite/config/default.exp
@@ -1,7 +1,7 @@
 proc winsup_version {} {
     global env
-    global rootme
-    clone_output "\n[exec grep -a ^%%% $rootme/../cygwin/cygwin0.dll]\n"
+    global runtime_root
+    clone_output "\n[exec grep -a ^%%% $runtime_root/cygwin0.dll]\n"
     if { [info exists env(CYGWIN)] } {
         clone_output "CYGWIN=$env(CYGWIN)\n"
     } else {
diff --git a/winsup/testsuite/cygrun/Makefile.am b/winsup/testsuite/cygrun/Makefile.am
new file mode 100644
index 000000000..eb3b41224
--- /dev/null
+++ b/winsup/testsuite/cygrun/Makefile.am
@@ -0,0 +1,21 @@
+# Makefile.am for Cygwin the testsuite wrapper cygrun.
+#
+# This file is part of Cygwin.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+# This makefile requires GNU make.
+
+# This is built with the MinGW compiler, so is in a separate Makefile here
+# because it's tricky with Automake to use different compilers for the same
+# language in the same Makefile.
+
+override CC = @MINGW_CC@
+INCLUDES =
+
+noinst_PROGRAMS = cygrun
+
+cygrun_SOURCES = \
+	../cygrun.c
diff --git a/winsup/testsuite/winsup.api/winsup.exp b/winsup/testsuite/winsup.api/winsup.exp
index 4978136a1..584aa5755 100644
--- a/winsup/testsuite/winsup.api/winsup.exp
+++ b/winsup/testsuite/winsup.api/winsup.exp
@@ -9,13 +9,15 @@ if { ! [isnative] } {
 set rv ""
 
 set ltp_includes "-I$ltp_includes"
-set ltp_libs "$rootme/libltp.a"
+set ltp_libs "$ltp_libs"
 
 set add_includes $ltp_includes
 set add_libs $ltp_libs
 
 set test_filter ""
 
+set env(PATH) "$runtime_root:$env(PATH)"
+
 if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } {
     set test_filter "$env(CYGWIN_TESTSUITE_TESTS)"
 }
@@ -69,7 +71,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 $testdll_tmpdir/$base > $redirect_output"
+	    ws_spawn "$cygrun ./$base.exe $testdll_tmpdir/$base > $redirect_output"
 	    file delete -force $tmpdir/$base
 	    if { $rv } {
 		fail "$testcase (execute)"
diff --git a/winsup/utils/Makefile.am b/winsup/utils/Makefile.am
new file mode 100644
index 000000000..9e5fc8cc0
--- /dev/null
+++ b/winsup/utils/Makefile.am
@@ -0,0 +1,81 @@
+# Makefile for Cygwin utilities
+
+# This file is part of Cygwin.
+
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+include $(top_srcdir)/Makefile.am.common
+
+CFLAGS_COMMON=-Wimplicit-fallthrough=4 -Werror
+AM_CFLAGS=$(cflags_common) $(CFLAGS_COMMON)
+AM_CXXFLAGS=$(cxxflags_common) $(CFLAGS_COMMON)
+
+bin_PROGRAMS = \
+	chattr \
+	cygpath \
+	gencat \
+	getconf \
+	getfacl \
+	kill \
+	ldd \
+	locale \
+	lsattr \
+	minidumper \
+	mkgroup \
+	mkpasswd \
+	mount \
+	passwd \
+	pldd \
+	ps \
+	regtool \
+	setfacl \
+	setmetamode \
+	ssp \
+	tzset \
+	umount
+
+# dumper is only built if libbfd.a available
+if BUILD_DUMPER
+bin_PROGRAMS += dumper
+endif
+
+# If prog_SOURCES is not specified, automake defaults to the single file prog.c
+cygpath_SOURCES = cygpath.cc
+dumper_SOURCES = dumper.cc module_info.cc
+kill_SOURCES = kill.cc
+ldd_SOURCES = ldd.cc
+locale_SOURCES = locale.cc
+minidumper_SOURCES = minidumper.cc
+mount_SOURCES = mount.cc path.cc
+ps_SOURCES = ps.cc
+regtool_SOURCES = regtool.cc
+umount_SOURCES = umount.cc
+
+# rules to create/update tzmap.h from an online resource
+.PHONY: tzmap
+tzmap:
+	$(srcdir)/tzmap-from-unicode.org > $(srcdir)/$@.h
+
+tzmap.h:
+	$(srcdir)/tzmap-from-unicode.org > $(srcdir)/$@
+
+BUILT_SOURCES = tzmap.h
+
+AM_LDFLAGS = -static -Wl,--enable-auto-import
+LDADD = -lnetapi32
+
+cygpath_CXXFLAGS = -fno-threadsafe-statics $(AM_CXXFLAGS)
+cygpath_LDADD = $(LDADD) -luserenv -lntdll
+dumper_CXXFLAGS = -I$(top_srcdir)/../include $(AM_CXXFLAGS)
+dumper_LDADD = $(LDADD) -lpsapi -lbfd -lintl -liconv -liberty -lz -lntdll
+ldd_LDADD = $(LDADD) -lpsapi -lntdll
+mount_CXXFLAGS = -DFSTAB_ONLY $(AM_CXXFLAGS)
+minidumper_LDADD = $(LDADD) -ldbghelp
+pldd_LDADD = $(LDADD) -lpsapi
+ps_LDADD = $(LDADD) -lpsapi -lntdll
+
+if CROSS_BOOTSTRAP
+SUBDIRS = mingw
+endif
diff --git a/winsup/utils/mingw/Makefile.am b/winsup/utils/mingw/Makefile.am
new file mode 100644
index 000000000..dca7f09dc
--- /dev/null
+++ b/winsup/utils/mingw/Makefile.am
@@ -0,0 +1,50 @@
+# Makefile for Cygwin utilities
+
+# This file is part of Cygwin.
+
+# This software is a copyrighted work licensed under the terms of the
+# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+# details.
+
+# We put utilities built with a MinGW compiler in a separate Makefile here
+# because it's tricky with Automake to use different compilers for the same
+# language in the same Makefile.
+
+override CXX = @MINGW_CXX@
+INCLUDES =
+
+include $(top_srcdir)/Makefile.am.common
+
+CFLAGS_COMMON=-Wimplicit-fallthrough=4 -Werror
+AM_CXXFLAGS=-fno-exceptions -fno-rtti -fno-use-cxa-atexit $(flags_common) $(CFLAGS_COMMON)
+
+bin_PROGRAMS = \
+	cygcheck \
+	cygwin-console-helper \
+	ldh \
+	strace
+
+cygcheck_SOURCES = \
+	../bloda.cc \
+	../cygcheck.cc \
+	../dump_setup.cc \
+	../path.cc
+cygcheck_LDADD = -lz -lwininet -lpsapi -lntdll
+
+cygwin_console_helper_SOURCES = ../cygwin-console-helper.cc
+
+ldh_SOURCES = ../ldh.cc
+
+strace_SOURCES = \
+	../path.cc \
+	../strace.cc
+strace_LDADD = -lntdll
+
+noinst_PROGRAMS = path-testsuite
+
+path_testsuite_SOURCES = \
+	../path.cc \
+	../testsuite.cc
+path_testsuite_CXXFLAGS = -DTESTSUITE -Wno-error=write-strings
+
+TESTS = path-testsuite
-- 
2.29.2


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

* Re: [PATCH] Use automake (v3)
  2020-11-24 13:37 [PATCH] Use automake (v3) Jon Turney
@ 2020-11-30 10:25 ` Corinna Vinschen
  2020-11-30 10:47   ` Corinna Vinschen
  2020-11-30 17:01   ` Jon Turney
  0 siblings, 2 replies; 15+ messages in thread
From: Corinna Vinschen @ 2020-11-30 10:25 UTC (permalink / raw)
  To: cygwin-patches

Hi Jon,

On Nov 24 13:37, Jon Turney wrote:
> For ease of reviewing, this patch doesn't contain changes to generated
> files which would be made by running ./autogen.sh.
> 
> v2:
> * Include tzmap.h in BUILT_SOURCES
> * Make per-file flags appear after user-supplied CXXFLAGS, so they can
> override optimization level.
> * Correct .o files used to define symbols exported by libm.a
> * Drop gcrt0.o mistakenly incuded in libgmon.a
> * Add missing line continuations in GMON_FILES value
> 
> v3:
> * use per-file flags for .c compilation
> * override C{XX,}FLAGS, as they are set on the command line by top-level make

Running autogen.sh shows a couple of warnings:

configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
testsuite/cygrun/Makefile.am:16: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
automake: warning: redefinition of 'ps' ...
/usr/share/automake-1.16/am/program.am: ... 'ps$(EXEEXT)' previously defined here
utils/Makefile.am:15:   while processing program 'ps'
utils/mingw/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')

Something to worry about?


Thanks,
Corinna

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

* Re: [PATCH] Use automake (v3)
  2020-11-30 10:25 ` Corinna Vinschen
@ 2020-11-30 10:47   ` Corinna Vinschen
  2020-11-30 17:02     ` Jon Turney
  2020-11-30 17:01   ` Jon Turney
  1 sibling, 1 reply; 15+ messages in thread
From: Corinna Vinschen @ 2020-11-30 10:47 UTC (permalink / raw)
  To: cygwin-patches

On Nov 30 11:25, Corinna Vinschen wrote:
> Hi Jon,
> 
> On Nov 24 13:37, Jon Turney wrote:
> > For ease of reviewing, this patch doesn't contain changes to generated
> > files which would be made by running ./autogen.sh.
> > 
> > v2:
> > * Include tzmap.h in BUILT_SOURCES
> > * Make per-file flags appear after user-supplied CXXFLAGS, so they can
> > override optimization level.
> > * Correct .o files used to define symbols exported by libm.a
> > * Drop gcrt0.o mistakenly incuded in libgmon.a
> > * Add missing line continuations in GMON_FILES value
> > 
> > v3:
> > * use per-file flags for .c compilation
> > * override C{XX,}FLAGS, as they are set on the command line by top-level make
> 
> Running autogen.sh shows a couple of warnings:
> 
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> testsuite/cygrun/Makefile.am:16: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> automake: warning: redefinition of 'ps' ...
> /usr/share/automake-1.16/am/program.am: ... 'ps$(EXEEXT)' previously defined here
> utils/Makefile.am:15:   while processing program 'ps'
> utils/mingw/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> 
> Something to worry about?

Also, after applying the patch and autogen-ing, a full build from
top-level fails with some warnings and a final undefined symbol:

make[5]: Entering directory '[...]/x86_64-pc-cygwin/winsup/utils/mingw'
  CXX      ../bloda.o
  CXX      ../cygcheck.o
  CXX      ../dump_setup.o
  CXX      ../ldh.o
  CXX      ../path.o
  CXX      ../cygwin-console-helper.o
  CXX      ../path_testsuite-path.o
  CXX      ../strace.o
  CXX      ../path_testsuite-testsuite.o
[...]/winsup/utils/mingw/../testsuite.cc:18: warning: "TESTSUITE" redefined
   18 | #define TESTSUITE
      | 
<command-line>: note: this is the location of the previous definition
  CXXLD    cygwin-console-helper.exe
  CXXLD    ldh.exe
In file included from [...]/winsup/utils/mingw/../path.cc:263:
[...]/winsup/utils/mingw/../testsuite.h:22:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   22 | #define TESTSUITE_ROOT "X:\\xyzroot"
      |                        ^~~~~~~~~~~~~
[...]/winsup/utils/mingw/../testsuite.h:22:24: note: in definition of macro 'TESTSUITE_ROOT'
   22 | #define TESTSUITE_ROOT "X:\\xyzroot"
      |                        ^~~~~~~~~~~~~
[...]/winsup/utils/mingw/../testsuite.h:34:4: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   34 |  { "O:\\other",           (char*)"/otherdir",        MOUNT_SYSTEM},
      |    ^~~~~~~~~~~
[...]/winsup/utils/mingw/../testsuite.h:35:4: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   35 |  { "S:\\some\\dir",       (char*)"/somedir",         MOUNT_SYSTEM},
      |    ^~~~~~~~~~~~~~~
[...]/winsup/utils/mingw/../testsuite.h:22:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   22 | #define TESTSUITE_ROOT "X:\\xyzroot"
      |                        ^
[...]/winsup/utils/mingw/../testsuite.h:22:24: note: in definition of macro 'TESTSUITE_ROOT'
   22 | #define TESTSUITE_ROOT "X:\\xyzroot"
      |                        ^~~~~~~~~~~~~
[...]/winsup/utils/mingw/../testsuite.h:22:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   22 | #define TESTSUITE_ROOT "X:\\xyzroot"
      |                        ^
[...]/winsup/utils/mingw/../testsuite.h:22:24: note: in definition of macro 'TESTSUITE_ROOT'
   22 | #define TESTSUITE_ROOT "X:\\xyzroot"
      |                        ^~~~~~~~~~~~~
[...]/winsup/utils/mingw/../testsuite.h:38:4: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   38 |  { ".",                   (char*)TESTSUITE_CYGDRIVE, MOUNT_SYSTEM | MOUNT_CYGDRIVE},
      |    ^~~
[...]/winsup/utils/mingw/../path.cc:563:1: warning: 'int mnt_sort(const void*, const void*)' defined but not used [-Wunused-function]
  563 | mnt_sort (const void *a, const void *b)
      | ^~~~~~~~
  CXXLD    path-testsuite.exe
/usr/lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld: ../path_testsuite-path.o:path.cc:(.rdata$.refptr.max_mount_entry[.refptr.max_mount_entry]+0x0): undefined reference to `max_mount_entry'


Corinna

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

* Re: [PATCH] Use automake (v3)
  2020-11-30 10:25 ` Corinna Vinschen
  2020-11-30 10:47   ` Corinna Vinschen
@ 2020-11-30 17:01   ` Jon Turney
  1 sibling, 0 replies; 15+ messages in thread
From: Jon Turney @ 2020-11-30 17:01 UTC (permalink / raw)
  To: Cygwin Patches

On 30/11/2020 10:25, Corinna Vinschen wrote:
> Hi Jon,
> 
> On Nov 24 13:37, Jon Turney wrote:
>> For ease of reviewing, this patch doesn't contain changes to generated
>> files which would be made by running ./autogen.sh.
>>
>> v2:
>> * Include tzmap.h in BUILT_SOURCES
>> * Make per-file flags appear after user-supplied CXXFLAGS, so they can
>> override optimization level.
>> * Correct .o files used to define symbols exported by libm.a
>> * Drop gcrt0.o mistakenly incuded in libgmon.a
>> * Add missing line continuations in GMON_FILES value
>>
>> v3:
>> * use per-file flags for .c compilation
>> * override C{XX,}FLAGS, as they are set on the command line by top-level make
> 
> Running autogen.sh shows a couple of warnings:
> 
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> testsuite/cygrun/Makefile.am:16: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> configure.ac:45: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> automake: warning: redefinition of 'ps' ...
> /usr/share/automake-1.16/am/program.am: ... 'ps$(EXEEXT)' previously defined here
> utils/Makefile.am:15:   while processing program 'ps'
> utils/mingw/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> 
> Something to worry about?

Thanks for taking a look.

These warnings are expected at the moment.

I plan to clean up INCLUDES -> CPPFLAGS in a future patch

The redefinition of 'ps' is due to a conflict between a target built 
into automake for postscript documentation and an executable we have 
called 'ps'.  I'm not sure how to address that.

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

* Re: [PATCH] Use automake (v3)
  2020-11-30 10:47   ` Corinna Vinschen
@ 2020-11-30 17:02     ` Jon Turney
  2020-12-01  9:18       ` Corinna Vinschen
  0 siblings, 1 reply; 15+ messages in thread
From: Jon Turney @ 2020-11-30 17:02 UTC (permalink / raw)
  To: Cygwin Patches

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

On 30/11/2020 10:47, Corinna Vinschen wrote:
> On Nov 30 11:25, Corinna Vinschen wrote:
> 
> Also, after applying the patch and autogen-ing, a full build from
> top-level fails with some warnings and a final undefined symbol:

The warnings are expected at this stage.

> make[5]: Entering directory '[...]/x86_64-pc-cygwin/winsup/utils/mingw'
>    CXX      ../bloda.o
>    CXX      ../cygcheck.o
>    CXX      ../dump_setup.o
>    CXX      ../ldh.o
>    CXX      ../path.o
>    CXX      ../cygwin-console-helper.o
>    CXX      ../path_testsuite-path.o
>    CXX      ../strace.o
>    CXX      ../path_testsuite-testsuite.o
> [...]/winsup/utils/mingw/../testsuite.cc:18: warning: "TESTSUITE" redefined
>     18 | #define TESTSUITE

This redefinition should probably be inside #ifndef TESTSUITE/#endif

> <command-line>: note: this is the location of the previous definition
>    CXXLD    cygwin-console-helper.exe
>    CXXLD    ldh.exe
> In file included from [...]/winsup/utils/mingw/../path.cc:263:
> [...]/winsup/utils/mingw/../testsuite.h:22:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
>     22 | #define TESTSUITE_ROOT "X:\\xyzroot"

I'm not sure how to restructure things to avoid this warning.

The '-Wno-error=write-strings' flag is added when building this test to 
avoid this being fatal.

>    CXXLD    path-testsuite.exe
> /usr/lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld: ../path_testsuite-path.o:path.cc:(.rdata$.refptr.max_mount_entry[.refptr.max_mount_entry]+0x0): undefined reference to `max_mount_entry'

This is a bit puzzling.  I don't get this when building locally, but idk 
why since there is only a tentative definition of this variable.

I'm not sure how this being built is changed by automaking to stop it 
working for you (perhaps optimization flags are now being used?)

Perhaps the attached helps, although what is getting stubbed out when 
testing could be clearer.


[-- Attachment #2: 0001-Fix-building-of-utils-testsuite.patch --]
[-- Type: text/plain, Size: 1321 bytes --]

From ddf8c0c059dd666f4138a5b0b123713af1af3ab1 Mon Sep 17 00:00:00 2001
From: Jon Turney <jon.turney@dronecode.org.uk>
Date: Mon, 30 Nov 2020 16:58:02 +0000
Subject: [PATCH] Fix building of utils testsuite

---
 winsup/utils/path.cc | 4 ++++
 winsup/utils/path.h  | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/winsup/utils/path.cc b/winsup/utils/path.cc
index d8c208123..4c1bb4029 100644
--- a/winsup/utils/path.cc
+++ b/winsup/utils/path.cc
@@ -824,8 +824,10 @@ vcygpath (const char *cwd, const char *s, va_list v)
   size_t max_len = 0;
   mnt_t *m, *match = NULL;
 
+#ifndef TESTSUITE
   if (!max_mount_entry)
     read_mounts ();
+#endif
   char *path;
   if (s[0] == '.' && isslash (s[1]))
     s += 2;
@@ -912,8 +914,10 @@ extern "C" FILE *
 setmntent (const char *, const char *)
 {
   m = mount_table;
+#ifndef TESTSUITE
   if (!max_mount_entry)
     read_mounts ();
+#endif
   return NULL;
 }
 
diff --git a/winsup/utils/path.h b/winsup/utils/path.h
index af5deeba6..a1840a003 100644
--- a/winsup/utils/path.h
+++ b/winsup/utils/path.h
@@ -24,8 +24,8 @@ bool from_fstab_line (mnt_t *m, char *line, bool user);
 
 #ifndef TESTSUITE
 extern mnt_t mount_table[255];
-#endif
 extern int max_mount_entry;
+#endif
 
 #ifndef SYMLINK_MAX
 #define SYMLINK_MAX 4095  /* PATH_MAX - 1 */
-- 
2.29.2


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

* Re: [PATCH] Use automake (v3)
  2020-11-30 17:02     ` Jon Turney
@ 2020-12-01  9:18       ` Corinna Vinschen
  2020-12-01 10:07         ` Corinna Vinschen
  2020-12-02 15:36         ` Jon Turney
  0 siblings, 2 replies; 15+ messages in thread
From: Corinna Vinschen @ 2020-12-01  9:18 UTC (permalink / raw)
  To: cygwin-patches

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

Hi Jon,

On Nov 30 17:02, Jon Turney wrote:
> On 30/11/2020 10:47, Corinna Vinschen wrote:
> > On Nov 30 11:25, Corinna Vinschen wrote:
> > 
> > Also, after applying the patch and autogen-ing, a full build from
> > top-level fails with some warnings and a final undefined symbol:
> 
> The warnings are expected at this stage.
> 
> > make[5]: Entering directory '[...]/x86_64-pc-cygwin/winsup/utils/mingw'
> >    CXX      ../bloda.o
> >    CXX      ../cygcheck.o
> >    CXX      ../dump_setup.o
> >    CXX      ../ldh.o
> >    CXX      ../path.o
> >    CXX      ../cygwin-console-helper.o
> >    CXX      ../path_testsuite-path.o
> >    CXX      ../strace.o
> >    CXX      ../path_testsuite-testsuite.o
> > [...]/winsup/utils/mingw/../testsuite.cc:18: warning: "TESTSUITE" redefined
> >     18 | #define TESTSUITE
> 
> This redefinition should probably be inside #ifndef TESTSUITE/#endif
> 
> > <command-line>: note: this is the location of the previous definition
> >    CXXLD    cygwin-console-helper.exe
> >    CXXLD    ldh.exe
> > In file included from [...]/winsup/utils/mingw/../path.cc:263:
> > [...]/winsup/utils/mingw/../testsuite.h:22:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
> >     22 | #define TESTSUITE_ROOT "X:\\xyzroot"
> 
> I'm not sure how to restructure things to avoid this warning.
> 
> The '-Wno-error=write-strings' flag is added when building this test to
> avoid this being fatal.
> 
> >    CXXLD    path-testsuite.exe
> > /usr/lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld: ../path_testsuite-path.o:path.cc:(.rdata$.refptr.max_mount_entry[.refptr.max_mount_entry]+0x0): undefined reference to `max_mount_entry'
> 
> This is a bit puzzling.  I don't get this when building locally, but idk why
> since there is only a tentative definition of this variable.
> 
> I'm not sure how this being built is changed by automaking to stop it
> working for you (perhaps optimization flags are now being used?)
> 
> Perhaps the attached helps, although what is getting stubbed out when
> testing could be clearer.

It helps to build the whole lot.  The warnings are still generated.
I applied the attached patch to avoid the warnings when building
path-testsuite.exe.  Still TODO are the warnings generated when 
building libltp, though.

What bugs me is that the mingw executables are built in utils/mingw,
but the object files are still in utils.  Any problem generating the
object files in utils/mingw, too?


Thanks,
Corinna

[-- Attachment #2: 0001-Cygwin-fix-remaining-warnings-building-path-testsuit.patch --]
[-- Type: text/plain, Size: 3023 bytes --]

From d9445d0fcbea11a9240141a5234b3ff5f0de5f63 Mon Sep 17 00:00:00 2001
From: Corinna Vinschen <corinna@vinschen.de>
Date: Tue, 1 Dec 2020 10:10:40 +0100
Subject: [PATCH] Cygwin: fix remaining warnings building path-testsuite.exe

---
 winsup/utils/path.cc      |  6 ++----
 winsup/utils/testsuite.cc |  2 ++
 winsup/utils/testsuite.h  | 12 ++++++------
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/winsup/utils/path.cc b/winsup/utils/path.cc
index 4c1bb4029da5..29344be02033 100644
--- a/winsup/utils/path.cc
+++ b/winsup/utils/path.cc
@@ -559,6 +559,7 @@ from_fstab (bool user, PWCHAR path, PWCHAR path_end)
 
 #ifndef FSTAB_ONLY
 
+#ifndef TESTSUITE
 static int
 mnt_sort (const void *a, const void *b)
 {
@@ -580,9 +581,6 @@ extern "C" WCHAR cygwin_dll_path[];
 static void
 read_mounts ()
 {
-/* If TESTSUITE is defined, bypass this whole function as a harness
-   mount table will be provided.  */
-#ifndef TESTSUITE
   HKEY setup_key;
   LONG ret;
   DWORD len;
@@ -654,8 +652,8 @@ read_mounts ()
   from_fstab (false, path, path_end);
   from_fstab (true, path, path_end);
   qsort (mount_table, max_mount_entry, sizeof (mnt_t), mnt_sort);
-#endif /* !defined(TESTSUITE) */
 }
+#endif /* !defined(TESTSUITE) */
 
 /* Return non-zero if PATH1 is a prefix of PATH2.
    Both are assumed to be of the same path style and / vs \ usage.
diff --git a/winsup/utils/testsuite.cc b/winsup/utils/testsuite.cc
index c0a800b01e86..23ed8e0d81c0 100644
--- a/winsup/utils/testsuite.cc
+++ b/winsup/utils/testsuite.cc
@@ -15,7 +15,9 @@ details. */
 #include <unistd.h>
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
+#ifndef TESTSUITE
 #define TESTSUITE
+#endif
 #include "testsuite.h"
 
 typedef struct
diff --git a/winsup/utils/testsuite.h b/winsup/utils/testsuite.h
index d0a47b23aa9f..0dd6315398de 100644
--- a/winsup/utils/testsuite.h
+++ b/winsup/utils/testsuite.h
@@ -30,12 +30,12 @@ details. */
 #if defined(TESTSUITE_MOUNT_TABLE)
 static mnt_t mount_table[] = {
 /* native                 posix               flags */
- { TESTSUITE_ROOT,        (char*)"/",                MOUNT_SYSTEM},
- { "O:\\other",           (char*)"/otherdir",        MOUNT_SYSTEM},
- { "S:\\some\\dir",       (char*)"/somedir",         MOUNT_SYSTEM},
- { TESTSUITE_ROOT"\\bin", (char*)"/usr/bin",         MOUNT_SYSTEM},
- { TESTSUITE_ROOT"\\lib", (char*)"/usr/lib",         MOUNT_SYSTEM},
- { ".",                   (char*)TESTSUITE_CYGDRIVE, MOUNT_SYSTEM | MOUNT_CYGDRIVE},
+ { (char*)TESTSUITE_ROOT,        (char*)"/",                MOUNT_SYSTEM},
+ { (char*)"O:\\other",           (char*)"/otherdir",        MOUNT_SYSTEM},
+ { (char*)"S:\\some\\dir",       (char*)"/somedir",         MOUNT_SYSTEM},
+ { (char*)TESTSUITE_ROOT"\\bin", (char*)"/usr/bin",         MOUNT_SYSTEM},
+ { (char*)TESTSUITE_ROOT"\\lib", (char*)"/usr/lib",         MOUNT_SYSTEM},
+ { (char*)".",                   (char*)TESTSUITE_CYGDRIVE, MOUNT_SYSTEM | MOUNT_CYGDRIVE},
  { NULL,                  (char*)NULL,               0}
 };
 
-- 
2.26.2


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

* Re: [PATCH] Use automake (v3)
  2020-12-01  9:18       ` Corinna Vinschen
@ 2020-12-01 10:07         ` Corinna Vinschen
  2020-12-02 16:08           ` Jon Turney
  2020-12-02 15:36         ` Jon Turney
  1 sibling, 1 reply; 15+ messages in thread
From: Corinna Vinschen @ 2020-12-01 10:07 UTC (permalink / raw)
  To: cygwin-patches

On Dec  1 10:18, Corinna Vinschen wrote:
> Hi Jon,
> 
> On Nov 30 17:02, Jon Turney wrote:
> > On 30/11/2020 10:47, Corinna Vinschen wrote:
> > [...]
> > >    CXXLD    path-testsuite.exe
> > > /usr/lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld: ../path_testsuite-path.o:path.cc:(.rdata$.refptr.max_mount_entry[.refptr.max_mount_entry]+0x0): undefined reference to `max_mount_entry'
> > 
> > This is a bit puzzling.  I don't get this when building locally, but idk why
> > since there is only a tentative definition of this variable.
> > 
> > I'm not sure how this being built is changed by automaking to stop it
> > working for you (perhaps optimization flags are now being used?)
> > 
> > Perhaps the attached helps, although what is getting stubbed out when
> > testing could be clearer.
> 
> It helps to build the whole lot.  The warnings are still generated.
> I applied the attached patch to avoid the warnings when building
> path-testsuite.exe.  Still TODO are the warnings generated when 
> building libltp, though.
> 
> What bugs me is that the mingw executables are built in utils/mingw,
> but the object files are still in utils.  Any problem generating the
> object files in utils/mingw, too?

I also don't like how test-driver is generated in the toplevel
source dir.  It should either be generated in source level winsup,
if it's a file to be added to the repo (like aclocal.m4, etc), or,
if generated at runtime evey time, it should go into the build dir,
me thinks.


Corinna

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

* Re: [PATCH] Use automake (v3)
  2020-12-01  9:18       ` Corinna Vinschen
  2020-12-01 10:07         ` Corinna Vinschen
@ 2020-12-02 15:36         ` Jon Turney
  2020-12-02 17:05           ` Corinna Vinschen
  1 sibling, 1 reply; 15+ messages in thread
From: Jon Turney @ 2020-12-02 15:36 UTC (permalink / raw)
  To: Cygwin Patches

On 01/12/2020 09:18, Corinna Vinschen wrote:
> 
> What bugs me is that the mingw executables are built in utils/mingw,
> but the object files are still in utils.  Any problem generating the
> object files in utils/mingw, too?

Not easily.

This behaviour can be turned off by not using the 'subdir-objects' 
automake option.

But then automake warns that option is disabled (since it's going to be 
the default in future).

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

* Re: [PATCH] Use automake (v3)
  2020-12-01 10:07         ` Corinna Vinschen
@ 2020-12-02 16:08           ` Jon Turney
  2020-12-02 17:00             ` Corinna Vinschen
  0 siblings, 1 reply; 15+ messages in thread
From: Jon Turney @ 2020-12-02 16:08 UTC (permalink / raw)
  To: Cygwin Patches

On 01/12/2020 10:07, Corinna Vinschen wrote:
> 
> I also don't like how test-driver is generated in the toplevel
> source dir.  It should either be generated in source level winsup,

I assume the placement of this file is controlled by AC_CONFIG_AUX_DIR.

> if it's a file to be added to the repo (like aclocal.m4, etc), or,
> if generated at runtime evey time, it should go into the build dir,
> me thinks.

I'm using automake 1.11.6, to match the version used by newlib, which 
doesn't seem to generate this file.

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

* Re: [PATCH] Use automake (v3)
  2020-12-02 16:08           ` Jon Turney
@ 2020-12-02 17:00             ` Corinna Vinschen
  0 siblings, 0 replies; 15+ messages in thread
From: Corinna Vinschen @ 2020-12-02 17:00 UTC (permalink / raw)
  To: cygwin-patches

On Dec  2 16:08, Jon Turney wrote:
> On 01/12/2020 10:07, Corinna Vinschen wrote:
> > 
> > I also don't like how test-driver is generated in the toplevel
> > source dir.  It should either be generated in source level winsup,
> 
> I assume the placement of this file is controlled by AC_CONFIG_AUX_DIR.
> 
> > if it's a file to be added to the repo (like aclocal.m4, etc), or,
> > if generated at runtime evey time, it should go into the build dir,
> > me thinks.
> 
> I'm using automake 1.11.6, to match the version used by newlib, which
> doesn't seem to generate this file.

Ok.  I noticed the file is in binutils/gdb toplevel as well, so never
mind that.


Corinna

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

* Re: [PATCH] Use automake (v3)
  2020-12-02 15:36         ` Jon Turney
@ 2020-12-02 17:05           ` Corinna Vinschen
  2020-12-02 18:03             ` Jon Turney
  0 siblings, 1 reply; 15+ messages in thread
From: Corinna Vinschen @ 2020-12-02 17:05 UTC (permalink / raw)
  To: cygwin-patches

On Dec  2 15:36, Jon Turney wrote:
> On 01/12/2020 09:18, Corinna Vinschen wrote:
> > 
> > What bugs me is that the mingw executables are built in utils/mingw,
> > but the object files are still in utils.  Any problem generating the
> > object files in utils/mingw, too?
> 
> Not easily.
> 
> This behaviour can be turned off by not using the 'subdir-objects' automake
> option.
> 
> But then automake warns that option is disabled (since it's going to be the
> default in future).

So why not just move the mingw source files to utils/mingw, too?


Corinna

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

* Re: [PATCH] Use automake (v3)
  2020-12-02 17:05           ` Corinna Vinschen
@ 2020-12-02 18:03             ` Jon Turney
  2020-12-02 18:33               ` Yaakov Selkowitz
  0 siblings, 1 reply; 15+ messages in thread
From: Jon Turney @ 2020-12-02 18:03 UTC (permalink / raw)
  To: Cygwin Patches

On 02/12/2020 17:05, Corinna Vinschen via Cygwin-patches wrote:
> On Dec  2 15:36, Jon Turney wrote:
>> On 01/12/2020 09:18, Corinna Vinschen wrote:
>>>
>>> What bugs me is that the mingw executables are built in utils/mingw,
>>> but the object files are still in utils.  Any problem generating the
>>> object files in utils/mingw, too?
>>
>> Not easily.
>>
>> This behaviour can be turned off by not using the 'subdir-objects' automake
>> option.
>>
>> But then automake warns that option is disabled (since it's going to be the
>> default in future).
> 
> So why not just move the mingw source files to utils/mingw, too?

There's probably some scope for doing that, but not in all cases, as 
some files are built multiple times with different compilers and/or flags.

e.g. path.cc is built with a cygwin compiler and -DFSTAB as part of 
mount, with a MinGW compiler as part of cygcheck, and with a MinGW 
compiler and -DTESTSUITE as part of path-testsuite.

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

* Re: [PATCH] Use automake (v3)
  2020-12-02 18:03             ` Jon Turney
@ 2020-12-02 18:33               ` Yaakov Selkowitz
  2020-12-02 19:03                 ` Corinna Vinschen
  0 siblings, 1 reply; 15+ messages in thread
From: Yaakov Selkowitz @ 2020-12-02 18:33 UTC (permalink / raw)
  To: Cygwin Patches

On Wed, 2020-12-02 at 18:03 +0000, Jon Turney wrote:
> On 02/12/2020 17:05, Corinna Vinschen via Cygwin-patches wrote:
> > On Dec  2 15:36, Jon Turney wrote:
> > > On 01/12/2020 09:18, Corinna Vinschen wrote:
> > > > What bugs me is that the mingw executables are built in
> > > > utils/mingw,
> > > > but the object files are still in utils.  Any problem
> > > > generating the
> > > > object files in utils/mingw, too?
> > > 
> > > Not easily.
> > > 
> > > This behaviour can be turned off by not using the 'subdir-
> > > objects' automake
> > > option.
> > > 
> > > But then automake warns that option is disabled (since it's going
> > > to be the
> > > default in future).
> > 
> > So why not just move the mingw source files to utils/mingw, too?
> 
> There's probably some scope for doing that, but not in all cases, as 
> some files are built multiple times with different compilers and/or
> flags.
> 
> e.g. path.cc is built with a cygwin compiler and -DFSTAB as part of 
> mount, with a MinGW compiler as part of cygcheck, and with a MinGW 
> compiler and -DTESTSUITE as part of path-testsuite.

Then something like:

$ cat > winsup/utils/mingw/path.cc <<_EOF
#define MINGW // whatever is needed here...
#include "../path.cc"
_EOF

??

-- 
Yaakov


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

* Re: [PATCH] Use automake (v3)
  2020-12-02 18:33               ` Yaakov Selkowitz
@ 2020-12-02 19:03                 ` Corinna Vinschen
  2020-12-08 15:50                   ` Jon Turney
  0 siblings, 1 reply; 15+ messages in thread
From: Corinna Vinschen @ 2020-12-02 19:03 UTC (permalink / raw)
  To: cygwin-patches

On Dec  2 13:33, Yaakov Selkowitz via Cygwin-patches wrote:
> On Wed, 2020-12-02 at 18:03 +0000, Jon Turney wrote:
> > On 02/12/2020 17:05, Corinna Vinschen via Cygwin-patches wrote:
> > > On Dec  2 15:36, Jon Turney wrote:
> > > > On 01/12/2020 09:18, Corinna Vinschen wrote:
> > > > > What bugs me is that the mingw executables are built in
> > > > > utils/mingw,
> > > > > but the object files are still in utils.  Any problem
> > > > > generating the
> > > > > object files in utils/mingw, too?
> > > > 
> > > > Not easily.
> > > > 
> > > > This behaviour can be turned off by not using the 'subdir-
> > > > objects' automake
> > > > option.
> > > > 
> > > > But then automake warns that option is disabled (since it's going
> > > > to be the
> > > > default in future).
> > > 
> > > So why not just move the mingw source files to utils/mingw, too?
> > 
> > There's probably some scope for doing that, but not in all cases, as 
> > some files are built multiple times with different compilers and/or
> > flags.
> > 
> > e.g. path.cc is built with a cygwin compiler and -DFSTAB as part of 
> > mount, with a MinGW compiler as part of cygcheck, and with a MinGW 
> > compiler and -DTESTSUITE as part of path-testsuite.
> 
> Then something like:
> 
> $ cat > winsup/utils/mingw/path.cc <<_EOF
> #define MINGW // whatever is needed here...
> #include "../path.cc"
> _EOF
> 
> ??

+1

> 
> -- 
> Yaakov

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

* Re: [PATCH] Use automake (v3)
  2020-12-02 19:03                 ` Corinna Vinschen
@ 2020-12-08 15:50                   ` Jon Turney
  0 siblings, 0 replies; 15+ messages in thread
From: Jon Turney @ 2020-12-08 15:50 UTC (permalink / raw)
  To: Cygwin Patches

On 02/12/2020 19:03, Corinna Vinschen via Cygwin-patches wrote:
> On Dec  2 13:33, Yaakov Selkowitz via Cygwin-patches wrote:
>> On Wed, 2020-12-02 at 18:03 +0000, Jon Turney wrote:
>>> On 02/12/2020 17:05, Corinna Vinschen via Cygwin-patches wrote:
>>>> On Dec  2 15:36, Jon Turney wrote:
>>>>> On 01/12/2020 09:18, Corinna Vinschen wrote:
>>>>>> What bugs me is that the mingw executables are built in
>>>>>> utils/mingw,
>>>>>> but the object files are still in utils.  Any problem
>>>>>> generating the
>>>>>> object files in utils/mingw, too?
>>>>>
>>>>> Not easily.
>>>>>
>>>>> This behaviour can be turned off by not using the 'subdir-
>>>>> objects' automake
>>>>> option.
>>>>>
>>>>> But then automake warns that option is disabled (since it's going
>>>>> to be the
>>>>> default in future).
>>>>
>>>> So why not just move the mingw source files to utils/mingw, too?
>>>
>>> There's probably some scope for doing that, but not in all cases, as
>>> some files are built multiple times with different compilers and/or
>>> flags.
>>>
>>> e.g. path.cc is built with a cygwin compiler and -DFSTAB as part of
>>> mount, with a MinGW compiler as part of cygcheck, and with a MinGW
>>> compiler and -DTESTSUITE as part of path-testsuite.
>>
>> Then something like:
>>
>> $ cat > winsup/utils/mingw/path.cc <<_EOF
>> #define MINGW // whatever is needed here...
>> #include "../path.cc"
>> _EOF
>>
>> ??
> 
> +1

Sure, there are plenty of ways of rearranging the code to address this.

I'm not sure I see what the benefit of that additional complexity is.


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

end of thread, other threads:[~2020-12-08 15:50 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-24 13:37 [PATCH] Use automake (v3) Jon Turney
2020-11-30 10:25 ` Corinna Vinschen
2020-11-30 10:47   ` Corinna Vinschen
2020-11-30 17:02     ` Jon Turney
2020-12-01  9:18       ` Corinna Vinschen
2020-12-01 10:07         ` Corinna Vinschen
2020-12-02 16:08           ` Jon Turney
2020-12-02 17:00             ` Corinna Vinschen
2020-12-02 15:36         ` Jon Turney
2020-12-02 17:05           ` Corinna Vinschen
2020-12-02 18:03             ` Jon Turney
2020-12-02 18:33               ` Yaakov Selkowitz
2020-12-02 19:03                 ` Corinna Vinschen
2020-12-08 15:50                   ` Jon Turney
2020-11-30 17:01   ` Jon Turney

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).