diff --git a/source/configure b/source/configure
index d7aa0aaa8cd50c046913daeac3da7b11ee14a06a..a8f00dc0ed3f438ed4cb2781af42eee3dffb9ea2 100755
--- a/source/configure
+++ b/source/configure
@@ -4040,7 +4040,7 @@ test "x$enable_web2c" = xno || {
   need_zlib=yes
 }
 
-# $Id: web2c.ac 53078 2019-12-10 18:39:13Z karl $
+# $Id: web2c.ac 54824 2020-04-21 18:43:36Z lscarso $
 # texk/web2c/ac/web2c.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/
 ## configure options for TeX and MF
 
diff --git a/source/libs/configure b/source/libs/configure
index 933d1e8256bc3d32eb31a57eed22906d32eb3bf1..695bc63c8dd5f4b1384773eff6cd15bfe058f9b9 100755
--- a/source/libs/configure
+++ b/source/libs/configure
@@ -3220,7 +3220,7 @@ test "x$enable_web2c" = xno || {
   need_zlib=yes
 }
 
-# $Id: web2c.ac 53078 2019-12-10 18:39:13Z karl $
+# $Id: web2c.ac 54824 2020-04-21 18:43:36Z lscarso $
 # texk/web2c/ac/web2c.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/
 ## configure options for TeX and MF
 
diff --git a/source/m4/kpse-pkgs.m4 b/source/m4/kpse-pkgs.m4
index 4f0426c3f7719598dd146a8c6b7e9f247eee1386..b308851fa493dfb8d3bbccde8cd8a6ddc47c79ce 100644
--- a/source/m4/kpse-pkgs.m4
+++ b/source/m4/kpse-pkgs.m4
@@ -1,4 +1,4 @@
-# $Id: kpse-pkgs.m4 49640 2019-01-08 18:57:53Z karl $
+# $Id: kpse-pkgs.m4 54824 2020-04-21 18:43:36Z lscarso $
 # Private Autoconf macros for the TeX Live (TL) tree.
 # Copyright 2016-2019 Karl Berry <tex-live@tug.org>
 # Copyright 2009-2015 Peter Breitenlohner <tex-live@tug.org>
diff --git a/source/texk/configure b/source/texk/configure
index 83b41706239e8c750288a111c4f146a92cdb4997..0d297001335a41cd0f571608e2dcd25e254afd84 100755
--- a/source/texk/configure
+++ b/source/texk/configure
@@ -3220,7 +3220,7 @@ test "x$enable_web2c" = xno || {
   need_zlib=yes
 }
 
-# $Id: web2c.ac 53078 2019-12-10 18:39:13Z karl $
+# $Id: web2c.ac 54824 2020-04-21 18:43:36Z lscarso $
 # texk/web2c/ac/web2c.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/
 ## configure options for TeX and MF
 
diff --git a/source/texk/kpathsea/ChangeLog b/source/texk/kpathsea/ChangeLog
index 7e8ea6c795f5aaf9bcf5739bed7a8663c090893c..1a0bc71088adeb87716fddb9a948bc28c45881b5 100644
--- a/source/texk/kpathsea/ChangeLog
+++ b/source/texk/kpathsea/ChangeLog
@@ -1,3 +1,10 @@
+2020-04-26  Akira Kakuto  <kakuto@w32tex.org>
+
+	* readable.c, knj.c: Support very long input path name,
+	longer than _MAX_PATH for Windows, if it really exists and
+	input name is given in full-absolute path in a command line.
+	(Windows only).
+
 2020-04-10  Karl Berry  <karl@tug.org>
 
 	* version.ac: now 6.3.3/dev since TL'20 is released.
diff --git a/source/texk/kpathsea/knj.c b/source/texk/kpathsea/knj.c
index 6db6262161fb52703fdb5a6ad4088ac061df1d9d..b4595207aab03c569882eb0ce8522afddb96b3f2 100644
--- a/source/texk/kpathsea/knj.c
+++ b/source/texk/kpathsea/knj.c
@@ -116,12 +116,35 @@ kpathsea_fsyscp_xfopen (kpathsea kpse, const char *filename, const char *mode)
     FILE *f;
     wchar_t *fnamew, modew[4];
     int i;
-
+    unsigned char *fnn;
+    unsigned char *p;
     assert(filename && mode);
-
-    fnamew = get_wstring_from_mbstring(kpse->File_system_codepage, filename, fnamew=NULL);
+/*
+  Support very long input path name, longer than _MAX_PATH for
+  Windows, if it really exists and input name is given in
+  full-absolute path in a command line.
+*/
+    fnn = xmalloc(strlen(filename) + 10);
+    if ((filename[0] == '/' && filename[1] == '/') ||
+        (filename[0] == '\\' && filename[1] == '\\')) {
+       filename += 2;
+       strcpy (fnn, "\\\\?\\UNC\\");
+       strcat (fnn, filename);
+    } else if (filename[1] == ':') {
+       strcpy (fnn, "\\\\?\\");
+       strcat (fnn, filename);
+    } else {
+       strcpy (fnn, filename);
+    }
+    for (p = fnn; *p; p++) {
+      if (*p == '/')
+         *p = '\\';
+    }
+    
+    fnamew = get_wstring_from_mbstring(kpse->File_system_codepage, fnn, fnamew=NULL);
     for(i=0; (modew[i]=(wchar_t)mode[i]); i++) {} /* mode[i] must be ASCII */
     f = _wfopen(fnamew, modew);
+    free (fnn);
     if (f == NULL)
         FATAL_PERROR(filename);
     if (KPATHSEA_DEBUG_P (KPSE_DEBUG_FOPEN)) {
@@ -149,12 +172,35 @@ kpathsea_fsyscp_fopen (kpathsea kpse, const char *filename, const char *mode)
     FILE *f;
     wchar_t *fnamew, modew[4];
     int i;
-
+    unsigned char *fnn;
+    unsigned char *p;
     assert(filename && mode);
+/*
+  Support very long input path name, longer than _MAX_PATH for
+  Windows, if it really exists and input name is given in
+  full-absolute path in a command line.
+*/
+    fnn = xmalloc(strlen(filename) + 10);
+    if ((filename[0] == '/' && filename[1] == '/') ||
+        (filename[0] == '\\' && filename[1] == '\\')) {
+       filename += 2;
+       strcpy (fnn, "\\\\?\\UNC\\");
+       strcat (fnn, filename);
+    } else if (filename[1] == ':') {
+       strcpy (fnn, "\\\\?\\");
+       strcat (fnn, filename);
+    } else {
+       strcpy (fnn, filename);
+    }
+    for (p = fnn; *p; p++) {
+      if (*p == '/')
+         *p = '\\';
+    }
 
-    fnamew = get_wstring_from_mbstring(kpse->File_system_codepage, filename, fnamew=NULL);
+    fnamew = get_wstring_from_mbstring(kpse->File_system_codepage, fnn, fnamew=NULL);
     for(i=0; (modew[i]=(wchar_t)mode[i]); i++) {} /* mode[i] must be ASCII */
     f = _wfopen(fnamew, modew);
+    free (fnn);
     if (f != NULL) {
         if (KPATHSEA_DEBUG_P (KPSE_DEBUG_FOPEN)) {
             DEBUGF_START ();
diff --git a/source/texk/kpathsea/readable.c b/source/texk/kpathsea/readable.c
index 2623fd2b84f194f373109262c3c66ff795704342..2d060d08cb445058ea84353dd38691bcf92ee592 100644
--- a/source/texk/kpathsea/readable.c
+++ b/source/texk/kpathsea/readable.c
@@ -41,7 +41,33 @@ static boolean
 READABLE(kpathsea kpse, const_string fn, unsigned int st)
 {
   wchar_t *fnw;
-  fnw = get_wstring_from_mbstring(kpse->File_system_codepage, fn, fnw=NULL);
+  unsigned char *fnn;
+  unsigned char *p;
+
+  fnn = xmalloc(strlen(fn) + 10);
+/*
+  Support very long input path name, longer than _MAX_PATH for
+  Windows, if it really exists and input name is given in
+  full-absolute path in a command line.
+*/
+  if ((fn[0] == '/' && fn[1] == '/') ||
+      (fn[0] == '\\' && fn[1] == '\\')) {
+    fn += 2;
+    strcpy (fnn, "\\\\?\\UNC\\");
+    strcat (fnn, fn);
+  } else if (fn[1] == ':') {
+    strcpy (fnn, "\\\\?\\");
+    strcat (fnn, fn);
+  } else {
+    strcpy (fnn, fn);
+  }
+
+  for (p = fnn; *p; p++) {
+    if (*p == '/')
+      *p = '\\';
+  }
+
+  fnw = get_wstring_from_mbstring(kpse->File_system_codepage, fnn, fnw=NULL);
   if ((st = GetFileAttributesW(fnw)) != 0xFFFFFFFF) {
     /* succeeded */
     errno = 0;
@@ -58,6 +84,7 @@ READABLE(kpathsea kpse, const_string fn, unsigned int st)
       break;
     }
   }
+  free (fnn);
   if (fnw)
     free (fnw);
   return ((st != 0xFFFFFFFF) && !(st & FILE_ATTRIBUTE_DIRECTORY));
diff --git a/source/texk/web2c/ChangeLog b/source/texk/web2c/ChangeLog
index b7d638f0ae75508f69f43c01892f46ea18c370a8..f79873dc70049e459de7c8306e958342682be500 100644
--- a/source/texk/web2c/ChangeLog
+++ b/source/texk/web2c/ChangeLog
@@ -1,3 +1,13 @@
+2020-04-23  Tomas Rokicki  <rokicki@gmail.com>
+        and Karl Berry  <karl@freefriends.org>
+
+	* patgen.web,
+	* pktogf.web,
+	* pktype.web: fix trivial typos and clarify public domain status.
+	No code changes.
+	(These .web files are not maintained by DEK, per
+	https://tug.org/TUGbpat/tb35-1/tb109knut.pdf page 2.)
+
 2020-04-13  Andreas Scherer  <https://ascherer.github.io>
 
 	* ctangleboot.cin: Add comment for section 6.
diff --git a/source/texk/web2c/Makefile.am b/source/texk/web2c/Makefile.am
index de85479b54530172502cb7c8980145304814dae8..a183458dc2d06ed699183615b31e0732d54a744d 100644
--- a/source/texk/web2c/Makefile.am
+++ b/source/texk/web2c/Makefile.am
@@ -1,4 +1,4 @@
-## $Id: Makefile.am 51577 2019-07-08 06:07:11Z lscarso $
+## $Id: Makefile.am 54824 2020-04-21 18:43:36Z lscarso $
 ## Makefile.am for the TeX Live subdirectory texk/web2c/.
 ##
 ## Copyright 2017      Karl Berry <tex-live@tug.org>
diff --git a/source/texk/web2c/ac/web2c.ac b/source/texk/web2c/ac/web2c.ac
index 91362c05e47bb14b30435c07100601eef3411c8b..5b76e526be51dda81a2968dcd6b0f906fc62ba69 100644
--- a/source/texk/web2c/ac/web2c.ac
+++ b/source/texk/web2c/ac/web2c.ac
@@ -1,4 +1,4 @@
-# $Id: web2c.ac 53078 2019-12-10 18:39:13Z karl $
+# $Id: web2c.ac 54824 2020-04-21 18:43:36Z lscarso $
 # texk/web2c/ac/web2c.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/
 dnl
 dnl Copyright 2016-2019 Karl Berry <tex-live@tug.org>
diff --git a/source/texk/web2c/configure b/source/texk/web2c/configure
index 1861e7daa4e44b705c6e63fb680073d37d5c2b5b..2404cc1cdcb20b49a30d7fbec520b87b3f69fa40 100755
--- a/source/texk/web2c/configure
+++ b/source/texk/web2c/configure
@@ -18604,7 +18604,7 @@ fi
 
 # Include additional code for web2c.
 
-# $Id: web2c.ac 53078 2019-12-10 18:39:13Z karl $
+# $Id: web2c.ac 54824 2020-04-21 18:43:36Z lscarso $
 # texk/web2c/ac/web2c.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/
 ## configure options for TeX and MF
 
diff --git a/source/texk/web2c/configure.ac b/source/texk/web2c/configure.ac
index e055fd6e1075cd9bbf61194041ea04359f293ee1..876907234ed6830b7aea8dd5228c2c297dddbb80 100644
--- a/source/texk/web2c/configure.ac
+++ b/source/texk/web2c/configure.ac
@@ -1,4 +1,4 @@
-dnl $Id: configure.ac 51470 2019-06-26 16:09:52Z karl $
+dnl $Id: configure.ac 54824 2020-04-21 18:43:36Z lscarso $
 dnl Process this file with Autoconf to produce a configure script for Web2c.
 dnl
 dnl   Copyright 2018-2019 Karl Berry <tex-live@tug.org>
diff --git a/source/texk/web2c/ctangleboot.cin b/source/texk/web2c/ctangleboot.cin
index d775faa2666feb7deb0686e11143ca06e5049038..e5fdf4dcb34ad9bed0e02f238b7b402efcc8892b 100644
--- a/source/texk/web2c/ctangleboot.cin
+++ b/source/texk/web2c/ctangleboot.cin
@@ -8,7 +8,7 @@
 #line 83 "cwebdir/ctangle.w"
 
 /*:2*//*6:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 52 "cwebdir/comm-w2c.h"
 
 #ifndef HAVE_GETTEXT
 #define HAVE_GETTEXT 0
@@ -166,7 +166,7 @@
 #line 66 "cwebdir/ctangle.w"
 
 /*5:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 37 "cwebdir/comm-w2c.h"
 
 typedef bool boolean;
 typedef uint8_t eight_bits;
@@ -175,7 +175,7 @@ extern int program;
 extern int phase;
 
 /*:5*//*7:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 86 "cwebdir/comm-w2c.h"
 
 extern char section_text[];
 extern char*section_text_end;
@@ -183,7 +183,7 @@ extern char*id_first;
 extern char*id_loc;
 
 /*:7*//*8:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 101 "cwebdir/comm-w2c.h"
 
 extern char buffer[];
 extern char*buffer_end;
@@ -191,7 +191,7 @@ extern char*loc;
 extern char*limit;
 
 /*:8*//*9:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 116 "cwebdir/comm-w2c.h"
 
 typedef struct name_info{
 char*byte_start;
@@ -225,7 +225,7 @@ extern void print_section_name(name_pointer);
 extern void sprint_section_name(char*,name_pointer);
 
 /*:9*//*10:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 157 "cwebdir/comm-w2c.h"
 
 extern int history;
 extern int wrap_up(void);
@@ -234,7 +234,7 @@ extern void fatal(const char*,const char*);
 extern void overflow(const char*);
 
 /*:10*//*11:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 172 "cwebdir/comm-w2c.h"
 
 extern int include_depth;
 extern FILE*file[];
@@ -258,7 +258,7 @@ extern void check_complete(void);
 extern void reset_input(void);
 
 /*:11*//*12:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 195 "cwebdir/comm-w2c.h"
 
 extern sixteen_bits section_count;
 extern boolean changed_section[];
@@ -266,14 +266,14 @@ extern boolean change_pending;
 extern boolean print_where;
 
 /*:12*//*13:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 208 "cwebdir/comm-w2c.h"
 
 extern int argc;
 extern char**argv;
 extern boolean flags[];
 
 /*:13*//*14:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 220 "cwebdir/comm-w2c.h"
 
 extern FILE*C_file;
 extern FILE*tex_file;
@@ -283,7 +283,7 @@ extern FILE*check_file;
 extern FILE*active_file;
 
 /*:14*//*15:*/
-#line 111 "cwebdir/ctang-w2c.ch"
+#line 230 "cwebdir/comm-w2c.h"
 
 extern void common_init(void);
 extern void print_stats(void);
diff --git a/source/texk/web2c/ctiedir/ChangeLog b/source/texk/web2c/ctiedir/ChangeLog
index 2ce0f61df9d9b8c5e6b76a3ddc7cac18c32b57cc..357fa3aca8cbf075efccb3b6ca397279b4f1b15c 100644
--- a/source/texk/web2c/ctiedir/ChangeLog
+++ b/source/texk/web2c/ctiedir/ChangeLog
@@ -1,3 +1,9 @@
+2020-04-26  Andreas Scherer  <https://ascherer.github.io>
+
+	* ctie-k.ch: Fix several typos in ctie.w.
+	Use British English also in the changefile.
+	Make the result TeXable, preserving section numbers.
+
 2014-06-18  Peter Breitenlohner  <peb@mppmu.mpg.de>
 
 	* ctie-k.ch: Avoid useless char subscript warnings.
diff --git a/source/texk/web2c/ctiedir/ctie-k.ch b/source/texk/web2c/ctiedir/ctie-k.ch
index 5741bb1c06d181fe7fc10e855ac1e35db1f2cc12..07d6bf9bc824b802d901a128cd373a9904c35445 100644
--- a/source/texk/web2c/ctiedir/ctie-k.ch
+++ b/source/texk/web2c/ctiedir/ctie-k.ch
@@ -35,12 +35,11 @@ int main (int argc, string *argv)
 @x l.105 Set up kpathsea stuff
     @<Initialise parameters@>;
 @y
-    @<Set up |PROGNAME| feature and initialize the search path mechanism@>;
+    @<Set up |PROGNAME| feature and initialise the search path mechanism@>;
     @<Initialise parameters@>;
 @z
 
-These are defined by kpathsea; we replace this by the path-searching
-initialisation code taken almost verbatim from comm-w2c.ch.
+boolean and string are defined by kpathsea.
 @x l.116
 @ We include the additional types |boolean| and |string|.  \.{CTIE}
 replaces the complex \.{TIE} character set handling (based on that of
@@ -54,44 +53,18 @@ so uses the |char| type for input and output.
 typedef int boolean;
 typedef char* string;
 @y
-@ The \.{ctie} program from the original \.{CTIE} package uses the
-compile-time default directory or the value of the environment
-variable \.{CWEBINPUTS} as an alternative place to be searched for
-files, if they could not be found in the current directory.
-
-This version uses the \Kpathsea/ mechanism for searching files. 
-The directories to be searched for come from three sources:
-
- (a)~a user-set environment variable \.{CWEBINPUTS}
-    (overriden by \.{CWEBINPUTS\_ctie});\par
- (b)~a line in \Kpathsea/ configuration file \.{texmf.cnf},\hfil\break
-    e.g. \.{CWEBINPUTS=.:$TEXMF/texmf/cweb//}
-    or \.{CWEBINPUTS.ctie=.:$TEXMF/texmf/cweb//};\hangindent=2\parindent\par
- (c)~compile-time default directories \.{.:$TEXMF/texmf/cweb//}
-    (specified in \.{texmf.in}).
-
-@d kpse_find_cweb(name) kpse_find_file(name, kpse_cweb_format, true)
-
-@ The simple file searching is replaced by the `path searching'
-mechanism that the \Kpathsea/ library provides.
-
-We set |kpse_program_name| to |"ctie"|.  This means if the variable
-|CWEBINPUTS.ctie| is present in \.{texmf.cnf} (or |CWEBINPUTS_ctie| in
-the environment) its value will be used as the search path for
-filenames.  This allows different flavors of \.{CTIE} to have
-different search paths.
-
-@<Set up |PROGNAME| feature and initialize the search path mechanism@>=
-kpse_set_program_name(argv[0], "ctie");
-
 @ We include the additional types |boolean| and |string|.  \.{CTIE}
 replaces the complex \.{TIE} character set handling (based on that of
 the original \.{WEB} system) with the standard \.{CWEB} behaviour, and
 so uses the |char| type for input and output.
 
-The |kpathsea| library (version 3.4.5) defines the |true|, |false|,
-|boolean| and |string| types in \.{kpathsea/types.h}, so we do not
-actually need to define them here.
+The |kpathsea| library (version 3.4.5 and higher) defines the |true|, |false|,
+|boolean| and |string| types in \.{kpathsea/types.h}, so we do not actually
+need to define them here.
+
+@s boolean int
+@s string int
+@s const_string int
 @z
 
 @x l.129 The kpathsea include files find the right header file for these.
@@ -117,6 +90,12 @@ the \.{kpathsea} headers do the right thing.
 @d xisupper(c) (isupper((unsigned char)c)&&((unsigned char)c<0200))
 @z
 
+@x l.155
+This variable must be initialized.
+@y
+This variable must be initialised.
+@z
+
 @x l.173 The kpathsea include files must be first.
 #include <stdio.h>
 @y
@@ -143,6 +122,12 @@ too.
 @^system dependencies@>
 @z
 
+@x l.190
+files) are treated the same way.  To organize the
+@y
+files) are treated the same way.  To organise the
+@z
+
 @x l.284 way too short!
 @d max_file_name_length 60
 @y
@@ -157,6 +142,12 @@ static boolean
 get_line (file_index i, boolean do_includes)
 @z
 
+@x l.361
+replacement part of a change file, or in an incomplerte check if the
+@y
+replacement part of a change file, or in an incomplete check if the
+@z
+
 Handle input lines with CRLF
 
 @x l.376
@@ -165,6 +156,12 @@ Handle input lines with CRLF
         if ((*(k++) = c) != ' ' && c != '\r') inp_desc->limit = k;
 @z
 
+@x l.386
+    @<Increment the line number and print a progess report at
+@y
+    @<Increment the line number and print a progress report at
+@z
+
 @x l.436
         if ((*(k++) = c) != ' ') inp_desc->limit = k;
 @y
@@ -290,6 +287,12 @@ void pfatal_error (const char *s, const char *t)
     out_file=fopen(out_name, "wb");
 @z
 
+@x l.739
+@ The name of the file and the file desciptor are stored in
+@y
+@ The name of the file and the file descriptor are stored in
+@z
+
 @x l.747 Use the kpathsea library to do this
 @ For the master file we start by reading its first line into the
 buffer, if we could open it.
@@ -498,6 +501,9 @@ print_version_and_exit (const_string name, const_string version)
 }
 @z
 
+We use the path-searching initialisation code
+taken almost verbatim from comm-w2c.ch.
+
 @x l.1267
 @* System-dependent changes.
 This section should be replaced, if necessary, by
@@ -512,5 +518,35 @@ module number.
 @^system dependencies@>
 @y
 @* System-dependent changes.
-There are no additional changes.
+The \.{ctie} program from the original \.{CTIE} package uses the
+compile-time default directory or the value of the environment
+variable \.{CWEBINPUTS} as an alternative place to be searched for
+files, if they could not be found in the current directory.
+
+This version uses the \Kpathsea/ mechanism for searching files.
+The directories to be searched for come from three sources:
+\smallskip
+{\parindent5em
+\item{(a)} a user-set environment variable \.{CWEBINPUTS}
+    (overridden by \.{CWEBINPUTS\_ctie});
+\item{(b)} a line in \Kpathsea/ configuration file \.{texmf.cnf},\hfil\break
+    e.g., \.{CWEBINPUTS=\$TEXMFDOTDIR:\$TEXMF/texmf/cweb//}\hfil\break
+    or \.{CWEBINPUTS.ctie=\$TEXMFDOTDIR:\$TEXMF/texmf/cweb//};
+\item{(c)} compile-time default directories (specified in
+    \.{texmf.in}),\hfil\break
+    i.e., \.{\$TEXMFDOTDIR:\$TEXMF/texmf/cweb//}.\par}
+
+@d kpse_find_cweb(name) kpse_find_file(name, kpse_cweb_format, true)
+
+@ The simple file searching is replaced by the `path searching'
+mechanism that the \Kpathsea/ library provides.
+
+We set |kpse_program_name| to `\.{ctie}'.  This means if the variable
+\.{CWEBINPUTS.ctie} is present in \.{texmf.cnf} (or \.{CWEBINPUTS\_ctie}
+in the environment) its value will be used as the search path for
+filenames.  This allows different flavors of \.{CTIE} to have
+different search paths.
+
+@<Set up |PROGNAME| feature and initialise the search path mechanism@>=
+kpse_set_program_name(argv[0], "ctie");
 @z
diff --git a/source/texk/web2c/luatexdir/luatex_svnversion.h b/source/texk/web2c/luatexdir/luatex_svnversion.h
index 8e3bbb900307b4633cf58f4d293f346cf4dc9ba2..dbe2c11de1bf9af5f4e4c33c985575273337574d 100644
--- a/source/texk/web2c/luatexdir/luatex_svnversion.h
+++ b/source/texk/web2c/luatexdir/luatex_svnversion.h
@@ -1 +1 @@
-#define luatex_svn_revision 7351
+#define luatex_svn_revision 7353
diff --git a/source/texk/web2c/omegafonts/Makefile.in b/source/texk/web2c/omegafonts/Makefile.in
index 2e2dae746ae8d4071bdc779c3d90bdc4ba6a72cf..2bc6e95135785eef00e97958006440f48531cbf3 100644
--- a/source/texk/web2c/omegafonts/Makefile.in
+++ b/source/texk/web2c/omegafonts/Makefile.in
@@ -119,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \
 	$(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-pixman-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-poppler-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-pplib-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-socket-libs.m4 \
 	$(top_srcdir)/../../m4/kpse-teckit-flags.m4 \
@@ -593,6 +594,9 @@ PKG_CONFIG = @PKG_CONFIG@
 POPPLER_DEPEND = @POPPLER_DEPEND@
 POPPLER_INCLUDES = @POPPLER_INCLUDES@
 POPPLER_LIBS = @POPPLER_LIBS@
+PPLIB_DEPEND = @PPLIB_DEPEND@
+PPLIB_INCLUDES = @PPLIB_INCLUDES@
+PPLIB_LIBS = @PPLIB_LIBS@
 PTEXENC_DEPEND = @PTEXENC_DEPEND@
 PTEXENC_INCLUDES = @PTEXENC_INCLUDES@
 PTEXENC_LIBS = @PTEXENC_LIBS@
diff --git a/source/texk/web2c/otps/Makefile.in b/source/texk/web2c/otps/Makefile.in
index a6b63930f99b2f4a259078c908a83bd1f40140de..cf35999da69955c42f78fc0218ad321cf0015181 100644
--- a/source/texk/web2c/otps/Makefile.in
+++ b/source/texk/web2c/otps/Makefile.in
@@ -119,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \
 	$(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-pixman-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-poppler-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-pplib-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-socket-libs.m4 \
 	$(top_srcdir)/../../m4/kpse-teckit-flags.m4 \
@@ -627,6 +628,9 @@ PKG_CONFIG = @PKG_CONFIG@
 POPPLER_DEPEND = @POPPLER_DEPEND@
 POPPLER_INCLUDES = @POPPLER_INCLUDES@
 POPPLER_LIBS = @POPPLER_LIBS@
+PPLIB_DEPEND = @PPLIB_DEPEND@
+PPLIB_INCLUDES = @PPLIB_INCLUDES@
+PPLIB_LIBS = @PPLIB_LIBS@
 PTEXENC_DEPEND = @PTEXENC_DEPEND@
 PTEXENC_INCLUDES = @PTEXENC_INCLUDES@
 PTEXENC_LIBS = @PTEXENC_LIBS@
diff --git a/source/texk/web2c/otps/win32/Makefile.in b/source/texk/web2c/otps/win32/Makefile.in
index c7e88f6f99f56199f2ca05e3962582a37cd95be9..f32331a7347860a7a6406ba394a3b25a4d37ecab 100644
--- a/source/texk/web2c/otps/win32/Makefile.in
+++ b/source/texk/web2c/otps/win32/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \
 	$(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-pixman-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-poppler-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-pplib-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-socket-libs.m4 \
 	$(top_srcdir)/../../m4/kpse-teckit-flags.m4 \
@@ -347,6 +348,9 @@ PKG_CONFIG = @PKG_CONFIG@
 POPPLER_DEPEND = @POPPLER_DEPEND@
 POPPLER_INCLUDES = @POPPLER_INCLUDES@
 POPPLER_LIBS = @POPPLER_LIBS@
+PPLIB_DEPEND = @PPLIB_DEPEND@
+PPLIB_INCLUDES = @PPLIB_INCLUDES@
+PPLIB_LIBS = @PPLIB_LIBS@
 PTEXENC_DEPEND = @PTEXENC_DEPEND@
 PTEXENC_INCLUDES = @PTEXENC_INCLUDES@
 PTEXENC_LIBS = @PTEXENC_LIBS@
diff --git a/source/texk/web2c/tiedir/ChangeLog b/source/texk/web2c/tiedir/ChangeLog
index 28d2e6b467f3fe29e5e2655acada24ba6fcab27c..45b33a70d4b959accffcf2af526110d1f150e555 100644
--- a/source/texk/web2c/tiedir/ChangeLog
+++ b/source/texk/web2c/tiedir/ChangeLog
@@ -1,6 +1,14 @@
+2020-04-26  Andreas Scherer  <https://ascherer.github.io>
+
+	* tie-w2c.ch: Fix several typos in tie.w.
+
+2020-04-23  Andreas Scherer  <https://ascherer.github.io>
+
+	* tie-w2c.ch: Fix typographic deviations from original tie.
+
 2018-01-18  Karl Berry  <karl@tug.org>
 
-	* tie.w (print, print_ln): printf %s instead of direct string
+	* tie-w2c.w (print, print_ln): printf %s instead of direct string
 	(from Debian).
 
 2014-02-12  Peter Breitenlohner  <peb@mppmu.mpg.de>
diff --git a/source/texk/web2c/tiedir/tie-w2c.ch b/source/texk/web2c/tiedir/tie-w2c.ch
index 37d5bd7b21d7b8c0b6a5075abb2be3885d856369..c5d913a43af858a5241df5701149f2adc3c9bace 100644
--- a/source/texk/web2c/tiedir/tie-w2c.ch
+++ b/source/texk/web2c/tiedir/tie-w2c.ch
@@ -17,7 +17,9 @@ typedef int boolean;
 typedef char* string;
 @y
 @ Furthermore we include the additional types |boolean| and |string|.
-/* boolean, false, true; string; all from cpascal.h */
+/* |boolean|, |false|, |true|; |string|; all from \.{cpascal.h} */
+@s boolean int
+@s string int
 @z
 
 @x -- we need more input files.
@@ -28,13 +30,25 @@ typedef char* string;
 /* we don't think that anyone needs more than 32 change files,
 @z
 
+@x
+@d print(a)  fprintf(term_out,a) /* `|print|' means write on the terminal */
+@y
+@d print(a)  fprintf(term_out,"%s",a) /* `|print|' means write on the terminal */
+@z
+
+@x
+@d print_ln(v)  {fprintf(term_out,v);term_new_line;}
+@y
+@d print_ln(v)  {fprintf(term_out,"%s",v);term_new_line;}
+@z
+
 @x -- add to global includes.
 #include <stdio.h>
 @y
 #include "cpascal.h"
 #include <stdio.h>
 #include <kpathsea/kpathsea.h>
-/* Also redefine usage to avoid clash with function from lib. */
+/* Also redefine |usage| to avoid clash with function from lib. */
 #define usage tieusage
 @z
 
@@ -124,6 +138,12 @@ static boolean
 e_of_ch_preamble (file_index i)
 @z
 
+@x l.1005
+a line to write and |test_input| ist set to |none|.
+@y
+a line to write and |test_input| is set to |none|.
+@z
+
 @x
 void usage()
 {
@@ -135,6 +155,12 @@ void usage (void)
    print("Usage: tie -m|-c outfile master changefile(s)");
 @z
 
+@x l.1169
+change files.  The names fo the file parameters will be inserted into
+@y
+change files.  The names of the file parameters will be inserted into
+@z
+
 @x
 main(argc,argv)
         int argc; string *argv;
@@ -152,6 +178,12 @@ int main (int argc, string *argv)
   print_ln(copyright); /* include the copyright notice */
 @z
 
+@x l.1256
+Additionaly we report the history to the user, although this may not
+@y
+Additionally we report the history to the user, although this may not
+@z
+
 @x
 {string msg;
 @y
@@ -163,4 +195,4 @@ int main (int argc, string *argv)
 @y
       default: /* Anything except spotless, troublesome, or fatal is a bug. */
       case fatal: msg="That was a fatal error, my friend";  break;
-@z
\ No newline at end of file
+@z
diff --git a/source/texk/web2c/tiedir/tie.w b/source/texk/web2c/tiedir/tie.w
index e40d487351b7c5d793c2f5d43cfc9c6138e7b0fd..227328b729ee3132736602c166b94a6064f48d31 100644
--- a/source/texk/web2c/tiedir/tie.w
+++ b/source/texk/web2c/tiedir/tie.w
@@ -25,7 +25,7 @@
 %		also repaired loop control for end of changes test (92-09-24)
 % Version 2.4 included <stdlib.h> instead of <malloc.h> when
 %		used with ANSI-C				   (92-12-17)
-% See ChangeLog for further changes.
+%
 
 % Here is TeX material that gets inserted after \input cwebmac
 
@@ -458,14 +458,14 @@ for terminating an output line and writing strings to the user.
 
 @^system dependencies@>
 @d term_out  stdout
-@d print(a)  fprintf(term_out,"%s",a) /* `|print|' means write on the terminal */
+@d print(a)  fprintf(term_out,a) /* `|print|' means write on the terminal */
 @d print2(a,b)  fprintf(term_out,a,b) /* same with two arguments */
 @d print3(a,b,c)  fprintf(term_out,a,b,c) /* same with three arguments */
 @d print_c(v)  fputc(v,term_out); /* print a single character */
 @d new_line(v)  fputc('\n',v) /* start new line */
 @d term_new_line  new_line(term_out)
 	/* start new line of the terminal */
-@d print_ln(v)  {fprintf(term_out,"%s",v);term_new_line;}
+@d print_ln(v)  {fprintf(term_out,v);term_new_line;}
 	/* `|print|' and then start new line */
 @d print2_ln(a,b)  {print2(a,b);term_new_line;} /* same with two arguments */
 @d print3_ln(a,b,c)  {print3(a,b,c);term_new_line;}
diff --git a/source/texk/web2c/window/Makefile.in b/source/texk/web2c/window/Makefile.in
index 6bf0ed05e48be0a6d60986b9ad791e03c521d496..3b8b1fab066decd400a78b3a130c91929b4195a4 100644
--- a/source/texk/web2c/window/Makefile.in
+++ b/source/texk/web2c/window/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \
 	$(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-pixman-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-poppler-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-pplib-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \
 	$(top_srcdir)/../../m4/kpse-socket-libs.m4 \
 	$(top_srcdir)/../../m4/kpse-teckit-flags.m4 \
@@ -362,6 +363,9 @@ PKG_CONFIG = @PKG_CONFIG@
 POPPLER_DEPEND = @POPPLER_DEPEND@
 POPPLER_INCLUDES = @POPPLER_INCLUDES@
 POPPLER_LIBS = @POPPLER_LIBS@
+PPLIB_DEPEND = @PPLIB_DEPEND@
+PPLIB_INCLUDES = @PPLIB_INCLUDES@
+PPLIB_LIBS = @PPLIB_LIBS@
 PTEXENC_DEPEND = @PTEXENC_DEPEND@
 PTEXENC_INCLUDES = @PTEXENC_INCLUDES@
 PTEXENC_LIBS = @PTEXENC_LIBS@
diff --git a/source/utils/configure b/source/utils/configure
index 0dfa555015e5be397d8ad199fd26b3f3f01e9763..9e4fec7ab1b28bb43ade6fa20fba92727aec5ef7 100755
--- a/source/utils/configure
+++ b/source/utils/configure
@@ -3220,7 +3220,7 @@ test "x$enable_web2c" = xno || {
   need_zlib=yes
 }
 
-# $Id: web2c.ac 53078 2019-12-10 18:39:13Z karl $
+# $Id: web2c.ac 54824 2020-04-21 18:43:36Z lscarso $
 # texk/web2c/ac/web2c.ac: configure.ac fragment for the TeX Live subdirectory texk/web2c/
 ## configure options for TeX and MF