emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 8e9166c 01/19: Merge from origin/emacs-24


From: Fabián Ezequiel Gallina
Subject: [Emacs-diffs] master 8e9166c 01/19: Merge from origin/emacs-24
Date: Wed, 28 Jan 2015 04:50:07 +0000

branch: master
commit 8e9166c92c97e7c2041eecee4e00d412a1eca1be
Merge: be2d23e a012c7b
Author: Fabián Ezequiel Gallina <address@hidden>
Commit: Fabián Ezequiel Gallina <address@hidden>

    Merge from origin/emacs-24
    
    a012c7b Fix copyright years by hand
    732fd4c Update copyright year to 2015
    
    Conflicts:
        INSTALL.REPO
        admin/notes/lel-TODO
        doc/man/grep-changelog.1
        doc/misc/eww.texi
        etc/CONTRIBUTE
        etc/GNU
        etc/NEWS
        etc/refcards/emacsver.tex
        etc/refcards/ru-refcard.tex
        lib-src/grep-changelog
        lib-src/test-distrib.c
        lib/alloca.in.h
        lib/binary-io.h
        lib/c-ctype.h
        lib/c-strcasecmp.c
        lib/c-strncasecmp.c
        lib/careadlinkat.c
        lib/close-stream.c
        lib/dosname.h
        lib/dup2.c
        lib/filemode.h
        lib/fpending.c
        lib/fpending.h
        lib/getgroups.c
        lib/getloadavg.c
        lib/getopt.in.h
        lib/getopt1.c
        lib/getopt_int.h
        lib/gettext.h
        lib/gettime.c
        lib/gettimeofday.c
        lib/group-member.c
        lib/md5.c
        lib/md5.h
        lib/memrchr.c
        lib/sha1.c
        lib/sig2str.c
        lib/stdarg.in.h
        lib/stdbool.in.h
        lib/stdlib.in.h
        lib/strftime.c
        lib/strtoimax.c
        lib/strtol.c
        lib/strtoll.c
        lib/strtoull.c
        lib/tempname.c
        lib/time_r.c
        lib/unsetenv.c
        lib/xalloc-oversized.h
        lisp/gnus/gnus-setup.el
        lisp/progmodes/cap-words.el
        lisp/w32-common-fns.el
        m4/alloca.m4
        m4/dup2.m4
        m4/filemode.m4
        m4/getgroups.m4
        m4/getloadavg.m4
        m4/gettime.m4
        m4/gettimeofday.m4
        m4/gnulib-common.m4
        m4/group-member.m4
        m4/manywarnings.m4
        m4/memrchr.m4
        m4/mktime.m4
        m4/pathmax.m4
        m4/pthread_sigmask.m4
        m4/sig2str.m4
        m4/ssize_t.m4
        m4/st_dm_mode.m4
        m4/stat-time.m4
        m4/stdarg.m4
        m4/stdbool.m4
        m4/stddef_h.m4
        m4/stdio_h.m4
        m4/strftime.m4
        m4/strtoimax.m4
        m4/strtoll.m4
        m4/strtoull.m4
        m4/strtoumax.m4
        m4/time_h.m4
        m4/timer_time.m4
        m4/timespec.m4
        m4/unistd_h.m4
        m4/utimbuf.m4
        nextstep/README
        nt/addsection.c
        src/insdel.c
        src/w32heap.c
        test/automated/package-x-test.el
---
 INSTALL.REPO                     |    4 +
 admin/notes/lel-TODO             |  124 +++++++++
 doc/man/grep-changelog.1         |   80 ++++++
 doc/misc/eww.texi                |    2 +-
 doc/misc/info.texi               |    2 +-
 etc/CONTRIBUTE                   |  227 ++++++++++++++++
 etc/refcards/emacsver.tex        |    4 +
 lib-src/grep-changelog           |  265 ++++++++++++++++++
 lib-src/test-distrib.c           |   88 ++++++
 lib/alloca.in.h                  |    4 +-
 lib/binary-io.h                  |    3 +-
 lib/c-ctype.h                    |    3 +-
 lib/c-strcasecmp.c               |    3 +-
 lib/c-strncasecmp.c              |    3 +-
 lib/careadlinkat.c               |    4 +-
 lib/close-stream.c               |    3 +-
 lib/dosname.h                    |    3 +-
 lib/dup2.c                       |    3 +-
 lib/filemode.h                   |    4 +-
 lib/fpending.c                   |    4 +-
 lib/fpending.h                   |    4 +-
 lib/getgroups.c                  |    3 +-
 lib/getloadavg.c                 |    4 +-
 lib/getopt.in.h                  |    4 +-
 lib/getopt1.c                    |    4 +-
 lib/getopt_int.h                 |    4 +-
 lib/gettext.h                    |    4 +-
 lib/gettime.c                    |    3 +-
 lib/gettimeofday.c               |    3 +-
 lib/group-member.c               |    4 +-
 lib/md5.c                        |    4 +-
 lib/md5.h                        |    4 +-
 lib/memrchr.c                    |    4 +-
 lib/sha1.c                       |    3 +-
 lib/sig2str.c                    |    3 +-
 lib/stdarg.in.h                  |   35 +++
 lib/stdbool.in.h                 |  132 +++++++++
 lib/stdlib.in.h                  |    3 +-
 lib/strftime.c                   |    3 +-
 lib/strtoimax.c                  |    4 +-
 lib/strtol.c                     |    4 +-
 lib/strtoll.c                    |    4 +-
 lib/strtoull.c                   |    3 +-
 lib/tempname.c                   |    3 +-
 lib/time_r.c                     |    3 +-
 lib/unsetenv.c                   |    3 +-
 lib/xalloc-oversized.h           |    3 +-
 lisp/gnus/gnus-setup.el          |  191 +++++++++++++
 lisp/progmodes/cap-words.el      |   98 +++++++
 lisp/w32-common-fns.el           |  134 ++++++++++
 m4/alloca.m4                     |    4 +-
 m4/dup2.m4                       |    3 +-
 m4/filemode.m4                   |    3 +-
 m4/getgroups.m4                  |    3 +-
 m4/getloadavg.m4                 |    4 +-
 m4/gettime.m4                    |    3 +-
 m4/gettimeofday.m4               |    3 +-
 m4/group-member.m4               |    3 +-
 m4/memrchr.m4                    |    4 +-
 m4/mktime.m4                     |    4 +-
 m4/pathmax.m4                    |    4 +-
 m4/sig2str.m4                    |    3 +-
 m4/ssize_t.m4                    |    3 +-
 m4/st_dm_mode.m4                 |    3 +-
 m4/stat-time.m4                  |    4 +-
 m4/stdarg.m4                     |   78 ++++++
 m4/stdbool.m4                    |  100 +++++++
 m4/strftime.m4                   |    3 +-
 m4/strtoimax.m4                  |    3 +-
 m4/strtoll.m4                    |    3 +-
 m4/strtoull.m4                   |    3 +-
 m4/strtoumax.m4                  |    3 +-
 m4/time_h.m4                     |    3 +-
 m4/timespec.m4                   |    3 +-
 m4/utimbuf.m4                    |    4 +-
 nt/addsection.c                  |  544 ++++++++++++++++++++++++++++++++++++++
 src/insdel.c                     |    5 +-
 src/w32heap.c                    |    4 +-
 test/automated/package-x-test.el |  110 ++++++++
 79 files changed, 2338 insertions(+), 90 deletions(-)

diff --git a/INSTALL.REPO b/INSTALL.REPO
index 3431ee4..61b1634 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -1,3 +1,7 @@
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
+See the end of the file for license conditions.
+
+
             Building and Installing Emacs from the Repository
 
 Simply run 'make'.  This should work if your files are freshly checked
diff --git a/admin/notes/lel-TODO b/admin/notes/lel-TODO
new file mode 100644
index 0000000..c59e920
--- /dev/null
+++ b/admin/notes/lel-TODO
@@ -0,0 +1,124 @@
+Some lisp/emacs-lisp/ Features and Where They Are Documented
+
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
+See the end of the file for license conditions.
+
+
+* Status Key
+  -      -- as yet unknown
+  n/a    -- not applicable (internal, uninteresting, etc)
+  obsolete -- an obsolete feature, to be removed in future
+  todo   -- not documented but should be
+  NODE   -- documented in or under info node NODE
+
+
+* Features
+  advice                  (elisp) Advising Functions
+  advice-preload          n/a
+  assoc                   -
+  authors                 -
+  autoload                (elisp) Autoload
+  avl-tree                -
+  backquote               n/a
+  benchmark               n/a
+  bindat                  (elisp) Byte Packing
+  byte-compile            (elisp) Byte Compilation
+  byte-opt                -
+  bytecomp                (elisp) Compilation Functions
+  checkdoc                (elisp) Documentation Tips
+  cl                      (cl)
+  cl-compat               n/a
+  cl-specs                n/a
+  copyright               -
+  crm                     -
+  cust-print              (elisp) Printing in Edebug
+  debug                   (elisp) Debugger
+  derived                 (elisp) Derived Modes
+  disass                  (elisp) Disassembly
+  easy-mmode              (elisp) Defining Minor Modes
+  easymenu                -
+  edebug                  (elisp) Edebug
+  eldoc                   -
+  elint                   -
+  elp                     n/a
+  ewoc                    (elisp) Separated Rendering
+  find-func               -
+  find-gc                 -
+  generic                 (elisp) Generic Modes
+  gulp                    n/a
+  helper                  -
+  levents                 obsolete
+  lisp-float-type         -
+  lisp-mnt                -
+  lisp-mode               n/a
+  lmenu                   obsolete
+  lucid                   obsolete
+  macroexp                (elisp) Expansion
+  pp                      (emacs) Program Indent
+  re-builder              -
+  regexp-opt              (elisp) Regexp Functions
+  regi                    -
+  ring                    (elisp) Rings
+  rx                      -
+  shadow                  -
+  sregex                  obsolete
+  syntax                  (elisp) Position Parse
+  testcover               -
+  timer                   (elisp) Timers
+  tq                      (elisp) Transaction Queues
+  trace                   -
+  unsafep                 (elisp) Function Safety
+  warnings                (elisp) Warnings
+
+
+* Above list created using default directory lisp/emacs-lisp/ with
+  (shell-command
+    "sed '/^(provide '\\''/!d;s//  /;s/).*//' *.el | sort | uniq")
+
+
+* How to use this file to improve Emacs
+  (loop
+   (let* ((feature (choose-one Features))
+          (status (feature-status feature)))
+     (if (or (eq '- status) (not (verify status)))
+         (update feature (current-docs feature))
+       (case status
+         (todo (let (doc patch feedback)
+                 (while (not (grok feature))
+                   (or (play-with feature)
+                       (grep feature Internet)
+                       (grep feature (wisdom-maybe "emacs-devel"))))
+                 (setq doc (write-documentation feature)
+                       patch (diff (current-docs) doc))
+                 (while (not (and (correct doc)
+                                  (well-placed doc)
+                                  (well-formed patch)))
+                   (setq doc (revise doc)
+                         patch (diff (current-docs) doc))
+                         feedback (wisdom-maybe "emacs-devel" patch))
+                 (when (install patch)
+                   (when (update feature (current-docs feature))
+                     (job-well-done user-login-name)))))
+         (n/a (job-well-done user-login-name))))))
+
+
+* Etc
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+  Local variables:
+  mode: outline
+  End:
diff --git a/doc/man/grep-changelog.1 b/doc/man/grep-changelog.1
new file mode 100644
index 0000000..1a08c6c
--- /dev/null
+++ b/doc/man/grep-changelog.1
@@ -0,0 +1,80 @@
+.\" -*- nroff -*-
+.\" See section COPYING for copyright and redistribution information.
+.TH grep-changelog 1
+.SH NAME
+grep-changelog \- print ChangeLog entries matching criteria
+.SH SYNOPSIS
+.B grep-changelog
+.RI [ options ]
+.RI [ CHANGELOG .\|.\|.]
+.SH DESCRIPTION
+.B grep-changelog
+searches the named
+.IR CHANGELOG s
+(by default files matching the regular expressions
+.B ChangeLog
+and
+.BR "ChangeLog\e.[0-9]+" )
+for entries matching the specified criteria.  At least one option or
+file must be specified.  This program is distributed with
+.BR "GNU Emacs" .
+.PP
+.SH OPTIONS
+The program accepts unambiguous abbreviations for option names.
+.TP
+.B \-\-author=AUTHOR
+Print entries whose author matches regular expression
+.IR AUTHOR .
+.TP
+.B \-\-text=TEXT
+Print entries whose text matches regular expression
+.IR TEXT .
+.TP
+.B \-\-exclude=TEXT
+Exclude entries matching regular expression
+.IR TEXT .
+.TP
+.B \-\-from\-date=YYYY\-MM\-DD
+Only consider entries made on or after the given date.
+ChangeLog date entries not in the
+\*(lqYYYY\-MM\-DD\*(rq format are never matched.
+.TP
+.B \-\-to\-date=YYYY\-MM\-DD
+Only consider entries made on or before the given date.
+.TP
+.B \-\-rcs\-log
+Print output in a format suitable for RCS log entries.
+This format removes author lines, leading spaces, and file names.
+.TP
+.B \-\-with\-date
+In RCS log format, print short dates.
+.TP
+.B \-\-reverse
+Show matches in reverse order.
+.TP
+.B \-\-version
+Display version information.
+.TP
+.B \-\-help
+Display basic usage information.
+.
+.SH COPYING
+Copyright
+.if t \(co
+.if n (C)
+2008-2015 Free Software Foundation, Inc.
+.PP
+Permission is granted to make and distribute verbatim copies of this
+document provided the copyright notice and this permission notice are
+preserved on all copies.
+.PP
+Permission is granted to copy and distribute modified versions of
+this document under the conditions for verbatim copying, provided that
+the entire resulting derived work is distributed under the terms of
+a permission notice identical to this one.
+.PP
+Permission is granted to copy and distribute translations of this
+document into another language, under the above conditions for
+modified versions, except that this permission notice may be stated
+in a translation approved by the Free Software Foundation.
+.
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index 8c1865d..fd9f6f5 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -8,7 +8,7 @@
 @copying
 This file documents the GNU Emacs Web Wowser (EWW) package.
 
-Copyright @copyright{} 2014-2015 Free Software Foundation, Inc.
+Copyright @copyright{} 2014--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/info.texi b/doc/misc/info.texi
index 0e2e64f..759956d 100644
--- a/doc/misc/info.texi
+++ b/doc/misc/info.texi
@@ -15,7 +15,7 @@
 This file describes how to use Info, the menu-driven GNU
 documentation system.
 
-Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1989, 1992, 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE
new file mode 100644
index 0000000..92b4c9e
--- /dev/null
+++ b/etc/CONTRIBUTE
@@ -0,0 +1,227 @@
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
+See end for license conditions.
+
+
+                       Contributing to Emacs
+
+Emacs is a collaborative project and we encourage contributions from
+anyone and everyone.  If you want to contribute in the way that will
+help us most, we recommend (1) fixing reported bugs and (2)
+implementing the feature ideas in etc/TODO.  However, if you think of
+new features to add, please suggest them too -- we might like your
+idea.  Porting to new platforms is also useful, when there is a new
+platform, but that is not common nowadays.
+
+For documentation on how to develop Emacs changes, refer to the Emacs
+Manual and the Emacs Lisp Reference Manual (both included in the Emacs
+distribution).  The web pages in http://www.gnu.org/software/emacs
+contain additional information.
+
+You may also want to submit your change so that can be considered for
+inclusion in a future version of Emacs (see below).
+
+If you don't feel up to hacking Emacs, there are many other ways to
+help.  You can answer questions on the mailing lists, write
+documentation, find and report bugs, check if existing bug reports
+are fixed in newer versions of Emacs, contribute to the Emacs web
+pages, or develop a package that works with Emacs.
+
+Here are some style and legal conventions for contributors to Emacs:
+
+
+* Coding Standards
+
+Contributed code should follow the GNU Coding Standards.
+
+If it doesn't, we'll need to find someone to fix the code before we
+can use it.
+
+Emacs has certain additional style and coding conventions.
+
+Ref: http://www.gnu.org/prep/standards/
+Ref: GNU Coding Standards Info Manual
+Ref: The "Tips" Appendix in the Emacs Lisp Reference.
+
+
+* Copyright Assignment
+
+The FSF (Free Software Foundation) is the copyright holder for GNU Emacs.
+The FSF is a nonprofit with a worldwide mission to promote computer
+user freedom and to defend the rights of all free software users.
+For general information, see the website http://www.fsf.org/ .
+
+Generally speaking, for non-trivial contributions to GNU Emacs we
+require that the copyright be assigned to the FSF.  For the reasons
+behind this, see: http://www.gnu.org/licenses/why-assign.html .
+
+Copyright assignment is a simple process.  Residents of some countries
+can do it entirely electronically.  We can help you get started, and
+answer any questions you may have (or point you to the people with the
+answers), at the address@hidden mailing list.
+
+(Please note: general discussion about why some GNU projects ask
+for a copyright assignment is off-topic for emacs-devel.
+See gnu-misc-discuss instead.)
+
+A copyright disclaimer is also a possibility, but we prefer an assignment.
+Note that the disclaimer, like an assignment, involves you sending
+signed paperwork to the FSF (simply saying "this is in the public domain"
+is not enough).  Also, a disclaimer cannot be applied to future work, it
+has to be repeated each time you want to send something new.
+
+We can accept small changes (roughly, fewer than 15 lines) without
+an assignment.  This is a cumulative limit (e.g. three separate 5 line
+patches) over all your contributions.
+
+* Getting the Source Code
+
+The latest version of the Emacs source code can be downloaded from the
+Savannah web site.  It is important to write your patch based on the
+latest version.  If you start from an older version, your patch may be
+outdated (so that maintainers will have a hard time applying it), or
+changes in Emacs may have made your patch unnecessary.
+
+After you have downloaded the repository source, you should read the file
+INSTALL.REPO for build instructions (they differ to some extent from a
+normal build).
+
+Ref: http://savannah.gnu.org/projects/emacs
+
+
+* Submitting Patches
+
+Every patch must have several pieces of information before we
+can properly evaluate it.
+
+When you have all these pieces, bundle them up in a mail message and
+send it to the developers.  Sending it to address@hidden
+(which is the bug/feature list) is recommended, because that list
+is coupled to a tracking system that makes it easier to locate patches.
+If your patch is not complete and you think it needs more discussion,
+you might want to send it to address@hidden instead.  If you
+revise your patch, send it as a followup to the initial topic.
+
+** Description
+
+For bug fixes, a description of the bug and how your patch fixes it.
+
+For new features, a description of the feature and your implementation.
+
+** ChangeLog
+
+A ChangeLog entry as plaintext (separate from the patch).
+
+See the existing ChangeLog files for format and content.  Note that,
+unlike some other projects, we do require ChangeLogs also for
+documentation, i.e. Texinfo files.
+
+Ref: "Change Log Concepts" node of the GNU Coding Standards Info
+Manual, for how to write good log entries.
+
+When using git, commit messages should use ChangeLog format, with a
+single short line explaining the change, then an empty line, then
+unindented ChangeLog entries.  (Essentially, a commit message should
+be a duplicate of what the patch adds to the ChangeLog files.  We are
+planning to automate this better, to avoid the duplication.)
+
+** The patch itself.
+
+If you are accessing the Emacs repository, make sure your copy is
+up-to-date (e.g. with 'git pull').  You can commit your changes
+to a private branch and generate a patch from the master version
+by using
+       git format-patch master
+Or you can leave your changes uncommitted and use
+        git diff
+With no repository, you can use
+       diff -u OLD NEW
+
+** Mail format.
+
+We prefer to get the patches as plain text, either inline (be careful
+your mail client does not change line breaks) or as MIME attachments.
+
+** Please reread your patch before submitting it.
+
+** Do not mix changes.
+
+If you send several unrelated changes together, we will ask you to
+separate them so we can consider each of the changes by itself.
+
+** Do not make formatting changes.
+
+Making cosmetic formatting changes (indentation, etc) makes it harder
+to see what you have really changed.
+
+
+* Coding style and conventions.
+
+** Mandatory reading:
+
+The "Tips and Conventions" Appendix of the Emacs Lisp Reference.
+
+** Avoid using `defadvice' or `eval-after-load' for Lisp code to be
+included in Emacs.
+
+** Remove all trailing whitespace in all source and text files.
+
+** Use ?\s instead of ?  in Lisp code for a space character.
+
+
+* Supplemental information for Emacs Developers.
+
+** Write access to the Emacs repository.
+
+Once you become a frequent contributor to Emacs, we can consider
+giving you write access to the version-control repository.
+
+
+** Emacs Mailing lists.
+
+Discussion about Emacs development takes place on address@hidden
+
+Bug reports and fixes, feature requests and implementations should be
+sent to address@hidden, the bug/feature list.  This is coupled
+to the tracker at http://debbugs.gnu.org .
+
+You can subscribe to the mailing lists, or see the list archives,
+by following links from http://savannah.gnu.org/mail/?group=emacs .
+
+** Document your changes.
+
+Any change that matters to end-users should have a NEWS entry.
+
+Think about whether your change requires updating the documentation
+(both manuals and doc-strings).  If you know it does not, mark the NEWS
+entry with "---".  If you know that *all* the necessary documentation
+updates have been made, mark the entry with "+++". Otherwise do not mark it.
+
+** Understanding Emacs Internals.
+
+The best way to understand Emacs Internals is to read the code,
+but the nodes "Tips" and "GNU Emacs Internals" in the Appendix
+of the Emacs Lisp Reference Manual may also help.
+
+The file etc/DEBUG describes how to debug Emacs bugs.
+
+
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+Local variables:
+mode: outline
+paragraph-separate: "[         ]*$"
+end:
diff --git a/etc/refcards/emacsver.tex b/etc/refcards/emacsver.tex
new file mode 100644
index 0000000..8b6e8c4
--- /dev/null
+++ b/etc/refcards/emacsver.tex
@@ -0,0 +1,4 @@
+%% This file is not generated by configure, because then the provided
+%% pdf files would always appear out-of-date.
+\def\versionemacs{24}           % major version of emacs
+\def\year{2015}                 % latest copyright year
diff --git a/lib-src/grep-changelog b/lib-src/grep-changelog
new file mode 100755
index 0000000..3e08734
--- /dev/null
+++ b/lib-src/grep-changelog
@@ -0,0 +1,265 @@
+#! /usr/bin/perl
+
+# Copyright (C) 1999-2015 Free Software Foundation, Inc.
+#
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# Extract entries from ChangeLogs matching specified criteria.
+# Optionally format the resulting output to a form suitable for RCS
+# logs, like they are used in Emacs, for example.  In this format,
+# author lines, leading spaces, and file names are removed.
+
+require 5;
+use strict;
+
+# Parse command line options.
+
+use vars qw($author $regexp $exclude $from_date $to_date
+            $rcs_log $with_date $version $help $reverse
+            @entries);
+
+use Getopt::Long;
+
+my $result;
+
+if (@ARGV == 0) {
+
+    # No arguments cannot possibly mean "show everything"!!
+    $result = 0;
+
+} else {
+
+    $result = GetOptions ("author=s" => \$author,
+                          "text=s"  => \$regexp,
+                          "exclude=s"  => \$exclude,
+                          "from-date=s" => \$from_date,
+                          "to-date=s" => \$to_date,
+                          "rcs-log" => \$rcs_log,
+                          "with-date" => \$with_date,
+                          "reverse!" => \$reverse,
+                          "version" => \$version,
+                          "help"    => \$help);
+
+    # If date options are specified, check that they have the format
+    # YYYY-MM-DD.
+
+    $result = 0 if $from_date && $from_date !~ /^\d\d\d\d-\d\d-\d\d$/;
+    $result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/;
+}
+
+# Print usage information and exit when necessary.
+
+if ($result == 0 || $help) {
+    print <<USAGE;
+
+Usage: $0 [options] [CHANGELOG...]
+
+Print entries in ChangeLogs matching various criteria.
+Valid options are:
+
+  --author=AUTHOR         Match entries whose author line matches
+                         regular expression AUTHOR
+  --text=TEXT             Match entries whose text matches regular
+                         expression TEXT
+  --exclude=TEXT         Exclude entries matching TEXT
+  --from-date=YYYY-MM-DD  Match entries not older than given date
+  --to-date=YYYY-MM-DD    Match entries not younger than given date
+  --rcs-log              Format output suitable for RCS log entries
+  --with-date            Print short date line in RCS log
+  --reverse               Show entries in reverse (chronological) order
+  --version              Print version info
+  --help                 Print this help
+
+If no CHANGELOG is specified scan the files "ChangeLog" and
+"ChangeLog.N+" in the current directory.  Old-style dates in ChangeLogs
+are not recognized.
+USAGE
+    exit !$help;
+}
+
+# Print version info and exit if `--version' was specified.
+
+if ($version) {
+    print "0.3\n";
+    exit 0;
+}
+
+
+# Value is non-zero if HEADER matches according to command line
+# options specified, i.e. it matches $author, and its date is in
+# the range $from_date <= date <= $to_date.
+
+sub header_match_p {
+    my $header = shift;
+
+    return 0 unless $header;
+
+    # No match if AUTHOR-regexp specified and doesn't match.
+    return 0 if $author && $header !~ /$author/;
+
+    # Check that the date of the entry matches if date options
+    # `--from-date' and/or `--to-date' were specified .  Old-style
+    # dates in ChangeLogs are not recognized, and never match.
+    if ($from_date || $to_date) {
+       if ($header =~ /^(\d\d\d\d-\d\d-\d\d)/) {
+           my $date = $1;
+           return 0 if $from_date && $date lt $from_date;
+           return 0 if $to_date && $date gt $to_date;
+       } else {
+           # Don't bother recognizing old-style dates.
+           return 0;
+       }
+    }
+
+    return 1;
+}
+
+
+# Value is non-zero if ENTRY matches the criteria specified on the
+# command line, i.e. it matches $regexp, and it doesn't match
+# $exclude.
+
+sub entry_match_p {
+    my $entry = shift;
+
+    return 0 unless $entry;
+
+    if ($regexp) {
+       return 1 if ($entry =~ /$regexp/
+                    && (!$exclude || $entry !~ $exclude));
+    } else {
+       return 1 if !$exclude || $entry !~ $exclude;
+    }
+
+    return 0;
+}
+
+
+# Print HEADER and/or ENTRY in a format suitable for what was
+# specified on the command line.  If $rcs_log is specified, author
+# lines are not printed, and leading spaces and file names are removed
+# from ChangeLog entries.
+
+sub print_log {
+    my ($header, $entry) = @_;
+    my $output = '';
+
+    if ($rcs_log) {
+       # Remove leading whitespace from entry.
+       $entry =~ s/^\s+//mg;
+       # Remove file name parts.
+       $entry =~ s/^\*.*\(/(/mg;
+       # Remove file name parts, 2.
+       $entry =~ s/^\*.*://mg;
+        if ($with_date) {
+           $header =~ /(\d\d\d\d-\d\d-\d\d)/;
+           $output = "!changelog-date $1\n";
+       }
+       $output .= $entry;
+    } else {
+       $output .= $header . $entry;
+    }
+
+    if ($reverse) {
+        push @entries, $output;
+    } else {
+        print $output;
+    }
+}
+
+# Scan LOG for matching entries, and print them to standard output.
+
+sub parse_changelog {
+    my $log = shift;
+    my $entry = undef;
+    my $header = undef;
+
+    @entries = () if $reverse;
+
+    # Open the ChangeLog.
+    open (IN, "< $log") || die "Cannot open $log: $!";
+
+    while (defined(my $line = <IN>)) {
+       if ($line =~ /^\S/) {
+           # Line is an author-line.  Print previous entry if
+           # it matches.
+           print_log ($header, $entry)
+               if header_match_p ($header) && entry_match_p ($entry);
+
+           $entry = "";
+           $header = $line;
+
+           # Add empty lines below the header.
+           while (defined($line = <IN>) && $line =~ /^\s*$/) {
+               $header = "$header$line";
+           }
+        }
+
+        last unless defined $line;
+
+       if ($line =~ /^\s*\*/) {
+           # LINE is the first line of a ChangeLog entry.  Print
+           # previous entry if it matches.
+           print_log ($header, $entry)
+               if header_match_p ($header) && entry_match_p ($entry);
+           $entry = $line;
+       } else {
+           # Add LINE to the current entry.
+           $entry = "$entry$line";
+       }
+    }
+
+    # Print last entry if it matches.
+    print_log ($header, $entry)
+       if header_match_p ($header) && entry_match_p ($entry);
+
+    close IN;
+
+    if ($reverse) {
+        for (my $entry = @entries; $entry; $entry--) {
+            print $entries[$entry-1];
+        }
+    }
+}
+
+
+# Main program.  Process ChangeLogs.
+
+# If files were specified on the command line, parse those files in the
+# order supplied by the user; otherwise parse default files ChangeLog and
+# ChangeLog.NNN according to $reverse.
+unless (@ARGV > 0) {
+    @ARGV = ("ChangeLog");
+
+    push @ARGV,
+      map {"ChangeLog.$_"}
+        sort {$b <=> $a}
+          map {/\.(\d+)$/; $1}
+            do {
+                opendir D, '.';
+                grep /^ChangeLog\.\d+$/, readdir D;
+            };
+
+    @ARGV = reverse @ARGV if $reverse;
+}
+
+while (defined (my $log = shift @ARGV)) {
+    parse_changelog ($log) if -f $log;
+}
+
+
+# grep-changelog ends here.
diff --git a/lib-src/test-distrib.c b/lib-src/test-distrib.c
new file mode 100644
index 0000000..6a12201
--- /dev/null
+++ b/lib-src/test-distrib.c
@@ -0,0 +1,88 @@
+/* test-distrib.c --- testing distribution of nonprinting chars
+
+Copyright (C) 1987, 1993-1995, 1999, 2001-2015 Free Software Foundation,
+Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Break string in two parts to avoid buggy C compilers that ignore characters
+   after nulls in strings.  */
+
+static char string1[] = "Testing distribution of nonprinting chars:\n\
+Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\
+Should be 0000: ";
+
+static char string2[] = ".\n\
+This file is read by the `test-distribution' program.\n\
+If you change it, you will make that program fail.\n";
+
+/* Like `read' but keeps trying until it gets SIZE bytes or reaches eof.  */
+static int
+cool_read (int fd, char *buf, size_t size)
+{
+  ssize_t num;
+  ssize_t sofar = 0;
+
+  while (1)
+    {
+      if ((num = read (fd, buf + sofar, size - sofar)) == 0)
+       return sofar;
+      else if (num < 0)
+       return num;
+      sofar += num;
+    }
+}
+
+int
+main (int argc, char **argv)
+{
+  int fd;
+  char buf[300];
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "Usage: %s testfile\n", argv[0]);
+      exit (EXIT_FAILURE);
+    }
+  fd = open (argv[1], O_RDONLY);
+  if (fd < 0)
+    {
+      perror (argv[1]);
+      exit (EXIT_FAILURE);
+    }
+  if (cool_read (fd, buf, sizeof string1) != sizeof string1 ||
+      strcmp (buf, string1) ||
+      cool_read (fd, buf, sizeof string2) != sizeof string2 - 1 ||
+      strncmp (buf, string2, sizeof string2 - 1))
+    {
+      fprintf (stderr, "Data in file `%s' has been damaged.\n\
+Most likely this means that many nonprinting characters\n\
+have been corrupted in the files of Emacs, and it will not work.\n",
+              argv[1]);
+      exit (EXIT_FAILURE);
+    }
+  close (fd);
+  return EXIT_SUCCESS;
+}
+
+
+/* test-distrib.c ends here */
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
index 906fe92..b41c393 100644
--- a/lib/alloca.in.h
+++ b/lib/alloca.in.h
@@ -1,7 +1,7 @@
 /* Memory allocation on the stack.
 
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2015 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
diff --git a/lib/binary-io.h b/lib/binary-io.h
index f5b66c7..8478003 100644
--- a/lib/binary-io.h
+++ b/lib/binary-io.h
@@ -1,5 +1,6 @@
 /* Binary mode I/O.
-   Copyright (C) 2001, 2003, 2005, 2008-2015 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2008-2015 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
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
index 4764473..53c443a 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -5,7 +5,8 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2015 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2015 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
diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c
index 6deb6d1..dbf17b2 100644
--- a/lib/c-strcasecmp.c
+++ b/lib/c-strcasecmp.c
@@ -1,5 +1,6 @@
 /* c-strcasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2015 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
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
index b98e368..580ea23 100644
--- a/lib/c-strncasecmp.c
+++ b/lib/c-strncasecmp.c
@@ -1,5 +1,6 @@
 /* c-strncasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2015 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
diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c
index f2f5da2..3b3153e 100644
--- a/lib/careadlinkat.c
+++ b/lib/careadlinkat.c
@@ -1,7 +1,7 @@
 /* Read symbolic links into a buffer without size limitation, relative to fd.
 
-   Copyright (C) 2001, 2003-2004, 2007, 2009-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2015 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
diff --git a/lib/close-stream.c b/lib/close-stream.c
index 6e3d865..1c4e74c 100644
--- a/lib/close-stream.c
+++ b/lib/close-stream.c
@@ -1,6 +1,7 @@
 /* Close a stream, with nicer error checking than fclose's.
 
-   Copyright (C) 1998-2002, 2004, 2006-2015 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2006-2015 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
diff --git a/lib/dosname.h b/lib/dosname.h
index 893baf6..25aba13 100644
--- a/lib/dosname.h
+++ b/lib/dosname.h
@@ -1,6 +1,7 @@
 /* File names on MS-DOS/Windows systems.
 
-   Copyright (C) 2000-2001, 2004-2006, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2004-2006, 2009-2015 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
diff --git a/lib/dup2.c b/lib/dup2.c
index 0e13214..94406df 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -1,6 +1,7 @@
 /* Duplicate an open file descriptor to a specified file descriptor.
 
-   Copyright (C) 1999, 2004-2007, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2004-2007, 2009-2015 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
diff --git a/lib/filemode.h b/lib/filemode.h
index ff0460a..805bc5a 100644
--- a/lib/filemode.h
+++ b/lib/filemode.h
@@ -1,7 +1,7 @@
 /* Make a string describing file modes.
 
-   Copyright (C) 1998-1999, 2003, 2006, 2009-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 1998-1999, 2003, 2006, 2009-2015 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
diff --git a/lib/fpending.c b/lib/fpending.c
index c4b4a51..05e84d3 100644
--- a/lib/fpending.c
+++ b/lib/fpending.c
@@ -1,6 +1,6 @@
 /* fpending.c -- return the number of pending output bytes on a stream
-   Copyright (C) 2000, 2004, 2006-2007, 2009-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2015 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
diff --git a/lib/fpending.h b/lib/fpending.h
index 5a1b2ad..1944282 100644
--- a/lib/fpending.h
+++ b/lib/fpending.h
@@ -1,7 +1,7 @@
 /* Declare __fpending.
 
-   Copyright (C) 2000, 2003, 2005-2006, 2009-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2015 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
diff --git a/lib/getgroups.c b/lib/getgroups.c
index 5563dfb..a7f0f9e 100644
--- a/lib/getgroups.c
+++ b/lib/getgroups.c
@@ -1,6 +1,7 @@
 /* provide consistent interface to getgroups for systems that don't allow N==0
 
-   Copyright (C) 1996, 1999, 2003, 2006-2015 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1999, 2003, 2006-2015 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
diff --git a/lib/getloadavg.c b/lib/getloadavg.c
index 0cbca26..119a32b 100644
--- a/lib/getloadavg.c
+++ b/lib/getloadavg.c
@@ -1,7 +1,7 @@
 /* Get the system load averages.
 
-   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2015 Free
+   Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with gnulib.
    Bugs can be reported to address@hidden
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
index 9248f76..1688631 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -1,6 +1,6 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2015 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/getopt1.c b/lib/getopt1.c
index 2b1feb6..60760ea 100644
--- a/lib/getopt1.c
+++ b/lib/getopt1.c
@@ -1,6 +1,6 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2015 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/getopt_int.h b/lib/getopt_int.h
index e893a6e..89c896a 100644
--- a/lib/getopt_int.h
+++ b/lib/getopt_int.h
@@ -1,6 +1,6 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2015 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/gettext.h b/lib/gettext.h
index 599a14e..c10c702 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -1,6 +1,6 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 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
diff --git a/lib/gettime.c b/lib/gettime.c
index 1c47e3b..3786231 100644
--- a/lib/gettime.c
+++ b/lib/gettime.c
@@ -1,6 +1,7 @@
 /* gettime -- get the system clock
 
-   Copyright (C) 2002, 2004-2007, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004-2007, 2009-2015 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
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
index e0e2e69..ff6940c 100644
--- a/lib/gettimeofday.c
+++ b/lib/gettimeofday.c
@@ -1,6 +1,7 @@
 /* Provide gettimeofday for systems that don't have it or for which it's 
broken.
 
-   Copyright (C) 2001-2003, 2005-2007, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2007, 2009-2015 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
diff --git a/lib/group-member.c b/lib/group-member.c
index 23074e4..a60fae9 100644
--- a/lib/group-member.c
+++ b/lib/group-member.c
@@ -1,7 +1,7 @@
 /* group-member.c -- determine whether group id is in calling user's group list
 
-   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2015 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
diff --git a/lib/md5.c b/lib/md5.c
index 30525dc..1a73b2a 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -1,7 +1,7 @@
 /* Functions to compute MD5 message digest of files or memory blocks.
    according to the definition of MD5 in RFC 1321 from April 1992.
-   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2015 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify it
diff --git a/lib/md5.h b/lib/md5.h
index 43add99..eb6fff6 100644
--- a/lib/md5.h
+++ b/lib/md5.h
@@ -1,7 +1,7 @@
 /* Declaration of functions and data types used for MD5 sum computing
    library functions.
-   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2015 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify it
diff --git a/lib/memrchr.c b/lib/memrchr.c
index 3827208..4540277 100644
--- a/lib/memrchr.c
+++ b/lib/memrchr.c
@@ -1,7 +1,7 @@
 /* memrchr -- find the last occurrence of a byte in a memory block
 
-   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2015 Free
+   Software Foundation, Inc.
 
    Based on strlen implementation by Torbjorn Granlund (address@hidden),
    with help from Dan Sahlin (address@hidden) and
diff --git a/lib/sha1.c b/lib/sha1.c
index 4411cee..90faa4e 100644
--- a/lib/sha1.c
+++ b/lib/sha1.c
@@ -1,7 +1,8 @@
 /* sha1.c - Functions to compute SHA1 message digest of files or
    memory blocks according to the NIST specification FIPS-180-1.
 
-   Copyright (C) 2000-2001, 2003-2006, 2008-2015 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2003-2006, 2008-2015 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 the
diff --git a/lib/sig2str.c b/lib/sig2str.c
index 58154da..0966dd5 100644
--- a/lib/sig2str.c
+++ b/lib/sig2str.c
@@ -1,6 +1,7 @@
 /* sig2str.c -- convert between signal names and numbers
 
-   Copyright (C) 2002, 2004, 2006, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2006, 2009-2015 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
diff --git a/lib/stdarg.in.h b/lib/stdarg.in.h
new file mode 100644
index 0000000..5239f51
--- /dev/null
+++ b/lib/stdarg.in.h
@@ -0,0 +1,35 @@
+/* Substitute for and wrapper around <stdarg.h>.
+   Copyright (C) 2008-2015 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
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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/>.  */
+
+#ifndef address@hidden@_STDARG_H
+
+#if __GNUC__ >= 3
address@hidden@
+#endif
address@hidden@
+
+/* The include_next requires a split double-inclusion guard.  */
address@hidden@ @NEXT_STDARG_H@
+
+#ifndef address@hidden@_STDARG_H
+#define address@hidden@_STDARG_H
+
+#ifndef va_copy
+# define va_copy(a,b) ((a) = (b))
+#endif
+
+#endif /* address@hidden@_STDARG_H */
+#endif /* address@hidden@_STDARG_H */
diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h
new file mode 100644
index 0000000..64a1761
--- /dev/null
+++ b/lib/stdbool.in.h
@@ -0,0 +1,132 @@
+/* Copyright (C) 2001-2003, 2006-2015 Free Software Foundation, Inc.
+   Written by Bruno Haible <address@hidden>, 2001.
+
+   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
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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/>.  */
+
+#ifndef _GL_STDBOOL_H
+#define _GL_STDBOOL_H
+
+/* ISO C 99 <stdbool.h> for platforms that lack it.  */
+
+/* Usage suggestions:
+
+   Programs that use <stdbool.h> should be aware of some limitations
+   and standards compliance issues.
+
+   Standards compliance:
+
+       - <stdbool.h> must be #included before 'bool', 'false', 'true'
+         can be used.
+
+       - You cannot assume that sizeof (bool) == 1.
+
+       - Programs should not undefine the macros bool, true, and false,
+         as C99 lists that as an "obsolescent feature".
+
+   Limitations of this substitute, when used in a C89 environment:
+
+       - <stdbool.h> must be #included before the '_Bool' type can be used.
+
+       - You cannot assume that _Bool is a typedef; it might be a macro.
+
+       - Bit-fields of type 'bool' are not supported.  Portable code
+         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
+
+       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
+         performed in such a way that every nonzero value gets converted
+         to 'true', and zero gets converted to 'false'.  This doesn't work
+         with this substitute.  With this substitute, only the values 0 and 1
+         give the expected result when converted to _Bool' or 'bool'.
+
+       - C99 allows the use of (_Bool)0.0 in constant expressions, but
+         this substitute cannot always provide this property.
+
+   Also, it is suggested that programs use 'bool' rather than '_Bool';
+   this isn't required, but 'bool' is more common.  */
+
+
+/* 7.16. Boolean type and values */
+
+/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
+   definitions below, but temporarily we have to #undef them.  */
+#if defined __BEOS__ && !defined __HAIKU__
+# include <OS.h> /* defines bool but not _Bool */
+# undef false
+# undef true
+#endif
+
+#ifdef __cplusplus
+# define _Bool bool
+# define bool bool
+#else
+# if defined __BEOS__ && !defined __HAIKU__
+  /* A compiler known to have 'bool'.  */
+  /* If the compiler already has both 'bool' and '_Bool', we can assume they
+     are the same types.  */
+#  if address@hidden@
+typedef bool _Bool;
+#  endif
+# else
+#  if !defined __GNUC__
+   /* If @HAVE__BOOL@:
+        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
+        the built-in _Bool type is used.  See
+          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+        Similar bugs are likely with other compilers as well; this file
+        wouldn't be used if <stdbool.h> was working.
+        So we override the _Bool type.
+      If address@hidden@:
+        Need to define _Bool ourselves. As 'signed char' or as an enum type?
+        Use of a typedef, with SunPRO C, leads to a stupid
+          "warning: _Bool is a keyword in ISO C99".
+        Use of an enum type, with IRIX cc, leads to a stupid
+          "warning(1185): enumerated type mixed with another type".
+        Even the existence of an enum type, without a typedef,
+          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
+        The only benefit of the enum, debuggability, is not important
+        with these compilers.  So use 'signed char' and no enum.  */
+#   define _Bool signed char
+#  else
+   /* With this compiler, trust the _Bool type if the compiler has it.  */
+#   if address@hidden@
+   /* For the sake of symbolic names in gdb, define true and false as
+      enum constants, not only as macros.
+      It is tempting to write
+         typedef enum { false = 0, true = 1 } _Bool;
+      so that gdb prints values of type 'bool' symbolically.  But then
+      values of type '_Bool' might promote to 'int' or 'unsigned int'
+      (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
+      (see ISO C 99 6.3.1.1.(2)).  So add a negative value to the
+      enum; this ensures that '_Bool' promotes to 'int'.  */
+typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
+#   endif
+#  endif
+# endif
+# define bool _Bool
+#endif
+
+/* The other macros must be usable in preprocessor directives.  */
+#ifdef __cplusplus
+# define false false
+# define true true
+#else
+# define false 0
+# define true 1
+#endif
+
+#define __bool_true_false_are_defined 1
+
+#endif /* _GL_STDBOOL_H */
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index 428a119..490be46 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -1,6 +1,7 @@
 /* A GNU-like <stdlib.h>.
 
-   Copyright (C) 1995, 2001-2004, 2006-2015 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2004, 2006-2015 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
diff --git a/lib/strftime.c b/lib/strftime.c
index 2426aae..fdb87b5 100644
--- a/lib/strftime.c
+++ b/lib/strftime.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2001, 2003-2007, 2009-2015 Free Software
+ * Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C 
Library.
    Bugs can be reported to address@hidden
diff --git a/lib/strtoimax.c b/lib/strtoimax.c
index 8ff65ce..6575c87 100644
--- a/lib/strtoimax.c
+++ b/lib/strtoimax.c
@@ -1,7 +1,7 @@
 /* Convert string representation of a number into an intmax_t value.
 
-   Copyright (C) 1999, 2001-2004, 2006, 2009-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 1999, 2001-2004, 2006, 2009-2015 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
diff --git a/lib/strtol.c b/lib/strtol.c
index 1bc1439..56b38af 100644
--- a/lib/strtol.c
+++ b/lib/strtol.c
@@ -1,7 +1,7 @@
 /* Convert string representation of a number into an integer value.
 
-   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2015 Free Software
-   Foundation, Inc.
+   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2015 Free
+   Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to address@hidden
diff --git a/lib/strtoll.c b/lib/strtoll.c
index d712349..e91cc29 100644
--- a/lib/strtoll.c
+++ b/lib/strtoll.c
@@ -1,6 +1,6 @@
 /* Function to parse a 'long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2001, 2009-2015 Free Software Foundation,
-   Inc.
+   Copyright (C) 1995-1997, 1999, 2001, 2009-2015 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/strtoull.c b/lib/strtoull.c
index 5cd2554..4d5e433 100644
--- a/lib/strtoull.c
+++ b/lib/strtoull.c
@@ -1,5 +1,6 @@
 /* Function to parse an 'unsigned long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997, 1999, 2009-2015 Free Software Foundation,
+   Inc.
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to address@hidden
 
diff --git a/lib/tempname.c b/lib/tempname.c
index 088b224..55fad94 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -1,6 +1,7 @@
 /* tempname.c - generate the name of a temporary file.
 
-   Copyright (C) 1991-2003, 2005-2007, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 1991-2003, 2005-2007, 2009-2015 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
diff --git a/lib/time_r.c b/lib/time_r.c
index 0b512de..222705b 100644
--- a/lib/time_r.c
+++ b/lib/time_r.c
@@ -1,6 +1,7 @@
 /* Reentrant time functions like localtime_r.
 
-   Copyright (C) 2003, 2006-2007, 2010-2015 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2010-2015 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
diff --git a/lib/unsetenv.c b/lib/unsetenv.c
index 87f41d5..80810e7 100644
--- a/lib/unsetenv.c
+++ b/lib/unsetenv.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1992, 1995-2002, 2005-2015 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995-2002, 2005-2015 Free Software Foundation,
+   Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
index f0e9778..397a04b 100644
--- a/lib/xalloc-oversized.h
+++ b/lib/xalloc-oversized.h
@@ -1,6 +1,7 @@
 /* xalloc-oversized.h -- memory allocation size checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2015 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2015 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
diff --git a/lisp/gnus/gnus-setup.el b/lisp/gnus/gnus-setup.el
new file mode 100644
index 0000000..86b3bff
--- /dev/null
+++ b/lisp/gnus/gnus-setup.el
@@ -0,0 +1,191 @@
+;;; gnus-setup.el --- Initialization & Setup for Gnus 5
+
+;; Copyright (C) 1995-1996, 2000-2015 Free Software Foundation, Inc.
+
+;; Author: Steven L. Baur <address@hidden>
+;; Keywords: news
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;; My head is starting to spin with all the different mail/news packages.
+;; Stop The Madness!
+
+;; Given that Emacs Lisp byte codes may be diverging, it is probably best
+;; not to byte compile this, and just arrange to have the .el loaded out
+;; of .emacs.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(defvar gnus-use-installed-gnus t
+  "*If non-nil use installed version of Gnus.")
+
+(defvar gnus-use-installed-mailcrypt (featurep 'xemacs)
+  "*If non-nil use installed version of mailcrypt.")
+
+(defvar gnus-emacs-lisp-directory (if (featurep 'xemacs)
+                                     "/usr/local/lib/xemacs/"
+                                   "/usr/local/share/emacs/")
+  "Directory where Emacs site lisp is located.")
+
+(defvar gnus-gnus-lisp-directory (concat gnus-emacs-lisp-directory
+                                        "gnus/lisp/")
+  "Directory where Gnus Emacs lisp is found.")
+
+(defvar gnus-mailcrypt-lisp-directory (concat gnus-emacs-lisp-directory
+                                             "site-lisp/mailcrypt/")
+  "Directory where Mailcrypt Emacs Lisp is found.")
+
+(defvar gnus-bbdb-lisp-directory (concat gnus-emacs-lisp-directory
+                                        "site-lisp/bbdb/")
+  "Directory where Big Brother Database is found.")
+
+(defvar gnus-use-mhe nil
+  "Set this if you want to use MH-E for mail reading.")
+(defvar gnus-use-rmail nil
+  "Set this if you want to use RMAIL for mail reading.")
+(defvar gnus-use-sendmail nil
+  "Set this if you want to use SENDMAIL for mail reading.")
+(defvar gnus-use-vm nil
+  "Set this if you want to use the VM package for mail reading.")
+(defvar gnus-use-sc nil
+  "Set this if you want to use Supercite.")
+(defvar gnus-use-mailcrypt t
+  "Set this if you want to use Mailcrypt for dealing with PGP messages.")
+(defvar gnus-use-bbdb nil
+  "Set this if you want to use the Big Brother DataBase.")
+
+(when (and (not gnus-use-installed-gnus)
+          (null (member gnus-gnus-lisp-directory load-path)))
+  (push gnus-gnus-lisp-directory load-path))
+
+;;; We can't do this until we know where Gnus is.
+(require 'message)
+
+;;; Mailcrypt by
+;;; Jin Choi <address@hidden>
+;;; Patrick LoPresti <address@hidden>
+
+(when gnus-use-mailcrypt
+  (when (and (not gnus-use-installed-mailcrypt)
+            (null (member gnus-mailcrypt-lisp-directory load-path)))
+    (setq load-path (cons gnus-mailcrypt-lisp-directory load-path)))
+  (autoload 'mc-install-write-mode "mailcrypt" nil t)
+  (autoload 'mc-install-read-mode "mailcrypt" nil t)
+;;;   (add-hook 'message-mode-hook 'mc-install-write-mode)
+;;;   (add-hook 'gnus-summary-mode-hook 'mc-install-read-mode)
+  (when gnus-use-mhe
+    (add-hook 'mh-folder-mode-hook 'mc-install-read-mode)
+    (add-hook 'mh-letter-mode-hook 'mc-install-write-mode)))
+
+;;; BBDB by
+;;; Jamie Zawinski <address@hidden>
+
+(when gnus-use-bbdb
+  ;; bbdb will never be installed with emacs.
+  (when (null (member gnus-bbdb-lisp-directory load-path))
+    (setq load-path (cons gnus-bbdb-lisp-directory load-path)))
+  (autoload 'bbdb "bbdb-com"
+    "Insidious Big Brother Database" t)
+  (autoload 'bbdb-name "bbdb-com"
+    "Insidious Big Brother Database" t)
+  (autoload 'bbdb-company "bbdb-com"
+    "Insidious Big Brother Database" t)
+  (autoload 'bbdb-net "bbdb-com"
+    "Insidious Big Brother Database" t)
+  (autoload 'bbdb-notes "bbdb-com"
+    "Insidious Big Brother Database" t)
+
+  (when gnus-use-vm
+    (autoload 'bbdb-insinuate-vm "bbdb-vm"
+      "Hook BBDB into VM" t))
+
+  (when gnus-use-rmail
+    (autoload 'bbdb-insinuate-rmail "bbdb-rmail"
+      "Hook BBDB into RMAIL" t)
+    (add-hook 'rmail-mode-hook 'bbdb-insinuate-rmail))
+
+  (when gnus-use-mhe
+    (autoload 'bbdb-insinuate-mh "bbdb-mh"
+      "Hook BBDB into MH-E" t)
+    (add-hook 'mh-folder-mode-hook 'bbdb-insinuate-mh))
+
+  (autoload 'bbdb-insinuate-gnus "bbdb-gnus"
+    "Hook BBDB into Gnus" t)
+  (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
+
+  (when gnus-use-sendmail
+    (autoload 'bbdb-insinuate-sendmail "bbdb"
+      "Insidious Big Brother Database" t)
+    (add-hook 'mail-setup-hook 'bbdb-insinuate-sendmail)
+    (add-hook 'message-setup-hook 'bbdb-insinuate-sendmail)))
+
+(when gnus-use-sc
+  (add-hook 'mail-citation-hook 'sc-cite-original)
+  (setq message-cite-function 'sc-cite-original))
+
+;;;### (autoloads (gnus gnus-slave gnus-no-server) "gnus" "lisp/gnus.el" 
(12473 2137))
+;;; Generated autoloads from lisp/gnus.el
+
+;; Don't redo this if autoloads already exist
+(unless (fboundp 'gnus)
+  (autoload 'gnus-slave-no-server "gnus" "\
+Read network news as a slave without connecting to local server." t nil)
+
+  (autoload 'gnus-no-server "gnus" "\
+Read network news.
+If ARG is a positive number, Gnus will use that as the
+startup level.  If ARG is nil, Gnus will be started at level 2.
+If ARG is non-nil and not a positive number, Gnus will
+prompt the user for the name of an NNTP server to use.
+As opposed to `gnus', this command will not connect to the local server." t 
nil)
+
+  (autoload 'gnus-slave "gnus" "\
+Read news as a slave." t nil)
+
+  (autoload 'gnus "gnus" "\
+Read network news.
+If ARG is non-nil and a positive number, Gnus will use that as the
+startup level.  If ARG is non-nil and not a positive number, Gnus will
+prompt the user for the name of an NNTP server to use." t nil)
+
+;;;***
+
+;;; These have moved out of gnus.el into other files.
+;;; FIX FIX FIX: should other things be in gnus-setup? or these not in it?
+  (autoload 'gnus-update-format "gnus-spec" "\
+Update the format specification near point." t nil)
+
+  (autoload 'gnus-fetch-group "gnus-group" "\
+Start Gnus if necessary and enter GROUP.
+Returns whether the fetching was successful or not." t nil)
+
+  (defalias 'gnus-batch-kill 'gnus-batch-score)
+
+  (autoload 'gnus-batch-score "gnus-kill" "\
+Run batched scoring.
+Usage: emacs -batch -l gnus -f gnus-batch-score <newsgroups> ...
+Newsgroups is a list of strings in Bnews format.  If you want to score
+the comp hierarchy, you'd say \"comp.all\".  If you would not like to
+score the alt hierarchy, you'd say \"!alt.all\"." t nil))
+
+(provide 'gnus-setup)
+
+(run-hooks 'gnus-setup-load-hook)
+
+;;; gnus-setup.el ends here
diff --git a/lisp/progmodes/cap-words.el b/lisp/progmodes/cap-words.el
new file mode 100644
index 0000000..94e865d
--- /dev/null
+++ b/lisp/progmodes/cap-words.el
@@ -0,0 +1,98 @@
+;;; cap-words.el --- minor mode for motion in CapitalizedWordIdentifiers
+
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
+
+;; Author: Dave Love <address@hidden>
+;; Keywords: languages
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Provides Capitalized Words minor mode for word movement in
+;; identifiers CapitalizedLikeThis.
+
+;; Note that the same effect could be obtained by frobbing the
+;; category of upper case characters to produce word boundaries, but
+;; the necessary processing isn't done for ASCII characters.
+
+;; Fixme: This doesn't work properly for mouse double clicks.
+
+;;; Code:
+
+(defun capitalized-find-word-boundary (pos limit)
+  "Function for use in `find-word-boundary-function-table'.
+Looks for word boundaries before capitals."
+  (save-excursion
+    (goto-char pos)
+    (let (case-fold-search)
+      (if (<= pos limit)
+         ;; Fixme: Are these regexps the best?
+         (or (and (re-search-forward "\\=.\\w*[[:upper:]]"
+                                     limit t)
+                  (progn (backward-char)
+                         t))
+             (re-search-forward "\\>" limit t))
+       (or (re-search-backward "[[:upper:]]\\w*\\=" limit t)
+           (re-search-backward "\\<" limit t))))
+    (point)))
+
+
+(defconst capitalized-find-word-boundary-function-table
+  (let ((tab (make-char-table nil)))
+    (set-char-table-range tab t #'capitalized-find-word-boundary)
+    tab)
+  "Assigned to `find-word-boundary-function-table' in Capitalized Words mode.")
+
+;;;###autoload
+(define-minor-mode capitalized-words-mode
+  "Toggle Capitalized Words mode.
+With a prefix argument ARG, enable Capitalized Words mode if ARG
+is positive, and disable it otherwise.  If called from Lisp,
+enable the mode if ARG is omitted or nil.
+
+Capitalized Words mode is a buffer-local minor mode.  When
+enabled, a word boundary occurs immediately before an uppercase
+letter in a symbol.  This is in addition to all the normal
+boundaries given by the syntax and category tables.  There is no
+restriction to ASCII.
+
+E.g. the beginning of words in the following identifier are as marked:
+
+  capitalizedWorDD
+  ^          ^  ^^
+
+Note that these word boundaries only apply for word motion and
+marking commands such as \\[forward-word].  This mode does not affect word
+boundaries found by regexp matching (`\\>', `\\w' &c).
+
+This style of identifiers is common in environments like Java ones,
+where underscores aren't trendy enough.  Capitalization rules are
+sometimes part of the language, e.g. Haskell, which may thus encourage
+such a style.  It is appropriate to add `capitalized-words-mode' to
+the mode hook for programming language modes in which you encounter
+variables like this, e.g. `java-mode-hook'.  It's unlikely to cause
+trouble if such identifiers aren't used.
+
+See also `glasses-mode' and `studlify-word'.
+Obsoletes `c-forward-into-nomenclature'."
+  nil " Caps" nil :group 'programming
+  (set (make-local-variable 'find-word-boundary-function-table)
+       capitalized-find-word-boundary-function-table))
+
+(provide 'cap-words)
+
+;;; cap-words.el ends here
diff --git a/lisp/w32-common-fns.el b/lisp/w32-common-fns.el
new file mode 100644
index 0000000..1e4e9fe
--- /dev/null
+++ b/lisp/w32-common-fns.el
@@ -0,0 +1,134 @@
+;;; w32-common-fns.el --- Lisp routines for Windows and Cygwin-w32
+
+;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;;
+;;; This file contains functions that are used by both native NT Emacs
+;;; and Cygwin Emacs compiled to use the native Windows widget
+;;; library.
+
+(declare-function x-server-version "w32fns.c" (&optional terminal))
+
+(defun w32-version ()
+  "Return the MS-Windows version numbers.
+The value is a list of three integers: the major and minor version
+numbers, and the build number."
+  (x-server-version))
+
+(defun w32-using-nt ()
+  "Return non-nil if running on a Windows NT descendant.
+That includes all Windows systems except for 9X/Me."
+  (getenv "SystemRoot"))
+
+(declare-function w32-get-clipboard-data "w32select.c")
+(declare-function w32-set-clipboard-data "w32select.c")
+(declare-function x-server-version "w32fns.c" (&optional display))
+
+;;; Fix interface to (X-specific) mouse.el
+(defun x-set-selection (type data)
+  "Make an X selection of type TYPE and value DATA.
+The argument TYPE (nil means `PRIMARY') says which selection, and
+DATA specifies the contents.  TYPE must be a symbol.  \(It can also
+be a string, which stands for the symbol with that name, but this
+is considered obsolete.)  DATA may be a string, a symbol, an
+integer (or a cons of two integers or list of two integers).
+
+The selection may also be a cons of two markers pointing to the same buffer,
+or an overlay.  In these cases, the selection is considered to be the text
+between the markers *at whatever time the selection is examined*.
+Thus, editing done in the buffer after you specify the selection
+can alter the effective value of the selection.
+
+The data may also be a vector of valid non-vector selection values.
+
+The return value is DATA.
+
+Interactively, this command sets the primary selection.  Without
+prefix argument, it reads the selection in the minibuffer.  With
+prefix argument, it uses the text of the region as the selection value.
+
+Note that on MS-Windows, primary and secondary selections set by Emacs
+are not available to other programs."
+  (put 'x-selections (or type 'PRIMARY) data))
+
+(defun x-get-selection (&optional type _data-type)
+  "Return the value of an X Windows selection.
+The argument TYPE (default `PRIMARY') says which selection,
+and the argument DATA-TYPE (default `STRING') says
+how to convert the data.
+
+TYPE may be any symbol \(but nil stands for `PRIMARY').  However,
+only a few symbols are commonly used.  They conventionally have
+all upper-case names.  The most often used ones, in addition to
+`PRIMARY', are `SECONDARY' and `CLIPBOARD'.
+
+DATA-TYPE is usually `STRING', but can also be one of the symbols
+in `selection-converter-alist', which see.  This argument is
+ignored on MS-Windows and MS-DOS."
+  (get 'x-selections (or type 'PRIMARY)))
+
+;; x-selection-owner-p is used in simple.el
+(defun x-selection-owner-p (&optional selection _terminal)
+  "" ; placeholder for doc.c
+  (and (memq selection '(nil PRIMARY SECONDARY))
+       (get 'x-selections (or selection 'PRIMARY))))
+
+;; The "Windows" keys on newer keyboards bring up the Start menu
+;; whether you want it or not - make Emacs ignore these keystrokes
+;; rather than beep.
+(global-set-key [lwindow] 'ignore)
+(global-set-key [rwindow] 'ignore)
+
+(defvar w32-charset-info-alist)                ; w32font.c
+
+
+;;;; Selections
+
+;; We keep track of the last text selected here, so we can check the
+;; current selection against it, and avoid passing back our own text
+;; from x-selection-value.
+(defvar x-last-selected-text nil)
+(defvar x-select-enable-clipboard)
+
+(defun x-get-selection-value ()
+  "Return the value of the current selection.
+Consult the selection.  Treat empty strings as if they were unset."
+  (if x-select-enable-clipboard
+      (let (text)
+       ;; Don't die if x-get-selection signals an error.
+       (with-demoted-errors "w32-get-clipboard-data:%s"
+         (setq text (w32-get-clipboard-data)))
+       (if (string= text "") (setq text nil))
+       (cond
+        ((not text) nil)
+        ((eq text x-last-selected-text) nil)
+        ((string= text x-last-selected-text)
+         ;; Record the newer string, so subsequent calls can use the 'eq' test.
+         (setq x-last-selected-text text)
+         nil)
+        (t
+         (setq x-last-selected-text text))))))
+
+(defalias 'x-selection-value 'x-get-selection-value)
+
+;; Arrange for the kill and yank functions to set and check the clipboard.
+(setq interprogram-cut-function 'x-select-text)
+(setq interprogram-paste-function 'x-get-selection-value)
+
+(provide 'w32-common-fns)
diff --git a/m4/alloca.m4 b/m4/alloca.m4
index 8408bed..e89f19b 100644
--- a/m4/alloca.m4
+++ b/m4/alloca.m4
@@ -1,6 +1,6 @@
 # alloca.m4 serial 14
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2015 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2015 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/dup2.m4 b/m4/dup2.m4
index 0354c6a..bae6d01 100644
--- a/m4/dup2.m4
+++ b/m4/dup2.m4
@@ -1,5 +1,6 @@
 #serial 20
-dnl Copyright (C) 2002, 2005, 2007, 2009-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005, 2007, 2009-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/filemode.m4 b/m4/filemode.m4
index e2a195c..343719a 100644
--- a/m4/filemode.m4
+++ b/m4/filemode.m4
@@ -1,5 +1,6 @@
 # filemode.m4 serial 8
-dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/getgroups.m4 b/m4/getgroups.m4
index 16e72c7..8989a5c 100644
--- a/m4/getgroups.m4
+++ b/m4/getgroups.m4
@@ -3,7 +3,8 @@
 dnl From Jim Meyering.
 dnl A wrapper around AC_FUNC_GETGROUPS.
 
-# Copyright (C) 1996-1997, 1999-2004, 2008-2015 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2004, 2008-2015 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/getloadavg.m4 b/m4/getloadavg.m4
index 1234ba9..4844ae3 100644
--- a/m4/getloadavg.m4
+++ b/m4/getloadavg.m4
@@ -1,7 +1,7 @@
 # Check for getloadavg.
 
-# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2015 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2015 Free
+# Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/gettime.m4 b/m4/gettime.m4
index cd499ff..175e482 100644
--- a/m4/gettime.m4
+++ b/m4/gettime.m4
@@ -1,5 +1,6 @@
 # gettime.m4 serial 8
-dnl Copyright (C) 2002, 2004-2006, 2009-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004-2006, 2009-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
index ce246e1..95317d3 100644
--- a/m4/gettimeofday.m4
+++ b/m4/gettimeofday.m4
@@ -1,6 +1,7 @@
 # serial 21
 
-# Copyright (C) 2001-2003, 2005, 2007, 2009-2015 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2015 Free Software
+# Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/group-member.m4 b/m4/group-member.m4
index 526a67a..b18e95b 100644
--- a/m4/group-member.m4
+++ b/m4/group-member.m4
@@ -1,6 +1,7 @@
 # serial 14
 
-# Copyright (C) 1999-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2007, 2009-2015 Free Software
+# Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/memrchr.m4 b/m4/memrchr.m4
index f3f74b8..bac0a7a 100644
--- a/m4/memrchr.m4
+++ b/m4/memrchr.m4
@@ -1,6 +1,6 @@
 # memrchr.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mktime.m4 b/m4/mktime.m4
index 3f0e1ee..aa1b985 100644
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -1,6 +1,6 @@
 # serial 25
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4
index 0e3db7a..ee4ed0b 100644
--- a/m4/pathmax.m4
+++ b/m4/pathmax.m4
@@ -1,6 +1,6 @@
 # pathmax.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2015 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2015 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sig2str.m4 b/m4/sig2str.m4
index 71cfa4b..f9b2e11 100644
--- a/m4/sig2str.m4
+++ b/m4/sig2str.m4
@@ -1,5 +1,6 @@
 # serial 7
-dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4
index 25bd451..06d3b60 100644
--- a/m4/ssize_t.m4
+++ b/m4/ssize_t.m4
@@ -1,5 +1,6 @@
 # ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/st_dm_mode.m4 b/m4/st_dm_mode.m4
index 6543bf6..df69a84 100644
--- a/m4/st_dm_mode.m4
+++ b/m4/st_dm_mode.m4
@@ -1,6 +1,7 @@
 # serial 6
 
-# Copyright (C) 1998-1999, 2001, 2009-2015 Free Software Foundation, Inc.
+# Copyright (C) 1998-1999, 2001, 2009-2015 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/stat-time.m4 b/m4/stat-time.m4
index 9c8ceec..c7cacaa 100644
--- a/m4/stat-time.m4
+++ b/m4/stat-time.m4
@@ -1,7 +1,7 @@
 # Checks for stat-related time functions.
 
-# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2015 Free Software
-# Foundation, Inc.
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2015 Free
+# Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/stdarg.m4 b/m4/stdarg.m4
new file mode 100644
index 0000000..d208eb3
--- /dev/null
+++ b/m4/stdarg.m4
@@ -0,0 +1,78 @@
+# stdarg.m4 serial 6
+dnl Copyright (C) 2006, 2008-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Provide a working va_copy in combination with <stdarg.h>.
+
+AC_DEFUN([gl_STDARG_H],
+[
+  STDARG_H=''
+  NEXT_STDARG_H='<stdarg.h>'
+  AC_MSG_CHECKING([for va_copy])
+  AC_CACHE_VAL([gl_cv_func_va_copy], [
+    AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[#include <stdarg.h>]],
+         [[
+#ifndef va_copy
+void (*func) (va_list, va_list) = va_copy;
+#endif
+         ]])],
+      [gl_cv_func_va_copy=yes],
+      [gl_cv_func_va_copy=no])])
+  AC_MSG_RESULT([$gl_cv_func_va_copy])
+  if test $gl_cv_func_va_copy = no; then
+    dnl Provide a substitute.
+    dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5
+    dnl with some versions of the /usr/vac/bin/cc compiler. It has an 
<stdarg.h>
+    dnl which does '#undef va_copy', leading to a missing va_copy symbol. For
+    dnl this platform, we use an <stdarg.h> substitute. But we cannot use this
+    dnl approach on other platforms, because <stdarg.h> often defines only
+    dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do
+    dnl not work in this situation.
+    AC_EGREP_CPP([vaccine],
+      [#if defined _AIX && !defined __GNUC__
+        AIX vaccine
+       #endif
+      ], [gl_aixcc=yes], [gl_aixcc=no])
+    if test $gl_aixcc = yes; then
+      dnl Provide a substitute <stdarg.h> file.
+      STDARG_H=stdarg.h
+      gl_NEXT_HEADERS([stdarg.h])
+      dnl Fallback for the case when <stdarg.h> contains only macro 
definitions.
+      if test "$gl_cv_next_stdarg_h" = '""'; then
+        gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
+        NEXT_STDARG_H="$gl_cv_next_stdarg_h"
+      fi
+    else
+      dnl Provide a substitute in <config.h>, either __va_copy or as a simple
+      dnl assignment.
+      gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[#include <stdarg.h>]],
+             [[
+#ifndef __va_copy
+error, bail out
+#endif
+             ]])],
+          [gl_cv_func___va_copy=yes],
+          [gl_cv_func___va_copy=no])])
+      if test $gl_cv_func___va_copy = yes; then
+        AC_DEFINE([va_copy], [__va_copy],
+          [Define as a macro for copying va_list variables.])
+      else
+        AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed.  */
+#define gl_va_copy(a,b) ((a) = (b))])
+        AC_DEFINE([va_copy], [gl_va_copy],
+          [Define as a macro for copying va_list variables.])
+      fi
+    fi
+  fi
+  AC_SUBST([STDARG_H])
+  AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"])
+  AC_SUBST([NEXT_STDARG_H])
+])
diff --git a/m4/stdbool.m4 b/m4/stdbool.m4
new file mode 100644
index 0000000..7273b82
--- /dev/null
+++ b/m4/stdbool.m4
@@ -0,0 +1,100 @@
+# Check for stdbool.h that conforms to C99.
+
+dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# Prepare for substituting <stdbool.h> if it is not supported.
+
+AC_DEFUN([AM_STDBOOL_H],
+[
+  AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
+
+  # Define two additional variables used in the Makefile substitution.
+
+  if test "$ac_cv_header_stdbool_h" = yes; then
+    STDBOOL_H=''
+  else
+    STDBOOL_H='stdbool.h'
+  fi
+  AC_SUBST([STDBOOL_H])
+  AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
+
+  if test "$ac_cv_type__Bool" = yes; then
+    HAVE__BOOL=1
+  else
+    HAVE__BOOL=0
+  fi
+  AC_SUBST([HAVE__BOOL])
+])
+
+# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
+AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
+
+# This version of the macro is needed in autoconf <= 2.68.
+
+AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
+  [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
+     [ac_cv_header_stdbool_h],
+     [AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
+
+             struct s { _Bool s: 1; _Bool t; } s;
+
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
+           ]],
+           [[
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler 
optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + 
!!l
+                     + !m + !n + !o + !p + !q + !pq);
+           ]])],
+        [ac_cv_header_stdbool_h=yes],
+        [ac_cv_header_stdbool_h=no])])
+   AC_CHECK_TYPES([_Bool])
+])
diff --git a/m4/strftime.m4 b/m4/strftime.m4
index 4557626..dafcbaa 100644
--- a/m4/strftime.m4
+++ b/m4/strftime.m4
@@ -1,6 +1,7 @@
 # serial 33
 
-# Copyright (C) 1996-1997, 1999-2007, 2009-2015 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2007, 2009-2015 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4
index fde732a..7662cf8 100644
--- a/m4/strtoimax.m4
+++ b/m4/strtoimax.m4
@@ -1,5 +1,6 @@
 # strtoimax.m4 serial 14
-dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoll.m4 b/m4/strtoll.m4
index 666f44a..43365e1 100644
--- a/m4/strtoll.m4
+++ b/m4/strtoll.m4
@@ -1,5 +1,6 @@
 # strtoll.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoull.m4 b/m4/strtoull.m4
index 4267bd7..9822862 100644
--- a/m4/strtoull.m4
+++ b/m4/strtoull.m4
@@ -1,5 +1,6 @@
 # strtoull.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoumax.m4 b/m4/strtoumax.m4
index 5312ef4..d9d7893 100644
--- a/m4/strtoumax.m4
+++ b/m4/strtoumax.m4
@@ -1,5 +1,6 @@
 # strtoumax.m4 serial 12
-dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/time_h.m4 b/m4/time_h.m4
index 0f0b7d9..03579a3 100644
--- a/m4/time_h.m4
+++ b/m4/time_h.m4
@@ -1,6 +1,7 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software
+# Foundation, Inc.
 
 # serial 8
 
diff --git a/m4/timespec.m4 b/m4/timespec.m4
index 06b3533..e5dc48d 100644
--- a/m4/timespec.m4
+++ b/m4/timespec.m4
@@ -1,6 +1,7 @@
 #serial 15
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software
+# Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/utimbuf.m4 b/m4/utimbuf.m4
index 7c33ae9..fae96f1 100644
--- a/m4/utimbuf.m4
+++ b/m4/utimbuf.m4
@@ -1,7 +1,7 @@
 # serial 9
 
-# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2015 Free Software Foundation,
-# Inc.
+# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2015 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/nt/addsection.c b/nt/addsection.c
new file mode 100644
index 0000000..61b2fda
--- /dev/null
+++ b/nt/addsection.c
@@ -0,0 +1,544 @@
+/* Add an uninitialized data section to an executable.
+   Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+
+   Andrew Innes <address@hidden>       04-Jan-1999
+     based on code from unexw32.c
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <time.h>
+#if defined(__GNUC__) && !defined(MINGW_W64)
+#define _ANONYMOUS_UNION
+#define _ANONYMOUS_STRUCT
+#endif
+#include <windows.h>
+
+/* Include relevant definitions from IMAGEHLP.H, which can be found
+   in \\win32sdk\mstools\samples\image\include\imagehlp.h. */
+
+PIMAGE_NT_HEADERS
+(__stdcall * pfnCheckSumMappedFile) (PVOID BaseAddress,
+                                    DWORD_PTR FileLength,
+                                    PDWORD_PTR HeaderSum,
+                                    PDWORD_PTR CheckSum);
+
+#undef min
+#undef max
+#define min(x, y) (((x) < (y)) ? (x) : (y))
+#define max(x, y) (((x) > (y)) ? (x) : (y))
+
+
+/* File handling.  */
+
+typedef struct file_data {
+  const char    *name;
+  unsigned long  size;
+  HANDLE         file;
+  HANDLE         file_mapping;
+  unsigned char *file_base;
+} file_data;
+
+int
+open_input_file (file_data *p_file, const char *filename)
+{
+  HANDLE file;
+  HANDLE file_mapping;
+  void  *file_base;
+  unsigned long size, upper_size;
+
+  file = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+                    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+  if (file == INVALID_HANDLE_VALUE)
+    return FALSE;
+
+  size = GetFileSize (file, &upper_size);
+  file_mapping = CreateFileMapping (file, NULL, PAGE_READONLY,
+                                   0, size, NULL);
+  if (!file_mapping)
+    return FALSE;
+
+  file_base = MapViewOfFile (file_mapping, FILE_MAP_READ, 0, 0, size);
+  if (file_base == 0)
+    return FALSE;
+
+  p_file->name = filename;
+  p_file->size = size;
+  p_file->file = file;
+  p_file->file_mapping = file_mapping;
+  p_file->file_base = file_base;
+
+  return TRUE;
+}
+
+int
+open_output_file (file_data *p_file, const char *filename, unsigned long size)
+{
+  HANDLE file;
+  HANDLE file_mapping;
+  void  *file_base;
+
+  file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
+                    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
+  if (file == INVALID_HANDLE_VALUE)
+    return FALSE;
+
+  file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE,
+                                   0, size, NULL);
+  if (!file_mapping)
+    return FALSE;
+
+  file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size);
+  if (file_base == 0)
+    return FALSE;
+
+  p_file->name = filename;
+  p_file->size = size;
+  p_file->file = file;
+  p_file->file_mapping = file_mapping;
+  p_file->file_base = file_base;
+
+  return TRUE;
+}
+
+/* Close the system structures associated with the given file.  */
+void
+close_file_data (file_data *p_file)
+{
+  UnmapViewOfFile (p_file->file_base);
+  CloseHandle (p_file->file_mapping);
+  /* For the case of output files, set final size.  */
+  SetFilePointer (p_file->file, p_file->size, NULL, FILE_BEGIN);
+  SetEndOfFile (p_file->file);
+  CloseHandle (p_file->file);
+}
+
+
+/* Routines to manipulate NT executable file sections.  */
+
+unsigned long
+get_unrounded_section_size (PIMAGE_SECTION_HEADER p_section)
+{
+  /* The true section size, before rounding, for an initialized data or
+     code section.  (Supposedly some linkers swap the meaning of these
+     two values.)  */
+  return min (p_section->SizeOfRawData,
+             p_section->Misc.VirtualSize);
+}
+
+/* Return pointer to section header for named section. */
+IMAGE_SECTION_HEADER *
+find_section (const char *name, IMAGE_NT_HEADERS *nt_header)
+{
+  PIMAGE_SECTION_HEADER section;
+  int i;
+
+  section = IMAGE_FIRST_SECTION (nt_header);
+
+  for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
+    {
+      if (strcmp (section->Name, name) == 0)
+       return section;
+      section++;
+    }
+  return NULL;
+}
+
+/* Return pointer to section header for section containing the given
+   relative virtual address. */
+IMAGE_SECTION_HEADER *
+rva_to_section (DWORD_PTR rva, IMAGE_NT_HEADERS * nt_header)
+{
+  PIMAGE_SECTION_HEADER section;
+  int i;
+
+  section = IMAGE_FIRST_SECTION (nt_header);
+
+  for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
+    {
+      /* Some linkers (eg. the NT SDK linker I believe) swapped the
+        meaning of these two values - or rather, they ignored
+        VirtualSize entirely and always set it to zero.  This affects
+        some very old exes (eg. gzip dated Dec 1993).  Since
+        w32_executable_type relies on this function to work reliably,
+        we need to cope with this.  */
+      DWORD_PTR real_size = max (section->SizeOfRawData,
+                            section->Misc.VirtualSize);
+      if (rva >= section->VirtualAddress
+         && rva < section->VirtualAddress + real_size)
+       return section;
+      section++;
+    }
+  return NULL;
+}
+
+/* Return pointer to section header for section containing the given
+   offset in its raw data area. */
+IMAGE_SECTION_HEADER *
+offset_to_section (DWORD_PTR offset, IMAGE_NT_HEADERS * nt_header)
+{
+  PIMAGE_SECTION_HEADER section;
+  int i;
+
+  section = IMAGE_FIRST_SECTION (nt_header);
+
+  for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
+    {
+      if (offset >= section->PointerToRawData
+         && offset < section->PointerToRawData + section->SizeOfRawData)
+       return section;
+      section++;
+    }
+  return NULL;
+}
+
+/* Return offset to an object in dst, given offset in src.  We assume
+   there is at least one section in both src and dst images, and that
+   the some sections may have been added to dst (after sections in src).  */
+static DWORD_PTR
+relocate_offset (DWORD_PTR offset,
+                IMAGE_NT_HEADERS * src_nt_header,
+                IMAGE_NT_HEADERS * dst_nt_header)
+{
+  PIMAGE_SECTION_HEADER src_section = IMAGE_FIRST_SECTION (src_nt_header);
+  PIMAGE_SECTION_HEADER dst_section = IMAGE_FIRST_SECTION (dst_nt_header);
+  int i = 0;
+
+  while (offset >= src_section->PointerToRawData)
+    {
+      if (offset < src_section->PointerToRawData + src_section->SizeOfRawData)
+       break;
+      i++;
+      if (i == src_nt_header->FileHeader.NumberOfSections)
+       {
+         /* Handle offsets after the last section.  */
+         dst_section = IMAGE_FIRST_SECTION (dst_nt_header);
+         dst_section += dst_nt_header->FileHeader.NumberOfSections - 1;
+         while (dst_section->PointerToRawData == 0)
+           dst_section--;
+         while (src_section->PointerToRawData == 0)
+           src_section--;
+         return offset
+           + (dst_section->PointerToRawData + dst_section->SizeOfRawData)
+           - (src_section->PointerToRawData + src_section->SizeOfRawData);
+       }
+      src_section++;
+      dst_section++;
+    }
+  return offset +
+    (dst_section->PointerToRawData - src_section->PointerToRawData);
+}
+
+#define OFFSET_TO_RVA(offset, section) \
+         (section->VirtualAddress + ((DWORD_PTR)(offset) - 
section->PointerToRawData))
+
+#define RVA_TO_OFFSET(rva, section) \
+         (section->PointerToRawData + ((DWORD_PTR)(rva) - 
section->VirtualAddress))
+
+#define RVA_TO_SECTION_OFFSET(rva, section) \
+         ((DWORD_PTR)(rva) - section->VirtualAddress)
+
+/* Convert address in executing image to RVA.  */
+#define PTR_TO_RVA(ptr) ((DWORD_PTR)(ptr) - (DWORD_PTR) GetModuleHandle (NULL))
+
+#define PTR_TO_OFFSET(ptr, pfile_data) \
+          ((unsigned const char *)(ptr) - (pfile_data)->file_base)
+
+#define OFFSET_TO_PTR(offset, pfile_data) \
+          ((pfile_data)->file_base + (DWORD_PTR)(offset))
+
+#define ROUND_UP(p, align) \
+         (((DWORD_PTR)(p) + (align)-1) & ~((DWORD_PTR)(align)-1))
+#define ROUND_DOWN(p, align) ((DWORD_PTR)(p) & ~((DWORD_PTR)(align)-1))
+
+
+static void
+copy_executable_and_add_section (file_data *p_infile,
+                                file_data *p_outfile,
+                                const char *new_section_name,
+                                DWORD_PTR new_section_size)
+{
+  unsigned char *dst;
+  PIMAGE_DOS_HEADER dos_header;
+  PIMAGE_NT_HEADERS nt_header;
+  PIMAGE_NT_HEADERS dst_nt_header;
+  PIMAGE_SECTION_HEADER section;
+  PIMAGE_SECTION_HEADER dst_section;
+  DWORD_PTR offset;
+  int i;
+  int be_verbose = GetEnvironmentVariable ("DEBUG_DUMP", NULL, 0) > 0;
+
+#define COPY_CHUNK(message, src, size, verbose)                                
        \
+  do {                                                                         
\
+    unsigned const char *s = (void *)(src);                                    
        \
+    unsigned long count = (size);                                              
\
+    if (verbose)                                                               
\
+      {                                                                        
        \
+       printf ("%s\n", (message));                                             
\
+       printf ("\t0x%08x Offset in input file.\n", s - p_infile->file_base);   
\
+       printf ("\t0x%08x Offset in output file.\n", dst - 
p_outfile->file_base); \
+       printf ("\t0x%08x Size in bytes.\n", count);                            
\
+      }                                                                        
        \
+    memcpy (dst, s, count);                                                    
\
+    dst += count;                                                              
\
+  } while (0)
+
+#define DST_TO_OFFSET()  PTR_TO_OFFSET (dst, p_outfile)
+#define ROUND_UP_DST_AND_ZERO(align)                                           
\
+  do {                                                                         
\
+    unsigned char *newdst = p_outfile->file_base                               
\
+      + ROUND_UP (DST_TO_OFFSET (), (align));                                  
\
+    /* Zero the alignment slop; it may actually initialize real data.  */      
\
+    memset (dst, 0, newdst - dst);                                             
\
+    dst = newdst;                                                              
\
+  } while (0)
+
+  /* Copy the source image sequentially, ie. section by section after
+     copying the headers and section table, to simplify the process of
+     adding an extra section table entry (which might force the raw
+     section data to be relocated).
+
+     Note that dst is updated implicitly by each COPY_CHUNK.  */
+
+  dos_header = (PIMAGE_DOS_HEADER) p_infile->file_base;
+  nt_header = (PIMAGE_NT_HEADERS) (((unsigned char *) dos_header) +
+                                  dos_header->e_lfanew);
+  section = IMAGE_FIRST_SECTION (nt_header);
+
+  dst = (unsigned char *) p_outfile->file_base;
+
+  COPY_CHUNK ("Copying DOS header...", dos_header,
+             (DWORD_PTR) nt_header - (DWORD_PTR) dos_header, be_verbose);
+  dst_nt_header = (PIMAGE_NT_HEADERS) dst;
+  COPY_CHUNK ("Copying NT header...", nt_header,
+             (DWORD_PTR) section - (DWORD_PTR) nt_header, be_verbose);
+  dst_section = (PIMAGE_SECTION_HEADER) dst;
+  COPY_CHUNK ("Copying section table...", section,
+             nt_header->FileHeader.NumberOfSections * sizeof (*section),
+             be_verbose);
+
+  /* To improve the efficiency of demand loading, make the file
+     alignment match the section alignment (VC++ 6.0 does this by
+     default anyway).  */
+  dst_nt_header->OptionalHeader.FileAlignment =
+    dst_nt_header->OptionalHeader.SectionAlignment;
+
+  /* Add an uninitialized data section at the end, of the specified name
+     and virtual size.  */
+  if (find_section (new_section_name, nt_header) == NULL)
+    /* Leave room for extra section table entry; filled in below.  */
+    dst += sizeof (*section);
+  else
+    new_section_name = NULL;
+
+  /* Align the first section's raw data area, and set the header size
+     field accordingly.  */
+  ROUND_UP_DST_AND_ZERO (dst_nt_header->OptionalHeader.FileAlignment);
+  dst_nt_header->OptionalHeader.SizeOfHeaders = DST_TO_OFFSET ();
+
+  for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
+    {
+      char msg[100];
+      /* Windows section names are fixed 8-char strings, only
+        zero-terminated if the name is shorter than 8 characters.  */
+      sprintf (msg, "Copying raw data for %.8s...", section->Name);
+
+      /* Update the file-relative offset for this section's raw data (if
+         it has any) in case things have been relocated; we will update
+         the other offsets below once we know where everything is.  */
+      if (dst_section->PointerToRawData)
+       dst_section->PointerToRawData = DST_TO_OFFSET ();
+
+      /* Can always copy the original raw data.  */
+      COPY_CHUNK
+       (msg, OFFSET_TO_PTR (section->PointerToRawData, p_infile),
+        section->SizeOfRawData, be_verbose);
+
+      /* Round up the raw data size to the new alignment.  */
+      dst_section->SizeOfRawData =
+       ROUND_UP (dst_section->SizeOfRawData,
+                 dst_nt_header->OptionalHeader.FileAlignment);
+
+      /* Align the next section's raw data area.  */
+      ROUND_UP_DST_AND_ZERO (dst_nt_header->OptionalHeader.FileAlignment);
+
+      section++;
+      dst_section++;
+    }
+
+  /* Add the extra section entry (which adds no raw data).  */
+  if (new_section_name != NULL)
+    {
+      dst_nt_header->FileHeader.NumberOfSections++;
+      dst_nt_header->OptionalHeader.SizeOfImage += new_section_size;
+      strncpy (dst_section->Name, new_section_name, sizeof 
(dst_section->Name));
+      dst_section->VirtualAddress =
+       section[-1].VirtualAddress
+       + ROUND_UP (section[-1].Misc.VirtualSize,
+                   dst_nt_header->OptionalHeader.SectionAlignment);
+      dst_section->Misc.VirtualSize = new_section_size;
+      dst_section->PointerToRawData = 0;
+      dst_section->SizeOfRawData = 0;
+      dst_section->Characteristics =
+       IMAGE_SCN_CNT_UNINITIALIZED_DATA
+       | IMAGE_SCN_MEM_READ
+       | IMAGE_SCN_MEM_WRITE;
+    }
+
+  /* Copy remainder of source image.  */
+  section--;
+  offset = ROUND_UP (section->PointerToRawData + section->SizeOfRawData,
+                    nt_header->OptionalHeader.FileAlignment);
+  COPY_CHUNK
+    ("Copying remainder of executable...",
+     OFFSET_TO_PTR (offset, p_infile),
+     p_infile->size - offset, be_verbose);
+
+  /* Final size for new image.  */
+  p_outfile->size = DST_TO_OFFSET ();
+
+  /* Now patch up remaining file-relative offsets.  */
+  section = IMAGE_FIRST_SECTION (nt_header);
+  dst_section = IMAGE_FIRST_SECTION (dst_nt_header);
+
+#define ADJUST_OFFSET(var)                                             \
+  do {                                                                 \
+    if ((var) != 0)                                                    \
+      (var) = relocate_offset ((var), nt_header, dst_nt_header);       \
+  } while (0)
+
+  dst_nt_header->OptionalHeader.SizeOfInitializedData = 0;
+  dst_nt_header->OptionalHeader.SizeOfUninitializedData = 0;
+  for (i = 0; i < dst_nt_header->FileHeader.NumberOfSections; i++)
+    {
+      /* Recompute data sizes for completeness.  */
+      if (dst_section[i].Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA)
+       dst_nt_header->OptionalHeader.SizeOfInitializedData +=
+         ROUND_UP (dst_section[i].Misc.VirtualSize, 
dst_nt_header->OptionalHeader.FileAlignment);
+      else if (dst_section[i].Characteristics & 
IMAGE_SCN_CNT_UNINITIALIZED_DATA)
+       dst_nt_header->OptionalHeader.SizeOfUninitializedData +=
+         ROUND_UP (dst_section[i].Misc.VirtualSize, 
dst_nt_header->OptionalHeader.FileAlignment);
+
+      ADJUST_OFFSET (dst_section[i].PointerToLinenumbers);
+    }
+
+  ADJUST_OFFSET (dst_nt_header->FileHeader.PointerToSymbolTable);
+
+  /* Update offsets in debug directory entries. */
+  {
+    IMAGE_DATA_DIRECTORY debug_dir =
+      dst_nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG];
+    PIMAGE_DEBUG_DIRECTORY debug_entry;
+
+    section = rva_to_section (debug_dir.VirtualAddress, dst_nt_header);
+    if (section)
+      {
+       debug_entry = (PIMAGE_DEBUG_DIRECTORY)
+         (RVA_TO_OFFSET (debug_dir.VirtualAddress, section) + 
p_outfile->file_base);
+       debug_dir.Size /= sizeof (IMAGE_DEBUG_DIRECTORY);
+
+       for (i = 0; i < debug_dir.Size; i++, debug_entry++)
+         ADJUST_OFFSET (debug_entry->PointerToRawData);
+      }
+  }
+}
+
+
+int
+main (int argc, char **argv)
+{
+  file_data in_file, out_file;
+  char out_filename[MAX_PATH], in_filename[MAX_PATH];
+  unsigned long size;
+  PIMAGE_DOS_HEADER dos_header;
+  PIMAGE_NT_HEADERS nt_header;
+
+#define OLD_NAME        argv[1]
+#define NEW_NAME        argv[2]
+#define SECTION_NAME    argv[3]
+#define SECTION_SIZE    argv[4]
+
+  strcpy (in_filename, OLD_NAME);
+  strcpy (out_filename, NEW_NAME);
+
+  printf ("Dumping from %s\n", in_filename);
+  printf ("          to %s\n", out_filename);
+
+  /* Open the undumped executable file.  */
+  if (!open_input_file (&in_file, in_filename))
+    {
+      printf ("Failed to open %s (%d)...bailing.\n",
+             in_filename, GetLastError ());
+      exit (1);
+    }
+  dos_header = (PIMAGE_DOS_HEADER) in_file.file_base;
+  nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew);
+  /* Allow for expansion due to increasing file align to section align.
+     We can overestimate here, since close_file_data will update the
+     size exactly.  */
+  size = in_file.size
+    + nt_header->OptionalHeader.SectionAlignment
+    * nt_header->FileHeader.NumberOfSections;
+  if (!open_output_file (&out_file, out_filename, size))
+    {
+      printf ("Failed to open %s (%d)...bailing.\n",
+             out_filename, GetLastError ());
+      exit (1);
+    }
+
+  copy_executable_and_add_section (&in_file, &out_file,
+                                  SECTION_NAME,
+                                  atoi (SECTION_SIZE) * 1024 * 1024);
+
+  /* Patch up header fields; profiler is picky about this. */
+  {
+    HANDLE hImagehelp = LoadLibrary ("imagehlp.dll");
+    DWORD_PTR  headersum;
+    DWORD_PTR  checksum;
+
+    dos_header = (PIMAGE_DOS_HEADER) out_file.file_base;
+    nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + 
dos_header->e_lfanew);
+
+    nt_header->OptionalHeader.CheckSum = 0;
+//    nt_header->FileHeader.TimeDateStamp = time (NULL);
+//    dos_header->e_cp = size / 512;
+//    nt_header->OptionalHeader.SizeOfImage = size;
+
+    pfnCheckSumMappedFile = (void *) GetProcAddress (hImagehelp, 
"CheckSumMappedFile");
+    if (pfnCheckSumMappedFile)
+      {
+//     nt_header->FileHeader.TimeDateStamp = time (NULL);
+       pfnCheckSumMappedFile (out_file.file_base,
+                              out_file.size,
+                              &headersum,
+                              &checksum);
+       nt_header->OptionalHeader.CheckSum = checksum;
+      }
+    FreeLibrary (hImagehelp);
+  }
+
+  close_file_data (&in_file);
+  close_file_data (&out_file);
+
+  return 0;
+}
+
+/* eof */
+
diff --git a/src/insdel.c b/src/insdel.c
index 3b5b520..80650be 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -1,7 +1,6 @@
 /* Buffer insertion/deletion and gap motion for GNU Emacs.
-
-Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software Foundation,
-Inc.
+   Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software
+   Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32heap.c b/src/w32heap.c
index d5a9dae..ee0eb16 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -1,5 +1,5 @@
-/* Heap management routines for GNU Emacs on the Microsoft Windows
-   API.  Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
+/* Heap management routines for GNU Emacs on the Microsoft Windows API.
+   Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/test/automated/package-x-test.el b/test/automated/package-x-test.el
new file mode 100644
index 0000000..70c9d96
--- /dev/null
+++ b/test/automated/package-x-test.el
@@ -0,0 +1,110 @@
+;;; package-test.el --- Tests for the Emacs package system
+
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
+
+;; Author: Daniel Hackney <address@hidden>
+;; Version: 1.0
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; You may want to run this from a separate Emacs instance from your
+;; main one, because a bug in the code below could mess with your
+;; installed packages.
+
+;; Run this in a clean Emacs session using:
+;;
+;;     $ emacs -Q --batch -L . -l package-x-test.el -f 
ert-run-tests-batch-and-exit
+
+;;; Code:
+
+(require 'package-x)
+(require 'ert)
+(require 'cl-lib)
+(eval-when-compile (require 'package-test))
+
+;; package-test is not normally in `load-path', so temporarily set
+;; `load-path' to contain the current directory.
+(let ((load-path (append (list (file-name-directory (or load-file-name
+                                                        buffer-file-name)))
+                         load-path)))
+  (require 'package-test))
+
+(defvar package-x-test--single-archive-entry-1-3
+  (cons 'simple-single
+        (package-make-ac-desc '(1 3) nil
+                              "A single-file package with no dependencies"
+                              'single
+                              '((:url . "http://doodles.au";))))
+  "Expected contents of the archive entry from the \"simple-single\" package.")
+
+(defvar package-x-test--single-archive-entry-1-4
+  (cons 'simple-single
+        (package-make-ac-desc '(1 4) nil
+                              "A single-file package with no dependencies"
+                              'single
+                              nil))
+  "Expected contents of the archive entry from the updated \"simple-single\" 
package.")
+
+(ert-deftest package-x-test-upload-buffer ()
+  "Test creating an \"archive-contents\" file"
+  (with-package-test (:basedir "data/package"
+                               :file "simple-single-1.3.el"
+                               :upload-base t)
+    (package-upload-buffer)
+    (should (file-exists-p (expand-file-name "archive-contents"
+                                             package-archive-upload-base)))
+    (should (file-exists-p (expand-file-name "simple-single-1.3.el"
+                                             package-archive-upload-base)))
+    (should (file-exists-p (expand-file-name "simple-single-readme.txt"
+                                             package-archive-upload-base)))
+
+    (let (archive-contents)
+      (with-temp-buffer
+        (insert-file-contents
+         (expand-file-name "archive-contents"
+                           package-archive-upload-base))
+        (setq archive-contents
+              (package-read-from-string
+               (buffer-substring (point-min) (point-max)))))
+      (should (equal archive-contents
+                     (list 1 package-x-test--single-archive-entry-1-3))))))
+
+(ert-deftest package-x-test-upload-new-version ()
+  "Test uploading a new version of a package"
+  (with-package-test (:basedir "data/package"
+                               :file "simple-single-1.3.el"
+                               :upload-base t)
+    (package-upload-buffer)
+    (with-temp-buffer
+      (insert-file-contents "newer-versions/simple-single-1.4.el")
+      (package-upload-buffer))
+
+    (let (archive-contents)
+      (with-temp-buffer
+        (insert-file-contents
+         (expand-file-name "archive-contents"
+                           package-archive-upload-base))
+        (setq archive-contents
+              (package-read-from-string
+               (buffer-substring (point-min) (point-max)))))
+      (should (equal archive-contents
+                     (list 1 package-x-test--single-archive-entry-1-4))))))
+
+(provide 'package-x-test)
+
+;;; package-x-test.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]