--- origsrc/tcl8.6.12/.github/workflows/msys2-build.yml	1970-01-01 01:00:00.000000000 +0100
+++ src/tcl8.6.12/.github/workflows/msys2-build.yml	2021-11-10 13:28:26.000000000 +0100
@@ -0,0 +1,33 @@
+name: msys2
+
+on:
+  push:
+
+jobs:
+  msys2:
+    runs-on: windows-latest
+
+    defaults:
+      run:
+        shell: msys2 {0}
+        working-directory: unix
+
+    steps:
+      - name: Init MSYS
+        uses: msys2/setup-msys2@v2
+        with:
+          msystem: MSYS
+          install: git base-devel msys2-devel zlib
+          update: true
+      - name: Checkout
+        uses: actions/checkout@v2
+      - name: Build
+        run: |
+          autoreconf -vfi
+          ./configure -C --prefix=/usr --enable-64bit || { cat config.log; cat config.cache; exit 1; }
+          make
+      - name: Run Tests (ignoring test io-53.4.1 which hangs)
+        run: make test
+        env:
+          ERROR_ON_FAILURES: 1
+          TESTFLAGS: -skip io-53.4.1
--- origsrc/tcl8.6.12/.github/workflows/win-build.yml	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/.github/workflows/win-build.yml	2021-11-10 13:28:26.000000000 +0100
@@ -3,43 +3,6 @@ on: [push]
 env:
   ERROR_ON_FAILURES: 1
 jobs:
-  msvc:
-    runs-on: windows-latest
-    defaults:
-      run:
-        shell: powershell
-        working-directory: win
-    strategy:
-      matrix:
-        cfgopt:
-          - ""
-          - "OPTS=static,msvcrt"
-          - "OPTS=symbols"
-          - "OPTS=memdbg"
-    # Using powershell means we need to explicitly stop on failure
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-      - name: Init MSVC
-        uses: ilammy/msvc-dev-cmd@v1
-      - name: Build ${{ matrix.cfgopt }}
-        run: |
-          &nmake -f makefile.vc ${{ matrix.cfgopt }} all
-          if ($lastexitcode -ne 0) {
-             throw "nmake exit code: $lastexitcode"
-          }
-      - name: Build Test Harness ${{ matrix.cfgopt }}
-        run: |
-          &nmake -f makefile.vc ${{ matrix.cfgopt }} tcltest
-          if ($lastexitcode -ne 0) {
-             throw "nmake exit code: $lastexitcode"
-          }
-      - name: Run Tests ${{ matrix.cfgopt }}
-        run: |
-          &nmake -f makefile.vc ${{ matrix.cfgopt }} test
-          if ($lastexitcode -ne 0) {
-             throw "nmake exit code: $lastexitcode"
-          }
   gcc:
     runs-on: windows-latest
     defaults:
--- origsrc/tcl8.6.12/generic/tcl.h	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tcl.h	2021-11-10 13:28:30.000000000 +0100
@@ -462,7 +462,7 @@ typedef unsigned TCL_WIDE_INT_TYPE	Tcl_W
 #   else
 	typedef struct _stat32i64 Tcl_StatBuf;
 #   endif /* _MSC_VER < 1400 */
-#elif defined(__CYGWIN__)
+#elif 0
     typedef struct {
 	dev_t st_dev;
 	unsigned short st_ino;
--- origsrc/tcl8.6.12/generic/tclBasic.c	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclBasic.c	2021-11-10 13:28:30.000000000 +0100
@@ -434,6 +434,109 @@ TclFinalizeEvaluation(void)
 /*
  *----------------------------------------------------------------------
  *
+ * buildInfoObjCmd --
+ *
+ *	Implements tcl::build-info command.
+ *
+ * Results:
+ *	None.
+ *
+ * Side effects:
+ *	None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+buildInfoObjCmd(
+    void *clientData,
+    Tcl_Interp *interp,		/* Current interpreter. */
+    int objc,			/* Number of arguments. */
+    Tcl_Obj *const objv[])	/* Argument objects. */
+{
+    if (objc > 2) {
+	Tcl_WrongNumArgs(interp, 1, objv, "?option?");
+	return TCL_ERROR;
+    }
+    if (objc == 2) {
+	int len;
+	const char *arg = TclGetStringFromObj(objv[1], &len);
+	const char *p;
+	if (len == 7 && !strcmp(arg, "version")) {
+	    char buf[80];
+	    p = strchr((char *)clientData, '.');
+	    if (p) {
+		const char *q = strchr(p+1, '.');
+		const char *r = strchr(p+1, '+');
+		p = (q < r) ? q : r;
+	    }
+	    if (p) {
+		memcpy(buf, (char *)clientData, p - (char *)clientData);
+		buf[p - (char *)clientData] = '\0';
+		Tcl_AppendResult(interp, buf, NULL);
+	    }
+	    return TCL_OK;
+	} else if (len == 10 && !strcmp(arg, "patchlevel")) {
+	    char buf[80];
+	    p = strchr((char *)clientData, '+');
+	    if (p) {
+		memcpy(buf, (char *)clientData, p - (char *)clientData);
+		buf[p - (char *)clientData] = '\0';
+		Tcl_AppendResult(interp, buf, NULL);
+	    }
+	    return TCL_OK;
+	} else if (len == 6 && !strcmp(arg, "commit")) {
+	    const char *q, *p = strchr((char *)clientData, '+');
+	    if (p) {
+		if ((q = strchr(p, '.'))) {
+		    char buf[80];
+		    memcpy(buf, p+1, q - p - 1);
+		    buf[q - p - 1] = '\0';
+		    Tcl_AppendResult(interp, buf, NULL);
+		} else {
+		    Tcl_AppendResult(interp, p+1, NULL);
+		}
+	    }
+	    return TCL_OK;
+	} else if (len == 8 && !strcmp(arg, "compiler")) {
+	    p = strchr((char *)clientData, '.');
+	    while (p) {
+		if (!strncmp(p+1, "clang-", 6) || !strncmp(p+1, "gcc-", 4)
+			    || !strncmp(p+1, "icc-", 4) || !strncmp(p+1, "msvc-", 5)) {
+		    const char *q = strchr(p+1, '.');
+		    if (q) {
+			char buf[16];
+			memcpy(buf, p+1, q - p - 1);
+			buf[q - p - 1] = '\0';
+			Tcl_AppendResult(interp, buf, NULL);
+		    } else {
+			Tcl_AppendResult(interp, p+1, NULL);
+		    }
+		    return TCL_OK;
+		}
+		p = strchr(p+1, '.');
+	    }
+	    Tcl_AppendResult(interp, "0", NULL);
+	    return TCL_OK;
+	}
+	p = strchr((char *)clientData, '.');
+	while (p) {
+	    if (!strncmp(p+1, arg, len) && ((p[len+1] == '.') || (p[len+1] == '\0'))) {
+		Tcl_AppendResult(interp, "1", NULL);
+		return TCL_OK;
+	    }
+	    p = strchr(p+1, '.');
+	}
+	Tcl_AppendResult(interp, "0", NULL);
+	return TCL_OK;
+    }
+    Tcl_AppendResult(interp, (char *)clientData, NULL);
+    return TCL_OK;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
  * Tcl_CreateInterp --
  *
  *	Create a new TCL command interpreter.
@@ -471,8 +574,7 @@ Tcl_CreateInterp(void)
 #endif /* TCL_COMPILE_STATS */
     char mathFuncName[32];
     CallFrame *framePtr;
-
-    TclInitSubsystems();
+    const char *version = TclInitSubsystems();
 
     /*
      * Panic if someone updated the CallFrame structure without also updating
@@ -987,6 +1089,8 @@ Tcl_CreateInterp(void)
      */
 
     Tcl_PkgProvideEx(interp, "Tcl", TCL_PATCH_LEVEL, &tclStubs);
+    Tcl_CreateObjCommand(interp, "::tcl::build-info",
+	    buildInfoObjCmd, (void *)version, NULL);
 
     if (TclTommath_Init(interp) != TCL_OK) {
 	Tcl_Panic("%s", Tcl_GetString(Tcl_GetObjResult(interp)));
--- origsrc/tcl8.6.12/generic/tclCmdAH.c	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclCmdAH.c	2021-11-10 13:28:30.000000000 +0100
@@ -1810,7 +1810,7 @@ FileAttrIsOwnedCmd(
     int objc,
     Tcl_Obj *const objv[])
 {
-#ifdef __CYGWIN__
+#if 0
 #define geteuid() (short)(geteuid)()
 #endif
 #if !defined(_WIN32)
--- origsrc/tcl8.6.12/generic/tclEvent.c	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclEvent.c	2021-11-10 13:28:30.000000000 +0100
@@ -14,6 +14,9 @@
  */
 
 #include "tclInt.h"
+#ifndef _WIN32
+#include "tclUuid.h"
+#endif
 
 /*
  * The data structure below is used to report background errors. One such
@@ -1021,7 +1024,92 @@ Tcl_Exit(
  *-------------------------------------------------------------------------
  */
 
-void
+MODULE_SCOPE const TclStubs tclStubs;
+
+#ifndef STRINGIFY
+#  define STRINGIFY(x) STRINGIFY1(x)
+#  define STRINGIFY1(x) #x
+#endif
+
+static const struct {
+    const TclStubs *stubs;
+    const char version[256];
+} stubInfo = {
+    &tclStubs, {TCL_PATCH_LEVEL "+" STRINGIFY(TCL_VERSION_UUID)
+#if defined(__clang__) && defined(__clang_major__)
+	    ".clang-" STRINGIFY(__clang_major__)
+#if __clang_minor__ < 10
+	    "0"
+#endif
+	    STRINGIFY(__clang_minor__)
+#endif
+#ifdef TCL_COMPILE_DEBUG
+	    ".compiledebug"
+#endif
+#ifdef TCL_COMPILE_STATS
+	    ".compilestats"
+#endif
+#if defined(__cplusplus) && !defined(__OBJC__)
+	    ".cplusplus"
+#endif
+#if defined(__CYGWIN__)
+	    ".cygwin"
+#endif
+#ifndef NDEBUG
+	    ".debug"
+#endif
+#if !defined(__clang__) && !defined(__INTEL_COMPILER) && defined(__GNUC__)
+	    ".gcc-" STRINGIFY(__GNUC__)
+#if __GNUC_MINOR__ < 10
+	    "0"
+#endif
+	    STRINGIFY(__GNUC_MINOR__)
+#endif
+#ifdef __INTEL_COMPILER
+	    ".icc-" STRINGIFY(__INTEL_COMPILER)
+#endif
+#if (defined(_WIN32) && !defined(_WIN64)) || (ULONG_MAX == 0xffffffffUL)
+	    ".ilp32"
+#endif
+#ifdef TCL_MEM_DEBUG
+	    ".memdebug"
+#endif
+#if defined(_MSC_VER)
+	    ".msvc-" STRINGIFY(_MSC_VER)
+#endif
+#ifdef USE_NMAKE
+	    ".nmake"
+#endif
+#ifdef TCL_NO_DEPRECATED
+	    ".no-deprecate"
+#endif
+#if !TCL_THREADS
+	    ".no-thread"
+#endif
+#ifndef TCL_CFG_OPTIMIZED
+	    ".no-optimize"
+#endif
+#ifdef __OBJC__
+	    ".objective-c"
+#if defined(__cplusplus)
+	    "plusplus"
+#endif
+#endif
+#ifdef TCL_CFG_PROFILED
+	    ".profile"
+#endif
+#ifdef PURIFY
+	    ".purify"
+#endif
+#ifdef STATIC_BUILD
+	    ".static"
+#endif
+#if TCL_UTF_MAX < 4
+	    ".utf-16"
+#endif
+}};
+
+const char *
 TclInitSubsystems(void)
 {
     if (inExit != 0) {
@@ -1065,6 +1153,7 @@ TclInitSubsystems(void)
 	TclpInitUnlock();
     }
     TclInitNotifier();
+    return stubInfo.version;
 }
 
 /*
--- origsrc/tcl8.6.12/generic/tclFCmd.c	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclFCmd.c	2021-11-10 13:28:30.000000000 +0100
@@ -523,7 +523,7 @@ CopyRenameOneFile(
 	 * 16 bits and we get collisions. See bug #2015723.
 	 */
 
-#if !defined(_WIN32) && !defined(__CYGWIN__)
+#if !defined(_WIN32)
 	if ((sourceStatBuf.st_ino != 0) && (targetStatBuf.st_ino != 0)) {
 	    if ((sourceStatBuf.st_ino == targetStatBuf.st_ino) &&
 		    (sourceStatBuf.st_dev == targetStatBuf.st_dev)) {
--- origsrc/tcl8.6.12/generic/tclFileName.c	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclFileName.c	2021-11-10 13:28:30.000000000 +0100
@@ -413,7 +413,6 @@ TclpGetNativePathType(
 
 	    if (path[0] == '/') {
 		++path;
-#if defined(__CYGWIN__) || defined(__QNX__)
 		/*
 		 * Check for "//" network path prefix
 		 */
@@ -422,7 +421,6 @@ TclpGetNativePathType(
 		    while (*path && *path != '/') {
 			++path;
 		    }
-#if defined(__CYGWIN__)
 		    /* UNC paths need to be followed by a share name */
 		    if (*path++ && (*path && *path != '/')) {
 			++path;
@@ -431,10 +429,7 @@ TclpGetNativePathType(
 			}
 		    } else {
 			path = origPath + 1;
-		    }
-#endif
-		}
-#endif
+		    }		}
 		if (driveNameLengthPtr != NULL) {
 		    /*
 		     * We need this addition in case the QNX or Cygwin code was used.
@@ -655,7 +650,6 @@ SplitUnixPath(
     if (*path == '/') {
 	Tcl_Obj *rootElt;
 	++path;
-#if defined(__CYGWIN__) || defined(__QNX__)
 	/*
 	 * Check for "//" network path prefix
 	 */
@@ -664,7 +658,6 @@ SplitUnixPath(
 	    while (*path && *path != '/') {
 		++path;
 	    }
-#if defined(__CYGWIN__)
 	    /* UNC paths need to be followed by a share name */
 	    if (*path++ && (*path && *path != '/')) {
 		++path;
@@ -674,9 +667,7 @@ SplitUnixPath(
 	    } else {
 		path = origPath + 1;
 	    }
-#endif
 	}
-#endif
 	rootElt = Tcl_NewStringObj(origPath, path - origPath);
 	Tcl_ListObjAppendElement(NULL, result, rootElt);
 	while (*path == '/') {
--- origsrc/tcl8.6.12/generic/tclInt.h	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclInt.h	2021-11-10 13:28:30.000000000 +0100
@@ -3031,7 +3031,7 @@ MODULE_SCOPE void	TclInitLimitSupport(Tc
 MODULE_SCOPE void	TclInitNamespaceSubsystem(void);
 MODULE_SCOPE void	TclInitNotifier(void);
 MODULE_SCOPE void	TclInitObjSubsystem(void);
-MODULE_SCOPE void	TclInitSubsystems(void);
+MODULE_SCOPE const char *TclInitSubsystems(void);
 MODULE_SCOPE int	TclInterpReady(Tcl_Interp *interp);
 MODULE_SCOPE int	TclIsBareword(int byte);
 MODULE_SCOPE Tcl_Obj *	TclJoinPath(int elements, Tcl_Obj * const objv[],
--- origsrc/tcl8.6.12/generic/tclIntPlatDecls.h	2021-11-04 16:05:44.000000000 +0100
+++ src/tcl8.6.12/generic/tclIntPlatDecls.h	2021-11-10 14:25:26.000000000 +0100
@@ -40,7 +40,7 @@ extern "C" {
  * Exported function declarations:
  */
 
-#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */
+#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
 /* 0 */
 EXTERN void		TclGetAndDetachPids(Tcl_Interp *interp,
 				Tcl_Channel chan);
@@ -116,7 +116,7 @@ EXTERN int		TclUnixOpenTemporaryFile(Tcl
 				Tcl_Obj *basenameObj, Tcl_Obj *extensionObj,
 				Tcl_Obj *resultingNameObj);
 #endif /* UNIX */
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
 /* 0 */
 EXTERN void		TclWinConvertError(DWORD errCode);
 /* 1 */
@@ -272,7 +272,7 @@ typedef struct TclIntPlatStubs {
     int magic;
     void *hooks;
 
-#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */
+#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
     void (*tclGetAndDetachPids) (Tcl_Interp *interp, Tcl_Channel chan); /* 0 */
     int (*tclpCloseFile) (TclFile file); /* 1 */
     Tcl_Channel (*tclpCreateCommandChannel) (TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr); /* 2 */
@@ -305,7 +305,7 @@ typedef struct TclIntPlatStubs {
     int (*tclWinCPUID) (unsigned int index, unsigned int *regs); /* 29 */
     int (*tclUnixOpenTemporaryFile) (Tcl_Obj *dirObj, Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, Tcl_Obj *resultingNameObj); /* 30 */
 #endif /* UNIX */
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
     void (*tclWinConvertError) (DWORD errCode); /* 0 */
     void (*tclWinConvertWSAError) (DWORD errCode); /* 1 */
     struct servent * (*tclWinGetServByName) (const char *nm, const char *proto); /* 2 */
@@ -385,7 +385,7 @@ extern const TclIntPlatStubs *tclIntPlat
  * Inline function declarations:
  */
 
-#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */
+#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
 #define TclGetAndDetachPids \
 	(tclIntPlatStubsPtr->tclGetAndDetachPids) /* 0 */
 #define TclpCloseFile \
@@ -441,7 +441,7 @@ extern const TclIntPlatStubs *tclIntPlat
 #define TclUnixOpenTemporaryFile \
 	(tclIntPlatStubsPtr->tclUnixOpenTemporaryFile) /* 30 */
 #endif /* UNIX */
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
 #define TclWinConvertError \
 	(tclIntPlatStubsPtr->tclWinConvertError) /* 0 */
 #define TclWinConvertWSAError \
@@ -595,6 +595,9 @@ extern const TclIntPlatStubs *tclIntPlat
 #else
 #   undef TclpGetPid
 #   define TclpGetPid(pid) ((unsigned long) (pid))
+#ifdef __CYGWIN__
+    MODULE_SCOPE void *TclWinGetTclInstance(void);
+#endif
 #endif
 
 #endif /* _TCLINTPLATDECLS */
--- origsrc/tcl8.6.12/generic/tclPanic.c	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/generic/tclPanic.c	2021-11-10 13:28:31.000000000 +0100
@@ -14,7 +14,7 @@
  */
 
 #include "tclInt.h"
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
     MODULE_SCOPE TCL_NORETURN void tclWinDebugPanic(const char *format, ...);
 #endif
 
@@ -23,7 +23,7 @@
  * procedure.
  */
 
-#if defined(__CYGWIN__)
+#if 0
 static TCL_NORETURN Tcl_PanicProc *panicProc = tclWinDebugPanic;
 #else
 static TCL_NORETURN1 Tcl_PanicProc *panicProc = NULL;
@@ -52,7 +52,7 @@ Tcl_SetPanicProc(
 #if defined(_WIN32)
     /* tclWinDebugPanic only installs if there is no panicProc yet. */
     if ((proc != tclWinDebugPanic) || (panicProc == NULL))
-#elif defined(__CYGWIN__)
+#elif 0
     if (proc == NULL)
 	panicProc = tclWinDebugPanic;
     else
@@ -106,7 +106,7 @@ Tcl_PanicVA(
 		arg8);
 	fprintf(stderr, "\n");
 	fflush(stderr);
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
 #   if defined(__GNUC__)
 	__builtin_trap();
 #   elif defined(_WIN64)
--- origsrc/tcl8.6.12/generic/tclPlatDecls.h	2021-11-04 16:05:44.000000000 +0100
+++ src/tcl8.6.12/generic/tclPlatDecls.h	2021-11-10 14:25:27.000000000 +0100
@@ -31,7 +31,7 @@
  * TCHAR is needed here for win32, so if it is not defined yet do it here.
  * This way, we don't need to include <tchar.h> just for one define.
  */
-#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(_TCHAR_DEFINED)
+#if defined(_WIN32) && !defined(_TCHAR_DEFINED)
 #   if defined(_UNICODE)
 	typedef wchar_t TCHAR;
 #   else
@@ -50,7 +50,7 @@ extern "C" {
  * Exported function declarations:
  */
 
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
 /* 0 */
 EXTERN TCHAR *		Tcl_WinUtfToTChar(const char *str, int len,
 				Tcl_DString *dsPtr);
@@ -77,7 +77,7 @@ typedef struct TclPlatStubs {
     int magic;
     void *hooks;
 
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
     TCHAR * (*tcl_WinUtfToTChar) (const char *str, int len, Tcl_DString *dsPtr); /* 0 */
     char * (*tcl_WinTCharToUtf) (const TCHAR *str, int len, Tcl_DString *dsPtr); /* 1 */
 #endif /* WIN */
@@ -100,7 +100,7 @@ extern const TclPlatStubs *tclPlatStubsP
  * Inline function declarations:
  */
 
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
 #define Tcl_WinUtfToTChar \
 	(tclPlatStubsPtr->tcl_WinUtfToTChar) /* 0 */
 #define Tcl_WinTCharToUtf \
--- origsrc/tcl8.6.12/generic/tclStubInit.c	2021-11-04 16:05:45.000000000 +0100
+++ src/tcl8.6.12/generic/tclStubInit.c	2021-11-10 14:25:27.000000000 +0100
@@ -137,7 +137,7 @@ static const char *TclGetStartupScriptFi
     return Tcl_GetString(path);
 }
 
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
 #undef TclWinNToHS
 #define TclWinNToHS winNToHS
 static unsigned short TclWinNToHS(unsigned short ns) {
@@ -161,7 +161,7 @@ static unsigned short TclWinNToHS(unsign
 #   define TclUnixOpenTemporaryFile 0
 #   define TclpReaddir 0
 #   define TclpIsAtty 0
-#elif defined(__CYGWIN__)
+#elif 0
 #   define TclpIsAtty isatty
 #   define TclWinSetInterfaces (void (*) (int))(void *)doNothing
 #   define TclWinAddProcess (void (*) (void *, unsigned int))(void *)doNothing
@@ -214,13 +214,23 @@ TclWinNoBackslash(char *path)
     return path;
 }
 
+#elif defined(__CYGWIN__)
+static void
+doNothing(void)
+{
+    /* dummy implementation, no need to do anything */
+}
+
 void *TclWinGetTclInstance()
 {
     void *hInstance = NULL;
     GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
-	    (const char *)&TclWinNoBackslash, &hInstance);
+	    (const char *)&doNothing, &hInstance);
     return hInstance;
 }
+#   define TclpLocaltime_unix TclpLocaltime
+#   define TclpGmtime_unix TclpGmtime
+#elif 0
 
 int
 TclpGetPid(Tcl_Pid pid)
@@ -228,12 +238,6 @@ TclpGetPid(Tcl_Pid pid)
     return (int) (size_t) pid;
 }
 
-static void
-doNothing(void)
-{
-    /* dummy implementation, no need to do anything */
-}
-
 char *
 Tcl_WinUtfToTChar(
     const char *string,
@@ -755,7 +759,7 @@ static const TclIntStubs tclIntStubs = {
 static const TclIntPlatStubs tclIntPlatStubs = {
     TCL_STUB_MAGIC,
     0,
-#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */
+#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
     TclGetAndDetachPids, /* 0 */
     TclpCloseFile, /* 1 */
     TclpCreateCommandChannel, /* 2 */
@@ -788,7 +792,7 @@ static const TclIntPlatStubs tclIntPlatS
     TclWinCPUID, /* 29 */
     TclUnixOpenTemporaryFile, /* 30 */
 #endif /* UNIX */
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
     TclWinConvertError, /* 0 */
     TclWinConvertWSAError, /* 1 */
     TclWinGetServByName, /* 2 */
@@ -859,7 +863,7 @@ static const TclIntPlatStubs tclIntPlatS
 static const TclPlatStubs tclPlatStubs = {
     TCL_STUB_MAGIC,
     0,
-#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
+#if defined(_WIN32) /* WIN */
     Tcl_WinUtfToTChar, /* 0 */
     Tcl_WinTCharToUtf, /* 1 */
 #endif /* WIN */
--- origsrc/tcl8.6.12/library/reg/pkgIndex.tcl	2021-10-29 19:08:07.000000000 +0200
+++ src/tcl8.6.12/library/reg/pkgIndex.tcl	2021-11-10 13:28:32.000000000 +0100
@@ -1,9 +1,18 @@
-if {![package vsatisfies [package provide Tcl] 8.5]} return
+if {![package vsatisfies [package provide Tcl] 8.5-]} return
 if {[info sharedlibextension] != ".dll"} return
-if {[::tcl::pkgconfig get debug]} {
-    package ifneeded registry 1.3.5 \
-            [list load [file join $dir tclreg13g.dll] Registry]
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+    package ifneeded registry 1.3.6 \
+	    [list load [file join $dir tcl9registry13.dll] Registry]
 } else {
-    package ifneeded registry 1.3.5 \
-            [list load [file join $dir tclreg13.dll] Registry]
+    package ifneeded registry 1.3.6 \
+	    [list load [file join $dir tclregistry13.dll] Registry]
+}
+if {![package vsatisfies [package provide Tcl] 8.5-]} return
+if {[info sharedlibextension] != ".dll"} return
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+    package ifneeded registry 1.3.6 \
+	    [list load [file join $dir tcl9registry13.dll] Registry]
+} else {
+    package ifneeded registry 1.3.6 \
+	    [list load [file join $dir tclregistry13.dll] Registry]
 }
--- origsrc/tcl8.6.12/manifest.uuid	2021-11-04 15:29:53.000000000 +0100
+++ src/tcl8.6.12/manifest.uuid	2021-11-10 13:37:55.000000000 +0100
@@ -1 +1 @@
-553f5049a7a3982bbd5ec1f9349f8105c1126f8ea696ec332e16a3cbb3d01323
+2e219577fb3767015386d80e0b14853a8a20b5b5e4e6055eeb2f9d59d509a61a
--- origsrc/tcl8.6.12/tests/chanio.test	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/tests/chanio.test	2021-11-10 13:28:33.000000000 +0100
@@ -5334,7 +5334,7 @@ test chan-io-40.1 {POSIX open access mod
 test chan-io-40.2 {POSIX open access modes: CREAT} -setup {
     file delete $path(test3)
 } -constraints {unix} -body {
-    set f [open $path(test3) {WRONLY CREAT} 0o600]
+    set f [open $path(test3) {WRONLY CREAT} 0o644]
     file stat $path(test3) stats
     set x [format 0o%03o [expr {$stats(mode) & 0o777}]]
     chan puts $f "line 1"
@@ -5343,7 +5343,7 @@ test chan-io-40.2 {POSIX open access mod
     lappend x [chan gets $f]
 } -cleanup {
     chan close $f
-} -result {0o600 {line 1}}
+} -result {0o644 {line 1}}
 test chan-io-40.3 {POSIX open access modes: CREAT} -setup {
     file delete $path(test3)
 } -constraints {unix umask} -body {
--- origsrc/tcl8.6.12/tests/cmdAH.test	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/tests/cmdAH.test	2021-11-10 13:28:33.000000000 +0100
@@ -327,15 +327,15 @@ test cmdAH-8.14 {Tcl_FileObjCmd: dirname
 test cmdAH-8.15 {Tcl_FileObjCmd: dirname} testsetplatform {
     testsetplatform unix
     file dirname //foo/bar
-} /foo
+} //foo/bar
 test cmdAH-8.16 {Tcl_FileObjCmd: dirname} testsetplatform {
     testsetplatform unix
     file dirname {//foo\/bar/baz}
-} {/foo\/bar}
+} {//foo\/bar}
 test cmdAH-8.17 {Tcl_FileObjCmd: dirname} testsetplatform {
     testsetplatform unix
     file dirname {//foo\/bar/baz/blat}
-} {/foo\/bar/baz}
+} {//foo\/bar/baz}
 test cmdAH-8.18 {Tcl_FileObjCmd: dirname} testsetplatform {
     testsetplatform unix
     file dirname /foo//
@@ -471,7 +471,7 @@ test cmdAH-9.14 {Tcl_FileObjCmd: tail} t
 test cmdAH-9.15 {Tcl_FileObjCmd: tail} testsetplatform {
     testsetplatform unix
     file tail //foo/bar
-} bar
+} {}
 test cmdAH-9.16 {Tcl_FileObjCmd: tail} testsetplatform {
     testsetplatform unix
     file tail {//foo\/bar/baz}
@@ -1407,7 +1407,7 @@ test cmdAH-27.4.1 {
 catch {testsetplatform $platform}
 removeFile $gorpfile
 set gorpfile [makeFile "Test string" gorp.file]
-catch {file attributes $gorpfile -permissions 0o765}
+catch {file attributes $gorpfile -permissions 0o644}
 
 # stat
 test cmdAH-28.1 {Tcl_FileObjCmd: stat} -returnCodes error -body {
@@ -1435,7 +1435,7 @@ test cmdAH-28.5 {Tcl_FileObjCmd: stat} -
 } -body {
     file stat $gorpfile stat
     format 0o%03o [expr {$stat(mode) & 0o777}]
-} -result 0o765
+} -result 0o644
 test cmdAH-28.6 {Tcl_FileObjCmd: stat} {
     list [catch {file stat _bogus_ stat} msg] [string tolower $msg] $errorCode
 } {1 {could not read "_bogus_": no such file or directory} {POSIX ENOENT {no such file or directory}}}
--- origsrc/tcl8.6.12/tests/fCmd.test	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/tests/fCmd.test	2021-11-10 13:28:33.000000000 +0100
@@ -384,7 +384,7 @@ test fCmd-4.14 {TclFileMakeDirsCmd: Tclp
     file delete -force foo
 } -constraints {unix notRoot} -body {
     file mkdir foo
-    file attr foo -perm 040000
+    file attr foo -perm 0o40000
     file mkdir foo/tf1
 } -returnCodes error -cleanup {
     file delete -force foo
@@ -697,11 +697,11 @@ test fCmd-6.30 {CopyRenameOneFile: TclpR
     cleanup $tmpspace
 } -constraints {unix notRoot} -body {
     file mkdir foo/bar
-    file attr foo -perm 040555
+    file attr foo -perm 0o40555
     file rename foo/bar $tmpspace
 } -returnCodes error -cleanup {
     catch {file delete [file join $tmpspace bar]}
-    catch {file attr foo -perm 040777}
+    catch {file attr foo -perm 0o40777}
     catch {file delete -force foo}
 } -match glob -result {*: permission denied}
 test fCmd-6.31 {CopyRenameOneFile: TclpDeleteFile passed} -setup {
@@ -754,7 +754,7 @@ test fCmd-8.1 {FileBasename: basename of
     -constraints {unix notRoot knownBug} -body {
     # Labelled knownBug because it is dangerous [Bug: 3881]
     file mkdir td1
-    file attr td1 -perm 040000
+    file attr td1 -perm 0o40000
     file rename ~$user td1
 } -returnCodes error -cleanup {
     file delete -force td1
@@ -773,7 +773,7 @@ test fCmd-9.1 {file rename: comprehensiv
 } -constraints {unix notRoot} -body {
     file mkdir td1
     file mkdir td2
-    file attr td2 -perm 040000
+    file attr td2 -perm 0o40000
     file rename td1 td2/
 } -returnCodes error -cleanup {
     file delete -force td2
--- origsrc/tcl8.6.12/tests/registry.test	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/tests/registry.test	2021-11-10 13:28:34.000000000 +0100
@@ -19,7 +19,7 @@ testConstraint reg 0
 if {[testConstraint win]} {
     if {![catch {
 	    ::tcltest::loadTestedCommands
-	    set ::regver [package require registry 1.3.5]
+	    set ::regver [package require registry 1.3.6]
 	}]} {
 	testConstraint reg 1
     }
@@ -33,7 +33,7 @@ testConstraint english [expr {
 
 test registry-1.0 {check if we are testing the right dll} {win reg} {
     set ::regver
-} {1.3.5}
+} {1.3.6}
 test registry-1.1 {argument parsing for registry command} {win reg} {
     list [catch {registry} msg] $msg
 } {1 {wrong # args: should be "registry ?-32bit|-64bit? option ?arg ...?"}}
--- origsrc/tcl8.6.12/tests/tcltest.test	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/tests/tcltest.test	2021-11-10 13:28:35.000000000 +0100
@@ -716,8 +716,8 @@ test tcltest-8.60 {::workingDirectory}
 
 switch -- $::tcl_platform(platform) {
     unix {
-	file attributes $notReadableDir -permissions 777
-	file attributes $notWriteableDir -permissions 777
+	file attributes $notReadableDir -permissions 0o777
+	file attributes $notWriteableDir -permissions 0o777
     }
     default {
 	catch {testchmod 0o777 $notWriteableDir}
--- origsrc/tcl8.6.12/tools/genStubs.tcl	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/tools/genStubs.tcl	2021-11-10 13:28:35.000000000 +0100
@@ -299,9 +299,6 @@ proc genStubs::addPlatformGuard {plat if
     switch $plat {
 	win {
 	    append text "#if defined(_WIN32)"
-	    if {$withCygwin} {
-		append text " || defined(__CYGWIN__)"
-	    }
 	    append text " /* WIN */\n${iftxt}"
 	    if {$eltxt ne ""} {
 		append text "#else /* WIN */\n${eltxt}"
@@ -310,9 +307,6 @@ proc genStubs::addPlatformGuard {plat if
 	}
 	unix {
 	    append text "#if !defined(_WIN32)"
-	    if {$withCygwin} {
-		append text " && !defined(__CYGWIN__)"
-	    }
 	    append text " && !defined(MAC_OSX_TCL)\
 		    /* UNIX */\n${iftxt}"
 	    if {$eltxt ne ""} {
@@ -336,9 +330,6 @@ proc genStubs::addPlatformGuard {plat if
 	}
 	x11 {
 	    append text "#if !(defined(_WIN32)"
-	    if {$withCygwin} {
-		append text " || defined(__CYGWIN__)"
-	    }
 	    append text " || defined(MAC_OSX_TK))\
 		    /* X11 */\n${iftxt}"
 	    if {$eltxt ne ""} {
--- origsrc/tcl8.6.12/unix/Makefile.in	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/unix/Makefile.in	2021-11-10 13:28:35.000000000 +0100
@@ -724,9 +724,6 @@ ${LIB_FILE}: ${STUB_LIB_FILE} ${OBJS}
 	@MAKE_LIB@
 
 ${STUB_LIB_FILE}: ${STUB_LIB_OBJS}
-	@if test "x${LIB_FILE}" = "xlibtcl${MAJOR_VERSION}.${MINOR_VERSION}.dll"; then \
-	    (cd ${TOP_DIR}/win; ${MAKE} winextensions); \
-	fi
 	rm -f $@
 	@MAKE_STUB_LIB@
 
@@ -1161,6 +1158,10 @@ tclAsync.o: $(GENERIC_DIR)/tclAsync.c
 tclBasic.o: $(GENERIC_DIR)/tclBasic.c $(COMPILEHDR) $(MATHHDRS) $(NREHDR)
 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclBasic.c
 
+tclUuid.h: $(TOP_DIR)/manifest.uuid
+	echo "#define TCL_VERSION_UUID \\" >$@
+	cat $(TOP_DIR)/manifest.uuid >>$@
+
 tclBinary.o: $(GENERIC_DIR)/tclBinary.c
 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclBinary.c
 
@@ -1215,7 +1216,7 @@ tclEnsemble.o: $(GENERIC_DIR)/tclEnsembl
 tclEnv.o: $(GENERIC_DIR)/tclEnv.c
 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclEnv.c
 
-tclEvent.o: $(GENERIC_DIR)/tclEvent.c
+tclEvent.o: $(GENERIC_DIR)/tclEvent.c tclUuid.h
 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclEvent.c
 
 tclExecute.o: $(GENERIC_DIR)/tclExecute.c $(COMPILEHDR) $(MATHHDRS) $(NREHDR)
@@ -2045,8 +2046,8 @@ $(UNIX_DIR)/tclConfig.h.in: $(MAC_OSX_DI
 	cd $(MAC_OSX_DIR); autoheader; touch $@
 
 $(TOP_DIR)/manifest.uuid:
-	printf "git." >$(TOP_DIR)/manifest.uuid
-	git rev-parse HEAD >>$(TOP_DIR)/manifest.uuid
+	printf "git-" >$(TOP_DIR)/manifest.uuid
+	(cd $(TOP_DIR); git rev-parse HEAD >>$(TOP_DIR)/manifest.uuid)
 
 dist: $(UNIX_DIR)/configure $(UNIX_DIR)/tclConfig.h.in $(UNIX_DIR)/tcl.pc.in $(MAC_OSX_DIR)/configure $(TOP_DIR)/manifest.uuid genstubs dist-packages ${NATIVE_TCLSH}
 	rm -rf $(DISTDIR)
--- origsrc/tcl8.6.12/unix/tcl.m4	2021-11-04 15:29:53.000000000 +0100
+++ src/tcl8.6.12/unix/tcl.m4	2021-11-10 13:28:36.000000000 +0100
@@ -1213,16 +1213,16 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
 	    if test "x${TCL_THREADS}" = "x0"; then
 		AC_MSG_ERROR([CYGWIN compile is only supported with --enable-threads])
 	    fi
-	    do64bit_ok=yes
-	    if test "x${SHARED_BUILD}" = "x1"; then
-		echo "running cd ../win; ${CONFIG_SHELL-/bin/sh} ./configure $ac_configure_args"
-		# The eval makes quoting arguments work.
-		if cd ../win; eval ${CONFIG_SHELL-/bin/sh} ./configure $ac_configure_args; cd ../unix
-		then :
-		else
-		    { echo "configure: error: configure failed for ../win" 1>&2; exit 1; }
-		fi
-	    fi
+	    AC_MSG_CHECKING([whether CYGWIN platform is 64-bit])
+	    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+		    [[#include <stdint.h>
+			#if INTPTR_MAX == INT64_MAX
+			    #error 64-bit platform
+			#endif
+		    ]],[])],
+		[do64bit_ok=no],
+		[do64bit_ok=yes])
+	    AC_MSG_RESULT([$do64bit_ok])
 	    ;;
 	dgux*)
 	    SHLIB_CFLAGS="-K PIC"
--- origsrc/tcl8.6.12/unix/tclUnixFCmd.c	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/unix/tclUnixFCmd.c	2021-11-10 13:28:36.000000000 +0100
@@ -91,7 +91,7 @@ static int		SetPermissionsAttribute(Tcl_
 			    Tcl_Obj *attributePtr);
 static int		GetModeFromPermString(Tcl_Interp *interp,
 			    const char *modeStringPtr, mode_t *modePtr);
-#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE) || defined(__CYGWIN__)
+#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE)
 static int		GetUnixFileAttributes(Tcl_Interp *interp, int objIndex,
 			    Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr);
 static int		SetUnixFileAttributes(Tcl_Interp *interp, int objIndex,
@@ -124,20 +124,11 @@ extern const char *const tclpFileAttrStr
 
 #else /* !DJGPP */
 enum {
-#if defined(__CYGWIN__)
-    UNIX_ARCHIVE_ATTRIBUTE,
-#endif
     UNIX_GROUP_ATTRIBUTE,
-#if defined(__CYGWIN__)
-    UNIX_HIDDEN_ATTRIBUTE,
-#endif
     UNIX_OWNER_ATTRIBUTE, UNIX_PERMISSIONS_ATTRIBUTE,
-#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE) || defined(__CYGWIN__)
+#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE)
     UNIX_READONLY_ATTRIBUTE,
 #endif
-#if defined(__CYGWIN__)
-    UNIX_SYSTEM_ATTRIBUTE,
-#endif
 #ifdef MAC_OSX_TCL
     MACOSX_CREATOR_ATTRIBUTE, MACOSX_TYPE_ATTRIBUTE, MACOSX_HIDDEN_ATTRIBUTE,
     MACOSX_RSRCLENGTH_ATTRIBUTE,
@@ -147,20 +138,11 @@ enum {
 
 MODULE_SCOPE const char *const tclpFileAttrStrings[];
 const char *const tclpFileAttrStrings[] = {
-#if defined(__CYGWIN__)
-    "-archive",
-#endif
     "-group",
-#if defined(__CYGWIN__)
-    "-hidden",
-#endif
     "-owner", "-permissions",
-#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE) || defined(__CYGWIN__)
+#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE)
     "-readonly",
 #endif
-#if defined(__CYGWIN__)
-    "-system",
-#endif
 #ifdef MAC_OSX_TCL
     "-creator", "-type", "-hidden", "-rsrclength",
 #endif
@@ -169,19 +151,10 @@ const char *const tclpFileAttrStrings[]
 
 MODULE_SCOPE const TclFileAttrProcs tclpFileAttrProcs[];
 const TclFileAttrProcs tclpFileAttrProcs[] = {
-#if defined(__CYGWIN__)
-    {GetUnixFileAttributes, SetUnixFileAttributes},
-#endif
     {GetGroupAttribute, SetGroupAttribute},
-#if defined(__CYGWIN__)
-    {GetUnixFileAttributes, SetUnixFileAttributes},
-#endif
     {GetOwnerAttribute, SetOwnerAttribute},
     {GetPermissionsAttribute, SetPermissionsAttribute},
-#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE) || defined(__CYGWIN__)
-    {GetUnixFileAttributes, SetUnixFileAttributes},
-#endif
-#if defined(__CYGWIN__)
+#if defined(HAVE_CHFLAGS) && defined(UF_IMMUTABLE)
     {GetUnixFileAttributes, SetUnixFileAttributes},
 #endif
 #ifdef MAC_OSX_TCL
@@ -2275,7 +2248,7 @@ DefaultTempDir(void)
     return TCL_TEMPORARY_FILE_DIRECTORY;
 }
 
-#if defined(__CYGWIN__)
+#if 0
 
 static void
 StatError(
--- origsrc/tcl8.6.12/unix/tclUnixFile.c	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/unix/tclUnixFile.c	2021-11-10 13:28:36.000000000 +0100
@@ -40,7 +40,7 @@ TclpFindExecutable(
 				 * (native). */
 {
     Tcl_Encoding encoding;
-#ifdef __CYGWIN__
+#if 0
     int length;
     wchar_t buf[PATH_MAX] = L"";
     char name[PATH_MAX * 3 + 1];
@@ -1186,7 +1186,7 @@ TclpUtime(
     return utime((const char *)Tcl_FSGetNativePath(pathPtr), tval);
 }
 
-#ifdef __CYGWIN__
+#if 0
 
 int
 TclOSstat(
--- origsrc/tcl8.6.12/unix/tclUnixInit.c	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/unix/tclUnixInit.c	2021-11-10 13:28:36.000000000 +0100
@@ -32,7 +32,7 @@
 #   endif
 #endif
 
-#ifdef __CYGWIN__
+#if 0
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -783,7 +783,7 @@ void
 TclpSetVariables(
     Tcl_Interp *interp)
 {
-#ifdef __CYGWIN__
+#if 0
     SYSTEM_INFO sysInfo;
     static OSVERSIONINFOW osInfo;
     static int osInfoInitialized = 0;
@@ -880,7 +880,7 @@ TclpSetVariables(
 #endif
 
     unameOK = 0;
-#ifdef __CYGWIN__
+#if 0
 	unameOK = 1;
     if (!osInfoInitialized) {
 	void *handle = GetModuleHandleW(L"NTDLL");
--- origsrc/tcl8.6.12/unix/tclUnixPort.h	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/unix/tclUnixPort.h	2021-11-10 13:28:36.000000000 +0100
@@ -118,8 +118,8 @@ extern "C" {
 #pragma clang diagnostic pop
 #endif
 #   define timezone _timezone
-    extern int TclOSstat(const char *name, void *statBuf);
-    extern int TclOSlstat(const char *name, void *statBuf);
+#   define TclOSstat		stat
+#   define TclOSlstat		lstat
 #ifdef __cplusplus
 }
 #endif
--- origsrc/tcl8.6.12/win/Makefile.in	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/win/Makefile.in	2021-11-10 13:28:36.000000000 +0100
@@ -150,13 +150,13 @@ TCL_DLL_FILE		= @TCL_DLL_FILE@
 TCL_LIB_FILE		= @TCL_LIB_FILE@
 DDE_DLL_FILE		= tcldde$(DDEVER)${DLLSUFFIX}
 DDE_LIB_FILE		= @LIBPREFIX@tcldde$(DDEVER)${DLLSUFFIX}${LIBSUFFIX}
-REG_DLL_FILE		= tclreg$(REGVER)${DLLSUFFIX}
-REG_LIB_FILE		= @LIBPREFIX@tclreg$(REGVER)${DLLSUFFIX}${LIBSUFFIX}
+REG_DLL_FILE		= tclregistry$(REGVER)${DLLSUFFIX}
+REG_LIB_FILE		= @LIBPREFIX@tclregistry$(REGVER)${DLLSUFFIX}${LIBSUFFIX}
 TEST_DLL_FILE		= tcltest$(VER)${DLLSUFFIX}
 TEST_EXE_FILE		= tcltest${EXESUFFIX}
 TEST_LIB_FILE		= @LIBPREFIX@tcltest$(VER)${DLLSUFFIX}${LIBSUFFIX}
 TEST_LOAD_PRMS		= package ifneeded dde 1.4.4 [list load [file normalize ${DDE_DLL_FILE}] Dde];\
-			  package ifneeded registry 1.3.5 [list load [file normalize ${REG_DLL_FILE}] Registry]
+			  package ifneeded registry 1.3.6 [list load [file normalize ${REG_DLL_FILE}] Registry]
 TEST_LOAD_FACILITIES	= package ifneeded Tcltest ${VERSION}@TCL_PATCH_LEVEL@ [list load [file normalize ${TEST_DLL_FILE}]];\
 			  $(TEST_LOAD_PRMS)
 ZLIB_DLL_FILE		= zlib1.dll
@@ -579,6 +579,16 @@ tclPkgConfig.${OBJEXT}: tclPkgConfig.c
 		-DBUILD_tcl \
 		@DEPARG@ $(CC_OBJNAME)
 
+tclEvent.${OBJEXT}: tclEvent.c tclUuid.h
+
+$(TOP_DIR)/manifest.uuid:
+	printf "git-" >$(TOP_DIR)/manifest.uuid
+	git rev-parse HEAD >>$(TOP_DIR)/manifest.uuid
+
+tclUuid.h:	$(TOP_DIR)/manifest.uuid
+	echo "#define TCL_VERSION_UUID \\" >$@
+	cat $(TOP_DIR)/manifest.uuid >>$@
+
 # The following objects are part of the stub library and should not be built
 # as DLL objects but none of the symbols should be exported
 
@@ -631,7 +641,7 @@ install-binaries: binaries
 		else true; \
 		fi; \
 	    done;
-	@for i in dde${DDEDOTVER} reg${REGDOTVER}; \
+	@for i in dde${DDEDOTVER} registry${REGDOTVER}; \
 	    do \
 	    if [ ! -d "$(LIB_INSTALL_DIR)/$$i" ] ; then \
 		echo "Making directory $(LIB_INSTALL_DIR)/$$i"; \
@@ -665,13 +675,13 @@ install-binaries: binaries
 	    fi
 	@if [ -f $(REG_DLL_FILE) ]; then \
 	    echo Installing $(REG_DLL_FILE); \
-	    $(COPY) $(REG_DLL_FILE) "$(LIB_INSTALL_DIR)/reg${REGDOTVER}"; \
+	    $(COPY) $(REG_DLL_FILE) "$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \
 	    $(COPY) $(ROOT_DIR)/library/reg/pkgIndex.tcl \
-		"$(LIB_INSTALL_DIR)/reg${REGDOTVER}"; \
+		"$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \
 	    fi
 	@if [ -f $(REG_LIB_FILE) ]; then \
 	    echo Installing $(REG_LIB_FILE); \
-	    $(COPY) $(REG_LIB_FILE) "$(LIB_INSTALL_DIR)/reg${REGDOTVER}"; \
+	    $(COPY) $(REG_LIB_FILE) "$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \
 	    fi
 
 install-libraries: libraries install-tzdata install-msgs
--- origsrc/tcl8.6.12/win/tclWinReg.c	2021-10-29 19:08:08.000000000 +0200
+++ src/tcl8.6.12/win/tclWinReg.c	2021-11-09 16:05:02.000000000 +0100
@@ -191,7 +191,7 @@ Registry_Init(
     cmd = Tcl_CreateObjCommand(interp, "registry", RegistryObjCmd,
 	    interp, DeleteCmd);
     Tcl_SetAssocData(interp, REGISTRY_ASSOC_KEY, NULL, cmd);
-    return Tcl_PkgProvideEx(interp, "registry", "1.3.5", NULL);
+    return Tcl_PkgProvideEx(interp, "registry", "1.3.6", NULL);
 }
 
 /*
