diff mbox series

Prefer https: for GNU and FSF URLs

Message ID 18cce39e-4a5a-27d8-a1ca-5ec45973088e@cs.ucla.edu
State New
Headers show
Series Prefer https: for GNU and FSF URLs | expand

Commit Message

Paul Eggert Sept. 22, 2017, 4:24 a.m. UTC
The attached patches adjust glibc to prefer https: in URLs for gnu.org and 
fsf.org. FTP is being decommissioned soon for gnu.org, and although the GNU 
project files are not secret, plain HTTP is vulnerable to malicious routers that 
intercept responses from GNU servers, and this sort of thing is all too common 
when people in some other countries browse US-based websites. See, for example:

Aceto G, Botta A, Pescapé A, Awan MF, Ahmad T, Qaisar S. Analyzing internet 
censorship in Pakistan. RTSI 2016. https://dx.doi.org/10.1109/RTSI.2016.7740626

Although https: is not a complete solution here, it can be a significant help, 
and other GNU projects such as Coreutils, Emacs, and Gnulib have already 
switched to using https: URLs.

The first attachment is a standin for a purely mechanical replacement (explained 
in the attachment), which is over 5 MB and so a bit long for this email. The 
second attachment is a patch that merely updates some files from upstream 
sources that have already switched to https:.

As this is all fairly routine I plan to install it soon unless there's objection.

Comments

Joseph Myers Sept. 22, 2017, 11:47 a.m. UTC | #1
On Thu, 21 Sep 2017, Paul Eggert wrote:

> The first attachment is a standin for a purely mechanical replacement
> (explained in the attachment), which is over 5 MB and so a bit long for this
> email. The second attachment is a patch that merely updates some files from
> upstream sources that have already switched to https:.

This command looks like it would modify some generated files, rather than 
modifying their sources and regenerating.

See the cases in scripts/update-copyrights that avoid modifying generated 
files: INSTALL intl/plural.c locale/C-translit.h 
locale/programs/charmap-kw.h locale/programs/locfile-kw.h po/libc.pot 
sysdeps/gnu/errlist.c, and configure and preconfigure scripts in some 
cases (where corresponding .ac files exist).  (Not all of those actually 
contain http: URLs.)

In such cases, if the http: URL comes from the corresponding sources in 
glibc, it's appropriate to modify the sources and then regenerate the 
generated file (which might or might not produce the same results as 
modifying both sources and generated file directly, depending on whether 
the generator does e.g. line wrapping).  But if it comes from text copied 
in by another tool (autoconf / bison), you need to have an updated release 
of that tool that uses https: and regenerate with that updated release.  
What should be avoided in all cases is modifications (to either source or 
generated files) that mean generated files no longer correspond to their 
sources.

(For bison and gperf it might also be reasonable to propose making them 
required tools for building glibc, stopping checking in those generated 
files and arranging for the build system to generate them in the build 
directory rather than the source directory.)

With the same caveats about which files are appropriate to modify, 
http://(sourceware.org|sources.redhat.com) URLs are also appropriate to 
change to https://sourceware.org URLs.

It may make sense to exclude both the generated files and their sources 
from the mechanical change, so they can be dealt with individually 
afterwards.
Zack Weinberg Sept. 22, 2017, 12:13 p.m. UTC | #2
Regarding the second patch, updates to config.sub, config.guess, and
move-if-change look fine to me, but the texinfo.tex update changes
enough unrelated stuff that I'd like you to test build the PDF version
of the manual and make sure nothing broke.  (Cosmetic changes are
fine.)

zw
Maciej W. Rozycki Sept. 29, 2017, 3:37 p.m. UTC | #3
Hi Paul,

> The attached patches adjust glibc to prefer https: in URLs for gnu.org and
> fsf.org. FTP is being decommissioned soon for gnu.org, and although the GNU
> project files are not secret, plain HTTP is vulnerable to malicious routers
> that intercept responses from GNU servers, and this sort of thing is all too
> common when people in some other countries browse US-based websites.

 What's wrong with FTP, especially as given what you have stated it seems 
useful for people beyond myself, and not merely (as it is in my case) for 
convenience reasons?

  Maciej
Jonathan Nieder Sept. 29, 2017, 4:59 p.m. UTC | #4
Hi,

Maciej W. Rozycki wrote:
> Hi Paul,

>> The attached patches adjust glibc to prefer https: in URLs for gnu.org and
>> fsf.org. FTP is being decommissioned soon for gnu.org, and although the GNU
>> project files are not secret, plain HTTP is vulnerable to malicious routers
>> that intercept responses from GNU servers, and this sort of thing is all too
>> common when people in some other countries browse US-based websites.
>
> What's wrong with FTP, especially as given what you have stated it seems
> useful for people beyond myself, and not merely (as it is in my case) for
> convenience reasons?

FTP is vulnerable to mitm in the same way as HTTP is.

Thanks and hope that helps,
Jonathan
Maciej W. Rozycki Oct. 4, 2017, 11:19 p.m. UTC | #5
Hi Jonathan,

> > What's wrong with FTP, especially as given what you have stated it seems
> > useful for people beyond myself, and not merely (as it is in my case) for
> > convenience reasons?
> 
> FTP is vulnerable to mitm in the same way as HTTP is.

 Hmm, weren't the GPG signatures meant to address it?  Though indeed the 
keys I've seen used weren't particularly trustable, with very few if any 
signatures attached, so that could be considered a failed attempt.  OTOH
with HTTPS we need to trust the CA, which might be the single weak point.

  Maciej
Paul Eggert Sept. 7, 2019, 10:06 a.m. UTC | #6
On 9/22/17 4:47 AM, Joseph Myers wrote:

> This command looks like it would modify some generated files, rather than
> modifying their sources and regenerating.

Thanks for mentioning that. I finally got around to fixing the issues you 
mentioned, and installed the adjusted patch into the glibc master. As the patch 
is 5.6 MB I won't attach it here.

I ran into a problem, though: the remote on sourceware.org refused to patch 
three of the files, giving messages like this:

# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines

or like this:

# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line 
does not end in newline

I'm attaching a patch for the three files that the remote refused to fix. I 
assume that to install this patch I would need to fix the pre-commit hooks on 
the sourceware.org side, but I don't see how to go about this in 
<https://sourceware.org/glibc/wiki/GlibcGit#Git_Server_Maintenance>; am I 
looking in the wrong place?
Paul Eggert Sept. 7, 2019, 10:22 a.m. UTC | #7
On 9/7/19 3:06 AM, Paul Eggert wrote:
> I assume that to install this patch I would need to fix the pre-commit hooks on 
> the sourceware.org side

Scratch that: it's easier to pacify the pre-commit hooks than to change them, so 
I installed the attached patch instead.

I was puzzled because you patched these three files when updating copyright 
dates in January, whereas I couldn't patch them today without fixing their 
trailing-newline style. I guess the pre-commit hooks have changed since January, 
but I don't know where they're kept.
Joseph Myers Sept. 9, 2019, 4:27 p.m. UTC | #8
On Sat, 7 Sep 2019, Paul Eggert wrote:

> On 9/22/17 4:47 AM, Joseph Myers wrote:
> 
> > This command looks like it would modify some generated files, rather than
> > modifying their sources and regenerating.
> 
> Thanks for mentioning that. I finally got around to fixing the issues you
> mentioned, and installed the adjusted patch into the glibc master. As the
> patch is 5.6 MB I won't attach it here.

It looks like this is missing regeneration of locale/programs/charmap-kw.h 
to reflect the use of https in charmap-kw.gperf.
Joseph Myers Sept. 9, 2019, 4:28 p.m. UTC | #9
On Sat, 7 Sep 2019, Paul Eggert wrote:

> I was puzzled because you patched these three files when updating copyright
> dates in January, whereas I couldn't patch them today without fixing their
> trailing-newline style. I guess the pre-commit hooks have changed since
> January, but I don't know where they're kept.

Yes, we switched to using the AdaCore set of hooks, which must have some 
differences from the old hooks in exactly how they detect problems with 
trailing whitespace.

https://sourceware.org/ml/libc-alpha/2019-04/msg00335.html
Florian Weimer Sept. 9, 2019, 5:45 p.m. UTC | #10
* Joseph Myers:

> On Sat, 7 Sep 2019, Paul Eggert wrote:
>
>> I was puzzled because you patched these three files when updating copyright
>> dates in January, whereas I couldn't patch them today without fixing their
>> trailing-newline style. I guess the pre-commit hooks have changed since
>> January, but I don't know where they're kept.
>
> Yes, we switched to using the AdaCore set of hooks, which must have some 
> differences from the old hooks in exactly how they detect problems with 
> trailing whitespace.
>
> https://sourceware.org/ml/libc-alpha/2019-04/msg00335.html

I think the old hooks did not bother to complain if the old file
contained the same whitespace violation.

Thanks,
Florian
Paul Eggert Sept. 9, 2019, 9:18 p.m. UTC | #11
On 9/9/19 9:27 AM, Joseph Myers wrote:
> It looks like this is missing regeneration of locale/programs/charmap-kw.h
> to reflect the use of https in charmap-kw.gperf.

Thanks for spotting that. I rebuilt that file as follows:

cd locale
rm ../../glibc/locale/programs/charmap-kw.h \
    ../../glibc/locale/programs/locfile-kw.h
make objdir=$(cd .. && pwd) -C ../../glibc/locale \
    programs/charmap-kw.h \
    programs/locfile-kw.h

The locfile-kw.h rebuild was needed because gperf 3.1 changed its API. I 
tweaked the localedef internals accordingly, and installed the first 
attached patch.

In looking for similar glitches I noticed a few "http:"s in 'configure' 
that can be fixed by adding a URL to AC_INIT. So I installed the second 
attached patch to do that.
diff mbox series

Patch

From 29aa8d6cf70ef0c6f0350e17348919f4cf2cf1c1 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 21 Sep 2017 21:06:52 -0700
Subject: [PATCH 2/2] Update miscellaneous files from upstream sources

Update texinfo.tex and various miscellaneous scripts to
their latest upstream versions.
* manual/texinfo.tex: Update to version 2017-09-16.10 with
trailing whitespace removed.
* scripts/config.guess: Update to version 2017-09-16.
* scripts/config.sub: Update to version 2017-09-16.
* scripts/move-if-change: Update to version 2017-09-13 06:45.
---
 manual/texinfo.tex     | 169 ++++++++++++++++++++++++++-----------------------
 scripts/config.guess   |  70 ++++++++------------
 scripts/config.sub     |  32 ++++++----
 scripts/move-if-change |   8 +--
 4 files changed, 142 insertions(+), 137 deletions(-)

diff --git a/manual/texinfo.tex b/manual/texinfo.tex
index 6d45464eb2..34d8f1408a 100644
--- a/manual/texinfo.tex
+++ b/manual/texinfo.tex
@@ -3,11 +3,11 @@ 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2016-09-18.18}
+\def\texinfoversion{2017-09-16.10}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
 % Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
@@ -21,7 +21,7 @@ 
 % General Public License for more details.
 %
 % You should have received a copy of the GNU General Public License
-% along with this program.  If not, see <http://www.gnu.org/licenses/>.
+% along with this program.  If not, see <https://www.gnu.org/licenses/>.
 %
 % As a special exception, when this file is read by TeX when processing
 % a Texinfo source document, you may use the result without
@@ -30,9 +30,9 @@ 
 %
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
-%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
-%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
+%   https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+%   https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+%   https://www.gnu.org/software/texinfo/ (the Texinfo home page)
 % The texinfo.tex in any given distribution could well be out
 % of date, so if that's what you're using, please check.
 %
@@ -56,7 +56,7 @@ 
 % extent.  You can get the existing language-specific files from the
 % full Texinfo distribution.
 %
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
 
 
 \message{Loading texinfo [version \texinfoversion]:}
@@ -165,6 +165,9 @@ 
 % Give the space character the catcode for a space.
 \def\spaceisspace{\catcode`\ =10\relax}
 
+% Likewise for ^^M, the end of line character.
+\def\endlineisspace{\catcode13=10\relax}
+
 \chardef\dashChar  = `\-
 \chardef\slashChar = `\/
 \chardef\underChar = `\_
@@ -950,21 +953,14 @@  where each line of input produces a line of output.}
 % @comment ...line which is ignored...
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
-%
-\def\comment{\begingroup \catcode`\^^M=\active%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other\commentxxx}%
 
-{\catcode`\^^M=\active%
-\gdef\commentxxx#1^^M{\endgroup%
-\futurelet\nexttoken\commentxxxx}%
-\gdef\commentxxxx{\ifx\nexttoken\aftermacro\expandafter\comment\fi}%
-}
 
 \def\c{\begingroup \catcode`\^^M=\active%
 \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
 \cxxx}
 {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
-% See comment in \scanmacro about why the definitions of @c and @comment differ
+%
+\let\comment\c
 
 % @paragraphindent NCHARS
 % We'll use ems for NCHARS, close enough.
@@ -5497,17 +5493,15 @@  end
       \let\indexlbrace\{   % Likewise, set these sequences for braces
       \let\indexrbrace\}   % used in the sort key.
       \begindoublecolumns
-      \let\entrywidowpenalty=\indexwidowpenalty
+      \let\dotheinsertentrybox\dotheinsertentryboxwithpenalty
       %
       % Read input from the index file line by line.
       \loopdo
-        \ifeof1
-          \let\firsttoken\relax
-        \else
+        \ifeof1 \else
           \read 1 to \nextline
-          \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
-          \act
         \fi
+        %
+        \indexinputprocessing
         \thisline
         %
         \ifeof1\else
@@ -5519,12 +5513,20 @@  end
   \fi
   \closein 1
 \endgroup}
+\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
+\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
 
+\def\indexinputprocessing{%
+  \ifeof1
+    \let\firsttoken\relax
+  \else
+    \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
+    \act
+  \fi
+}
 \def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken}
 \long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1}
 
-\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
-\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
 
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
@@ -5601,7 +5603,7 @@  end
     % For pdfTeX and XeTeX.
     % The redefinition of \domark stops marks being added in \pdflink to
     % preserve coloured links across page boundaries.  Otherwise the marks
-    % would get in the way of \lastbox in \insertindexentrybox.
+    % would get in the way of \lastbox in \insertentrybox.
     \let\domark\relax
     %
     % Start a new paragraph if necessary, so our assignments below can't
@@ -5662,9 +5664,9 @@  end
     \fi
     \egroup % end \boxA
     \ifdim\wd\boxB = 0pt
-      \global\setbox\entryindexbox=\vbox{\unhbox\boxA}%
+      \global\setbox\entrybox=\vbox{\unhbox\boxA}%
     \else
-    \global\setbox\entryindexbox=\vbox\bgroup
+    \global\setbox\entrybox=\vbox\bgroup
       % We want the text of the entries to be aligned to the left, and the
       % page numbers to be aligned to the right.
       %
@@ -5694,10 +5696,13 @@  end
       \advance\dimen@ii by 1\dimen@i
       \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
       \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
-        \dimen@ = 0.7\dimen@ % Try to split the text roughly evenly
+        % Try to split the text roughly evenly.  \dimen@ will be the length of
+        % the first line.
+        \dimen@ = 0.7\dimen@
         \dimen@ii = \hsize
         \ifnum\dimen@>\dimen@ii
-          % If the entry is too long, use the whole line
+          % If the entry is too long (for example, if it needs more than
+          % two lines), use all the space in the first line.
           \dimen@ = \dimen@ii
         \fi
         \advance\leftskip by 0pt plus 1fill % ragged right
@@ -5707,8 +5712,9 @@  end
         % instead of using \parshape with explicit line lengths, but TeX
         % doesn't seem to provide a way to do such a thing.
         %
-        \leftskip = 1em
-        \parindent = -1em
+        % Indent all lines but the first one.
+        \advance\leftskip by 1em
+        \advance\parindent by -1em
       \fi\fi
       \indent % start paragraph
       \unhbox\boxA
@@ -5726,19 +5732,20 @@  end
     \egroup % The \vbox
     \fi
   \endgroup
-  % delay text of entry until after penalty
-  \bgroup\aftergroup\insertindexentrybox
-  \entrywidowpenalty
+  \dotheinsertentrybox
 }}
 
 \newskip\thinshrinkable
 \skip\thinshrinkable=.15em minus .15em
 
-\newbox\entryindexbox
-\def\insertindexentrybox{%
-  \ourunvbox\entryindexbox
+\newbox\entrybox
+\def\insertentrybox{%
+  \ourunvbox\entrybox
 }
 
+% default definition
+\let\dotheinsertentrybox\insertentrybox
+
 % Use \lastbox to take apart vbox box by box, and add each sub-box
 % to the current vertical list.
 \def\ourunvbox#1{%
@@ -5761,21 +5768,18 @@  end
 \newbox\delayedbox
 \newbox\interbox
 
-% Default is no penalty
-\let\entrywidowpenalty\egroup
-
 % Used from \printindex.  \firsttoken should be the first token
 % after the \entry.  If it's not another \entry, we are at the last
 % line of a group of index entries, so insert a penalty to discourage
 % widowed index entries.
-\long\def\indexwidowpenalty{%
-  \def\isentry{\entry}%
+\def\dotheinsertentryboxwithpenalty{%
   \ifx\firsttoken\isentry
   \else
     \penalty 9000
   \fi
-  \egroup % now comes the box added with \aftergroup
+  \insertentrybox
 }
+\def\isentry{\entry}%
 
 % Like plain.tex's \dotfill, except uses up at least 1 em.
 % The filll stretch here overpowers both the fil and fill stretch to push
@@ -5892,8 +5896,8 @@  end
     \divide\doublecolumnhsize by 2
   \hsize = \doublecolumnhsize
   %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
+  % Double the \vsize as well.
+  \advance\vsize by -\ht\partialpage
   \vsize = 2\vsize
   %
   % For the benefit of balancing columns
@@ -5911,12 +5915,12 @@  end
   % previous page.
   \dimen@ = \vsize
   \divide\dimen@ by 2
-  \advance\dimen@ by -\ht\partialpage
   %
   % box0 will be the left-hand column, box2 the right.
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+  \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
+  \global\advance\vsize by 2\ht\partialpage
   \onepageout\pagesofar
-  \unvbox255
+  \unvbox\PAGE
   \penalty\outputpenalty
 }
 %
@@ -5980,9 +5984,9 @@  end
   %
   % \pagegoal was set to the doubled \vsize above, since we restarted
   % the current page.  We're now back to normal single-column
-  % typesetting, so reset \pagegoal to the normal \vsize (after the
-  % \endgroup where \vsize got restored).
-  \pagegoal = \vsize
+  % typesetting, so reset \pagegoal to the normal \vsize.
+  \global\vsize = \txipageheight %
+  \pagegoal = \txipageheight %
 }
 \newbox\balancedcolumns
 \setbox\balancedcolumns=\vbox{shouldnt see this}%
@@ -5990,7 +5994,7 @@  end
 % Only called for the last of the double column material.  \doublecolumnout
 % does the others.
 \def\balancecolumns{%
-  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+  \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0
   \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip
@@ -6943,7 +6947,15 @@  end
 % exist, with an empty box.  Let's hope all the numbers have the same width.
 % Also ignore the page number, which is conventionally not printed.
 \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
-\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
+\def\partentry#1#2#3#4{%
+  % Add stretch and a bonus for breaking the page before the part heading.
+  % This reduces the chance of the page being broken immediately after the
+  % part heading, before a following chapter heading.
+  \vskip 0pt plus 5\baselineskip
+  \penalty-300
+  \vskip 0pt plus -5\baselineskip
+  \dochapentry{\numeralbox\labelspace#1}{}%
+}
 %
 % Parts, in the short toc.
 \def\shortpartentry#1#2#3#4{%
@@ -8031,9 +8043,6 @@  end
   }
 \fi
 
-\let\aftermacroxxx\relax
-\def\aftermacro{\aftermacroxxx}
-
 % alias because \c means cedilla in @tex or @math
 \let\texinfoc=\c
 
@@ -8055,18 +8064,13 @@  end
   \catcode`\\=\active
   %
   % Process the macro body under the current catcode regime.
-  \scantokens{#1@texinfoc}\aftermacro%
+  \scantokens{#1@texinfoc}%
   %
   \catcode`\@=\savedcatcodeone
   \catcode`\\=\savedcatcodetwo
   %
   % The \texinfoc is to remove the \newlinechar added by \scantokens, and
   % can be noticed by \parsearg.
-  %   The \aftermacro allows a \comment at the end of the macro definition
-  % to duplicate itself past the final \newlinechar added by \scantokens:
-  % this is used in the definition of \group to comment out a newline.  We
-  % don't do the same for \c to support Texinfo files with macros that ended
-  % with a @c, which should no longer be necessary.
   %   We avoid surrounding the call to \scantokens with \bgroup and \egroup
   % to allow macros to open or close groups themselves.
 }
@@ -8538,6 +8542,13 @@  end
   \ifcase\paramno
   % 0
     \expandafter\xdef\csname\the\macname\endcsname{%
+      \bgroup
+        \noexpand\spaceisspace
+        \noexpand\endlineisspace
+        \noexpand\expandafter % skip any whitespace after the macro name.
+        \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+    \expandafter\xdef\csname\the\macname @@@\endcsname{%
+      \egroup
       \noexpand\scanmacro{\macrobody}}%
   \or % 1
     \expandafter\xdef\csname\the\macname\endcsname{%
@@ -9123,7 +9134,13 @@  end
     \xdef\safexrefname{#1}%
   }%
   %
-  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+  \bgroup
+    \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
+  \egroup
+  % We put the \gdef inside a group to avoid the definitions building up on
+  % TeX's save stack, which can cause it to run out of space for aux files with
+  % thousands of lines.  \gdef doesn't use the save stack, but \csname does
+  % when it defines an unknown control sequence as \relax.
   %
   % Was that xref control sequence that we just defined for a float?
   \expandafter\iffloat\csname XR\safexrefname\endcsname
@@ -9429,7 +9446,7 @@  end
 \newif\ifwarnednoepsf
 \newhelp\noepsfhelp{epsf.tex must be installed for images to
   work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://tug.org/tex/epsf.tex.}
+  it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
 %
 \def\image#1{%
   \ifx\epsfbox\thisisundefined
@@ -11004,7 +11021,6 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
   \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
   \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
-  \DeclareUnicodeCharacter{2127}{\ensuremath\mho}%
   \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
   \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
   \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
@@ -11020,7 +11036,6 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
   \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
   \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
-  \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}%
   \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
   \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
   \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
@@ -11029,8 +11044,6 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
   \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
   \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
-  \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}%
-  \DeclareUnicodeCharacter{2201}{\ensuremath\complement}%
   \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
   \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
   \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
@@ -11064,8 +11077,6 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
   \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
   \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
-  \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}%
-  \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}%
   \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
   \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
   \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
@@ -11080,8 +11091,6 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
   \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
   \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
-  \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}%
-  \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}%
   \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
   \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
   \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
@@ -11097,12 +11106,11 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
   \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
   %
-  \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}%
   \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
   \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
   \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
   \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
-  \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}%
+  \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
   \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
   \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
   \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
@@ -11124,7 +11132,6 @@  directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
   \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
   \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
-  \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}%
   \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
   \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
   \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
@@ -11279,6 +11286,7 @@  directory should work if nowhere else does.}
     \pdfvorigin = 1 true in
   \else
     \ifx\XeTeXrevision\thisisundefined
+      \special{papersize=#8,#7}%
     \else
       \pdfpageheight #7\relax
       \pdfpagewidth #8\relax
@@ -11316,7 +11324,6 @@  directory should work if nowhere else does.}
   %
   \lispnarrowing = 0.3in
   \tolerance = 700
-  \hfuzz = 1pt
   \contentsrightmargin = 0pt
   \defbodyindent = .5cm
 }}
@@ -11334,7 +11341,6 @@  directory should work if nowhere else does.}
   %
   \lispnarrowing = 0.25in
   \tolerance = 700
-  \hfuzz = 1pt
   \contentsrightmargin = 0pt
   \defbodyindent = .4cm
 }}
@@ -11360,7 +11366,6 @@  directory should work if nowhere else does.}
                     {297mm}{210mm}%
   %
   \tolerance = 700
-  \hfuzz = 1pt
   \contentsrightmargin = 0pt
   \defbodyindent = 5mm
 }}
@@ -11379,7 +11384,6 @@  directory should work if nowhere else does.}
   %
   \lispnarrowing = 0.2in
   \tolerance = 800
-  \hfuzz = 1.2pt
   \contentsrightmargin = 0pt
   \defbodyindent = 2mm
   \tableindent = 12mm
@@ -11435,6 +11439,9 @@  directory should work if nowhere else does.}
 %
 \letterpaper
 
+% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
+\hfuzz = 1pt
+
 
 \message{and turning on texinfo input format.}
 
@@ -11600,6 +11607,9 @@  directory should work if nowhere else does.}
   @def ^^M{@let^^M@secondlinenl}%
   % Definition for a newline in the main Texinfo file.
   @gdef @secondlinenl{@fixbackslash}%
+  % In case the first line has a whole-line command on it
+  @let@originalparsearg@parsearg
+  @def@parsearg{@fixbackslash@originalparsearg}
 }}
 
 {@catcode`@^=7 @catcode`@^^M=13%
@@ -11620,6 +11630,7 @@  directory should work if nowhere else does.}
   @catcode13=5 % regular end of line
   @enableemergencynewline
   @let@c=@texinfoc
+  @let@parsearg@originalparsearg
   % Also turn back on active characters that might appear in the input
   % file name, in case not using a pre-dumped format.
   @catcode`+=@active
diff --git a/scripts/config.guess b/scripts/config.guess
index bbd48b60e8..8bd1095f11 100755
--- a/scripts/config.guess
+++ b/scripts/config.guess
@@ -2,7 +2,7 @@ 
 # Attempt to guess a canonical system name.
 #   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2017-01-01'
+timestamp='2017-09-16'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@  timestamp='2017-01-01'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,7 +27,7 @@  timestamp='2017-01-01'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
@@ -259,6 +259,9 @@  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:Sortix:*:*)
 	echo ${UNAME_MACHINE}-unknown-sortix
 	exit ;;
+    *:Redox:*:*)
+	echo ${UNAME_MACHINE}-unknown-redox
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -315,15 +318,6 @@  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	exitcode=$?
 	trap '' 0
 	exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
 	exit ;;
@@ -837,10 +831,11 @@  EOF
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	case ${UNAME_PROCESSOR} in
 	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		UNAME_PROCESSOR=x86_64 ;;
+	    i386)
+		UNAME_PROCESSOR=i586 ;;
 	esac
+	echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
@@ -854,10 +849,6 @@  EOF
     *:MSYS*:*)
 	echo ${UNAME_MACHINE}-pc-msys
 	exit ;;
-    i*:windows32*:*)
-	# uname -m includes "-pc" on this system.
-	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
@@ -873,27 +864,12 @@  EOF
 		echo ia64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    8664:Windows_NT:*)
-	echo x86_64-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
 	exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
 	echo x86_64-unknown-cygwin
 	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
@@ -1303,14 +1279,21 @@  EOF
 	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
 	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		    grep IS_64BIT_ARCH >/dev/null
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_64BIT_ARCH >/dev/null
 		then
 		    case $UNAME_PROCESSOR in
 			i386) UNAME_PROCESSOR=x86_64 ;;
 			powerpc) UNAME_PROCESSOR=powerpc64 ;;
 		    esac
 		fi
+		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_PPC >/dev/null
+		then
+		    UNAME_PROCESSOR=powerpc
+		fi
 	    fi
 	elif test "$UNAME_PROCESSOR" = i386 ; then
 	    # Avoid executing cc on OS X 10.9, as it ships with a stub
@@ -1334,15 +1317,18 @@  EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
+    NEO-*:NONSTOP_KERNEL:*:*)
 	echo neo-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
+    NSR-*:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+	echo nsx-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
 	exit ;;
@@ -1418,12 +1404,12 @@  cat >&2 <<EOF
 $0: unable to guess system type
 
 This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite
-config.guess and config.sub with the latest versions from:
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches@gnu.org to
diff --git a/scripts/config.sub b/scripts/config.sub
index 7e792b4ae1..95dc3d0724 100755
--- a/scripts/config.sub
+++ b/scripts/config.sub
@@ -2,7 +2,7 @@ 
 # Configuration validation subroutine script.
 #   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2017-01-01'
+timestamp='2017-09-16'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@  timestamp='2017-01-01'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -33,7 +33,7 @@  timestamp='2017-01-01'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -229,9 +229,6 @@  case $os in
 	-ptx*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
 		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
 	-psos*)
 		os=-psos
 		;;
@@ -263,7 +260,7 @@  case $basic_machine in
 	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
-	| i370 | i860 | i960 | ia64 \
+	| i370 | i860 | i960 | ia16 | ia64 \
 	| ip2k | iq2000 \
 	| k1om \
 	| le32 | le64 \
@@ -315,6 +312,7 @@  case $basic_machine in
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| visium \
+	| wasm32 \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -388,7 +386,7 @@  case $basic_machine in
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
+	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
 	| ip2k-* | iq2000-* \
 	| k1om-* \
 	| le32-* | le64-* \
@@ -446,6 +444,7 @@  case $basic_machine in
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
 	| visium-* \
+	| wasm32-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -948,6 +947,9 @@  case $basic_machine in
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
+	nsx-tandem)
+		basic_machine=nsx-tandem
+		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -1243,6 +1245,9 @@  case $basic_machine in
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
+	wasm32)
+		basic_machine=wasm32-unknown
+		;;
 	w65*)
 		basic_machine=w65-wdc
 		os=-none
@@ -1251,6 +1256,9 @@  case $basic_machine in
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		;;
+	x64)
+		basic_machine=x86_64-pc
+		;;
 	xbox)
 		basic_machine=i686-pc
 		os=-mingw32
@@ -1358,8 +1366,8 @@  esac
 if [ x"$os" != x"" ]
 then
 case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
+	# First match some system type aliases that might get confused
+	# with valid system types.
 	# -solaris* is a basic system type, with this one exception.
 	-auroraux)
 		os=-auroraux
@@ -1379,9 +1387,9 @@  case $os in
 	-gnu/linux*)
 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
 		;;
-	# First accept the basic system types.
+	# Now accept the basic system types.
 	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
+	# Each alternative MUST end in a * to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
diff --git a/scripts/move-if-change b/scripts/move-if-change
index e3fe71d18f..4a65145594 100755
--- a/scripts/move-if-change
+++ b/scripts/move-if-change
@@ -2,13 +2,13 @@ 
 # Like mv $1 $2, but if the files are the same, just delete $1.
 # Status is zero if successful, nonzero otherwise.
 
-VERSION='2016-01-11 22:04'; # UTC
+VERSION='2017-09-13 06:45'; # UTC
 # The definition above must lie within the first 8 lines in order
 # for the Emacs time-stamp write hook (at end) to update it.
 # If you change this file with Emacs, please let the write hook
 # do its job.  Otherwise, update this string manually.
 
-# Copyright (C) 2002-2016 Free Software Foundation, Inc.
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@  VERSION='2016-01-11 22:04'; # UTC
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 usage="usage: $0 SOURCE DEST"
 
@@ -39,7 +39,7 @@  Report bugs to <bug-gnulib@gnu.org>."
 version=`expr "$VERSION" : '\([^ ]*\)'`
 version="move-if-change (gnulib) $version
 Copyright (C) 2011 Free Software Foundation, Inc.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law."
 
-- 
2.13.5