1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 02:20:21 -08:00

Merge 'master' into noverlay

This commit is contained in:
Stefan Monnier 2022-09-25 16:15:16 -04:00
commit 650c20f1ca
4002 changed files with 1050772 additions and 383840 deletions

View file

@ -1,10 +1,10 @@
Language: Cpp Language: Cpp
BasedOnStyle: LLVM BasedOnStyle: GNU
AlignEscapedNewlinesLeft: true AlignEscapedNewlinesLeft: true
AlwaysBreakAfterReturnType: TopLevelDefinitions AlwaysBreakAfterReturnType: TopLevelDefinitions
BreakBeforeBinaryOperators: All BreakBeforeBinaryOperators: All
BreakBeforeBraces: GNU BreakBeforeBraces: GNU
ColumnLimit: 80 ColumnLimit: 70
ContinuationIndentWidth: 2 ContinuationIndentWidth: 2
ForEachMacros: [FOR_EACH_TAIL, FOR_EACH_TAIL_SAFE] ForEachMacros: [FOR_EACH_TAIL, FOR_EACH_TAIL_SAFE]
IncludeCategories: IncludeCategories:

View file

@ -1,14 +1,36 @@
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((nil . ((tab-width . 8) ((nil . ((tab-width . 8)
(sentence-end-double-space . t) (sentence-end-double-space . t)
(fill-column . 70))) (fill-column . 70)
(emacs-lisp-docstring-fill-column . 65)
(vc-git-annotate-switches . "-w")
(bug-reference-url-format . "https://debbugs.gnu.org/%s")
(diff-add-log-use-relative-names . t)))
(c-mode . ((c-file-style . "GNU") (c-mode . ((c-file-style . "GNU")
(c-noise-macro-names . ("UNINIT")))) (c-noise-macro-names . ("INLINE" "ATTRIBUTE_NO_SANITIZE_UNDEFINED" "UNINIT" "CALLBACK" "ALIGN_STACK"))
(objc-mode . ((c-file-style . "GNU"))) (electric-quote-comment . nil)
(electric-quote-string . nil)
(indent-tabs-mode . t)
(mode . bug-reference-prog)))
(objc-mode . ((c-file-style . "GNU")
(electric-quote-comment . nil)
(electric-quote-string . nil)
(mode . bug-reference-prog)))
(log-edit-mode . ((log-edit-font-lock-gnu-style . t) (log-edit-mode . ((log-edit-font-lock-gnu-style . t)
(log-edit-setup-add-author . t))) (log-edit-setup-add-author . t)
(vc-git-log-edit-summary-target-len . 50)))
(change-log-mode . ((add-log-time-zone-rule . t) (change-log-mode . ((add-log-time-zone-rule . t)
(fill-column . 74) (fill-column . 74)
(bug-reference-url-format . "https://debbugs.gnu.org/%s")
(mode . bug-reference))) (mode . bug-reference)))
(diff-mode . ((mode . whitespace))) (diff-mode . ((mode . whitespace)))
(emacs-lisp-mode . ((indent-tabs-mode . nil)))) (emacs-lisp-mode . ((indent-tabs-mode . nil)
(electric-quote-comment . nil)
(electric-quote-string . nil)
(mode . bug-reference-prog)))
(lisp-data-mode . ((indent-tabs-mode . nil)))
(texinfo-mode . ((electric-quote-comment . nil)
(electric-quote-string . nil)
(mode . bug-reference-prog)))
(outline-mode . ((mode . bug-reference))))

5
.gitattributes vendored
View file

@ -1,6 +1,6 @@
# Attributes of Emacs files in the Git repository. # Attributes of Emacs files in the Git repository.
# Copyright 2015-2017 Free Software Foundation, Inc. # Copyright 2015-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -31,9 +31,6 @@ test/manual/etags/html-src/algrthms.html whitespace=cr-at-eol
# The todo-mode file format includes trailing whitespace. # The todo-mode file format includes trailing whitespace.
*.tod[aorty] -whitespace=blank-at-eol *.tod[aorty] -whitespace=blank-at-eol
# The upstream maintainer does not want to remove trailing whitespace.
doc/misc/texinfo.tex -whitespace=blank-at-eol
# Some files should not be treated as text when diffing or merging. # Some files should not be treated as text when diffing or merging.
*.cur binary *.cur binary
*.gpg binary *.gpg binary

59
.gitignore vendored
View file

@ -1,6 +1,6 @@
# Files that Git should ignore in the Emacs source directory. # Files that Git should ignore in the Emacs source directory.
# Copyright 2009-2017 Free Software Foundation, Inc. # Copyright 2009-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -23,6 +23,9 @@
# in Git 1.8.2 (March 2013). # in Git 1.8.2 (March 2013).
# Personal customization.
.dir-locals-2.el
# Built by 'autogen.sh'. # Built by 'autogen.sh'.
/aclocal.m4 /aclocal.m4
/configure /configure
@ -57,9 +60,12 @@ lib/execinfo.h
lib/fcntl.h lib/fcntl.h
lib/getopt.h lib/getopt.h
lib/getopt-cdefs.h lib/getopt-cdefs.h
lib/gmp.h
lib/ieee754.h
lib/inttypes.h lib/inttypes.h
lib/libgnu.a lib/libgnu.a
lib/limits.h lib/limits.h
lib/malloc/*.gl.h
lib/signal.h lib/signal.h
lib/std*.h lib/std*.h
!lib/std*.in.h !lib/std*.in.h
@ -71,6 +77,7 @@ lib/unistd.h
src/buildobj.h src/buildobj.h
src/globals.h src/globals.h
src/lisp.mk src/lisp.mk
src/verbose.mk
# Lisp-level sources built by 'make'. # Lisp-level sources built by 'make'.
*cus-load.el *cus-load.el
@ -82,6 +89,7 @@ lisp/cedet/semantic/wisent/javat-wy.el
lisp/cedet/semantic/wisent/js-wy.el lisp/cedet/semantic/wisent/js-wy.el
lisp/cedet/semantic/wisent/python-wy.el lisp/cedet/semantic/wisent/python-wy.el
lisp/cedet/srecode/srt-wy.el lisp/cedet/srecode/srt-wy.el
lisp/cedet/semantic/grammar-wy.el
lisp/eshell/esh-groups.el lisp/eshell/esh-groups.el
lisp/finder-inf.el lisp/finder-inf.el
lisp/leim/ja-dic/ lisp/leim/ja-dic/
@ -128,12 +136,15 @@ src/gl-stamp
*.dll *.dll
*.core *.core
*.elc *.elc
*.eln
*.o *.o
*.res *.res
*.so *.so
*.dylib
core core
core.*[0-9] core.*[0-9]
gmon.out gmon.out
native-lisp/
oo/ oo/
oo-spd/ oo-spd/
src/*.map src/*.map
@ -146,6 +157,9 @@ test/manual/etags/regexfile
test/manual/etags/ETAGS test/manual/etags/ETAGS
test/manual/etags/CTAGS test/manual/etags/CTAGS
test/manual/indent/*.new test/manual/indent/*.new
test/lisp/gnus/mml-sec-resources/random_seed
test/lisp/play/fortune-resources/fortunes.dat
test/**/*.xml
# ctags, etags. # ctags, etags.
TAGS TAGS
@ -157,12 +171,19 @@ GSYMS
GRTAGS GRTAGS
GTAGS GTAGS
# auto-generated compilation database
compile_commands.json
# ccls, a LSP-compliant server for C
/.ccls-cache
# GNU idutils. # GNU idutils.
ID ID
# Executables. # Executables.
*.exe *.exe
a.out a.out
lib-src/be-resources
lib-src/blessmail lib-src/blessmail
lib-src/ctags lib-src/ctags
lib-src/ebrowse lib-src/ebrowse
@ -170,8 +191,10 @@ lib-src/emacsclient
lib-src/etags lib-src/etags
lib-src/hexl lib-src/hexl
lib-src/make-docfile lib-src/make-docfile
lib-src/make-fingerprint
lib-src/movemail lib-src/movemail
lib-src/profile lib-src/profile
lib-src/seccomp-filter
lib-src/test-distrib lib-src/test-distrib
lib-src/update-game-score lib-src/update-game-score
nextstep/Cocoa/Emacs.base/Contents/Info.plist nextstep/Cocoa/Emacs.base/Contents/Info.plist
@ -182,7 +205,10 @@ nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist
src/bootstrap-emacs src/bootstrap-emacs
src/emacs src/emacs
src/emacs-[0-9]* src/emacs-[0-9]*
src/Emacs
src/temacs src/temacs
src/dmpstruct.h
src/*.pdmp
# Character-set info. # Character-set info.
admin/charsets/jisx2131-filter admin/charsets/jisx2131-filter
@ -191,8 +217,12 @@ etc/charsets/*.map
lisp/international/charprop.el lisp/international/charprop.el
lisp/international/charscript.el lisp/international/charscript.el
lisp/international/cp51932.el lisp/international/cp51932.el
lisp/international/emoji-zwj.el
lisp/international/emoji-labels.el
lisp/international/eucjp-ms.el lisp/international/eucjp-ms.el
lisp/international/uni-*.el lisp/international/uni-*.el
lisp/international/idna-mapping.el
lisp/language/pinyin.el
# Documentation. # Documentation.
*.aux *.aux
@ -235,6 +265,8 @@ doc/*/*/*.ps
doc/emacs/emacsver.texi doc/emacs/emacsver.texi
doc/man/emacs.1 doc/man/emacs.1
doc/misc/cc-mode.ss doc/misc/cc-mode.ss
doc/misc/modus-themes.texi
doc/misc/org.texi
etc/DOC etc/DOC
etc/refcards/emacsver.tex etc/refcards/emacsver.tex
gnustmp* gnustmp*
@ -242,7 +274,6 @@ gnustmp*
# Version control and locks. # Version control and locks.
*.orig *.orig
*.rej
*.swp *.swp
*~ *~
.#* .#*
@ -250,12 +281,14 @@ gnustmp*
ChangeLog ChangeLog
[0-9]*.patch [0-9]*.patch
[0-9]*.txt [0-9]*.txt
.dir-locals?.el
/vc-dwim-log-* /vc-dwim-log-*
# Built by 'make install'. # Built by 'make install'.
etc/emacs.tmpdesktop etc/emacs.tmpdesktop
# Built by 'make-dist'.
/MANIFEST
# Distribution directories. # Distribution directories.
/emacs-[1-9]*/ /emacs-[1-9]*/
@ -263,6 +296,7 @@ etc/emacs.tmpdesktop
*.in-h *.in-h
_* _*
!lib/_Noreturn.h !lib/_Noreturn.h
!m4/_*.m4
/bin/ /bin/
/BIN/ /BIN/
/data/ /data/
@ -278,3 +312,22 @@ nt/emacs.rc
nt/emacsclient.rc nt/emacsclient.rc
src/gdb.ini src/gdb.ini
/var/ /var/
# Seccomp filter files.
lib-src/seccomp-filter.bpf
lib-src/seccomp-filter.pfc
lib-src/seccomp-filter-exec.bpf
lib-src/seccomp-filter-exec.pfc
# gsettings schema
/etc/*.gschema.valid
# Ignore directory made by admin/make-manuals.
manual/
# Ignore Finder files on MacOS.
.DS_Store
# Ignore a directory used by dap-mode.
.vscode
/test/gmp.h

View file

@ -1,4 +1,4 @@
# Copyright (C) 2017 Free Software Foundation, Inc. # Copyright (C) 2021-2022 Free Software Foundation, Inc.
# #
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
# #
@ -15,27 +15,14 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. # along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# GNU Emacs support for the GitLab protocol for CI # GNU Emacs support for the GitLab protocol for CI.
# The presence of this file does not imply any FSF/GNU endorsement of # The presence of this file does not imply any FSF/GNU endorsement of
# any particular service that uses that protocol. Also, it is intended for # any particular service that uses that protocol. Also, it is intended for
# evaluation purposes, thus possibly temporary. # evaluation purposes, thus possibly temporary.
# Maintainer: tzz@lifelogs.com # Maintainer: Ted Zlatanov <tzz@lifelogs.com>
# URL: https://gitlab.com/emacs-ci/emacs # URL: https://emba.gnu.org/emacs/emacs
image: debian:stretch # Just load from test/infra, to keep build automation files there.
include: '/test/infra/gitlab-ci.yml'
before_script:
- apt update -qq
- DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y -qq -o=Dpkg::Use-Pty=0 libc-dev gcc make autoconf automake libncurses-dev gnutls-dev
stages:
- test
test:
stage: test
script:
- ./autogen.sh autoconf
- ./configure --without-makeinfo
- make check

View file

@ -7,11 +7,14 @@ or run the shell command 'info "(emacs)Contributing"'.)
** The Emacs repository ** The Emacs repository
Emacs development uses Git on Savannah for its main repository. Emacs development uses Git on Savannah for its main repository.
Briefly, the following shell commands build and run Emacs from scratch: To configure Git for Emacs development, you can run the following:
git config --global user.name 'Your Name' git config --global user.name 'Your Name'
git config --global user.email 'your.name@example.com' git config --global user.email 'your.name@example.com'
git config --global transfer.fsckObjects true git config --global transfer.fsckObjects true
The following shell commands then build and run Emacs from scratch:
git clone git://git.sv.gnu.org/emacs.git git clone git://git.sv.gnu.org/emacs.git
cd emacs cd emacs
./autogen.sh ./autogen.sh
@ -20,17 +23,18 @@ Briefly, the following shell commands build and run Emacs from scratch:
src/emacs src/emacs
For more details, see For more details, see
http://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs and https://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs and
http://www.emacswiki.org/emacs/GitForEmacsDevs or see the file https://www.emacswiki.org/emacs/GitForEmacsDevs or see the file
admin/notes/git-workflow. admin/notes/git-workflow.
** Getting involved with development ** Getting involved with development
Discussion about Emacs development takes place on emacs-devel@gnu.org. Discussion about Emacs development takes place on emacs-devel@gnu.org.
You can subscribe to the emacs-devel@gnu.org mailing list, paying You can subscribe to the emacs-devel@gnu.org mailing list.
attention to postings with subject lines containing "emacs-announce", If you want to get only the important mails (for things like
as these discuss important events like feature freezes. See feature freezes), choose to receive only the 'emacs-announce' topic
https://lists.gnu.org/mailman/listinfo/emacs-devel for mailing list (although so far this feature has not been well or consistently used).
See https://lists.gnu.org/mailman/listinfo/emacs-devel for mailing list
instructions and archives. You can develop and commit changes in your instructions and archives. You can develop and commit changes in your
own copy of the repository, and discuss proposed changes on the own copy of the repository, and discuss proposed changes on the
mailing list. Frequent contributors to Emacs can request write access mailing list. Frequent contributors to Emacs can request write access
@ -49,16 +53,41 @@ archives.
To email a patch you can use a shell command like 'git format-patch -1' To email a patch you can use a shell command like 'git format-patch -1'
to create a file, and then attach the file to your email. This nicely to create a file, and then attach the file to your email. This nicely
packages the patch's commit message and changes. To send just one packages the patch's commit message and changes, and makes sure the
such patch without additional remarks, you can use a command like format and whitespace are not munged in transit by the various mail
'git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'. agents. To send just one such patch without additional remarks, it is
also possible to use a command like
git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch
However, we prefer the 'git format-patch' method with attachment, as
doing so delivers patches in the correct and easily-recognizable format
more reliably, and makes the job of applying the patches easier and less
error-prone. It also allows sending patches whose author is someone
other than the email sender.
Once the cumulative amount of your submissions exceeds a dozen or so
lines of non-trivial changes, we will need you to assign to the FSF
the copyright for your contributions. (To see how many lines were
non-trivially changed, count only added and modified lines in the
patched code. Consider an added or changed line non-trivial if it
includes at least one identifier, string, or substantial comment.)
In most cases, to start the assignment process you should download
https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/Copyright/request-assign.future
and return the completed information to the address at the top.
(There are other assignment options, but they are much less commonly used.)
If you have questions about the assignment process, you can ask the
address listed on the form, and/or emacs-devel@gnu.org.
** Issue tracker (a.k.a. "bug tracker") ** Issue tracker (a.k.a. "bug tracker")
The Emacs issue tracker at https://debbugs.gnu.org lets you view bug The Emacs issue tracker at https://debbugs.gnu.org lets you view bug
reports and search the database for bugs matching several criteria. reports and search the database for bugs matching several criteria.
Messages posted to the bug-gnu-emacs@gnu.org mailing list, mentioned Messages posted to the bug-gnu-emacs@gnu.org mailing list, mentioned
above, are recorded by the tracker with the corresponding bugs/issues. above, are recorded by the tracker with the corresponding
bugs/issues. If a message to the bug tracker contains a patch, please
include the string "[PATCH]" in the subject of the message in order to
let the bug tracker tag the bug properly.
GNU ELPA has a 'debbugs' package that allows accessing the tracker GNU ELPA has a 'debbugs' package that allows accessing the tracker
database from Emacs. database from Emacs.
@ -77,21 +106,33 @@ admin/notes/bug-triage.
** Documenting your changes ** Documenting your changes
Any change that matters to end-users should have an entry in etc/NEWS. Any change that matters to end-users should have an entry in etc/NEWS.
Try to start each NEWS entry with a sentence that summarizes the entry
and takes just one line -- this will allow to read NEWS in Outline
mode after hiding the body of each entry.
Doc-strings should be updated together with the code. Doc-strings should be updated together with the code.
New defcustom's should always have a ':version' tag stating the first
Emacs version in which they will appear. Likewise with defcustom's
whose value is changed -- update their ':version' tag.
Think about whether your change requires updating the manuals. If you Think about whether your change requires updating the manuals. If you
know it does not, mark the NEWS entry with "---". If you know know it does not, mark the NEWS entry with "---". If you know
that *all* the necessary documentation updates have been made, mark that *all* the necessary documentation updates have been made as part
the entry with "+++". Otherwise do not mark it. of your changes or those by others, mark the entry with "+++".
Otherwise do not mark it.
If your change requires updating the manuals to document new If your change requires updating the manuals to document new
functions/commands/variables/faces, then use the proper Texinfo functions/commands/variables/faces, then use the proper Texinfo
command to index them; for instance, use @vindex for variables and command to index them; for instance, use @vindex for variables and
@findex for functions/commands. For the full list of predefine indices, see @findex for functions/commands. For the full list of predefined indices, see
https://www.gnu.org/software/texinfo/manual/texinfo/html_node/Predefined-Indices.html https://www.gnu.org/software/texinfo/manual/texinfo/html_node/Predefined-Indices.html
or run the shell command 'info "(texinfo)Predefined Indices"'. or run the shell command 'info "(texinfo)Predefined Indices"'.
We prefer American English both in doc strings and in the manuals.
That includes both spelling (e.g., "behavior", not "behaviour") and
the convention of leaving 2 spaces between sentences.
For more specific tips on Emacs's doc style, see For more specific tips on Emacs's doc style, see
https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html
Use 'checkdoc' to check for documentation errors before submitting a patch. Use 'checkdoc' to check for documentation errors before submitting a patch.
@ -105,7 +146,7 @@ tested).
Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See
https://www.gnu.org/software/emacs/manual/html_node/ert/ https://www.gnu.org/software/emacs/manual/html_node/ert/
or run 'info "(ert)"' for for more information on writing and running or run 'info "(ert)"' for more information on writing and running
tests. tests.
If your test lasts longer than some few seconds, mark it in its If your test lasts longer than some few seconds, mark it in its
@ -116,6 +157,14 @@ top-level directory. Most tests are in the directory "test/". From
the "test/" directory, run "make <filename>" to run the tests for the "test/" directory, run "make <filename>" to run the tests for
<filename>.el(c). See "test/README" for more information. <filename>.el(c). See "test/README" for more information.
If you're making changes that involve the Emacs build system, please
test 'out-of-tree' builds as well, i.e.:
mkdir emacs-build
cd emacs-build
../path-to-emacs-sources/configure
make
** Commit messages ** Commit messages
Ordinarily, a change you commit should contain a log entry in its Ordinarily, a change you commit should contain a log entry in its
@ -136,20 +185,26 @@ ChangeLog file, where they can be corrected. It saves time to get
them right the first time, so here are guidelines for formatting them: them right the first time, so here are guidelines for formatting them:
- Start with a single unindented summary line explaining the change; - Start with a single unindented summary line explaining the change;
do not end this line with a period. If that line starts with a do not end this line with a period. If possible, try to keep the
semicolon and a space "; ", the commit message will be ignored when summary line to 50 characters or fewer; this is for compatibility
generating the ChangeLog file. Use this for minor commits that do with certain Git commands that print that line in width-constrained
not need separate ChangeLog entries, such as changes in etc/NEWS. contexts.
- After the summary line, there should be an empty line, then If the summary line starts with a semicolon and a space "; ", the
unindented ChangeLog entries. commit message will be ignored when generating the ChangeLog file.
Use this for minor commits that do not need separate ChangeLog
entries, such as changes in etc/NEWS.
- After the summary line, there should be an empty line.
- Unindented ChangeLog entries normally come next. However, if the
commit couldn't be properly summarized in the brief summary line,
you can put a paragraph (after the empty line and before the
individual ChangeLog entries) that further describes the commit.
- Limit lines in commit messages to 78 characters, unless they consist - Limit lines in commit messages to 78 characters, unless they consist
of a single word of at most 140 characters; this is enforced by a of a single word of at most 140 characters; this is enforced by a
commit hook. It's nicer to limit the summary line to 50 characters; commit hook.
this isn't enforced. If the change can't be summarized so briefly,
add a paragraph after the empty line and before the individual file
descriptions.
- If only a single file is changed, the summary line can be the normal - If only a single file is changed, the summary line can be the normal
file first line (starting with the asterisk). Then there is no file first line (starting with the asterisk). Then there is no
@ -170,6 +225,9 @@ them right the first time, so here are guidelines for formatting them:
bug number NNNNN in the debbugs database. This string is often bug number NNNNN in the debbugs database. This string is often
parenthesized, as in "(Bug#19003)". parenthesized, as in "(Bug#19003)".
- When citing URLs, prefer https: to http: when either will do. In
particular, gnu.org and fsf.org URLs should start with "https:".
- Commit messages should contain only printable UTF-8 characters. - Commit messages should contain only printable UTF-8 characters.
- Commit messages should not contain the "Signed-off-by:" lines that - Commit messages should not contain the "Signed-off-by:" lines that
@ -195,7 +253,9 @@ them right the first time, so here are guidelines for formatting them:
sentences starting with a capital and ending with a period (except sentences starting with a capital and ending with a period (except
the summary line should not end in a period). See the summary line should not end in a period). See
https://www.gnu.org/prep/standards/html_node/Comments.html https://www.gnu.org/prep/standards/html_node/Comments.html
or run 'info "(standards)Comments"'. or run 'info "(standards)Comments"'. American English is preferred
in Emacs; that includes spelling and leaving 2 blanks between
sentences.
They are preserved indefinitely, and have a reasonable chance of They are preserved indefinitely, and have a reasonable chance of
being read in the future, so it's better that they have good being read in the future, so it's better that they have good
@ -218,13 +278,12 @@ them right the first time, so here are guidelines for formatting them:
- There is no standard or recommended way to identify revisions in - There is no standard or recommended way to identify revisions in
ChangeLog entries. Using Git SHA1 values limits the usability of ChangeLog entries. Using Git SHA1 values limits the usability of
the references to Git, and will become much less useful if Emacs the references to Git, and will become much less useful if Emacs
switches to a different VCS. So we recommend against that. switches to a different VCS. So we recommend against doing only that.
One way to identify revisions is by quoting their summary line. One way to identify revisions is by quoting their summary line.
Another is with an action stamp - an RFC3339 date followed by ! Prefixing the summary with the commit date can give useful context
followed by the committer's email - for example, (use 'git show -s "--pretty=format:%cd \"%s\"" --date=short HASH' to
"2014-01-16T05:43:35Z!esr@thyrsus.com". Often, "my previous commit" produce that). Often, "my previous commit" will suffice.
will suffice.
- There is no need to mention files such as NEWS and MAINTAINERS, or - There is no need to mention files such as NEWS and MAINTAINERS, or
to indicate regeneration of files such as 'lib/gnulib.mk', in the to indicate regeneration of files such as 'lib/gnulib.mk', in the
@ -233,29 +292,67 @@ them right the first time, so here are guidelines for formatting them:
** Generating ChangeLog entries ** Generating ChangeLog entries
- You can use Emacs functions to write ChangeLog entries; see - If you use Emacs VC, you can use 'C-c C-w' to generate formatted
blank ChangeLog entries from the diff being committed, then use
'M-q' to combine and fill them. See 'info "(emacs) Log Buffer"'.
- Alternatively, you can use Emacs functions for ChangeLog files; see
https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html
or run 'info "(emacs)Change Log Commands"'. or run 'info "(emacs)Change Log Commands"'.
- If you use Emacs VC, one way to format ChangeLog entries is to create To format ChangeLog entries with Emacs VC, create a top-level
a top-level ChangeLog file manually, and update it with 'C-x 4 a' as ChangeLog file manually, and update it with 'C-x 4 a' as usual. Do
usual. Do not register the ChangeLog file under git; instead, use not register the ChangeLog file under git; instead, use 'C-c C-a' to
'C-c C-a' to insert its contents into your *vc-log* buffer. insert its contents into your *vc-log* buffer. Or if
Or if 'log-edit-hook' includes 'log-edit-insert-changelog' (which it 'log-edit-hook' includes 'log-edit-insert-changelog' (which it does
does by default), they will be filled in for you automatically. by default), they will be filled in for you automatically.
- Alternatively, you can use the vc-dwim command to maintain commit - Instead of Emacs VC, you can use the vc-dwim command to maintain commit
messages. When you create a source directory, run the shell command messages. When you create a source directory, run the shell command
'git-changelog-symlink-init' to create a symbolic link from 'git-changelog-symlink-init' to create a symbolic link from
ChangeLog to .git/c/ChangeLog. Edit this ChangeLog via its symlink ChangeLog to .git/c/ChangeLog. Edit this ChangeLog via its symlink
with Emacs commands like 'C-x 4 a', and commit the change using the with Emacs commands like 'C-x 4 a', and commit the change using the
shell command 'vc-dwim --commit'. Type 'vc-dwim --help' for more. shell command 'vc-dwim --commit'. Type 'vc-dwim --help' for more.
** Committing your changes.
When you commit changes, Git invokes several scripts that test the
commit for validity, and may abort the commit of some of the tests
fail. These scripts live in the '.git/hooks/' subdirectory of the
top-level directory of the repository, and they perform the following
tests:
- commit log message must not be empty;
- the first line of the commit log message doesn't start with
whitespace characters;
- the second line of the commit log message must be empty;
- commit log message should include only valid printable ASCII and
UTF-8 characters;
- commit log message lines must be shorter than 79 characters, unless
a line consists of a single long word, in which case that word can
be up to 140 characters long;
- there shouldn't be any "Signed-off-by:" tags in the commit log
message, and "git commit" should not be invoked with the '-s' option
(which automatically adds "Signed-off-by:");
- if the commit adds new files, the file names must not begin with
'-' and must consist of ASCII letters, digits, and characters of the
set [-+./_];
- the changes don't include unresolved merge conflict markers;
- the changes don't introduce whitespace errors: trailing whitespace,
lines that include nothing but whitespace characters, and indented
lines where a SPC character is immediately followed by a TAB in the
line's initial indentation
** Committing changes by others ** Committing changes by others
If committing changes written by someone else, commit in their name, If committing changes written by someone else, commit in their name,
not yours. You can use 'git commit --author="AUTHOR"' to specify a not yours. You can use 'git commit --author="AUTHOR"' to specify a
change's author. change's author. When using Emacs VC to commit, the author can be
specified in the log-edit buffer by adding an "Author: AUTHOR" header
line (set 'log-edit-setup-add-author' non-nil to have this header line
added automatically). Note that the validity checks described in the
previous section are still applied, so you will have to correct any
problems they uncover in the changes submitted by others.
** Branches ** Branches
@ -269,15 +366,25 @@ the current release branch. Periodically, the current release branch
is merged into the master, using the gitmerge function described in is merged into the master, using the gitmerge function described in
admin/notes/git-workflow. admin/notes/git-workflow.
If you are fixing a bug that exists in the current release, be sure to If you are fixing a bug that exists in the current release, you should
commit it to the release branch; it will be merged to the master generally commit it to the release branch; it will be merged to the
branch later by the gitmerge function. master branch later by the gitmerge function. However, when the
release branch is for Emacs version NN.2 and later, or when it is for
Emacs version NN.1 that is in the very last stages of its pretest,
that branch is considered to be in a feature freeze: only bug fixes
that are "safe" or are fixing major problems should go to the release
branch, the rest should be committed to the master branch. This is so
to avoid destabilizing the next Emacs release. If you are unsure
whether your bug fix is "safe" enough for the release branch, ask on
the emacs-devel mailing list.
Documentation fixes (in doc strings, in manuals, and in comments) Documentation fixes (in doc strings, in manuals, in NEWS, and in
should always go to the release branch, if the documentation to be comments) should always go to the release branch, if the documentation
fixed exists and is relevant to the release-branch codebase. Doc to be fixed exists and is relevant to the release-branch codebase.
fixes are always considered "safe" -- even when a release branch is in Doc fixes are always considered "safe" -- even when a release branch
feature freeze, it can still receive doc fixes. is in feature freeze, it can still receive doc fixes. However, this
rule is limited to fixing real problems in the documentation; cleanups
and stylistic changes are excluded.
When you know that the change will be difficult to merge to the When you know that the change will be difficult to merge to the
master (e.g., because the code on master has changed a lot), you can master (e.g., because the code on master has changed a lot), you can
@ -293,6 +400,22 @@ reasons. These should be marked by including something like "Do not
merge to master" or anything that matches gitmerge-skip-regexp (see merge to master" or anything that matches gitmerge-skip-regexp (see
admin/gitmerge.el) in the commit message. admin/gitmerge.el) in the commit message.
** Some packages in Emacs are maintained externally
Sometimes a package that ships as part of GNU Emacs is maintained as a
separate project, with its own upstream repository, its own maintainer
group, its own development conventions, etc. The upstream project's
code is periodically merged into Emacs (exactly when and how such
merges happen depends on the package).
So when you are making a contribution -- such as fixing a bug or
proposing an enhancement -- to one of these externally maintained
packages, you sometimes need to deal with that package at its upstream
source.
In the section "Externally maintained packages" in "admin/MAINTAINERS"
we maintain a list of such packages.
** GNU ELPA ** GNU ELPA
This repository does not contain the Emacs Lisp package archive This repository does not contain the Emacs Lisp package archive

View file

@ -12,7 +12,7 @@
"/usr/include/glib-2.0/glib/gmem.h: ... warning: unknown attribute "/usr/include/glib-2.0/glib/gmem.h: ... warning: unknown attribute
'__alloc_size__' ignored". Use -Werror when checking for -nopie; '__alloc_size__' ignored". Use -Werror when checking for -nopie;
otherwise clang warns about -nopie instead of failing, and then otherwise clang warns about -nopie instead of failing, and then
later it warns everytime the build uses -nopie. later it warns every time the build uses -nopie.
2015-04-03 Ulrich Müller <ulm@gentoo.org> 2015-04-03 Ulrich Müller <ulm@gentoo.org>
@ -33,7 +33,7 @@
Fix 'commit-msg' to cite 'CONTRIBUTE' Fix 'commit-msg' to cite 'CONTRIBUTE'
As suggested in: As suggested in:
https://lists.gnu.org/archive/html/emacs-devel/2015-03/msg00947.html https://lists.gnu.org/r/emacs-devel/2015-03/msg00947.html
Also, have the two files match better. Also, have the two files match better.
* CONTRIBUTE: Match what's in build-aux/git-hooks/commit-msg. * CONTRIBUTE: Match what's in build-aux/git-hooks/commit-msg.
* build-aux/git-hooks/commit-msg: Mention 'CONTRIBUTE'. * build-aux/git-hooks/commit-msg: Mention 'CONTRIBUTE'.
@ -145,7 +145,7 @@
* configure.ac (HAVE_W32): Abort with error message if * configure.ac (HAVE_W32): Abort with error message if
--without-toolkit-scroll-bars was specified. See --without-toolkit-scroll-bars was specified. See
https://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html https://lists.gnu.org/r/emacs-devel/2015-01/msg00525.html
for the details. for the details.
2015-01-27 Paul Eggert <eggert@cs.ucla.edu> 2015-01-27 Paul Eggert <eggert@cs.ucla.edu>
@ -156,7 +156,7 @@
configuration. The downside is that patch applications won't be configuration. The downside is that patch applications won't be
checked, but that's better than autogen.sh failing. checked, but that's better than autogen.sh failing.
Problem reported by Sam Steingold in: Problem reported by Sam Steingold in:
https://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html https://lists.gnu.org/r/emacs-devel/2015-01/msg00898.html
2015-01-26 Paul Eggert <eggert@cs.ucla.edu> 2015-01-26 Paul Eggert <eggert@cs.ucla.edu>
@ -184,7 +184,7 @@
Give up on -Wsuggest-attribute=const Give up on -Wsuggest-attribute=const
The attribute doesn't help performance significantly, and the The attribute doesn't help performance significantly, and the
warning seems to be more trouble than it's worth. See the thread at: warning seems to be more trouble than it's worth. See the thread at:
https://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00361.html https://lists.gnu.org/r/emacs-devel/2015-01/msg00361.html
* configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const. * configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const.
2015-01-11 Paul Eggert <eggert@cs.ucla.edu> 2015-01-11 Paul Eggert <eggert@cs.ucla.edu>
@ -297,7 +297,7 @@
2014-12-13 Paul Eggert <eggert@cs.ucla.edu> 2014-12-13 Paul Eggert <eggert@cs.ucla.edu>
Port commit-msg to mawk. Reported by Ted Zlatanov in: Port commit-msg to mawk. Reported by Ted Zlatanov in:
https://lists.gnu.org/archive/html/emacs-devel/2014-12/msg01093.html https://lists.gnu.org/r/emacs-devel/2014-12/msg01093.html
* build-aux/git-hooks/commit-msg (space, non_space, non_print): * build-aux/git-hooks/commit-msg (space, non_space, non_print):
New vars. Use them as approximations to POSIX bracket expressions, New vars. Use them as approximations to POSIX bracket expressions,
on implementations like mawk that do not support POSIX regexps. on implementations like mawk that do not support POSIX regexps.
@ -313,7 +313,7 @@
Port commit-message checking to FreeBSD 9. Port commit-message checking to FreeBSD 9.
Reported by Jan Djärv in: Reported by Jan Djärv in:
https://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00704.html https://lists.gnu.org/r/emacs-devel/2014-12/msg00704.html
along with some other issues I noticed while testing with FreeBSD. along with some other issues I noticed while testing with FreeBSD.
* build-aux/git-hooks/commit-msg: Prefer gawk if available. * build-aux/git-hooks/commit-msg: Prefer gawk if available.
Prefer en_US.UTF-8 to en_US.utf8, as it's more portable. Prefer en_US.UTF-8 to en_US.utf8, as it's more portable.
@ -391,7 +391,7 @@
Add a.out to .gitignore. Add a.out to .gitignore.
Suggested by Lee Duhem in: Suggested by Lee Duhem in:
https://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01665.html https://lists.gnu.org/r/emacs-devel/2014-11/msg01665.html
* .gitignore: Add a.out. * .gitignore: Add a.out.
Move *.log next to *.tmp, since it's generic. Move *.log next to *.tmp, since it's generic.
Put *.exe before non-generics. Put *.exe before non-generics.
@ -442,7 +442,7 @@
Restore 'Bug#' -> 'debbugs:' rewrite in log-edit-mode. Restore 'Bug#' -> 'debbugs:' rewrite in log-edit-mode.
* .dir-locals.el (log-edit-mode): Restore the (log-edit-rewrite-fixes * .dir-locals.el (log-edit-mode): Restore the (log-edit-rewrite-fixes
"[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1"). See Glenn Morris in: "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1"). See Glenn Morris in:
https://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01187.html https://lists.gnu.org/r/emacs-devel/2014-11/msg01187.html
Simplify and fix doc-related .gitignore files. Simplify and fix doc-related .gitignore files.
This fixes some unwanted 'git status' output after 'make docs'. This fixes some unwanted 'git status' output after 'make docs'.
@ -913,7 +913,7 @@
Omit redundant extern decls. Omit redundant extern decls.
Most of this patch is from Dmitry Antipov, in: Most of this patch is from Dmitry Antipov, in:
https://lists.gnu.org/archive/html/emacs-devel/2014-06/msg00263.html https://lists.gnu.org/r/emacs-devel/2014-06/msg00263.html
* configure.ac (WERROR_CFLAGS): Add -Wredundant-decls. * configure.ac (WERROR_CFLAGS): Add -Wredundant-decls.
Merge from gnulib, incorporating: Merge from gnulib, incorporating:
@ -969,7 +969,7 @@
Rely on AC_CANONICAL_HOST to detect whether we're using mingw. Rely on AC_CANONICAL_HOST to detect whether we're using mingw.
See the thread containing: See the thread containing:
https://lists.gnu.org/archive/html/emacs-devel/2014-06/msg00206.html https://lists.gnu.org/r/emacs-devel/2014-06/msg00206.html
* configure.ac (AC_CANONICAL_HOST): Invoke this as early as we * configure.ac (AC_CANONICAL_HOST): Invoke this as early as we
can, which is just after AM_INIT_AUTOMAKE. Then check for mingw can, which is just after AM_INIT_AUTOMAKE. Then check for mingw
just after that. just after that.
@ -1517,7 +1517,7 @@
* configure.ac (LIBXML2_CFLAGS): Fix xcrun-related quoting problem. * configure.ac (LIBXML2_CFLAGS): Fix xcrun-related quoting problem.
Reported by YAMAMOTO Mitsuharu in: Reported by YAMAMOTO Mitsuharu in:
https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00995.html https://lists.gnu.org/r/emacs-devel/2013-12/msg00995.html
2013-12-28 Jan Djärv <jan.h.d@swipnet.se> 2013-12-28 Jan Djärv <jan.h.d@swipnet.se>
@ -1529,7 +1529,7 @@
* configure.ac: Don't set MAKE unless 'make' doesn't work. * configure.ac: Don't set MAKE unless 'make' doesn't work.
Set it only in the environment, not in the makefile. Set it only in the environment, not in the makefile.
Reported by Glenn Morris in: Reported by Glenn Morris in:
https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00969.html https://lists.gnu.org/r/emacs-devel/2013-12/msg00969.html
2013-12-27 Paul Eggert <eggert@cs.ucla.edu> 2013-12-27 Paul Eggert <eggert@cs.ucla.edu>
@ -1635,7 +1635,7 @@
Remove the option of using libcrypto. Remove the option of using libcrypto.
This scorches the earth and waits for spring; This scorches the earth and waits for spring;
see Ted Zlatanov and Stefan Monnier in see Ted Zlatanov and Stefan Monnier in
<https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00323.html>. <https://lists.gnu.org/r/emacs-devel/2013-12/msg00323.html>.
* configure.ac (with_openssl_default, HAVE_LIB_CRYPTO): Remove. * configure.ac (with_openssl_default, HAVE_LIB_CRYPTO): Remove.
Do not say whether Emacs is configured to use a crypto library, Do not say whether Emacs is configured to use a crypto library,
since it's no longer an option. since it's no longer an option.
@ -1657,7 +1657,7 @@
2013-12-08 Paul Eggert <eggert@cs.ucla.edu> 2013-12-08 Paul Eggert <eggert@cs.ucla.edu>
* configure.ac: Simplify supression of GTK deprecation warning. * configure.ac: Simplify suppression of GTK deprecation warning.
Move -DGDK_DISABLE_DEPRECATION_WARNINGS out of the command line Move -DGDK_DISABLE_DEPRECATION_WARNINGS out of the command line
and into config.h, to shorten the command line when doing 'make'. and into config.h, to shorten the command line when doing 'make'.
Don't AC_SUBST GTK_CFLAGS, as this is not needed. Don't AC_SUBST GTK_CFLAGS, as this is not needed.
@ -1666,7 +1666,7 @@
On commonly used platform libcrypto uses architecture-specific On commonly used platform libcrypto uses architecture-specific
assembly code, which is significantly faster than the C code we assembly code, which is significantly faster than the C code we
were using. See Pádraig Brady's note in were using. See Pádraig Brady's note in
<https://lists.gnu.org/archive/html/bug-gnulib/2013-12/msg00000.html>. <https://lists.gnu.org/r/bug-gnulib/2013-12/msg00000.html>.
Merge from gnulib, incorporating: Merge from gnulib, incorporating:
2013-12-07 md5, sha1, sha256, sha512: add gl_SET_CRYPTO_CHECK_DEFAULT 2013-12-07 md5, sha1, sha256, sha512: add gl_SET_CRYPTO_CHECK_DEFAULT
2013-12-07 md5, sha1, sha256, sha512: add 'auto', and set-default method 2013-12-07 md5, sha1, sha256, sha512: add 'auto', and set-default method
@ -1987,7 +1987,7 @@
Work around performance bug on OS X 10.8 and earlier. Work around performance bug on OS X 10.8 and earlier.
Perhaps Apple will fix this bug some day. Perhaps Apple will fix this bug some day.
See the thread starting with Daniel Colascione's email in: See the thread starting with Daniel Colascione's email in:
https://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00343.html https://lists.gnu.org/r/emacs-devel/2013-09/msg00343.html
* configure.ac (FORTIFY_SOUR): New verbatim section. * configure.ac (FORTIFY_SOUR): New verbatim section.
2013-09-19 Paul Eggert <eggert@cs.ucla.edu> 2013-09-19 Paul Eggert <eggert@cs.ucla.edu>
@ -2003,9 +2003,9 @@
* configure.ac <srcdir> [MINGW32]: Make sure the value of 'srcdir' * configure.ac <srcdir> [MINGW32]: Make sure the value of 'srcdir'
is in the full /d/foo/bar form. See the discussion in is in the full /d/foo/bar form. See the discussion in
https://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00210.html, https://lists.gnu.org/r/emacs-devel/2013-09/msg00210.html,
and in particular and in particular
https://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00252.html https://lists.gnu.org/r/emacs-devel/2013-09/msg00252.html
and its followups, for the details. and its followups, for the details.
2013-09-17 Dmitry Antipov <dmantipov@yandex.ru> 2013-09-17 Dmitry Antipov <dmantipov@yandex.ru>
@ -2326,7 +2326,7 @@
2013-07-03 Christoph Egger <christoph@debian.org> (tiny change) 2013-07-03 Christoph Egger <christoph@debian.org> (tiny change)
* configure.ac (emacs_broken_SIGIO): Set on gnu-kfreebsd to avoid hang. * configure.ac (emacs_broken_SIGIO): Set on gnu-kfreebsd to avoid hang.
http://bugs.debian.org/712974 https://bugs.debian.org/712974
2013-07-02 Paul Eggert <eggert@cs.ucla.edu> 2013-07-02 Paul Eggert <eggert@cs.ucla.edu>
@ -2617,7 +2617,7 @@
Merge from gnulib, incorporating: Merge from gnulib, incorporating:
2013-03-29 stdalign: port to stricter ISO C11 2013-03-29 stdalign: port to stricter ISO C11
This helps to run 'configure' on MS-Windows; see Eli Zaretskii in This helps to run 'configure' on MS-Windows; see Eli Zaretskii in
<https://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00999.html>. <https://lists.gnu.org/r/emacs-devel/2013-03/msg00999.html>.
2013-03-27 Paul Eggert <eggert@cs.ucla.edu> 2013-03-27 Paul Eggert <eggert@cs.ucla.edu>
@ -2812,7 +2812,7 @@
Enable conservative stack scanning for all architectures. Enable conservative stack scanning for all architectures.
Suggested by Stefan Monnier in Suggested by Stefan Monnier in
<https://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00183.html>. <https://lists.gnu.org/r/emacs-devel/2013-01/msg00183.html>.
* configure.ac (GC_MARK_STACK): Remove. * configure.ac (GC_MARK_STACK): Remove.
2013-01-11 Paul Eggert <eggert@cs.ucla.edu> 2013-01-11 Paul Eggert <eggert@cs.ucla.edu>
@ -3182,7 +3182,7 @@
Check more robustly for timer_settime. Check more robustly for timer_settime.
This should fix an OS X build problem reported by Ivan Andrus in This should fix an OS X build problem reported by Ivan Andrus in
<https://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00671.html>. <https://lists.gnu.org/r/emacs-devel/2012-09/msg00671.html>.
* configure.ac (gl_THREADLIB): Define to empty, since Emacs * configure.ac (gl_THREADLIB): Define to empty, since Emacs
does threads its own way. does threads its own way.
* lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
@ -3196,7 +3196,7 @@
* Makefile.in (bootstrap): Simplify build procedure. * Makefile.in (bootstrap): Simplify build procedure.
Suggested by Wolfgang Jenker in Suggested by Wolfgang Jenker in
<https://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00456.html>. <https://lists.gnu.org/r/emacs-devel/2012-09/msg00456.html>.
Merge from gnulib, incorporating: Merge from gnulib, incorporating:
2012-09-22 sockets, sys_stat: remove AC_C_INLINE in MSVC-only cases 2012-09-22 sockets, sys_stat: remove AC_C_INLINE in MSVC-only cases
@ -3216,14 +3216,14 @@
* Makefile.in: Fix build error on FreeBSD. * Makefile.in: Fix build error on FreeBSD.
($(MAKEFILE_NAME)): Pass MAKE='$(MAKE)' to config.status's env. ($(MAKEFILE_NAME)): Pass MAKE='$(MAKE)' to config.status's env.
Suggested by Wolfgang Jenker in Suggested by Wolfgang Jenker in
<https://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00430.html>. <https://lists.gnu.org/r/emacs-devel/2012-09/msg00430.html>.
(MAKE_CONFIG_STATUS): Remove. Remaining use expanded. (MAKE_CONFIG_STATUS): Remove. Remaining use expanded.
This undoes part of the 2012-09-10 patch. This undoes part of the 2012-09-10 patch.
(bootstrap): Run ./configure, rather than trying to run config.status (bootstrap): Run ./configure, rather than trying to run config.status
if it exists. That builds src/epaths.h more reliably. if it exists. That builds src/epaths.h more reliably.
Run autogen/copy_autogen if autogen.sh fails, Run autogen/copy_autogen if autogen.sh fails,
to create 'configure'. Reported by Andreas Schwab in to create 'configure'. Reported by Andreas Schwab in
<https://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00438.html>. <https://lists.gnu.org/r/emacs-devel/2012-09/msg00438.html>.
* autogen.sh: Exit with status 1 when failing due to missing tools, * autogen.sh: Exit with status 1 when failing due to missing tools,
reverting the 2012-09-10 change to this file. reverting the 2012-09-10 change to this file.
* autogen/copy_autogen: Fail if one of the subsidiary actions fail. * autogen/copy_autogen: Fail if one of the subsidiary actions fail.
@ -3360,7 +3360,7 @@
* configure.ac (WARN_CFLAGS): Omit -Wjump-misses-init. * configure.ac (WARN_CFLAGS): Omit -Wjump-misses-init.
It generates false alarms in doc.c, regex.c, xdisp.c. See It generates false alarms in doc.c, regex.c, xdisp.c. See
<https://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00040.html>. <https://lists.gnu.org/r/emacs-devel/2012-09/msg00040.html>.
Merge from gnulib, incorporating: Merge from gnulib, incorporating:
2012-08-29 stdbool: be more compatible with mixed C/C++ compiles 2012-08-29 stdbool: be more compatible with mixed C/C++ compiles
@ -3375,7 +3375,7 @@
* configure.ac (_FORTIFY_SOURCE): Define only when optimizing. * configure.ac (_FORTIFY_SOURCE): Define only when optimizing.
This ports to glibc 2.15 or later, when configured with This ports to glibc 2.15 or later, when configured with
--enable-gcc-warnings. See Eric Blake in --enable-gcc-warnings. See Eric Blake in
<https://lists.gnu.org/archive/html/bug-grep/2012-09/msg00000.html>. <https://lists.gnu.org/r/bug-grep/2012-09/msg00000.html>.
2012-09-01 Daniel Colascione <dan.colascione@gmail.com> 2012-09-01 Daniel Colascione <dan.colascione@gmail.com>
@ -3528,7 +3528,7 @@
Port to Solaris 8. Port to Solaris 8.
Without this change, 'configure' fails because the recently-added Without this change, 'configure' fails because the recently-added
wait3 prototype in config.h messes up later 'configure' tests. wait3 prototype in config.h messes up later 'configure' tests.
Fix this problem by droping wait3 and WRETCODE, as they're Fix this problem by dropping wait3 and WRETCODE, as they're
no longer needed on hosts that are current porting targets. no longer needed on hosts that are current porting targets.
* configure.ac (wait3, WRETCODE): Remove, fixing a FIXME. * configure.ac (wait3, WRETCODE): Remove, fixing a FIXME.
All uses changed to waitpid and WEXITSTATUS. All uses changed to waitpid and WEXITSTATUS.
@ -3812,7 +3812,7 @@
Improve static checking when configured --with-ns. Improve static checking when configured --with-ns.
See Samuel Bronson's remarks in See Samuel Bronson's remarks in
<https://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00146.html>. <https://lists.gnu.org/r/emacs-devel/2012-07/msg00146.html>.
* configure.in (WARN_CFLAGS): Omit -Wunreachable-code, as it's * configure.in (WARN_CFLAGS): Omit -Wunreachable-code, as it's
a no-op with recent GCC and harmful in earlier ones. a no-op with recent GCC and harmful in earlier ones.
Omit -Wsync-nand, as it's irrelevant to Emacs and provokes a Omit -Wsync-nand, as it's irrelevant to Emacs and provokes a
@ -4072,7 +4072,7 @@
Remove --disable-maintainer-mode option from 'configure'. (Bug#11555) Remove --disable-maintainer-mode option from 'configure'. (Bug#11555)
It is confusingly named and rarely useful. See, for example, It is confusingly named and rarely useful. See, for example,
<https://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00089.html>. <https://lists.gnu.org/r/emacs-devel/2011-12/msg00089.html>.
* INSTALL.BZR: Don't mention --disable-maintainer-mode. * INSTALL.BZR: Don't mention --disable-maintainer-mode.
* Makefile.in (MAINTAINER_MODE_FLAG): Remove; all uses removed. * Makefile.in (MAINTAINER_MODE_FLAG): Remove; all uses removed.
* configure.in: Remove --disable-maintainer-mode. * configure.in: Remove --disable-maintainer-mode.
@ -4555,7 +4555,7 @@
Check pkg-config exit status when configuring (Bug#10626). Check pkg-config exit status when configuring (Bug#10626).
* configure.in (PKG_CHECK_MODULES): Do not assume that pkg-config * configure.in (PKG_CHECK_MODULES): Do not assume that pkg-config
works; check its exit status. Reported by Jordi Gutiérrez Hermoso in works; check its exit status. Reported by Jordi Gutiérrez Hermoso in
<https://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00787.html>. <https://lists.gnu.org/r/emacs-devel/2012-01/msg00787.html>.
2012-04-07 Glenn Morris <rgm@gnu.org> 2012-04-07 Glenn Morris <rgm@gnu.org>
@ -4628,7 +4628,7 @@
* configure.in (HAVE_PTHREAD): Check for pthread_atfork if linking * configure.in (HAVE_PTHREAD): Check for pthread_atfork if linking
to gmalloc.c. This should prevent a MirBSD 10 build failure reported to gmalloc.c. This should prevent a MirBSD 10 build failure reported
by Nelson H. F. Beebe in by Nelson H. F. Beebe in
<https://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00065.html>. <https://lists.gnu.org/r/emacs-devel/2011-12/msg00065.html>.
2011-12-10 Juanma Barranquero <lekktu@gmail.com> 2011-12-10 Juanma Barranquero <lekktu@gmail.com>
@ -4775,7 +4775,7 @@
Merge from gnulib, improving some licensing wording. Merge from gnulib, improving some licensing wording.
This clarifies and fixes some licensing issues raised by Glenn Morris This clarifies and fixes some licensing issues raised by Glenn Morris
<https://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00397.html>. <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00397.html>.
It also merges the latest version of texinfo.tex and has some It also merges the latest version of texinfo.tex and has some
MSVC-related changes that don't affect Emacs. MSVC-related changes that don't affect Emacs.
* Makefile.in (GNULIB_TOOL_FLAGS): Avoid msvc-inval, msvc-nothrow, * Makefile.in (GNULIB_TOOL_FLAGS): Avoid msvc-inval, msvc-nothrow,
@ -4944,7 +4944,7 @@
test, which runs afoul of Automake installations where, for example, test, which runs afoul of Automake installations where, for example,
/usr/share/aclocal contains a copy of gl_THREADLIB. /usr/share/aclocal contains a copy of gl_THREADLIB.
Reported by Sven Joachim in Reported by Sven Joachim in
<https://lists.gnu.org/archive/html/emacs-devel/2011-07/msg00529.html>. <https://lists.gnu.org/r/emacs-devel/2011-07/msg00529.html>.
This is just a quick temporary fix, specific to Emacs; I'll work This is just a quick temporary fix, specific to Emacs; I'll work
with the other gnulib maintainers to get a more-permanent fix. with the other gnulib maintainers to get a more-permanent fix.
@ -5556,7 +5556,7 @@
* arg-nonnull.h, c++defs.h, warn-on-use.h: Fix licenses. * arg-nonnull.h, c++defs.h, warn-on-use.h: Fix licenses.
Sync from gnulib, which has been patched to fix the problem Sync from gnulib, which has been patched to fix the problem
with the license notices. Reported by Glenn Morris in with the license notices. Reported by Glenn Morris in
<https://lists.gnu.org/archive/html/emacs-devel/2011-02/msg00403.html>. <https://lists.gnu.org/r/emacs-devel/2011-02/msg00403.html>.
2011-02-09 Stefan Monnier <monnier@iro.umontreal.ca> 2011-02-09 Stefan Monnier <monnier@iro.umontreal.ca>
@ -5590,7 +5590,7 @@
gnulib: adjust to upstream _HEADERS change gnulib: adjust to upstream _HEADERS change
* lib/Makefile.am (EXTRA_HEADERS, nodist_pkginclude_HEADERS): * lib/Makefile.am (EXTRA_HEADERS, nodist_pkginclude_HEADERS):
New empty macros, to accommodate recent changes to gnulib. See New empty macros, to accommodate recent changes to gnulib. See
<https://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00068.html>. <https://lists.gnu.org/r/bug-gnulib/2011-02/msg00068.html>.
* c++defs.h, lib/Makefile.in, lib/ftoastr.h, lib/getopt.in.h: * c++defs.h, lib/Makefile.in, lib/ftoastr.h, lib/getopt.in.h:
* lib/gnulib.mk, lib/ignore-value.h, lib/stdbool.in.h, lib/stddef.in.h: * lib/gnulib.mk, lib/ignore-value.h, lib/stdbool.in.h, lib/stddef.in.h:
* lib/time.in.h, lib/unistd.in.h: * lib/time.in.h, lib/unistd.in.h:
@ -5664,7 +5664,7 @@
* lib/mktime.c (long_int_is_wide_enough): Move this assertion to * lib/mktime.c (long_int_is_wide_enough): Move this assertion to
the top level, to make it clearer that the assumption about the top level, to make it clearer that the assumption about
long_int width is being checked. See long_int width is being checked. See
<https://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00554.html>. <https://lists.gnu.org/r/bug-gnulib/2011-01/msg00554.html>.
2011-01-29 Paul Eggert <eggert@cs.ucla.edu> 2011-01-29 Paul Eggert <eggert@cs.ucla.edu>
@ -5673,7 +5673,7 @@
negative number, which the C Standard says has undefined behavior. negative number, which the C Standard says has undefined behavior.
In practice this is not a problem, but might as well do it by the book. In practice this is not a problem, but might as well do it by the book.
Reported by Rich Felker and Eric Blake; see Reported by Rich Felker and Eric Blake; see
<https://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00493.html>. <https://lists.gnu.org/r/bug-gnulib/2011-01/msg00493.html>.
* m4/mktime.m4 (AC_FUNC_MKTIME): Likewise. * m4/mktime.m4 (AC_FUNC_MKTIME): Likewise.
* lib/mktime.c (TYPE_MAXIMUM): Redo slightly to match the others. * lib/mktime.c (TYPE_MAXIMUM): Redo slightly to match the others.
@ -5691,7 +5691,7 @@
mktime: fix some integer overflow issues and sidestep the rest mktime: fix some integer overflow issues and sidestep the rest
This was prompted by a bug report by Benjamin Lindner for MinGW This was prompted by a bug report by Benjamin Lindner for MinGW
<https://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00472.html>. <https://lists.gnu.org/r/bug-gnulib/2011-01/msg00472.html>.
His bug is due to signed integer overflow (0 - INT_MIN), and I His bug is due to signed integer overflow (0 - INT_MIN), and I
I scanned through mktime.c looking for other integer overflow I scanned through mktime.c looking for other integer overflow
problems, fixing all the bugs I found. problems, fixing all the bugs I found.
@ -5710,7 +5710,7 @@
no need to test for alternatives. All uses removed. no need to test for alternatives. All uses removed.
(TYPE_MAXIMUM): Don't rely here on overflow behavior not defined by (TYPE_MAXIMUM): Don't rely here on overflow behavior not defined by
the C standard. Reported by Rich Felker in the C standard. Reported by Rich Felker in
<https://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00488.html>. <https://lists.gnu.org/r/bug-gnulib/2011-01/msg00488.html>.
(twos_complement_arithmetic): Also check long_int and time_t. (twos_complement_arithmetic): Also check long_int and time_t.
(time_t_avg, time_t_add_ok, time_t_int_add_ok): New functions. (time_t_avg, time_t_add_ok, time_t_int_add_ok): New functions.
(guess_time_tm, ranged_convert, __mktime_internal): Use them. (guess_time_tm, ranged_convert, __mktime_internal): Use them.
@ -5810,7 +5810,7 @@
aclocal.m4: put this file back into repository aclocal.m4: put this file back into repository
This way, we don't have to assume that the maintainer has This way, we don't have to assume that the maintainer has
the automake package installed. See the automake package installed. See
<https://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00746.html>. <https://lists.gnu.org/r/emacs-devel/2011-01/msg00746.html>.
* .bzrignore: Remove aclocal.m4, undoing the previous change. * .bzrignore: Remove aclocal.m4, undoing the previous change.
* Makefile.in (top_maintainer_clean): Do not remove aclocal.m4, * Makefile.in (top_maintainer_clean): Do not remove aclocal.m4,
undoing the previous change. undoing the previous change.
@ -5837,7 +5837,7 @@
aclocal.m4: tweaks to regenerate more conveniently aclocal.m4: tweaks to regenerate more conveniently
This attempts to act better when the source is in a weird state. See This attempts to act better when the source is in a weird state. See
<https://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00734.html>. <https://lists.gnu.org/r/emacs-devel/2011-01/msg00734.html>.
* Makefile.in (am--refresh): Add aclocal.m4, configure, config.in. * Makefile.in (am--refresh): Add aclocal.m4, configure, config.in.
* .bzrignore: Add aclocal.m4. * .bzrignore: Add aclocal.m4.
@ -5848,12 +5848,12 @@
the most recent change here. the most recent change here.
* aclocal.m4: Remove from bzr repository. This file is * aclocal.m4: Remove from bzr repository. This file is
auto-generated and isn't needed to run 'configure'. See auto-generated and isn't needed to run 'configure'. See
<https://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00698.html>. <https://lists.gnu.org/r/emacs-devel/2011-01/msg00698.html>.
2011-01-19 Paul Eggert <eggert@cs.ucla.edu> 2011-01-19 Paul Eggert <eggert@cs.ucla.edu>
Minor Makefile.in tweaks to build from gnulib better. Minor Makefile.in tweaks to build from gnulib better.
<https://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00673.html> <https://lists.gnu.org/r/emacs-devel/2011-01/msg00673.html>
* Makefile.in (sync-from-gnulib): Also run autoreconf -I m4. * Makefile.in (sync-from-gnulib): Also run autoreconf -I m4.
(top_maintainer_clean): Don't remove aclocal.m4. (top_maintainer_clean): Don't remove aclocal.m4.
@ -5881,7 +5881,7 @@
* Makefile.in (GNULIB_MODULES): Change ftoastr to dtoastr. * Makefile.in (GNULIB_MODULES): Change ftoastr to dtoastr.
This avoids building ftoastr and ldtoastr, which aren't needed. See This avoids building ftoastr and ldtoastr, which aren't needed. See
<https://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00199.html>. <https://lists.gnu.org/r/bug-gnulib/2011-01/msg00199.html>.
* .bzrignore: Add .h files that are host-dependent. * .bzrignore: Add .h files that are host-dependent.
Add lib/.deps/, lib/arg-nonnull.h, lib/c++defs.h, lib/getopt.h, Add lib/.deps/, lib/arg-nonnull.h, lib/c++defs.h, lib/getopt.h,
@ -14700,7 +14700,7 @@
;; coding: utf-8 ;; coding: utf-8
;; End: ;; End:
Copyright (C) 1993-1999, 2001-2017 Free Software Foundation, Inc. Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
This file is part of GNU Emacs. This file is part of GNU Emacs.

File diff suppressed because it is too large Load diff

215427
ChangeLog.3

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
# Build Emacs from a fresh tarball or version-control checkout. # Build Emacs from a fresh tarball or version-control checkout.
# Copyright (C) 2011-2017 Free Software Foundation, Inc. # Copyright (C) 2011-2022 Free Software Foundation, Inc.
# #
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
# #
@ -27,10 +27,44 @@
# newly-built Makefile. If the source tree is already configured, # newly-built Makefile. If the source tree is already configured,
# this file defers to the existing Makefile. # this file defers to the existing Makefile.
# If you are using a non-GNU 'make', or if you want non-default build # If you want non-default build options, or if you want to build in an
# options, or if you want to build in an out-of-source tree, please # out-of-source tree, you should run 'configure' before running 'make'.
# run "configure" by hand. But run autogen.sh first, if the source # But run 'autogen.sh' first, if the source was checked out directly
# was checked out directly from the repository. # from the repository.
# Display help.
ifeq (help,$(filter help,$(MAKECMDGOALS)))
help:
$(info $ NOTE: This is a brief summary of some common make targets.)
$(info $ For more detailed information, please read the files INSTALL,)
$(info $ INSTALL.REPO, Makefile or visit this URL:)
$(info $ https://www.gnu.org/prep/standards/html_node/Standard-Targets.html)
$(info $ )
$(info $ make all -- compile and build Emacs)
$(info $ make install -- install Emacs)
$(info $ make TAGS -- update tags tables)
$(info $ make clean -- delete built files but preserve configuration)
$(info $ make mostlyclean -- like 'make clean', but leave those files that)
$(info $ usually do not need to be recompiled)
$(info $ make distclean -- delete all build and configuration files,)
$(info $ leave only files included in source distribution)
$(info $ make maintainer-clean -- delete almost everything that can be regenerated)
$(info $ make extraclean -- like maintainer-clean, and also delete)
$(info $ backup and autosave files)
$(info $ make bootstrap -- delete all compiled files to force a new bootstrap)
$(info $ from a clean slate, then build in the normal way)
$(info $ make uninstall -- remove files installed by 'make install')
$(info $ make check -- run the Emacs test suite)
$(info $ make docs -- generate Emacs documentation in info format)
$(info $ make html -- generate documentation in html format)
$(info $ make ps -- generate documentation in ps format)
$(info $ make pdf -- generate documentation in pdf format )
@:
.PHONY: help
else
# If a Makefile already exists, just use it. # If a Makefile already exists, just use it.
@ -45,7 +79,7 @@ else
ifeq ($(filter-out %clean,$(or $(MAKECMDGOALS),default)),) ifeq ($(filter-out %clean,$(or $(MAKECMDGOALS),default)),)
$(MAKECMDGOALS): $(MAKECMDGOALS):
@echo >&2 'No Makefile; skipping $@.' $(warning No Makefile; skipping $@.)
else else
@ -63,22 +97,28 @@ default $(ORDINARY_GOALS): Makefile
.NOTPARALLEL: .NOTPARALLEL:
configure: configure:
@echo >&2 'There seems to be no "configure" file in this directory.' $(warning There seems to be no "configure" file in this directory.)
@echo >&2 Running ./autogen.sh ... $(warning Running ./autogen.sh ...)
./autogen.sh ./autogen.sh
@echo >&2 '"configure" file built.' @echo >&2 '"configure" file built.'
Makefile: configure Makefile: configure
@echo >&2 'There seems to be no Makefile in this directory.' $(warning There seems to be no Makefile in this directory.)
@echo >&2 'Running ./configure ...' ifeq ($(configure),default)
$(warning Running ./configure ...)
./configure ./configure
else
$(warning Running ./configure $(configure)...)
./configure $(configure)
endif
@echo >&2 'Makefile built.' @echo >&2 'Makefile built.'
# 'make bootstrap' in a fresh checkout needn't run 'configure' twice. # 'make bootstrap' in a fresh checkout needn't run 'configure' twice.
bootstrap: Makefile bootstrap: Makefile
$(MAKE) -f Makefile all $(MAKE) -f Makefile bootstrap-all
.PHONY: bootstrap default $(ORDINARY_GOALS) .PHONY: bootstrap default $(ORDINARY_GOALS)
endif endif
endif endif
endif

155
INSTALL
View file

@ -1,14 +1,16 @@
GNU Emacs Installation Guide GNU Emacs Installation Guide
Copyright (C) 1992, 1994, 1996-1997, 2000-2017 Free Software Foundation, Copyright (C) 1992, 1994, 1996-1997, 2000-2022 Free Software Foundation,
Inc. Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
This file contains general information on building GNU Emacs. This file contains general information on building GNU Emacs. For
For more information specific to the MS-Windows, GNUstep/macOS, and more information specific to the MS-Windows, GNUstep/macOS, and MS-DOS
MS-DOS ports, also read the files nt/INSTALL, nextstep/INSTALL, and ports, also read the files nt/INSTALL, nextstep/INSTALL, and
msdos/INSTALL. For information about building from a repository checkout msdos/INSTALL.
(rather than a release), also read the file INSTALL.REPO.
For information about building from a Git checkout (rather than an
Emacs release), read the INSTALL.REPO file first.
BASIC INSTALLATION BASIC INSTALLATION
@ -34,11 +36,12 @@ some of the steps manually. The more detailed description in the other
sections of this guide will help you do that, so please refer to those sections of this guide will help you do that, so please refer to those
sections if you need to. sections if you need to.
1. Unpacking the Emacs 25 release requires about 200 MB of free 1. Obtain and unpack the Emacs release, with commands like this:
disk space. Building Emacs uses about another 200 MB of space.
The final installed Emacs uses about 150 MB of disk space. wget https://ftp.gnu.org/gnu/emacs/emacs-VERSION.tar.xz
This includes the space-saving that comes from automatically tar -xf emacs-VERSION.tar.xz
compressing the Lisp source files on installation.
where VERSION is the Emacs version number.
2a. 'cd' to the directory where you unpacked Emacs and invoke the 2a. 'cd' to the directory where you unpacked Emacs and invoke the
'configure' script: 'configure' script:
@ -81,13 +84,17 @@ sections if you need to.
src/emacs -Q src/emacs -Q
To test Emacs further (intended mostly to help developers):
make check
6. Assuming that the program 'src/emacs' starts and displays its 6. Assuming that the program 'src/emacs' starts and displays its
opening screen, you can install the program and its auxiliary opening screen, you can install the program and its auxiliary
files into their installation directories: files into their installation directories:
make install make install
You are now ready to use Emacs. If you wish to conserve disk space, You are now ready to use Emacs. If you wish to conserve space,
you may remove the program binaries and object files from the you may remove the program binaries and object files from the
directory where you built Emacs: directory where you built Emacs:
@ -104,24 +111,34 @@ sections if you need to.
(provided you have the 'gzip' program) those installed Lisp source (.el) (provided you have the 'gzip' program) those installed Lisp source (.el)
files that have corresponding .elc versions, as well as the Info files. files that have corresponding .elc versions, as well as the Info files.
You can read a brief summary about common make targets:
make help
ADDITIONAL DISTRIBUTION FILES ADDITIONAL DISTRIBUTION FILES
* Complex Text Layout support libraries * Complex Text Layout support libraries
On GNU and Unix systems, Emacs needs the optional libraries "m17n-db", On GNU and Unix systems, Emacs needs optional libraries to correctly
"libm17n-flt", "libotf" to correctly display such complex scripts as display such complex scripts as Indic and Khmer, and also for scripts
Indic and Khmer, and also for scripts that require Arabic shaping that require Arabic shaping support (Arabic and Farsi). If the
support (Arabic and Farsi). On some systems, particularly GNU/Linux, HarfBuzz library is installed, Emacs will build with it and use it for
these libraries may be already present or available as additional this purpose. HarfBuzz is the preferred shaping engine, both on Posix
packages. Note that if there is a separate 'dev' or 'devel' package, hosts and on MS-Windows, so we recommend installing it before building
for use at compilation time rather than run time, you will need that Emacs. The alternative for GNU/Linux and Posix systems is to use the
as well as the corresponding run time package; typically the dev "m17n-db", "libm17n-flt", and "libotf" libraries. (On some systems,
package will contain header files and a library archive. Otherwise, particularly GNU/Linux, these libraries may be already present or
you can download the libraries from <http://www.nongnu.org/m17n/>. available as additional packages.) Note that if there is a separate
'dev' or 'devel' package, for use at compilation time rather than run
time, you will need that as well as the corresponding run time
package; typically the dev package will contain header files and a
library archive. On MS-Windows, if HarfBuzz is not available, Emacs
will use the Uniscribe shaping engine that is part of the OS.
Note that Emacs cannot support complex scripts on a TTY, unless the Note that Emacs cannot support complex scripts on a TTY, unless the
terminal includes such a support. terminal includes such a support. However, most modern terminal
emulators, such as xterm, do support such scripts.
* intlfonts-VERSION.tar.gz * intlfonts-VERSION.tar.gz
@ -139,7 +156,9 @@ lisp/ps-mule.el defines the *.bdf font files required for printing
each character set. each character set.
The intlfonts distribution contains its own installation instructions, The intlfonts distribution contains its own installation instructions,
in the intlfonts/README file. in the intlfonts/README file. See also the Emacs Frequently Asked
Questions info pages "(efaq) How to add fonts" for installation
instructions.
* Image support libraries * Image support libraries
@ -162,14 +181,15 @@ can be found (in the unlikely event that your distribution does not
provide them). By default, libraries marked with an X are required if provide them). By default, libraries marked with an X are required if
X11 is being used. X11 is being used.
libXaw3d https://directory.fsf.org/project/xaw3d/ libXaw3d https://directory.fsf.org/project/Xaw3d
X libxpm for XPM: http://www.x.org/releases/current/src/lib/ X libxpm for XPM: https://www.x.org/releases/current/src/lib/
X libpng for PNG: http://www.libpng.org/ X libpng for PNG: http://www.libpng.org/
libz (for PNG): http://www.zlib.net/ libz (for PNG): https://www.zlib.net/
X libjpeg for JPEG: http://www.ijg.org/ X libjpeg for JPEG: https://www.ijg.org/
X libtiff for TIFF: http://www.remotesensing.org/libtiff/ X libtiff for TIFF: http://www.simplesystems.org/libtiff/
X libgif for GIF: http://sourceforge.net/projects/giflib/ X libgif for GIF: http://giflib.sourceforge.net/
librsvg2 for SVG: http://wiki.gnome.org/action/show/Projects/LibRsvg librsvg2 for SVG: https://wiki.gnome.org/Projects/LibRsvg
libwebp for WebP: https://developers.google.com/speed/webp/
If you supply the appropriate --without-LIB option, 'configure' will If you supply the appropriate --without-LIB option, 'configure' will
omit the corresponding library from Emacs, even if that makes for a omit the corresponding library from Emacs, even if that makes for a
@ -198,13 +218,48 @@ need to compile it. For example, to compile Emacs with support for X
and graphics libraries, you may need to install the X development and graphics libraries, you may need to install the X development
package(s), and development versions of the jpeg, png, etc. packages. package(s), and development versions of the jpeg, png, etc. packages.
The names of the packages that you need varies according to the The names of the packages that you need vary according to the
GNU/Linux distribution that you use, and the options that you want to GNU/Linux distribution that you use, and the options that you want to
configure Emacs with. On Debian-based systems, you can install all the configure Emacs with. On Debian-based systems, you can install all the
packages needed to build the installed version of Emacs with a command packages needed to build the installed version of Emacs with a command
like 'apt-get build-dep emacs24'. On Red Hat systems, the like 'apt-get build-dep emacs' (on older systems, replace 'emacs' with
corresponding command is 'yum-builddep emacs'. e.g. 'emacs25'). On Red Hat-based systems, the corresponding command is
'dnf builddep emacs' (on older systems, use 'yum-builddep' instead).
On FreeBSD, the command is 'pkg install -y `pkg rquery %dn emacs-devel`'.
* Alternative window systems
If you want to use Emacs on one of the alternative window systems
available on GNU/Linux and some Unix systems, such as Wayland or
Broadway, you can build the PGTK ("Pure GTK") port of Emacs, which
utilizes the GTK+ toolkit to support those window systems. To this
end, invoke the configure script with the '--with-pgtk' option, like
this:
./configure --with-pgtk
This build is only supported with GTK+ version 3, and it is an error
to specify any other X-specific configuration option when PGTK is
enabled.
If you use exclusively X, do not use the PGTK port. There are a
number of respects in which the regular --with-x-toolkit=gtk build
works better. The PGTK port should not be considered a simple upgrade
from --with-x-toolkit=gtk.
With the PGTK build, you will be able to switch between running Emacs
on X, Wayland and Broadway using the 'GDK_BACKEND' environment
variable. GTK+ should automatically detect and use the correct value
for your system, but you can also specify it manually. For example,
to force GTK+ to run under Broadway, start Emacs like this:
GDK_BACKEND=broadway emacs ...
(where '...' denotes any further options you may want to pass to Emacs).
The GNUstep build also supports the Wayland window system. If that is
what you want, see nextstep/INSTALL.
DETAILED BUILDING AND INSTALLATION: DETAILED BUILDING AND INSTALLATION:
@ -212,7 +267,7 @@ DETAILED BUILDING AND INSTALLATION:
see nextstep/INSTALL. For non-ancient versions of MS Windows, see see nextstep/INSTALL. For non-ancient versions of MS Windows, see
the file nt/INSTALL. For MS-DOS and MS Windows 3.X, see msdos/INSTALL.) the file nt/INSTALL. For MS-DOS and MS Windows 3.X, see msdos/INSTALL.)
1) See the basic installation summary above for the disk space requirements. 1) See BASIC INSTALLATION above for getting and configuring Emacs.
2) In the unlikely event that 'configure' does not detect your system 2) In the unlikely event that 'configure' does not detect your system
type correctly, consult './etc/MACHINES' to see what --host, --build type correctly, consult './etc/MACHINES' to see what --host, --build
@ -273,8 +328,10 @@ a POP3 server by default. Versions of the POP protocol older than
POP3 are not supported. While POP3 support is typically enabled, POP3 are not supported. While POP3 support is typically enabled,
whether Emacs actually uses POP3 is controlled by individual users; whether Emacs actually uses POP3 is controlled by individual users;
see the Rmail chapter of the Emacs manual. Unless --with-mailutils is see the Rmail chapter of the Emacs manual. Unless --with-mailutils is
in effect, it is a good idea to configure --without-pop so that users in effect, it is a good idea to configure without POP3 support so that
are less likely to inadvertently read email via insecure channels. users are less likely to inadvertently read email via insecure
channels. On native MS-Windows, --with-pop is the default; on other
platforms, --without-pop is the default.
For image support you may have to download, build, and install the For image support you may have to download, build, and install the
appropriate image support libraries for image types other than XBM and appropriate image support libraries for image types other than XBM and
@ -291,15 +348,25 @@ or more of these options:
--without-gif for GIF image support --without-gif for GIF image support
--without-png for PNG image support --without-png for PNG image support
--without-rsvg for SVG image support --without-rsvg for SVG image support
--without-imagemagick for Imagemagick support --without-webp for WebP image support
Although ImageMagick support is disabled by default due to security
and stability concerns, you can enable it with --with-imagemagick.
Use --without-toolkit-scroll-bars to disable Motif or Xaw3d scroll bars. Use --without-toolkit-scroll-bars to disable Motif or Xaw3d scroll bars.
Use --without-xim to inhibit the default use of X Input Methods. Use --without-xim to inhibit the default use of X Input Methods.
In this case, the X resource useXIM can be used to turn on use of XIM. In this case, the X resource useXIM can be used to turn on use of XIM.
Use --disable-largefile to omit support for files larger than 2GB on Use --without-xinput2 to disable the use of version 2 of the X Input
systems which support that. Extension. This disables support for touchscreens, pinch gestures,
and scroll wheels that report scroll deltas at pixel-level precision.
Use --disable-largefile to omit support for files larger than 2GB, and
--disable-year2038 to omit support for timestamps past the year 2038,
on systems which allow omitting such support. This may help when
linking Emacs to a library with an ABI that requires a particular
width for off_t or for time_t.
Use --without-sound to disable sound support. Use --without-sound to disable sound support.
@ -315,6 +382,12 @@ features enabled, you can combine --without-all with --with-FEATURE.
For example, you can use --without-all --without-x --with-dbus to For example, you can use --without-all --without-x --with-dbus to
build with D-Bus support and nothing more. build with D-Bus support and nothing more.
Use --with-gnutls=ifavailable to use GnuTLS if available but go ahead
and build without it if not available. This overrides Emacs's default
behavior of refusing to build if GnuTLS is absent. When X11 support
is enabled, the libraries for gif, jpeg, png, tiff, and xpm are in the
same strongly-recommended category as GnuTLS, and have similar options.
Use --with-wide-int to implement Emacs values with the type 'long long', Use --with-wide-int to implement Emacs values with the type 'long long',
even on hosts where a narrower type would do. With this option, on a even on hosts where a narrower type would do. With this option, on a
typical 32-bit host, Emacs integers have 62 bits instead of 30. typical 32-bit host, Emacs integers have 62 bits instead of 30.
@ -343,7 +416,7 @@ Use --enable-link-time-optimization to enable link-time optimization.
With GCC, you need GCC 4.5.0 and later, and 'configure' arranges for With GCC, you need GCC 4.5.0 and later, and 'configure' arranges for
linking to be parallelized if possible. With Clang, you need GNU linking to be parallelized if possible. With Clang, you need GNU
binutils with the gold linker and plugin support, along with the LLVM binutils with the gold linker and plugin support, along with the LLVM
gold plugin <http://llvm.org/docs/GoldPlugin.html>. Link time gold plugin <https://llvm.org/docs/GoldPlugin.html>. Link time
optimization is not the default as it tends to cause crashes and to optimization is not the default as it tends to cause crashes and to
make Emacs slower. make Emacs slower.

View file

@ -1,9 +1,22 @@
Building and Installing Emacs from the Repository Building and Installing Emacs from the Repository
Simply run 'make'. This should work if your files are freshly checked The Emacs repository is hosted on Savannah. The following Git command
out from the repository, and if you have the proper tools installed. will clone the repository to the 'emacs' subdirectory of the current
If it doesn't work, or if you have special build requirements, the directory on your local machine:
following information may be helpful.
git clone git://git.sv.gnu.org/emacs.git
To build the repository code, simply run 'make' in the 'emacs'
directory. This should work if your files are freshly checked out
from the repository, and if you have the proper tools installed; the
default configuration options will be used. Other configuration
options can be specified by setting a 'configure' variable, for
example:
$ make configure="--prefix=/opt/emacs CFLAGS='-O0 -g3'"
If the above doesn't work, or if you have special build requirements,
the following information may be helpful.
Building Emacs from the source-code repository requires some tools Building Emacs from the source-code repository requires some tools
that are not needed when building from a release. You will need: that are not needed when building from a release. You will need:
@ -32,8 +45,8 @@ can invoke './configure -C'. After configuring, build Emacs as follows:
$ make $ make
If you want to install Emacs, type 'make install' instead of 'make' in You can also type 'make check' to test and 'make install' to install
the last command. Emacs.
Occasionally the file 'lisp/loaddefs.el' (and similar automatically Occasionally the file 'lisp/loaddefs.el' (and similar automatically
generated files, such as 'esh-groups.el', and '*-loaddefs.el' in some generated files, such as 'esh-groups.el', and '*-loaddefs.el' in some
@ -51,10 +64,19 @@ To update loaddefs.el (and similar files), do:
If either of the above partial procedures fails, try 'make bootstrap'. If either of the above partial procedures fails, try 'make bootstrap'.
If CPU time is not an issue, 'make bootstrap' is a more thorough way If CPU time is not an issue, 'make bootstrap' is a more thorough way
to rebuild, avoiding spurious problems. to rebuild, avoiding spurious problems. 'make bootstrap' rebuilds
Emacs with the same configuration options as the previous build; it
can also be used to rebuild Emacs with other configuration options by
setting a 'configure' variable, for example:
$ make bootstrap configure="CFLAGS='-O0 -g3'"
To rebuild Emacs with the default configuration options, you can use:
$ make bootstrap configure=default
Occasionally, there are changes that 'make bootstrap' won't be able to Occasionally, there are changes that 'make bootstrap' won't be able to
handle. The most thorough cleaning can be achieved by 'git clean -fx' handle. The most thorough cleaning can be achieved by 'git clean -fdx'
which will leave you with only files from the git repository. Here which will leave you with only files from the git repository. Here
are some faster methods for a couple of particular error cases: are some faster methods for a couple of particular error cases:
@ -76,7 +98,7 @@ never platform-specific.
Copyright (C) 2002-2017 Free Software Foundation, Inc. Copyright (C) 2002-2022 Free Software Foundation, Inc.
This file is part of GNU Emacs. This file is part of GNU Emacs.

View file

@ -1,6 +1,6 @@
### @configure_input@ ### @configure_input@
# Copyright (C) 1992-2017 Free Software Foundation, Inc. # Copyright (C) 1992-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -48,22 +48,32 @@
# #
# make extraclean # make extraclean
# Still more severe - delete backup and autosave files, too. # Still more severe - delete backup and autosave files, too.
# Also generated files that do not normally change and can be slow
# to rebuild (eg leim/ja-dic).
# #
# make bootstrap # make bootstrap
# Removes all the compiled files to force a new bootstrap from a # Removes all the compiled files to force a new bootstrap from a
# clean slate, and then build in the normal way. # clean slate, and then build in the normal way. If the FAST Make
# variable is set, then the config.cache file isn't removed. This
# allows you to say
#
# ./configure -C
# make FAST=true bootstrap
#
# and use the cached results from the configure run, which is much
# faster.
# #
# make docs # make docs
# Make Emacs documentation files from their sources; requires makeinfo. # Make Emacs documentation files from their sources; requires makeinfo.
# #
# make check or make check-expensive # make check (or check-expensive or check-all)
# Run Emacs test suite. check-expensive runs also tests which # Run the Emacs test suite.
# take more time to perform. # check-expensive includes additional tests that can be slow.
# check-all runs all tests, including ones that can be slow, or
# fail unpredictably
SHELL = @SHELL@ SHELL = @SHELL@
DUMPING=@DUMPING@
# This only matters when inheriting a CDPATH not starting with the # This only matters when inheriting a CDPATH not starting with the
# current directory. # current directory.
CDPATH= CDPATH=
@ -91,25 +101,29 @@ configuration=@configuration@
### The nt/ subdirectory gets built only for MinGW ### The nt/ subdirectory gets built only for MinGW
NTDIR=@NTDIR@ NTDIR=@NTDIR@
# 'make' verbosity. top_builddir = @top_builddir@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -include ${top_builddir}/src/verbose.mk
AM_V_GEN = $(am__v_GEN_@AM_V@) FIND_DELETE = @FIND_DELETE@
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@) HAVE_NATIVE_COMP = @HAVE_NATIVE_COMP@
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @ USE_STARTUP_NOTIFICATION = @USE_STARTUP_NOTIFICATION@
am__v_at_1 =
HAVE_BE_APP = @HAVE_BE_APP@
HAVE_PGTK = @HAVE_PGTK@
HAVE_GSETTINGS = @HAVE_GSETTINGS@
# ==================== Where To Install Things ==================== # ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / macOS. # Location to install Emacs.app under GNUstep / macOS.
# Later values may use these. # Later values may use these.
ns_appdir=@ns_appdir@
ns_appbindir=@ns_appbindir@ ns_appbindir=@ns_appbindir@
ns_applibexecdir=@ns_applibexecdir@
ns_appresdir=@ns_appresdir@ ns_appresdir=@ns_appresdir@
ns_applibdir=@ns_applibdir@
# Either yes or no depending on whether this is a relocatable Emacs.app. # Either yes or no depending on whether this is a relocatable Emacs.app.
ns_self_contained=@ns_self_contained@ ns_self_contained=@ns_self_contained@
@ -149,6 +163,9 @@ libexecdir=@libexecdir@
# Currently only used for the systemd service file. # Currently only used for the systemd service file.
libdir=@libdir@ libdir=@libdir@
# Where to install emacs-module.h.
includedir=@includedir@
# Where to install Emacs's man pages. # Where to install Emacs's man pages.
# Note they contain cross-references that expect them to be in section 1. # Note they contain cross-references that expect them to be in section 1.
mandir=@mandir@ mandir=@mandir@
@ -159,9 +176,6 @@ infodir=@infodir@
# Info files not in the doc/misc directory (we get those via make echo-info). # Info files not in the doc/misc directory (we get those via make echo-info).
INFO_NONMISC=emacs.info eintr.info elisp.info INFO_NONMISC=emacs.info eintr.info elisp.info
# If no makeinfo was found and configured --without-makeinfo, "no"; else "yes".
HAVE_MAKEINFO=@HAVE_MAKEINFO@
# Directory for local state files for all programs. # Directory for local state files for all programs.
localstatedir=@localstatedir@ localstatedir=@localstatedir@
@ -189,8 +203,8 @@ x_default_search_path=@x_default_search_path@
# Where the etc/emacs.desktop file is to be installed. # Where the etc/emacs.desktop file is to be installed.
desktopdir=$(datarootdir)/applications desktopdir=$(datarootdir)/applications
# Where the etc/emacs.appdata.xml file is to be installed. # Where the etc/emacs.metainfo.xml file is to be installed.
appdatadir=$(datarootdir)/appdata metainfodir=$(datarootdir)/metainfo
# Where the etc/emacs.service file is to be installed. # Where the etc/emacs.service file is to be installed.
# The system value (typically /usr/lib/systemd/user) can be # The system value (typically /usr/lib/systemd/user) can be
@ -209,11 +223,18 @@ icondir=$(datarootdir)/icons
# The source directory for the icon files. # The source directory for the icon files.
iconsrcdir=$(srcdir)/etc/images/icons iconsrcdir=$(srcdir)/etc/images/icons
# Where to install the gsettings schema file.
gsettingsschemadir = $(datadir)/glib-2.0/schemas
# ==================== Emacs-specific directories ==================== # ==================== Emacs-specific directories ====================
# These variables hold the values Emacs will actually use. They are # These variables hold the values Emacs will actually use. They are
# based on the values of the standard Make variables above. # based on the values of the standard Make variables above.
# Where lisp files are installed in a distributed with Emacs (relative
# path to the installation directory).
lispdirrel=@lispdirrel@
# Where to install the lisp files distributed with Emacs. # Where to install the lisp files distributed with Emacs.
# This includes the Emacs version, so that the lisp files for different # This includes the Emacs version, so that the lisp files for different
# versions of Emacs will install themselves in separate directories. # versions of Emacs will install themselves in separate directories.
@ -280,10 +301,16 @@ use_gamedir=$(gameuser)$(gamegroup)
# not use an absolute path. So we must take care to always run # not use an absolute path. So we must take care to always run
# INSTALL-type commands from the directory containing the Makefile. # INSTALL-type commands from the directory containing the Makefile.
# This explains (I think) the cd thisdir seen in several install rules. # This explains (I think) the cd thisdir seen in several install rules.
SYSTEM_TYPE = @SYSTEM_TYPE@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_INFO = @INSTALL_INFO@ INSTALL_INFO = @INSTALL_INFO@
ifeq ($(SYSTEM_TYPE),cygwin)
INSTALL_ELN = $(INSTALL)
else
INSTALL_ELN = $(INSTALL_DATA)
endif
# By default, we uphold the dignity of our programs. # By default, we uphold the dignity of our programs.
INSTALL_STRIP = INSTALL_STRIP =
MKDIR_P = @MKDIR_P@ MKDIR_P = @MKDIR_P@
@ -293,15 +320,21 @@ LN_S_FILEONLY = @LN_S_FILEONLY@
# We use gzip to compress installed .el and some .txt files. # We use gzip to compress installed .el and some .txt files.
GZIP_PROG = @GZIP_PROG@ GZIP_PROG = @GZIP_PROG@
GLIB_COMPILE_SCHEMAS = glib-compile-schemas
# ============================= Targets ============================== # ============================= Targets ==============================
# Program name transformation. # Program name transformation.
TRANSFORM = @program_transform_name@ TRANSFORM = @program_transform_name@
# Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
# What emacs should be called when installed. # What emacs should be called when installed.
EMACS_NAME = `echo emacs | sed '$(TRANSFORM)'` EMACS_NAME = `echo emacs | sed '$(TRANSFORM)'`
EMACS = ${EMACS_NAME}${EXEEXT} EMACS = ${EMACS_NAME}${EXEEXT}
EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT} EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT}
EMACS_PDMP = `./src/emacs${EXEEXT} --fingerprint`.pdmp
# Subdirectories to make recursively. # Subdirectories to make recursively.
SUBDIR = $(NTDIR) lib lib-src src lisp SUBDIR = $(NTDIR) lib lib-src src lisp
@ -313,7 +346,8 @@ SUBDIR_MAKEFILES = $(patsubst ${srcdir}/%,%,${SUBDIR_MAKEFILES_IN:.in=})
# Non-makefile files created by config.status. # Non-makefile files created by config.status.
CONFIG_STATUS_FILES_IN = \ CONFIG_STATUS_FILES_IN = \
${srcdir}/nt/emacs.rc.in ${srcdir}/nt/emacsclient.rc.in \ ${srcdir}/nt/emacs.rc.in ${srcdir}/nt/emacsclient.rc.in \
${srcdir}/doc/man/emacs.1.in ${srcdir}/doc/man/emacs.1.in ${srcdir}/src/emacs-module.h.in \
${srcdir}/src/module-env-*.h
# Subdirectories to install, and where they'll go. lib-src's and nt's # Subdirectories to install, and where they'll go. lib-src's and nt's
# makefiles know how to install them, so we don't do that here. # makefiles know how to install them, so we don't do that here.
@ -322,9 +356,86 @@ CONFIG_STATUS_FILES_IN = \
COPYDIR = ${srcdir}/etc ${srcdir}/lisp COPYDIR = ${srcdir}/etc ${srcdir}/lisp
COPYDESTS = "$(DESTDIR)${etcdir}" "$(DESTDIR)${lispdir}" COPYDESTS = "$(DESTDIR)${etcdir}" "$(DESTDIR)${lispdir}"
all: ${SUBDIR} info ifeq (${ns_self_contained},no)
BIN_DESTDIR='$(DESTDIR)${bindir}/'
ELN_DESTDIR = $(DESTDIR)${libdir}/emacs/${version}/
else
BIN_DESTDIR='${ns_appbindir}/'
ELN_DESTDIR = ${ns_applibdir}/
endif
.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 etc-emacsver gsettings_SCHEMAS = etc/org.gnu.emacs.defaults.gschema.xml
all:
$(MAKE) actual-all || $(MAKE) advice-on-failure make-target=all exit-status=$$?
$(MAKE) sanity-check make-target=all
# This target is used by the 'bootstrap' target in GNUmakefile, instead of 'all'.
bootstrap-all:
$(MAKE) actual-all || $(MAKE) advice-on-failure make-target=bootstrap exit-status=$$?
$(MAKE) sanity-check make-target=bootstrap
.PHONY: bootstrap-all actual-all advice-on-failure sanity-check
actual-all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid) src-depending-on-lisp
# ADVICE-ON-FAILURE-BEGIN:all
# You could try to:
# - run "make bootstrap", which might fix the problem
# - run "make V=1", which displays the full commands invoked by make,
# to further investigate the problem
# ADVICE-ON-FAILURE-END:all
# ADVICE-ON-FAILURE-BEGIN:bootstrap
# You could try to:
# - run "make extraclean" and run "make" again (or, equivalently, run
# "make bootstrap configure=default"), to rebuild Emacs with the
# default configuration options, which might fix the problem
# - run "git clean -fdx" and run "make bootstrap" again, which might
# fix the problem if "make bootstrap configure=default" did not
# !BEWARE! "git clean -fdx" deletes all files that are not under
# !BEWARE! version control, which means that all changes to such
# !BEWARE! files will be lost and cannot be restored later
# - run "make V=1", which displays the full commands invoked by make,
# to further investigate the problem
# - report the problem and ask for help by sending an email to
# bug-gnu-emacs@gnu.org, mentioning at least the build error
# message, the platform, and the repository revision displayed by
# "git rev-parse HEAD"
# ADVICE-ON-FAILURE-END:bootstrap
advice-on-failure:
@echo >&2 '***'
@echo >&2 '*** '"\"make ${make-target}\" failed with exit status ${exit-status}."
@echo >&2 '***'
@cat Makefile | \
sed -n '/^# ADVICE-ON-FAILURE-BEGIN:${make-target}/,$${p;/^# ADVICE-ON-FAILURE-END:${make-target}/q};' | \
sed 's/^# /*** /' | grep -v '^*** ADVICE-ON-FAILURE-' >&2
@echo >&2 '***'
@exit ${exit-status}
sanity-check:
@v=$$(src/emacs${EXEEXT} --batch --eval \
'(progn (defun f (n) (if (= 0 n) 1 (* n (f (- n 1))))) (princ (f 10)))' \
2> /dev/null); \
[ "X$$v" = "X3628800" ] && exit 0; \
echo >&2 '***'; \
echo >&2 '*** '"\"make ${make-target}\" succeeded, but Emacs is not functional."; \
echo >&2 '***'; \
cat Makefile | \
sed -n '/^# ADVICE-ON-FAILURE-BEGIN:${make-target}/,$${p;/^# ADVICE-ON-FAILURE-END:${make-target}/q};' | \
sed 's/^# /*** /' | grep -v '^*** ADVICE-ON-FAILURE-' >&2; \
echo >&2 '***'; \
exit 1
.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 epaths-force-ns-self-contained etc-emacsver
# Changes in lisp may require us to reconsider the build in src. For
# example, if loaddefs.{el,elc} were built in lisp, we need a new
# .pdmp containing the new autoloads.
.PHONY: src-depending-on-lisp
src-depending-on-lisp: lisp
${MAKE} -C src BIN_DESTDIR='$(BIN_DESTDIR)' ELN_DESTDIR='$(ELN_DESTDIR)'
# If configure were to just generate emacsver.tex from emacsver.tex.in # If configure were to just generate emacsver.tex from emacsver.tex.in
# in the normal way, the timestamp of emacsver.tex would always be # in the normal way, the timestamp of emacsver.tex would always be
@ -356,6 +467,7 @@ epaths-force:
@(gamedir='${gamedir}'; \ @(gamedir='${gamedir}'; \
sed < ${srcdir}/src/epaths.in > epaths.h.$$$$ \ sed < ${srcdir}/src/epaths.in > epaths.h.$$$$ \
-e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "${standardlisppath}";' \ -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "${standardlisppath}";' \
-e 's;\(#.*PATH_REL_LOADSEARCH\).*$$;\1 "${lispdirrel}";' \
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "${locallisppath}";' \ -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "${locallisppath}";' \
-e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "${buildlisppath}";' \ -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "${buildlisppath}";' \
-e '/^#define PATH_[^ ]*SEARCH /s/\([":]\):*/\1/g' \ -e '/^#define PATH_[^ ]*SEARCH /s/\([":]\):*/\1/g' \
@ -386,11 +498,27 @@ epaths-force-w32:
w32locallisppath=$${w32locallisppath//$${w32prefix}/"%emacs_dir%"} ; \ w32locallisppath=$${w32locallisppath//$${w32prefix}/"%emacs_dir%"} ; \
sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \ sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath//;/\\;}"'";' \ -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath//;/\\;}"'";' \
-e 's;\(#.*PATH_REL_LOADSEARCH\).*$$;\1 "${lispdirrel}";' \
-e '/^.*#/s/@VER@/${version}/g' \ -e '/^.*#/s/@VER@/${version}/g' \
-e '/^.*#/s/@CFG@/${configuration}/g' \ -e '/^.*#/s/@CFG@/${configuration}/g' \
-e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \ -e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
# A NextStep style app bundle is relocatable, so instead of
# hard-coding paths try to generate them at run-time.
#
# The paths are mostly the same, and the bundle paths are different
# between macOS and GNUstep, so just replace any references to the app
# bundle root itself with the relative path.
epaths-force-ns-self-contained: epaths-force
@(sed < src/epaths.h > epaths.h.$$$$ \
-e 's;${ns_appdir}/;;') && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
ifneq ($(NTDIR),)
$(NTDIR): lib
endif
lib-src src: $(NTDIR) lib lib-src src: $(NTDIR) lib
src: lib-src src: lib-src
@ -402,18 +530,12 @@ lisp: src
lib lib-src lisp nt: Makefile lib lib-src lisp nt: Makefile
$(MAKE) -C $@ all $(MAKE) -C $@ all
# Ideally, VCSWITNESS should be a file that is modified whenever the
# repository registers a commit from either a local checkin or a
# repository pull. In git there is no single file that guarantees
# this, but the local log for the current head should be close enough.
#
# Pass an unexpanded $srcdir to src's Makefile, which then # Pass an unexpanded $srcdir to src's Makefile, which then
# expands it using its own value of srcdir (which points to the # expands it using its own value of srcdir (which points to the
# source directory of src/). # source directory of src/).
dirstate = .git/logs/HEAD
VCSWITNESS = $(if $(wildcard $(srcdir)/$(dirstate)),$$(srcdir)/../$(dirstate))
src: Makefile src: Makefile
$(MAKE) -C $@ VCSWITNESS='$(VCSWITNESS)' all $(MAKE) -C $@ BIN_DESTDIR='$(BIN_DESTDIR)' \
ELN_DESTDIR='$(ELN_DESTDIR)' all
blessmail: Makefile src blessmail: Makefile src
$(MAKE) -C lib-src maybe-blessmail $(MAKE) -C lib-src maybe-blessmail
@ -453,14 +575,14 @@ $(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/m4/*.m4
# ==================== Installation ==================== # ==================== Installation ====================
.PHONY: install install-arch-dep install-arch-indep install-etcdoc install-info .PHONY: install install-arch-dep install-arch-indep install-etcdoc install-info
.PHONY: install-man install-etc install-strip install-$(NTDIR) .PHONY: install-man install-etc install-strip install-$(NTDIR) install-eln
.PHONY: uninstall uninstall-$(NTDIR) .PHONY: uninstall uninstall-$(NTDIR)
## If we let lib-src do its own installation, that means we ## If we let lib-src do its own installation, that means we
## don't have to duplicate the list of utilities to install in ## don't have to duplicate the list of utilities to install in
## this Makefile as well. ## this Makefile as well.
install: all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail install: actual-all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail install-eln install-gsettings-schemas
@true @true
## Ensure that $subdir contains a subdirs.el file. ## Ensure that $subdir contains a subdirs.el file.
@ -486,6 +608,15 @@ install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
$(MAKE) -C lib-src install $(MAKE) -C lib-src install
ifeq (${ns_self_contained},no) ifeq (${ns_self_contained},no)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)" ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifeq (${HAVE_BE_APP},yes)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/Emacs "$(DESTDIR)${prefix}/apps/Emacs"
endif
ifeq (${DUMPING},pdumper)
ifeq (${HAVE_BE_APP},yes)
${INSTALL_DATA} src/Emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/Emacs.pdmp
endif
${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs-${EMACS_PDMP}
endif
-chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)" -chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifndef NO_BIN_LINK ifndef NO_BIN_LINK
rm -f "$(DESTDIR)${bindir}/$(EMACS)" rm -f "$(DESTDIR)${bindir}/$(EMACS)"
@ -511,12 +642,14 @@ install-nt:
## For them, it is empty. ## For them, it is empty.
INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@ INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@
## https://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html ## https://lists.gnu.org/r/emacs-devel/2007-10/msg01672.html
## Needs to be the user running install, so configure can't set it. ## Needs to be the user running install, so configure can't set it.
set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \
`id -un 2> /dev/null`; do \ `(id -u) 2> /dev/null`; do \
[ -n "$${installuser}" ] && break ; \ [ -n "$${installuser}" ] && break ; \
done done; \
installgroup=`(id -g) 2>/dev/null` && [ -n "$$installgroup" ] && \
installuser=$$installuser:$$installgroup
### Install the files that are machine-independent. ### Install the files that are machine-independent.
### Most of them come straight from the distribution; the exception is ### Most of them come straight from the distribution; the exception is
@ -550,12 +683,14 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \
## Note that we use tar instead of plain old cp -R/-r because the latter ## Note that we use tar instead of plain old cp -R/-r because the latter
## is apparently not portable (even in 2012!). ## is apparently not portable (even in 2012!).
## https://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00278.html ## https://lists.gnu.org/r/emacs-devel/2012-05/msg00278.html
## I have no idea which platforms Emacs supports where cp -R does not ## I have no idea which platforms Emacs supports where cp -R does not
## work correctly, and therefore no idea when tar can be replaced. ## work correctly, and therefore no idea when tar can be replaced.
## See also these comments from 2004 about cp -r working fine: ## See also these comments from 2004 about cp -r working fine:
## https://lists.gnu.org/archive/html/autoconf-patches/2004-11/msg00005.html ## https://lists.gnu.org/r/autoconf-patches/2004-11/msg00005.html
install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA}
umask 022 && $(MKDIR_P) "$(DESTDIR)$(includedir)"
$(INSTALL_DATA) src/emacs-module.h "$(DESTDIR)$(includedir)/emacs-module.h"
-set ${COPYDESTS} ; \ -set ${COPYDESTS} ; \
unset CDPATH; \ unset CDPATH; \
$(set_installuser); \ $(set_installuser); \
@ -627,17 +762,12 @@ install-etcdoc: src install-arch-indep
printf 'Copying %s to %s ...\n' "etc/$$docfile" \ printf 'Copying %s to %s ...\n' "etc/$$docfile" \
"$(DESTDIR)${etcdocdir}"; \ "$(DESTDIR)${etcdocdir}"; \
${INSTALL_DATA} etc/$${docfile} "$(DESTDIR)${etcdocdir}/$${docfile}"; \ ${INSTALL_DATA} etc/$${docfile} "$(DESTDIR)${etcdocdir}/$${docfile}"; \
$(set_installuser); \
chown $${installuser} "$(DESTDIR)${etcdocdir}/$${docfile}" || true ; \
else true; fi else true; fi
## FIXME: ## FIXME:
## If info/dir is missing, but we have install-info, we should let ## If info/dir is missing, but we have install-info, we should let
## that handle it. If info/dir is present and we do not have install-info, ## that handle it. If info/dir is present and we do not have install-info,
## we should check for missing entries and add them by hand. ## we should check for missing entries and add them by hand.
##
## FIXME:
## If HAVE_MAKEINFO = no and there are no info files, do not install info/dir.
install-info: info install-info: info
umask 022; ${MKDIR_P} "$(DESTDIR)${infodir}" umask 022; ${MKDIR_P} "$(DESTDIR)${infodir}"
-unset CDPATH; \ -unset CDPATH; \
@ -649,10 +779,9 @@ install-info: info
[ -f "$(DESTDIR)${infodir}/dir" ] || \ [ -f "$(DESTDIR)${infodir}/dir" ] || \
[ ! -f ${srcdir}/info/dir ] || \ [ ! -f ${srcdir}/info/dir ] || \
${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \ ${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \
info_misc=`$(MAKE) --no-print-directory -s -C doc/misc echo-info`; \ info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
cd ${srcdir}/info ; \ cd ${srcdir}/info ; \
for elt in ${INFO_NONMISC} $${info_misc}; do \ for elt in ${INFO_NONMISC} $${info_misc}; do \
test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \
for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
(cd "$${thisdir}"; \ (cd "$${thisdir}"; \
${INSTALL_DATA} ${srcdir}/info/$$f "$(DESTDIR)${infodir}/$$f"); \ ${INSTALL_DATA} ${srcdir}/info/$$f "$(DESTDIR)${infodir}/$$f"); \
@ -691,19 +820,44 @@ install-man:
## Note: emacs22 does not have all the resolutions. ## Note: emacs22 does not have all the resolutions.
EMACS_ICON=emacs EMACS_ICON=emacs
ifeq (${USE_STARTUP_NOTIFICATION},no)
USE_STARTUP_NOTIFICATION_SED_CMD=-e "/^StartupNotify=true$$/d"
endif
install-etc: install-etc:
umask 022; ${MKDIR_P} "$(DESTDIR)${desktopdir}" umask 022; ${MKDIR_P} "$(DESTDIR)${desktopdir}"
tmp=etc/emacs.tmpdesktop; rm -f $${tmp}; \ tmp=etc/emacs.tmpdesktop; rm -f $${tmp}; \
sed -e "/^Exec=emacs/ s/emacs/${EMACS_NAME}/" \ sed -e "/^Exec=emacs/ s/emacs/${EMACS_NAME}/" \
-e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \ -e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \
$(USE_STARTUP_NOTIFICATION_SED_CMD) \
${srcdir}/etc/emacs.desktop > $${tmp}; \ ${srcdir}/etc/emacs.desktop > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"; \ ${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"; \
rm -f $${tmp} rm -f $${tmp}
umask 022; ${MKDIR_P} "$(DESTDIR)${appdatadir}" tmp=etc/emacsclient.tmpdesktop; rm -f $${tmp}; \
tmp=etc/emacs.tmpappdata; rm -f $${tmp}; \ client_name=`echo emacsclient | sed '$(TRANSFORM)'`${EXEEXT}; \
sed -e "/^Exec=emacsclient/ s|emacsclient|${bindir}/$${client_name}|" \
-e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \
$(USE_STARTUP_NOTIFICATION_SED_CMD) \
${srcdir}/etc/emacsclient.desktop > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}.desktop"; \
rm -f $${tmp}
tmp=etc/emacs-mail.tmpdesktop; rm -f $${tmp}; \
sed -e "/^Exec=emacs/ s/emacs/${EMACS_NAME}/" \
-e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \
${srcdir}/etc/emacs-mail.desktop > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/${EMACS_NAME}-mail.desktop"; \
rm -f $${tmp}
tmp=etc/emacsclient-mail.tmpdesktop; rm -f $${tmp}; \
client_name=`echo emacsclient | sed '$(TRANSFORM)'`${EXEEXT}; \
sed -e "/^Exec=emacsclient/ s|emacsclient|${bindir}/$${client_name}|" \
-e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \
${srcdir}/etc/emacsclient-mail.desktop > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}-mail.desktop"; \
rm -f $${tmp}
umask 022; ${MKDIR_P} "$(DESTDIR)${metainfodir}"
tmp=etc/emacs.tmpmetainfo; rm -f $${tmp}; \
sed -e "s/emacs\.desktop/${EMACS_NAME}.desktop/" \ sed -e "s/emacs\.desktop/${EMACS_NAME}.desktop/" \
${srcdir}/etc/emacs.appdata.xml > $${tmp}; \ ${srcdir}/etc/emacs.metainfo.xml > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${appdatadir}/${EMACS_NAME}.appdata.xml"; \ ${INSTALL_DATA} $${tmp} "$(DESTDIR)${metainfodir}/${EMACS_NAME}.metainfo.xml"; \
rm -f $${tmp} rm -f $${tmp}
umask 022; $(MKDIR_P) "$(DESTDIR)$(systemdunitdir)" umask 022; $(MKDIR_P) "$(DESTDIR)$(systemdunitdir)"
tmp=etc/emacs.tmpservice; rm -f $${tmp}; \ tmp=etc/emacs.tmpservice; rm -f $${tmp}; \
@ -730,6 +884,14 @@ install-etc:
done ; \ done ; \
done done
### Install native compiled Lisp files.
install-eln: lisp
ifeq ($(HAVE_NATIVE_COMP),yes)
umask 022 ; \
find native-lisp -type d -exec $(MKDIR_P) "$(ELN_DESTDIR){}" \; ; \
find native-lisp -type f -exec ${INSTALL_ELN} "{}" "$(ELN_DESTDIR){}" \;
endif
### Build Emacs and install it, stripping binaries while installing them. ### Build Emacs and install it, stripping binaries while installing them.
install-strip: install-strip:
$(MAKE) INSTALL_STRIP=-s install $(MAKE) INSTALL_STRIP=-s install
@ -738,10 +900,11 @@ install-strip:
### create (but not the noninstalled files such as 'make all' would create). ### create (but not the noninstalled files such as 'make all' would create).
### ###
### Don't delete the lisp and etc directories if they're in the source tree. ### Don't delete the lisp and etc directories if they're in the source tree.
uninstall: uninstall-$(NTDIR) uninstall-doc uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas
rm -f "$(DESTDIR)$(includedir)/emacs-module.h"
$(MAKE) -C lib-src uninstall $(MAKE) -C lib-src uninstall
-unset CDPATH; \ -unset CDPATH; \
for dir in "$(DESTDIR)${lispdir}" "$(DESTDIR)${etcdir}" ; do \ for dir in "$(DESTDIR)${lispdir}" "$(DESTDIR)${etcdir}" "$(ELN_DESTDIR)" ; do \
if [ -d "$${dir}" ]; then \ if [ -d "$${dir}" ]; then \
case `cd "$${dir}" ; /bin/pwd` in \ case `cd "$${dir}" ; /bin/pwd` in \
"`cd ${srcdir} ; /bin/pwd`"* ) ;; \ "`cd ${srcdir} ; /bin/pwd`"* ) ;; \
@ -756,7 +919,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc
done done
-rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}" -rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}"
thisdir=`/bin/pwd`; \ thisdir=`/bin/pwd`; \
(info_misc=`$(MAKE) --no-print-directory -s -C doc/misc echo-info`; \ (info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
if cd "$(DESTDIR)${infodir}"; then \ if cd "$(DESTDIR)${infodir}"; then \
for elt in ${INFO_NONMISC} $${info_misc}; do \ for elt in ${INFO_NONMISC} $${info_misc}; do \
(cd "$${thisdir}"; \ (cd "$${thisdir}"; \
@ -776,10 +939,12 @@ uninstall: uninstall-$(NTDIR) uninstall-doc
(if cd "$(DESTDIR)${icondir}"; then \ (if cd "$(DESTDIR)${icondir}"; then \
rm -f hicolor/*x*/apps/"${EMACS_NAME}.png" \ rm -f hicolor/*x*/apps/"${EMACS_NAME}.png" \
"hicolor/scalable/apps/${EMACS_NAME}.svg" \ "hicolor/scalable/apps/${EMACS_NAME}.svg" \
hicolor/scalable/mimetypes/`echo emacs-document | sed '$(TRANSFORM)'`.svg; \ "hicolor/scalable/apps/${EMACS_NAME}.ico" \
"hicolor/scalable/mimetypes/${EMACS_NAME}-document.svg" \
"hicolor/scalable/mimetypes/${EMACS_NAME}-document23.svg"; \
fi) fi)
-rm -f "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop" -rm -f "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"
-rm -f "$(DESTDIR)${appdatadir}/${EMACS_NAME}.appdata.xml" -rm -f "$(DESTDIR)${metainfodir}/${EMACS_NAME}.metainfo.xml"
-rm -f "$(DESTDIR)$(systemdunitdir)/${EMACS_NAME}.service" -rm -f "$(DESTDIR)$(systemdunitdir)/${EMACS_NAME}.service"
ifneq (,$(use_gamedir)) ifneq (,$(use_gamedir))
for file in snake-scores tetris-scores; do \ for file in snake-scores tetris-scores; do \
@ -813,12 +978,11 @@ endef
### target for GCC does not delete 'libgcc.a', because recompiling it ### target for GCC does not delete 'libgcc.a', because recompiling it
### is rarely necessary and takes a lot of time. ### is rarely necessary and takes a lot of time.
mostlyclean_dirs = src oldXMenu lwlib lib lib-src nt doc/emacs doc/misc \ mostlyclean_dirs = src oldXMenu lwlib lib lib-src nt doc/emacs doc/misc \
doc/lispref doc/lispintro doc/lispref doc/lispintro test
$(foreach dir,$(mostlyclean_dirs),$(eval $(call submake_template,$(dir),mostlyclean))) $(foreach dir,$(mostlyclean_dirs),$(eval $(call submake_template,$(dir),mostlyclean)))
mostlyclean: $(mostlyclean_dirs:=_mostlyclean) mostlyclean: $(mostlyclean_dirs:=_mostlyclean)
[ ! -d test ] || $(MAKE) -C test $@
### 'clean' ### 'clean'
### Delete all files from the current directory that are normally ### Delete all files from the current directory that are normally
@ -828,20 +992,19 @@ mostlyclean: $(mostlyclean_dirs:=_mostlyclean)
### with them. ### with them.
### ###
### Delete '.dvi' files here if they are not part of the distribution. ### Delete '.dvi' files here if they are not part of the distribution.
clean_dirs = $(mostlyclean_dirs) nextstep clean_dirs = $(mostlyclean_dirs) nextstep admin/charsets admin/unidata
$(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean))) $(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
clean: $(clean_dirs:=_clean) clean: $(clean_dirs:=_clean) clean-gsettings-schemas
$(MAKE) -C admin/charsets $@ -rm -f ./*.tmp etc/*.tmp*
[ ! -d test ] || $(MAKE) -C test $@
-rm -f *.tmp etc/*.tmp*
-rm -rf info-dir.* -rm -rf info-dir.*
-rm -rf native-lisp
### 'bootclean' ### 'bootclean'
### Delete all files that need to be remade for a clean bootstrap. ### Delete all files that need to be remade for a clean bootstrap.
top_bootclean=\ top_bootclean=\
rm -f config.cache config.log ${srcdir}/doc/man/emacs.1 rm -f config.log ${srcdir}/doc/man/emacs.1
### 'distclean' ### 'distclean'
### Delete all files from the current directory that are created by ### Delete all files from the current directory that are created by
@ -851,20 +1014,14 @@ top_bootclean=\
### distribution. ### distribution.
top_distclean=\ top_distclean=\
${top_bootclean}; \ ${top_bootclean}; \
rm -f config.status config.log~ \ rm -f config.cache config.status config.log~ \
Makefile lib/gnulib.mk ${SUBDIR_MAKEFILES} Makefile makefile lib/gnulib.mk ${SUBDIR_MAKEFILES}
distclean_dirs = $(clean_dirs) leim lisp distclean_dirs = $(clean_dirs) leim lisp admin/grammars
$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean))) $(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
maybeclean_dirs = test admin/grammars admin/unidata admin/charsets distclean: $(distclean_dirs:=_distclean) clean-gsettings-schemas
distclean: $(distclean_dirs:=_distclean)
for dir in $(filter-out test,$(maybeclean_dirs)); do \
$(MAKE) -C $$dir $@ || exit; \
done
[ ! -d test ] || $(MAKE) -C test $@
${top_distclean} ${top_distclean}
### 'bootstrap-clean' ### 'bootstrap-clean'
@ -873,13 +1030,13 @@ distclean: $(distclean_dirs:=_distclean)
$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),bootstrap-clean))) $(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),bootstrap-clean)))
bootstrap-clean: $(distclean_dirs:=_bootstrap-clean) bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
for dir in $(filter-out test,$(maybeclean_dirs)); do \
$(MAKE) -C $$dir $@ || exit; \
done
[ ! -d test ] || $(MAKE) -C test $@
[ ! -f config.log ] || mv -f config.log config.log~ [ ! -f config.log ] || mv -f config.log config.log~
rm -rf ${srcdir}/info rm -rf ${srcdir}/info
rm -f ${srcdir}/etc/refcards/emacsver.tex rm -f ${srcdir}/etc/refcards/emacsver.tex
rm -rf native-lisp/ lisp/leim/ja-dic/
ifndef FAST
rm -f config.cache
endif
${top_bootclean} ${top_bootclean}
### 'maintainer-clean' ### 'maintainer-clean'
@ -895,52 +1052,47 @@ bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
### begin to build the program. ### begin to build the program.
top_maintainer_clean=\ top_maintainer_clean=\
${top_distclean}; \ ${top_distclean}; \
rm -fr autom4te.cache rm -fr ${srcdir}/autom4te.cache
maintainer_clean_dirs = src leim lisp $(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),maintainer-clean)))
$(foreach dir,$(maintainer_clean_dirs),$(eval $(call submake_template,$(dir),maintainer-clean))) maintainer-clean: $(distclean_dirs:=_maintainer-clean)
rm -rf ${srcdir}/info
maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean) rm -f ${srcdir}/etc/refcards/emacsver.tex
for dir in $(filter-out test,$(maybeclean_dirs)); do \
$(MAKE) -C $$dir $@ || exit; \
done
[ ! -d test ] || $(MAKE) -C test $@
${top_maintainer_clean} ${top_maintainer_clean}
### This doesn't actually appear in the coding standards, but Karl ### This doesn't actually appear in the coding standards, but Karl
### says GCC supports it, and that's where the configuration part of ### says GCC supports it, and that's where the configuration part of
### the coding standards seem to come from. It's like distclean, but ### the coding standards seem to come from. It's like distclean, but
### it deletes backup and autosave files too. ### it deletes backup and autosave files too.
### Note that we abuse this in some subdirectories (eg leim), extraclean: maintainer-clean
### to delete some generated files that are slow to rebuild. -rm -f config-tmp-* ${srcdir}/aclocal.m4 ${srcdir}/configure \
extraclean_dirs = ${NTDIR} lib-src src leim \ ${srcdir}/src/config.in
admin/charsets admin/grammars admin/unidata -[ "${srcdir}" = "." ] || \
find ${srcdir} '(' -name '*~' -o -name '#*' ')' ${FIND_DELETE}
$(foreach dir,$(extraclean_dirs),$(eval $(call submake_template,$(dir),extraclean))) -find . '(' -name '*~' -o -name '#*' ')' ${FIND_DELETE}
extraclean: $(extraclean_dirs:=_extraclean)
${top_maintainer_clean}
-rm -f config-tmp-*
-rm -f *~ \#*
# The src subdir knows how to do the right thing # The src subdir knows how to do the right thing
# even when the build directory and source dir are different. # even when the build directory and source dir are different.
.PHONY: TAGS tags .PHONY: TAGS tags
TAGS tags: lib lib-src src # FIXME: We used to include `src` in the dependencies, not sure why.
# I removed it because it causes `make tags` to build Emacs.
TAGS tags: lib lib-src # src
$(MAKE) -C src tags $(MAKE) -C src tags
$(MAKE) -C doc/emacs tags
$(MAKE) -C doc/lispintro tags
$(MAKE) -C doc/lispref tags
$(MAKE) -C doc/misc tags
.PHONY: have-tests CHECK_TARGETS = check check-maybe check-expensive check-all
have-tests: .PHONY: $(CHECK_TARGETS)
@if test ! -d test; then \ $(CHECK_TARGETS): all
echo "You do not seem to have the test/ directory."; \
echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
exit 1; \
fi
check check-maybe check-expensive: have-tests all
$(MAKE) -C test $@ $(MAKE) -C test $@
test/%:
$(MAKE) -C test $*
dist: dist:
cd ${srcdir}; ./make-dist cd ${srcdir}; ./make-dist
@ -955,24 +1107,34 @@ $(DOCS):
$(MAKE) -C doc/$(subst -, ,$@) $(MAKE) -C doc/$(subst -, ,$@)
.PHONY: $(DOCS) docs pdf ps .PHONY: $(DOCS) docs pdf ps
.PHONY: info dvi dist check check-maybe check-expensive html info-real info-dir check-info .PHONY: info dvi dist html info-dir check-info
## TODO add etc/refcards. ## TODO add etc/refcards.
docs: $(DOCS) docs: $(DOCS)
dvi: $(DVIS) dvi: $(DVIS)
html: $(HTMLS) html: $(HTMLS)
info-real: $(INFOS) info: $(INFOS) info-dir
pdf: $(PDFS) pdf: $(PDFS)
ps: $(PSS) ps: $(PSS)
# This dependency is due to those doc/misc/ manuals that use .org sources.
# Depending on src is sufficient, but ends up being slow, since the
# uncompiled lisp/org/*.el files are used to build the .texi files
# (which can be slow even with the elc files).
misc-info: lisp
# Using src rather than lisp because one is less likely to get unnecessary
# rebuilds of stuff that is not strictly necessary for generating manuals.
misc-dvi misc-html misc-pdf misc-ps: src
info-dir: ${srcdir}/info/dir info-dir: ${srcdir}/info/dir
## Hopefully doc/misc/*.texi is not too long for some systems? texi_misc = $(shell MAKEFLAGS= ${MAKE} --no-print-directory -s -C doc/misc echo-sources)
srcdir_doc_info_dir_inputs = \ srcdir_doc_info_dir_inputs = \
${srcdir}/doc/emacs/emacs.texi \ ${srcdir}/doc/emacs/emacs.texi \
${srcdir}/doc/lispintro/emacs-lisp-intro.texi \ ${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
${srcdir}/doc/lispref/elisp.texi \ ${srcdir}/doc/lispref/elisp.texi \
$(sort $(wildcard ${srcdir}/doc/misc/*.texi)) $(addprefix ${srcdir}/doc/misc/,${texi_misc})
info_dir_inputs = \ info_dir_inputs = \
../build-aux/dir_top \ ../build-aux/dir_top \
$(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs}) $(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs})
@ -985,11 +1147,11 @@ info_dir_deps = \
## installation location by the install-info rule, but we also ## installation location by the install-info rule, but we also
## need one in the source directory for people running uninstalled. ## need one in the source directory for people running uninstalled.
## FIXME it would be faster to use the install-info program if we have it, ## FIXME it would be faster to use the install-info program if we have it,
## but then we would need to depend on info-real, which would ## but then we would need to depend on ${INFOS}, which would
## slow down parallelization. ## slow down parallelization.
${srcdir}/info/dir: ${info_dir_deps} ${srcdir}/info/dir: ${info_dir_deps}
$(AM_V_at)${MKDIR_P} ${srcdir}/info $(AM_V_GEN)${MKDIR_P} ${srcdir}/info
$(AM_V_GEN)(cd ${srcdir}/doc && \ $(AM_V_at)(cd ${srcdir}/doc && \
AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \ AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
) >$@.tmp && mv $@.tmp $@ ) >$@.tmp && mv $@.tmp $@
@ -1040,23 +1202,6 @@ uninstall-html: $(UNINSTALL_HTML)
uninstall-pdf: $(UNINSTALL_PDF) uninstall-pdf: $(UNINSTALL_PDF)
uninstall-ps: $(UNINSTALL_PS) uninstall-ps: $(UNINSTALL_PS)
# Note that man/Makefile knows how to put the info files in $(srcdir),
# so we can do ok running make in the build dir.
# This used to have a clause that exited with an error if MAKEINFO = no.
# But it is inappropriate to do so without checking if makeinfo is
# actually needed - it is not if the info files are up-to-date. (Bug#3982)
# Only the doc/*/Makefiles can decide that, so we let those rules run
# and give a standard error if makeinfo is needed but missing.
# While it would be nice to give a more detailed error message, that
# would require changing every rule in doc/ that builds an info file,
# and it's not worth it. This case is only relevant if you download a
# release, then change the .texi files.
info:
ifneq ($(HAVE_MAKEINFO),no)
$(MAKE) info-real info-dir
endif
## build-aux/make-info-dir expects only certain dircategories. ## build-aux/make-info-dir expects only certain dircategories.
check-info: info check-info: info
cd info ; \ cd info ; \
@ -1085,17 +1230,30 @@ check-info: info
### This first cleans the lisp subdirectory, removing all compiled ### This first cleans the lisp subdirectory, removing all compiled
### Lisp files. Then re-run make to build all the files anew. ### Lisp files. Then re-run make to build all the files anew.
.PHONY: bootstrap .PHONY: bootstrap actual-bootstrap
# Bootstrapping does the following: bootstrap:
$(MAKE) actual-bootstrap || $(MAKE) advice-on-failure make-target=bootstrap exit-status=$$?
$(MAKE) sanity-check make-target=bootstrap
# Without a 'configure' variable, bootstrapping does the following:
# * Remove files to start from a bootstrap-clean slate. # * Remove files to start from a bootstrap-clean slate.
# * Run autogen.sh. # * Run autogen.sh.
# * Rebuild Makefile, to update the build procedure itself. # * Rebuild Makefile, to update the build procedure itself.
# * Do the actual build. # * Do the actual build.
bootstrap: bootstrap-clean # With a 'configure' variable, bootstrapping does the following:
# * Remove files to start from an extraclean slate.
# * Do the actual build, during which the 'configure' variable is
# used (see the Makefile goal in GNUmakefile).
actual-bootstrap:
ifndef configure
$(MAKE) bootstrap-clean
cd $(srcdir) && ./autogen.sh autoconf cd $(srcdir) && ./autogen.sh autoconf
$(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile $(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
$(MAKE) all else
$(MAKE) extraclean
endif
$(MAKE) actual-all
.PHONY: ChangeLog change-history change-history-commit change-history-nocommit .PHONY: ChangeLog change-history change-history-commit change-history-nocommit
.PHONY: preferred-branch-is-current unchanged-history-files .PHONY: preferred-branch-is-current unchanged-history-files
@ -1115,7 +1273,7 @@ ChangeLog:
./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX) ./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
# Check that we are in a good state for changing history. # Check that we are in a good state for changing history.
PREFERRED_BRANCH = master PREFERRED_BRANCH = emacs-28
preferred-branch-is-current: preferred-branch-is-current:
git branch | grep -q '^\* $(PREFERRED_BRANCH)$$' git branch | grep -q '^\* $(PREFERRED_BRANCH)$$'
unchanged-history-files: unchanged-history-files:
@ -1155,3 +1313,42 @@ check-declare:
exit 1; \ exit 1; \
fi fi
$(MAKE) -C lisp $@ $(MAKE) -C lisp $@
$(MAKE) -C test $@
.PHONY: gitmerge
GITMERGE_EMACS = ./src/emacs${EXEEXT}
GITMERGE_NMIN = 10
gitmerge:
${GITMERGE_EMACS} -batch --no-site-file --no-site-lisp \
-l ${srcdir}/admin/gitmerge.el \
--eval '(setq gitmerge-minimum-missing ${GITMERGE_NMIN})' -f gitmerge
install-gsettings-schemas:
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
$(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"
$(INSTALL_DATA) $(srcdir)/$(gsettings_SCHEMAS) "$(DESTDIR)$(gsettingsschemadir)"
if [ -z "$(DESTDIR)" ]; then $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); fi
endif
uninstall-gsettings-schemas:
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
for x in $(gsettings_SCHEMAS); do \
xx=`echo $$x | sed -e 's|.*/||'`; \
rm -f "$(DESTDIR)$(gsettingsschemadir)/$${xx}"; \
done
if [ -z "$(DESTDIR)" ]; then $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); fi
endif
clean-gsettings-schemas:
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
rm -f $(gsettings_SCHEMAS:.xml=.valid)
endif
$(gsettings_SCHEMAS:.xml=.valid): $(srcdir)/$(gsettings_SCHEMAS)
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
$(GLIB_COMPILE_SCHEMAS) --strict --dry-run --schema-file=$(srcdir)/$(gsettings_SCHEMAS)
$(MKDIR_P) $(@D)
touch $@
endif

10
README
View file

@ -1,8 +1,8 @@
Copyright (C) 2001-2017 Free Software Foundation, Inc. Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
This directory tree holds version 27.0.50 of GNU Emacs, the extensible, This directory tree holds version 29.0.50 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor. customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU The file INSTALL in this directory says how to build and install GNU
@ -72,6 +72,8 @@ There are several subdirectories:
'lib' holds source code for libraries used by Emacs and its utilities 'lib' holds source code for libraries used by Emacs and its utilities
'lib-src' holds the source code for some utility programs for use by or 'lib-src' holds the source code for some utility programs for use by or
with Emacs, like movemail and etags. with Emacs, like movemail and etags.
'lwlib' holds the sources of the Lucid Widget Library used on X.
'oldXMenu' source files from X11R2 XMenu library, used in non-toolkit builds.
'etc' holds miscellaneous architecture-independent data files Emacs 'etc' holds miscellaneous architecture-independent data files Emacs
uses, like the tutorial text and tool bar images. uses, like the tutorial text and tool bar images.
The contents of the 'lisp', 'leim', 'info', and 'doc' The contents of the 'lisp', 'leim', 'info', and 'doc'
@ -89,6 +91,10 @@ There are several subdirectories:
Nextstep port of Emacs, for GNUstep and macOS Cocoa. Nextstep port of Emacs, for GNUstep and macOS Cocoa.
'nt' holds code and documentation for building Emacs on MS-Windows. 'nt' holds code and documentation for building Emacs on MS-Windows.
'test' holds tests for various aspects of Emacs's functionality. 'test' holds tests for various aspects of Emacs's functionality.
'modules' holds the modhelp.py helper script.
'admin' holds files used by Emacs developers, and Unicode data files.
'build-aux' holds auxiliary files used during the build.
'm4' holds Autoconf macros used for generating the configure script.
Building Emacs on non-Posix platforms requires tools that aren't part Building Emacs on non-Posix platforms requires tools that aren't part
of the standard distribution of the OS. The platform-specific README of the standard distribution of the OS. The platform-specific README

View file

@ -19,12 +19,12 @@ __DJGPP_MINOR__ Minor version number of the DJGPP library; used only in msdos.c
DOS_NT Compiling for either the MS-DOS or native MS-Windows port. DOS_NT Compiling for either the MS-DOS or native MS-Windows port.
WINDOWSNT Compiling the native MS-Windows (W32) port. WINDOWSNT Compiling the native MS-Windows (W32) port.
__MINGW32__ Compiling the W32 port with the MinGW or MinGW-w64 ports of GCC. __MINGW32__ Compiling the W32 port with the MinGW or MinGW-w64 ports of GCC.
_MSC_VER Compiling the W32 port with the Microsoft C compiler.
MINGW_W64 Compiling the W32 port with the MinGW-w64 port of GCC. MINGW_W64 Compiling the W32 port with the MinGW-w64 port of GCC.
DARWIN_OS Compiling on macOS or pure Darwin (and using s/darwin.h). DARWIN_OS Compiling on macOS or pure Darwin (and using s/darwin.h).
SOLARIS2 SOLARIS2
USG USG
USG5_4 USG5_4
HAIKU Compiling on Haiku.
** Distinguishing GUIs ** ** Distinguishing GUIs **
@ -33,16 +33,38 @@ HAVE_NS Use the NeXT/OpenStep/Cocoa UI under macOS or GNUstep.
NS_IMPL_GNUSTEP Compile support for GNUstep implementation of NS GUI API. NS_IMPL_GNUSTEP Compile support for GNUstep implementation of NS GUI API.
NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API. NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API.
HAVE_X11 Compile support for the X11 GUI. HAVE_X11 Compile support for the X11 GUI.
HAVE_PGTK Compile support for using GTK itself without directly using X Windows APIs.
HAVE_HAIKU Compile support for the Haiku window system.
HAVE_X_WINDOWS Compile support for X Window system HAVE_X_WINDOWS Compile support for X Window system
(It looks like, nowadays, if HAVE_X11 is set, HAVE_X_WINDOWS must (It looks like, nowadays, if HAVE_X11 is set, HAVE_X_WINDOWS must
be, and vice versa. At least, this is true for configure, and be, and vice versa. At least, this is true for configure, and
msdos; not sure about nt.) msdos; not sure about nt.)
HAVE_X11R6
HAVE_X11R6_XIM ** X Windows features **
HAVE_X11XTR6 HAVE_X11R6 Whether or not the system has X11R6. (Always defined.)
HAVE_X11R6_XIM Whether or not the system supports XIM features introduced in R6.
HAVE_X11XTR6 Whether or not the Xt is from X11R6 or newer.
USE_LUCID Use the Lucid toolkit for menus&scrollbars. Requires HAVE_X11. USE_LUCID Use the Lucid toolkit for menus&scrollbars. Requires HAVE_X11.
USE_MOTIF Use the Motif toolkit for menus&scrollbars. Requires HAVE_X11. USE_MOTIF Use the Motif toolkit for menus&scrollbars. Requires HAVE_X11.
USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11. USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11 or HAVE_PGTK.
HAVE_GTK3 Use GTK version 3 or later. Requires HAVE_X11.
HAVE_XCB_SHAPE Whether or not XCB supports the Nonrectangular Window Shape extension.
HAVE_XCOMPOSITE Whether or not the XCOMPOSITE extension library is present.
HAVE_XDBE Whether or not to use the Xdbe extension for double buffering.
HAVE_XFIXES Whether or not the Xfixes extension library is present.
HAVE_XINERAMA Whether or not the Xinerama extension library is present.
HAVE_XINPUT2 Whether or not to use version 2 of the X Input Extension for input.
HAVE_XINPUT2_1 Whether or not version 2.1 of the X Input Extension is supported.
HAVE_XINPUT2_2 Whether or not version 2.2 of the X Input Extension is supported.
HAVE_XINPUT2_3 Whether or not version 2.3 of the X Input Extension is supported.
HAVE_XINPUT2_4 Whether or not version 2.4 of the X Input Extension is supported.
HAVE_XKB Whether or not the XKB extension library is present.
HAVE_XRANDR Whether or not the RandR extension library is present.
HAVE_XSHAPE Whether or not the Nonrectangular Window Shape extension library is present.
HAVE_XSYNC Whether or not the X Synchronization Extension library is present.
USE_XCB Whether or not the XCB library is used to optimize some X requests.
** Frame types ** ** Frame types **
@ -82,7 +104,6 @@ anymore, so they can be removed.
AMPERSAND_FULL_NAME AMPERSAND_FULL_NAME
BROKEN_DATAGRAM_SOCKETS BROKEN_DATAGRAM_SOCKETS
BROKEN_FIONREAD
BROKEN_GET_CURRENT_DIR_NAME BROKEN_GET_CURRENT_DIR_NAME
BROKEN_PTY_READ_AFTER_EAGAIN BROKEN_PTY_READ_AFTER_EAGAIN
DEFAULT_SOUND_DEVICE DEFAULT_SOUND_DEVICE
@ -95,18 +116,12 @@ EMACS_CONFIG_OPTIONS
EMACS_INT EMACS_INT
EMACS_UINT EMACS_UINT
GC_MARK_SECONDARY_STACK GC_MARK_SECONDARY_STACK
GC_MARK_STACK
GC_SETJMP_WORKS GC_SETJMP_WORKS
GNU_MALLOC GNU_MALLOC
HAVE_AIX_SMT_EXP
HAVE_ALARM
HAVE_ALLOCA HAVE_ALLOCA
HAVE_ALLOCA_H HAVE_ALLOCA_H
HAVE_ALSA HAVE_ALSA
HAVE_ATTRIBUTE_ALIGNED
HAVE_BDFFONT HAVE_BDFFONT
HAVE_BOXES
HAVE_C99_STRTOLD
HAVE_CFMAKERAW HAVE_CFMAKERAW
HAVE_CFSETSPEED HAVE_CFSETSPEED
HAVE_CLOCK_GETTIME HAVE_CLOCK_GETTIME
@ -120,19 +135,14 @@ HAVE_DBUS_VALIDATE_INTERFACE
HAVE_DBUS_VALIDATE_MEMBER HAVE_DBUS_VALIDATE_MEMBER
HAVE_DBUS_VALIDATE_PATH HAVE_DBUS_VALIDATE_PATH
HAVE_DBUS_WATCH_GET_UNIX_FD HAVE_DBUS_WATCH_GET_UNIX_FD
HAVE_DECL_GETENV
HAVE_DECL_LOCALTIME_R HAVE_DECL_LOCALTIME_R
HAVE_DECL_STRMODE HAVE_DECL_STRMODE
HAVE_DECL_STRTOIMAX HAVE_DECL_STRTOIMAX
HAVE_DECL_STRTOLL HAVE_DECL_STRTOLL
HAVE_DECL_STRTOULL HAVE_DECL_STRTOULL
HAVE_DECL_STRTOUMAX HAVE_DECL_STRTOUMAX
HAVE_DECL_SYS_SIGLIST
HAVE_DECL_TZNAME HAVE_DECL_TZNAME
HAVE_DECL___SYS_SIGLIST
HAVE_DIALOGS HAVE_DIALOGS
HAVE_DIFFTIME
HAVE_DUP2
HAVE_ENDGRENT HAVE_ENDGRENT
HAVE_ENDPWENT HAVE_ENDPWENT
HAVE_ENVIRON_DECL HAVE_ENVIRON_DECL
@ -146,11 +156,9 @@ HAVE_FUTIMES
HAVE_FUTIMESAT HAVE_FUTIMESAT
HAVE_GAI_STRERROR HAVE_GAI_STRERROR
HAVE_GCONF HAVE_GCONF
HAVE_GETDELIM
HAVE_GETGRENT HAVE_GETGRENT
HAVE_GETHOSTNAME HAVE_GETHOSTNAME
HAVE_GETIFADDRS HAVE_GETIFADDRS
HAVE_GETLINE
HAVE_GETLOADAVG HAVE_GETLOADAVG
HAVE_GETOPT_H HAVE_GETOPT_H
HAVE_GETOPT_LONG_ONLY HAVE_GETOPT_LONG_ONLY
@ -169,21 +177,10 @@ HAVE_GPM
HAVE_GRANTPT HAVE_GRANTPT
HAVE_GSETTINGS HAVE_GSETTINGS
HAVE_GTK3 HAVE_GTK3
HAVE_GTK_ADJUSTMENT_GET_PAGE_SIZE
HAVE_GTK_DIALOG_GET_ACTION_AREA
HAVE_GTK_FILE_SELECTION_NEW HAVE_GTK_FILE_SELECTION_NEW
HAVE_GTK_MAIN
HAVE_GTK_MULTIDISPLAY
HAVE_GTK_ORIENTABLE_SET_ORIENTATION
HAVE_GTK_WIDGET_GET_MAPPED
HAVE_GTK_WIDGET_GET_SENSITIVE
HAVE_GTK_WIDGET_GET_WINDOW
HAVE_GTK_WIDGET_SET_HAS_WINDOW
HAVE_GTK_WINDOW_SET_HAS_RESIZE_GRIP HAVE_GTK_WINDOW_SET_HAS_RESIZE_GRIP
HAVE_G_TYPE_INIT
HAVE_IFADDRS_H HAVE_IFADDRS_H
HAVE_IMAGEMAGICK HAVE_IMAGEMAGICK
HAVE_INET_SOCKETS
HAVE_INTTYPES_H HAVE_INTTYPES_H
HAVE_JPEG HAVE_JPEG
HAVE_KERBEROSIV_KRB_H HAVE_KERBEROSIV_KRB_H
@ -199,13 +196,10 @@ HAVE_LIBLOCKFILE
HAVE_LIBMAIL HAVE_LIBMAIL
HAVE_LIBOTF HAVE_LIBOTF
HAVE_LIBPERFSTAT HAVE_LIBPERFSTAT
HAVE_LIBPNG_PNG_H
HAVE_LIBSELINUX HAVE_LIBSELINUX
HAVE_LIBXML2 HAVE_LIBXML2
HAVE_LIBXMU
HAVE_LOCALTIME_R HAVE_LOCALTIME_R
HAVE_LOCAL_SOCKETS HAVE_LOCAL_SOCKETS
HAVE_LONG_LONG_INT
HAVE_LRAND48 HAVE_LRAND48
HAVE_LSTAT HAVE_LSTAT
HAVE_LUTIMES HAVE_LUTIMES
@ -216,24 +210,18 @@ HAVE_MAGICKEXPORTIMAGEPIXELS
HAVE_MAGICKMERGEIMAGELAYERS HAVE_MAGICKMERGEIMAGELAYERS
HAVE_MAILLOCK_H HAVE_MAILLOCK_H
HAVE_MALLOC_MALLOC_H HAVE_MALLOC_MALLOC_H
HAVE_MATHERR
HAVE_MBSTATE_T HAVE_MBSTATE_T
HAVE_MEMCMP
HAVE_MEMMOVE
HAVE_MEMORY_H HAVE_MEMORY_H
HAVE_MEMSET HAVE_MEMSET
HAVE_MENUS
HAVE_MKSTEMP HAVE_MKSTEMP
HAVE_MMAP HAVE_MMAP
HAVE_MULTILINGUAL_MENU HAVE_MULTILINGUAL_MENU
HAVE_NANOTIME
HAVE_NET_IF_DL_H HAVE_NET_IF_DL_H
HAVE_NET_IF_H HAVE_NET_IF_H
HAVE_NLIST_H HAVE_NLIST_H
HAVE_OTF_GET_VARIATION_GLYPHS HAVE_OTF_GET_VARIATION_GLYPHS
HAVE_PERSONALITY_ADDR_NO_RANDOMIZE HAVE_PERSONALITY_ADDR_NO_RANDOMIZE
HAVE_PNG HAVE_PNG
HAVE_PNG_H
HAVE_POSIX_MEMALIGN HAVE_POSIX_MEMALIGN
HAVE_PROCFS HAVE_PROCFS
HAVE_PSELECT HAVE_PSELECT
@ -270,15 +258,12 @@ HAVE_SOUNDCARD_H
HAVE_STDINT_H HAVE_STDINT_H
HAVE_STDIO_EXT_H HAVE_STDIO_EXT_H
HAVE_STDLIB_H HAVE_STDLIB_H
HAVE_STLIB_H_1
HAVE_STRINGS_H HAVE_STRINGS_H
HAVE_STRING_H HAVE_STRING_H
HAVE_STRNCASECMP
HAVE_STRSIGNAL HAVE_STRSIGNAL
HAVE_STRTOIMAX HAVE_STRTOIMAX
HAVE_STRTOLL HAVE_STRTOLL
HAVE_STRTOULL HAVE_STRTOULL
HAVE_STRTOUMAX
HAVE_STRUCT_ERA_ENTRY HAVE_STRUCT_ERA_ENTRY
HAVE_STRUCT_IFREQ_IFR_ADDR HAVE_STRUCT_IFREQ_IFR_ADDR
HAVE_STRUCT_IFREQ_IFR_ADDR_SA_LEN HAVE_STRUCT_IFREQ_IFR_ADDR_SA_LEN
@ -294,9 +279,7 @@ HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC
HAVE_STRUCT_TIMEZONE
HAVE_STRUCT_TM_TM_ZONE HAVE_STRUCT_TM_TM_ZONE
HAVE_STRUCT_UTIMBUF
HAVE_ST_DM_MODE HAVE_ST_DM_MODE
HAVE_SYMLINK HAVE_SYMLINK
HAVE_SYNC HAVE_SYNC
@ -310,30 +293,25 @@ HAVE_SYS_SOCKET_H
HAVE_SYS_SOUNDCARD_H HAVE_SYS_SOUNDCARD_H
HAVE_SYS_STAT_H HAVE_SYS_STAT_H
HAVE_SYS_SYSTEMINFO_H HAVE_SYS_SYSTEMINFO_H
HAVE_SYS_TIMEB_H
HAVE_SYS_TIME_H HAVE_SYS_TIME_H
HAVE_SYS_TYPES_H HAVE_SYS_TYPES_H
HAVE_SYS_UN_H HAVE_SYS_UN_H
HAVE_SYS_UTSNAME_H HAVE_SYS_UTSNAME_H
HAVE_SYS_VLIMIT_H HAVE_SYS_VLIMIT_H
HAVE_SYS_WAIT_H HAVE_SYS_WAIT_H
HAVE_TCATTR
HAVE_TERM_H HAVE_TERM_H
HAVE_TIFF HAVE_TIFF
HAVE_TIMEVAL
HAVE_TM_GMTOFF HAVE_TM_GMTOFF
HAVE_TM_ZONE HAVE_TM_ZONE
HAVE_TOUCHLOCK HAVE_TOUCHLOCK
HAVE_TZNAME HAVE_TZNAME
HAVE_TZSET
HAVE_UNSIGNED_LONG_LONG_INT
HAVE_UTIL_H HAVE_UTIL_H
HAVE_UTIMENSAT HAVE_UTIMENSAT
HAVE_UTIMES
HAVE_UTIME_H
HAVE_UTMP_H HAVE_UTMP_H
HAVE_VFORK HAVE_VFORK
HAVE_VFORK_H HAVE_VFORK_H
HAVE_WEBP
HAVE_SQLITE3
HAVE_WCHAR_H HAVE_WCHAR_H
HAVE_WCHAR_T HAVE_WCHAR_T
HAVE_WINDOW_SYSTEM HAVE_WINDOW_SYSTEM
@ -350,14 +328,10 @@ HAVE_XRMSETDATABASE
HAVE_XSCREENNUMBEROFSCREEN HAVE_XSCREENNUMBEROFSCREEN
HAVE_XSCREENRESOURCESTRING HAVE_XSCREENRESOURCESTRING
HAVE_X_I18N HAVE_X_I18N
HAVE_X_MENU
HAVE_X_SM HAVE_X_SM
HAVE_X_WINDOWS HAVE_X_WINDOWS
HAVE__BOOL
HAVE__FTIME
HAVE___BUILTIN_UNWIND_INIT HAVE___BUILTIN_UNWIND_INIT
HAVE___EXECUTABLE_START HAVE___EXECUTABLE_START
HAVE___FPENDING
INTERNAL_TERMINAL INTERNAL_TERMINAL
IS_ANY_SEP IS_ANY_SEP
IS_DIRECTORY_SEP IS_DIRECTORY_SEP
@ -367,7 +341,6 @@ MAIL_USE_POP
MAIL_USE_SYSTEM_LOCK MAIL_USE_SYSTEM_LOCK
MAXPATHLEN MAXPATHLEN
NLIST_STRUCT NLIST_STRUCT
NO_EDITRES
NSIG NSIG
NSIG_MINIMUM NSIG_MINIMUM
NULL_DEVICE NULL_DEVICE
@ -386,7 +359,6 @@ SYSTEM_MALLOC
TAB3 TAB3
TABDLY TABDLY
TERM TERM
TIME_WITH_SYS_TIME
TIOCSIGSEND TIOCSIGSEND
TM_IN_SYS_TIME TM_IN_SYS_TIME
UNIX98_PTYS UNIX98_PTYS

View file

@ -181,7 +181,7 @@
* grammars/c.by (opt-brackets-after-symbol): New. * grammars/c.by (opt-brackets-after-symbol): New.
(multi-stage-dereference): Use it. Add rules for explicit (multi-stage-dereference): Use it. Add rules for explicit
matching the last dereference. We cannot just juse matching the last dereference. We cannot just use
'namespace-symbol' as a single rule, since this would match too 'namespace-symbol' as a single rule, since this would match too
greedy and mess with parsing default values of variables. greedy and mess with parsing default values of variables.
@ -1258,7 +1258,7 @@
2012-06-13 Andreas Schwab <schwab@linux-m68k.org> 2012-06-13 Andreas Schwab <schwab@linux-m68k.org>
* make-emacs: Rename --union-type to --check-lisp-type. * make-emacs: Rename --union-type to --check-lisp-type.
Define CHECK_LISP_OBJECT_TYPE insted of USE_LISP_UNION_TYPE. Define CHECK_LISP_OBJECT_TYPE instead of USE_LISP_UNION_TYPE.
* CPP-DEFINES (DEBUG_LISP_OBJECT_TYPE): Rename from * CPP-DEFINES (DEBUG_LISP_OBJECT_TYPE): Rename from
USE_LISP_UNION_TYPE. USE_LISP_UNION_TYPE.
@ -1547,7 +1547,7 @@
* make-tarball.txt: Suggest 'autoreconf -I m4 --force' * make-tarball.txt: Suggest 'autoreconf -I m4 --force'
rather than doing rm and autoconf by hand. See rather than doing rm and autoconf by hand. See
<https://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00673.html>. <https://lists.gnu.org/r/emacs-devel/2011-01/msg00673.html>.
2011-01-17 Paul Eggert <eggert@cs.ucla.edu> 2011-01-17 Paul Eggert <eggert@cs.ucla.edu>
@ -1629,10 +1629,10 @@
2010-09-05 Juanma Barranquero <lekktu@gmail.com> 2010-09-05 Juanma Barranquero <lekktu@gmail.com>
* unidata/BidiMirroring.txt: Update from * unidata/BidiMirroring.txt: Update from
http://www.unicode.org/Public/6.0.0/ucd/BidiMirroring-6.0.0d2.txt https://www.unicode.org/Public/6.0.0/ucd/BidiMirroring-6.0.0d2.txt
* unidata/UnicodeData.txt: Update from * unidata/UnicodeData.txt: Update from
http://www.unicode.org/Public/6.0.0/ucd/UnicodeData-6.0.0d7.txt https://www.unicode.org/Public/6.0.0/ucd/UnicodeData-6.0.0d7.txt
2010-08-09 Andreas Schwab <schwab@linux-m68k.org> 2010-08-09 Andreas Schwab <schwab@linux-m68k.org>
@ -1668,7 +1668,7 @@
* unidata/bidimirror.awk: New file. * unidata/bidimirror.awk: New file.
* unidata/BidiMirroring.txt: New file from * unidata/BidiMirroring.txt: New file from
http://www.unicode.org/Public/6.0.0/ucd/BidiMirroring-6.0.0d1.txt. https://www.unicode.org/Public/6.0.0/ucd/BidiMirroring-6.0.0d1.txt.
* unidata/Makefile.in (../../src/bidimirror.h): New target. * unidata/Makefile.in (../../src/bidimirror.h): New target.
(all): Depend on ../../src/biditype.h and ../../src/bidimirror.h. (all): Depend on ../../src/biditype.h and ../../src/bidimirror.h.
@ -1685,7 +1685,7 @@
2010-06-09 Juanma Barranquero <lekktu@gmail.com> 2010-06-09 Juanma Barranquero <lekktu@gmail.com>
* unidata/UnicodeData.txt: Update from * unidata/UnicodeData.txt: Update from
http://www.unicode.org/Public/6.0.0/ucd/UnicodeData-6.0.0d5.txt https://www.unicode.org/Public/6.0.0/ucd/UnicodeData-6.0.0d5.txt
2010-05-27 Glenn Morris <rgm@gnu.org> 2010-05-27 Glenn Morris <rgm@gnu.org>
@ -2031,7 +2031,7 @@
* unidata/unidata-gen.el: New file. * unidata/unidata-gen.el: New file.
* unidata/UnicodeData.txt: New file. Copied from * unidata/UnicodeData.txt: New file. Copied from
http://www.unicode.org on 2006-05-23. https://www.unicode.org on 2006-05-23.
* unidata/.cvsignore: New file. * unidata/.cvsignore: New file.
@ -2577,7 +2577,7 @@
;; coding: utf-8 ;; coding: utf-8
;; End: ;; End:
Copyright (C) 2001-2017 Free Software Foundation, Inc. Copyright (C) 2001-2022 Free Software Foundation, Inc.
This file is part of GNU Emacs. This file is part of GNU Emacs.

View file

@ -37,7 +37,7 @@ Kenichi Handa
Mule Mule
Stefan Monnier Stefan Monnier
src/regex.c src/regex-emacs.c
src/syntax.c src/syntax.c
src/keymap.c src/keymap.c
font-lock/jit-lock/syntax font-lock/jit-lock/syntax
@ -58,10 +58,8 @@ Artur Malabarba
Michael Albinus Michael Albinus
Tramp Tramp
lisp/net/tramp*.el
lisp/url/url-tramp.el lisp/url/url-tramp.el
doc/misc/tramp*.texi test/lisp/url/url-tramp-tests.el
test/lisp/net/tramp-tests.el
D-Bus D-Bus
src/dbusbind.c src/dbusbind.c
@ -125,6 +123,43 @@ Ulf Jasper
lisp/calendar/icalendar.el lisp/calendar/icalendar.el
test/lisp/calendar/icalendar-tests.el test/lisp/calendar/icalendar-tests.el
Amin Bandali
ERC
lisp/erc/*
doc/misc/erc.texi
Andrea Corallo
Lisp native compiler
src/comp.c
lisp/emacs-lisp/comp.el
lisp/emacs-lisp/comp-cstr.el
test/src/comp-*.el
Stefan Kangas
admin/automerge
admin/update_autogen
Po Lu
The Haiku port:
src/haikuterm.c
src/haikufns.c
src/haikuimage.c
src/haikuselect.c
src/haiku_io.c
src/haiku.c
src/haiku_select.cc
src/haiku_support.cc
src/haiku_font_support.cc
src/haiku_draw_support.cc
src/haikugui.h
src/haikuterm.h
src/haikuselect.h
src/haiku_support.h
lisp/term/haiku-win.el
doc/emacs/haiku.texi
Haiku battery support in lisp/battery.el
============================================================================== ==============================================================================
2. Areas that someone is willing to maintain, although he would not 2. Areas that someone is willing to maintain, although he would not
necessarily mind if someone else was the official maintainer. necessarily mind if someone else was the official maintainer.
@ -207,13 +242,25 @@ Paul Eggert
src/* (except for *.m, *w32*, bitmaps, files others want to maintain) src/* (except for *.m, *w32*, bitmaps, files others want to maintain)
Michael Albinus Michael Albinus
.gitlab-ci.yml
src/inotify.c src/inotify.c
lisp/autorevert.el lisp/autorevert.el
lisp/eshell/em-tramp.el lisp/eshell/em-tramp.el
lisp/files.el (file-name-non-special)
lisp/net/ange-ftp.el
lisp/notifications.el lisp/notifications.el
lisp/shadowfile.el
test/infra/*
test/lisp/autorevert-tests.el test/lisp/autorevert-tests.el
test/lisp/files-tests.el (file-name-non-special)
test/lisp/shadowfile-tests.el
test/src/inotify-test.el test/src/inotify-test.el
Secret Service API in
lisp/auth-source.el
doc/misc/auth.texi
test/lisp/auth-source-tests.el
Nicolas Petton Nicolas Petton
lisp/emacs-lisp/subr-x.el lisp/emacs-lisp/subr-x.el
lisp/arc-mode.el lisp/arc-mode.el
@ -229,6 +276,60 @@ Vibhav Pant
lisp/net/browse-url.el lisp/net/browse-url.el
lisp/erc/* lisp/erc/*
Amin Bandali
Eshell
lisp/eshell/*
doc/misc/eshell.texi
Po Lu
The X port
src/xterm.c
src/xfns.c
X11 and GTK xwidget support in src/xwidget.c
Precision pixel scrolling in lisp/pixel-scroll.el
==============================================================================
3. Externally maintained packages.
==============================================================================
Tramp
Maintainer: Michael Albinus
Repository: git://git.savannah.gnu.org/tramp.git
Mailing List: tramp-devel@gnu.org
Bug Reports: M-x tramp-bug
Notes: For backward compatibility requirements, see
lisp/net/trampver.el.
lisp/net/tramp*.el
doc/misc/tramp*.texi
test/lisp/net/tramp*-tests.el
Modus themes
Maintainer: Protesilaos Stavrou
Repository: https://git.sr.ht/~protesilaos
Mailing list: https://lists.sr.ht/~protesilaos/modus-themes
Bug Reports: M-x modus-themes-report-bug
doc/misc/modus-themes.org
etc/themes/modus*.el
Org Mode
Home Page: https://orgmode.org/
Maintainer: Org Mode developers
Repository: git://git.sv.gnu.org/emacs/org-mode.git
Mailing list: emacs-orgmode@gnu.org
Bug Reports: M-x org-submit-bug-report
Notes: Org Mode is maintained as a separate project that is
periodically merged into Emacs. To view or participate in
Org Mode development, please go to https://orgmode.org/ and
follow the instructions there.
lisp/org/*.el
etc/org/*
etc/refcards/orgcard.tex
doc/misc/org.org
doc/misc/org-setup.org
;;; Local Variables: ;;; Local Variables:
;;; coding: utf-8 ;;; coding: utf-8

View file

@ -1,4 +1,4 @@
Copyright (C) 2001-2017 Free Software Foundation, Inc. Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
@ -61,8 +61,19 @@ Brief description of sub-directories:
charsets scripts for generating charset map files charsets scripts for generating charset map files
in ../etc/charsets in ../etc/charsets
coccinelle patches to make coccinelle work with
the latest Emacs version. Since they
apply a few minor changes in Emacs internals
in multiple places, they are trivial for
copyright purposes.
grammars wisent and bovine grammars, used to produce
files in lisp/cedet/.
notes miscellaneous notes related to administrative
tasks.
nt support files for administrative tasks related
to building MS-Windows distributions.
unidata scripts for generating character property files unidata scripts for generating character property files
in ../lisp/international in ../lisp/international/.
This file is part of GNU Emacs. This file is part of GNU Emacs.

View file

@ -1,6 +1,6 @@
;;; admin.el --- utilities for Emacs administration ;;; admin.el --- utilities for Emacs administration -*- lexical-binding: t; -*-
;; Copyright (C) 2001-2017 Free Software Foundation, Inc. ;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
;; This file is part of GNU Emacs. ;; This file is part of GNU Emacs.
@ -88,6 +88,9 @@ Optional argument DATE is the release date, default today."
(kill-buffer) (kill-buffer)
(message "No need to update `%s'" file))) (message "No need to update `%s'" file)))
(defvar admin-git-command (executable-find "git")
"The `git' program to use.")
(defun set-version (root version) (defun set-version (root version)
"Set Emacs version to VERSION in relevant files under ROOT. "Set Emacs version to VERSION in relevant files under ROOT.
Root must be the root of an Emacs source tree." Root must be the root of an Emacs source tree."
@ -96,6 +99,8 @@ Root must be the root of an Emacs source tree."
(read-string "Version number: " emacs-version))) (read-string "Version number: " emacs-version)))
(unless (file-exists-p (expand-file-name "src/emacs.c" root)) (unless (file-exists-p (expand-file-name "src/emacs.c" root))
(user-error "%s doesn't seem to be the root of an Emacs source tree" root)) (user-error "%s doesn't seem to be the root of an Emacs source tree" root))
(unless admin-git-command
(user-error "Could not find git; please install git and move NEWS manually"))
(message "Setting version numbers...") (message "Setting version numbers...")
;; There's also a "version 3" (standing for GPLv3) at the end of ;; There's also a "version 3" (standing for GPLv3) at the end of
;; `README', but since `set-version-in-file' only replaces the first ;; `README', but since `set-version-in-file' only replaces the first
@ -114,14 +119,11 @@ Root must be the root of an Emacs source tree."
;; configure.ac with sed, rather than duplicating the information. ;; configure.ac with sed, rather than duplicating the information.
(set-version-in-file root "msdos/sed2v2.inp" version (set-version-in-file root "msdos/sed2v2.inp" version
(rx (and bol "/^#undef " (1+ not-newline) (rx (and bol "/^#undef " (1+ not-newline)
"define VERSION" (1+ space) "\"" "define PACKAGE_VERSION" (1+ space) "\""
(submatch (1+ (in "0-9.")))))) (submatch (1+ (in "0-9."))))))
;; Major version only. ;; Major version only.
(when (string-match "\\([0-9]\\{2,\\}\\)" version) (when (string-match "\\([0-9]\\{2,\\}\\)" version)
(let ((newmajor (match-string 1 version))) (let ((newmajor (match-string 1 version)))
(set-version-in-file root "src/msdos.c" newmajor
(rx (and "Vwindow_system_version" (1+ not-newline)
?\( (submatch (1+ (in "0-9"))) ?\))))
(set-version-in-file root "etc/refcards/ru-refcard.tex" newmajor (set-version-in-file root "etc/refcards/ru-refcard.tex" newmajor
"\\\\newcommand{\\\\versionemacs}\\[0\\]\ "\\\\newcommand{\\\\versionemacs}\\[0\\]\
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs"))) {\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")))
@ -138,19 +140,32 @@ Root must be the root of an Emacs source tree."
(if (eq 2 (length newversion)) 0 1)))) (if (eq 2 (length newversion)) 0 1))))
(majorbump (and oldversion (not (equal oldmajor newmajor)))) (majorbump (and oldversion (not (equal oldmajor newmajor))))
(minorbump (and oldversion (not majorbump) (minorbump (and oldversion (not majorbump)
(not (equal (cadr oldversion) (cadr newversion))))) (or (not (equal (cadr oldversion) (cadr newversion)))
;; Eg 26.2 -> 26.2.50.
(and (> (length newversion)
(length oldversion))))))
(newsfile (expand-file-name "etc/NEWS" root)) (newsfile (expand-file-name "etc/NEWS" root))
(oldnewsfile (expand-file-name (format "etc/NEWS.%s" oldmajor) root))) (oldnewsfile (expand-file-name (format "etc/NEWS.%s" oldmajor) root)))
(unless (> (length newversion) 2) ; pretest or release candidate? (unless (> (length newversion) 2) ; pretest or release candidate?
(with-temp-buffer (with-temp-buffer
(insert-file-contents newsfile) (insert-file-contents newsfile)
(if (re-search-forward "^\\(+++ *\\|--- *\\)$" nil t) (when (re-search-forward "^\\* [^\n]*\n+ " nil t)
(display-warning 'admin
"NEWS file contains empty sections - remove them?"))
(goto-char (point-min))
(if (re-search-forward "^\\(\\+\\+\\+? *$\\|---? *$\\|Temporary note:\\)" nil t)
(display-warning 'admin (display-warning 'admin
"NEWS file still contains temporary markup. "NEWS file still contains temporary markup.
Documentation changes might not have been completed!")))) Documentation changes might not have been completed!"))))
(when (and majorbump (when (and majorbump
(not (file-exists-p oldnewsfile))) (not (file-exists-p oldnewsfile)))
(rename-file newsfile oldnewsfile) (call-process admin-git-command nil nil nil
"mv" newsfile oldnewsfile)
(when (y-or-n-p "Commit move of NEWS file?")
(call-process admin-git-command nil nil nil
"commit" "-m" (format "; Move etc/%s to etc/%s"
(file-name-nondirectory newsfile)
(file-name-nondirectory oldnewsfile))))
(find-file oldnewsfile) ; to prompt you to commit it (find-file oldnewsfile) ; to prompt you to commit it
(copy-file oldnewsfile newsfile) (copy-file oldnewsfile newsfile)
(with-temp-buffer (with-temp-buffer
@ -158,11 +173,17 @@ Documentation changes might not have been completed!"))))
(re-search-forward "is about changes in Emacs version \\([0-9]+\\)") (re-search-forward "is about changes in Emacs version \\([0-9]+\\)")
(replace-match (number-to-string newmajor) nil nil nil 1) (replace-match (number-to-string newmajor) nil nil nil 1)
(re-search-forward "^See files \\(NEWS\\)") (re-search-forward "^See files \\(NEWS\\)")
(replace-match (format "NEWS.%s, NEWS" oldmajor) nil nil nil 1) (unless (save-match-data
(let ((start (line-beginning-position))) (when (looking-at "\\(\\..*\\), \\(\\.\\.\\.\\|…\\)")
(search-forward "in older Emacs versions") (replace-match
(or (equal start (line-beginning-position)) (format ".%s, NEWS.%s" oldmajor (1- oldmajor))
(fill-region start (line-beginning-position 2)))) nil nil nil 1)
t))
(replace-match (format "NEWS.%s, NEWS" oldmajor) nil nil nil 1)
(let ((start (line-beginning-position)))
(search-forward "in older Emacs versions")
(or (equal start (line-beginning-position))
(fill-region start (line-beginning-position 2)))))
(re-search-forward "^ $") (re-search-forward "^ $")
(forward-line -1) (forward-line -1)
(let ((start (point))) (let ((start (point)))
@ -241,7 +262,7 @@ ROOT should be the root of an Emacs source tree."
(search-forward "INFO_COMMON = ") (search-forward "INFO_COMMON = ")
(let ((start (point))) (let ((start (point)))
(end-of-line) (end-of-line)
(while (and (looking-back "\\\\") (while (and (looking-back "\\\\" (- (point) 2))
(zerop (forward-line 1))) (zerop (forward-line 1)))
(end-of-line)) (end-of-line))
(append (split-string (replace-regexp-in-string (append (split-string (replace-regexp-in-string
@ -255,8 +276,12 @@ ROOT should be the root of an Emacs source tree."
ROOT should be the root of an Emacs source tree. ROOT should be the root of an Emacs source tree.
Interactively with a prefix argument, prompt for TYPE. Interactively with a prefix argument, prompt for TYPE.
Optional argument TYPE is type of output (nil means all)." Optional argument TYPE is type of output (nil means all)."
(interactive (let ((root (read-directory-name "Emacs root directory: " (interactive (let ((root
source-directory nil t))) (if noninteractive
(or (pop command-line-args-left)
default-directory)
(read-directory-name "Emacs root directory: "
source-directory nil t))))
(list root (list root
(if current-prefix-arg (if current-prefix-arg
(completing-read (completing-read
@ -320,14 +345,16 @@ Optional argument TYPE is type of output (nil means all)."
(defconst manual-doctype-string (defconst manual-doctype-string
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
\"http://www.w3.org/TR/html4/loose.dtd\">\n\n") \"https://www.w3.org/TR/html4/loose.dtd\">\n\n")
(defconst manual-meta-string (defconst manual-meta-string
"<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"> "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n")
<link rev=\"made\" href=\"mailto:bug-gnu-emacs@gnu.org\">
(defconst manual-links-string
"<link rev=\"made\" href=\"mailto:bug-gnu-emacs@gnu.org\">
<link rel=\"icon\" type=\"image/png\" href=\"/graphics/gnu-head-mini.png\"> <link rel=\"icon\" type=\"image/png\" href=\"/graphics/gnu-head-mini.png\">
<meta name=\"ICBM\" content=\"42.256233,-71.006581\"> <meta name=\"ICBM\" content=\"42.256233,-71.006581\">
<meta name=\"DC.title\" content=\"gnu.org\">\n\n") <meta name=\"DC.title\" content=\"gnu.org\">\n")
(defconst manual-style-string "<style type=\"text/css\"> (defconst manual-style-string "<style type=\"text/css\">
@import url('/software/emacs/manual.css');\n</style>\n") @import url('/software/emacs/manual.css');\n</style>\n")
@ -342,13 +369,22 @@ Optional argument TYPE is type of output (nil means all)."
(manual-html-mono texi (expand-file-name (concat name ".html") (manual-html-mono texi (expand-file-name (concat name ".html")
html-mono-dir)))) html-mono-dir))))
(defvar manual-makeinfo (or (getenv "MAKEINFO") "makeinfo")
"The `makeinfo' program to use.")
(defvar manual-texi2pdf (or (getenv "TEXI2PDF") "texi2pdf")
"The `texi2pdf' program to use.")
(defvar manual-texi2dvi (or (getenv "TEXI2DVI") "texi2dvi")
"The `texi2dvi' program to use.")
(defun manual-html-mono (texi-file dest) (defun manual-html-mono (texi-file dest)
"Run Makeinfo on TEXI-FILE, emitting mono HTML output to DEST. "Run Makeinfo on TEXI-FILE, emitting mono HTML output to DEST.
This function also edits the HTML files so that they validate as This function also edits the HTML files so that they validate as
HTML 4.01 Transitional, and pulls in the gnu.org stylesheet using HTML 4.01 Transitional, and pulls in the gnu.org stylesheet using
the @import directive." the @import directive."
(make-directory (or (file-name-directory dest) ".") t) (make-directory (or (file-name-directory dest) ".") t)
(call-process "makeinfo" nil nil nil (call-process manual-makeinfo nil nil nil
"-D" "WWW_GNU_ORG" "-D" "WWW_GNU_ORG"
"-I" (expand-file-name "../emacs" "-I" (expand-file-name "../emacs"
(file-name-directory texi-file)) (file-name-directory texi-file))
@ -376,7 +412,7 @@ the @import directive."
(unless (file-exists-p texi-file) (unless (file-exists-p texi-file)
(user-error "Manual file %s not found" texi-file)) (user-error "Manual file %s not found" texi-file))
(make-directory dir t) (make-directory dir t)
(call-process "makeinfo" nil nil nil (call-process manual-makeinfo nil nil nil
"-D" "WWW_GNU_ORG" "-D" "WWW_GNU_ORG"
"-I" (expand-file-name "../emacs" "-I" (expand-file-name "../emacs"
(file-name-directory texi-file)) (file-name-directory texi-file))
@ -415,7 +451,7 @@ the @import directive."
"Run texi2pdf on TEXI-FILE, emitting PDF output to DEST." "Run texi2pdf on TEXI-FILE, emitting PDF output to DEST."
(make-directory (or (file-name-directory dest) ".") t) (make-directory (or (file-name-directory dest) ".") t)
(let ((default-directory (file-name-directory texi-file))) (let ((default-directory (file-name-directory texi-file)))
(call-process "texi2pdf" nil nil nil (call-process manual-texi2pdf nil nil nil
"-I" "../emacs" "-I" "../misc" "-I" "../emacs" "-I" "../misc"
texi-file "-o" dest))) texi-file "-o" dest)))
@ -425,7 +461,7 @@ the @import directive."
(let ((dvi-dest (concat (file-name-sans-extension dest) ".dvi")) (let ((dvi-dest (concat (file-name-sans-extension dest) ".dvi"))
(default-directory (file-name-directory texi-file))) (default-directory (file-name-directory texi-file)))
;; FIXME: Use `texi2dvi --ps'? --xfq ;; FIXME: Use `texi2dvi --ps'? --xfq
(call-process "texi2dvi" nil nil nil (call-process manual-texi2dvi nil nil nil
"-I" "../emacs" "-I" "../misc" "-I" "../emacs" "-I" "../misc"
texi-file "-o" dvi-dest) texi-file "-o" dvi-dest)
(call-process "dvips" nil nil nil dvi-dest "-o" dest) (call-process "dvips" nil nil nil dvi-dest "-o" dest)
@ -449,6 +485,13 @@ the @import directive."
(delete-region opoint (point)) (delete-region opoint (point))
(search-forward "<meta http-equiv=\"Content-Style") (search-forward "<meta http-equiv=\"Content-Style")
(setq opoint (match-beginning 0))) (setq opoint (match-beginning 0)))
(search-forward "<title>")
(delete-region opoint (match-beginning 0))
(search-forward "</title>\n")
(when (search-forward "<link href=" nil t)
(goto-char (match-beginning 0)))
(insert manual-links-string)
(setq opoint (point))
(search-forward "</head>") (search-forward "</head>")
(goto-char (match-beginning 0)) (goto-char (match-beginning 0))
(delete-region opoint (point)) (delete-region opoint (point))
@ -519,7 +562,7 @@ Leave point after the table."
(forward-line 1) (forward-line 1)
(while (not done) (while (not done)
(cond ((re-search-forward "<tr><td.*&bull; \\(<a.*</a>\\)\ (cond ((re-search-forward "<tr><td.*&bull; \\(<a.*</a>\\)\
:</td><td>&nbsp;&nbsp;</td><td[^>]*>\\(.*\\)" (line-end-position) t) :?</td><td>&nbsp;&nbsp;</td><td[^>]*>\\(.*\\)" (line-end-position) t)
(replace-match (format "<tr><td%s>\\1</td>\n<td>\\2" (replace-match (format "<tr><td%s>\\1</td>\n<td>\\2"
(if table-workaround (if table-workaround
" bgcolor=\"white\"" ""))) " bgcolor=\"white\"" "")))
@ -565,80 +608,87 @@ style=\"text-align:left\">")
(forward-line 1) (forward-line 1)
(setq done t))))) (setq done t)))))
(let (done open-td tag desc) (let (done open-td tag desc)
;; Convert the list that Makeinfo made into a table. ;; Texinfo 6.8 and later doesn't produce <ul class="menu"> lists
(or (search-forward "<ul class=\"menu\">" nil t) ;; for the TOC menu, and the "description" part of each menu
;; FIXME? The following search seems dangerously lax. ;; item is not there anymore. So for HTML manuals produced by
(search-forward "<ul>")) ;; those newer versions of Texinfo we punt and leave the menu in
(replace-match "<table style=\"float:left\" width=\"100%\">") ;; its original form.
(forward-line 1) (when (or (search-forward "<ul class=\"menu\">" nil t)
(while (not done) ;; FIXME? The following search seems dangerously lax.
(cond (search-forward "<ul>" nil t))
((or (looking-at "<li>\\(<a.+</a>\\):[ \t]+\\(.*\\)$") ;; Convert the list that Makeinfo made into a table.
(looking-at "<li>\\(<a.+</a>\\)$")) (replace-match "<table style=\"float:left\" width=\"100%\">")
(setq tag (match-string 1)) (forward-line 1)
(setq desc (match-string 2)) (while (not done)
(replace-match "" t t) (cond
(when open-td ((or (looking-at "<li>\\(<a.+</a>\\):[ \t]+\\(.*\\)$")
(save-excursion (looking-at "<li>\\(<a.+</a>\\)$"))
(forward-char -1) (setq tag (match-string 1))
(skip-chars-backward " ") (setq desc (match-string 2))
(delete-region (point) (line-end-position)) (replace-match "" t t)
(insert "</td>\n </tr>"))) (when open-td
(insert " <tr>\n ") (save-excursion
(if table-workaround (forward-char -1)
;; This works around a Firefox bug in the mono file. (skip-chars-backward " ")
(insert "<td bgcolor=\"white\">") (delete-region (point) (line-end-position))
(insert "<td>")) (insert "</td>\n </tr>")))
(insert tag "</td>\n <td>" (or desc "")) (insert " <tr>\n ")
(setq open-td t)) (if table-workaround
((eq (char-after) ?\n) ;; This works around a Firefox bug in the mono file.
(delete-char 1) (insert "<td bgcolor=\"white\">")
;; Negate the following `forward-line'. (insert "<td>"))
(forward-line -1)) (insert tag "</td>\n <td>" (or desc ""))
((looking-at "<!-- ") (setq open-td t))
(search-forward "-->")) ((eq (char-after) ?\n)
((looking-at "<p>[- ]*The Detailed Node Listing[- \n]*") (delete-char 1)
(replace-match " </td></tr></table>\n ;; Negate the following `forward-line'.
(forward-line -1))
((looking-at "<!-- ")
(search-forward "-->"))
((looking-at "<p>[- ]*The Detailed Node Listing[- \n]*")
(replace-match " </td></tr></table>\n
<h3>Detailed Node Listing</h3>\n\n" t t) <h3>Detailed Node Listing</h3>\n\n" t t)
(search-forward "<p>") (search-forward "<p>")
;; FIXME Fragile! ;; FIXME Fragile!
;; The Emacs and Elisp manual have some text at the ;; The Emacs and Elisp manual have some text at the
;; start of the detailed menu that is not part of the menu. ;; start of the detailed menu that is not part of the menu.
;; Other manuals do not. ;; Other manuals do not.
(if (looking-at "Here are some other nodes") (if (looking-at "Here are some other nodes")
(search-forward "<p>")) (search-forward "<p>"))
(goto-char (match-beginning 0)) (goto-char (match-beginning 0))
(skip-chars-backward "\n ") (skip-chars-backward "\n ")
(setq open-td nil) (setq open-td nil)
(insert "</p>\n\n<table style=\"float:left\" width=\"100%\">")) (insert "</p>\n\n<table style=\"float:left\" width=\"100%\">"))
((looking-at "</li></ul>") ((looking-at "</li></ul>")
(replace-match "" t t)) (replace-match "" t t))
((looking-at "<p>") ((looking-at "<p>")
(replace-match "" t t) (replace-match "" t t)
(when open-td (when open-td
(insert " </td></tr>") (insert " </td></tr>")
(setq open-td nil)) (setq open-td nil))
(insert " <tr> (insert " <tr>
<th colspan=\"2\" align=\"left\" style=\"text-align:left\">") <th colspan=\"2\" align=\"left\" style=\"text-align:left\">")
(if (re-search-forward "</p>[ \t\n]*<ul class=\"menu\">" nil t) (if (re-search-forward "</p>[ \t\n]*<ul class=\"menu\">" nil t)
(replace-match " </th></tr>"))) (replace-match " </th></tr>")))
((looking-at "[ \t]*</ul>[ \t]*$") ((looking-at "[ \t]*</ul>[ \t]*$")
(replace-match (replace-match
(if open-td (if open-td
" </td></tr>\n</table>" " </td></tr>\n</table>"
"</table>") t t) "</table>") t t)
(setq done t)) (setq done t))
(t (t
(if (eobp) (if (eobp)
(error "Parse error in %s" (error "Parse error in %s"
(file-name-nondirectory buffer-file-name))) (file-name-nondirectory buffer-file-name)))
(unless open-td (unless open-td
(setq done t)))) (setq done t))))
(forward-line 1))))) (forward-line 1))))))
(defconst make-manuals-dist-output-variables (defconst make-manuals-dist-output-variables
`(("@\\(top_\\)?srcdir@" . ".") ; top_srcdir is wrong, but not used '(("@\\(top_\\)?srcdir@" . ".") ; top_srcdir is wrong, but not used
("@\\(abs_\\)?top_builddir@" . ".") ; wrong but unused
("^\\(EMACS *=\\).*" . "\\1 emacs")
("^\\(\\(?:texinfo\\|buildinfo\\|emacs\\)dir *=\\).*" . "\\1 .") ("^\\(\\(?:texinfo\\|buildinfo\\|emacs\\)dir *=\\).*" . "\\1 .")
("^\\(clean:.*\\)" . "\\1 infoclean") ("^\\(clean:.*\\)" . "\\1 infoclean")
("@MAKEINFO@" . "makeinfo") ("@MAKEINFO@" . "makeinfo")
@ -656,9 +706,7 @@ style=\"text-align:left\">")
("@INSTALL@" . "install -c") ("@INSTALL@" . "install -c")
("@INSTALL_DATA@" . "${INSTALL} -m 644") ("@INSTALL_DATA@" . "${INSTALL} -m 644")
("@configure_input@" . "") ("@configure_input@" . "")
("@AM_DEFAULT_VERBOSITY@" . "0") ("@AM_DEFAULT_VERBOSITY@" . "0"))
("@AM_V@" . "${V}")
("@AM_DEFAULT_V@" . "${AM_DEFAULT_VERBOSITY}"))
"Alist of (REGEXP . REPLACEMENT) pairs for `make-manuals-dist'.") "Alist of (REGEXP . REPLACEMENT) pairs for `make-manuals-dist'.")
(defun make-manuals-dist--1 (root type) (defun make-manuals-dist--1 (root type)
@ -677,6 +725,7 @@ style=\"text-align:left\">")
(if (file-directory-p stem) (if (file-directory-p stem)
(delete-directory stem t)) (delete-directory stem t))
(make-directory stem) (make-directory stem)
(setq stem (file-name-as-directory stem))
(copy-file "../doc/misc/texinfo.tex" stem) (copy-file "../doc/misc/texinfo.tex" stem)
(unless (equal type "emacs") (unless (equal type "emacs")
(copy-file "../doc/emacs/emacsver.texi" stem) (copy-file "../doc/emacs/emacsver.texi" stem)
@ -687,7 +736,8 @@ style=\"text-align:left\">")
(string-match-p "\\.\\(eps\\|pdf\\)\\'" file))) (string-match-p "\\.\\(eps\\|pdf\\)\\'" file)))
(copy-file file stem))) (copy-file file stem)))
(with-temp-buffer (with-temp-buffer
(let ((outvars make-manuals-dist-output-variables)) (let ((outvars make-manuals-dist-output-variables)
(case-fold-search nil))
(push `("@version@" . ,version) outvars) (push `("@version@" . ,version) outvars)
(insert-file-contents (format "../doc/%s/Makefile.in" type)) (insert-file-contents (format "../doc/%s/Makefile.in" type))
(dolist (cons outvars) (dolist (cons outvars)
@ -699,7 +749,7 @@ style=\"text-align:left\">")
(setq ats t) (setq ats t)
(message "Unexpanded: %s" (match-string 0))) (message "Unexpanded: %s" (match-string 0)))
(if ats (error "Unexpanded configure variables in Makefile?"))) (if ats (error "Unexpanded configure variables in Makefile?")))
(write-region nil nil (expand-file-name (format "%s/Makefile" stem)) (write-region nil nil (expand-file-name (format "%sMakefile" stem))
nil 'silent)) nil 'silent))
(call-process "tar" nil nil nil "-cf" tarfile stem) (call-process "tar" nil nil nil "-cf" tarfile stem)
(delete-directory stem t) (delete-directory stem t)
@ -711,8 +761,12 @@ style=\"text-align:left\">")
ROOT should be the root of an Emacs source tree. ROOT should be the root of an Emacs source tree.
Interactively with a prefix argument, prompt for TYPE. Interactively with a prefix argument, prompt for TYPE.
Optional argument TYPE is type of output (nil means all)." Optional argument TYPE is type of output (nil means all)."
(interactive (let ((root (read-directory-name "Emacs root directory: " (interactive (let ((root
source-directory nil t))) (if noninteractive
(or (pop command-line-args-left)
default-directory)
(read-directory-name "Emacs root directory: "
source-directory nil t))))
(list root (list root
(if current-prefix-arg (if current-prefix-arg
(completing-read (completing-read
@ -724,6 +778,204 @@ Optional argument TYPE is type of output (nil means all)."
(if (member type (list nil m)) (if (member type (list nil m))
(make-manuals-dist--1 root m)))) (make-manuals-dist--1 root m))))
(defvar admin--org-export-headers-format "\
#+title: GNU Emacs %s NEWS -- history of user-visible changes
#+author:
#+options: author:nil creator:nil toc:2 num:3 *:nil \\n:t ^:nil tex:nil
#+language: en
#+HTML_LINK_HOME: /software/emacs
#+HTML_LINK_UP: /software/emacs
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/mini.css\" media=\"handheld\" />
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/layout.min.css\" media=\"screen\" />
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/print.min.css\" media=\"print\" />
#+BEGIN_EXPORT html
<div style=\"float:right;margin-left:1em;padding:3px;border:0px solid;text-align:center\">
<a href=\"/graphics/gnu-head.jpg\">
<img src=\"/graphics/gnu-head-sm.jpg\" alt=\" [image of the head
of a GNU] \" width=\"129\" height=\"122\"/>
</a>
</div>
#+END_EXPORT\n\n")
(defvar admin--org-html-postamble "
<p>
Return to the <a href=\"/software/emacs/emacs.html\">GNU Emacs home page</a>.
</p>
<div id=\"footer\">
<div class=\"unprintable\">
<p>
Please send FSF &amp; GNU inquiries to
<a href=\"mailto:gnu@gnu.org\">&lt;gnu@gnu.org&gt;</a>.
There are also <a href=\"/contact/\">other ways to contact</a>
the FSF.
Broken links and other corrections or suggestions can be sent to
<a href=\"mailto:bug-gnu-emacs@gnu.org\">&lt;bug-gnu-emacs@gnu.org&gt;</a>.
</p>
</div>
<p>
Copyright &copy; %s Free Software Foundation, Inc.
</p>
<p>This page is licensed under
a <a href=\"https://creativecommons.org/licenses/by-sa/4.0\">CC-BY-SA</a>
license.</p>
<!--#include virtual=\"/server/bottom-notes.html\" -->
<p class=\"unprintable\">
Updated:
<!-- timestamp start -->
$Date: %s $
<!-- timestamp end -->
</p>
</div>
</div>")
(defun admin--require-external-package (pkg)
(package-initialize)
(require pkg nil t)
(unless (featurep pkg)
(when (yes-or-no-p (format "Package \"%s\" is missing. Install now?" pkg))
(package-install pkg)
(require pkg nil t))))
(defvar org-html-postamble)
(defvar org-html-mathjax-template)
(defun make-news-html-file (root version)
"Convert the NEWS file into an HTML file."
(interactive (let ((root
(if noninteractive
(or (pop command-line-args-left)
default-directory)
(read-directory-name "Emacs root directory: "
source-directory nil t))))
(list root
(read-string "Major version number: "
(number-to-string emacs-major-version)))))
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
(admin--require-external-package 'htmlize)
(let* ((newsfile (expand-file-name "etc/NEWS" root))
(orgfile (expand-file-name (format "etc/NEWS.%s.org" version) root))
(html (format "%s.html" (file-name-base orgfile)))
(copyright-years (format-time-string "%Y")))
(delete-file orgfile)
(copy-file newsfile orgfile t)
(find-file orgfile)
;; Find the copyright range.
(goto-char (point-min))
(re-search-forward "^Copyright (C) \\([0-9-]+\\) Free Software Foundation, Inc.")
(setq copyright-years (match-string 1))
;; Delete some unnecessary stuff.
(replace-regexp-in-region "^---$" "" (point-min) (point-max))
(replace-regexp-in-region "^\\+\\+\\+$" "" (point-min) (point-max))
(dolist (str '(" \n"
"GNU Emacs NEWS -- history of user-visible changes."
"Temporary note:"
"+++ indicates that all relevant manuals in doc/ have been updated."
"--- means no change in the manuals is needed."
"When you add a new item, use the appropriate mark if you are sure it"
"applies, and please also update docstrings as needed."
"You can narrow news to a specific version by calling 'view-emacs-news'"
"with a prefix argument or by typing 'C-u C-h C-n'."))
(replace-string-in-region str "" (point-min) (point-max)))
;; Escape some characters.
(replace-regexp-in-region (rx "$") "@@html:&dollar;@@" (point-min) (point-max))
;; Use Org-mode markers for 'symbols', 'C-x k', etc.
(replace-regexp-in-region
(rx (or (: (group (in " \t\n("))
"'"
(group (+ (or (not (in "'\n"))
(: "'" (not (in " .,\t\n)"))))))
"'"
(group (in ",.;:!? \t\n)")))
;; Buffer names, e.g. "*scratch*".
(: "\""
(group-n 2 "*" (+ (not (in "*\""))) "*")
"\"")))
"\\1~\\2~\\3" (point-min) (point-max))
;; Format code blocks.
(while (re-search-forward "^ " nil t)
(let ((elisp-block (looking-at "(")))
(backward-paragraph)
(insert (if elisp-block
"\n#+BEGIN_SRC emacs-lisp"
"\n#+BEGIN_EXAMPLE"))
(forward-paragraph)
(insert (if elisp-block
"#+END_SRC\n"
"#+END_EXAMPLE\n"))))
;; Delete buffer local variables.
(goto-char (point-max))
(when (re-search-backward "Local variables:")
(forward-line -1)
(delete-region (point) (point-max)))
;; Insert Org-mode export headers.
(goto-char (point-min))
(insert (format admin--org-export-headers-format version))
(org-mode)
(save-buffer)
;; Make everything one level lower.
(goto-char (point-min))
(while (re-search-forward (rx bol (group (+ "*")) " ") nil t)
(replace-match "*\\1" nil nil nil 1))
;; Insert anchors for different versions.
(goto-char (point-min))
(let (last-major last-minor)
(while (re-search-forward (rx bol "** " (+ (not "\n")) "in Emacs "
(group digit digit) "." (group digit)
eol)
nil t)
(unless (and (equal (match-string 1) last-major)
(equal (match-string 2) last-minor))
(setq last-major (match-string 1))
(setq last-minor (match-string 2))
(forward-line -1)
(insert (format
(concat
"#+HTML: <p>&nbsp;</p>\n"
"* Changes in Emacs %s.%s\n"
;; Add anchor to allow linking to
;; e.g. "NEWS.28.html#28.1".
":PROPERTIES:\n"
":CUSTOM_ID: %s.%s\n"
":END:\n")
last-major last-minor
last-major last-minor)))))
(save-buffer)
;; Make the HTML export.
(let* ((org-html-postamble
(format admin--org-html-postamble
copyright-years
;; e.g. "2022/09/13 09:13:13"
(format-time-string "%Y/%m/%d %H:%m:%S")))
(org-html-mathjax-template "")
(htmlize-output-type 'css))
(org-html-export-as-html))
;; Write HTML to file.
(let ((html (expand-file-name html (expand-file-name "etc" root))))
(write-file html)
(unless noninteractive
(find-file html)
(html-mode))
(message "Successfully exported HTML to %s" html))))
;; Stuff to check new `defcustom's got :version tags. ;; Stuff to check new `defcustom's got :version tags.
;; Adapted from check-declare.el. ;; Adapted from check-declare.el.
@ -890,6 +1142,64 @@ changes (in a non-trivial way). This function does not check for that."
'help-echo "Mouse-2: visit this definition" 'help-echo "Mouse-2: visit this definition"
:type 'cusver-xref))))))) :type 'cusver-xref)))))))
;; Reminder message for open release-blocking bugs. This requires the
;; GNU ELPA package `debbugs'.
(defun reminder-for-release-blocking-bugs (version)
"Submit a reminder message for release-blocking bugs of Emacs VERSION."
(interactive
(list (progn
(require 'debbugs-gnu)
(defvar debbugs-gnu-emacs-blocking-reports)
(defvar debbugs-gnu-emacs-current-release)
(completing-read
"Emacs release: "
(mapcar #'identity debbugs-gnu-emacs-blocking-reports)
nil t debbugs-gnu-emacs-current-release))))
(require 'debbugs-gnu)
(declare-function debbugs-get-status "debbugs" (&rest bug-numbers))
(declare-function debbugs-get-attribute "debbugs" (bug-or-message attribute))
(require 'reporter)
(declare-function mail-position-on-field "sendmail" (field &optional soft))
(declare-function mail-text "sendmail" ())
(when-let ((id (alist-get version debbugs-gnu-emacs-blocking-reports
nil nil #'string-equal))
(status-id (debbugs-get-status id))
(blockedby-ids (debbugs-get-attribute (car status-id) 'blockedby))
(blockedby-status
(apply #'debbugs-get-status (sort blockedby-ids #'<))))
(reporter-submit-bug-report
"<emacs-devel@gnu.org>" ; to-address
nil nil nil
(lambda () ; posthook
(goto-char (point-min))
(mail-position-on-field "subject")
(insert (format "Reminder: release-blocking bugs for Emacs %s (%s)"
version (format-time-string "%F" nil "UTC0")))
(mail-text)
(delete-region (point) (point-max))
(insert "
The following bugs are regarded as release-blocking for Emacs " version ".
People are encouraged to work on them with priority.\n\n")
(dolist (i blockedby-status)
(unless (equal (debbugs-get-attribute i 'pending) "done")
(insert (format "bug#%d %s\n"
(debbugs-get-attribute i 'id)
(debbugs-get-attribute i 'subject)))))
(insert "
If you use the debbugs package from GNU ELPA, you can apply the
following form to see all bugs which block a given release:
(debbugs-gnu-emacs-release-blocking-reports \"" version "\")\n")))))
(provide 'admin) (provide 'admin)
;;; admin.el ends here ;;; admin.el ends here
;; Local Variables:
;; coding: utf-8
;; End:

View file

@ -1,6 +1,6 @@
/* Allocate X colors. Used for testing with dense colormaps. /* Allocate X colors. Used for testing with dense colormaps.
Copyright (C) 2001-2017 Free Software Foundation, Inc. Copyright (C) 2001-2022 Free Software Foundation, Inc.
This file is part of GNU Emacs. This file is part of GNU Emacs.
@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <unistd.h> #include <unistd.h>
#include <string.h>
void void
fatal (const char *fmt, ...) fatal (const char *fmt, ...)

View file

@ -1,6 +1,6 @@
;;; authors.el --- utility for maintaining Emacs's AUTHORS file ;;; authors.el --- utility for maintaining Emacs's AUTHORS file -*- lexical-binding: t; -*-
;; Copyright (C) 2000-2017 Free Software Foundation, Inc. ;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
;; Author: Gerd Moellmann <gerd@gnu.org> ;; Author: Gerd Moellmann <gerd@gnu.org>
;; Maintainer: emacs-devel@gnu.org ;; Maintainer: emacs-devel@gnu.org
@ -41,22 +41,34 @@ files.")
(defconst authors-aliases (defconst authors-aliases
'( '(
(nil "A\\. N\\. Other") ; unknown author 2014-12-03, later removed (nil "A\\. N\\. Other") ; unknown author 2014-12-03, later removed
(nil "Anticrisis")
(nil "akater")
("Aaron S. Hawley" "Aaron Hawley") ("Aaron S. Hawley" "Aaron Hawley")
("Alan Third" "Alan J Third") ("Alan Third" "Alan J Third")
("Alexander Gramiak" "Alex Gramiak")
("Alexandru Harsanyi" "Alex Harsanyi") ("Alexandru Harsanyi" "Alex Harsanyi")
("Álvar Jesús Ibeas Martín" "Álvar Ibeas") ("Álvar Jesús Ibeas Martín" "Álvar Ibeas")
("Andrea Corallo" "AndreaCorallo")
("Andrew Csillag" "Drew Csillag") ("Andrew Csillag" "Drew Csillag")
("Andrew G Cohen" "Andrew Cohen")
("Anna M. Bigatti" "Anna Bigatti") ("Anna M. Bigatti" "Anna Bigatti")
("Aurélien Aptel" "Aurelien Aptel") ("Aurélien Aptel" "Aurelien Aptel")
("Barry A. Warsaw" "Barry A. Warsaw, Century Computing, Inc." ("Barry A. Warsaw" "Barry A. Warsaw, Century Computing, Inc."
"Barry A. Warsaw, ITB" "Barry Warsaw") "Barry A. Warsaw, ITB" "Barry Warsaw")
("Bastien Guerry" "Bastien .*bzg")
("Bill Carpenter" "WJ Carpenter") ("Bill Carpenter" "WJ Carpenter")
("Bill Mann" "William F. Mann") ("Bill Mann" "William F. Mann")
("Bill Rozas" "Guillermo J. Rozas") ("Bill Rozas" "Guillermo J. Rozas")
(nil "binjo.cn@gmail.com")
(nil "bug-gnu-emacs@gnu.org") ; mistake
("Björn Torkelsson" "Bjorn Torkelsson") ("Björn Torkelsson" "Bjorn Torkelsson")
("Brian Fox" "Brian J. Fox") ("Brian Fox" "Brian J. Fox")
("Brian P Templeton" "BT Templeton") ("Brian P Templeton" "BT Templeton")
("Brian Sniffen" "Brian T. Sniffen") ("Brian Sniffen" "Brian T. Sniffen")
(nil "castor@my-dejanews")
(nil "chengang31@gmail.com")
(nil "chuntaro")
("Clément Pit-Claudel" "Clément Pit--Claudel")
("David Abrahams" "Dave Abrahams") ("David Abrahams" "Dave Abrahams")
("David J. Biesack" "David Biesack") ("David J. Biesack" "David Biesack")
("David De La Harpe Golden" "David Golden") ("David De La Harpe Golden" "David Golden")
@ -66,13 +78,19 @@ files.")
("David M. Koppelman" "David Koppelman") ("David M. Koppelman" "David Koppelman")
("David M. Smith" "David Smith" "David M Smith") ("David M. Smith" "David Smith" "David M Smith")
("David O'Toole" "David T. O'Toole") ("David O'Toole" "David T. O'Toole")
(nil "dalanicolai")
(nil "deech@deech")
("Deepak Goel" "D. Goel") ("Deepak Goel" "D. Goel")
("Earl Hyatt" "Earl" "ej32u@protonmail.com")
("Ed L. Cashin" "Ed L Cashin") ("Ed L. Cashin" "Ed L Cashin")
("Edward M. Reingold" "Ed\\(ward\\( M\\)?\\)? Reingold" "Reingold Edward M") ("Edward M. Reingold" "Ed\\(ward\\( M\\)?\\)? Reingold" "Reingold Edward M")
("Emilio C. Lopes" "Emilio Lopes") ("Emilio C. Lopes" "Emilio Lopes")
("Eric M. Ludlam" "Eric Ludlam") ("Eric M. Ludlam" "Eric Ludlam")
("Eric S. Raymond" "Eric Raymond") ("Eric S. Raymond" "Eric Raymond")
("Etienne PrudHomme" "Etienne Prud'Homme")
("Fabián Ezequiel Gallina" "Fabian Ezequiel Gallina" "Fabi.n E\\. Gallina") ("Fabián Ezequiel Gallina" "Fabian Ezequiel Gallina" "Fabi.n E\\. Gallina")
(nil "felix.*EmacsWiki")
(nil "foudfou")
("Francis Litterio" "Fran Litterio") ("Francis Litterio" "Fran Litterio")
("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright") ("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright")
("François Pinard" "Francois Pinard") ("François Pinard" "Francois Pinard")
@ -82,25 +100,37 @@ files.")
("Gerd Möllmann" "Gerd Moellmann") ("Gerd Möllmann" "Gerd Moellmann")
("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth") ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth")
("Hrvoje Nikšić" "Hrvoje Niksic") ("Hrvoje Nikšić" "Hrvoje Niksic")
("Ian Dunn" "^Ian D\\>")
;; lisp/org/ChangeLog.1 2010-11-11. ;; lisp/org/ChangeLog.1 2010-11-11.
(nil "immerrr")
(nil "aaa bbb") (nil "aaa bbb")
(nil "Code Extracted") ; lisp/newcomment.el's "Author:" header (nil "Code Extracted") ; lisp/newcomment.el's "Author:" header
(nil "jakanakaevangeli")
("J. Alexander Branham" "Alex Branham")
("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn") ("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn")
("Jan Djärv" "Jan D." "Jan Djarv") ("Jan Djärv" "Jan D\\>" "Jan Djarv")
("João Távora" "João Tãvora")
("Jay K. Adams" "Jay Adams") ("Jay K. Adams" "Jay Adams")
("J.D. Smith" "Jd Smith")
("Jérôme Marant" "Jérôme Marant" "Jerome Marant") ("Jérôme Marant" "Jérôme Marant" "Jerome Marant")
("Jens Lechtenbörger" "Jens Lechtenboerger")
("Jens-Ulrik Holger Petersen" "Jens-Ulrik Petersen") ("Jens-Ulrik Holger Petersen" "Jens-Ulrik Petersen")
("Jérémie Courrèges-Anglas" "Jeremie Courreges-Anglas")
("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard") ("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard")
("Jérémy Compostella" "Jeremy Compostella")
("Jimmy Aguilar Mena" "Ergus")
("Johan Bockgård" "Johan Bockgard") ("Johan Bockgård" "Johan Bockgard")
("John F. Carr" "John F Carr") ("John F. Carr" "John F Carr")
("John J Foerch" "John Foerch") ("John J Foerch" "John Foerch")
("John W. Eaton" "John Eaton") ("John W. Eaton" "John Eaton")
("Jonathan I. Kamens" "Jonathan Kamens") ("Jonathan I. Kamens" "Jonathan Kamens")
("Jorgen Schäfer" "Jorgen Schaefer") ("Jorgen Schäfer" "Jorgen Schaefer")
("Jose A. Ortega Ruiz" "Jose A Ortega Ruiz")
("Joseph Arceneaux" "Joe Arceneaux") ("Joseph Arceneaux" "Joe Arceneaux")
("Joseph M. Kelsey" "Joe Kelsey") ; FIXME ? ("Joseph M. Kelsey" "Joe Kelsey") ; FIXME ?
("Juan León Lahoz García" "Juan-Leon Lahoz Garcia") ("Juan León Lahoz García" "Juan-Leon Lahoz Garcia")
("Jürgen Hötzel" "Juergen Hoetzel") ("Jürgen Hötzel" "Juergen Hoetzel")
(nil "k3tu0isui")
("K. Shane Hartman" "Shane Hartman") ("K. Shane Hartman" "Shane Hartman")
("Kai Großjohann" "Kai Grossjohann") ("Kai Großjohann" "Kai Grossjohann")
("Karl Berry" "K. Berry") ("Karl Berry" "K. Berry")
@ -112,13 +142,19 @@ files.")
("Kim F. Storm" "Kim Storm") ("Kim F. Storm" "Kim Storm")
("Kyle Jones" "Kyle E. Jones") ("Kyle Jones" "Kyle E. Jones")
("Lars Magne Ingebrigtsen" "Lars Ingebrigtsen") ("Lars Magne Ingebrigtsen" "Lars Ingebrigtsen")
(nil "LynX@bk.ru")
(nil "lu4nx")
("Marcus G. Daniels" "Marcus Daniels") ("Marcus G. Daniels" "Marcus Daniels")
("Mark D. Baushke" "Mark D Baushke") ("Mark D. Baushke" "Mark D Baushke")
("Mark E. Shoulson" "Mark Shoulson") ("Mark E. Shoulson" "Mark Shoulson")
("Marko Kohtala" "Kohtala Marko") ("Marko Kohtala" "Kohtala Marko")
("Maxim Nikulin" "Max Nikulin")
("Agustín Martín" "Agustin Martin" "Agustín Martín Domingo") ("Agustín Martín" "Agustin Martin" "Agustín Martín Domingo")
("Martin Lorentzon" "Martin Lorentzson") ("Martin Lorentzon" "Martin Lorentzson")
("Matt Swift" "Matthew Swift") ("Matt Swift" "Matthew Swift")
("Mattias Engdegård" "Mattias Engdegard")
(nil "^Madhu")
(nil "mu@magi.net.ru")
("Maxime Edouard Robert Froumentin" "Max Froumentin") ("Maxime Edouard Robert Froumentin" "Max Froumentin")
("Michael R. Mauger" "Michael Mauger") ("Michael R. Mauger" "Michael Mauger")
("Michael D. Ernst" "Michael Ernst") ("Michael D. Ernst" "Michael Ernst")
@ -126,11 +162,15 @@ files.")
("Michael I. Bushnell" "Michael I Bushnell" "Michael I. Bushnell, p/BSG") ("Michael I. Bushnell" "Michael I Bushnell" "Michael I. Bushnell, p/BSG")
("Michael R. Cook" "Michael Cook") ("Michael R. Cook" "Michael Cook")
("Michael Sperber" "Mike Sperber" "Michael Sperber \\[Mr. Preprocessor\\]") ("Michael Sperber" "Mike Sperber" "Michael Sperber \\[Mr. Preprocessor\\]")
("Michalis V" "^mvar")
("Miha Rihtaršič" "Miha Rihtarsic")
("Mikio Nakajima" "Nakajima Mikio") ("Mikio Nakajima" "Nakajima Mikio")
("Nelson Jose dos Santos Ferreira" "Nelson Ferreira") ("Nelson Jose dos Santos Ferreira" "Nelson Ferreira")
("Noorul Islam" "Noorul Islam K M") ("Noorul Islam" "Noorul Islam K M")
;;; ("Tetsurou Okazaki" "OKAZAKI Tetsurou") ; FIXME? ;;; ("Tetsurou Okazaki" "OKAZAKI Tetsurou") ; FIXME?
("Óscar Fuentes" "Oscar Fuentes") ("Óscar Fuentes" "Oscar Fuentes")
(nil "pillule")
(nil "psyberbits@gmail.com")
("Paul Eggert" "Paul R\\. Eggert") ("Paul Eggert" "Paul R\\. Eggert")
("Pavel Janík" "Pavel Janík Ml." "Pavel Janik Ml." "Pavel Janik") ("Pavel Janík" "Pavel Janík Ml." "Pavel Janik Ml." "Pavel Janik")
("Pavel Kobiakov" "Pavel Kobyakov") ("Pavel Kobiakov" "Pavel Kobyakov")
@ -139,11 +179,15 @@ files.")
("Peter J. Weisberg" "PJ Weisberg") ("Peter J. Weisberg" "PJ Weisberg")
("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith") ("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith")
("Peter Runestig" "Peter 'luna' Runestig") ("Peter Runestig" "Peter 'luna' Runestig")
("Philip Kaludercic" "Philip K\\." "Philip K")
("Philipp Stephani" "Philipp .*phst@google") ("Philipp Stephani" "Philipp .*phst@google")
("Piotr Zieliński" "Piotr Zielinski") ("Piotr Zieliński" "Piotr Zielinski")
("Po Lu" "Po Lu Via") ; looks like a mistake
("Przemysław Wojnowski" "Przemyslaw Wojnowski") ("Przemysław Wojnowski" "Przemyslaw Wojnowski")
("R. Bernstein" "rb@dustyfeet.com")
("Rainer Schöpf" "Rainer Schoepf") ("Rainer Schöpf" "Rainer Schoepf")
("Raja R. Harinath" "Raja R Harinath") ("Raja R. Harinath" "Raja R Harinath")
("Rasmus Pank Roulund" "Rasmus .*rasmus@gmx")
("Richard G. Bielawski" "Richard G Bielawski" "Richard Bielawski") ("Richard G. Bielawski" "Richard G Bielawski" "Richard Bielawski")
("Richard King" "Dick King") ("Richard King" "Dick King")
("Richard M. Stallman" "Richard Stallman" "rms@gnu.org") ("Richard M. Stallman" "Richard Stallman" "rms@gnu.org")
@ -154,11 +198,14 @@ files.")
("Ron Schnell" "Ronnie Schnell") ("Ron Schnell" "Ronnie Schnell")
("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}") ("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}")
("Ryan Thompson" "Ryan .*rct@thompsonclan") ("Ryan Thompson" "Ryan .*rct@thompsonclan")
(nil "rzl24ozi")
("Sacha Chua" "Sandra Jean Chua") ("Sacha Chua" "Sandra Jean Chua")
("Sam Steingold" "Sam Shteingold") ("Sam Steingold" "Sam Shteingold")
("Satyaki Das" "Indexed search by Satyaki Das") ("Satyaki Das" "Indexed search by Satyaki Das")
("Sébastien Vauban" "Sebastien Vauban") ("Sébastien Vauban" "Sebastien Vauban")
("Sergey Litvinov" "Litvinov Sergey") ("Sergey Litvinov" "Litvinov Sergey")
("Simen Heggestøyl" "simenheg@gmail.com")
(nil "prime.wizard")
("Shun-ichi Goto" "Shun-ichi GOTO") ("Shun-ichi Goto" "Shun-ichi GOTO")
;; There are other Stefans. ;; There are other Stefans.
;;; ("Stefan Monnier" "Stefan") ;;; ("Stefan Monnier" "Stefan")
@ -170,6 +217,7 @@ files.")
("Takaaki Ota" "Tak Ota") ("Takaaki Ota" "Tak Ota")
("Takahashi Naoto" "Naoto Takahashi") ("Takahashi Naoto" "Naoto Takahashi")
("Teodor Zlatanov" "Ted Zlatanov") ("Teodor Zlatanov" "Ted Zlatanov")
(nil "^TEC")
(nil "The PCL-CVS Trust") (nil "The PCL-CVS Trust")
("Thomas Dye" "Tom Dye") ("Thomas Dye" "Tom Dye")
("Thomas Horsley" "Tom Horsley") ; FIXME ? ("Thomas Horsley" "Tom Horsley") ; FIXME ?
@ -181,16 +229,29 @@ files.")
("Toru Tomabechi" "Toru TOMABECHI") ("Toru Tomabechi" "Toru TOMABECHI")
("Tsugutomo Enami" "enami tsugutomo") ("Tsugutomo Enami" "enami tsugutomo")
("Ulrich Müller" "Ulrich Mueller") ("Ulrich Müller" "Ulrich Mueller")
(nil "vividsnow")
("Vincent Del Vecchio" "Vince Del Vecchio") ("Vincent Del Vecchio" "Vince Del Vecchio")
("William M. Perry" "Bill Perry") ("William M. Perry" "Bill Perry")
("Wlodzimierz Bzyl" "W.*dek Bzyl") ("Wlodzimierz Bzyl" "W.*dek Bzyl")
(nil "xyblor")
("Yoni Rabkin" "Yoni Rabkin Katzenell") ("Yoni Rabkin" "Yoni Rabkin Katzenell")
("Yoshinori Koseki" "KOSEKI Yoshinori" "小関 吉則") ("Yoshinori Koseki" "KOSEKI Yoshinori" "小関 吉則")
("Yutaka NIIBE" "NIIBE Yutaka") ("Yutaka NIIBE" "NIIBE Yutaka")
(nil "stardiviner")
(nil "lin.sun")
("Nitish Chinta" "nitishch")
("Carlos Pita" "memeplex")
("Vinicius Jose Latorre" "viniciusjl")
("Gaby Launay" "galaunay")
("Dick R. Chiang" "dickmao")
("Lin Zhou" "georgealbert@qq.com")
(nil "yan@metatem.net")
(nil "gnu_lists@halloleo.hailmail.net")
) )
"Alist of author aliases. "Alist of author aliases.
Each entry is of the form (REALNAME REGEXP...). If an author's name Each entry is of the form (REALNAME REGEXP...).
If an author's full name, as in \"J.R.Hacker <foobar.com>\",
matches one of the REGEXPs, use REALNAME instead. matches one of the REGEXPs, use REALNAME instead.
If REALNAME is nil, ignore that author.") If REALNAME is nil, ignore that author.")
@ -258,9 +319,9 @@ If REALNAME is nil, ignore that author.")
(defvar authors-obsolete-files-regexps (defvar authors-obsolete-files-regexps
'(".*loaddefs.el$" ; not obsolete, but auto-generated '(".*loaddefs\\.el\\'" ; not obsolete, but auto-generated
"\\.\\(bzr\\|cvs\\|git\\)ignore$" ; obsolete or uninteresting "\\.\\(bzr\\|cvs\\|git\\)ignore\\'" ; obsolete or uninteresting
"\\.arch-inventory$" "\\.arch-inventory\\'"
"ChangeLog\\(\\.[0-9]+\\)?\\'" "ChangeLog\\(\\.[0-9]+\\)?\\'"
"\\(automated\\|test\\)/data/" ; not interesting "\\(automated\\|test\\)/data/" ; not interesting
"cedet/tests/" "cedet/tests/"
@ -268,13 +329,16 @@ If REALNAME is nil, ignore that author.")
"\\`\\(indent\\|automated\\)\\'" "indent/" "mod-test/" "\\`\\(indent\\|automated\\)\\'" "indent/" "mod-test/"
"-resources/" "-resources/"
"unidata/.*\\.txt\\'" "unidata/.*\\.txt\\'"
"BidiCharacterTest.txt" "BidiCharacterTest\\.txt"
;; TODO lib/? Matches other things? ;; TODO lib/? Matches other things?
"build-aux/" "m4/" "Emacs.xcodeproj" "mapfiles" "\\.map\\'" "build-aux/" "m4/" "Emacs\\.xcodeproj" "mapfiles" "\\.map\\'"
"preferences\\.\\(nib\\|gorm\\)" "preferences\\.\\(nib\\|gorm\\)"
;; Generated files that have since been removed. ;; Generated files that have since been removed.
"\\(refcard\\(-de\\|-pl\\)?\\|calccard\\|dired-ref\\|orgcard\\|\ "\\(refcard\\(-de\\|-pl\\)?\\|calccard\\|dired-ref\\|orgcard\\|\
gnus-booklet\\|fr-drdref\\)\\.p\\(df\\|s\\)\\'") gnus-booklet\\|fr-drdref\\)\\.p\\(df\\|s\\)\\'"
;; Removed as obsolete
"README-ftp-server"
)
"List of regexps matching obsolete files. "List of regexps matching obsolete files.
Changes to files matching one of the regexps in this list are not listed.") Changes to files matching one of the regexps in this list are not listed.")
@ -294,11 +358,12 @@ Changes to files matching one of the regexps in this list are not listed.")
"NEWS.unicode" "COPYING.DJ" "Makefile.old" "Makefile.am" "NEWS.unicode" "COPYING.DJ" "Makefile.old" "Makefile.am"
"NEWS.1" "OOOOONEWS...OONEWS" "OOOONEWS" "etc/NEWS" "NEWS.1" "OOOOONEWS...OONEWS" "OOOONEWS" "etc/NEWS"
"NEWS.1-17" "NEWS.18" "NEWS.19" "NEWS.20" "NEWS.21" "NEWS.22" "NEWS.1-17" "NEWS.18" "NEWS.19" "NEWS.20" "NEWS.21" "NEWS.22"
"MAINTAINERS" "MH-E-NEWS" "NEWS.23" "NEWS.24" "NEWS.25" "NEWS.26" "NEWS.27" "NEWS.28"
"MAINTAINERS" "ERC-NEWS" "MH-E-NEWS" "NXML-NEWS"
"install.sh" "install-sh" "missing" "mkinstalldirs" "install.sh" "install-sh" "missing" "mkinstalldirs"
"termcap.dat" "termcap.src" "termcap.ucb" "termcap" "termcap.dat" "termcap.src" "termcap.ucb" "termcap"
"ChangeLog.nextstep" "Emacs.clr" "spec.txt" "ChangeLog.nextstep" "Emacs.clr" "spec.txt"
"gfdl.1" "gfdl.1" "ledit.l"
"texi/Makefile.in" "texi/Makefile.in"
"autodeps.mk" "autodeps.mk"
"lwlib/autodeps.mk" "lwlib/autodeps.mk"
@ -320,6 +385,8 @@ Changes to files matching one of the regexps in this list are not listed.")
"cedet/tests/test.py" "cedet/tests/test.py"
"cedet/tests/teststruct.cpp" "cedet/tests/teststruct.cpp"
"subdirs.el" "subdirs.el"
"etc/facemenu-removal.txt"
"src/bytecode.h"
"*.el" "*.el"
;; Autogen: ;; Autogen:
"cus-load.el" "finder-inf.el" "ldefs-boot.el" "loaddefs-boot.el" "cus-load.el" "finder-inf.el" "ldefs-boot.el" "loaddefs-boot.el"
@ -330,14 +397,24 @@ Changes to files matching one of the regexps in this list are not listed.")
"autogen/missing" "autogen" "autogen/missing" "autogen"
"autogen/copy_autogen" ; not generated, but trivial and now removed "autogen/copy_autogen" ; not generated, but trivial and now removed
"dir_top" "dir_top"
;; Imported into Emacs but externally maintained.
"publicsuffix.txt" "SKK-JISYO.L"
;; Only existed briefly, then renamed: ;; Only existed briefly, then renamed:
"images/icons/allout-widgets-dark-bg" "images/icons/allout-widgets-dark-bg"
"images/icons/allout-widgets-light-bg" "images/icons/allout-widgets-light-bg"
"lisp/shorthand.el"
"test/lisp/shorthand-tests.el"
"lisp/shorthands.el"
"test/src/comp-test-funcs.el"
"lisp/net/link.el"
"lisp/net/connection.el"
"lisp/net/dictionary-link.el"
"test/src/comp-test-funcs-dyn.el"
;; Never had any meaningful changes logged, now deleted: ;; Never had any meaningful changes logged, now deleted:
"lib/stdarg.in.h" "lib/stdbool.in.h" "lib/stdarg.in.h" "lib/stdbool.in.h"
"unidata/bidimirror.awk" "unidata/biditype.awk" "unidata/bidimirror.awk" "unidata/biditype.awk"
"split-man" "Xkeymap.txt" "ms-7bkermit" "ulimit.hack" "split-man" "Xkeymap.txt" "ms-7bkermit" "ulimit.hack"
"gnu-hp300" "refcard.bit" "ledit.l" "forms.README" "forms-d2.dat" "gnu-hp300" "refcard.bit" "forms.README" "forms-d2.dat"
"CXTERM-DIC/PY.tit" "CXTERM-DIC/ZIRANMA.tit" "CXTERM-DIC/PY.tit" "CXTERM-DIC/ZIRANMA.tit"
"CXTERM-DIC/CTLau.tit" "CXTERM-DIC/CTLauB.tit" "CXTERM-DIC/CTLau.tit" "CXTERM-DIC/CTLauB.tit"
"copying.paper" "celibacy.1" "condom.1" "echo.msg" "sex.6" "copying.paper" "celibacy.1" "condom.1" "echo.msg" "sex.6"
@ -391,7 +468,11 @@ Changes to files matching one of the regexps in this list are not listed.")
"vms" "mac" "url" "tree-widget" "vms" "mac" "url" "tree-widget"
"info/dir" "info/dir"
;; Not in gnulib anymore ;; Not in gnulib anymore
"lib/qset-acl.c" "lib/qcopy-acl.c" "lib/file-has-acl.c" "lib/qset-acl.c" "lib/qcopy-acl.c" "lib/file-has-acl.c" "lib/secure_getenv.c"
"lib/malloca.c" "lib/malloca.h"
;; Briefly added to repository from gnulib, but not used
"lib/localtime-buffer.c"
"lib/localtime-buffer.h"
;; files from old MS Windows build procedures ;; files from old MS Windows build procedures
"nt/gnulib-modules-to-delete.cfg" "nt/gnulib-modules-to-delete.cfg"
"makefile.w32-in" "makefile.w32-in"
@ -421,6 +502,57 @@ Changes to files matching one of the regexps in this list are not listed.")
"nt/subdirs.el" "nt/subdirs.el"
"config.nt" "config.nt"
"nextstep/WISHLIST" "nextstep/WISHLIST"
;; Removed, replaced by gitmerge.el
"admin/bzrmerge.el"
"bzrmerge.el"
;; Removed in commit f5090b91299
"lib/fdatasync.c"
;; Removed as obsolete
"nt/README-ftp-server"
"admin/notes/font-backend"
"gnus-overrides.texi"
"CENSORSHIP"
"GNU"
"LINUX-GNU"
"THE-GNU-PROJECT"
"WHY-FREE"
"MORE.STUFF"
"notes/font-backend"
"src/ftxfont.c"
"ftxfont.c"
"src/ptr-bounds.h"
"obsolete/options.el"
"obsolete/old-whitespace.el"
"obsolete/lucid.el"
;; ada-mode has been deleted, now in GNU ELPA
"ada-mode.texi"
"doc/misc/ada-mode.texi"
"lisp/progmodes/ada-mode.el"
"lisp/progmodes/ada-prj.el"
"lisp/progmodes/ada-xref.el"
"GNUS-NEWS"
"etc/GNUS-NEWS"
"doc/misc/gnus-news.el"
"src/fingerprint-dummy.c"
"src/fingerprint.h"
;; Replaced by lisp/thread.el
"lisp/emacs-lisp/thread-list.el"
"etc/images/slash.bmp"
"src/mini-gmp-emacs.c"
"lib/dosname.h"
"lib/putenv.c"
;; Moved to the org-contrib repo
"ob-asymptote.el"
"ob-shen.el"
"ob-picolisp.el"
"ob-io.el"
"ob-mscgen.el"
"ob-ledger.el"
"lisp/org/ob-abc.el"
"lisp/org/ob-ebnf.el"
"lisp/org/ob-J.el"
;; Removed -- for now.
"test/src/doc-tests.el"
) )
"List of files and directories to ignore. "List of files and directories to ignore.
Changes to files in this list are not listed.") Changes to files in this list are not listed.")
@ -557,7 +689,7 @@ Changes to files in this list are not listed.")
;; No longer distributed: lselect.el. ;; No longer distributed: lselect.el.
("Lucid, Inc." :changed "bytecode.c" "byte-opt.el" "byte-run.el" ("Lucid, Inc." :changed "bytecode.c" "byte-opt.el" "byte-run.el"
"bytecomp.el" "delsel.el" "disass.el" "faces.el" "font-lock.el" "bytecomp.el" "delsel.el" "disass.el" "faces.el" "font-lock.el"
"lmenu.el" "mailabbrev.el" "select.el" "xfaces.c" "xselect.c") "mailabbrev.el" "select.el" "xfaces.c" "xselect.c")
;; MCC. No longer distributed: emacsserver.c. ;; MCC. No longer distributed: emacsserver.c.
("Microelectronics and Computer Technology Corporation" ("Microelectronics and Computer Technology Corporation"
:changed "etags.c" "emacsclient.c" "movemail.c" :changed "etags.c" "emacsclient.c" "movemail.c"
@ -721,7 +853,7 @@ Changes to files in this list are not listed.")
"erc-hecomplete.el" "erc-hecomplete.el"
"eshell/esh-maint.el" "eshell/esh-maint.el"
"language/persian.el" "language/persian.el"
"ledit.el" "meese.el" "iswitchb.el" "longlines.el" "meese.el" "iswitchb.el" "longlines.el"
"mh-exec.el" "mh-init.el" "mh-customize.el" "mh-exec.el" "mh-init.el" "mh-customize.el"
"net/zone-mode.el" "xesam.el" "net/zone-mode.el" "xesam.el"
"term/mac-win.el" "sup-mouse.el" "term/mac-win.el" "sup-mouse.el"
@ -733,9 +865,14 @@ Changes to files in this list are not listed.")
"org-mac-message.el" "org-mew.el" "org-w3m.el" "org-vm.el" "org-wl.el" "org-mac-message.el" "org-mew.el" "org-w3m.el" "org-vm.el" "org-wl.el"
"org-mks.el" "org-remember.el" "org-xoxo.el" "org-docbook.el" "org-mks.el" "org-remember.el" "org-xoxo.el" "org-docbook.el"
"org-freemind.el" "ox-jsinfo.el" "org-freemind.el" "ox-jsinfo.el"
"org-irc.el" "org-rmail.el" "org-docview.el" "org-keys.el" "org-mhe.el"
"org-gnus.el" "org-bibtex.el" "org-bbdb.el" "org-info.el" "org-eshell.el"
"ob-keys.el"
"org-exp-blocks.el" ; maybe this is ob-exp now? dunno "org-exp-blocks.el" ; maybe this is ob-exp now? dunno
"org-lparse.el" "org-lparse.el"
"org-special-blocks.el" "org-taskjuggler.el" "org-special-blocks.el" "org-taskjuggler.el"
"ob-sh.el"
"ob-scala.el"
"progmodes/cap-words.el" "progmodes/cap-words.el"
"w32-common-fns.el" "w32-common-fns.el"
;; gnus ;; gnus
@ -747,11 +884,9 @@ Changes to files in this list are not listed.")
"gnus-compat.el" "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "pgg.el" "gnus-compat.el" "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "pgg.el"
"dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el" "dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el"
"gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el" "gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el"
"eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el" "earcon.el" "gnus-audio.el" "encrypt.el"
"format-spec.el" "gnus-move.el" "gnus-sync.el" "gnus-move.el" "gnus-sync.el"
"auth-source.el" "ecomplete.el" "gravatar.el" "mailcap.el" "plstore.el" "gnus-ems.el"
"pop3.el" "qp.el" "registry.el" "rfc2231.el" "rtree.el"
"sieve.el" "sieve-mode.el"
;; doc ;; doc
"getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi" "getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi"
"back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el" "back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el"
@ -801,7 +936,29 @@ Changes to files in this list are not listed.")
"cedet-utests.el" "ede-tests.el" "semantic-ia-utest.el" "cedet-utests.el" "ede-tests.el" "semantic-ia-utest.el"
"semantic-tests.el" "semantic-utest-c.el" "semantic-utest.el" "semantic-tests.el" "semantic-utest-c.el" "semantic-utest.el"
"srecode-tests.el" "make-test-deps.emacs-lisp" "srecode-tests.el" "make-test-deps.emacs-lisp"
) "nxml-uchnm.el"
"decoder-tests.el"
"obsolete/scribe.el"
"cp51932.el"
"eucjp-ms.el"
"lisp.mk"
"update-game-score.exe.manifest"
"lisp/obsolete/awk-mode.el"
"lisp/obsolete/iso-acc.el"
"lisp/obsolete/iso-insert.el"
"lisp/obsolete/resume.el"
"lisp/obsolete/scribe.el"
"lisp/obsolete/swedish.el"
"lisp/obsolete/spell.el"
"lisp/obsolete/swedish.el"
"lisp/obsolete/sym-comp.el"
"obsolete/sym-comp.el"
"library-of-babel.org"
"flymake-elisp.el"
"flymake-ui.el"
"pinentry.el"
"ledit.el"
"lmenu.el")
"File names which are valid, but no longer exist (or cannot be found) "File names which are valid, but no longer exist (or cannot be found)
in the repository.") in the repository.")
@ -810,6 +967,43 @@ in the repository.")
;; NB So only add a directory if needed to disambiguate. ;; NB So only add a directory if needed to disambiguate.
;; FIXME? ;; FIXME?
;; Although perhaps we could let authors-disambiguate-file-name do that? ;; Although perhaps we could let authors-disambiguate-file-name do that?
;;
;; WARNING: The semantics of these entries is tricky to grasp without
;; reading the code!
;; The rule is: for every file that was renamed or moved to another
;; directory, add an entry (OLD-NAME . NEW-BASENAME), where OLD-NAME
;; is the old name of the file as it appears in the ChangeLog files,
;; and NEW-BASENAME is the _basename_ of its new name. Yes, this
;; means that a file which was moved to another directory but kept its
;; basename will have a seemingly-silly entry ("foo" . "foo"). (Told
;; you: this is tricky!) If the moved/renamed file was mentioned in
;; several ChangeLog files with different leading directories, you
;; need to provide an entry for each such instance. For example, if
;; some ChangeLog mentioned a moved file as lisp/gnus/something.el and
;; another ChangeLog mentioned it as gnus/something.el, you need to
;; have two entries:
;;
;; ("gnus/something.el" . "something.el")
;; ("lisp/gnus/something.el" . "something.el")
;;
;; The important part is that the car of the entry should be identical
;; to how a file was mentioned in the respective ChangeLog. It is
;; advisable to run a Grep command such as
;;
;; fgrep -R BASENAME . --include='ChangeLog*'
;;
;; where BASENAME is the old basename of the renamed file. This will
;; show all the different reference forms of the file in the various
;; ChangeLog* files, and you can then prepare a separate entry for
;; each reference form.
;;
;; The cdr of the entry should generally be only the basename of the
;; file's current name, because that's how AUTHORS references files.
;; It _can_ have leading directories, but that is only
;; needed/advisable if there are several files in the tree that have
;; the same basename, and you want to disambiguate them, so that
;; people who actually contributed to different files aren't mentioned
;; as if they contributed to the same single file.
(defconst authors-renamed-files-alist (defconst authors-renamed-files-alist
'(("nt.c" . "w32.c") ("nt.h" . "w32.h") '(("nt.c" . "w32.c") ("nt.h" . "w32.h")
("ntheap.c" . "w32heap.c") ("ntheap.h" . "w32heap.h") ("ntheap.c" . "w32heap.c") ("ntheap.h" . "w32heap.h")
@ -817,8 +1011,9 @@ in the repository.")
("ntproc.c" . "w32proc.c") ("ntproc.c" . "w32proc.c")
("w32console.c" . "w32term.c") ("w32console.c" . "w32term.c")
("unexnt.c" . "unexw32.c") ("unexnt.c" . "unexw32.c")
("s/windowsnt.h" . "s/ms-w32.h") ("m/windowsnt.h" . "ms-w32.h")
("s/ms-w32.h" . "inc/ms-w32.h") ("s/windowsnt.h" . "ms-w32.h")
("s/ms-w32.h" . "ms-w32.h")
("src/config.h" . "config.h") ("src/config.h" . "config.h")
("winnt.el" . "w32-fns.el") ("winnt.el" . "w32-fns.el")
("linux.h" . "gnu-linux.h") ("linux.h" . "gnu-linux.h")
@ -841,6 +1036,10 @@ in the repository.")
("INSTALL.MSYS" . "INSTALL") ("INSTALL.MSYS" . "INSTALL")
("server.c" . "emacsserver.c") ("server.c" . "emacsserver.c")
("lib-src/etags.c" . "etags.c") ("lib-src/etags.c" . "etags.c")
;; gnulib
("lib/strftime.c" . "nstrftime.c")
("src/mini-gmp.c" . "mini-gmp.c")
("src/mini-gmp.h" . "mini-gmp.h")
;; msdos/ ;; msdos/
("is-exec.c" . "is_exec.c") ("is-exec.c" . "is_exec.c")
("enriched.doc" . "enriched.txt") ("enriched.doc" . "enriched.txt")
@ -856,6 +1055,7 @@ in the repository.")
("DIFF" . "OTHER.EMACSES") ("DIFF" . "OTHER.EMACSES")
("CCADIFF" . "OTHER.EMACSES") ("CCADIFF" . "OTHER.EMACSES")
("GOSDIFF" . "OTHER.EMACSES") ("GOSDIFF" . "OTHER.EMACSES")
("emacs.appdata.xml" . "emacs.metainfo.xml")
;; Nextstep ;; Nextstep
("nextstep/Cocoa/Emacs.base/Contents/Info.plist" . "nextstep/templates/Info.plist.in") ("nextstep/Cocoa/Emacs.base/Contents/Info.plist" . "nextstep/templates/Info.plist.in")
;; Moved from lisp/tpu-doc.el to etc/tpu-edt.doc in Emacs 19.29. ;; Moved from lisp/tpu-doc.el to etc/tpu-edt.doc in Emacs 19.29.
@ -886,6 +1086,7 @@ in the repository.")
("progmodes/octave-inf.el" . "octave.el") ("progmodes/octave-inf.el" . "octave.el")
("progmodes/octave-mod.el" . "octave.el") ("progmodes/octave-mod.el" . "octave.el")
;; Obsolete. ;; Obsolete.
("lisp/gs.el" . "gs.el")
("emacs-lisp/assoc.el" . "assoc.el") ("emacs-lisp/assoc.el" . "assoc.el")
("emacs-lisp/cust-print.el" . "cust-print.el") ("emacs-lisp/cust-print.el" . "cust-print.el")
("emacs-lisp/gulp.el" . "gulp.el") ("emacs-lisp/gulp.el" . "gulp.el")
@ -906,6 +1107,15 @@ in the repository.")
("patcomp.el" . "patcomp.el") ("patcomp.el" . "patcomp.el")
("emulation/ws-mode.el" . "ws-mode.el") ("emulation/ws-mode.el" . "ws-mode.el")
("vc/vc-arch.el" . "vc-arch.el") ("vc/vc-arch.el" . "vc-arch.el")
("lisp/gnus/messcompat.el" . "messcompat.el")
("html2text.el" . "html2text.el")
("lisp/net/html2text.el" . "html2text.el")
;; Obsolete in 28.1.
("inversion.el" . "inversion.el")
("test/lisp/cedet/inversion-tests.el" . "inversion-tests.el")
("test/lisp/mail/rfc2368-tests.el" . "rfc2368-tests.el")
;; This file was briefly obsolete:
("lisp/obsolete/erc-compat.el" . "erc-compat.el")
;; From lisp to etc/forms. ;; From lisp to etc/forms.
("forms-d2.el" . "forms-d2.el") ("forms-d2.el" . "forms-d2.el")
("forms-pass.el" . "forms-pass.el") ("forms-pass.el" . "forms-pass.el")
@ -913,7 +1123,10 @@ in the repository.")
("nxml/test.invalid.xml" . "test-invalid.xml") ("nxml/test.invalid.xml" . "test-invalid.xml")
("nxml/test.valid.xml" . "test-valid.xml") ("nxml/test.valid.xml" . "test-valid.xml")
("automated/Makefile.in" . "test/Makefile.in") ("automated/Makefile.in" . "test/Makefile.in")
("rmailmm.el" . "test/rmailmm.el") ;; rmailmm tests wandered from test/ to test/manual to test/lisp/mail/
("rmailmm.el" . "rmailmm-tests.el")
("test/rmailmm.el" . "rmailmm-tests.el")
("test/manual/rmailmm.el" . "rmailmm-tests.el")
;; The one in lisp is eshell/eshell.el. ;; The one in lisp is eshell/eshell.el.
("eshell.el" . "eshell-tests.el") ("eshell.el" . "eshell-tests.el")
("automated/eshell.el" . "eshell-tests.el") ("automated/eshell.el" . "eshell-tests.el")
@ -945,14 +1158,79 @@ in the repository.")
("major.texi" . "modes.texi") ("major.texi" . "modes.texi")
("msdog-xtra.texi" . "msdos-xtra.texi") ("msdog-xtra.texi" . "msdos-xtra.texi")
("msdog.texi" . "msdos.texi") ("msdog.texi" . "msdos.texi")
;; Moved from lisp/gnus/ to lisp/
("auth-source.el" . "auth-source.el")
("lisp/gnus/auth-source.el" . "auth-source.el")
("ecomplete.el" . "ecomplete.el")
("format-spec.el" . "format-spec.el")
("gnus/format-spec.el" . "format-spec.el")
("lisp/gnus/ecomplete.el" . "ecomplete.el")
("plstore.el" . "plstore.el")
("lisp/gnus/plstore.el" . "plstore.el")
("registry.el" . "registry.el")
("lisp/gnus/registry.el" . "registry.el")
("rtree.el" . "rtree.el")
;; Moved from lisp/gnus/ to lisp/calendar/ ;; Moved from lisp/gnus/ to lisp/calendar/
("time-date.el" . "calendar/time-date.el") ("time-date.el" . "time-date.el")
;; Moved from lisp/gnus/ to lisp/mail/ ;; Moved from lisp/gnus/ to lisp/mail/
("binhex.el" . "mail/binhex.el") ("binhex.el" . "binhex.el")
("uudecode.el" . "mail/uudecode.el") ("gnus/binhex.el" . "binhex.el")
("uudecode.el" . "uudecode.el")
("gnus/uudecode.el" . "uudecode.el")
("mail-parse.el" . "mail-parse.el")
("gnus/mail-parse.el" . "mail-parse.el")
("mail-prsvr.el" . "mail-prsvr.el")
("gnus/mail-prsvr.el" . "mail-prsvr.el")
("yenc.el" . "yenc.el")
("flow-fill.el" . "flow-fill.el")
("gnus/flow-fill.el" . "flow-fill.el")
("ietf-drums.el" . "ietf-drums.el")
("gnus/ietf-drums.el" . "ietf-drums.el")
("pop3.el" . "pop3.el")
("mail/pop3.el" . "pop3.el")
("gnus/pop3.el" . "pop3.el")
("lisp/gnus/pop3.el" . "pop3.el")
("qp.el" . "qp.el")
("gnus/qp.el" . "qp.el")
("lisp/gnus/qp.el" . "qp.el")
("rfc2045.el" . "rfc2045.el")
("gnus/rfc2045.el" . "rfc2045.el")
("rfc2047.el" . "rfc2047.el")
("gnus/rfc2047.el" . "rfc2047.el")
("rfc2231.el" . "rfc2231.el")
("gnus/rfc2231.el" . "rfc2231.el")
("lisp/gnus/rfc2231.el" . "rfc2231.el")
;; Moved from lisp/gnus/ to lisp/image/
("compface.el" . "compface.el")
("gravatar.el" . "gravatar.el")
("lisp/gnus/gravatar.el" . "gravatar.el")
;; Moved from lisp/gnus/ to lisp/net/ ;; Moved from lisp/gnus/ to lisp/net/
("eww.el" . "eww.el")
("net/eww.el" . "eww.el")
("lisp/new/eww.el" . "eww.el") ; an actual typo in ChangeLog.3
("gssapi.el" . "gssapi.el")
("lisp/gnus/gssapi.el" . "gssapi.el")
("imap.el" . "net/imap.el") ("imap.el" . "net/imap.el")
("mailcap.el" . "mailcap.el")
("gnus/mailcap.el" . "mailcap.el")
("lisp/gnus/mailcap.el" . "mailcap.el")
("rfc2104.el" . "net/rfc2104.el") ("rfc2104.el" . "net/rfc2104.el")
("starttls.el" . "starttls.el")
("lisp/net/starttls.el" . "starttls.el") ; moved to obsolete/
("shr.el" . "shr.el")
("net/shr.el" . "shr.el")
("shr-color.el" . "shr-color.el")
("sieve-manage.el" . "sieve-manage.el")
("sieve-mode.el" . "sieve-mode.el")
("sieve.el" . "sieve.el")
("lisp/gnus/sieve-manage.el" . "sieve-manage.el")
("lisp/gnus/sieve-mode.el" . "sieve-mode.el")
("lisp/gnus/sieve.el" . "sieve.el")
;; Moved from lisp/gnus/ to lisp/international
("rfc1843.el" . "rfc1843.el")
("gnus/rfc1843.el" . "rfc1843.el")
("utf7.el" . "utf7.el")
("gnus/utf7.el" . "utf7.el")
;; And from emacs/ to misc/ and back again. ;; And from emacs/ to misc/ and back again.
("ns-emacs.texi" . "macos.texi") ("ns-emacs.texi" . "macos.texi")
("overrides.texi" . "gnus-overrides.texi") ("overrides.texi" . "gnus-overrides.texi")
@ -967,7 +1245,7 @@ in the repository.")
("ED.WORSHIP" . "JOKES") ("ED.WORSHIP" . "JOKES")
("GNU.JOKES" . "JOKES") ("GNU.JOKES" . "JOKES")
("CHARACTERS" . "TODO") ("CHARACTERS" . "TODO")
("lisp/character-fold.el" . "lisp/char-fold.el") ("lisp/character-fold.el" . "char-fold.el")
("test/automated/character-fold-tests.el" . "char-fold-tests.el") ("test/automated/character-fold-tests.el" . "char-fold-tests.el")
("test/automated/char-fold-tests.el" . "char-fold-tests.el") ("test/automated/char-fold-tests.el" . "char-fold-tests.el")
("test/lisp/character-fold-tests.el" . "char-fold-tests.el") ("test/lisp/character-fold-tests.el" . "char-fold-tests.el")
@ -993,6 +1271,7 @@ in the repository.")
("edt-user.doc" . "edt.texi") ("edt-user.doc" . "edt.texi")
("DEV-NOTES" . "nextstep") ("DEV-NOTES" . "nextstep")
("org/COPYRIGHT-AND-LICENSE" . "org/README") ("org/COPYRIGHT-AND-LICENSE" . "org/README")
("lisp/net/idna.el" . "puny.el")
;; Moved to different directories. ;; Moved to different directories.
("ctags.1" . "ctags.1") ("ctags.1" . "ctags.1")
("etags.1" . "etags.1") ("etags.1" . "etags.1")
@ -1008,7 +1287,8 @@ in the repository.")
("grammars" . "grammars") ("grammars" . "grammars")
;; Moved from lisp/emacs-lisp/ to admin/. ;; Moved from lisp/emacs-lisp/ to admin/.
("emacs-lisp/authors.el" . "authors.el") ("emacs-lisp/authors.el" . "authors.el")
("emacs-lisp/find-gc.el" . "admin/find-gc.el") ("find-gc.el" . "find-gc.el")
("emacs-lisp/find-gc.el" . "find-gc.el")
;; From etc to lisp/cedet/semantic/. ;; From etc to lisp/cedet/semantic/.
("grammars/bovine-grammar.el" . "bovine/grammar.el") ("grammars/bovine-grammar.el" . "bovine/grammar.el")
("grammars/wisent-grammar.el" . "wisent/grammar.el") ("grammars/wisent-grammar.el" . "wisent/grammar.el")
@ -1016,11 +1296,47 @@ in the repository.")
("nt/README.W32" . "README.W32") ("nt/README.W32" . "README.W32")
("notes/BRANCH" . "notes/repo") ("notes/BRANCH" . "notes/repo")
("notes/bzr" . "notes/repo") ("notes/bzr" . "notes/repo")
;; moved from lisp/ to lisp/net/ ;; moved from lisp/ to lisp/net/, then removed
("lisp/pinentry.el" . "lisp/net/pinentry.el") ("pinentry.el" . "pinentry.el")
("lisp/pinentry.el" . "pinentry.el")
("lisp/net/pinentry.el" . "pinentry.el")
;; module.* moved to emacs-module.* ;; module.* moved to emacs-module.*
("src/module.h" . "src/emacs-module.h") ("src/module.h" . "emacs-module.h")
("src/module.c" . "src/emacs-module.c") ("src/module.c" . "emacs-module.c")
("test/src/regex-tests.el" . "regex-emacs-tests.el")
("test/lisp/emacs-lisp/cl-tests.el" . "cl-tests.el")
("url-ns.el" . "url-ns.el")
("gnus-news.texi" . "gnus.texi")
("doc/misc/gnus-news.texi" . "gnus.texi")
("lisp/multifile.el" . "fileloop.el")
("lisp/emacs-lisp/thread.el" . "thread.el")
;; cl.el was retired, replaced by cl-lib.el, and we want to
;; pretend they are the same file...
("emacs-lisp/cl.el" . "cl-lib.el")
("lisp/emacs-lisp/cl.el" . "cl-lib.el")
("lisp/obsolete/cl.el" . "cl-lib.el")
("mantemp.el" . "mantemp.el")
("lisp/progmodes/mantemp.el" . "mantemp.el")
("progmodes/mantemp.el" . "mantemp.el")
("sysdep.c" . "src/sysdep.c")
;; nnir.el started in lisp/gnus/ChangeLog.*, then was
;; lisp/gnus/nnir.el in ChangeLog.[123], and is now
;; lisp/obsolete/nnir.el.
("nnir.el" . "nnir.el")
("lisp/gnus/nnir.el" . "nnir.el")
;; regex.[ch] are mentioned as src/regex.[ch] in ChangeLog.[123],
;; but as just regex.[ch] in src/ChangeLog.*, so we need 2 entries
;; for each one of them.
("regex.c" . "regex-emacs.c")
("regex.h" . "regex-emacs.h")
("src/regex.c" . "regex-emacs.c")
("src/regex.h" . "regex-emacs.h")
("test/manual/rmailmm.el" . "rmailmm-tests.el")
("test/lisp/cedet/semantic-utest-fmt.el" . "format-tests.el")
("test/lisp/emacs-lisp/tabulated-list-test.el" . "tabulated-list-tests.el")
("test/lisp/url/url-handlers-test.el" . "url-handlers-tests.el")
("test/src/dired-tests.el" . "dired-tests.el")
(".dir-locals.el" . ".dir-locals.el")
) )
"Alist of files which have been renamed during their lifetime. "Alist of files which have been renamed during their lifetime.
Elements are (OLDNAME . NEWNAME).") Elements are (OLDNAME . NEWNAME).")
@ -1042,7 +1358,7 @@ Elements are (OLDNAME . NEWNAME).")
\\(\\(cs\\|fr\\|sk\\)-\\)?survival\\)\\.tex\\'" "refcards/\\&") \\(\\(cs\\|fr\\|sk\\)-\\)?survival\\)\\.tex\\'" "refcards/\\&")
("\\`refcard-\\(de\\|pl\\)\\.tex\\'" "refcards/\\1-refcard.tex") ("\\`refcard-\\(de\\|pl\\)\\.tex\\'" "refcards/\\1-refcard.tex")
("\\`\\(refcards/\\)?fr-drdref\\.tex\\'" "refcards/fr-dired-ref.tex") ("\\`\\(refcards/\\)?fr-drdref\\.tex\\'" "refcards/fr-dired-ref.tex")
("^\\(TUTORIAL[^/]*\\)" "tutorials/\\1") ("\\`\\(TUTORIAL[^/]*\\)" "tutorials/\\1")
("\\`themes/dev-\\(tsdh-\\(?:light\\|dark\\)-theme\\.el\\)\\'" ("\\`themes/dev-\\(tsdh-\\(?:light\\|dark\\)-theme\\.el\\)\\'"
"themes/\\1") "themes/\\1")
;; Moved from lisp/toolbar to etc/images. ;; Moved from lisp/toolbar to etc/images.
@ -1067,9 +1383,9 @@ remove\\|run\\|until\\|up\\|watch\\)\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
("\\`\\(toolbar/gud-\\|images/gud/\\)s\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'" ("\\`\\(toolbar/gud-\\|images/gud/\\)s\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
"images/gud/step\\2\\3") "images/gud/step\\2\\3")
("\\`toolbar/lc-\\([-a-z]+\\.xpm\\)\\'" "images/low-color/\\1") ("\\`toolbar/lc-\\([-a-z]+\\.xpm\\)\\'" "images/low-color/\\1")
("^\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.\\(png\\|xpm\\)\\)$" ("\\`\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.\\(png\\|xpm\\)\\)\\'"
"images/\\1") "images/\\1")
("^\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)" ("\\`\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)"
"\\1\\2\\3_mac\\4") "\\1\\2\\3_mac\\4")
("\\(images/icons/\\)emacs_\\([0-9][0-9]\\)\\.png" ("\\(images/icons/\\)emacs_\\([0-9][0-9]\\)\\.png"
"\\1hicolor/\\2x\\2/apps/emacs.png") "\\1hicolor/\\2x\\2/apps/emacs.png")
@ -1090,7 +1406,7 @@ ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
("\\`org-\\(ascii\\|beamer\\|html\\|icalendar\\|jsinfo\\|latex\ ("\\`org-\\(ascii\\|beamer\\|html\\|icalendar\\|jsinfo\\|latex\
\\|odt\\|publish\\)\\.el\\'" "ox-\\1.el") \\|odt\\|publish\\)\\.el\\'" "ox-\\1.el")
;; From test/ to test/automated/. ;; From test/ to test/automated/.
("comint-testsuite.el" "automated/\\&") ("comint-testsuite\\.el" "automated/\\&")
("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\ ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\
-testsuite\\.el" "\\1-tests.el") -testsuite\\.el" "\\1-tests.el")
("automated/flymake/warnpred/\\(Makefile\\|test\\.\\(?:c\\|pl\\)\\)\\'" ("automated/flymake/warnpred/\\(Makefile\\|test\\.\\(?:c\\|pl\\)\\)\\'"
@ -1100,10 +1416,10 @@ ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
;; Maybe not the exact new name, but disambiguates from lisp/. ;; Maybe not the exact new name, but disambiguates from lisp/.
("automated/\\([^/]*\\)\\.el\\'" "\\1-tests.el") ("automated/\\([^/]*\\)\\.el\\'" "\\1-tests.el")
;; NB lax rules should come last. ;; NB lax rules should come last.
("^m/m-\\(.*\\.h\\)$" "m/\\1" t) ("\\`m/m-\\(.*\\.h\\)\\'" "m/\\1" t)
("^m-\\(.*\\.h\\)$" "\\1" t) ("\\`m-\\(.*\\.h\\)\\'" "\\1" t)
("^s/s-\\(.*\\.h\\)$" "s/\\1" t) ("\\`s/s-\\(.*\\.h\\)\\'" "s/\\1" t)
("^s-\\(.*\\.h\\)$" "\\1" t) ("\\`s-\\(.*\\.h\\)\\'" "\\1" t)
("\\.\\(el\\|[ch]\\|x[pb]m\\|pbm\\)\\'" t t) ("\\.\\(el\\|[ch]\\|x[pb]m\\|pbm\\)\\'" t t)
) )
"List of regexps and rewriting rules for renamed files. "List of regexps and rewriting rules for renamed files.
@ -1138,7 +1454,7 @@ Additionally, for these logs we apply the `lax' elements of
(defun authors-disambiguate-file-name (fullname) (defun authors-disambiguate-file-name (fullname)
"Convert FULLNAME to an unambiguous relative-name." "Convert FULLNAME to an unambiguous relative-name."
(let ((relname (file-name-nondirectory fullname)) (let ((relname (file-name-nondirectory fullname))
dir parent) dir)
(if (and (member relname authors-ambiguous-files) (if (and (member relname authors-ambiguous-files)
;; Try to identify the top-level directory. ;; Try to identify the top-level directory.
;; FIXME should really use ROOT from M-x authors. ;; FIXME should really use ROOT from M-x authors.
@ -1150,8 +1466,8 @@ Additionally, for these logs we apply the `lax' elements of
;; I think it looks weird to see eg "lisp/simple.el". ;; I think it looks weird to see eg "lisp/simple.el".
;; But for eg Makefile.in, we do want to say "lisp/Makefile.in". ;; But for eg Makefile.in, we do want to say "lisp/Makefile.in".
(if (and (string-equal "lisp" (if (and (string-equal "lisp"
(setq parent (file-name-nondirectory (file-name-nondirectory
(directory-file-name dir)))) (directory-file-name dir)))
;; TODO better to simply have hard-coded list? ;; TODO better to simply have hard-coded list?
;; Only really Makefile.in where this applies. ;; Only really Makefile.in where this applies.
(not (file-exists-p (not (file-exists-p
@ -1175,10 +1491,14 @@ Additionally, for these logs we apply the `lax' elements of
(defun authors-canonical-file-name (file log-file pos author) (defun authors-canonical-file-name (file log-file pos author)
"Return canonical file name for FILE found in LOG-FILE. "Return canonical file name for FILE found in LOG-FILE.
FILE is the file name as it appears in LOG-FILE, including any
leading directories mentioned there.
LOG-FILE is an absolute file name of the log file we are scanning.
Checks whether FILE is a valid (existing) file name, has been renamed, Checks whether FILE is a valid (existing) file name, has been renamed,
or is on the list of removed files. Returns the non-directory part of or is on the list of removed files. Returns the non-directory part of
the file name. Only uses the LOG-FILE position POS and associated AUTHOR the file name to use for FILE in the \"AUTHORS\" file.
to print a message if FILE is not found." Only uses the LOG-FILE position POS and associated AUTHOR to print a
message if FILE is not found."
;; FILE should be re-checked in every different directory associated ;; FILE should be re-checked in every different directory associated
;; with a LOG-FILE. Eg configure.ac from src/ChangeLog is not the ;; with a LOG-FILE. Eg configure.ac from src/ChangeLog is not the
;; same as that from top-level/ChangeLog. ;; same as that from top-level/ChangeLog.
@ -1188,6 +1508,8 @@ to print a message if FILE is not found."
(if entry (if entry
(cdr entry) (cdr entry)
(setq relname (file-name-nondirectory file)) (setq relname (file-name-nondirectory file))
;; File names in `authors-valid-file-names' are OK by
;; definition, so no need to check those.
(if (or (member file authors-valid-file-names) (if (or (member file authors-valid-file-names)
(member relname authors-valid-file-names) (member relname authors-valid-file-names)
(file-exists-p file) (file-exists-p file)
@ -1214,7 +1536,7 @@ to print a message if FILE is not found."
(unless (or valid (unless (or valid
(member file authors-ignored-files) (member file authors-ignored-files)
(authors-obsolete-file-p file) (authors-obsolete-file-p file)
(string-match "[*]" file) (string-search "*" file)
(string-match "^[0-9.]+$" file) (string-match "^[0-9.]+$" file)
laxlog) laxlog)
(setq authors-invalid-file-names (setq authors-invalid-file-names
@ -1299,9 +1621,10 @@ it is found in `authors-fixed-case'."
(setq author (replace-regexp-in-string "[ \t]+" " " author)) (setq author (replace-regexp-in-string "[ \t]+" " " author))
;; NB this ignores the first name only case. ;; NB this ignores the first name only case.
(unless (string-match "[-, \t]" author) (unless (string-match "[-, \t]" author)
(push (format-message "%s:%d: ignored `%s'" (or (authors-lax-changelog-p file)
file (1+ (count-lines (point-min) pos)) author) (push (format-message "%s:%d: ignored `%s'"
authors-ignored-names) file (1+ (count-lines (point-min) pos)) author)
authors-ignored-names))
(setq author "")) (setq author ""))
(or (car (member author authors-fixed-case)) (or (car (member author authors-fixed-case))
(capitalize author)))) (capitalize author))))
@ -1348,7 +1671,7 @@ Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
((looking-at "^[ \t]+\\*") ((looking-at "^[ \t]+\\*")
(let ((line (buffer-substring-no-properties (let ((line (buffer-substring-no-properties
(match-end 0) (line-end-position)))) (match-end 0) (line-end-position))))
(while (and (not (string-match ":" line)) (while (and (not (string-search ":" line))
(forward-line 1) (forward-line 1)
(not (looking-at ":\\|^[ \t]*$"))) (not (looking-at ":\\|^[ \t]*$")))
(setq line (concat line (setq line (concat line
@ -1358,7 +1681,7 @@ Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
(when (string-match ":" line) (when (string-match ":" line)
(setq line (substring line 0 (match-beginning 0))) (setq line (substring line 0 (match-beginning 0)))
(setq line (replace-regexp-in-string "[[(<{].*$" "" line)) (setq line (replace-regexp-in-string "[[(<{].*$" "" line))
(setq line (replace-regexp-in-string "," "" line)) (setq line (string-replace "," "" line))
(dolist (file (split-string line)) (dolist (file (split-string line))
(when (setq file (authors-canonical-file-name file log-file pos (car authors))) (when (setq file (authors-canonical-file-name file log-file pos (car authors)))
(dolist (author authors) (dolist (author authors)
@ -1452,9 +1775,9 @@ and changed by AUTHOR."
(cons (cons file (cdr (assq :changed actions))) (cons (cons file (cdr (assq :changed actions)))
changed-list)))))) changed-list))))))
(if wrote-list (if wrote-list
(setq wrote-list (sort wrote-list 'string-lessp))) (setq wrote-list (sort wrote-list #'string-lessp)))
(if cowrote-list (if cowrote-list
(setq cowrote-list (sort cowrote-list 'string-lessp))) (setq cowrote-list (sort cowrote-list #'string-lessp)))
(when changed-list (when changed-list
(setq changed-list (sort changed-list (setq changed-list (sort changed-list
(lambda (a b) (lambda (a b)
@ -1462,7 +1785,7 @@ and changed by AUTHOR."
(string-lessp (car a) (car b)) (string-lessp (car a) (car b))
(> (cdr a) (cdr b)))))) (> (cdr a) (cdr b))))))
(setq nchanged (length changed-list)) (setq nchanged (length changed-list))
(setq changed-list (mapcar 'car changed-list))) (setq changed-list (mapcar #'car changed-list)))
(if (> (- nchanged authors-many-files) 2) (if (> (- nchanged authors-many-files) 2)
(setcdr (nthcdr authors-many-files changed-list) (setcdr (nthcdr authors-many-files changed-list)
(list (format "and %d other files" (- nchanged authors-many-files))))) (list (format "and %d other files" (- nchanged authors-many-files)))))
@ -1493,7 +1816,8 @@ and a buffer *Authors Errors* containing references to unknown files."
;; the versioned ChangeLog.N rather than the unversioned ChangeLog. ;; the versioned ChangeLog.N rather than the unversioned ChangeLog.
(zerop (call-process "make" nil nil nil (zerop (call-process "make" nil nil nil
"-C" root "change-history-nocommit")) "-C" root "change-history-nocommit"))
(error "Problem updating ChangeLog")) (error (substitute-command-keys
"Problem updating ChangeLog, try \"\\[universal-argument] \\[authors]\"")))
(let ((logs (process-lines find-program root "-name" "ChangeLog*")) (let ((logs (process-lines find-program root "-name" "ChangeLog*"))
(table (make-hash-table :test 'equal)) (table (make-hash-table :test 'equal))
(buffer-name "*Authors*") (buffer-name "*Authors*")
@ -1559,7 +1883,7 @@ list of their contributions.\n")
(insert "\n ")) (insert "\n "))
(insert " " file)) (insert " " file))
(insert "\n"))))) (insert "\n")))))
(insert "\nLocal" " Variables:\ncoding: " (insert "\nLocal" " Variables:\nmode: emacs-authors\ncoding: "
(symbol-name authors-coding-system) "\nEnd:\n") (symbol-name authors-coding-system) "\nEnd:\n")
(message "Generating buffer %s... done" buffer-name) (message "Generating buffer %s... done" buffer-name)
(unless noninteractive (unless noninteractive
@ -1571,12 +1895,12 @@ list of their contributions.\n")
(when authors-invalid-file-names (when authors-invalid-file-names
(insert "Unrecognized file entries found:\n\n") (insert "Unrecognized file entries found:\n\n")
(mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n"))) (mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n")))
(sort authors-invalid-file-names 'string-lessp))) (sort authors-invalid-file-names #'string-lessp)))
(when authors-ignored-names (when authors-ignored-names
(insert "\n\nThese authors were ignored:\n\n" (insert "\n\nThese authors were ignored:\n\n"
(mapconcat (mapconcat
'identity #'identity
(sort authors-ignored-names 'string-lessp) "\n"))) (sort authors-ignored-names #'string-lessp) "\n")))
(goto-char (point-min)) (goto-char (point-min))
(compilation-mode) (compilation-mode)
(message "Errors were found. See buffer %s" (buffer-name)))) (message "Errors were found. See buffer %s" (buffer-name))))

267
admin/automerge Executable file
View file

@ -0,0 +1,267 @@
#!/bin/bash
### automerge - automatically merge the Emacs release branch to master
## Copyright (C) 2018-2022 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## Maintainer: Stefan Kangas <stefankangas@gmail.com>
## 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 <https://www.gnu.org/licenses/>.
### Commentary:
## Automatically merge the Emacs release branch to master.
## If the merge succeeds, optionally build and test the results,
## and then push it.
## Intended usage:
## Have a dedicated git directory just for this.
## Have a cron job that calls this script with -r -p.
##
## Modifying a running shell script can have unpredictable results,
## so the paranoid will first make a copy of this script, and then run
## it with the -d option in the repository directory, in case a pull
## updates this script while it is working.
set -o nounset
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $*" >&2
exit 1
}
PN=${0##*/} # basename of script
PD=${0%/*}
[ "$PD" = "$0" ] && PD=. # if PATH includes PWD
usage ()
{
cat 1>&2 <<EOF
Usage: ${PN} [-b] [-d] [-e emacs] [-n nmin] [-p] [-r] [-t] [-- mflags]
Merge the Emacs release branch to master.
Passes any non-option args to make (eg -- -j2).
Options:
-d: no initial cd to parent of script directory
-e: Emacs executable to use for the initial merge (default $emacs)
-n: minimum number of commits to try merging (default $nmin)
-b: try to build after merging
-t: try to check after building
-p: if merge, build, check all succeed, push when finished (caution!)
-r: start by doing a hard reset (caution!) and pull
EOF
exit 1
}
## Defaults.
emacs=emacs
nmin=10
build=
test=
push=
quiet=
reset=
nocd=
while getopts ":hbde:n:pqrt" option ; do
case $option in
(h) usage ;;
(b) build=1 ;;
(d) nocd=1 ;;
(e) emacs=$OPTARG ;;
(n) nmin=$OPTARG ;;
(p) push=1 ;;
(q) quiet=1 ;;
(r) reset=1 ;;
(t) test=1 ;;
(\?) die "Bad option -$OPTARG" ;;
(:) die "Option -$OPTARG requires an argument" ;;
(*) die "getopts error" ;;
esac
done
shift $(( --OPTIND ))
OPTIND=1
[ "$nocd" ] || {
# $PD should be the admin directory
cd $PD || die "Could not change directory to $PD"
cd ../
}
[ -d admin ] || die "Could not locate admin directory"
[ -e .git ] || die "No .git"
## Does not work 100% because a lot of Emacs batch output comes on
## stderr (?).
[ "$quiet" ] && exec 1> /dev/null
[ "$push" ] && test=1
[ "$test" ] && build=1
if [ -x "$(command -v mktemp)" ]; then
tempfile=$(mktemp "/tmp/$PN.XXXXXXXXXX")
else
tempfile=/tmp/$PN.$$
fi
trap 'rm -f $tempfile 2> /dev/null' EXIT
[ -e Makefile ] && [ "$build" ] && {
echo "Cleaning..."
make maintainer-clean >& /dev/null
}
[ "$reset" ] && {
echo "Resetting..."
git reset -q --hard origin/master || die "reset error"
echo "Pulling..."
git pull -q --ff-only || die "pull error"
}
rev=$(git rev-parse HEAD)
[ "$(git rev-parse @{u})" = "$rev" ] || die "Local state does not match origin"
merge ()
{
echo "Merging..."
if $emacs --batch -Q -l ./admin/gitmerge.el \
--eval "(setq gitmerge-minimum-missing $nmin)" -f gitmerge \
>| "$tempfile" 2>&1; then
echo "merged ok"
return 0
else
grep -E "Nothing to merge|Number of missing commits" "$tempfile" && \
exit 0
cat "$tempfile" 1>&2
die "merge error"
fi
}
merge
## FIXME it would be better to trap this in gitmerge.
## NEWS should never be modified, only eg NEWS.26.
git diff --stat --cached origin/master | grep -q "etc/NEWS " && \
die "etc/NEWS has been modified"
[ "$build" ] || exit 0
echo "Running autoreconf..."
autoreconf -i -I m4 2>| "$tempfile"
retval=$?
## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr.
if [ "$quiet" ]; then
grep -v 'installing `\.' "$tempfile" 1>&2
else
cat "$tempfile" 1>&2
fi
[ $retval -ne 0 ] && die "autoreconf error"
echo "Running ./configure..."
## Minimize required packages.
./configure --without-x || die "configure error"
echo "Building..."
make "$@" || die "make error"
echo "Build finished ok"
[ "$test" ] || exit 0
echo "Testing..."
## We just want a fast pass/fail, we don't want to debug.
make "$@" check TEST_LOAD_EL=no || die "check error"
echo "Tests finished ok"
[ "$push" ] || exit 0
## In case someone else pushed while we were working.
echo "Checking for remote changes..."
git fetch || die "fetch error"
[ "$(git rev-parse @{u})" = "$rev" ] || {
echo "Upstream has changed"
## Rebasing would be incorrect, since it would rewrite the
## (already published) release branch commits.
## Ref eg https://lists.gnu.org/r/emacs-devel/2014-12/msg01435.html
## Instead, we throw away what we just did, and do the merge again.
echo "Resetting..."
git reset --hard "$rev"
echo "Pulling..."
git pull --ff-only || die "pull error"
merge
## If the merge finished ok again, we don't bother doing a second
## build and test.
}
echo "Pushing..."
git push || die "push error"
exit 0
### automerge ends here

View file

@ -1,7 +1,7 @@
#! /usr/bin/perl #! /usr/bin/perl
# Build Emacs in several different configurations. # Build Emacs in several different configurations.
# Copyright (C) 2001-2017 Free Software Foundation, Inc. # Copyright (C) 2001-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.

View file

@ -1,359 +0,0 @@
;;; bzrmerge.el --- help merge one Emacs bzr branch to another
;; Copyright (C) 2010-2017 Free Software Foundation, Inc.
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords: maint
;; 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 <https://www.gnu.org/licenses/>.
;;; Commentary:
;; Some usage notes are in admin/notes/bzr.
;;; Code:
(eval-when-compile (require 'cl-lib))
(defvar bzrmerge-skip-regexp
"back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\
Auto-commit"
"Regexp matching logs of revisions that might be skipped.
`bzrmerge-missing' will ask you if it should skip any matches.")
(defconst bzrmerge-buffer "*bzrmerge*"
"Working buffer for bzrmerge.")
(defconst bzrmerge-warning-buffer "*bzrmerge warnings*"
"Buffer where bzrmerge will display any warnings.")
(defun bzrmerge-merges ()
"Return the list of already merged (not yet committed) revisions.
The list returned is sorted by oldest-first."
(with-current-buffer (get-buffer-create bzrmerge-buffer)
(erase-buffer)
;; We generally want to make sure we start with a clean tree, but we also
;; want to allow restarts (i.e. with some part of FROM already merged but
;; not yet committed). Unversioned (unknown) files in the tree
;; are also ok.
(call-process "bzr" nil t nil "status" "-v")
(goto-char (point-min))
(when (re-search-forward "^conflicts:\n" nil t)
(user-error "You still have unresolved conflicts"))
(let ((merges ())
found)
(if (not (re-search-forward "^pending merges:\n" nil t))
(when (save-excursion
(goto-char (point-min))
(while (and
(re-search-forward "^\\([a-z ]*\\):\n" nil t)
(not
(setq found
(not (equal "unknown" (match-string 1)))))))
found)
(user-error "You still have uncommitted changes"))
;; This is really stupid, but it seems there's no easy way to figure
;; out which revisions have been merged already. The only info I can
;; find is the "pending merges" from "bzr status -v", which is not
;; very machine-friendly.
(while (not (eobp))
(skip-chars-forward " ")
(push (buffer-substring (point) (line-end-position)) merges)
(forward-line 1)))
merges)))
(defun bzrmerge-check-match (merge)
;; Make sure the MERGES match the revisions on the FROM branch.
;; Stupidly the best form of MERGES I can find is the one from
;; "bzr status -v" which is very machine non-friendly, so I have
;; to do some fuzzy matching.
(let ((author
(or
(save-excursion
(if (re-search-forward "^author: *\\([^<]*[^ ]\\) +<.*"
nil t)
(match-string 1)))
(save-excursion
(if (re-search-forward
"^committer: *\\([^<]*[^< ]\\) +<" nil t)
(match-string 1)))))
(timestamp
(save-excursion
(if (re-search-forward
"^timestamp:[^0-9]*\\([-0-9]+\\)" nil t)
(match-string 1))))
(line1
(save-excursion
(if (re-search-forward "^message:[ \n]*" nil t)
(buffer-substring (point) (line-end-position))))))
;; The `merge' may have a truncated line1 with "...", so get
;; rid of any "..." and then look for a prefix match.
(when (string-match "\\.+\\'" merge)
(setq merge (substring merge 0 (match-beginning 0))))
(or (string-prefix-p
merge (concat author " " timestamp " " line1))
(string-prefix-p
merge (concat author " " timestamp " [merge] " line1)))))
(defun bzrmerge-missing (from merges)
"Return the list of revisions that need to be merged.
MERGES is the revisions already merged but not yet committed.
Asks about skipping revisions with logs matching `bzrmerge-skip-regexp'.
The result is of the form (TOMERGE . TOSKIP) where TOMERGE and TOSKIP
are both lists of revnos, in oldest-first order."
(with-current-buffer (get-buffer-create bzrmerge-buffer)
(erase-buffer)
(call-process "bzr" nil t nil "missing" "--theirs-only"
(expand-file-name from))
(let ((revnos ()) (skipped ()))
(pop-to-buffer (current-buffer))
(goto-char (point-max))
(while (re-search-backward "^------------------------------------------------------------\nrevno: \\([0-9.]+\\).*" nil t)
(save-excursion
(if merges
(while (not (bzrmerge-check-match (pop merges)))
(unless merges
(error "Unmatched tip of merged revisions")))
(let ((case-fold-search t)
(revno (match-string 1))
(skip nil))
(if (string-match "\\." revno)
(error "Unexpected dotted revno!")
(setq revno (string-to-number revno)))
(re-search-forward "^message:\n")
(while (and (not skip)
(re-search-forward bzrmerge-skip-regexp nil t))
(let ((str (buffer-substring (line-beginning-position)
(line-end-position))))
(when (string-match "\\` *" str)
(setq str (substring str (match-end 0))))
(when (string-match "[.!;, ]+\\'" str)
(setq str (substring str 0 (match-beginning 0))))
(let ((help-form (substitute-command-keys "\
Type `y' to skip this revision,
`N' to include it and go on to the next revision,
`n' to not skip, but continue to search this log entry for skip regexps,
`q' to quit merging.")))
(pcase (save-excursion
(read-char-choice
(format "%s: Skip (y/n/N/q/%s)? " str
(key-description (vector help-char)))
'(?y ?n ?N ?q)))
(`?y (setq skip t))
(`?q (keyboard-quit))
;; A single log entry can match skip-regexp multiple
;; times. If you are sure you don't want to skip it,
;; you don't want to be asked multiple times.
(`?N (setq skip 'no))))))
(if (eq skip t)
(push revno skipped)
(push revno revnos)))))
(delete-region (point) (point-max)))
(and (or revnos skipped)
(cons (nreverse revnos) (nreverse skipped))))))
(defun bzrmerge-resolve (file)
(unless (file-exists-p file) (error "Bzrmerge-resolve: Can't find %s" file))
(with-demoted-errors
(let ((exists (find-buffer-visiting file)))
(with-current-buffer (let ((enable-local-variables :safe)
(enable-local-eval nil))
(find-file-noselect file))
(if (buffer-modified-p)
(user-error "Unsaved changes in %s" (current-buffer)))
(save-excursion
(cond
((derived-mode-p 'change-log-mode)
;; Fix up dates before resolving the conflicts.
(goto-char (point-min))
(let ((diff-auto-refine-mode nil))
(while (re-search-forward smerge-begin-re nil t)
(smerge-match-conflict)
(smerge-ensure-match 3)
(let ((start1 (match-beginning 1))
(end1 (match-end 1))
(start3 (match-beginning 3))
(end3 (copy-marker (match-end 3) t)))
(goto-char start3)
(while (re-search-forward change-log-start-entry-re end3 t)
(let* ((str (match-string 0))
(newstr (save-match-data
(concat (add-log-iso8601-time-string)
(when (string-match " *\\'" str)
(match-string 0 str))))))
(replace-match newstr t t)))
;; change-log-resolve-conflict prefers to put match-1's
;; elements first (for equal dates), whereas we want to put
;; match-3's first.
(let ((match3 (buffer-substring start3 end3))
(match1 (buffer-substring start1 end1)))
(delete-region start3 end3)
(goto-char start3)
(insert match1)
(delete-region start1 end1)
(goto-char start1)
(insert match3)))))
;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
))
;; Try to resolve the conflicts.
(cond
((member file '("configure" "lisp/ldefs-boot.el"
"lisp/emacs-lisp/cl-loaddefs.el"))
;; We are in the file's buffer, so names are relative.
(call-process "bzr" nil t nil "revert"
(file-name-nondirectory file))
(revert-buffer nil 'noconfirm))
(t
(goto-char (point-max))
(while (re-search-backward smerge-begin-re nil t)
(save-excursion
(ignore-errors
(smerge-match-conflict)
(smerge-resolve))))
;; (when (derived-mode-p 'change-log-mode)
;; (pop-to-buffer (current-buffer)) (debug 'after-resolve))
(save-buffer)))
(goto-char (point-min))
(prog1 (re-search-forward smerge-begin-re nil t)
(unless exists (kill-buffer))))))))
(defun bzrmerge-add-metadata (from endrevno)
"Add the metadata for a merge of FROM upto ENDREVNO.
Does not make other difference."
(if (with-temp-buffer
(call-process "bzr" nil t nil "status")
(goto-char (point-min))
(re-search-forward "^conflicts:\n" nil t))
(error "Don't know how to add metadata in the presence of conflicts")
(call-process "bzr" nil t nil "shelve" "--all"
"-m" "Bzrmerge shelved merge during skipping")
(call-process "bzr" nil t nil "revert")
(call-process "bzr" nil t nil
"merge" "-r" (format "%s" endrevno) from)
(call-process "bzr" nil t nil "revert" ".")
(call-process "bzr" nil t nil "unshelve")))
(defvar bzrmerge-already-done nil)
(defun bzrmerge-apply (missing from)
(setq from (expand-file-name from))
(with-current-buffer (get-buffer-create bzrmerge-buffer)
(erase-buffer)
(when (equal (cdr bzrmerge-already-done) (list from missing))
(setq missing (car bzrmerge-already-done)))
(setq bzrmerge-already-done nil)
(let ((merge (car missing))
(skip (cdr missing))
(unsafe nil)
beg end)
(when (or merge skip)
(cond
((and skip (or (null merge) (< (car skip) (car merge))))
;; Do a "skip" (i.e. merge the meta-data only).
(setq beg (1- (car skip)))
(while (and skip (or (null merge) (< (car skip) (car merge))))
(cl-assert (> (car skip) (or end beg)))
(setq end (pop skip)))
(message "Skipping %s..%s" beg end)
(bzrmerge-add-metadata from end))
(t
;; Do a "normal" merge.
(cl-assert (or (null skip) (< (car merge) (car skip))))
(setq beg (1- (car merge)))
(while (and merge (or (null skip) (< (car merge) (car skip))))
(cl-assert (> (car merge) (or end beg)))
(setq end (pop merge)))
(message "Merging %s..%s" beg end)
(if (with-temp-buffer
(call-process "bzr" nil t nil "status")
(zerop (buffer-size)))
(call-process "bzr" nil t nil
"merge" "-r" (format "%s" end) from)
;; Stupidly, "bzr merge --force -r A..B" dos not maintain the
;; metadata properly except when the checkout is clean.
(call-process "bzr" nil t nil "merge"
"--force" "-r" (format "%s..%s" beg end) from)
;; The merge did not update the metadata, so force the next time
;; around to update it (as a "skip").
(setq unsafe t)
(push end skip))
(pop-to-buffer (current-buffer))
(sit-for 1)
;; (debug 'after-merge)
;; Check the conflicts.
;; FIXME if using the helpful bzr changelog_merge plugin,
;; there are normally no conflicts in ChangeLogs.
;; But we still want the dates fixing, like bzrmerge-resolve does.
(let ((conflicted nil)
(files ()))
(goto-char (point-min))
(when (re-search-forward "bzr: ERROR:" nil t)
(error "Internal Bazaar error!!"))
(while (re-search-forward "^Text conflict in " nil t)
(push (buffer-substring (point) (line-end-position)) files))
(if (re-search-forward "^\\([0-9]+\\) conflicts encountered" nil t)
(if (/= (length files) (string-to-number (match-string 1)))
(setq conflicted t))
(if files (setq conflicted t)))
(dolist (file files)
(if (bzrmerge-resolve file)
(setq conflicted t)))
(when conflicted
(setq bzrmerge-already-done
(list (cons merge skip) from missing))
(if unsafe
;; FIXME: Obviously, we'd rather make it right rather
;; than output such a warning. But I don't know how to add
;; the metadata to bzr's since the technique used in
;; bzrmerge-add-metadata does not work when there
;; are conflicts.
(display-warning 'bzrmerge "Resolve conflicts manually.
BEWARE! Important metadata is kept in this Emacs session!
Do not commit without re-running `M-x bzrmerge' first!"
:warning bzrmerge-warning-buffer))
(user-error "Resolve conflicts manually")))))
(cons merge skip)))))
(defun bzrmerge (from)
"Merge from branch FROM into `default-directory'."
(interactive
(list
(let ((def
(with-temp-buffer
(call-process "bzr" nil t nil "info")
(goto-char (point-min))
(when (re-search-forward "submit branch: *" nil t)
(buffer-substring (point) (line-end-position))))))
(read-file-name "From branch: " nil nil nil def))))
;; Eg we ran bzrmerge once, it stopped with conflicts, we fixed them
;; and are running it again.
(if (get-buffer bzrmerge-warning-buffer)
(kill-buffer bzrmerge-warning-buffer))
(message "Merging from %s..." from)
(require 'vc-bzr)
(let ((default-directory (or (vc-bzr-root default-directory)
(error "Not in a Bzr tree"))))
;; First, check the status.
(let* ((merges (bzrmerge-merges))
;; OK, we have the status, now check the missing data.
(missing (bzrmerge-missing from merges)))
(if (not missing)
(message "Merging from %s...nothing to merge" from)
(while missing
(setq missing (bzrmerge-apply missing from)))
(message "Merging from %s...done" from)))))
(provide 'bzrmerge)
;;; bzrmerge.el ends here

View file

@ -1,6 +1,6 @@
### @configure_input@ ### @configure_input@
# Copyright (C) 2015-2017 Free Software Foundation, Inc. # Copyright (C) 2015-2022 Free Software Foundation, Inc.
# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
# National Institute of Advanced Industrial Science and Technology (AIST) # National Institute of Advanced Industrial Science and Technology (AIST)
@ -31,6 +31,7 @@ AWK = @AWK@
srcdir = @srcdir@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
charsetdir = ${top_srcdir}/etc/charsets charsetdir = ${top_srcdir}/etc/charsets
lispintdir = ${top_srcdir}/lisp/international lispintdir = ${top_srcdir}/lisp/international
@ -38,16 +39,7 @@ mapfiledir = ${srcdir}/mapfiles
GLIBC_CHARMAPS = ${srcdir}/glibc GLIBC_CHARMAPS = ${srcdir}/glibc
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -include ${top_builddir}/src/verbose.mk
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
# Note: We can not prepend "ISO-" to these map files because of file # Note: We can not prepend "ISO-" to these map files because of file
# name limits on DOS. # name limits on DOS.
@ -96,7 +88,7 @@ MULE = MULE-ethiopic.map MULE-ipa.map MULE-is13194.map \
MULE-sisheng.map MULE-tibetan.map \ MULE-sisheng.map MULE-tibetan.map \
MULE-lviscii.map MULE-uviscii.map MULE-lviscii.map MULE-uviscii.map
SED_SCRIPT = jisx2131-filter SED_SCRIPT = $(srcdir)/jisx2131-filter
TRANS_TABLE = cp51932.el eucjp-ms.el TRANS_TABLE = cp51932.el eucjp-ms.el
TRANS_TABLE := $(addprefix ${lispintdir}/,${TRANS_TABLE}) TRANS_TABLE := $(addprefix ${lispintdir}/,${TRANS_TABLE})
@ -141,7 +133,7 @@ ${charsetdir}/VSCII-2.map: ${GLIBC_CHARMAPS}/TCVN5712-1.gz ${mapconv} ${compact}
${charsetdir}/ALTERNATIVNYJ.map: ${charsetdir}/IBM866.map ${charsetdir}/ALTERNATIVNYJ.map: ${charsetdir}/IBM866.map
${AM_V_GEN}(echo "# Modified from $(notdir $<) according to the chart at" && \ ${AM_V_GEN}(echo "# Modified from $(notdir $<) according to the chart at" && \
echo "# http://www.cyrillic.com/ref/cyrillic/koi-8alt.html," && \ echo "# https://web.archive.org/web/20100131045151/http://www.cyrillic.com/ref/cyrillic/koi-8alt.html" && \
echo "# with guesses for the Unicodes of the glyphs." && \ echo "# with guesses for the Unicodes of the glyphs." && \
sed -e '1 d' \ sed -e '1 d' \
-e '/0xF2/ s/ .*/ 0x2019/' \ -e '/0xF2/ s/ .*/ 0x2019/' \
@ -200,12 +192,13 @@ ${charsetdir}/JISX0208.map: ${GLIBC_CHARMAPS}/EUC-JP.gz ${mapconv}
${charsetdir}/JISX0212.map: ${GLIBC_CHARMAPS}/EUC-JP.gz ${mapconv} ${compact} ${charsetdir}/JISX0212.map: ${GLIBC_CHARMAPS}/EUC-JP.gz ${mapconv} ${compact}
${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x8f/ s,/x8f,,' GLIBC-2-7 ${compact} > $@ ${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x8f/ s,/x8f,,' GLIBC-2-7 ${compact} > $@
jisx2131-filter: ${mapfiledir}/JISX213A.map $(SED_SCRIPT): ${mapfiledir}/JISX213A.map
${AM_V_at}sed -n -e '/^#/d' -e 's,.*0x\([0-9A-Z]*\)$$,/0x0*\1$$/d,p' < $< > $@ ${AM_V_at}sed -n -e '/^#/d' -e 's,.*0x\([0-9A-Z]*\)$$,/0x0*\1$$/d,p' < $< > $@
${charsetdir}/JISX2131.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz ${mapconv} jisx2131-filter ${charsetdir}/JISX2131.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz ${mapconv} \
$(SED_SCRIPT)
${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x[a-f]/' GLIBC-2-7 \ ${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x[a-f]/' GLIBC-2-7 \
| sed -f jisx2131-filter \ | sed -f $(SED_SCRIPT) \
| sed -e 's/0x2015/0x2014/' -e 's/0x2299/0x29BF/' > $@ | sed -e 's/0x2015/0x2014/' -e 's/0x2299/0x29BF/' > $@
${charsetdir}/JISX2132.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz ${mapconv} ${charsetdir}/JISX2132.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz ${mapconv}
@ -225,8 +218,8 @@ ${lispintdir}/eucjp-ms.el: ${GLIBC_CHARMAPS}/EUC-JP-MS.gz ${eucjp_ms}
# As Uni2JIS doesn't contain mappings of characters added to Unicode # As Uni2JIS doesn't contain mappings of characters added to Unicode
# recently, we add them manually here (including one correction for # recently, we add them manually here (including one correction for
# U+005C vs U+FF3C). These changes are based on bogytech's blog at # U+005C vs U+FF3C). These changes are based on bogytech's blog at:
# http://bogytech.blogspot.jp/search/label/emacs. # https://bogytech.blogspot.com/search/label/emacs
${charsetdir}/JISC6226.map: ${mapfiledir}/Uni2JIS ${mapconv} ${kuten} ${charsetdir}/JISC6226.map: ${mapfiledir}/Uni2JIS ${mapconv} ${kuten}
${AM_V_GEN}(${run_mapconv} $< '/^[^#].*0-/' YASUOKA ${kuten} \ ${AM_V_GEN}(${run_mapconv} $< '/^[^#].*0-/' YASUOKA ${kuten} \
| sed -e '/0x2140/s/005C/FF3C/' && \ | sed -e '/0x2140/s/005C/FF3C/' && \
@ -304,18 +297,18 @@ ${charsetdir}/%.map: ${GLIBC_CHARMAPS}/%.gz ${mapconv} ${compact}
${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x/' GLIBC-1 ${compact} > $@ ${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x/' GLIBC-1 ${compact} > $@
.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean .PHONY: clean bootstrap-clean distclean maintainer-clean gen-clean
clean: clean:
rm -f ${SED_SCRIPT}
## IMO this should also run gen-clean.
bootstrap-clean: clean bootstrap-clean: clean
distclean: clean distclean: clean
rm -f Makefile rm -f Makefile
maintainer-clean: distclean gen-clean:
rm -f ${CHARSETS} ${SED_SCRIPT} ${TRANS_TABLE} ${srcdir}/charsets.stamp
maintainer-clean: gen-clean distclean
## Do not remove these files, even in a bootstrap. They rarely change.
extraclean:
rm -f ${CHARSETS} ${TRANS_TABLE} ${srcdir}/charsets.stamp

View file

@ -31,7 +31,7 @@
# already been mapped to 1 or 3. # already been mapped to 1 or 3.
BEGIN { BEGIN {
print ";;; cp51932.el -- translation table for CP51932"; print ";;; cp51932.el -- translation table for CP51932 -*- lexical-binding:t -*-";
print ";;; Automatically generated from CP932-2BYTE.map"; print ";;; Automatically generated from CP932-2BYTE.map";
print "(let ((map"; print "(let ((map";
printf " '(;JISEXT<->UNICODE"; printf " '(;JISEXT<->UNICODE";
@ -43,13 +43,14 @@ BEGIN {
END { END {
print ")))"; print ")))";
print " (mapc #'(lambda (x)"; print " (setq map (mapcar (lambda (x)";
print " (setcar x (decode-char 'japanese-jisx0208 (car x))))"; print " (cons (decode-char 'japanese-jisx0208 (car x))";
print " map)"; print " (cdr x)))";
print " map))";
print " (define-translation-table 'cp51932-decode map)"; print " (define-translation-table 'cp51932-decode map)";
print " (mapc #'(lambda (x)"; print " (mapc (lambda (x)";
print " (let ((tmp (car x)))"; print " (let ((tmp (car x)))";
print " (setcar x (cdr x)) (setcdr x tmp)))"; print " (setcar x (cdr x)) (setcdr x tmp)))";
print " map)"; print " map)";
print " (define-translation-table 'cp51932-encode map))"; print " (define-translation-table 'cp51932-encode map))";
print ""; print "";

View file

@ -22,8 +22,7 @@
# Add a sort key 0, 1, 2, or 3 at the tail of each line as a comment # Add a sort key 0, 1, 2, or 3 at the tail of each line as a comment
# to realize the round trip mapping to Unicode works as described in # to realize the round trip mapping to Unicode works as described in
# this page: # https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
# http://support.microsoft.com/default.aspx?scid=kb;EN-US;170559
# Each sort key means as below: # Each sort key means as below:
# 0: JISX0208 characters. # 0: JISX0208 characters.
# 1: NEC special characters. # 1: NEC special characters.

View file

@ -21,7 +21,7 @@
# Commentary: # Commentary:
# eucJP-ms is one of eucJP-open encoding defined at this page: # eucJP-ms is one of eucJP-open encoding defined at this page:
# http://home.m05.itscom.net/numa/cde/ucs-conv/appendix.html # https://web.archive.org/web/20120207064433/http://home.m05.itscom.net/numa/cde/ucs-conv/appendix.html
# This program reads the mapping file EUC-JP-MS (of glibc) and # This program reads the mapping file EUC-JP-MS (of glibc) and
# generates the Elisp file eucjp-ms.el that defines two translation # generates the Elisp file eucjp-ms.el that defines two translation
# tables 'eucjp-ms-decode' and 'eucjp-ms-encode'. # tables 'eucjp-ms-decode' and 'eucjp-ms-encode'.
@ -38,7 +38,7 @@ BEGIN {
JISX0208_FROM2 = "/xf5/xa1"; JISX0208_FROM2 = "/xf5/xa1";
JISX0212_FROM = "/x8f/xf3/xf3"; JISX0212_FROM = "/x8f/xf3/xf3";
print ";;; eucjp-ms.el -- translation table for eucJP-ms"; print ";;; eucjp-ms.el --- translation table for eucJP-ms -*- lexical-binding:t -*-";
print ";;; Automatically generated from /usr/share/i18n/charmaps/EUC-JP-MS.gz"; print ";;; Automatically generated from /usr/share/i18n/charmaps/EUC-JP-MS.gz";
print "(let ((map"; print "(let ((map";
print " '(;JISEXT<->UNICODE"; print " '(;JISEXT<->UNICODE";
@ -93,15 +93,17 @@ function write_entry (unicode) {
END { END {
print ")))"; print ")))";
print " (mapc #'(lambda (x)"; print " (setq map";
print " (mapcar";
print " (lambda (x)";
print " (let ((code (logand (car x) #x7F7F)))"; print " (let ((code (logand (car x) #x7F7F)))";
print " (if (integerp (cdr x))"; print " (if (integerp (cdr x))";
print " (setcar x (decode-char 'japanese-jisx0208 code))"; print " (cons (decode-char 'japanese-jisx0208 code) (cdr x))";
print " (setcar x (decode-char 'japanese-jisx0212 code))"; print " (cons (decode-char 'japanese-jisx0212 code)"
print " (setcdr x (cadr x)))))"; print " (cadr x)))))";
print " map)"; print " map))";
print " (define-translation-table 'eucjp-ms-decode map)"; print " (define-translation-table 'eucjp-ms-decode map)";
print " (mapc #'(lambda (x)"; print " (mapc (lambda (x)";
print " (let ((tmp (car x)))"; print " (let ((tmp (car x)))";
print " (setcar x (cdr x)) (setcdr x tmp)))"; print " (setcar x (cdr x)) (setcdr x tmp)))";
print " map)"; print " map)";

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# Copyright (C) 2015-2017 Free Software Foundation, Inc. # Copyright (C) 2015-2022 Free Software Foundation, Inc.
# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
# National Institute of Advanced Industrial Science and Technology (AIST) # National Institute of Advanced Industrial Science and Technology (AIST)
@ -51,17 +51,18 @@ case "$3" in
SOURCE="";; SOURCE="";;
CZYBORRA) CZYBORRA)
BASE="$BASE.gz"; BASE="$BASE.gz";
SOURCE="http://czyborra.com/charsets/${BASE}";; SOURCE="https://czyborra.com/charsets/${BASE}";;
IANA) IANA)
SOURCE="http://www.iana.org/assignments/charset-reg/${BASE}";; SOURCE="https://www.iana.org/assignments/charset-reg/${BASE}";;
UNICODE) UNICODE)
SOURCE="http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/${BASE}";; SOURCE="https://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/${BASE}";;
UNICODE2) UNICODE2)
SOURCE="http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/${BASE}";; SOURCE="https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/${BASE}";;
YASUOKA) YASUOKA)
BASE="$BASE.Z"; BASE="$BASE.Z";
SOURCE="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/ftp/CJKtable/${BASE}";; SOURCE="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/ftp/CJKtable/${BASE}";;
KANJI-DATABASE) KANJI-DATABASE)
# FIXME: This URL no longer works.
SOURCE="http://kanji-database.cvs.sourceforge.net/viewvc/*checkout*/kanji-database/kanji-database/data/cns2ucsdkw.txt?revision=1.4";; SOURCE="http://kanji-database.cvs.sourceforge.net/viewvc/*checkout*/kanji-database/kanji-database/data/cns2ucsdkw.txt?revision=1.4";;
*) *)
printf 'Unknown file type: %s\n' "$3" printf 'Unknown file type: %s\n' "$3"

View file

@ -1,4 +1,4 @@
# Created manually from <http://en.wikipedia.org/wiki/Code_page_720>. # Created manually from <https://en.wikipedia.org/wiki/Code_page_720>.
# The text in that page is available under the terms of the GNU Free # The text in that page is available under the terms of the GNU Free
# Documentation License. # Documentation License.
0x00-0x7F 0x0000 0x00-0x7F 0x0000

View file

@ -1,4 +1,4 @@
# Created manually from <http://en.wikipedia.org/wiki/Code_page_858>. # Created manually from <https://en.wikipedia.org/wiki/Code_page_858>.
# The text in that page is available under the terms of the GNU Free # The text in that page is available under the terms of the GNU Free
# Documentation License. # Documentation License.
0x00-0x7F 0x0000 0x00-0x7F 0x0000

View file

@ -1,4 +1,4 @@
Copyright (C) 2009-2017 Free Software Foundation, Inc. Copyright (C) 2009-2022 Free Software Foundation, Inc.
Copyright (C) 2009, 2010, 2011 Copyright (C) 2009, 2010, 2011
National Institute of Advanced Industrial Science and Technology (AIST) National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H13PRO009 Registration Number H13PRO009
@ -15,12 +15,12 @@ files based on freely available information.
* CP932.TXT * CP932.TXT
Available at: Available at:
<http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT> <https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT>
* PTCP154 * PTCP154
Available at: Available at:
<http://www.iana.org/assignments/charset-reg/PTCP154> <https://www.iana.org/assignments/charset-reg/PTCP154>
* Uni2JIS * Uni2JIS
@ -42,16 +42,16 @@ Available at:
* stdenc.txt and symbol.txt * stdenc.txt and symbol.txt
Available at: Available at:
<http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/stdenc.txt> <https://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/stdenc.txt>
<http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt> <https://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt>
(2) Newly created files (2) Newly created files
* CP720.map and CP858.map * CP720.map and CP858.map
Created manually by looking at these pages: Created manually by looking at these pages:
<http://en.wikipedia.org/wiki/Code_page_720>. <https://en.wikipedia.org/wiki/Code_page_720>.
<http://en.wikipedia.org/wiki/Code_page_859>. <https://en.wikipedia.org/wiki/Code_page_859>.
The text in that page is under the terms of the GNU Free Documentation The text in that page is under the terms of the GNU Free Documentation
License. License.
@ -63,8 +63,8 @@ to "JIS X 0213:2004".
* MULE-*.map * MULE-*.map
Created by using ../mule-charsets.el in Emacs 22 as this: Created by using ../mule-charsets.el in Emacs as this:
% emacs-22 -batch -l ../mule-charsets.el % emacs -batch -l ../mule-charsets.el
This file is part of GNU Emacs. This file is part of GNU Emacs.

View file

@ -1,4 +1,4 @@
;; mule-charsets.el -- Generate Mule-original charset maps. ;;; mule-charsets.el --- Generate Mule-original charset maps. -*- lexical-binding: t -*-
;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
;; National Institute of Advanced Industrial Science and Technology (AIST) ;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H13PRO009 ;; Registration Number H13PRO009
@ -55,14 +55,14 @@
("MULE-lviscii.map" . vietnamese-viscii-lower) ("MULE-lviscii.map" . vietnamese-viscii-lower)
("MULE-uviscii.map" . vietnamese-viscii-upper))) ("MULE-uviscii.map" . vietnamese-viscii-upper)))
(defconst header (defconst mule-charsets-header
(format (format
"# Generated by running admin/charsets/mule-charsets.el in Emacs %d.%d.\n" "# Generated by running admin/charsets/mule-charsets.el in Emacs %d.%d.\n"
emacs-major-version emacs-minor-version)) emacs-major-version emacs-minor-version))
(dolist (elt charset-alist) (dolist (elt charset-alist)
(with-temp-buffer (with-temp-buffer
(insert header) (insert mule-charsets-header)
(map-charset-chars 'func (cdr elt) (cdr elt)) (map-charset-chars 'func (cdr elt) (cdr elt))
(sort-lines nil (point-min) (point-max)) (sort-lines nil (point-min) (point-max))
(let ((coding-system-for-write 'unix)) (let ((coding-system-for-write 'unix))

View file

@ -59,7 +59,7 @@ sub Check_texi_function {
$arglist_parm{$parm} = 1; $arglist_parm{$parm} = 1;
} }
foreach my $parm ($docstring =~ /\@var{([^{}]+)}/g) { foreach my $parm ($docstring =~ /\@var\{([^{}]+)\}/g) {
$docstring_parm{$parm} = 1; $docstring_parm{$parm} = 1;
} }
@ -111,7 +111,9 @@ sub Check_function {
# $arglist_parm{$parm} = 1; # $arglist_parm{$parm} = 1;
#} #}
foreach my $parm (@parms) { foreach my $parm (@parms) {
next if $parm eq '&optional' || $parm eq '&rest'; next if $parm eq '&optional'
|| $parm eq '&rest'
|| $parm eq 'Lisp-Object';
$arglist_parm{$parm} = 1; $arglist_parm{$parm} = 1;
} }
my $doc_tmp = $docstring; my $doc_tmp = $docstring;
@ -150,6 +152,22 @@ sub Check_function {
next if $parm eq 'primary'; next if $parm eq 'primary';
next if $parm eq 'secondary'; next if $parm eq 'secondary';
next if $parm eq 'clipboard'; next if $parm eq 'clipboard';
next if $parm eq 'bbdb';
next if $parm eq 'dos';
next if $parm eq 'erc';
next if $parm eq 'exif';
next if $parm eq 'ldap';
next if $parm eq 'ime';
next if $parm eq 'rfc';
next if $parm eq 'ms-dos';
next if $parm eq 'url';
next if $parm eq 'w32';
next if $parm eq 'todo'; # org-mode
next if $parm eq 'done'; # org-mode
next if $parm eq 'waiting'; #org-mode
next if $parm eq 'ordered'; #org-mode
next if $parm eq 'deadline'; #org-mode
next if $parm eq 'scheduled'; #org-mode
next if length $parm < 3; next if length $parm < 3;
if (! exists $arglist_parm{$parm}) { if (! exists $arglist_parm{$parm}) {
print "bogus parm: $function: $parm\n"; print "bogus parm: $function: $parm\n";
@ -228,20 +246,43 @@ open (FIND, "find src -name '*.c' -print |") or die;
while (my $file = <FIND>) { while (my $file = <FIND>) {
my @matches = my @matches =
((FileContents $file) =~ ((FileContents $file) =~
/\bDEFUN\s*\(\s*\"((?:[^\\\"]|\\.)+)\"\s*,\s*\S+\s*,\s*(\S+)\s*,\s*(\S+)\s*,\s*((?:0|\"(?:(?:[^\\\"]|\\.)*)\"))\s*,\s*\/\*(.*?)\*\/\s*\(([^()]*)\)\)/sgo); /\b
DEFUN\s*\(\s*
## $function
\"((?:[^\\\"]|\\.)+)\"\s*,
\s*\S+\s*, \s*\S+\s*,
## $minargs
\s*(\S+)\s*,
## $maxargs
\s*(\S+)\s*,
## $interactive
\s*((?:0|\"(?:(?:[^\\\"]|\\.)*)\"))\s*,
## $docstring
\s*doc:\s*\/\*\s*(.*?)\s*\*\/
# attributes -- skip
(?:\s*attributes:\s*
(?:noreturn|const)
\s*)?
\s*\)
### $parms
\s*\(
([^()]*)
\)
/sgox);
while (@matches) { while (@matches) {
my ($function, $minargs, $maxargs, $interactive, $docstring, $parms) = splice (@matches, 0, 6); my ($function, $minargs, $maxargs, $interactive, $docstring, $parms) = splice (@matches, 0, 6);
$docstring =~ s/^\n+//s; $docstring =~ s/^\n+//s;
$docstring =~ s/\n+$//s; $docstring =~ s/\n+$//s;
$parms =~ s/,/ /g; $parms =~ s/,/ /g;
my @parms = split (' ',$parms); my @parms = $parms eq 'void' ? () : split (' ', $parms);
for (@parms) { tr/_/-/; s/-$//; } for (@parms) { tr/_/-/; s/-$//; }
if ($parms !~ /Lisp_Object/) { if ($parms !~ /Lisp_Object/) {
if ($minargs < @parms) { if ($minargs < @parms) {
if ($maxargs =~ /^\d+$/) { if ($maxargs =~ /^\d+$/) {
die unless $maxargs eq @parms; die "$function: $maxargs"
splice (@parms, $minargs, 0, '&optional'); unless $maxargs eq @parms;
} splice (@parms, $minargs, 0, '&optional');
}
} }
} }
my $funtype = ($interactive =~ /\"/ ? 'Command' : 'Function'); my $funtype = ($interactive =~ /\"/ ? 'Command' : 'Function');
@ -249,13 +290,7 @@ while (my $file = <FIND>) {
} }
} }
my @pkgs; my @pkgs = ();
if (-d "../xemacs-packages") {
@pkgs = qw (libs/edebug libs/xemacs-base comm/eudc oa/edit-utils);
} else {
@pkgs = ();
}
for (@pkgs) { s@^@../xemacs-packages/@; }
open (FIND, "find lisp @pkgs -name '*.el' -print |") or die; open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
while (my $file = <FIND>) { while (my $file = <FIND>) {
my $contents = FileContents $file; my $contents = FileContents $file;

View file

@ -106,9 +106,6 @@ Lisp_Object O;
- W->column_number_displayed - W->column_number_displayed
+ WVAR (W, column_number_displayed) + WVAR (W, column_number_displayed)
| |
- W->redisplay_end_trigger
+ WVAR (W, redisplay_end_trigger)
|
- W->combination_limit - W->combination_limit
+ WVAR (W, combination_limit) + WVAR (W, combination_limit)
| |
@ -225,9 +222,6 @@ Lisp_Object O;
- XWINDOW (O)->column_number_displayed - XWINDOW (O)->column_number_displayed
+ WVAR (XWINDOW (O), column_number_displayed) + WVAR (XWINDOW (O), column_number_displayed)
| |
- XWINDOW (O)->redisplay_end_trigger
+ WVAR (XWINDOW (O), redisplay_end_trigger)
|
- XWINDOW (O)->combination_limit - XWINDOW (O)->combination_limit
+ WVAR (XWINDOW (O), combination_limit) + WVAR (XWINDOW (O), combination_limit)
| |

View file

@ -1,9 +1,8 @@
;;; cus-test.el --- tests for custom types and load problems ;;; cus-test.el --- tests for custom types and load problems -*- lexical-binding: t; -*-
;; Copyright (C) 1998, 2000, 2002-2017 Free Software Foundation, Inc. ;; Copyright (C) 1998, 2000, 2002-2022 Free Software Foundation, Inc.
;; Author: Markus Rost <markus.rost@mathematik.uni-regensburg.de> ;; Author: Markus Rost <rost@math.uni-bielefeld.de>
;; Maintainer: Markus Rost <rost@math.ohio-state.edu>
;; Created: 13 Sep 1998 ;; Created: 13 Sep 1998
;; Keywords: maint ;; Keywords: maint
@ -38,6 +37,13 @@
;; ;;
;; src/emacs -batch -l admin/cus-test.el -f cus-test-noloads ;; src/emacs -batch -l admin/cus-test.el -f cus-test-noloads
;; ;;
;; or as a part of the test suite with
;;
;; make -C test test-custom-opts
;; make -C test test-custom-deps
;; make -C test test-custom-libs
;; make -C test test-custom-noloads
;;
;; in the emacs source directory. ;; in the emacs source directory.
;; ;;
;; For interactive use: Load this file. Then ;; For interactive use: Load this file. Then
@ -113,6 +119,7 @@ Names should be as they appear in loaddefs.el.")
;; This avoids a hang of `cus-test-apropos' in 21.2. ;; This avoids a hang of `cus-test-apropos' in 21.2.
;; (add-to-list 'cus-test-skip-list 'sh-alias-alist) ;; (add-to-list 'cus-test-skip-list 'sh-alias-alist)
(defvar viper-mode)
(or noninteractive (or noninteractive
;; Never Viperize. ;; Never Viperize.
(setq viper-mode nil)) (setq viper-mode nil))
@ -149,7 +156,7 @@ Names should be as they appear in loaddefs.el.")
"Set by `cus-test-apropos' to a list of options with :get property.") "Set by `cus-test-apropos' to a list of options with :get property.")
(defvar cus-test-vars-with-changed-state nil (defvar cus-test-vars-with-changed-state nil
"Set by `cus-test-apropos' to a list of options with state 'changed.") "Set by `cus-test-apropos' to a list of options with state \\='changed.")
(defvar cus-test-deps-errors nil (defvar cus-test-deps-errors nil
"List of require/load problems found by `cus-test-deps'.") "List of require/load problems found by `cus-test-deps'.")
@ -197,7 +204,7 @@ The detected problematic options are stored in `cus-test-errors'."
mismatch) mismatch)
(when (default-boundp symbol) (when (default-boundp symbol)
(push (funcall get symbol) values) (push (funcall get symbol) values)
(push (eval (car (get symbol 'standard-value))) values)) (push (eval (car (get symbol 'standard-value)) t) values))
(if (boundp symbol) (if (boundp symbol)
(push (symbol-value symbol) values)) (push (symbol-value symbol) values))
;; That does not work. ;; That does not work.
@ -223,7 +230,7 @@ The detected problematic options are stored in `cus-test-errors'."
(get symbol 'standard-value)))) (get symbol 'standard-value))))
(and (consp c-value) (and (consp c-value)
(boundp symbol) (boundp symbol)
(not (equal (eval (car c-value)) (symbol-value symbol))) (not (equal (eval (car c-value) t) (symbol-value symbol)))
(add-to-list 'cus-test-vars-with-changed-state symbol))) (add-to-list 'cus-test-vars-with-changed-state symbol)))
(if mismatch (if mismatch
@ -240,7 +247,7 @@ The detected problematic options are stored in `cus-test-errors'."
(defun cus-test-cus-load-groups (&optional cus-load) (defun cus-test-cus-load-groups (&optional cus-load)
"Return a list of current custom groups. "Return a list of current custom groups.
If CUS-LOAD is non-nil, include groups from cus-load.el." If CUS-LOAD is non-nil, include groups from cus-load.el."
(append (mapcar 'cdr custom-current-group-alist) (append (mapcar #'cdr custom-current-group-alist)
(if cus-load (if cus-load
(with-temp-buffer (with-temp-buffer
(insert-file-contents (locate-library "cus-load.el")) (insert-file-contents (locate-library "cus-load.el"))
@ -265,7 +272,7 @@ currently defined groups."
(if group (if group
(memq symbol groups) (memq symbol groups)
(or (or
;; (user-variable-p symbol) ;; (custom-variable-p symbol)
(get symbol 'standard-value) (get symbol 'standard-value)
;; (get symbol 'saved-value) ;; (get symbol 'saved-value)
(get symbol 'custom-type))) (get symbol 'custom-type)))
@ -291,7 +298,7 @@ currently defined groups."
"Call `custom-load-symbol' on all atoms." "Call `custom-load-symbol' on all atoms."
(interactive) (interactive)
(if noninteractive (let (noninteractive) (require 'dunnet))) (if noninteractive (let (noninteractive) (require 'dunnet)))
(mapatoms 'custom-load-symbol) (mapatoms #'custom-load-symbol)
(run-hooks 'cus-test-after-load-libs-hook)) (run-hooks 'cus-test-after-load-libs-hook))
(defmacro cus-test-load-1 (&rest body) (defmacro cus-test-load-1 (&rest body)
@ -320,7 +327,8 @@ If it is \"all\", load all Lisp files."
(lambda (file) (lambda (file)
(condition-case alpha (condition-case alpha
(unless (member file cus-test-libs-noloads) (unless (member file cus-test-libs-noloads)
(load (file-name-sans-extension (expand-file-name file lispdir))) (load (file-name-sans-extension (expand-file-name file lispdir))
nil t)
(push file cus-test-libs-loaded)) (push file cus-test-libs-loaded))
(error (error
(push (cons file alpha) cus-test-libs-errors) (push (cons file alpha) cus-test-libs-errors)
@ -347,8 +355,10 @@ Optional argument ALL non-nil means list all (non-obsolete) Lisp files."
(prog1 (prog1
;; Hack to remove leading "./". ;; Hack to remove leading "./".
(mapcar (lambda (e) (substring e 2)) (mapcar (lambda (e) (substring e 2))
(apply 'process-lines find-program (apply #'process-lines find-program
"-name" "obsolete" "-prune" "-o" "." "-name" "obsolete" "-prune" "-o"
"-name" "ldefs-boot.el" "-prune" "-o"
"-name" "*loaddefs.el" "-prune" "-o"
"-name" "[^.]*.el" ; ignore .dir-locals.el "-name" "[^.]*.el" ; ignore .dir-locals.el
(if all (if all
'("-print") '("-print")
@ -371,7 +381,9 @@ This function is suitable for batch mode. E.g., invoke
in the Emacs source directory. in the Emacs source directory.
Normally only tests options belonging to files in loaddefs.el. Normally only tests options belonging to files in loaddefs.el.
If optional argument ALL is non-nil, test all files with defcustoms." If optional argument ALL is non-nil, test all files with defcustoms.
Returns a list of variables with suspicious types."
(interactive) (interactive)
(and noninteractive (and noninteractive
command-line-args-left command-line-args-left
@ -383,9 +395,12 @@ If optional argument ALL is non-nil, test all files with defcustoms."
(message "Running %s" 'cus-test-apropos) (message "Running %s" 'cus-test-apropos)
(cus-test-apropos "") (cus-test-apropos "")
(if (not cus-test-errors) (if (not cus-test-errors)
(message "No problems found") (progn
(message "No problems found")
nil)
(message "The following options might have problems:") (message "The following options might have problems:")
(cus-test-message cus-test-errors))) (cus-test-message cus-test-errors)
cus-test-errors))
(defun cus-test-deps () (defun cus-test-deps ()
"Run a verbose version of `custom-load-symbol' on all atoms. "Run a verbose version of `custom-load-symbol' on all atoms.
@ -538,7 +553,7 @@ in the Emacs source directory."
(message "No options not loaded by custom-load-symbol found") (message "No options not loaded by custom-load-symbol found")
(message "The following options were not loaded by custom-load-symbol:") (message "The following options were not loaded by custom-load-symbol:")
(cus-test-message (cus-test-message
(sort cus-test-vars-not-cus-loaded 'string<))) (sort cus-test-vars-not-cus-loaded #'string<)))
(dolist (o groups-loaded) (dolist (o groups-loaded)
(setq groups-not-loaded (delete o groups-not-loaded))) (setq groups-not-loaded (delete o groups-not-loaded)))
@ -546,7 +561,7 @@ in the Emacs source directory."
(if (not groups-not-loaded) (if (not groups-not-loaded)
(message "No groups not in cus-load.el found") (message "No groups not in cus-load.el found")
(message "The following groups are not in cus-load.el:") (message "The following groups are not in cus-load.el:")
(cus-test-message (sort groups-not-loaded 'string<))))) (cus-test-message (sort groups-not-loaded #'string<)))))
(provide 'cus-test) (provide 'cus-test)

View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Copyright (C) 2001-2017 Free Software Foundation, Inc. # Copyright (C) 2001-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -35,7 +35,7 @@ old_tmp=/tmp/old.$$
new_tmp=/tmp/new.$$ new_tmp=/tmp/new.$$
trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15 trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15
tar tzf $old_tar | sed -e 's,^[^/]*,,' | sort > $old_tmp tar tf "$old_tar" | sed -e 's,^[^/]*,,' | sort > $old_tmp
tar tzf $new_tar | sed -e 's,^[^/]*,,' | sort > $new_tmp tar tf "$new_tar" | sed -e 's,^[^/]*,,' | sort > $new_tmp
diff -u $old_tmp $new_tmp diff -u $old_tmp $new_tmp
rm -f $new_tmp $old_tmp rm -f $new_tmp $old_tmp

135
admin/emake Executable file
View file

@ -0,0 +1,135 @@
#!/bin/bash
# This script is meant to be used as ./admin/emake, and will compile
# the Emacs tree with virtually all of the informational messages
# removed, and with errors/warnings highlighted in red. It'll give a
# quick overview to confirm that nothing has broken, for instance
# after doing a "git pull". It's not meant to be used during actual
# development, because it removes so much information that commands
# like `next-error' won't be able to jump to the source code where
# errors are.
cores=1
# Determine the number of cores.
if [ -f /proc/cpuinfo ]; then
cores=$(($(grep -E "^physical id|^cpu cores" /proc/cpuinfo |\
awk '{ print $4; }' |\
sed '$!N;s/\n/ /' |\
uniq |\
sed 's/^[0-9]*/+/')))
fi
NOCOLOR=0
NOCHECK=0
FASTOPT="FAST=true"
QUIETER=0
while :
do
[[ "X$1" == "X--no-color" ]] && { NOCOLOR=1; shift; continue; }
[[ "X$1" == "X--no-check" ]] && { NOCHECK=1; shift; continue; }
[[ "X$1" == "X--no-fast" ]] && { FASTOPT=""; shift; continue; }
[[ "X$1" == "X--quieter" ]] && { QUIETER=1; shift; continue; }
break
done
make $FASTOPT -j$cores "$@" 2>&1 | \
sed -u 's# \.\./\.\./# #
s# \.\./# #
s#^Configuring local git # Configuring local git #
s#^Installing git hooks...# Installing git hooks...#
s#^Running # Running #
s#^Configured for # Configured for #
s#^./temacs.*# \\& #
s#^make.*Error# \\& #
s#^Dumping under the name.*# \\& #
:a;/\\$/N;s/\\\n//;ta
' | \
grep -E --line-buffered -v "^make|\
^Loading|\
SCRAPE|\
INFO.*Scraping.*[.] ?\$|\
INFO.*Scraping.*done\$|\
GEN.*etc/DOC|\
GEN.*autoloads|\
^Waiting for git|\
^Finding pointers|\
^Using load-path|\
^Adding name|\
^Dump mode|\
^Dumping finger|\
^Byte counts|\
^Reloc counts|\
^Pure-hashed|\
^cp -f temacs|\
^rm -f bootstrap|\
^Dump complete|\
^rm -f emacs|\
mkdir -p etc|\
mkdir -p info|\
mkdir -p lisp|\
^LC_ALL.*pdump|\
^cp -f emacs.p|\
GEN.*loaddefs|\
^Reloading stale|\
^Source file.*newer than|\
^Directories for loaddefs|\
^./autogen.sh|\
^[Cc]hecking |\
^.Read INSTALL.REPO for more|\
^Your system has the required tools.|\
^Building aclocal.m4|\
^ Running 'autoreconf|\
^You can now run './configure'|\
^./configure|\
^configure: creating|\
^\"configure\" file built.|\
^There seems to be no|\
^config.status:|\
ELN_DESTDIR|\
--bin-dest |\
^ *$|\
^Makefile built|\
The GNU allocators don't work|\
^git config |\
^'\.git/|\
^\^\(\(|\
^ANCIENT=yes make|\
^touch -t|\
^'build-aux/git-hooks|\
^GNUmakefile:[0-9]*: There seems to be no |\
^GNUmakefile:[0-9]*: Running |\
^GNUmakefile:[0-9]*: No Makefile|\
^rm -f |\
^rm -rf|\
^find \. |\
^rm -fr deps|\
^if test -f \./\.gdbinit|\
^true|\
^for file in |\
^rmdir|\
^\[ \"\.\" = \"\.\" \]\
" | \
while read
do
C=""
(($NOCOLOR == 0)) && [[ "X${REPLY:0:1}" != "X " ]] && C="\033[1;31m"
(($NOCOLOR == 0)) && [[ "X${REPLY:0:3}" == "X " ]] && C="\033[1;31m"
if (($QUIETER == 0))
then
[[ "X$C" == "X" ]] && printf "%s\n" "$REPLY" || printf "$C%s\033[0m\n" "$REPLY"
else
[[ "X$C" == "X" ]] && printf "%-80s\r" "$REPLY" || printf "$C%-80s\033[0m\n" "$REPLY"
fi
done
# If make failed, exit now with its error code.
((${PIPESTATUS[0]} != 0)) && exit ${PIPESTATUS[0]}
(($NOCHECK == 1)) && exit 0
# Run a "make check" on all test files belonging to files that have
# changed since last time.
make -j$cores check-maybe 2>&1 | \
sed -n '/contained unexpected results/,$p' | \
grep -E --line-buffered -v "^make"

View file

@ -1,6 +1,6 @@
;;; find-gc.el --- detect functions that call the garbage collector ;;; find-gc.el --- detect functions that call the garbage collector -*- lexical-binding: t; -*-
;; Copyright (C) 1992, 2001-2017 Free Software Foundation, Inc. ;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
;; Maintainer: emacs-devel@gnu.org ;; Maintainer: emacs-devel@gnu.org
@ -42,14 +42,14 @@ Each entry has the form (FUNCTION . FUNCTIONS-THAT-CALL-IT).")
Each entry has the form (FUNCTION . FUNCTIONS-IT-CALLS).") Each entry has the form (FUNCTION . FUNCTIONS-IT-CALLS).")
;;; Functions on this list are safe, even if they appear to be able ;; Functions on this list are safe, even if they appear to be able
;;; to call the target. ;; to call the target.
(defvar find-gc-noreturn-list '(Fsignal Fthrow wrong_type_argument)) (defvar find-gc-noreturn-list '(Fsignal Fthrow wrong_type_argument))
;;; This was originally generated directory-files, but there were ;; This was originally generated directory-files, but there were
;;; too many files there that were not actually compiled. The ;; too many files there that were not actually compiled. The
;;; list below was created for a HP-UX 7.0 system. ;; list below was created for a HP-UX 7.0 system.
(defvar find-gc-source-files (defvar find-gc-source-files
'("dispnew.c" "scroll.c" "xdisp.c" "window.c" '("dispnew.c" "scroll.c" "xdisp.c" "window.c"
@ -57,7 +57,7 @@ Each entry has the form (FUNCTION . FUNCTIONS-IT-CALLS).")
"keymap.c" "sysdep.c" "buffer.c" "filelock.c" "keymap.c" "sysdep.c" "buffer.c" "filelock.c"
"insdel.c" "marker.c" "minibuf.c" "fileio.c" "insdel.c" "marker.c" "minibuf.c" "fileio.c"
"dired.c" "cmds.c" "casefiddle.c" "dired.c" "cmds.c" "casefiddle.c"
"indent.c" "search.c" "regex.c" "undo.c" "indent.c" "search.c" "regex-emacs.c" "undo.c"
"alloc.c" "data.c" "doc.c" "editfns.c" "alloc.c" "data.c" "doc.c" "editfns.c"
"callint.c" "eval.c" "fns.c" "print.c" "lread.c" "callint.c" "eval.c" "fns.c" "print.c" "lread.c"
"syntax.c" "unexcoff.c" "syntax.c" "unexcoff.c"
@ -73,14 +73,14 @@ Also store it in `find-gc-unsafe-list'."
(find-unsafe-funcs 'Fgarbage_collect) (find-unsafe-funcs 'Fgarbage_collect)
(setq find-gc-unsafe-list (setq find-gc-unsafe-list
(sort find-gc-unsafe-list (sort find-gc-unsafe-list
(function (lambda (x y) (lambda (x y)
(string-lessp (car x) (car y))))))) (string-lessp (car x) (car y))))))
;;; This does a depth-first search to find all functions that can ;; This does a depth-first search to find all functions that can
;;; ultimately call the function "target". The result is an a-list ;; ultimately call the function "target". The result is an a-list
;;; in find-gc-unsafe-list; the cars are the unsafe functions, and the cdrs ;; in find-gc-unsafe-list; the cars are the unsafe functions, and the cdrs
;;; are (one of) the unsafe functions that these functions directly ;; are (one of) the unsafe functions that these functions directly
;;; call. ;; call.
(defun find-unsafe-funcs (target) (defun find-unsafe-funcs (target)
(setq find-gc-unsafe-list (list (list target))) (setq find-gc-unsafe-list (list (list target)))
@ -134,7 +134,8 @@ Also store it in `find-gc-unsafe-list'."
(setcdr entry (cons name (cdr entry))))))))))))) (setcdr entry (cons name (cdr entry)))))))))))))
(defun trace-use-tree () (defun trace-use-tree ()
(setq find-gc-subrs-callers (mapcar 'list (mapcar 'car find-gc-subrs-called))) (setq find-gc-subrs-callers
(mapcar #'list (mapcar #'car find-gc-subrs-called)))
(let ((ptr find-gc-subrs-called) (let ((ptr find-gc-subrs-called)
p2 found) p2 found)
(while ptr (while ptr

View file

@ -1,12 +1,14 @@
;;; gitmerge.el --- help merge one Emacs branch into another ;;; gitmerge.el --- help merge one Emacs branch into another -*- lexical-binding: t; -*-
;; Copyright (C) 2010-2017 Free Software Foundation, Inc. ;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
;; Authors: David Engster <deng@randomsample.de> ;; Authors: David Engster <deng@randomsample.de>
;; Stefan Monnier <monnier@iro.umontreal.ca> ;; Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords: maint ;; Keywords: maint
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or ;; the Free Software Foundation, either version 3 of the License, or
@ -35,10 +37,10 @@
;; up-to-date). ;; up-to-date).
;; - Mark commits you'd like to skip, meaning to only merge their ;; - Mark commits you'd like to skip, meaning to only merge their
;; metadata (merge strategy 'ours'). ;; metadata (merge strategy 'ours').
;; - Hit 'm' to start merging. Skipped commits will be merged separately. ;; - Hit 'm' to start merging. Skipped commits will be merged separately.
;; - If conflicts cannot be resolved automatically, you'll have to do ;; - If conflicts cannot be resolved automatically, you'll have to do
;; it manually. In that case, resolve the conflicts and restart ;; it manually. In that case, resolve the conflicts and restart
;; gitmerge, which will automatically resume. It will add resolved ;; gitmerge, which will automatically resume. It will add resolved
;; files, commit the pending merge and continue merging the rest. ;; files, commit the pending merge and continue merging the rest.
;; - Inspect master branch, and if everything looks OK, push. ;; - Inspect master branch, and if everything looks OK, push.
@ -50,13 +52,23 @@
(defvar gitmerge-skip-regexp (defvar gitmerge-skip-regexp
;; We used to include "sync" in there, but in my experience it only ;; We used to include "sync" in there, but in my experience it only
;; caused false positives. --Stef ;; caused false positives. --Stef
"back[- ]?port\\|cherry picked from commit\\|\\(do\\( no\\|n[']\\)t\\|no need to\\) merge\\|\ (let ((skip "back[- ]?port\\|cherry picked from commit\\|\
re-?generate\\|bump version\\|from trunk\\|Auto-commit" \\(do\\( no\\|n[']\\)t\\|no need to\\) merge\\|not to be merged\\|\
bump Emacs version\\|Auto-commit"))
(if noninteractive skip
;; "Regenerate" is quite prone to false positives.
;; We only want to skip merging things like AUTHORS and ldefs-boot.
;; These should be covered by "bump version" and "auto-commit".
;; It doesn't do much harm if we merge one of those files by mistake.
;; So it's better to err on the side of false negatives.
(concat skip "\\|re-?generate\\|from trunk")))
"Regexp matching logs of revisions that might be skipped. "Regexp matching logs of revisions that might be skipped.
`gitmerge-missing' will ask you if it should skip any matches.") `gitmerge-missing' will ask you if it should skip any matches.")
(defvar gitmerge-status-file (expand-file-name "gitmerge-status" (defvar gitmerge-minimum-missing 10
user-emacs-directory) "Minimum number of missing commits to consider merging in batch mode.")
(defvar gitmerge-status-file (locate-user-emacs-file "gitmerge-status")
"File where missing commits will be saved between sessions.") "File where missing commits will be saved between sessions.")
(defvar gitmerge-ignore-branches-regexp (defvar gitmerge-ignore-branches-regexp
@ -67,8 +79,9 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
'((t (:strike-through t))) '((t (:strike-through t)))
"Face for skipped commits.") "Face for skipped commits.")
(defconst gitmerge-default-branch "origin/emacs-26" (defvar gitmerge-default-branch nil
"Default for branch that should be merged.") "Default for branch that should be merged.
If nil, the function `gitmerge-default-branch' guesses.")
(defconst gitmerge-buffer "*gitmerge*" (defconst gitmerge-buffer "*gitmerge*"
"Working buffer for gitmerge.") "Working buffer for gitmerge.")
@ -84,11 +97,14 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
(defvar gitmerge-mode-map (defvar gitmerge-mode-map
(let ((map (make-keymap))) (let ((map (make-keymap)))
(define-key map [(l)] 'gitmerge-show-log) (define-key map [(l)] #'gitmerge-show-log)
(define-key map [(d)] 'gitmerge-show-diff) (define-key map [(d)] #'gitmerge-show-diff)
(define-key map [(f)] 'gitmerge-show-files) (define-key map [(f)] #'gitmerge-show-files)
(define-key map [(s)] 'gitmerge-toggle-skip) (define-key map [(s)] #'gitmerge-toggle-skip)
(define-key map [(m)] 'gitmerge-start-merge) (define-key map [(m)] #'gitmerge-start-merge)
;; For convenience:
(define-key map [(n)] #'next-line)
(define-key map [(p)] #'previous-line)
map) map)
"Keymap for gitmerge major mode.") "Keymap for gitmerge major mode.")
@ -103,10 +119,26 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
(defvar gitmerge--commits nil) (defvar gitmerge--commits nil)
(defvar gitmerge--from nil) (defvar gitmerge--from nil)
(defun gitmerge-emacs-version (&optional branch)
"Return the major version of Emacs, optionally in BRANCH."
(with-temp-buffer
(if (not branch)
(insert-file-contents "configure.ac")
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "show" (format "%s:configure.ac" branch)))
(goto-char (point-min)))
(re-search-forward "^AC_INIT([^,]+, \\[?\\([0-9]+\\)\\.")
(string-to-number (match-string 1))))
(defun gitmerge-default-branch ()
"Default for branch that should be merged; e.g. \"origin/emacs-28\"."
(or gitmerge-default-branch
(format "origin/emacs-%s" (1- (gitmerge-emacs-version)))))
(defun gitmerge-get-sha1 () (defun gitmerge-get-sha1 ()
"Get SHA1 from commit at point." "Get SHA1 from commit at point."
(save-excursion (save-excursion
(goto-char (point-at-bol)) (goto-char (line-beginning-position))
(when (looking-at "^[A-Z ]\\s-*\\([a-f0-9]+\\)") (when (looking-at "^[A-Z ]\\s-*\\([a-f0-9]+\\)")
(match-string 1)))) (match-string 1))))
@ -119,7 +151,8 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
(pop-to-buffer (get-buffer-create gitmerge-output-buffer)) (pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(fundamental-mode) (fundamental-mode)
(erase-buffer) (erase-buffer)
(call-process "git" nil t nil "log" "-1" commit) (let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "-1" commit))
(goto-char (point-min)) (goto-char (point-min))
(gitmerge-highlight-skip-regexp))))) (gitmerge-highlight-skip-regexp)))))
@ -131,7 +164,8 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
(when commit (when commit
(pop-to-buffer (get-buffer-create gitmerge-output-buffer)) (pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(erase-buffer) (erase-buffer)
(call-process "git" nil t nil "diff-tree" "-p" commit) (let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "diff-tree" "-p" commit))
(goto-char (point-min)) (goto-char (point-min))
(diff-mode))))) (diff-mode)))))
@ -144,7 +178,9 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
(pop-to-buffer (get-buffer-create gitmerge-output-buffer)) (pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(erase-buffer) (erase-buffer)
(fundamental-mode) (fundamental-mode)
(call-process "git" nil t nil "diff" "--name-only" (concat commit "^!")) (let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "diff" "--name-only"
(concat commit "^!")))
(goto-char (point-min)))))) (goto-char (point-min))))))
(defun gitmerge-toggle-skip () (defun gitmerge-toggle-skip ()
@ -154,7 +190,7 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
skip) skip)
(when commit (when commit
(save-excursion (save-excursion
(goto-char (point-at-bol)) (goto-char (line-beginning-position))
(when (looking-at "^\\([A-Z ]\\)\\s-*\\([a-f0-9]+\\)") (when (looking-at "^\\([A-Z ]\\)\\s-*\\([a-f0-9]+\\)")
(setq skip (string= (match-string 1) " ")) (setq skip (string= (match-string 1) " "))
(goto-char (match-beginning 2)) (goto-char (match-beginning 2))
@ -162,7 +198,7 @@ re-?generate\\|bump version\\|from trunk\\|Auto-commit"
(dolist (ct gitmerge--commits) (dolist (ct gitmerge--commits)
(when (string-match commit (car ct)) (when (string-match commit (car ct))
(setcdr ct (when skip "M")))) (setcdr ct (when skip "M"))))
(goto-char (point-at-bol)) (goto-char (line-beginning-position))
(setq buffer-read-only nil) (setq buffer-read-only nil)
(delete-char 1) (delete-char 1)
(insert (if skip "M" " ")) (insert (if skip "M" " "))
@ -182,12 +218,15 @@ Will detect a default set of skipped revision by looking at
cherry mark and search for `gitmerge-skip-regexp'. The result is cherry mark and search for `gitmerge-skip-regexp'. The result is
a list with entries of the form (SHA1 . SKIP), where SKIP denotes a list with entries of the form (SHA1 . SKIP), where SKIP denotes
if and why this commit should be skipped." if and why this commit should be skipped."
(message "Finding missing commits...")
(let (commits) (let (commits)
;; Go through the log and remember all commits that match ;; Go through the log and remember all commits that match
;; `gitmerge-skip-regexp' or are marked by --cherry-mark. ;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
(with-temp-buffer (with-temp-buffer
(call-process "git" nil t nil "log" "--cherry-mark" "--left-only" (let ((coding-system-for-read vc-git-log-output-coding-system))
(concat from "..." (car (vc-git-branches)))) (call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
"--no-decorate"
(concat from "..." (car (vc-git-branches)))))
(goto-char (point-max)) (goto-char (point-max))
(while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t) (while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
(let ((cherrymark (match-string 1)) (let ((cherrymark (match-string 1))
@ -203,15 +242,17 @@ if and why this commit should be skipped."
(when (re-search-forward gitmerge-skip-regexp nil t) (when (re-search-forward gitmerge-skip-regexp nil t)
(setcdr (car commits) "R")))))) (setcdr (car commits) "R"))))))
(delete-region (point) (point-max)))) (delete-region (point) (point-max))))
(message "Finding missing commits...done")
(nreverse commits))) (nreverse commits)))
(defun gitmerge-setup-log-buffer (commits from) (defun gitmerge-setup-log-buffer (commits from)
"Create the buffer for choosing commits." "Create the buffer for choosing commits."
(with-current-buffer (get-buffer-create gitmerge-buffer) (with-current-buffer (get-buffer-create gitmerge-buffer)
(erase-buffer) (erase-buffer)
(call-process "git" nil t nil "log" "--left-only" (let ((coding-system-for-read vc-git-log-output-coding-system))
"--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s" (call-process "git" nil t nil "log" "--left-only"
(concat from "..." (car (vc-git-branches)))) "--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
(concat from "..." (car (vc-git-branches)))))
(goto-char (point-min)) (goto-char (point-min))
(while (looking-at "^\\([a-f0-9]+\\)") (while (looking-at "^\\([a-f0-9]+\\)")
(let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits))) (let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
@ -245,6 +286,9 @@ should not be skipped."
(setq found (cdr skip)))) (setq found (cdr skip))))
found)) found))
(defvar change-log-start-entry-re) ; in add-log, which defines change-log-mode
(declare-function add-log-iso8601-time-string "add-log" ())
(defun gitmerge-resolve (file) (defun gitmerge-resolve (file)
"Try to resolve conflicts in FILE with smerge. "Try to resolve conflicts in FILE with smerge.
Returns non-nil if conflicts remain." Returns non-nil if conflicts remain."
@ -261,7 +305,7 @@ Returns non-nil if conflicts remain."
((derived-mode-p 'change-log-mode) ((derived-mode-p 'change-log-mode)
;; Fix up dates before resolving the conflicts. ;; Fix up dates before resolving the conflicts.
(goto-char (point-min)) (goto-char (point-min))
(let ((diff-auto-refine-mode nil)) (let ((diff-refine nil))
(while (re-search-forward smerge-begin-re nil t) (while (re-search-forward smerge-begin-re nil t)
(smerge-match-conflict) (smerge-match-conflict)
(smerge-ensure-match 3) (smerge-ensure-match 3)
@ -291,23 +335,54 @@ Returns non-nil if conflicts remain."
;; (pop-to-buffer (current-buffer)) (debug 'before-resolve) ;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
)) ))
;; Try to resolve the conflicts. ;; Try to resolve the conflicts.
(cond (let ((coding-system-for-read vc-git-log-output-coding-system)
((member file '("configure" "lisp/ldefs-boot.el" temp)
"lisp/emacs-lisp/cl-loaddefs.el")) (cond
;; We are in the file's buffer, so names are relative. ;; FIXME when merging release branch to master, we still
(call-process "git" nil t nil "checkout" "--" ;; need to detect and handle the case where NEWS was modified
(file-name-nondirectory file)) ;; without a conflict. We should abort if NEWS gets changed.
(revert-buffer nil 'noconfirm)) ((and (equal file "etc/NEWS")
(t (ignore-errors
(goto-char (point-max)) (setq temp
(while (re-search-backward smerge-begin-re nil t) (format "NEWS.%s"
(save-excursion (gitmerge-emacs-version gitmerge--from))))
(ignore-errors (file-exists-p temp)
(smerge-match-conflict) (or noninteractive
(smerge-resolve)))) (y-or-n-p "Try to fix NEWS conflict? ")))
;; (when (derived-mode-p 'change-log-mode) (let ((relfile (file-name-nondirectory file))
;; (pop-to-buffer (current-buffer)) (debug 'after-resolve)) (patchfile (concat temp "-gitmerge.patch")))
(save-buffer))) (call-process "git" nil `(:file ,patchfile) nil "diff"
(format ":1:%s" file)
(format ":3:%s" file))
(if (eq 0 (call-process "patch" patchfile nil nil temp))
(progn
;; We intentionally use a non-temporary name for this
;; file, and only delete it if applied successfully.
(delete-file patchfile)
(call-process "git" nil t nil "add" "--" temp)
(call-process "git" nil t nil "reset" "--" relfile)
(call-process "git" nil t nil "checkout" "--" relfile)
(revert-buffer nil 'noconfirm))
;; The conflict markers remain so we return non-nil.
(message "Failed to fix NEWS conflict"))))
;; Generated files.
((member file '("lisp/ldefs-boot.el" "etc/AUTHORS"))
;; We are in the file's buffer, so names are relative.
(call-process "git" nil t nil "reset" "--"
(file-name-nondirectory file))
(call-process "git" nil t nil "checkout" "--"
(file-name-nondirectory file))
(revert-buffer nil 'noconfirm))
(t
(goto-char (point-max))
(while (re-search-backward smerge-begin-re nil t)
(save-excursion
(ignore-errors
(smerge-match-conflict)
(smerge-resolve))))
;; (when (derived-mode-p 'change-log-mode)
;; (pop-to-buffer (current-buffer)) (debug 'after-resolve))
(save-buffer))))
(goto-char (point-min)) (goto-char (point-min))
(prog1 (re-search-forward smerge-begin-re nil t) (prog1 (re-search-forward smerge-begin-re nil t)
(unless exists (kill-buffer)))))))) (unless exists (kill-buffer))))))))
@ -327,9 +402,10 @@ is nil, only the single commit BEG is merged."
(if end "s were " " was ") (if end "s were " " was ")
"skipped:\n\n") "skipped:\n\n")
"")) ""))
(apply 'call-process "git" nil t nil "log" "--oneline" (let ((coding-system-for-read vc-git-log-output-coding-system))
(if end (list (concat beg "~.." end)) (apply #'call-process "git" nil t nil "log" "--oneline"
`("-1" ,beg))) (if end (list (concat beg "~.." end))
`("-1" ,beg))))
(insert "\n") (insert "\n")
;; Truncate to 72 chars so that the resulting ChangeLog line fits in 80. ;; Truncate to 72 chars so that the resulting ChangeLog line fits in 80.
(goto-char (point-min)) (goto-char (point-min))
@ -343,8 +419,9 @@ MISSING must be a list of SHA1 strings."
(with-current-buffer (get-buffer-create gitmerge-output-buffer) (with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer) (erase-buffer)
(let* ((skip (cdar missing)) (let* ((skip (cdar missing))
(coding-system-for-read vc-git-log-output-coding-system)
(beg (car (pop missing))) (beg (car (pop missing)))
end commitmessage) end commitmessage commitmessage1 commitmessage-file status)
;; Determine last revision with same boolean skip status. ;; Determine last revision with same boolean skip status.
(while (and missing (while (and missing
(eq (null (cdar missing)) (eq (null (cdar missing))
@ -358,12 +435,32 @@ MISSING must be a list of SHA1 strings."
(if end (concat ".." (substring end 0 6)) "")) (if end (concat ".." (substring end 0 6)) ""))
(unless end (unless end
(setq end beg)) (setq end beg))
(unless (zerop (when (eq system-type 'windows-nt)
(apply 'call-process "git" nil t nil "merge" "--no-ff" ;; Command lines on MS-Windows cannot include newlines.
(append (when skip '("-s" "ours")) ;; Since "git merge" doesn't accept a -F FILE option, we
`("-m" ,commitmessage ,end)))) ;; commit the merge with a shortened single-line log message,
;; and then invoke "git commit --amend" with the full log
;; message from a temporary file.
(setq commitmessage1
;; Make sure the commit message is at most a single line.
(car (split-string commitmessage "[\f\n\r\v]+")))
(setq commitmessage-file (make-nearby-temp-file "gitmerge-msg"))
(let ((coding-system-for-write vc-git-commits-coding-system))
(write-region commitmessage nil commitmessage-file nil 'silent)))
(unless (setq status
(zerop
(apply #'call-process "git" nil t nil "merge" "--no-ff"
(append (when skip '("-s" "ours"))
(if commitmessage-file
`("-m" ,commitmessage1 ,end)
`("-m" ,commitmessage ,end))))))
(gitmerge-write-missing missing from) (gitmerge-write-missing missing from)
(gitmerge-resolve-unmerged))) (gitmerge-resolve-unmerged))
(when (and commitmessage-file (file-exists-p commitmessage-file))
(if status
(call-process "git" nil t nil
"commit" "--amend" "-F" commitmessage-file))
(delete-file commitmessage-file)))
missing)) missing))
(defun gitmerge-resolve-unmerged () (defun gitmerge-resolve-unmerged ()
@ -371,12 +468,13 @@ MISSING must be a list of SHA1 strings."
Throw an user-error if we cannot resolve automatically." Throw an user-error if we cannot resolve automatically."
(with-current-buffer (get-buffer-create gitmerge-output-buffer) (with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer) (erase-buffer)
(let (files conflicted) (let ((coding-system-for-read vc-git-log-output-coding-system)
files conflicted)
;; List unmerged files ;; List unmerged files
(if (not (zerop (if (not (zerop
(call-process "git" nil t nil (call-process "git" nil t nil
"diff" "--name-only" "--diff-filter=U"))) "diff" "--name-only" "--diff-filter=U")))
(error "Error listing unmerged files. Resolve manually.") (error "Error listing unmerged files. Resolve manually.")
(goto-char (point-min)) (goto-char (point-min))
(while (not (eobp)) (while (not (eobp))
(push (buffer-substring (point) (line-end-position)) files) (push (buffer-substring (point) (line-end-position)) files)
@ -387,37 +485,56 @@ Throw an user-error if we cannot resolve automatically."
(setq conflicted t) (setq conflicted t)
;; Mark as resolved ;; Mark as resolved
(call-process "git" nil t nil "add" file))) (call-process "git" nil t nil "add" file)))
(when conflicted (if (not conflicted)
(and files (not (gitmerge-commit))
(error "Error committing resolution - fix it manually"))
(with-current-buffer (get-buffer-create gitmerge-warning-buffer) (with-current-buffer (get-buffer-create gitmerge-warning-buffer)
(erase-buffer) (erase-buffer)
(insert "For the following files, conflicts could\n" (insert "For the following files, conflicts could\n"
"not be resolved automatically:\n\n") "not be resolved automatically:\n\n")
(call-process "git" nil t nil (let ((conflicts
"diff" "--name-only" "--diff-filter=U") (with-temp-buffer
(call-process "git" nil t nil
"diff" "--name-only" "--diff-filter=U")
(buffer-string))))
(insert conflicts)
(if noninteractive (message "Conflicts in:\n%s" conflicts)))
(insert "\nResolve the conflicts manually, then run gitmerge again." (insert "\nResolve the conflicts manually, then run gitmerge again."
"\nNote:\n - You don't have to add resolved files or " "\nNote:\n - You don't have to add resolved files or "
"commit the merge yourself (but you can)." "commit the merge yourself (but you can)."
"\n - You can safely close this Emacs session and do this " "\n - You can safely close this Emacs session and do this "
"in a new one." "in a new one."
"\n - When running gitmerge again, remember that you must " "\n - When running gitmerge again, remember that you must "
"that from within the Emacs repo.\n") "do that from within the Emacs repo.\n")
(pop-to-buffer (current-buffer))) (pop-to-buffer (current-buffer)))
(user-error "Resolve the conflicts manually")))))) (user-error "Resolve the conflicts manually"))))))
(defun gitmerge-repo-clean () (defun gitmerge-repo-clean ()
"Return non-nil if repository is clean." "Return non-nil if repository is clean."
(with-temp-buffer (with-temp-buffer
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil (call-process "git" nil t nil
"diff" "--staged" "--name-only") "diff" "--staged" "--name-only")
(call-process "git" nil t nil (call-process "git" nil t nil
"diff" "--name-only") "diff" "--name-only")
(zerop (buffer-size)))) (zerop (buffer-size)))))
(defun gitmerge-commit ()
"Commit, and return non-nil if it succeeds."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(erase-buffer)
(eq 0 (call-process "git" nil t nil "commit" "--no-edit")))))
(defun gitmerge-maybe-resume () (defun gitmerge-maybe-resume ()
"Check if we have to resume a merge. "Check if we have to resume a merge.
If so, add no longer conflicted files and commit." If so, add no longer conflicted files and commit."
(let ((mergehead (file-exists-p (let ((mergehead
(expand-file-name ".git/MERGE_HEAD" default-directory))) (file-exists-p
(expand-file-name
"MERGE_HEAD"
(car (process-lines
"git" "rev-parse" "--no-flags" "--git-dir")))))
(statusexist (file-exists-p gitmerge-status-file))) (statusexist (file-exists-p gitmerge-status-file)))
(when (and mergehead (not statusexist)) (when (and mergehead (not statusexist))
(user-error "Unfinished merge, but no record of a previous gitmerge run")) (user-error "Unfinished merge, but no record of a previous gitmerge run"))
@ -425,7 +542,7 @@ If so, add no longer conflicted files and commit."
(not (gitmerge-repo-clean))) (not (gitmerge-repo-clean)))
(user-error "Repository is not clean")) (user-error "Repository is not clean"))
(when statusexist (when statusexist
(if (not (y-or-n-p "Resume merge? ")) (if (or noninteractive (not (y-or-n-p "Resume merge? ")))
(progn (progn
(delete-file gitmerge-status-file) (delete-file gitmerge-status-file)
;; No resume. ;; No resume.
@ -434,11 +551,8 @@ If so, add no longer conflicted files and commit."
(gitmerge-resolve-unmerged) (gitmerge-resolve-unmerged)
;; Commit the merge. ;; Commit the merge.
(when mergehead (when mergehead
(with-current-buffer (get-buffer-create gitmerge-output-buffer) (or (gitmerge-commit)
(erase-buffer) (error "Git error during merge - fix it manually")))
(unless (zerop (call-process "git" nil t nil
"commit" "--no-edit"))
(error "Git error during merge - fix it manually"))))
;; Successfully resumed. ;; Successfully resumed.
t)))) t))))
@ -494,8 +608,12 @@ Branch FROM will be prepended to the list."
(list (list
(if (gitmerge-maybe-resume) (if (gitmerge-maybe-resume)
'resume 'resume
(completing-read "Merge branch: " (gitmerge-get-all-branches) (if noninteractive
nil t gitmerge-default-branch)))))) (or (pop command-line-args-left)
(gitmerge-default-branch))
(completing-read "Merge branch: "
(gitmerge-get-all-branches)
nil t (gitmerge-default-branch))))))))
(let ((default-directory (vc-git-root default-directory))) (let ((default-directory (vc-git-root default-directory)))
(if (eq from 'resume) (if (eq from 'resume)
(progn (progn
@ -507,17 +625,30 @@ Branch FROM will be prepended to the list."
(setq gitmerge--from from) (setq gitmerge--from from)
(when (null gitmerge--commits) (when (null gitmerge--commits)
(user-error "Nothing to merge")) (user-error "Nothing to merge"))
(and noninteractive
gitmerge-minimum-missing
(< (length gitmerge--commits) gitmerge-minimum-missing)
(user-error "Number of missing commits (%s) is less than %s"
(length gitmerge--commits)
gitmerge-minimum-missing))
(with-current-buffer (with-current-buffer
(gitmerge-setup-log-buffer gitmerge--commits gitmerge--from) (gitmerge-setup-log-buffer gitmerge--commits gitmerge--from)
(goto-char (point-min)) (goto-char (point-min))
(insert (propertize "Commands: " 'font-lock-face 'bold) (insert (substitute-command-keys
"(s) Toggle skip, (l) Show log, (d) Show diff, " (concat
"(f) Show files, (m) Start merge\n" (propertize "Commands: " 'font-lock-face 'bold)
(propertize "Flags: " 'font-lock-face 'bold) "\\<gitmerge-mode-map>"
"(C) Detected backport (cherry-mark), (R) Log matches " "(\\[gitmerge-toggle-skip]) Toggle skip, "
"regexp, (M) Manually picked\n\n") "(\\[gitmerge-show-log]) Show log, "
"(\\[gitmerge-show-diff]) Show diff, "
"(\\[gitmerge-show-files]) Show files, "
"(\\[gitmerge-start-merge]) Start merge\n"
(propertize "Flags: " 'font-lock-face 'bold)
"(C) Detected backport (cherry-mark), (R) Matches skip "
"regexp, (M) Manually picked\n\n")))
(gitmerge-mode) (gitmerge-mode)
(pop-to-buffer (current-buffer)))))) (pop-to-buffer (current-buffer))
(if noninteractive (gitmerge-start-merge))))))
(defun gitmerge-start-merge () (defun gitmerge-start-merge ()
(interactive) (interactive)

View file

@ -1,6 +1,6 @@
### @configure_input@ ### @configure_input@
## Copyright (C) 2013-2017 Free Software Foundation, Inc. ## Copyright (C) 2013-2022 Free Software Foundation, Inc.
## This file is part of GNU Emacs. ## This file is part of GNU Emacs.
@ -28,24 +28,14 @@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
# 'make' verbosity. -include ${top_builddir}/src/verbose.mk
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
# Prevent any settings in the user environment causing problems. # Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSPATH unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
EMACS = ${top_builddir}/src/emacs EMACS = ${top_builddir}/src/emacs
emacs = EMACSLOADPATH= "${EMACS}" -batch --no-site-file --no-site-lisp emacs = "${EMACS}" -batch --no-site-file --no-site-lisp \
--eval '(setq load-prefer-newer t)'
make_bovine = ${emacs} -l semantic/bovine/grammar -f bovine-batch-make-parser make_bovine = ${emacs} -l semantic/bovine/grammar -f bovine-batch-make-parser
make_wisent = ${emacs} -l semantic/wisent/grammar -f wisent-batch-make-parser make_wisent = ${emacs} -l semantic/wisent/grammar -f wisent-batch-make-parser
@ -54,19 +44,19 @@ cedetdir = ${top_srcdir}/lisp/cedet
bovinedir = ${cedetdir}/semantic/bovine bovinedir = ${cedetdir}/semantic/bovine
wisentdir = ${cedetdir}/semantic/wisent wisentdir = ${cedetdir}/semantic/wisent
grammar_bovine = ${bovinedir}/grammar.el
grammar_wisent = ${wisentdir}/grammar.el
BOVINE = \ BOVINE = \
${bovinedir}/c-by.el \ ${bovinedir}/c-by.el \
${bovinedir}/make-by.el \ ${bovinedir}/make-by.el \
${bovinedir}/scm-by.el ${bovinedir}/scm-by.el
## FIXME Should include this one too: WISENT = \
## ${cedetdir}/semantic/grammar-wy.el ${cedetdir}/semantic/grammar-wy.el \
## but semantic/grammar.el (which is what we use to generate grammar-wy.el) ${wisentdir}/javat-wy.el \
## requires it! ${wisentdir}/js-wy.el \
WISENT = \ ${wisentdir}/python-wy.el \
${wisentdir}/javat-wy.el \
${wisentdir}/js-wy.el \
${wisentdir}/python-wy.el \
${cedetdir}/srecode/srt-wy.el ${cedetdir}/srecode/srt-wy.el
ALL = ${BOVINE} ${WISENT} ALL = ${BOVINE} ${WISENT}
@ -80,46 +70,45 @@ bovine: ${BOVINE}
wisent: ${WISENT} wisent: ${WISENT}
## c-by.el, make-by.el. ## c-by.el, make-by.el.
${bovinedir}/%-by.el: ${srcdir}/%.by ${bovinedir}/%-by.el: ${srcdir}/%.by ${grammar_bovine}
$(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
$(AM_V_at)${make_bovine} -o "$@" $< $(AM_V_at)${make_bovine} -o "$@" $<
${bovinedir}/scm-by.el: ${srcdir}/scheme.by ${bovinedir}/scm-by.el: ${srcdir}/scheme.by ${grammar_bovine}
$(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
$(AM_V_at)${make_bovine} -o "$@" $< $(AM_V_at)${make_bovine} -o "$@" $<
## grammar-wy.el ## grammar-wy.el
${cedetdir}/semantic/%-wy.el: ${srcdir}/%.wy ${cedetdir}/semantic/%-wy.el: ${srcdir}/%.wy ${grammar_wisent}
$(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
$(AM_V_at)${make_wisent} -o "$@" $< $(AM_V_at)${make_wisent} -o "$@" $<
## js-wy.el, python-wy.el ## js-wy.el, python-wy.el
${wisentdir}/%-wy.el: ${srcdir}/%.wy ${wisentdir}/%-wy.el: ${srcdir}/%.wy ${grammar_wisent}
$(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
$(AM_V_at)${make_wisent} -o "$@" $< $(AM_V_at)${make_wisent} -o "$@" $<
${wisentdir}/javat-wy.el: ${srcdir}/java-tags.wy ${wisentdir}/javat-wy.el: ${srcdir}/java-tags.wy ${grammar_wisent}
$(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
$(AM_V_at)${make_wisent} -o "$@" $< $(AM_V_at)${make_wisent} -o "$@" $<
${cedetdir}/srecode/srt-wy.el: ${srcdir}/srecode-template.wy ${cedetdir}/srecode/srt-wy.el: ${srcdir}/srecode-template.wy ${grammar_wisent}
$(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
$(AM_V_at)${make_wisent} -o "$@" $< $(AM_V_at)${make_wisent} -o "$@" $<
.PHONY: distclean bootstrap-clean maintainer-clean gen-clean
.PHONY: distclean bootstrap-clean maintainer-clean extraclean
distclean: distclean:
rm -f Makefile rm -f Makefile
## Perhaps this should do what extraclean (qv) does. ## IMO this should run gen-clean.
bootstrap-clean: bootstrap-clean:
maintainer-clean: distclean gen-clean:
## We do not normally delete the generated files, even in bootstrap.
## Creating them does not take long, so we could easily change this.
extraclean:
rm -f ${ALL} rm -f ${ALL}
maintainer-clean: gen-clean distclean
# Makefile.in ends here # Makefile.in ends here

View file

@ -1,5 +1,5 @@
;;; c.by -- LL grammar for C/C++ language specification ;;; c.by -- LL grammar for C/C++ language specification
;; Copyright (C) 1999-2017 Free Software Foundation, Inc. ;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
;; ;;
;; Author: Eric M. Ludlam <zappo@gnu.org> ;; Author: Eric M. Ludlam <zappo@gnu.org>
;; David Ponce <david@dponce.com> ;; David Ponce <david@dponce.com>
@ -187,7 +187,7 @@
;; Types ;; Types
%token VOID "void" %token VOID "void"
%put VOID summary "Built in typeless type: void" %put VOID summary "Built in type: void"
%token CHAR "char" %token CHAR "char"
%put CHAR summary "Integral Character Type: (0 to 256)" %put CHAR summary "Integral Character Type: (0 to 256)"
%token WCHAR "wchar_t" %token WCHAR "wchar_t"
@ -415,7 +415,7 @@ typesimple
: struct-or-class opt-class opt-name opt-template-specifier : struct-or-class opt-class opt-name opt-template-specifier
opt-class-parents semantic-list opt-class-parents semantic-list
(TYPE-TAG (car $3) (car $1) (TYPE-TAG (car $3) (car $1)
(let ((semantic-c-classname (cons (car ,$3) (car ,$1)))) (dlet ((semantic-c-classname (cons (car ,$3) (car ,$1))))
(EXPANDFULL $6 classsubparts)) (EXPANDFULL $6 classsubparts))
$5 $5
:template-specifier $4 :template-specifier $4
@ -917,8 +917,8 @@ variablearg-opt-name
( ,$1 ) ( ,$1 )
| semantic-list arg-list | semantic-list arg-list
( (car ( EXPAND $1 function-pointer )) $2) ( (car ( EXPAND $1 function-pointer )) $2)
;; Klaus Berndl: This allows variableargs without a arg-name being ;; Klaus Berndl: This allows variableargs without an arg-name being
;; parsed correct even if there several pointers (*) ;; parsed correctly even if there several pointers (*)
| opt-stars | opt-stars
( "" ,$1 nil nil nil ) ( "" ,$1 nil nil nil )
; ;

View file

@ -1,9 +1,8 @@
;;; semantic-grammar.wy -- LALR grammar of Semantic input grammars ;;; semantic-grammar.wy -- LALR grammar of Semantic input grammars
;; ;;
;; Copyright (C) 2002-2017 Free Software Foundation, Inc. ;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
;; ;;
;; Author: David Ponce <david@dponce.com> ;; Author: David Ponce <david@dponce.com>
;; Maintainer: David Ponce <david@dponce.com>
;; Created: 26 Aug 2002 ;; Created: 26 Aug 2002
;; Keywords: syntax ;; Keywords: syntax
;; X-RCS: $Id: semantic-grammar.wy,v 1.16 2005/09/30 20:20:27 zappo Exp $ ;; X-RCS: $Id: semantic-grammar.wy,v 1.16 2005/09/30 20:20:27 zappo Exp $
@ -53,6 +52,7 @@
%keyword LEFT "%left" %keyword LEFT "%left"
%keyword NONASSOC "%nonassoc" %keyword NONASSOC "%nonassoc"
%keyword PACKAGE "%package" %keyword PACKAGE "%package"
%keyword EXPECTEDCONFLICTS "%expectedconflicts"
%keyword PROVIDE "%provide" %keyword PROVIDE "%provide"
%keyword PREC "%prec" %keyword PREC "%prec"
%keyword PUT "%put" %keyword PUT "%put"
@ -128,7 +128,7 @@ epilogue:
;; ;;
declaration: declaration:
decl decl
(eval $1) (eval $1 t)
; ;
decl: decl:
@ -136,6 +136,7 @@ decl:
| no_default_prec_decl | no_default_prec_decl
| languagemode_decl | languagemode_decl
| package_decl | package_decl
| expectedconflicts_decl
| provide_decl | provide_decl
| precedence_decl | precedence_decl
| put_decl | put_decl
@ -168,6 +169,11 @@ package_decl:
`(PACKAGE-TAG ',$2 nil) `(PACKAGE-TAG ',$2 nil)
; ;
expectedconflicts_decl:
EXPECTEDCONFLICTS symbols
`(TAG ',(car $2) 'expectedconflicts :rest ',(cdr $2))
;
provide_decl: provide_decl:
PROVIDE SYMBOL PROVIDE SYMBOL
`(TAG ',$2 'provide) `(TAG ',$2 'provide)
@ -200,7 +206,7 @@ put_decl:
put_name_list: put_name_list:
BRACE_BLOCK BRACE_BLOCK
(mapcar 'semantic-tag-name (EXPANDFULL $1 put_names)) (mapcar #'semantic-tag-name (EXPANDFULL $1 put_names))
; ;
put_names: put_names:
@ -220,7 +226,7 @@ put_name:
put_value_list: put_value_list:
BRACE_BLOCK BRACE_BLOCK
(mapcar 'semantic-tag-code-detail (EXPANDFULL $1 put_values)) (mapcar #'semantic-tag-code-detail (EXPANDFULL $1 put_values))
; ;
put_values: put_values:
@ -294,7 +300,7 @@ plist:
use_name_list: use_name_list:
BRACE_BLOCK BRACE_BLOCK
(mapcar 'semantic-tag-name (EXPANDFULL $1 use_names)) (mapcar #'semantic-tag-name (EXPANDFULL $1 use_names))
; ;
use_names: use_names:
@ -350,7 +356,7 @@ nonterminal:
rules: rules:
lifo_rules lifo_rules
(apply 'nconc (nreverse $1)) (apply #'nconc (nreverse $1))
; ;
lifo_rules: lifo_rules:

View file

@ -1,9 +1,8 @@
;;; java-tags.wy -- Semantic LALR grammar for Java ;;; java-tags.wy -- Semantic LALR grammar for Java
;; Copyright (C) 2002-2017 Free Software Foundation, Inc. ;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
;; ;;
;; Author: David Ponce <david@dponce.com> ;; Author: David Ponce <david@dponce.com>
;; Maintainer: David Ponce <david@dponce.com>
;; Created: 26 Aug 2002 ;; Created: 26 Aug 2002
;; Keywords: syntax ;; Keywords: syntax

View file

@ -1,6 +1,6 @@
;;; javascript-jv.wy -- LALR grammar for Javascript ;;; javascript-jv.wy -- LALR grammar for Javascript
;; Copyright (C) 2005-2017 Free Software Foundation, Inc. ;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
;; Copyright (C) 1998-2011 Ecma International. ;; Copyright (C) 1998-2011 Ecma International.
;; Author: Joakim Verona ;; Author: Joakim Verona
@ -25,7 +25,7 @@
;; The grammar itself is transcribed from the ECMAScript Language ;; The grammar itself is transcribed from the ECMAScript Language
;; Specification published at ;; Specification published at
;; ;;
;; http://www.ecma-international.org/publications/standards/Ecma-262.htm ;; https://www.ecma-international.org/publications/standards/Ecma-262.htm
;; ;;
;; and redistributed under the following license: ;; and redistributed under the following license:
@ -236,9 +236,9 @@
%token <number> NUMBER %token <number> NUMBER
%token FALSE %token <false> FALSE
%token TRUE %token <true> TRUE
%token QUERY %token <query> QUERY
%token NULL_TOKEN %token NULL_TOKEN
@ -296,19 +296,11 @@ FormalParameterList: OPEN_PARENTHESIS
() ()
; ;
StatementList : Statement
| StatementList Statement
;
Block : BRACE_BLOCK Block : BRACE_BLOCK
;; If you want to parse the body of the function ;; If you want to parse the body of the function
;; ( EXPANDFULL $1 BlockExpand ) ;; ( EXPANDFULL $1 BlockExpand )
; ;
BlockExpand: START_BLOCK StatementList END_BLOCK
| START_BLOCK END_BLOCK
;
VariableStatement : VAR VariableDeclarationList SEMICOLON VariableStatement : VAR VariableDeclarationList SEMICOLON
(VARIABLE-TAG $2 nil nil) (VARIABLE-TAG $2 nil nil)
; ;

View file

@ -1,6 +1,6 @@
;;; make.by -- BY notation for Makefiles. ;;; make.by -- BY notation for Makefiles.
;; Copyright (C) 1999-2017 Free Software Foundation, Inc. ;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
;; ;;
;; Author: Eric M. Ludlam <zappo@gnu.org> ;; Author: Eric M. Ludlam <zappo@gnu.org>
;; David Ponce <david@dponce.com> ;; David Ponce <david@dponce.com>
@ -54,15 +54,20 @@
%% %%
;; Escape the ,@ below because the reader doesn't correctly detect
;; old-style backquotes for this case. The backslashes can be removed
;; once old-style backquotes are completely gone (probably in
;; Emacs 28).
Makefile : bol newline (nil) Makefile : bol newline (nil)
| bol variable | bol variable
( ,@$2 ) ( \,@$2 )
| bol rule | bol rule
( ,@$2 ) ( \,@$2 )
| bol conditional | bol conditional
( ,@$2 ) ( \,@$2 )
| bol include | bol include
( ,@$2 ) ( \,@$2 )
| whitespace ( nil ) | whitespace ( nil )
| newline ( nil ) | newline ( nil )
; ;
@ -125,13 +130,13 @@ colons: COLON COLON ()
; ;
element-list: elements newline element-list: elements newline
( ,@$1 ) ( \,@$1 )
; ;
elements: element some-whitespace elements elements: element some-whitespace elements
( ,@$1 ,@$3 ) ( \,@$1 ,@$3 )
| element | element
( ,@$1 ) ( \,@$1 )
| ;;EMPTY | ;;EMPTY
; ;

View file

@ -1,11 +1,10 @@
;;; python.wy -- LALR grammar for Python ;;; python.wy -- LALR grammar for Python
;; Copyright (C) 2002-2017 Free Software Foundation, Inc. ;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, ;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
;; 2009, 2010 Python Software Foundation; All Rights Reserved ;; 2009, 2010 Python Software Foundation; All Rights Reserved
;; Author: Richard Kim <ryk@dspwiz.com> ;; Author: Richard Kim <ryk@dspwiz.com>
;; Maintainer: Richard Kim <ryk@dspwiz.com>
;; Created: June 2002 ;; Created: June 2002
;; Keywords: syntax ;; Keywords: syntax
;; ;;
@ -89,14 +88,17 @@
%package wisent-python-wy %package wisent-python-wy
%provide semantic/wisent/python-wy %provide semantic/wisent/python-wy
%expectedconflicts 5
%{ %{
(require 'semantic/tag)
(declare-function wisent-python-reconstitute-function-tag (declare-function wisent-python-reconstitute-function-tag
"semantic/wisent/python" (tag suite)) "semantic/wisent/python" (tag suite))
(declare-function wisent-python-reconstitute-class-tag "semantic/wisent/python" (declare-function wisent-python-reconstitute-class-tag "semantic/wisent/python"
(tag)) (tag))
(declare-function semantic-parse-region "semantic" (declare-function semantic-parse-region "semantic"
(start end &optional nonterminal depth returnonerror)) (start end &optional nonterminal depth returnonerror))
(defvar wisent-python-EXPANDING-block)
} }
%languagemode python-mode %languagemode python-mode
@ -184,6 +186,7 @@
%token <punctuation> ASSIGN "=" %token <punctuation> ASSIGN "="
%token <punctuation> BACKQUOTE "`" %token <punctuation> BACKQUOTE "`"
%token <punctuation> AT "@" %token <punctuation> AT "@"
%token <punctuation> FOLLOWS "->"
;; ----------------- ;; -----------------
@ -808,12 +811,17 @@ decorators
;; funcdef: [decorators] 'def' NAME parameters ':' suite ;; funcdef: [decorators] 'def' NAME parameters ':' suite
funcdef funcdef
: DEF NAME function_parameter_list COLON suite : DEF NAME function_parameter_list return_type_hint COLON suite
(wisent-python-reconstitute-function-tag (wisent-python-reconstitute-function-tag
(FUNCTION-TAG $2 nil $3) $5) (FUNCTION-TAG $2 nil $3) $6)
| decorators DEF NAME function_parameter_list COLON suite | decorators DEF NAME function_parameter_list return_type_hint COLON suite
(wisent-python-reconstitute-function-tag (wisent-python-reconstitute-function-tag
(FUNCTION-TAG $3 nil $4 :decorators $1) $6) (FUNCTION-TAG $3 nil $4 :decorators $1) $7)
;
return_type_hint
: ;;EMPTY
| FOLLOWS type
; ;
function_parameter_list function_parameter_list
@ -865,7 +873,7 @@ paren_class_list_opt
paren_class_list paren_class_list
: PAREN_BLOCK : PAREN_BLOCK
(let ((wisent-python-EXPANDING-block t)) (let ((wisent-python-EXPANDING-block t))
(mapcar 'semantic-tag-name (EXPANDFULL $1 paren_classes))) (mapcar #'semantic-tag-name (EXPANDFULL $1 paren_classes)))
; ;
;; parameters: '(' [varargslist] ')' ;; parameters: '(' [varargslist] ')'
@ -887,7 +895,7 @@ paren_classes
;; parser can parse general expressions, I don't see much benefit in ;; parser can parse general expressions, I don't see much benefit in
;; generating a string of expression as base class "name". ;; generating a string of expression as base class "name".
paren_class paren_class
: dotted_name : type
; ;
;;;**************************************************************************** ;;;****************************************************************************
@ -1140,7 +1148,7 @@ fpdef_opt_test
;; fpdef: NAME | '(' fplist ')' ;; fpdef: NAME | '(' fplist ')'
fpdef fpdef
: NAME : NAME type_hint
(VARIABLE-TAG $1 nil nil) (VARIABLE-TAG $1 nil nil)
;; Below breaks the parser. Don't know why, but my guess is that ;; Below breaks the parser. Don't know why, but my guess is that
;; LPAREN/RPAREN clashes with the ones in function_parameters. ;; LPAREN/RPAREN clashes with the ones in function_parameters.
@ -1148,15 +1156,25 @@ fpdef
;; (identity $2) ;; (identity $2)
; ;
;; fplist: fpdef (',' fpdef)* [','] ;; These rules are now useless because the above rule doesn't refer to them.
fplist ;; ;; fplist: fpdef (',' fpdef)* [',']
: fpdef_list comma_opt ;; fplist
;; : fpdef_list comma_opt
;; ;
;; ;; fpdef (',' fpdef)*
;; fpdef_list
;; : fpdef
;; | fpdef_list COMMA fpdef
;; ;
type_hint
: ;;EMPTY
| COLON type
; ;
;; fpdef (',' fpdef)* type
fpdef_list : test
: fpdef
| fpdef_list COMMA fpdef
; ;
;; ['=' test] ;; ['=' test]

View file

@ -1,6 +1,6 @@
;;; scheme.by -- Scheme BNF language specification ;;; scheme.by -- Scheme BNF language specification
;; Copyright (C) 2001-2017 Free Software Foundation, Inc. ;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
;; This file is part of GNU Emacs. ;; This file is part of GNU Emacs.
@ -20,6 +20,11 @@
%package semantic-scm-by %package semantic-scm-by
%provide semantic/bovine/scm-by %provide semantic/bovine/scm-by
%{
(declare-function semantic-parse-region "semantic"
(start end &optional nonterminal depth returnonerror))
}
%languagemode scheme-mode %languagemode scheme-mode
%start scheme %start scheme
@ -67,6 +72,8 @@ scheme-in-list: DEFINE symbol expression
(INCLUDE-TAG (file-name-nondirectory (read $2)) (read $2) ) (INCLUDE-TAG (file-name-nondirectory (read $2)) (read $2) )
| symbol sequence | symbol sequence
(CODE-TAG $1 nil) (CODE-TAG $1 nil)
| ;; No match, error
(TAG "Bad Tag in Sexp" 'error)
; ;
name-args: semantic-list name-args: semantic-list

View file

@ -1,8 +1,8 @@
;;; srecode-template.wy --- Semantic Recoder Template parser ;;; srecode-template.wy --- Semantic Recoder Template parser
;; Copyright (C) 2005-2017 Free Software Foundation, Inc. ;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
;; Author: Eric Ludlam <zappo@gnu.org> ;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: syntax ;; Keywords: syntax
;; X-RCS: $Id: srecode-template.wy,v 1.10 2009-01-09 23:01:54 zappo Exp $ ;; X-RCS: $Id: srecode-template.wy,v 1.10 2009-01-09 23:01:54 zappo Exp $

View file

@ -1,6 +1,6 @@
;;; last-chance.el --- dangling deterrence -*- lexical-binding: t; -*- ;;; last-chance.el --- dangling deterrence -*- lexical-binding: t; -*-
;; Copyright (C) 2016-2017 Free Software Foundation, Inc. ;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
;; Author: Thien-Thi Nguyen <ttn@gnu.org> ;; Author: Thien-Thi Nguyen <ttn@gnu.org>
;; Maintainer: emacs-devel@gnu.org ;; Maintainer: emacs-devel@gnu.org
@ -25,13 +25,13 @@
;;; Commentary: ;;; Commentary:
;; Late 2016. In a recent build, the date in a ChangeLog file ;; Late 2016. In a recent build, the date in a ChangeLog file
;; is not fontified. Turns out the face change-log-date-face ;; is not fontified. Turns out the face `change-log-date-face'
;; was declared obsolete since 22.1 and removed 2016-06-23. ;; was declared obsolete since 22.1 and removed 2016-06-23.
;; (compile "git show c430f7e23fc2c22f251ace4254e37dea1452dfc3") ;; (compile "git show c430f7e23fc2c22f251ace4254e37dea1452dfc3")
;; ;;
;; This library provides a command last-chance, which is a small ;; This library provides a command `last-chance', which is a small
;; combination of "git grep" and some regexp filtering. For example, ;; combination of "git grep" and some regexp filtering. For example,
;; if point is on the symbol change-log-date-face in the form: ;; if point is on the symbol `change-log-date-face' in the form:
;; ;;
;; (define-obsolete-face-alias 'change-log-date-face ...) ;; (define-obsolete-face-alias 'change-log-date-face ...)
;; ;;
@ -39,7 +39,7 @@
;; ;;
;; M-x last-chance RET ;; M-x last-chance RET
;; ;;
;; will show you any references to change-log-date-face in the ;; will show you any references to `change-log-date-face' in the
;; *.el files in a new buffer (in Grep mode). Hopefully you see ;; *.el files in a new buffer (in Grep mode). Hopefully you see
;; only the obsolete declaration and can proceed w/ its removal. ;; only the obsolete declaration and can proceed w/ its removal.
;; If not, please DTRT and refrain from the removal until those ;; If not, please DTRT and refrain from the removal until those
@ -59,17 +59,17 @@ This should include -n, -H, -F.")
(defvar last-chance-uninteresting-regexps (defvar last-chance-uninteresting-regexps
'("ChangeLog[.0-9]*:" '("ChangeLog[.0-9]*:"
"NEWS[-.0-9]*:" "NEWS[-.0-9]*:"
;; Add more flush-lines args here. ;; Add more `flush-lines' args here.
) )
"List of regexps that match uninteresting \"git grep\" hits.") "List of regexps that match uninteresting \"git grep\" hits.")
(defvar-local last-chance-symbol nil (defvar-local last-chance-symbol nil
"Symbol set by last-chance for last-chance-cleanup to DTRT.") "Symbol set by `last-chance' for `last-chance-cleanup' to DTRT.")
(defun last-chance-cleanup (buffer status) (defun last-chance-cleanup (buffer status)
"Filter lines in BUFFER; append STATUS and count of removed lines. "Filter lines in BUFFER; append STATUS and count of removed lines.
If BUFFER does not seem to be one created by last-chance, do nothing. If BUFFER does not seem to be one created by `last-chance', do nothing.
This function is intended to be added to compilation-finish-functions." This function is intended to be added to `compilation-finish-functions'."
(let ((name (buffer-local-value 'last-chance-symbol buffer)) (let ((name (buffer-local-value 'last-chance-symbol buffer))
bef aft) bef aft)
(when name (when name
@ -90,10 +90,10 @@ This function is intended to be added to compilation-finish-functions."
(defun last-chance (symbol) (defun last-chance (symbol)
"Grep the repo for SYMBOL, filtering the hits. "Grep the repo for SYMBOL, filtering the hits.
This uses last-chance-grep-command to do the grep and the This uses `last-chance-grep-command' to do the grep and the
regexps in last-chance-uninteresting-regexps to filter the hits. regexps in `last-chance-uninteresting-regexps' to filter the hits.
Grepping is recursive starting under the dir that vc-root-dir Grepping is recursive starting under the dir that `vc-root-dir'
finds (or the default directory if vc-root-dir finds nothing). finds (or the default directory if `vc-root-dir' finds nothing).
Output goes to the *grep* buffer. Output goes to the *grep* buffer.
Interactively, Emacs queries for a symbol, Interactively, Emacs queries for a symbol,
@ -105,18 +105,14 @@ defaulting to the one at point."
"Symbol: " obarray "Symbol: " obarray
nil nil nil nil
one nil one))))) one nil one)))))
(let ((default-directory (or (vc-root-dir) (with-current-buffer
default-directory))) (let ((default-directory (or (vc-root-dir)
(grep (format "%s %s" default-directory)))
last-chance-grep-command (grep (format "%s %s"
symbol))) last-chance-grep-command
(setf (buffer-local-value 'last-chance-symbol symbol)))
(process-buffer (add-hook 'compilation-finish-functions #'last-chance-cleanup nil t)
(car compilation-in-progress))) (setq-local last-chance-symbol symbol)))
symbol))
(add-to-list 'compilation-finish-functions
'last-chance-cleanup)
(provide 'last-chance) (provide 'last-chance)

View file

@ -2,7 +2,7 @@
# Build Emacs with various options for profiling, debugging, # Build Emacs with various options for profiling, debugging,
# with and without warnings enabled etc. # with and without warnings enabled etc.
# Copyright (C) 2001-2017 Free Software Foundation, Inc. # Copyright (C) 2001-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -109,7 +109,7 @@ if (@ARGV && $ARGV[0] eq "all")
shift @ARGV; shift @ARGV;
} }
system ("$make clean versionclean") if $all; system ("$make clean") if $all;
if ($wall) if ($wall)
{ {

217
admin/make-manuals Executable file
View file

@ -0,0 +1,217 @@
#!/bin/bash
### make-manuals - create the Emacs manuals to upload to the gnu.org website
## Copyright 2018-2022 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## Maintainer: emacs-devel@gnu.org
## 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 <https://www.gnu.org/licenses/>.
### Commentary:
## This is a helper script to create the Emacs manuals as used on the
## gnu.org website. After this, use upload-manuals to upload them.
##
## Usage:
## Call from the top-level directory of an Emacs source tree.
## This should normally be a release.
## The info files should exist.
### Code:
set -o nounset
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
usage ()
{
cat 1>&2 <<EOF
Usage: ${PN} [-c] [-e emacs]
Create the Emacs manuals for the gnu.org website.
Call this script from the top-level of the Emacs source tree that
contains the manuals you want to use (normally a release).
The admin/ directory is required.
Options:
-c: do not delete any pre-existing $outdir/ directory
-e: Emacs executable to use (default $emacs)
EOF
exit 1
}
## Defaults.
continue=
emacs=emacs
## Parameters.
outdir=manual
gzip="gzip --best --no-name"
tar="tar --numeric-owner --owner=0 --group=0 --mode=go+u,go-w"
## Requires GNU tar >= 1.28 so that the tarballs are more reproducible.
## (Personally I think this is way OOT. I'm not even sure if anyone
## uses these tarfiles, let alone cares whether they are reproducible.)
tar --help | grep -- '--sort.*name' >& /dev/null && tar="$tar --sort=name"
while getopts ":hce:" option ; do
case $option in
(h) usage ;;
(c) continue=t ;;
(e) emacs=$OPTARG ;;
(\?) die "Bad option -$OPTARG" ;;
(:) die "Option -$OPTARG requires an argument" ;;
(*) die "getopts error" ;;
esac
done
shift $(( --OPTIND ))
OPTIND=1
[ $# -eq 0 ] || usage
[ -e admin/admin.el ] || die "admin/admin.el not found"
tempfile=/tmp/$PN.$$
trap "rm -f $tempfile 2> /dev/null" EXIT
[ "$continue" ] || rm -rf $outdir
if [ -e $outdir ]; then
## Speed up repeat invocation.
echo "Re-using existing $outdir/ directory"
else
## This creates the manuals in a manual/ directory.
## Note makeinfo >= 5 is much slower than makeinfo 4.
echo "Making manuals (slow)..."
$emacs --batch -Q -l admin/admin.el -f make-manuals \
>| $tempfile 2>&1 || {
cat $tempfile 1>&2
die "error running make-manuals"
}
fi
find $outdir -name '*~' -exec rm {} +
echo "Adding compressed html files..."
for f in emacs elisp; do
$tar -C $outdir/html_node -cf - $f | $gzip \
> $outdir/$f.html_node.tar.gz || die "error for $f"
done
echo "Making manual tarfiles..."
$emacs --batch -Q -l admin/admin.el -f make-manuals-dist \
>| $tempfile || {
cat $tempfile 1>&2
die "error running make-manuals-dist"
}
o=$outdir/texi
mkdir -p $o
for f in $outdir/*.tar; do
of=${f##*/}
of=${of#emacs-}
of=${of%%-[0-9]*}.texi.tar
of=${of/lispintro/eintr}
of=${of/lispref/elisp}
of=${of/manual/emacs}
of=$o/$of
mv $f $of
$gzip $of || die "error compressing $f"
done
echo "Making refcards..."
make -C etc/refcards dist >| $tempfile 2>&1 || {
cat $tempfile 1>&2
die "failed make dist"
}
## This may hang if eg german.sty is missing.
make -k -C etc/refcards pdf >| $tempfile 2>&1 || {
cat $tempfile 1>&2
echo "Warning: ignored failure(s) from make pdf"
}
## Newer Texlive only provide mex (used by pl refcards) for pdf, AFAICS.
make -k -C etc/refcards ps >| $tempfile 2>&1 || {
cat $tempfile 1>&2
echo "Warning: ignored failure(s) from make ps"
}
## Note that in the website, refcards/ is not a subdirectory of manual/.
refdir=$outdir/refcards
mkdir -p $refdir
mv etc/refcards/emacs-refcards.tar $refdir
$gzip $refdir/emacs-refcards.tar
for fmt in pdf ps; do
o=$refdir/$fmt
mkdir -p $o
[ $fmt = pdf ] && {
cp etc/refcards/*.$fmt $o
rm $o/gnus-logo.pdf
continue
}
for f in etc/refcards/*.$fmt; do
$gzip < $f > $o/${f##*/}.gz
done
done
make -C etc/refcards extraclean > /dev/null
echo "Adding compressed info files..."
o=$outdir/info
mkdir -p $o
for f in eintr.info elisp.info emacs.info; do
$gzip < info/$f > $o/$f.gz || die "error for $f"
done
echo "Finished OK, you might want to run upload-manuals now"
exit 0

View file

@ -5,7 +5,7 @@ Instructions to create pretest or release tarballs. -*- coding: utf-8 -*-
Steps to take before starting on the first pretest in any release sequence: Steps to take before starting on the first pretest in any release sequence:
0. The release branch (e.g. emacs-26) should already have been made 0. The release branch (e.g. emacs-28) should already have been made
and you should use it for all that follows. Diffs from this and you should use it for all that follows. Diffs from this
branch should be going to the emacs-diffs mailing list. branch should be going to the emacs-diffs mailing list.
@ -14,17 +14,18 @@ Steps to take before starting on the first pretest in any release sequence:
2. Consider increasing the value of the variable 2. Consider increasing the value of the variable
'customize-changed-options-previous-release' in cus-edit.el to 'customize-changed-options-previous-release' in cus-edit.el to
refer to a newer version of Emacs. (This is probably needed only refer to a newer version of Emacs. (This is now done when cutting
when preparing the first pretest for a major Emacs release.) the release branch, see admin/release-branch.txt, but it can't
Commit cus-edit.el if changed. hurt to double check its value.) Commit cus-edit.el if changed.
3. Remove any old pretests from https://alpha.gnu.org/gnu/emacs/pretest. 3. Remove any old pretests from https://alpha.gnu.org/gnu/emacs/pretest.
You can use 'gnupload --delete' (see below for more gnupload details). You can use 'gnupload --delete' (see below for more gnupload details).
(We currently don't bother with this.)
General steps (for each step, check for possible errors): General steps (for each step, check for possible errors):
1. git pull # fetch from the repository 1. git pull # fetch from the repository
git status # check for locally modified files git status # check for locally modified files
Ensure that you have a clean, unmodified state. Ensure that you have a clean, unmodified state.
If you switched in-place from another branch to the release branch, If you switched in-place from another branch to the release branch,
@ -33,17 +34,72 @@ General steps (for each step, check for possible errors):
or some form of "git clean -x". It's probably simpler and safer to or some form of "git clean -x". It's probably simpler and safer to
make a new working directory exclusively for the release branch. make a new working directory exclusively for the release branch.
2. Regenerate the etc/AUTHORS file: If the working directory has subdirectories created when making
previous releases or pretests, remove those subdirectories, as the
command which updates the ChangeLog file might attempt to recurse
there and scan any ChangeLog.* files there.
Make sure the tree is built, or at least configured. That's
because some of the commands below run Make, so they need
Makefiles to be present.
For Emacs 28 and later, as long as --with-native-compilation is
not the default, the tree needs to be configured with
native-compilation enabled, to ensure all the pertinent *.elc
files will end up in the tarball. Otherwise, the *.eln files
might not build correctly on the user's system.
./autogen.sh
./configure --with-native-compilation && make
For a release (as opposed to pretest), visit etc/NEWS and use the
"M-x emacs-news-delete-temporary-markers" command to delete any
left-over "---" and "+++" markers from etc/NEWS, as well as the
"Temporary note" section at the beginning of that file, and commit
etc/NEWS if it was modified. For a bug fix release (e.g. 28.2),
delete any empty headlines too.
2. Regenerate the versioned ChangeLog.N and etc/AUTHORS files.
The "M-x authors" command below will first update the current
versioned ChangeLog.N file. For this to work correctly, make sure
the top-level Makefile says
PREFERRED_BRANCH = emacs-NN
where NN is the version on the release branch from which you are
producing the tarball. If NN is incorrect, update Makefile.in and
re-run 'configure' to update Makefile.
If the versioned ChangeLog.N file is too large, start a new one
by bumping N, and also update the line in top-level Makefile.in
which says
CHANGELOG_HISTORY_INDEX_MAX = N
by incrementing the value of N by 1; then regenerate Makefile.
Now:
M-: (require 'authors) RET M-: (require 'authors) RET
M-x authors RET M-x authors RET
(This first updates the current versioned ChangeLog.N) If this says "Problem updating ChangeLog", find the reason for the
failure of the command it runs, viz.:
If there is an "*Authors Errors*" buffer, address the issues. make -C ROOT change-history-nocommit
If there was a ChangeLog typo, fix the relevant entry.
If a file was deleted or renamed, consider adding an appropriate (where ROOT is the top-level directory where you run this). It
entry to authors-ignored-files, authors-valid-file-names, or could be because there are uncommitted changes in ChangeLog.N, for
authors-renamed-files-alist. example. One possible way forward is to invoke "C-u M-x authors",
which will skip updating the versioned ChangeLog.N file.
After "M-x authors" finishes, if there is an "*Authors Errors*"
buffer, address the issues. If there was a ChangeLog typo, fix
the relevant entry. If a file was deleted or renamed, consider
adding an appropriate entry to variables authors-ignored-files,
authors-valid-file-names, or authors-renamed-files-alist in
authors.el.
If necessary, repeat 'C-u M-x authors' after making those changes. If necessary, repeat 'C-u M-x authors' after making those changes.
Save the "*Authors*" buffer as etc/AUTHORS. Save the "*Authors*" buffer as etc/AUTHORS.
@ -53,21 +109,31 @@ General steps (for each step, check for possible errors):
3. Set the version number (M-x load-file RET admin/admin.el RET, then 3. Set the version number (M-x load-file RET admin/admin.el RET, then
M-x set-version RET). For a pretest, start at version .90. After M-x set-version RET). For a pretest, start at version .90. After
.99, use .990 (so that it sorts). .99, use .990 (so that it sorts). Commit the resulting changes
as one, with nothing else included, and using a log message
of the format "Bump Emacs version to ...", so that the commit can
be skipped when merging branches (see admin/gitmerge.el).
The final pretest should be a release candidate. The final pretest should be a release candidate.
Before a release candidate is made, the tasks listed in Before a release candidate is made, the tasks listed in
admin/release-process must be completed. admin/release-process must be completed.
Set the version number to that of the actual release. Pick a date Set the version number to that of the actual release (commit in
about a week from now when you intend to make the release. Use M-x one, as described above). Pick a date about a week from now when
add-release-logs to add entries to etc/HISTORY and the ChangeLog you intend to make the release. Use M-x add-release-logs from
admin/admin.el to add entries to etc/HISTORY and the ChangeLog
file. It's best not to commit these files until the release is file. It's best not to commit these files until the release is
actually made. Merge the entries from (unversioned) ChangeLog actually made. Merge the entries from (unversioned) ChangeLog
into the top of the current versioned ChangeLog.N and commit that into the top of the current versioned ChangeLog.N and commit that
along with etc/HISTORY. Then you can tag that commit as the along with etc/HISTORY. Then you can tag that commit as the
release. release.
Alternatively, you can commit and tag with the RC tag right away,
and delay the final tagging until you actually decide to make a
release and announce it. The "git tag" command can tag a specific
commit if you give it the SHA1 of that commit, even if additional
commits have been pushed in the meantime.
Name the tar file as emacs-XX.Y-rc1.tar. If all goes well in the Name the tar file as emacs-XX.Y-rc1.tar. If all goes well in the
following week, you can simply rename the file and use it for the following week, you can simply rename the file and use it for the
actual release. If you need another release candidate, remember actual release. If you need another release candidate, remember
@ -81,22 +147,41 @@ General steps (for each step, check for possible errors):
Never replace an existing tarfile! If you need to fix something, Never replace an existing tarfile! If you need to fix something,
always upload it with a different name. always upload it with a different name.
4. autoreconf -i -I m4 --force 4. autoreconf -i -I m4 --force
make bootstrap make bootstrap
make -C etc/refcards make -C etc/refcards
make -C etc/refcards clean make -C etc/refcards clean
If some of the etc/refcards, especially the non-English ones, fail
to build, you probably need to install some TeX/LaTeX packages, in
particular for foreign language support. For more information,
search for the string "refcard" in the file admin/release-process.
(ru-refcard causes numerous "Underfull hbox" and "Overfull hbox"
messages from TeX, but those seem to be harmless, as the result
looks just fine.)
5. Copy lisp/loaddefs.el to lisp/ldefs-boot.el. 5. Copy lisp/loaddefs.el to lisp/ldefs-boot.el.
Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the files
files changed by M-x set-version. changed by M-x set-version. Note that the set-version changes
should be committed separately, as described in step 3 above, to
avoid them being merged to master. The lisp/ldefs-boot.el file
should not be merged to master either, so it could be added to the
same commit or committed separately.
The easiest way of doing that is "C-x v d ROOT-DIR RET", then go
to the first modified file, press 'M' to mark all modified files,
and finally 'v' to commit them. Make sure the commit log message
mentions all the changes in all modified files, as by default 'v'
doesn't necessarily do so.
If someone else made a commit between step 1 and now, If someone else made a commit between step 1 and now,
you need to repeat from step 4 onwards. (You can commit the files you need to repeat from step 4 onwards. (You can commit the files
from step 2 and 3 earlier to reduce the chance of this.) from step 2 and 3 earlier to reduce the chance of this.)
6. ./make-dist --snapshot --no-compress 6. ./make-dist --snapshot --no-compress
Check the contents of the new tar with admin/diff-tar-files Check the contents of the new tar with admin/diff-tar-files
against the previous release (if this is the first pretest) or the against the previous release (if this is the first pretest) or the
@ -104,13 +189,30 @@ General steps (for each step, check for possible errors):
yourself, find it at <https://alpha.gnu.org/gnu/emacs/pretest>. yourself, find it at <https://alpha.gnu.org/gnu/emacs/pretest>.
Releases are of course at <https://ftp.gnu.org/pub/gnu/emacs/>. Releases are of course at <https://ftp.gnu.org/pub/gnu/emacs/>.
./admin/diff-tar-files emacs-OLD.tar emacs-NEW.tar
Alternatively, if you want to use the compressed tarballs (which
diff-tar-files doesn't understand):
tar tJf emacs-OLD.tar.xz | sed -e 's,^[^/]*,,' | sort > old_tmp
tar tJf emacs-NEW.tar.xz | sed -e 's,^[^/]*,,' | sort > new_tmp
diff -u old_tmp new_tmp
If this is the first pretest of a major release, just comparing If this is the first pretest of a major release, just comparing
with the previous release may overlook many new files. You can try with the previous release may overlook many new files. You can try
something like 'find . | sort' in a clean repository, and compare the something like 'find . | sort' in a clean repository, and
results against the new tar contents. compare the results against the new tar contents. Another
alternative is using something like:
tar cf - emacs-NEW | tar t -C /tmp | grep -Ev "\.(o|d)$" | sort
Where emacs-NEW is the directory containing your clean repository.
The output of this command might be easier to compare to the
tarball than the one you get from find.
7. tar xf emacs-NEW.tar; cd emacs-NEW
./configure --prefix=/tmp/emacs && make check && make install
7. tar -xf emacs-NEW.tar; cd emacs-NEW
./configure --prefix=/tmp/emacs && make && make install
Use 'script' or M-x compile to save the compilation log in Use 'script' or M-x compile to save the compilation log in
compile-NEW.log and compare it against an old one. The easiest way compile-NEW.log and compare it against an old one. The easiest way
to do that is to visit the old log in Emacs, change the version to do that is to visit the old log in Emacs, change the version
@ -118,12 +220,35 @@ General steps (for each step, check for possible errors):
M-x ediff. Especially check that Info files aren't built, and that M-x ediff. Especially check that Info files aren't built, and that
no autotools (autoconf etc) run. no autotools (autoconf etc) run.
8. cd EMACS_ROOT_DIR && git tag -a TAG && git push origin tag TAG 8. You can now tag the release/pretest and push it together with the
TAG is emacs-XX.Y.ZZ for a pretest, emacs-XX.Y for a release. last commit:
cd EMACS_ROOT_DIR && git tag -a TAG -m "Emacs TAG"
git push
git push --tags
Here TAG is emacs-XX.Y.ZZ for a pretest, emacs-XX.Y for a release.
For a release, if you are producing a release candidate first, use
emacs-XX.Y-rcN (N = 1, 2, ...) when you tar the RC, and add the
actual release tag later, when the official release tarball is
uploaded to ftp.gnu.org. When adding a tag later, it is safer to
use the SHA1 of the last commit which went into the release
tarball, in case there were some intervening commits since then:
git tag -a TAG -m "Emacs TAG" SHA1
git push --tags
In the past, we were not always consistent with the annotation
(i.e. -m "Emacs TAG"). The preferred format is like this for a
pretest, release candidate and final release:
git tag -a emacs-28.0.90 -m "Emacs 28.0.90 pretest"
git tag -a emacs-28.1-rc1 -m "Emacs 28.1 RC1"
git tag -a emacs-28.1 -m "Emacs 28.1 release"
9. Decide what compression schemes to offer. 9. Decide what compression schemes to offer.
For a release, at least gz and xz: For a release, at least gz and xz:
gzip --best -c emacs-NEW.tar > emacs-NEW.tar.gz gzip --best --no-name -c emacs-NEW.tar > emacs-NEW.tar.gz
xz -c emacs-NEW.tar > emacs-NEW.tar.xz xz -c emacs-NEW.tar > emacs-NEW.tar.xz
For pretests, just xz is probably fine (saves bandwidth). For pretests, just xz is probably fine (saves bandwidth).
@ -143,7 +268,9 @@ General steps (for each step, check for possible errors):
FILE.gz FILE.xz ... FILE.gz FILE.xz ...
You only need the --user part if you have multiple GPG keys and do You only need the --user part if you have multiple GPG keys and do
not want to use the default. not want to use the default. Instead of "your@gpg.key.email" you
could also use the fingerprint of the key, a 40-digit hex number.
(Alternatively, define default-key in your ~/.gnupg/gpg.conf file.)
Obviously, if you do not have a fast uplink, be prepared for the Obviously, if you do not have a fast uplink, be prepared for the
upload to take a while. upload to take a while.
@ -167,7 +294,8 @@ General steps (for each step, check for possible errors):
https://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, or https://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, or
https://ftp.gnu.org/gnu/emacs/ for a release. https://ftp.gnu.org/gnu/emacs/ for a release.
Download them and check the signatures. Check they build. Download them and check the signatures and SHA1/SHA256 checksums.
Check they build (./configure --with-native-compilation).
11. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org. 11. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
For a pretest, also bcc: platform-testers@gnu.org. For a pretest, also bcc: platform-testers@gnu.org.
@ -177,43 +305,127 @@ General steps (for each step, check for possible errors):
See the info-gnu-emacs mailing list archives for the form See the info-gnu-emacs mailing list archives for the form
of past announcements. The first pretest announcement, and the of past announcements. The first pretest announcement, and the
release announcement, should have more detail. release announcement, should have more detail.
Use the emacs-devel topic 'emacs-announce'. The best way to do
this is to add a header "Keywords: emacs-announce" to your mail.
(You can also put it in the Subject, but this is not as good
because replies that invariably are not announcements also get
sent out as if they were.)
12. After a release, update the Emacs pages as below. To create the included SHA1 and SHA256 checksums, run:
sha1sum emacs-NEW.tar.xz
sha256sum emacs-NEW.tar.xz
You can optionally sign the announcement email, preferably using
the same PGP key that you used for signing the tarball.
(Use e.g. `M-x mml-secure-message-sign' in `message-mode' to sign
an email.)
12. After a release, update the Emacs pages as described below.
13. After a release, bump the Emacs version on the release branch.
There is no need to bump the version after a pretest; the version
is bumped before the next pretest or release instead.
If the released version was XX.Y, use 'set-version' from
admin/admin.el to bump the version on the release branch to
XX.Y.50. Commit the changes.
UPDATING THE EMACS WEB PAGES AFTER A RELEASE UPDATING THE EMACS WEB PAGES AFTER A RELEASE
As soon as possible after a release, the Emacs web pages should be updated. As soon as possible after a release, the Emacs web pages at
Anyone with write access to the Emacs code repository can do this. https://www.gnu.org/software/emacs/ should be updated.
For instructions, see <https://savannah.gnu.org/cvs/?group=emacs>. (See admin/notes/www for general information.)
Changes go live more or less as soon as they are committed.
The pages to update are: The pages to update are:
emacs.html (for a new major release, a more thorough update is needed) emacs.html (for a new major release, a more thorough update is needed)
history.html history.html
add the new NEWS file as news/NEWS.xx.y add the new NEWS file as news/NEWS.xx.y
Copy new etc/MACHINES to MACHINES and CONTRIBUTE to CONTRIBUTE
For every new release, a banner is displayed on top of the emacs.html For every new release, a banner is displayed on top of the emacs.html
page. Uncomment and the release banner in emacs.html. Keep it on the page. Uncomment and the release banner in emacs.html. Keep it on the
page for about a month, then comment it again. page for about a month, then comment it again. The new release banner
looks like this:
Use M-x make-manuals from admin/admin.el to regenerate the html <div class="release-banner">
manuals in manual/. If there are new manuals, add appropriate index <div class="container">
pages in manual/ and add them to manual/index.html. In the <h2><em>Emacs 28.1 is out</em>, download it <a href="download.html">here</a>!</h2>
manual/html_node directory, delete any old manual pages that are no </div>
longer present. </div>
Tar up the generated html_node/emacs/ and elisp/ directories and update Also, make sure the copyright years at the bottom of emacs.html are
the files manual/elisp.html_node.tar.gz and emacs.html_node.tar.gz. up-to-date.
Use M-x make-manuals-dist from from admin/admin.el to update the The file download.html may need to be updated, for example if the
manual/texi/ tarfiles. MS-Windows binaries will be signed by a different person/key than
those mentioned there.
Add compressed copies of the main info pages from the tarfile to manual/info/. Next, regenerate the various manuals in HTML, PDF, and PS formats:
Update the refcards/pdf/ and ps/ directories, and also Invoke ./admin/make-manuals from the top-level directory of the
refcards/emacs-refcards.tar.gz (use make -C etc/refcards pdf ps dist). Emacs source tree that contains the manuals for which you want to
produce HTML docs. This creates the 'manual' directory and
populates it with the necessary files.
If you have Texinfo installed locally, make-manuals might fail if it
cannot find epsf.tex. In that case define in the environment
TEXINPUTS=:/path/to/texinfo-tree/doc
where /path/to/texinfo-tree is the absolute file name of the
top-level directory where you have the Texinfo source tree. Then
re-run make-manuals.
make-manuals can also fail if the HTML manuals produced by Texinfo
violate some of the assumptions admin/admin.el makes about the
format of the produced HTML. Debug these problems and resolve them,
then re-run make-manuals. (Each time you run make-manuals, it
empties the manuals/ directory and regenerates the files there, but
if the files in manuals/ can be used without regeneration, i.e. if
the problem you solved doesn't affect the produced HTML, you can
invoke make-manuals with the -c switch, which will make the process
much faster.)
Now change to the 'manual' directory and invoke upload-manuals:
../admin/updload-manuals /path/to/webpages/cvs/checkout
where /path/to/webpages/cvs/checkout is the place where you have the
CVS checkout of the Emacs Web pages, with subdirectories 'manual'
and 'refcards'. This moves the produced manuals to directories in
the Web pages CVS checkout tree, and also invokes CVS commands to
commit changed files, add new files, and remove stale files that are
no longer part of the manuals.
If upload-manuals fails, resolve the problems and re-invoke it.
This requires running make-manuals again, since upload-manuals
destructively modifies the 'manual' directory where you invoke it.
Also, upload-manuals invokes "cvs commit -f", so if you run it
several times, some files will be committed more than once even
though they were not changed in-between. Suck it up.
All the added and removed files need to be committed, so next fire
up Emacs, type "C-x v d" to invoke vc-dir on the Web pages checkout,
and use "C-x v v" and other VC commands to commit all the files that
upload-manuals didn't automatically commit. (You can also do that
with manual CVS commands, of course, but this is not recommended.)
Next, make sure that manual/index.html file is consistent with the
info/dir file in the branch for which you are producing the manuals,
in that it mentions all the manuals. It could be outdated if
manuals were added or removed since the last release.
For each new manual, a file manual/MANUAL.html (where MANUAL is the
name of the manual) should be created from the template in
manual/eww.html, after editing the title and the Copyright years,
and the links in it changed to point to the appropriate files in the
manual/html_node/ and manual/html_mono/ subdirectories.
In addition, the file refcards/index.html should be audited to make
sure it includes the up-to-date list of refcards actually produced
and put under that subdirectory.
Browsing <https://web.cvs.savannah.gnu.org/viewvc/?root=emacs> is one Browsing <https://web.cvs.savannah.gnu.org/viewvc/?root=emacs> is one
way to check for any files that still need updating. way to check for any files that still need updating.

View file

@ -4,7 +4,7 @@
# #
# admin/merge-gnulib # admin/merge-gnulib
# Copyright 2012-2017 Free Software Foundation, Inc. # Copyright 2012-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -27,30 +27,36 @@ GNULIB_URL=git://git.savannah.gnu.org/gnulib.git
GNULIB_MODULES=' GNULIB_MODULES='
alloca-opt binary-io byteswap c-ctype c-strcase alloca-opt binary-io byteswap c-ctype c-strcase
careadlinkat close-stream canonicalize-lgpl
careadlinkat close-stream copy-file-range
count-leading-zeros count-one-bits count-trailing-zeros count-leading-zeros count-one-bits count-trailing-zeros
crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 crypto/md5 crypto/md5-buffer
d-type diffseq dtoastr dtotimespec dup2 crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer
d-type diffseq double-slash-root dtoastr dtotimespec dup2
environ execinfo explicit_bzero faccessat environ execinfo explicit_bzero faccessat
fcntl fcntl-h fdatasync fdopendir fchmodat fcntl fcntl-h fdopendir file-has-acl
filemode filevercmp flexmember fstatat fsusage fsync filemode filename filevercmp flexmember fpieee
getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog free-posix fstatat fsusage fsync futimens
ignore-value intprops largefile lstat getloadavg getopt-gnu getrandom gettime gettimeofday gitlog-to-changelog
manywarnings memrchr minmax mkostemp mktime nstrftime ieee754-h ignore-value intprops largefile libgmp lstat
pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime
sig2str socklen stat-time std-gnu11 stdalign stddef stdio nanosleep nproc nstrftime
stpcpy strtoimax symlink sys_stat sys_time pathmax pipe2 pselect pthread_sigmask
qcopy-acl readlink readlinkat regex
sig2str sigdescr_np socklen stat-time std-gnu11 stdalign stddef stdio
stpcpy strnlen strtoimax symlink sys_stat sys_time
tempname time time_r time_rz timegm timer-time timespec-add timespec-sub tempname time time_r time_rz timegm timer-time timespec-add timespec-sub
update-copyright unlocked-io utimens update-copyright unlocked-io utimensat
vla warnings vla warnings
' '
AVOIDED_MODULES=' AVOIDED_MODULES='
close dup fchdir fstat btowc chmod close crypto/af_alg dup fchdir fstat langinfo lock
malloc-posix msvc-inval msvc-nothrow mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
openat-die opendir raise openat-die opendir pthread-h raise
save-cwd select setenv sigprocmask stat stdarg stdbool save-cwd select setenv sigprocmask stat stdarg stdbool
threadlib tzset unsetenv utime utime-h threadlib tzset unsetenv utime utime-h
wchar wcrtomb wctype-h
' '
GNULIB_TOOL_FLAGS=' GNULIB_TOOL_FLAGS='
@ -96,6 +102,12 @@ test -x "$gnulib_srcdir"/gnulib-tool || {
exit 1 exit 1
} }
# gnulib-tool has problems with a bare checkout (Bug#32452#65).
test -f configure || ./autogen.sh || exit
# Old caches can confuse autoconf when some Gnulib-related changes take effect.
rm -fr autom4te.cache || exit
avoided_flags= avoided_flags=
for module in $AVOIDED_MODULES; do for module in $AVOIDED_MODULES; do
avoided_flags="$avoided_flags --avoid=$module" avoided_flags="$avoided_flags --avoid=$module"
@ -103,7 +115,9 @@ done
"$gnulib_srcdir"/gnulib-tool --dir="$src" $GNULIB_TOOL_FLAGS \ "$gnulib_srcdir"/gnulib-tool --dir="$src" $GNULIB_TOOL_FLAGS \
$avoided_flags $GNULIB_MODULES && $avoided_flags $GNULIB_MODULES &&
rm -- "$src"lib/gl_openssl.h "$src"m4/fcntl-o.m4 \ rm -- "$src"lib/gl_openssl.h \
"$src"lib/stdio-read.c "$src"lib/stdio-write.c \
"$src"m4/fcntl-o.m4 \
"$src"m4/gl-openssl.m4 \ "$src"m4/gl-openssl.m4 \
"$src"m4/gnulib-cache.m4 "$src"m4/gnulib-tool.m4 \ "$src"m4/gnulib-cache.m4 "$src"m4/gnulib-tool.m4 \
"$src"m4/manywarnings-c++.m4 \ "$src"m4/manywarnings-c++.m4 \
@ -114,5 +128,8 @@ cp -- "$gnulib_srcdir"/build-aux/config.guess \
"$gnulib_srcdir"/build-aux/install-sh \ "$gnulib_srcdir"/build-aux/install-sh \
"$gnulib_srcdir"/build-aux/move-if-change \ "$gnulib_srcdir"/build-aux/move-if-change \
"$src"build-aux && "$src"build-aux &&
cp -- "$gnulib_srcdir"/lib/af_alg.h \
"$gnulib_srcdir"/lib/save-cwd.h \
"$src"lib &&
{ test -z "$src" || cd "$src"; } && { test -z "$src" || cd "$src"; } &&
./autogen.sh ./autogen.sh

View file

@ -4,7 +4,7 @@
# #
# admin/merge-pkg-config # admin/merge-pkg-config
# Copyright 2014-2017 Free Software Foundation, Inc. # Copyright 2014-2022 Free Software Foundation, Inc.
# This file is part of GNU Emacs. # This file is part of GNU Emacs.
@ -60,4 +60,4 @@ test -d m4 || {
printf >&2 '%s\n' "$0: copying $dir/pkg.m4 to m4/pkg.m4" printf >&2 '%s\n' "$0: copying $dir/pkg.m4 to m4/pkg.m4"
cp $dir/pkg.m4 m4 cp "$dir"/pkg.m4 m4

View file

@ -11,7 +11,11 @@ interface via org-mode.
The goal of this triage is to prune down the list of old bugs, closing The goal of this triage is to prune down the list of old bugs, closing
the ones that are not reproducible on the current release. the ones that are not reproducible on the current release.
1. To start, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the 0. To start, check the most relevant bugs blocking a release by
calling debbugs-gnu-emacs-release-blocking-reports. If you want
to check this for another Emacs version but the next-to-be-released-one,
use the "C-u" prefix.
1. After that, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the
web browser), and accept the default list option of bugs that have severity web browser), and accept the default list option of bugs that have severity
serious, important, or normal. serious, important, or normal.
2. For each bug, we want to primarily make sure it is still 2. For each bug, we want to primarily make sure it is still
@ -20,7 +24,7 @@ the ones that are not reproducible on the current release.
suggested checklist to follow for handling these bugs, along with suggested checklist to follow for handling these bugs, along with
example replies. Closing, tagging, etc., are done example replies. Closing, tagging, etc., are done
with debbugs control messages, which in debbugs-gnu is initiated with debbugs control messages, which in debbugs-gnu is initiated
with a "C". with a "C" or "E".
[ ] Read the mail thread for the bug. Find out if anyone has [ ] Read the mail thread for the bug. Find out if anyone has
been able to reproduce this on the current release. If been able to reproduce this on the current release. If
someone has been able to, then your work is finished for this someone has been able to, then your work is finished for this
@ -81,13 +85,13 @@ the ones that are not reproducible on the current release.
* New bug triage process * New bug triage process
The goal of the new bug triage process is similar to the backlog triage process, The goal of the new bug triage process is similar to the backlog triage process,
except that the focus is on prioritizing the bug, and making sure it is has except that the focus is on prioritizing the bug, and making sure it has
necessary information for others to act on. necessary information for others to act on.
For each new bug, ask the following questions: For each new bug, ask the following questions:
1. Is the bug report written in a way to be easy to reproduce (starts from 1. Is the bug report written in a way to be easy to reproduce (starts from
emacs -Q, etc.)? If not, ask the reporter to try and reproduce it on an "emacs -Q", etc.)? If not, ask the reporter to try and reproduce it on an
emacs without customization. emacs without customization.
2. Is the bug report written against the latest emacs? If not, try to 2. Is the bug report written against the latest emacs? If not, try to
reproduce on the latest version, and if it can't be reproduced, ask the reproduce on the latest version, and if it can't be reproduced, ask the

View file

@ -8,9 +8,13 @@ This is 95% of all you will ever need to know.
** How do I report a bug? ** How do I report a bug?
Use M-x report-emacs-bug, or send mail to bug-gnu-emacs@gnu.org. Use M-x report-emacs-bug, or send mail to bug-gnu-emacs@gnu.org.
If you want to Cc someone, use an "X-Debbugs-CC" header (or If you want to Cc someone, use an "X-Debbugs-Cc" header (or
pseudo-header, see below) instead. pseudo-header, see below) instead.
** How do I read a bug?
Visit https://debbugs.gnu.org/123 in your web browser or try this in
Emacs: M-x gnus-read-ephemeral-emacs-bug-group.
** How do I comment on a bug? ** How do I comment on a bug?
Reply to a mail on the bug-gnu-emacs list in the normal way. Reply to a mail on the bug-gnu-emacs list in the normal way.
Or send a mail to 123@debbugs.gnu.org. Or send a mail to 123@debbugs.gnu.org.
@ -29,7 +33,7 @@ By mailing commands to control@debbugs.gnu.org. Place commands at the
start of the message body, one per line. start of the message body, one per line.
severity 123 serious|important|normal|minor|wishlist severity 123 serious|important|normal|minor|wishlist
tags 123 moreinfo|unreproducible|wontfix|patch tags 123 moreinfo|unreproducible|wontfix|patch|notabug
* More detailed information * More detailed information
@ -53,7 +57,7 @@ i) Your report will be assigned a number and generate an automatic reply.
ii) Optionally, you can set some database parameters when you first ii) Optionally, you can set some database parameters when you first
report a bug (see "Setting bug parameters" below). report a bug (see "Setting bug parameters" below).
iii) If you want to CC: someone, use X-Debbugs-CC: (note this only iii) If you want to Cc someone, use X-Debbugs-Cc: (note this only
applies to _new_ reports, not followups). applies to _new_ reports, not followups).
Once your report is filed and assigned a number, it is sent out to the Once your report is filed and assigned a number, it is sent out to the
@ -64,15 +68,15 @@ quiet@debbugs.gnu.org.
** How do I reply to an existing bug report? ** How do I reply to an existing bug report?
Reply to 123@debbugs.gnu.org, replacing 123 with the number Reply to 123@debbugs.gnu.org, replacing 123 with the number
of the bug you are interested in. NB this only sends mail to the of the bug you are interested in. NB this only sends mail to the
bug-list, it does NOT send a CC to the original bug submitter. bug-list, it does NOT send a Cc to the original bug submitter.
So you need to explicitly CC him/her (and anyone else you like). So you need to explicitly Cc him/her (and anyone else you like).
(This works the same way as all the Emacs mailing lists. We generally (This works the same way as all the Emacs mailing lists. We generally
don't assume anyone who posts to a list is subscribed to it, so we don't assume anyone who posts to a list is subscribed to it, so we
cc everyone on replies.) cc everyone on replies.)
(Many people think the submitter SHOULD be automatically subscribed (Many people think the submitter SHOULD be automatically subscribed
to subsequent discussion, but this does not seem to be implemented. to subsequent discussion, but this does not seem to be implemented.
See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=37078 See https://bugs.debian.org/37078
See also https://debbugs.gnu.org/5439 ) See also https://debbugs.gnu.org/5439 )
Do NOT send a separate copy to the bug list address, since this may Do NOT send a separate copy to the bug list address, since this may
@ -80,7 +84,7 @@ generate a new report. The only time to send mail to the bug list
address is to create a new report. address is to create a new report.
Gnus users can add the following to message-dont-reply-to-names; Gnus users can add the following to message-dont-reply-to-names;
similarly with Rmail and rmail-dont-reply-to-names: similarly with Rmail and mail-dont-reply-to-names:
"\\(emacs-pretest-bug\\|bug-gnu-emacs\\|bug-\\(e\\|gnu\\)macs\\)@gnu\\.org\\|\ "\\(emacs-pretest-bug\\|bug-gnu-emacs\\|bug-\\(e\\|gnu\\)macs\\)@gnu\\.org\\|\
\\(submit\\|control\\|owner\\)@debbugs\\.gnu\\.org" \\(submit\\|control\\|owner\\)@debbugs\\.gnu\\.org"
@ -95,20 +99,23 @@ normal bug reporting.)
** When reporting a new bug, to send a Cc to another address ** When reporting a new bug, to send a Cc to another address
(e.g. bug-cc-mode@gnu.org), do NOT just use a Cc: header. (e.g. bug-cc-mode@gnu.org), do NOT just use a Cc: header.
Instead, use "X-Debbugs-CC:". This ensures the Cc address will get a Instead, use "X-Debbugs-Cc:". This ensures the Cc address(es) will get a
mail with the bug report number in. If you do not do this, each reply mail with the bug report number in. If you do not do this, each reply
in the subsequent discussion might end up creating a new bug. in the subsequent discussion might end up creating a new bug.
This is annoying. (So annoying that a form of message-id tracking has This is annoying. (So annoying that a form of message-id tracking has
been implemented to hopefully stop this happening, but it is still been implemented to hopefully stop this happening, but it is still
better to use X-Debbugs-CC.) better to use X-Debbugs-Cc.)
If you want to send copies to more than one address, add them
comma-separated in only one X-Debbugs-Cc line.
Like any X-Debbugs- header, this one can also be specified in the Like any X-Debbugs- header, this one can also be specified in the
pseudo-header (see below), if your mail client does not let you add pseudo-header (see below), if your mail client does not let you add
"X-" headers. "X-" headers.
If a new report contains X-Debbugs-CC in the input, this is If a new report contains X-Debbugs-Cc in the input, this is
converted to a real Cc header in the output. (See Bug#1780,5384) converted to a real Cc header in the output. (See Bug#1780,5384)
It is also merged into the Resent-CC header (see below). It is also merged into the Resent-Cc header (see below).
** How does Debbugs send out mails? ** How does Debbugs send out mails?
@ -117,15 +124,15 @@ header is unchanged. In new reports only (at present), the To:
address is altered as follows. Any "bug-gnu-emacs", address is altered as follows. Any "bug-gnu-emacs",
"emacs-pretest-bug", or "submit@debbugs" address is replaced by "emacs-pretest-bug", or "submit@debbugs" address is replaced by
123@debbugs in the mail that gets sent out. (This also applies to any 123@debbugs in the mail that gets sent out. (This also applies to any
Cc: header, though you should be using X-Debbugs-CC instead in new Cc: header, though you should be using X-Debbugs-Cc instead in new
reports). The original header is stored as X-Debbugs-Original-To, if reports). The original header is stored as X-Debbugs-Original-To, if
it was changed. Any X-Debbugs-CC is merged into the Cc. it was changed. Any X-Debbugs-Cc is merged into the Cc.
Mails arriving at the bug list have the following Resent-* headers: Mails arriving at the bug list have the following Resent-* headers:
Resent-From: person who submitted the bug Resent-From: person who submitted the bug
Resent-To: owner@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org
Resent-CC: maintainer email address, plus any X-Debbugs-CC: entries Resent-Cc: maintainer email address, plus any X-Debbugs-Cc: entries
The "maintainer email address" is "bug-gnu-emacs@gnu.org" in most cases. The "maintainer email address" is "bug-gnu-emacs@gnu.org" in most cases.
@ -148,7 +155,7 @@ Package: emacs
Version: 23.0.60 Version: 23.0.60
Severity: minor Severity: minor
Remember to fix FOO, as discussed on emacs-devel at http://... . Remember to fix FOO, as discussed on emacs-devel at https://... .
** Not interested in tracker control messages (tags being set, etc)? ** Not interested in tracker control messages (tags being set, etc)?
Discard mails matching: Discard mails matching:
@ -178,7 +185,7 @@ Basically, reply only to the numbered bug address (and any individual
people's addresses). Do not send mail direct to bug-gnu-emacs or people's addresses). Do not send mail direct to bug-gnu-emacs or
emacs-pretest-bug unless you are reporting a new bug. emacs-pretest-bug unless you are reporting a new bug.
** To close bug #123 (for example), send mail ** To close bug#123 (for example), send mail
To: 123-done@debbugs.gnu.org To: 123-done@debbugs.gnu.org
@ -236,23 +243,31 @@ The control server ignores anything after the last line above. So you
can place control commands at the beginning of a reply to a bug can place control commands at the beginning of a reply to a bug
report, and Bcc: the control server (note the commands have no effect report, and Bcc: the control server (note the commands have no effect
if you just send them to the bug-report number). Bcc: is better than Cc: if you just send them to the bug-report number). Bcc: is better than Cc:
in case people use Reply-to-All in response. in case people use Reply-To-All in response.
For the full documentation of control commands, see
https://debbugs.gnu.org/server-control.html
Some useful control commands: Some useful control commands:
*** To close a bug and indicate in what Emacs version it was fixed
close 123 VERSION
where VERSION is XX.YY numerical version number, like 42.1.
*** To reopen a closed bug: *** To reopen a closed bug:
reopen 123 reopen 123
*** Bugs can be tagged in various ways (eg wontfix, patch, etc). *** Bugs can be tagged in various ways (eg wontfix, patch, etc).
The available tags are: The available tags are:
patch wontfix moreinfo unreproducible fixed notabug patch wontfix moreinfo unreproducible fixed notabug help security confirmed easy
See https://debbugs.gnu.org/Developer#tags See https://debbugs.gnu.org/Developer#tags
The list of tags can be prefixed with +, - or =, meaning to add (the The list of tags can be prefixed with +, - or =, meaning to add (the
default), remove, or reset the tags. E.g.: default), remove, or reset the tags. E.g.:
tags 123 + wontfix tags 123 + wontfix
** URL shortcuts *** URL shortcuts
https://debbugs.gnu.org/... https://debbugs.gnu.org/...
@ -263,9 +278,9 @@ from:submitter@email.address
severity:severity # all bugs of given severity severity:severity # all bugs of given severity
tag:tag # all bugs with given tag tag:tag # all bugs with given tag
** Usertags *** Usertags
See <http://wiki.debian.org/bugs.debian.org/usertags> See <https://wiki.debian.org/bugs.debian.org/usertags>
"Usertags" are very similar to tags: a set of labels that can be added "Usertags" are very similar to tags: a set of labels that can be added
to a bug. There are two differences between normal tags and user tags: to a bug. There are two differences between normal tags and user tags:
@ -275,10 +290,9 @@ limited, predefined set of normal tags are available (see above).
2) A usertag is associated with a specific user. This is normally 2) A usertag is associated with a specific user. This is normally
an email address (with an "@" sign and least 4 characters after the "@"), an email address (with an "@" sign and least 4 characters after the "@"),
but on debbugs.gnu.org, the definition is less strict - anything with but on debbugs.gnu.org, it can also be a package name. For personal tags,
5 or more alphanumeric characters will work. For personal tags,
using an email address is still recommended. Please only use the using an email address is still recommended. Please only use the
"emacs" user, or other short users, for "official" tags. "emacs" user for "official" tags.
You set usertags in the same way as tags, by talking to the control server. You set usertags in the same way as tags, by talking to the control server.
One difference is that you can also specify the associated user. One difference is that you can also specify the associated user.
@ -292,7 +306,7 @@ a) In a control message:
user emacs # or email@example.com user emacs # or email@example.com
usertags 1234 any-tag-you-like usertags 1234 any-tag-you-like
This will add a usertag "any-tag-you-like" to bug 1234. The tag will This will add a usertag "any-tag-you-like" to bug#1234. The tag will
be associated with the user "emacs". If you omit the first line, be associated with the user "emacs". If you omit the first line,
the tag will be associated with your email address. the tag will be associated with your email address.
@ -370,7 +384,7 @@ will be assigned proper numbers).
NB you cannot clone a merged bug. You'd think that trying to do so NB you cannot clone a merged bug. You'd think that trying to do so
would just give you an unmerged copy of the specified bug number, but no: would just give you an unmerged copy of the specified bug number, but no:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=474742 https://bugs.debian.org/474742
You must unmerge, clone, then re-merge. You must unmerge, clone, then re-merge.
@ -407,21 +421,21 @@ reassign 1234 emacs
Note that reassigning clears the list of found versions, even if the Note that reassigning clears the list of found versions, even if the
new packages includes the original one. new packages includes the original one.
** To remove spam from the tracker, move it to the 'spam' pseudo-package: *** To remove spam from the tracker, move it to the 'spam' pseudo-package:
reassign 123 spam reassign 123 spam
(Should not be necessary any more, now that the input is moderated.) (Should not be necessary any more, now that the input is moderated.)
** To change the title of a bug: *** To change the title of a bug:
retitle 123 Some New Title retitle 123 Some New Title
** To change the submitter address: *** To change the submitter address:
submitter 123 none@example.com submitter 123 none@example.com
Note that it does not seem to work to specify "Submitter:" in the Note that it does not seem to work to specify "Submitter:" in the
pseudo-header when first reporting a bug. pseudo-header when first reporting a bug.
** How does archiving work? *** How does archiving work?
You can still send mail to a bug after it is closed. After 28 days with You can still send mail to a bug after it is closed. After 28 days with
no activity, the bug is archived, at which point no more changes can no activity, the bug is archived, at which point no more changes can
be made. If you try to send mail to the bug after that (or merge with be made. If you try to send mail to the bug after that (or merge with
@ -484,7 +498,7 @@ the bug web-pages.
*** Debian stuff *** Debian stuff
https://lists.gnu.org/archive/html/emacs-devel/2009-11/msg00440.html https://lists.gnu.org/r/emacs-devel/2009-11/msg00440.html
** Gnus-specific voodoo ** Gnus-specific voodoo
@ -507,8 +521,8 @@ reference, you don't need to read these as a user of the system.
Getting mail from the Emacs bug list into the tracker requires the Getting mail from the Emacs bug list into the tracker requires the
assistance of sysadmin at gnu.org. The test tracker set-up was, I assistance of sysadmin at gnu.org. The test tracker set-up was, I
think, [gnu.org #359140]: think, [gnu.org #359140]:
https://lists.gnu.org/archive/html/savannah-hackers/2008-03/msg00074.html https://lists.gnu.org/r/savannah-hackers/2008-03/msg00074.html
https://lists.gnu.org/archive/html/savannah-hackers/2008-04/msg00034.html https://lists.gnu.org/r/savannah-hackers/2008-04/msg00034.html
** The debbugs.gnu.org setup was handled in [gnu.org #510605]. ** The debbugs.gnu.org setup was handled in [gnu.org #510605].
There are two pieces (replace AT with @ in the following): There are two pieces (replace AT with @ in the following):
@ -552,7 +566,7 @@ https://savannah.nongnu.org/projects/listhelper
An "X-Debbugs-Envelope-To" header is used to keep track of where the An "X-Debbugs-Envelope-To" header is used to keep track of where the
mail was actually bound for: mail was actually bound for:
https://lists.gnu.org/archive/html/emacs-devel/2009-11/msg01211.html https://lists.gnu.org/r/emacs-devel/2009-11/msg01211.html
** Mailing list recipient/sender filters. ** Mailing list recipient/sender filters.
The following mailman filters are useful to stop messages being The following mailman filters are useful to stop messages being

View file

@ -1,4 +1,4 @@
Copyright (C) 2007-2017 Free Software Foundation, Inc. Copyright (C) 2007-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
@ -86,7 +86,7 @@ in a README file in each directory with images. (Legal advice says
that we need not add notices to each image file individually, if they that we need not add notices to each image file individually, if they
allow for that.). It is recommended to use the word "convert" to allow for that.). It is recommended to use the word "convert" to
describe the automatic process of changing an image from one format to describe the automatic process of changing an image from one format to
another (https://lists.gnu.org/archive/html/emacs-devel/2007-02/msg00618.html). another (https://lists.gnu.org/r/emacs-devel/2007-02/msg00618.html).
When installing a file with an "unusual" license (after checking first When installing a file with an "unusual" license (after checking first
@ -159,10 +159,7 @@ etc/future-bug
etc/letter.pbm,letter.xpm etc/letter.pbm,letter.xpm
- trivial, no notice needed. - trivial, no notice needed.
<https://lists.gnu.org/archive/html/emacs-devel/2007-02/msg00324.html> <https://lists.gnu.org/r/emacs-devel/2007-02/msg00324.html>
etc/FTP, ORDERS
- trivial (at time of writing), no license needed
etc/HELLO etc/HELLO
standard notices. Just a note that although the file itself is not standard notices. Just a note that although the file itself is not
@ -196,14 +193,14 @@ lib-src/etags.c
After some investigation in Feb 2007, then to the best of our After some investigation in Feb 2007, then to the best of our
knowledge we believe that the original 1984 Emacs version was based knowledge we believe that the original 1984 Emacs version was based
on the version in BSD4.2. See for example this 1985 post from Ken Arnold: on the version in BSD4.2. See for example this 1985 post from Ken Arnold:
<http://groups.google.com/group/mod.sources/browse_thread/thread/ffe5c55845a640a9> <https://groups.google.com/group/mod.sources/browse_thread/thread/ffe5c55845a640a9>
I have received enough requests for the current source to ctags I have received enough requests for the current source to ctags
to post it. Here is the latest version (what will go out with to post it. Here is the latest version (what will go out with
4.3, modulo any bugs fixed during the beta period). It is the 4.3, modulo any bugs fixed during the beta period). It is the
4.2 ctags with recognition of yacc and lex tags added. 4.2 ctags with recognition of yacc and lex tags added.
See also a 1984 version of ctags (no copyright) posted to net.sources: See also a 1984 version of ctags (no copyright) posted to net.sources:
<http://groups.google.com/group/net.sources/msg/a21b6c21be12a98d> <https://groups.google.com/group/net.sources/msg/a21b6c21be12a98d>
Version of etags.c in emacs-16.56 duplicates comment typos. Version of etags.c in emacs-16.56 duplicates comment typos.
Accordingly, in Feb 2007 we added a 1984 copyright for the Accordingly, in Feb 2007 we added a 1984 copyright for the
@ -214,7 +211,7 @@ lib-src/etags.c
from a legal point of view. from a legal point of view.
lisp/cedet/semantic/imenu.el lisp/cedet/semantic/imenu.el
- See https://lists.gnu.org/archive/html/emacs-devel/2010-03/msg00410.html - See https://lists.gnu.org/r/emacs-devel/2010-03/msg00410.html
in which Eric Ludlam established that the remaining contributions in which Eric Ludlam established that the remaining contributions
from authors other than himself were negligible. from authors other than himself were negligible.
@ -223,7 +220,7 @@ lisp/play/tetris.el
(2007/1) there is no problem with our use of the name "tetris" or (2007/1) there is no problem with our use of the name "tetris" or
the concept. the concept.
rms: "My understanding is that game rules as such are not copyrightable." rms: "My understanding is that game rules as such are not copyrightable."
<https://lists.gnu.org/archive/html/emacs-devel/2007-01/msg00960.html> <https://lists.gnu.org/r/emacs-devel/2007-01/msg00960.html>
rms: Legal advice is that we are ok and need not worry about this. rms: Legal advice is that we are ok and need not worry about this.
@ -307,8 +304,8 @@ doc/*/*.texi - All manuals should be under GFDL (but see below), and
should include a copy of it, so that they can be distributed should include a copy of it, so that they can be distributed
separately. faq.texi has a different license, for some reason no-one separately. faq.texi has a different license, for some reason no-one
can remember. can remember.
https://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00583.html https://lists.gnu.org/r/emacs-devel/2007-04/msg00583.html
https://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00618.html https://lists.gnu.org/r/emacs-devel/2007-04/msg00618.html
doc/misc/mh-e.texi is dual-licensed (GPL and GFDL) per agreement with doc/misc/mh-e.texi is dual-licensed (GPL and GFDL) per agreement with
FSF (reconfirmed by rms Aug 25 2008). Discussion with FSF (reconfirmed by rms Aug 25 2008). Discussion with
@ -353,9 +350,7 @@ added or not, rms says (2007-02-25, "oldXmenu issues"):
insque.c had no copyright notice until 2005. The version of insque.c insque.c had no copyright notice until 2005. The version of insque.c
added to Emacs 1992-01-27 is essentially the same as insremque.c added added to Emacs 1992-01-27 is essentially the same as insremque.c added
to glic three days later by Roland McGrath, with an FSF copyright and to glic three days later by Roland McGrath, with an FSF copyright and
GPL, but no ChangeLog entry: GPL, but no ChangeLog entry.
<http://sources.redhat.com/cgi-bin/cvsweb.cgi/~checkout~/libc/misc/insremque.c?\
rev=1.1&cvsroot=glibc>
To the best of his recollection, McGrath (who has a copyright To the best of his recollection, McGrath (who has a copyright
assignment) was the author of this file (email from roland at frob.com assignment) was the author of this file (email from roland at frob.com
to rms, 2007-02-23, "Where did insque.c come from?"). The FSF to rms, 2007-02-23, "Where did insque.c come from?"). The FSF
@ -397,7 +392,7 @@ lisp/term/README
Accordingly, FSF copyright was added. Accordingly, FSF copyright was added.
src/unexhp9k800.c src/unexhp9k800.c
https://lists.gnu.org/archive/html/emacs-devel/2007-02/msg00138.html https://lists.gnu.org/r/emacs-devel/2007-02/msg00138.html
- briefly removed due to legal uncertainly Jan-Mar 2007. The - briefly removed due to legal uncertainly Jan-Mar 2007. The
relevant assignment is under "hp9k800" in copyright.list. File was relevant assignment is under "hp9k800" in copyright.list. File was
written by John V. Morris at HP, and disclaimed by the author and written by John V. Morris at HP, and disclaimed by the author and
@ -406,10 +401,10 @@ src/unexhp9k800.c
lisp/progmodes/python.el lisp/progmodes/python.el
Dave Love alerted us to a potential legal problem: Dave Love alerted us to a potential legal problem:
https://lists.gnu.org/archive/html/emacs-pretest-bug/2007-04/msg00459.html https://lists.gnu.org/r/emacs-pretest-bug/2007-04/msg00459.html
On consultation with a lawyer, we found there was no problem: On consultation with a lawyer, we found there was no problem:
https://lists.gnu.org/archive/html/emacs-devel/2007-05/msg00466.html https://lists.gnu.org/r/emacs-devel/2007-05/msg00466.html
** Issues that are "fixed" for the release of Emacs 22, but we may ** Issues that are "fixed" for the release of Emacs 22, but we may
@ -527,7 +522,7 @@ None known.
The EMACS_22_BASE branch was changed to GPLv3 (or later) 2007/07/25. The EMACS_22_BASE branch was changed to GPLv3 (or later) 2007/07/25.
Some notes: Some notes:
(see https://lists.gnu.org/archive/html/emacs-devel/2007-07/msg01431.html) (see https://lists.gnu.org/r/emacs-devel/2007-07/msg01431.html)
1. There are some files in the Emacs tree which are not part of Emacs (eg 1. There are some files in the Emacs tree which are not part of Emacs (eg
those included from Gnulib). These are all copyright FSF and (at time those included from Gnulib). These are all copyright FSF and (at time

View file

@ -5,7 +5,7 @@ Some documentation tips culled from emacs-devel postings.
** Manual indices ** Manual indices
https://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00400.html https://lists.gnu.org/r/emacs-devel/2008-10/msg00400.html
For example, this text: For example, this text:
@ -51,7 +51,7 @@ combine them into a single entry, e.g.:
** Point is a proper name ** Point is a proper name
https://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00414.html https://lists.gnu.org/r/emacs-devel/2008-10/msg00414.html
In Emacs tradition, we treat "point" as a proper name when it refers In Emacs tradition, we treat "point" as a proper name when it refers
to the current editing location. It should not have an article. to the current editing location. It should not have an article.
@ -65,7 +65,7 @@ referring to point, please fix it.
** Don't use passive verbs ** Don't use passive verbs
https://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00414.html https://lists.gnu.org/r/emacs-devel/2008-10/msg00414.html
Documentation is clearer if it avoids the passive voice whenever Documentation is clearer if it avoids the passive voice whenever
possible. For example, rather than saying "Point does not move", say possible. For example, rather than saying "Point does not move", say
@ -80,7 +80,7 @@ often provides important information which makes the text clearer, too.
*** Why Antinews is useful *** Why Antinews is useful
https://lists.gnu.org/archive/html/emacs-devel/2008-11/msg00893.html https://lists.gnu.org/r/emacs-devel/2008-11/msg00893.html
The usefulness of Antinews is to help people who buy the printed The usefulness of Antinews is to help people who buy the printed
manual and are still using the previous Emacs version. That's why we manual and are still using the previous Emacs version. That's why we
@ -91,7 +91,7 @@ Of course, we try to make it amusing as well.
*** Don't mention in Antinews too many features absent in old versions *** Don't mention in Antinews too many features absent in old versions
https://lists.gnu.org/archive/html/emacs-devel/2008-11/msg01054.html https://lists.gnu.org/r/emacs-devel/2008-11/msg01054.html
Since the purpose of Antinews is to help people use the previous Emacs Since the purpose of Antinews is to help people use the previous Emacs
version, there is usually no need to mention features that are simply version, there is usually no need to mention features that are simply
@ -114,4 +114,4 @@ In those cases, the user might have trouble figuring out how to use
the old version without some sort of help. the old version without some sort of help.
** To indicate possession, write Emacs's rather than Emacs'. ** To indicate possession, write Emacs's rather than Emacs'.
https://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00649.html https://lists.gnu.org/r/emacs-devel/2012-02/msg00649.html

View file

@ -5,17 +5,31 @@ repository named "elpa", hosted on Savannah. To check it out:
git clone git://git.sv.gnu.org/emacs/elpa git clone git://git.sv.gnu.org/emacs/elpa
cd elpa cd elpa
git remote set-url --push origin git+ssh://git.sv.gnu.org/srv/git/emacs/elpa make setup
[create task branch for edits, etc.]
Changes to this branch propagate to elpa.gnu.org via a "deployment" script run That leaves the elpa/packages directory empty; you must check out the
daily. This script (which is kept in elpa/admin/update-archive.sh) generates ones you want.
the content visible at https://elpa.gnu.org/packages.
A new package is released as soon as the "version number" of that package is If you wish to check out all the packages into the packages directory,
changed. So you can use 'elpa' to work on a package without fear of releasing you can run the command:
those changes prematurely. And once the code is ready, just bump the
version number to make a new release of the package. make worktrees
You can check out a specific package <pkgname> into the packages
directory with:
make packages/<pkgname>
Changes to this repository propagate to elpa.gnu.org via a
"deployment" script run daily. This script generates the content
visible at https://elpa.gnu.org/packages.
A new package is released as soon as the "version number" of that
package is changed. So you can use 'elpa' to work on a package
without fear of releasing those changes prematurely. And once the
code is ready, just bump the version number to make a new release of
the package.
It is easy to use the elpa branch to deploy a "local" copy of the It is easy to use the elpa branch to deploy a "local" copy of the
package archive. For details, see the README file in the elpa branch. package archive. For details, see the README file in the elpa branch.

100
admin/notes/emba Normal file
View file

@ -0,0 +1,100 @@
-*- mode: outline; coding: utf-8 -*-
Copyright (C) 2019-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
NOTES FOR EMACS CONTINUOUS BUILD ON EMBA
A continuous build for Emacs can be found at
<https://emba.gnu.org/emacs/emacs>, a Gitlab instance. It watches the
Emacs git repository and starts a pipeline (jobset) if there are new
changes. This happens for all Emacs branches which belong to the
defined workflow (see below).
* Mail notifications
In addition to the web interface, emba can send notifications by email
when a job fails. It sends notifications about test status to
<emacs-buildstatus@gnu.org>.
If you want to receive these notifications, please subscribe at
<https://lists.gnu.org/mailman/listinfo/emacs-buildstatus>.
Alternatively, these notifications can be read via gmane at
<nntp+news.gmane.org:gmane.emacs.buildstatus>.
The messages contain a URL to the log file of the failed job, like
<https://emba.gnu.org/emacs/emacs/-/jobs/739/raw>.
* Emacs jobset
The Emacs jobset is defined in the Emacs source tree, file
'.gitlab-ci.yml'. All related files are located in directory
'test/infra'. They could be adapted for every Emacs branch, see
<https://emba.gnu.org/help/ci/yaml/README.md>.
Only branches whose name starts with 'master', 'emacs', 'feature', or
'fix' are considered. This is declared in the workflow rules of file
'test/infra/gitlab-ci.yml'.
A jobset on Gitlab is called a pipeline. Emacs pipelines run through
the stages 'build-images', 'platform-images' and 'native-comp-images'
(create an Emacs instance by 'make bootstrap' with different
configuration parameters) as well as 'normal', 'platforms' and
'native-comp' (run respective test jobs based on the produced images).
The jobs for stage 'normal' are contained in the file
'test/infra/test-jobs.yml'. This file is generated by calling 'make
-C test generate-test-jobs' in the Emacs source tree, and the
resulting file should be pushed to the Emacs git repository afterwards.
Every job runs in a Debian docker container. It uses the local clone
of the Emacs git repository to perform a bootstrap and test of Emacs.
This could happen for several jobs with changed configuration, compile,
and test parameters.
The 'build-image-*' jobs of the different '*-images' stages run only
if there are severe changes in the Emacs sources, like in Makefiles
etc. Otherwise they are skipped, and the corresponding 'test-*' jobs
run just 'make -C test ...' in the respective Docker image from a
previous build run.
Jobs in the 'build-images' and 'normal' stages are triggered by
changes of respective files in the Emacs git repository. All other
jobs run scheduled in a pipeline every 8 hours.
The log files for every test job are kept on the server for a week.
They can be downloaded from the server, visiting the URL
<https://emba.gnu.org/emacs/emacs/-/pipelines>, and selecting the job
in question.
Every pipeline generates a JUnit test report for the respective test
jobs, which can be inspected on the pipeline web page. This test
report counts completed ERT tests, aborted tests are not counted.
* Emba configuration
The emba configuration files are hosted on
<https://gitlab.com/emacs-ci/emba-ansible>.
* Identifying emba
Lisp packages, Makefiles, scripts, and other software could determine
whether they run on emba by checking for the environment variable
EMACS_EMBA_CI.
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 <https://www.gnu.org/licenses/>.

View file

@ -1,69 +0,0 @@
Copyright (C) 2002-2017 Free Software Foundation, Inc.
See the end of the file for license conditions.
New font handling mechanism with font backend method
----------------------------------------------------
The new files are:
font.h -- header providing font-backend related structures
(most important ones are "struct font" and "struct
font_driver"), macros, and etc.
font.c -- main font handling code.
xfont.c -- font-driver on X for X core fonts.
ftfont.c -- generic font-driver for FreeType fonts providing
device-independent methods of struct font_driver.
xftfont.c -- font-driver on X using Xft for FreeType fonts
utilizing methods provided by ftfont.c.
ftxfont.c -- font-driver on X directly using FreeType fonts
utilizing methods provided by ftfont.c.
w32font.c -- font driver on w32 using Windows native fonts,
corresponding to xfont.c
w32uniscribe.c -- font driver on w32, using the uniscribe API
to provide complex script support for opentype fonts on
Windows 2000 and later, or earlier versions of Windows
with uniscribe installed as an add-on.
So we already have codes for X and w32. For Mac it seems that we need
these files:
atmfont.c -- font-driver on mac using ATM fonts, corresponding
to xfont.c
As BDF fonts are currently used on w32, we may also implement these:
bdffont.c -- generic font-driver for BDF fonts, corresponding to
ftfont.c
bdfw32font.c -- font-driver on w32 using BDF fonts,
corresponding to ftxfont.c
But, as FreeType already supports BDF fonts, if FreeType and
Fontconfig are also available on w32, what we need may be:
ftw32font.c -- font-driver on w32 directly using FreeType fonts
utilizing methods provided by ftfont.c.
It may be interesting if Emacs supports a frame buffer directly and
has these font driver.
ftfbfont.c -- font-driver on FB for FreeType fonts.
bdffbfont.c -- font-driver on FB for BDF fonts.
Note: The fontset related codes are not yet matured to work well with
the font backend method. So, for instance, even if you start Emacs
as something like this:
% emacs -fn tahoma
Non-ASCII Latin characters will not be displayed by the font "tahoma".
In such a case, please try this:
(set-fontset-font "fontset-default" 'latin '("tahoma" . "unicode-bmp"))
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 <https://www.gnu.org/licenses/>.

View file

@ -1,7 +1,3 @@
(This is a draft. The method here won't actually work yet, because
neither git-new-workdir nor merge-changelog are in the Emacs
distribution yet.)
Setting up and using git for normal, simple bugfixing Setting up and using git for normal, simple bugfixing
===================================================== =====================================================
@ -12,22 +8,22 @@ git config --global user.email "fchu@example.com"
git config --global transfer.fsckObjects true git config --global transfer.fsckObjects true
(See the thread "Recommend these .gitconfig settings for git integrity." (See the thread "Recommend these .gitconfig settings for git integrity."
[https://lists.gnu.org/archive/html/emacs-devel/2016-01/threads.html#01802] [https://lists.gnu.org/r/emacs-devel/2016-01/threads.html#01802]
for more details about why that last line is there.) for more details about why that last line is there.)
Initial setup Initial setup
============= =============
Then we want to clone the repository. We normally want to have both Then we want to clone the repository. We normally want to have both
the current master and the emacs-26 branch. the current master and (if there is one) the active release branch
(eg emacs-28).
mkdir ~/emacs mkdir ~/emacs
cd ~/emacs cd ~/emacs
git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git master git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git master
(cd master; git config push.default current) cd master
./master/admin/git-new-workdir master emacs-26 git config push.default current
cd emacs-26 git worktree add ../emacs-28 emacs-28
git checkout emacs-26
You now have both branches conveniently accessible, and you can do You now have both branches conveniently accessible, and you can do
"git pull" in them once in a while to keep updated. "git pull" in them once in a while to keep updated.
@ -57,11 +53,11 @@ you commit your change locally and then send a patch file as a bug report
as described in ../../CONTRIBUTE. as described in ../../CONTRIBUTE.
Backporting to emacs-26 Backporting to release branch
======================= =============================
If you have applied a fix to the master, but then decide that it should If you have applied a fix to the master, but then decide that it should
be applied to the emacs-26 branch, too, then be applied to the release branch, too, then
cd ~/emacs/master cd ~/emacs/master
git log git log
@ -71,7 +67,7 @@ which will look like
commit 958b768a6534ae6e77a8547a56fc31b46b63710b commit 958b768a6534ae6e77a8547a56fc31b46b63710b
cd ~/emacs/emacs-26 cd ~/emacs/emacs-28
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
and add "Backport:" to the commit string. Then and add "Backport:" to the commit string. Then
@ -79,17 +75,28 @@ and add "Backport:" to the commit string. Then
git push git push
Merging emacs-26 to the master Reverting on release branch
============================== ===========================
If a commit is made to the release branch, and then it is later
decided that this change should only be on the master branch, the
simplest way to handle this is to revert the commit on the release
branch, and include in the associated log entry "do not merge to master".
(Otherwise, the reversion may get merged to master, and inadvertently
clobber the change on master if it has been manually made there.)
Merging release branch to the master
====================================
It is recommended to use the file gitmerge.el in the admin directory It is recommended to use the file gitmerge.el in the admin directory
for merging 'emacs-26' into 'master'. It will take care of many for merging the release branch into 'master'. It will take care of many
things which would otherwise have to be done manually, like ignoring things which would otherwise have to be done manually, like ignoring
commits that should not land in master, fixing up ChangeLogs and commits that should not land in master, fixing up ChangeLogs and
automatically dealing with certain types of conflicts. If you really automatically dealing with certain types of conflicts. If you really
want to, you can do the merge manually, but then you're on your own. want to, you can do the merge manually, but then you're on your own.
If you still choose to do that, make absolutely sure that you *always* If you still choose to do that, make absolutely sure that you *always*
use the 'merge' command to transport commits from 'emacs-26' to use the 'merge' command to transport commits from the release branch to
'master'. *Never* use 'cherry-pick'! If you don't know why, then you 'master'. *Never* use 'cherry-pick'! If you don't know why, then you
shouldn't manually do the merge in the first place; just use shouldn't manually do the merge in the first place; just use
gitmerge.el instead. gitmerge.el instead.
@ -102,11 +109,11 @@ up-to-date by doing a pull. Then start Emacs with
emacs -l admin/gitmerge.el -f gitmerge emacs -l admin/gitmerge.el -f gitmerge
You'll be asked for the branch to merge, which will default to You'll be asked for the branch to merge, which will default to
'origin/emacs-26', which you should accept. Merging a local tracking (eg) 'origin/emacs-28', which you should accept. Merging a local tracking
branch is discouraged, since it might not be up-to-date, or worse, branch is discouraged, since it might not be up-to-date, or worse,
contain commits from you which are not yet pushed upstream. contain commits from you which are not yet pushed upstream.
You will now see the list of commits from 'emacs-26' which are not yet You will now see the list of commits from the release branch that are not yet
merged to 'master'. You might also see commits that are already merged to 'master'. You might also see commits that are already
marked for "skipping", which means that they will be merged with a marked for "skipping", which means that they will be merged with a
different merge strategy ('ours'), which will effectively ignore the different merge strategy ('ours'), which will effectively ignore the

View file

@ -1,6 +1,6 @@
-*- mode: outline; coding: utf-8 -*- -*- mode: outline; coding: utf-8 -*-
Copyright (C) 2013-2017 Free Software Foundation, Inc. Copyright (C) 2013-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA
@ -10,8 +10,6 @@ https://hydra.nixos.org/jobset/gnu/emacs-trunk
* It builds Emacs on various platforms. * It builds Emacs on various platforms.
Sometimes jobs fail due to hydra problems rather than Emacs problems. Sometimes jobs fail due to hydra problems rather than Emacs problems.
Eg it seems like the darwin build will never work again.
https://lists.gnu.org/archive/html/hydra-users/2016-01/msg00000.html
* Mail notifications * Mail notifications
In addition to the web interface, Hydra can send notifications by In addition to the web interface, Hydra can send notifications by
@ -22,6 +20,8 @@ Emacs trunk to emacs-buildstatus@gnu.org.
If you want to receive these notifications, please subscribe at If you want to receive these notifications, please subscribe at
https://lists.gnu.org/mailman/listinfo/emacs-buildstatus https://lists.gnu.org/mailman/listinfo/emacs-buildstatus
(This feature seems to have been broken for ages.)
* The Emacs jobset consists of the following jobs: * The Emacs jobset consists of the following jobs:
** The 'tarball' job ** The 'tarball' job

View file

@ -1,6 +1,6 @@
-*- coding: utf-8; mode: text; -*- -*- coding: utf-8; mode: text; -*-
Copyright (C) 2007-2017 Free Software Foundation, Inc. Copyright (C) 2007-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
From README.multi-tty in the multi-tty branch. From README.multi-tty in the multi-tty branch.
@ -171,7 +171,11 @@ preload-emacs "$name" wait
name="$1" name="$1"
waitp="$2" waitp="$2"
screendir="/var/run/screen/S-$USER" screendir="/var/run/screen/S-$USER"
serverdir="/tmp/emacs$UID" if [ "${XDG_RUNTIME_DIR+set}" ]; then
serverdir="$XDG_RUNTIME_DIR/emacs"
else
serverdir="${TMPDIR-/tmp}/emacs$UID"
fi
emacs=/usr/bin/emacs-multi-tty # Or wherever you installed your multi-tty Emacs emacs=/usr/bin/emacs-multi-tty # Or wherever you installed your multi-tty Emacs
if [ -z "$name" ]; then if [ -z "$name" ]; then
@ -305,7 +309,7 @@ THINGS TO DO
multidisplay (and don't mind core dumps), you can edit src/config.h multidisplay (and don't mind core dumps), you can edit src/config.h
and define HAVE_GTK_MULTIDISPLAY there by hand. and define HAVE_GTK_MULTIDISPLAY there by hand.
http://bugzilla.gnome.org/show_bug.cgi?id=85715 https://gitlab.gnome.org/GNOME/gtk/issues/221
Update: Han reports that GTK+ version 2.8.9 almost gets display Update: Han reports that GTK+ version 2.8.9 almost gets display
disconnects right. GTK will probably be fully fixed by the time disconnects right. GTK will probably be fully fixed by the time
@ -470,7 +474,7 @@ THINGS TO DO
definition. definition.
Exceptions found so far: x-select-text and Exceptions found so far: x-select-text and
x-cut-buffer-or-selection-value. x-selection-value.
** Have a look at fatal_error_hook. ** Have a look at fatal_error_hook.

View file

@ -65,9 +65,6 @@ functions are:
Currently ctrl-g is not detected in as many circumstances as other emacsen. Currently ctrl-g is not detected in as many circumstances as other emacsen.
It is not certain whether this is due to the means of event loop integration, It is not certain whether this is due to the means of event loop integration,
or errors of omission in the NS code. This is an area for improvement. or errors of omission in the NS code. This is an area for improvement.
Also, see the article here and its containing thread:
http://article.gmane.org/gmane.emacs.devel/92021/match=handling%5fsignal

View file

@ -11,7 +11,7 @@ install it only on the emacs-24 branch, not on the master as well.
Installing things manually into more than one branch makes merges more Installing things manually into more than one branch makes merges more
difficult. difficult.
https://lists.gnu.org/archive/html/emacs-devel/2010-03/msg01124.html https://lists.gnu.org/r/emacs-devel/2010-03/msg01124.html
The exception is, if you know that the change will be difficult to The exception is, if you know that the change will be difficult to
merge to the master (eg because the master code has changed a lot). merge to the master (eg because the master code has changed a lot).
@ -40,7 +40,7 @@ so interim merges are unnecessary.
Or use shelves; or rebase; or do something else. See the thread for Or use shelves; or rebase; or do something else. See the thread for
yet another fun excursion into the exciting world of version control. yet another fun excursion into the exciting world of version control.
https://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00086.html https://lists.gnu.org/r/emacs-devel/2010-04/msg00086.html
* Installing changes from gnulib * Installing changes from gnulib

11
admin/notes/spelling Normal file
View file

@ -0,0 +1,11 @@
Re "behavior" vs "behaviour", etc.
- GNU Emacs originated in the US.
- If there is a choice between US vs UK spelling for a word
for new text (code, docs), choose the US variant.
- It's probably (IMHO --ttn, 2017-10-13) not a high priority to
change existing text; use your best judgment (ask if unsure).
- https://lists.gnu.org/r/emacs-devel/2005-06/msg00489.html

View file

@ -3,7 +3,7 @@ Apparently these date from ye olden days, when tags were common
to several GNU projects. So many of them had no relevance to Emacs, to several GNU projects. So many of them had no relevance to Emacs,
and hence were removed. See: and hence were removed. See:
https://lists.gnu.org/archive/html/emacs-devel/2012-04/msg00042.html https://lists.gnu.org/r/emacs-devel/2012-04/msg00042.html
In the unlikely event that you need them, the removed tags were: In the unlikely event that you need them, the removed tags were:

View file

@ -1,6 +1,6 @@
-*-mode: text; coding: utf-8;-*- -*-mode: text; coding: utf-8;-*-
Copyright (C) 2002-2017 Free Software Foundation, Inc. Copyright (C) 2002-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
Importing a new Unicode Standard version into Emacs Importing a new Unicode Standard version into Emacs
@ -11,15 +11,38 @@ Emacs uses the following files from the Unicode Character Database
. UnicodeData.txt . UnicodeData.txt
. Blocks.txt . Blocks.txt
. BidiMirroring.txt
. BidiBrackets.txt . BidiBrackets.txt
. BidiMirroring.txt
. IVD_Sequences.txt . IVD_Sequences.txt
. NormalizationTest.txt . NormalizationTest.txt
. PropertyValueAliases.txt
. ScriptExtensions.txt
. Scripts.txt
. SpecialCasing.txt . SpecialCasing.txt
. confusables.txt
. emoji-data.txt
. emoji-zwj-sequences.txt
. emoji-sequences.txt
. BidiCharacterTest.txt . BidiCharacterTest.txt
First, the first 7 files need to be copied into admin/unidata/, and Emacs also uses the file emoji-test.txt which should be imported from
then Emacs should be rebuilt for them to take effect. Rebuilding the Unicode's Public/emoji/ directory, and IdnaMappingTable.txt from
the Public/idna/ directory.
First, the first 14 files, emoji-test.txt and IdnaMappingTable.txt
need to be copied into admin/unidata/, and the file
https://www.unicode.org/copyright.html should be copied over
copyright.html in admin/unidata (some of them might need trailing
whitespace removed before they can be committed to the Emacs
repository).
Next, review the assignment of default values of the Bidi Class
property to blocks in the file extracted/DerivedBidiClass.txt from the
UCD (search for "unassigned" in that file). Any changes should be
reflected in the unidata-gen.el file, where it sets up the default
values around line 210.
Then Emacs should be rebuilt for them to take effect. Rebuilding
Emacs updates several derived files elsewhere in the Emacs source Emacs updates several derived files elsewhere in the Emacs source
tree, mainly in lisp/international/. tree, mainly in lisp/international/.
@ -28,7 +51,10 @@ files, pay attention to any warning or error messages. In particular,
admin/unidata/unidata-gen.el will complain if UnicodeData.txt defines admin/unidata/unidata-gen.el will complain if UnicodeData.txt defines
new bidirectional attributes of characters, because unidata-gen.el, new bidirectional attributes of characters, because unidata-gen.el,
bidi.c and dispextern.h need to be updated in that case; failure to do bidi.c and dispextern.h need to be updated in that case; failure to do
so will cause aborts in redisplay. so will cause aborts in redisplay. unidata-gen.el will also complain
if the format of the Unicode Copyright notice in copyright.html
changed in significant ways; in that case, update the regular
expression in unidata-gen-file used to extract the copyright string.
Next, review the changes in UnicodeData.txt vs the previous version Next, review the changes in UnicodeData.txt vs the previous version
used by Emacs. Any changes, be it introduction of new scripts or used by Emacs. Any changes, be it introduction of new scripts or
@ -40,15 +66,23 @@ and see if any changes in admin/unidata/blocks.awk are required.
The setting of char-width-table around line 1200 of characters.el The setting of char-width-table around line 1200 of characters.el
should be checked against the latest version of the Unicode file should be checked against the latest version of the Unicode file
EastAsianWidth.txt, and any discrepancies fixed. EastAsianWidth.txt, and any discrepancies fixed: double-width
characters are those marked with W or F in that file. Zero-width
characters are not taken from EastAsianWidth.txt, they are those whose
Unicode General Category property is one of Mn, Me, or Cf, and also
Hangul jungseong and jongseong characters (a.k.a. "Jamo medial vowels"
and "Jamo final consonants").
Any new scripts added by UnicodeData.txt will also need updates to Any new scripts added by UnicodeData.txt will also need updates to
script-representative-chars defined in fontset.el, and also the list script-representative-chars defined in fontset.el, and also the list
of OTF script tags in otf-script-alist, whose source is on this page: of OTF script tags in otf-script-alist, whose source is on this page:
https://www.microsoft.com/typography/otspec/scripttags.htm https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags
Other databases in fontset.el might also need to be updated as needed. Other databases in fontset.el might also need to be updated as needed.
One notable place to check is the function setup-default-fontset,
where new scripts will generally need some addition, most probably to
the list of "simple" scripts (search for "Simple").
The function 'ucs-names', defined in lisp/international/mule-cmds.el, The function 'ucs-names', defined in lisp/international/mule-cmds.el,
might need to be updated because it knows about used and unused ranges might need to be updated because it knows about used and unused ranges
@ -65,7 +99,51 @@ regarding failing lines.
The file BidiCharacterTest.txt should be copied to the test suite, and The file BidiCharacterTest.txt should be copied to the test suite, and
if its format has changed, the file biditest.el there should be if its format has changed, the file biditest.el there should be
modified to follow suit. modified to follow suit. If there's trailing whitespace in
BidiCharacterTest.txt, it should be removed before committing the new
version.
src/macuvs.h is a generated file, but if it has changed as a result
of the updates, please commit it as well (see
admin/unidata/Makefile.in for an explanation).
Visit "emoji-data.txt" with the rebuilt Emacs, and check that an
appropriate font is being used for the emoji (by default Emacs uses
"Noto Color Emoji"). Running the following command in that buffer
will give you an idea of which codepoints are not supported by
whichever font Emacs is using.
(defun check-emoji-coverage (font-name-regexp)
"Display a buffer containing emoji codepoints for which FONT-NAME is not used.
This must be run from a buffer in the format of emoji-data.txt.
FONT-NAME-REGEXP is checked using `string-match'."
(interactive "MFont Name: ")
(save-excursion
(goto-char (point-min))
(let (res char name ifont)
(while (re-search-forward "; Emoji_Presentation [^(]+(\\(.\\)[).]" nil t)
(setq char (aref (match-string 1) 0))
(setq ifont (car (internal-char-font nil char)))
(when ifont
(setq name (font-xlfd-name ifont)))
(if (or (not ifont) (not (string-match font-name-regexp name)))
(setq res (concat (string char) res))))
(when res
(with-output-to-temp-buffer "*Check-Emoji-Coverage*"
(princ (format "Font not matching '%s' was used for the following characters:\n%s"
font-name-regexp (reverse res))))))))
Visit "emoji-zwj-sequences.txt" and "emoji-sequences.txt" with the
rebuilt Emacs, and check that the sample sequences are composed
properly. Also check the Unicode style chart file available at
https://unicode.org/emoji/charts/emoji-style.txt for any issues
involving VS-15 and VS-16, if so you may need to update the value
generated for auto-composition-emoji-eligible-codepoints by
admin/unidata/emoji-zwj.awk. Note that your emoji font might not have
glyphs for the newest codepoints yet.
Finally, etc/NEWS should be updated to announce the support for the
new Unicode version.
Problems, fixmes and other unicode-related issues Problems, fixmes and other unicode-related issues
------------------------------------------------------------- -------------------------------------------------------------
@ -85,7 +163,7 @@ regard to completeness.
code (keymap.c and print.c). code (keymap.c and print.c).
* Rationalize character syntax and its relationship to the Unicode * Rationalize character syntax and its relationship to the Unicode
database. (Applies mainly to symbol an punctuation syntax.) database. (Applies mainly to symbol and punctuation syntax.)
* Fontset handling and customization needs work. We want to relate * Fontset handling and customization needs work. We want to relate
fonts to scripts, probably based on the Unicode blocks. The fonts to scripts, probably based on the Unicode blocks. The
@ -230,36 +308,15 @@ nontrivial changes to the build process.
admin/charsets/mapfiles/cns2ucsdkw.txt admin/charsets/mapfiles/cns2ucsdkw.txt
* iso-2022-7bit * iso-2022-jp
This file switches between CJK charsets, which is not encoded in UTF-8. This contains just one CJK charset, but Emacs currently has no
easy way to specify set-charset-priority on a per-file basis, so
etc/HELLO converting this file to UTF-8 might change the file's appearance
when viewed by an Emacs that is operating in some other language
Each of these files contains just one CJK charset, but Emacs environment.
currently has no easy way to specify set-charset-priority on a
per-file basis, so converting any of these files to UTF-8 might
change the file's appearance when viewed by an Emacs that is
operating in some other language environment.
etc/tutorials/TUTORIAL.ja etc/tutorials/TUTORIAL.ja
lisp/international/ja-dic-cnv.el
lisp/international/ja-dic-utl.el
lisp/international/kinsoku.el
lisp/international/kkc.el
lisp/international/titdic-cnv.el
lisp/language/japan-util.el
lisp/language/japanese.el
lisp/leim/quail/cyril-jis.el
lisp/leim/quail/hanja-jis.el
lisp/leim/quail/japanese.el
lisp/leim/quail/py-punct.el
lisp/leim/quail/pypunct-b5.el
This file contains just Chinese characters, and has same problem.
Also, it contains characters that cannot be encoded in UTF-8.
lisp/international/titdic-cnv.el
* utf-8-emacs * utf-8-emacs
@ -272,6 +329,7 @@ nontrivial changes to the build process.
lisp/language/tibetan.el lisp/language/tibetan.el
lisp/leim/quail/ethiopic.el lisp/leim/quail/ethiopic.el
lisp/leim/quail/tibetan.el lisp/leim/quail/tibetan.el
lisp/international/titdic-cnv.el
* binary files * binary files

View file

@ -1,6 +1,6 @@
GNU EMACS VERSIONING -*- org -*- GNU EMACS VERSIONING -*- org -*-
Ref: https://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00872.html Ref: https://lists.gnu.org/r/emacs-devel/2014-09/msg00872.html
Emacs version numbers have the form Emacs version numbers have the form

View file

@ -1,10 +1,33 @@
-*- outline -*- -*- outline -*-
Copyright (C) 2013-2017 Free Software Foundation, Inc. Copyright (C) 2013-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
NOTES FOR EMACS WWW PAGES NOTES FOR EMACS WWW PAGES
* Access
Anyone with write access to the Emacs code repository has the same
access to the web pages. See <https://savannah.gnu.org/cvs/?group=emacs>
for instructions. After you commit a change to the CVS repository,
it normally appears automatically on www.gnu.org within a few minutes.
The basic procedure is:
Initial checkout:
cvs -z3 -d:ext:<membername>@cvs.savannah.gnu.org:/web/emacs co emacs
Update from repository:
cvs up -dP
You can use Emacs's VC mode to commit files without having to worry
about knowing CVS syntax. You may find M-x cvs-examine a useful,
more specialized, alternative to M-x vc-dir.
* Manual pages
The scripts admin/make-manuals, admin/upload-manuals can be used to do
a complete update of the on-line manual pages (e.g. after a release).
* Renaming pages, redirects * Renaming pages, redirects
Sometimes you want to move a page to a new location. Sometimes you want to move a page to a new location.
@ -64,6 +87,21 @@ work; see manual/.htaccess in the repository. You only have to add a
single redirect for every given external manual, you can redirect single redirect for every given external manual, you can redirect
html_node to hmtl_node and html_mono to html_mono. html_node to hmtl_node and html_mono to html_mono.
* Why CVS?
Savannah supports other VCS, and no-one is especially attached to CVS.
Rather, CVS is the only supported mechanism for getting the changes
onto www.gnu.org. See eg
https://lists.gnu.org/r/bug-gnulib/2012-12/msg00072.html
* CVS alternatives
To use something other than CVS, convert the web-pages CVS repository
to the other VCS, then set up a two-way sync between them.
It needs to be two-way in case eg GNU webmasters make a change to the CVS.
Ref e.g.
https://github.com/mikjo/bigitr
https://lists.gnu.org/r/savannah-hackers-public/2013-04/msg00022.html
This file is part of GNU Emacs. This file is part of GNU Emacs.

View file

@ -3,7 +3,37 @@ HOW TO MAINTAIN COPYRIGHT YEARS FOR GNU EMACS
Maintaining copyright years is now very simple: every time a new year Maintaining copyright years is now very simple: every time a new year
rolls around, add that year to every FSF (and AIST) copyright notice. rolls around, add that year to every FSF (and AIST) copyright notice.
Do this by running the 'admin/update-copyright' script on a fresh repo Do this by running the 'admin/update-copyright' script on a fresh repo
checkout. Inspect the results for plausibility, then commit them. checkout, redirecting its output to a file, so that you could later
examine the files that don't have copyright notices. Inspect the
results for plausibility, then commit them.
A few known problems with the build-aux/update-copyright script:
. it doesn't update config.bat, msdos/depfiles.bat,
nt/configure.bat, etc/tutorials/TUTORIAL.cn, and
etc/tutorials/TUTORIAL.he because the "Copyright" statement begins
in these files after a prefix that is more than 5 characters long
. it doesn't update etc/tutorials/TUTORIAL.nl and
etc/tutorials/TUTORIAL.ro for some reason
. it doesn't update the second Copyright notice, the one that gets
output into PDF and PS, in etc/refcards/ru-refcard.tex
. it doesn't update etc/refcards/gnus-refcard.tex and
doc/misc/org.org because their Copyright statements have a
non-standard format
. several README and XPM files under etc/images/, and also
etc/refcards/README, msdos/README, and nt/icons/README aren't
updated either
These files need to be updated by hand.
Next, run "M-x set-copyright" from admin.el, which updates several
copyright notices in the Emacs sources.
You should also run the etags test suite in test/manual/etags/. It
will most probably fail because the contents of the test files changes
due to copyright years update, so you need to move each ETAGS and
CTAGS file produced by the test runs into the corresponding
ETAGS.good* and CTAGS.good files, and then commit the new test files.
There's no need to worry about whether an individual file has changed There's no need to worry about whether an individual file has changed
in a given year - it's sufficient that Emacs as a whole has changed. in a given year - it's sufficient that Emacs as a whole has changed.
@ -37,4 +67,4 @@ but should keep the full list in a comment in the source.
--RMS, 2005-07-13 --RMS, 2005-07-13
[1] Note that this includes 2001 - see [1] Note that this includes 2001 - see
<https://lists.gnu.org/archive/html/emacs-pretest-bug/2006-12/msg00119.html> <https://lists.gnu.org/r/emacs-pretest-bug/2006-12/msg00119.html>

View file

@ -1,4 +1,4 @@
Copyright (C) 2001-2017 Free Software Foundation, Inc. Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
Emacs for Windows Emacs for Windows

View file

@ -1,277 +0,0 @@
Copyright (C) 2001-2017 Free Software Foundation, Inc.
See the end of the file for license conditions.
Precompiled Distributions of
Emacs for Windows
Version 24.3
March 18, 2013
This directory contains precompiled distributions for GNU Emacs on
Windows (versions before Windows 95 and NT4 are not supported).
This port is a part of the standard GNU Emacs distribution from the
Free Software Foundation; the precompiled distributions are provided
here for convenience since the majority of Windows users are not
accustomed to compiling programs themselves. Corresponding source
can be found in the parent directory in emacs-24.3.tar.gz.
* IMPORTANT LEGAL REMINDER
If you want to redistribute any of the precompiled distributions of
Emacs, be careful to check the implications of the GPL. For instance,
if you put the emacs-24.3-bin-i386.zip file from this directory on
an Internet site, you must arrange to distribute the source files of
the SAME version (i.e. ../emacs-24.3.tar.gz).
Making a link to our copy of the source is NOT sufficient, since we
might upgrade to a new version while you are still distributing the
old binaries.
* Files in this directory
+ emacs-24.3-bin-i386.zip
Windows binaries of Emacs-24.3, with all lisp code and documentation
included.
Download this file if you want a single installation package, and
are not interested in the C source code for Emacs. After
unpacking, you can optionally run the file bin/addpm.exe to have
Emacs add icons to the Start Menu.
If you need the C source code at a later date, it will be safe to
unpack the source distribution on top of this installation.
+ libXpm-3.5.8-w32-src.zip
Source code required to compile libXpm-3.5.8 on Windows. Contains
a basic Makefile for compiling with mingw32 and a .def file for
generating a DLL with the appropriate exports in addition to the
source code to provide the subset of functionality Emacs uses from
libXpm. This corresponds to the libXpm.dll in emacs-24.3-bin-i386.zip.
* Prerequisites for running Emacs on Windows 9X
Using Emacs in GUI mode on Windows 95/98/Me requires the UNICOWS.DLL
dynamic library, which provides MSLU, the Microsoft Unicode Layer
for Windows 9X. You can freely download it from the Microsoft site.
* Image support
Emacs 24.3 contains support for images, however for most image
formats supporting libraries are required. This distribution has
been tested with the libraries that are distributed with GTK for
Windows (http://www.gtk.org/download/win32.php), and the libraries
found at http://gnuwin32.sourceforge.net/. The following image
formats are supported:
PBM/PGM/PPM: Supported natively by Emacs. This format is used for
the black and white versions of the toolbar icons.
XPM: a Windows port of the XPM library corresponding to the x.org
release of X11R7.3 is included with the binary distribution, but
can be replaced by other versions with the name xpm4.dll,
libxpm-nox4.dll or libxpm.dll.
PNG: requires the PNG reference library 1.4 or later, which will
be named libpng14.dll or libpng14-14.dll. LibPNG requires zlib,
which should come from the same source as you got libpng.
Starting with Emacs 23.3, the precompiled Emacs binaries are
built with libpng 1.4.x and later, and are incompatible with
earlier versions of libpng DLLs. So if you have libpng 1.2.x,
the PNG support will not work, and you will have to download
newer versions.
JPEG: requires the Independent JPEG Group's libjpeg 6b or later,
which will be called jpeg62.dll, libjpeg.dll, jpeg-62.dll or jpeg.dll.
TIFF: requires libTIFF 3.0 or later, which will be called libtiff3.dll
or libtiff.dll.
GIF: requires libungif or giflib 4.1 or later, which will be
called giflib4.dll, libungif4.dll or libungif.dll.
SVG: not compiled into the binary release, but available if you
compile Emacs yourself if you have development packages for all the
dependencies. Requires many libraries from GTK and Gnome
as well as the base librsvg library. Known to crash Emacs on many
sample images.
* XML support
In order to support XML via libxml2 at runtime, a libxml2-enabled
Emacs must be able to find the relevant DLLs during startup; failure
to do so is not an error, but libxml2 features won't be available to
the running session.
You can get pre-built binaries (including any required DLL and the
header files) at http://sourceforge.net/projects/ezwinports/files/.
* Distributions in .tar.gz and .zip format
Emacs is distributed primarily as source code in a large gzipped tar
file (*.tar.gz). Because Emacs is quite large and therefore
difficult to download over unreliable connections, the Windows
binaries are provided in two combinations. The complete lisp source
plus executables (bin), and executables only (barebin) for unpacking
over the top of the source distribution. Formerly, we used the same
.tar.gz format but since there are no longer legal problems with
.zip files, and the latest versions of Windows support these
natively, the Windows binaries of Emacs are now distributed as .zip
files.
* Distributions for non-x86 platforms
Distributions for non-x86 platforms are no longer supplied. Older
platforms supported by Windows NT no longer seem to be in demand,
and Emacs is yet to be ported to 64 bit Windows platforms. If you
are willing to help port Emacs 24 to 64 bit versions of Windows,
your contribution will be welcome on the emacs-devel mailing list.
* Unpacking distributions
Ports of GNU gzip and GNU tar for handling the source distribution file
format can be found in several places that distribute ports of GNU
programs, for example:
Cygwin: http://www.cygwin.com/
GnuWin32: http://gnuwin32.sourceforge.net/
Many other popular file compression utilities for Windows are also
able to handle gzipped tar files. 7zip is one free Windows graphical
program that is able to handle many archive formats.
Open a command prompt (MSDOS) window. Decide on a directory in which
to place Emacs. Move the distribution to that directory, and then
unpack it as follows.
If you have the gzipped tar version, use gunzip to uncompress the tar
file on the fly, and pipe the output through tar with the "xvf" flags
to extract the files from the tar file:
% gunzip -c some.tar.gz | tar xvf -
You may see messages from tar about not being able to change the
modification time on directories, and from gunzip complaining about a
broken pipe. These messages are harmless and you can ignore them. On
Windows NT, unpacking tarballs this way leaves them in compressed
form, taking up less space on disk. Unfortunately, on Windows 95 and
98, a large temporary file is created, so it is better to use the
djtarnt.exe program, which performs the equivalent operation in one
step:
% djtarnt -x some.tar.gz
You may be prompted to rename or overwrite directories when using
djtarnt: simply type return to continue (this is harmless).
Zip files can be unpacked using unzip.exe from info-zip.org
if you do not already have other tools to do this.
% unzip some.zip
The precompiled binaries can be unpacked using unzip.exe from info-zip.org
if you do not already have other tools to do this.
% unzip some.zip
Once you have unpacked a precompiled distribution of Emacs, it should
have the following subdirectories:
bin etc info lisp site-lisp
* Unpacking with other tools
If you do use other utility programs to unpack the distribution, check
the following to be sure the distribution was not corrupted:
+ Be sure to disable the CR/LF translation or the executables will
be unusable. Older versions of WinZip would enable this
translation by default when unpacking .tar files. If you are
using WinZip, disable it. (I don't have WinZip myself, and I do
not know the specific commands necessary to disable it.)
+ Check that filenames were not truncated to 8.3. For example, there
should be a file lisp/abbrevlist.el; if this has been truncated to
abbrevli.el, your distribution has been corrupted while unpacking
and Emacs will not start.
+ Check that filenames were not changed by your web-browser. Some
proprietary web-browsers save .tar.gz files as .tar.tar. You might
like to consider switching to a Free modern browser if your browser
has this bug.
+ I've also had reports that some older "gnuwin32" port of tar
corrupts the executables. Use the latest version from the gnuwin32
site or another port of tar instead.
If you believe you have unpacked the distributions correctly and are
still encountering problems, see the section on Further Information
below.
* Compiling from source
If you would like to compile Emacs from source, download the source
distribution, unpack it in the same manner as a precompiled
distribution, and look in the file nt/INSTALL for detailed
directions. It is recommended to use GCC 2.95 or later with MinGW
support to compile the source. The port of GCC included in Cygwin
is supported, but check the nt/INSTALL file if you have trouble
since some builds of GNU make aren't supported.
* Further information
The Emacs on MS Windows FAQ is distributed with Emacs (info
manual "efaq-w32"), and at
https://www.gnu.org/software/emacs/manual/efaq-w32.html
In addition to the FAQ, there is a mailing list for discussing issues
related to the Windows port of Emacs. For information about the
list, see this Web page:
https://lists.gnu.org/mailman/listinfo/help-emacs-windows
To ask questions on the mailing list, send email to
help-emacs-windows@gnu.org. (You don't need to subscribe for that.)
To subscribe to the list or unsubscribe from it, fill the form you
find at https://mail.gnu.org/mailman/listinfo/help-emacs-windows as
explained there.
Another valuable source of information and help which should not be
overlooked is the various Usenet news groups dedicated to Emacs.
These are particularly good for help with general issues which aren't
specific to the Windows port of Emacs. The main news groups to use
for seeking help are:
gnu.emacs.help
comp.emacs
There are also fairly regular postings and announcements of new or
updated Emacs packages on this group:
gnu.emacs.sources
Enjoy!
Most of this README was contributed by former maintainers Andrew Innes
(andrewi@gnu.org) and Jason Rumney (jasonr@gnu.org).
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 https://www.gnu.org/licenses/.

View file

@ -0,0 +1,144 @@
Distribution Build Scripts for Windows
======================================
The scripts are used to build the binary distribution zip files for windows.
Environment
-----------
A full installation of msys2 is required along for the build. The
various dependencies of Emacs need to be installed also. These change
over time, but are listed in build-deps-zips.py.
File System Organization
------------------------
They are relatively strict about the file system organization. In
general, they should work across several more than just the version of
Emacs they come with, as the dependencies of Emacs change relatively slowly.
The file system needs to be organized like so:
~/emacs-build/git
Contains checkouts and worktrees of the Emacs git repository,
organized according to branches.
~/emacs-build/git/master
A checkout out of the master branch of the Emacs git repository.
~/emacs-build/git/emacs-$major-version
A worktree of the git repository containing the current release
branch. This has to be created by hand.
~/emacs-build/git/emacs-$release-version
A branch of the git repository containing the last release. The
build-zips.sh file will create this for you.
~/emacs-build/deps
A location for the dependencies. This needs to contain two zip files
with the dependencies. build-dep-zips.py will create these files for you.
~/emacs-build/deps/libXpm
Contain libXpm-noX4.dll. This file is used to load images for the
splash screen, menu items and so on. Emacs runs without it, but looks
horrible. The files came original from msys2, and contains no
dependencies. It has to be placed manually (but probably never
need updating).
~/emacs-build/build/$version
We build Emacs out-of-source here. This directory is created by
build-zips.sh. This directory can be freely deleted after zips have
been created
~/emacs-build/install/$version
We install Emacs here. This directory is created by build-zips.sh.
This directory can and *should* be deleted after zips have been
created.
~/emacs-upload
Zips are created and moved here from where they can be, well,
uploaded.
Build Process
-------------
### For each major version
The dependencies files need to be created. This can be around the time
of the pre-tests, then used for all releases of that version, to
ensure the maximum stability.
To do this:
Update msys to the latest version with `pacman -Syu`.
Then run build-dep-zips.py, in the ~/emacs-build/deps directory. Two
zips will be created, containing the dependencies, as well as the
source for these.
For emacs release or pre-test version:
Run `build-zips.sh -g` in the release branch. This will create a worktree
with the tag of the last version.
Then run `build-zips.sh` in this worktree. Eventually, four new zip
files will be created in ~/emacs-upload from where they can be signed
and uploaded with `gnupload`.
### For snapshots from Master
Snapshots are generally created from master when there is a release
branch on which a release has already been created. At this point,
only pre-tests or full releases need to happen from the release
branch.
To do this:
Update msys to the latest version with `pacman -Syu`.
Then run build-dep-zips.py, in ~/emacs-build/deps directory. Two zips
will be created, containing the dependencies, as well as the source
for these. These deps files contain the date of creation in their
name. The deps file can be reused as desired, or a new version
created. Where multiple deps files exist, the most recent will be
used.
Now, run `build-zips.sh -s` to build a snapshot release.
### For snapshots from a Release Branch
Snapshots can be built from a release branch; this is really only
useful before a pre-test has happened.
The process is the same as for building from the master branch, except
that the release branch should already exist as a worktree, and the
version number must be added to the command line with `build-zips.sh
-V 27 -s`. The final zips will be named after the branch rather than
the version (e.g emacs-27-2019-12-26.zip) rather than the Emacs
version (e.g emacs-27.0.50.zip).
### For snapshots from another branch
Snapshots can be build from any other branch. There is rarely a need
to do this, except where some significant, wide-ranging feature is
being added on a feature branch. In this case, the branch can be
given using `build-zips.sh -b pdumper -s` for example. Any "/"
characters in the branch title are replaced.

View file

@ -0,0 +1,94 @@
Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
Precompiled Distributions of
Emacs for Windows
Jan 14, 2021
This directory contains precompiled distributions for GNU Emacs on
Windows
IMPORTANT LEGAL REMINDER
========================
If you want to redistribute any of the precompiled distributions of
Emacs, be careful to check the implications of the GPL. For instance,
if you put the compiled file from this directory on an Internet site,
you must arrange to distribute the source files of the SAME version.
Making a link to our copy of the source is NOT sufficient, since we
might upgrade to a new version while you are still distributing the
old binaries.
Windows Binaries
================
Currently, we provide three different binary packages for Emacs, which
are:
emacs-$VERSION-installer.exe
Contains Emacs with dependencies as an installer
package. Mostly, this is the best one to install.
emacs-$VERSION.zip
Contains Emacs with dependencies. This contains the same files as the
installer but as a zip file which some users may prefer.
emacs-$VERSION-no-deps.zip
Contains Emacs without any dependencies. This may be useful if you
wish to install where the dependencies are already available, or if
you want the small possible Emacs.
In addition, we provide the following files which will not be useful
for most end-users.
emacs-$VERSION-deps.zip
The dependencies. Unzipping this file on top of
emacs-$VERSION-no-deps.zip should result in the same install as
emacs-$VERSION.zip.
emacs-$VERSION-deps-mingw-w64-src.zip
The source for the dependencies. Source for Emacs itself is available
in the main distribution tarball. These dependencies were produced
from an updated msys2 at the point of the first pre-test. It is not
intended that these will be updated after that point.
Source for Emacs itself is found in the directory above.
Snapshots
=========
We also distribute "snapshots" of Emacs built at points throughout the
development cycle, for those interested in following this cycle. They
are not recommended for normal users; however, they are useful for
people who want to report bugs against the current master.
The files follow the same naming convention, but also include a date
(and sometimes information about their branch). The Emacs source at
the time of these builds is also distributed.
LICENSE
======
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 https://www.gnu.org/licenses/.

View file

@ -0,0 +1,276 @@
#!/usr/bin/python3
## Copyright (C) 2017-2022 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 <https://www.gnu.org/licenses/>.
import argparse
import os
import shutil
import re
import functools
import operator
from subprocess import check_output
## Constants
EMACS_MAJOR_VERSION="28"
# This list derives from the features we want Emacs to compile with.
PKG_REQ='''mingw-w64-x86_64-giflib
mingw-w64-x86_64-gnutls
mingw-w64-x86_64-harfbuzz
mingw-w64-x86_64-jansson
mingw-w64-x86_64-lcms2
mingw-w64-x86_64-libjpeg-turbo
mingw-w64-x86_64-libpng
mingw-w64-x86_64-librsvg
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-libxml2
mingw-w64-x86_64-xpm-nox'''.split()
DLL_REQ='''libgif
libgnutls
libharfbuzz
libjansson
liblcms2
libturbojpeg
libpng
librsvg
libtiff
libxml
libXpm'''.split()
## Options
DRY_RUN=False
def check_output_maybe(*args,**kwargs):
if(DRY_RUN):
print("Calling: {}{}".format(args,kwargs))
else:
return check_output(*args,**kwargs)
## DLL Capture
def gather_deps():
os.mkdir("x86_64")
os.chdir("x86_64")
for dep in full_dll_dependency():
check_output_maybe(["cp /mingw64/bin/{}*.dll .".format(dep)],
shell=True)
print("Zipping")
check_output_maybe("zip -9r ../emacs-{}-{}deps.zip *"
.format(EMACS_MAJOR_VERSION, DATE),
shell=True)
os.chdir("../")
## Return all Emacs dependencies
def full_dll_dependency():
deps = [dll_dependency(dep) for dep in DLL_REQ]
return set(sum(deps, []) + DLL_REQ)
## Dependencies for a given DLL
def dll_dependency(dll):
output = check_output(["/mingw64/bin/ntldd", "--recursive",
"/mingw64/bin/{}*.dll".format(dll)]).decode("utf-8")
## munge output
return ntldd_munge(output)
def ntldd_munge(out):
deps = out.splitlines()
rtn = []
for dep in deps:
## Output looks something like this
## KERNEL32.dll => C:\Windows\SYSTEM32\KERNEL32.dll (0x0000000002a30000)
## libwinpthread-1.dll => C:\msys64\mingw64\bin\libwinpthread-1.dll (0x0000000000090000)
## if it's the former, we want it, if its the later we don't
splt = dep.split()
if len(splt) > 2 and "msys64" in splt[2]:
print("Adding dep", splt[0])
rtn.append(splt[0].split(".")[0])
return rtn
#### Source Capture
## Packages to fiddle with
## Source for gcc-libs is part of gcc
SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
SKIP_DEP_PKGS=frozenset(["mingw-w64-x86_64-glib2"])
MUNGE_SRC_PKGS={"mingw-w64-libwinpthread-git":"mingw-w64-winpthreads-git"}
MUNGE_DEP_PKGS={
"mingw-w64-x86_64-libwinpthread":"mingw-w64-x86_64-libwinpthread-git",
"mingw-w64-x86_64-libtre": "mingw-w64-x86_64-libtre-git",
}
## Currently no packages seem to require this!
ARCH_PKGS=[]
SRC_REPO="https://repo.msys2.org/mingw/sources"
def immediate_deps(pkgs):
package_info = check_output(["pacman", "-Si"] + pkgs).decode("utf-8").splitlines()
## Extract the packages listed for "Depends On:" lines.
dependencies = [line.split(":")[1].split() for line in package_info
if line.startswith("Depends On")]
## Flatten dependency lists from multiple packages into one list.
dependencies = functools.reduce(operator.iconcat, dependencies, [])
## Remove > signs TODO can we get any other punctuation here?
dependencies = [d.split(">")[0] for d in dependencies if d]
dependencies = [d for d in dependencies if not d == "None"]
dependencies = [MUNGE_DEP_PKGS.get(d, d) for d in dependencies]
return dependencies
## Extract all the msys2 packages that are dependencies of our direct dependencies
def extract_deps():
print( "Extracting deps" )
# Get a list of all dependencies needed for packages mentioned above.
pkgs = set(PKG_REQ)
newdeps = pkgs
print("adding...")
while True:
subdeps = frozenset(immediate_deps(list(newdeps)))
newdeps = subdeps - SKIP_DEP_PKGS - pkgs
if not newdeps:
break
print('\n'.join(newdeps))
pkgs |= newdeps
return list(pkgs)
def download_source(tarball):
print("Acquiring {}...".format(tarball))
if not os.path.exists("../emacs-src-cache/{}".format(tarball)):
print("Downloading {}...".format(tarball))
check_output_maybe(
"wget -a ../download.log -O ../emacs-src-cache/{} {}/{}"
.format(tarball, SRC_REPO, tarball),
shell=True
)
print("Downloading {}... done".format(tarball))
print("Copying {} from local".format(tarball))
shutil.copyfile("../emacs-src-cache/{}".format(tarball),
"{}".format(tarball))
## Fetch all the source code
def gather_source(deps):
if not os.path.exists("emacs-src-cache"):
os.mkdir("emacs-src-cache")
os.mkdir("emacs-src")
os.chdir("emacs-src")
for pkg in deps:
pkg_name_and_version= \
check_output(["pacman","-Q", pkg]).decode("utf-8").strip()
## Produces output like:
## mingw-w64-x86_64-zlib 2.43.2
pkg_name_components = pkg_name_and_version.split()
pkg_name=pkg_name_components[0]
pkg_version=pkg_name_components[1]
## source pkgs don't have an architecture in them
pkg_name = re.sub(r"x86_64-","",pkg_name)
if(pkg_name in SKIP_SRC_PKGS):
continue
## Switch names if necessary
pkg_name = MUNGE_SRC_PKGS.get(pkg_name,pkg_name)
tarball = "{}-{}.src.tar.gz".format(pkg_name,pkg_version)
download_source(tarball)
print("Zipping")
check_output_maybe("zip -9 ../emacs-{}-{}deps-mingw-w64-src.zip *"
.format(EMACS_MAJOR_VERSION,DATE),
shell=True)
os.chdir("..")
def clean():
print("Cleaning")
os.path.isdir("emacs-src") and shutil.rmtree("emacs-src")
os.path.isdir("x86_64") and shutil.rmtree("x86_64")
os.path.isfile("download.log") and os.remove("download.log")
if(os.environ["MSYSTEM"] != "MSYS"):
print("Run this script in an MSYS-shell!")
exit(1)
parser = argparse.ArgumentParser()
parser.add_argument("-s", help="snapshot build",
action="store_true")
parser.add_argument("-r", help="source code only",
action="store_true")
parser.add_argument("-c", help="clean only",
action="store_true")
parser.add_argument("-d", help="dry run",
action="store_true")
parser.add_argument("-l", help="list dependencies only",
action="store_true")
args = parser.parse_args()
do_all=not (args.c or args.r)
DRY_RUN=args.d
if( args.l ):
print("List of dependencies")
print( deps )
exit(0)
if args.s:
DATE="{}-".format(check_output(["date", "+%Y-%m-%d"]).decode("utf-8").strip())
else:
DATE=""
if( do_all):
gather_deps()
if( do_all or args.r ):
deps=extract_deps()
gather_source(deps)
if( args.c ):
clean()

210
admin/nt/dist-build/build-zips.sh Executable file
View file

@ -0,0 +1,210 @@
#!/bin/bash
## Copyright (C) 2017-2022 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 <https://www.gnu.org/licenses/>.
function git_up {
echo [build] Making git worktree for Emacs $VERSION
cd $REPO_DIR/emacs-$MAJOR_VERSION
git pull
git worktree add ../$BRANCH $BRANCH
cd ../$BRANCH
./autogen.sh
}
function build_zip {
echo [build] Building Emacs-$VERSION
## Clean the install location because we use it twice
rm -rf $HOME/emacs-build/install/emacs-$VERSION
mkdir --parents $HOME/emacs-build/build/emacs-$VERSION
cd $HOME/emacs-build/build/emacs-$VERSION
## Do we need this or is it the default?
export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig
## Running configure forces a rebuild of the C core which takes
## time that is not always needed, so do not do it unless we have
## to.
if [ ! -f Makefile ] || (($CONFIG))
then
echo [build] Configuring Emacs
$REPO_DIR/$BRANCH/configure \
--without-dbus \
--without-compress-install \
$CACHE \
CFLAGS="$CFLAGS"
fi
make -j 4 $INSTALL_TARGET \
prefix=$HOME/emacs-build/install/emacs-$VERSION
cd $HOME/emacs-build/install/emacs-$VERSION
zip -r -9 emacs-$OF_VERSION-no-deps.zip *
mv emacs-$OF_VERSION-no-deps.zip $HOME/emacs-upload
if [ -z $SNAPSHOT ];
then
DEPS_FILE=$HOME/emacs-build/deps/emacs-$MAJOR_VERSION-deps.zip
else
## Pick the most recent snapshot whatever that is
DEPS_FILE=`ls $HOME/emacs-build/deps/emacs-$MAJOR_VERSION-*-deps.zip | tail -n 1`
fi
echo [build] Using $DEPS_FILE
unzip -d bin $DEPS_FILE
zip -r -9 emacs-$OF_VERSION.zip *
mv emacs-$OF_VERSION.zip ~/emacs-upload
}
function build_installer {
cd $HOME/emacs-build/install/
echo [build] Calling makensis in `pwd`
cp $REPO_DIR/$BRANCH/admin/nt/dist-build/emacs.nsi .
makensis -v4 \
-DEMACS_VERSION=$ACTUAL_VERSION \
-DVERSION_BRANCH=$VERSION \
-DOUT_VERSION=$OF_VERSION emacs.nsi
rm emacs.nsi
mv emacs-$OF_VERSION-installer.exe ~/emacs-upload
}
set -o errexit
SNAPSHOT=
CACHE=
BUILD=1
BUILD_64=1
GIT_UP=0
CONFIG=1
CFLAGS="-O2 -static"
INSTALL_TARGET="install-strip"
## The location of the git repo
REPO_DIR=$HOME/emacs-build/git/
while getopts "gb:hnsiV:" opt; do
case $opt in
g)
BUILD_32=0
BUILD_64=0
GIT_UP=1
;;
n)
CONFIG=0
;;
i)
BUILD=0
;;
b)
REQUIRED_BRANCH=$OPTARG
echo "Setting Required branch $REQUIRED_BRANCH"
;;
V)
VERSION=$OPTARG
;;
s)
SNAPSHOT="-snapshot"
CFLAGS="-O2 -static -g3"
INSTALL_TARGET="install"
;;
h)
echo "build-zips.sh"
echo " -b args -- build args branch"
echo " -g git update and worktree only"
echo " -i build installer only"
echo " -n do not configure"
echo " -s snapshot build"
exit 0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
## ACTUAL_VERSION is the version declared by emacs
if [ -z $ACTUAL_VERSION ];
then
ACTUAL_VERSION=`
sed -n 's/^AC_INIT(\[*GNU Emacs]*,[ ]*\[*\([^] ,)]*\).*/\1/p' < ../../../configure.ac
`
fi
if [ -z $ACTUAL_VERSION ];
then
echo [build] Cannot determine Emacs version
exit 1
fi
## VERSION is the version that we want to call Emacs
VERSION=$ACTUAL_VERSION
MAJOR_VERSION="$(echo $VERSION | cut -d'.' -f1)"
## VERSION includes the word snapshot if necessary
VERSION=$VERSION$SNAPSHOT
## OF version includes the date if we have a snapshot
OF_VERSION=$VERSION
if [ -z $SNAPSHOT ];
then
BRANCH=emacs-$VERSION
else
BRANCH=master
CACHE=-C
OF_VERSION="$VERSION-`date +%Y-%m-%d`"
fi
echo Checking for required branch
if [ -z $REQUIRED_BRANCH ];
then
:
else
BRANCH=$REQUIRED_BRANCH
echo [build] Building from Branch $BRANCH
VERSION=$VERSION-${BRANCH/\//_}
OF_VERSION="$VERSION-`date +%Y-%m-%d`"
## Use snapshot dependencies
SNAPSHOT=1
CFLAGS="-O2 -static -g3"
INSTALL_TARGET="install"
fi
if (($GIT_UP))
then
git_up
fi
if (($BUILD_64))
then
if (($BUILD))
then
build_zip
fi
build_installer
fi

View file

@ -0,0 +1,77 @@
!include MUI2.nsh
!include LogicLib.nsh
!include x64.nsh
Outfile "emacs-${OUT_VERSION}-installer.exe"
SetCompressor /solid lzma
Var StartMenuFolder
!define MUI_WELCOMEPAGE_TITLE "Emacs"
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TEXT "Welcome to Emacs -- the editor of a lifetime."
!define MUI_WELCOMEFINISHPAGE_BITMAP "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\splash.bmp"
!define MUI_ICON "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!define MUI_UNICON "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_TEXT_TOP "The GNU General Public License"
!insertmacro MUI_PAGE_LICENSE "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\lisp\COPYING"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Name Emacs-${EMACS_VERSION}
function .onInit
StrCpy $INSTDIR "$PROGRAMFILES64\Emacs"
functionend
Section
SetOutPath $INSTDIR
File /r emacs-${VERSION_BRANCH}
# define uninstaller name
WriteUninstaller $INSTDIR\Uninstall.exe
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
;Create shortcuts
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_END
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Emacs.lnk" "$INSTDIR\emacs-${VERSION_BRANCH}\bin\runemacs.exe"
SectionEnd
# create a section to define what the uninstaller does.
# the section will always be named "Uninstall"
Section "Uninstall"
# Always delete uninstaller first
Delete "$INSTDIR\Uninstall.exe"
# now delete installed directory
RMDir /r "$INSTDIR"
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk"
RMDir "$SMPROGRAMS\$StartMenuFolder"
SectionEnd

View file

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
### quick-install-emacs --- do a halfway-decent job of installing emacs quickly ### quick-install-emacs --- do a halfway-decent job of installing emacs quickly
## Copyright (C) 2001-2017 Free Software Foundation, Inc. ## Copyright (C) 2001-2022 Free Software Foundation, Inc.
## Author: Miles Bader <miles@gnu.org> ## Author: Miles Bader <miles@gnu.org>
@ -172,10 +172,10 @@ test x"$prefix" = x && { prefix="`get_config_var prefix`" || exit 4 ; }
test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; } test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; }
VERSION=` VERSION=`
sed -n 's/^AC_INIT([ ]*emacs[ ]*,[ ]*\([^ ),]*\).*/\1/p' <$SRC/configure.ac sed -n 's/^AC_INIT([ ]*\[*emacs]*[ ]*,[ ]*\[*\([^] ),]*\).*/\1/p' <$SRC/configure.ac
` || exit 4 ` || exit 4
test -n "$VERSION" || VERSION=` test -n "$VERSION" || VERSION=`
sed -n 's/^AC_INIT([ ]*GNU Emacs[ ]*,[ ]*\([^ ),]*\).*/\1/p' <$SRC/configure.ac sed -n 's/^AC_INIT([ ]*\[*GNU Emacs]*[ ]*,[ ]*\[*\([^] ),]*\).*/\1/p' <$SRC/configure.ac
` || exit 4 ` || exit 4
test -n "$VERSION" || { printf '%s\n' >&2 "$me: no version in configure.ac"; exit 4; } test -n "$VERSION" || { printf '%s\n' >&2 "$me: no version in configure.ac"; exit 4; }

76
admin/release-branch.txt Normal file
View file

@ -0,0 +1,76 @@
Instructions for cutting the Emacs release branch
1. In the clone of the Emacs Git repository, switch to the 'master'
branch, "git pull", and build it (using 'make bootstrap') to make
sure it's not broken. Run 'make check-expensive' and ensure all
tests pass. (Alternatively, verify that the automated build
servers are showing success for the latest revision.)
2. Create the release branch and switch to it. Assuming that it is
for releasing Emacs versions XY.1, XY.2, etc., the command is:
git checkout -b emacs-XY
3. Switch the release branch to the suitable version. The convention
is that release branches start with version XY.0.60, whereas the
master branch from which the release branch was cut was at the
version XY.0.50. To change the version, do the following inside
Emacs:
M-x load-file RET admin/admin.el RET
M-x set-version RET XY.0.60 RET
Change the value of 'customize-changed-options-previous-release'
in cus-edit.el to reference the last release from the emacs-XY-1
branch (last release for the previous major version).
The above modifies several files in the tree; commit the changes
with the appropriate log message, something like "Bump Emacs
version to XY.0.60", and with header saying "Cut the emacs-XY
release branch". Then push the changes:
git push --set-upstream origin emacs-XY
The "push" command should show the new branch just created.
4. Switch back to the master branch.
git checkout master
git pull
Set the version on the master branch to the next major release:
M-x set-version RET XY+1.0.50 RET
This creates a new file etc/NEWS.XY. "git add" it.
Change the value of 'customize-changed-options-previous-release'
in cus-edit.el to reference emacs-XY.1, the next version to be
released from the newly-committed release branch.
Update the emacs-module sources for the new version XY+1. This
entails:
. adding a new file src/module-env-XY+1.h, with contents just the
comment taken from the beginning of src/module-env-XY.h
. removing the comment from the beginning of src/module-env-XY.h
. adding two lines to configure.ac:
AC_SUBST_FILE([module_env_snippet_XY+1])
module_env_snippet_XY+1="$srcdir/src/module-env-XY+1.h"
. adding a new 'struct emacs_env_XY+1' to src/emacs-module.h.in,
with the contents identical to'struct emacs_env_XY', with one
line added:
@module_env_snippet_XY+1@
(FIXME: "M-x set-version" should do this emacs-module stuff
automatically when the version is NN.0.60, or when there's no
src/module-env-NN.h file.)
"git add" the new src/module-env-XY+1.h file.
Then rebuild Emacs. Then commit the new/changed files and push.
5. Announce the new release branch on emacs-devel.

View file

@ -41,23 +41,35 @@ released in the next release cycle. From time to time, the master
branches merges bugfix commits from the "emacs-NN" branch. branches merges bugfix commits from the "emacs-NN" branch.
See admin/gitmerge.el. See admin/gitmerge.el.
* RELEASE-CRITICAL BUGS * RELEASE-BLOCKING BUGS
Emacs uses the "blocking" feature of Debbugs for bugs that need to be Emacs uses the "blocking" feature of Debbugs for bugs that need to be
addressed in the next release. addressed in the next release.
Currently, bug#21966 is the tracking bug for release of 25.2 and Currently, bug#43018 is the tracking bug for release of 27.2 and
bug#24655 is the tracking bug for release 26.1. Say bug#123 needs bug#39202 is the tracking bug for release 28.1. Say bug#123 needs
to be fixed for Emacs 26.1. Send a message to control@debbugs.gnu.org to be fixed for Emacs 27.2. Send a message to control@debbugs.gnu.org
that says: that says:
block 24655 by 123 block 43018 by 123
Change "block" to "unblock" to remove a bug from the list. Closed Change "block" to "unblock" to remove a bug from the list. Closed
bugs are not listed as blockers, so you do not need to explicitly bugs are not listed as blockers, so you do not need to explicitly
unblock one that has been closed. You may need to force an update of unblock one that has been closed. You may need to force an update of
the tracking bug with ctrl-f5/shift-reload to see the latest version. the tracking bug with ctrl-f5/shift-reload to see the latest version.
If you use the debbugs package from GNU ELPA, you can apply the
following command to see all bugs which block a given release:
(debbugs-gnu-emacs-release-blocking-reports "27.2")
The following command from admin/admin.el sends a reminder message
about release-blocking bugs to the <emacs-devel@gnu.org> mailing list:
(reminder-for-release-blocking-bugs "27.2")
It is recommended to send this reminder message once a month. Once the
pretest has started, a reminder message once a week is appropriate.
* TO BE DONE SHORTLY BEFORE RELEASE * TO BE DONE SHORTLY BEFORE RELEASE
@ -99,6 +111,10 @@ significant changes and new features in the upcoming release, then
describe the "benefits" from losing those features. Be funny, use describe the "benefits" from losing those features. Be funny, use
humor. The text written for the previous releases can serve as an example. humor. The text written for the previous releases can serve as an example.
The Emacs FAQ (doc/misc/efaq.texi) also has a "What's new" section;
for major releases a new section should be added listing the
significant changes.
Check cross-references between the manuals (e.g. from emacs to elisp) Check cross-references between the manuals (e.g. from emacs to elisp)
are correct. You can use something like the following in the info are correct. You can use something like the following in the info
directory in the Emacs build tree: directory in the Emacs build tree:
@ -162,9 +178,10 @@ emacs.pdf' (e.g., enable "smallbook").
What paper size are the English versions supposed to be on? What paper size are the English versions supposed to be on?
On Debian testing, the packages texlive-lang-czechslovak and On Debian testing, the packages texlive-lang-czechslovak and
texlive-lang-polish will let you generate the cs-* and sk-* pdfs. texlive-lang-polish will let you generate the cs-* and sk-* pdfs.
(You may need texlive-lang-cyrillic, texlive-lang-german for others.) (You may need texlive-lang-cyrillic, texlive-lang-german,
The Makefile rules did not work for me, I had to use something like: and texlive-fonts-extra for others.) Gnus refcards need
csplain -output-format=pdf cs-refcard texlive-latex-extra and/or texlive-latex-recommended. On Fedora-like
systems, texlive-lh may help.
** Ask maintainers of refcard translations to update them. ** Ask maintainers of refcard translations to update them.
@ -179,26 +196,30 @@ pt-br Rodrigo Real
ru Alex Ott ru Alex Ott
sk Miroslav Vaško sk Miroslav Vaško
** Update some files from their upstream.
Some files in Emacs are copies of data files maintained elsewhere.
Make sure that they are reasonably up-to-date.
- etc/publicsuffix.txt
https://publicsuffix.org/list/public_suffix_list.dat
- leim/SKK-DIC/SKK-JISYO.L
https://raw.githubusercontent.com/skk-dev/dict/master/SKK-JISYO.L
* BUGS * BUGS
** Check for modes which bind M-s that conflicts with a new global binding M-s ** Check for modes which bind M-s that conflicts with a new global binding M-s
and change key bindings where necessary. The current list of modes: and change key bindings where necessary. The current list of modes:
1. Gnus binds 'M-s' to 'gnus-summary-search-article-forward'. 1. Minibuffer binds 'M-s' to 'next-matching-history-element'
2. Minibuffer binds 'M-s' to 'next-matching-history-element'
(not useful any more since C-s can now search in the history). (not useful any more since C-s can now search in the history).
3. 'center-line' in Text mode was already moved to the text formatting 2. PCL-CVS binds 'M-s' to 'cvs-status', and log-edit-mode binds it to
keymap as 'M-o M-s' (thus this binding is not necessary any more
in 'nroff-mode-map' too and can be removed now from the nroff mode
because it can now use the global key binding 'M-o M-s' 'center-line').
4. PCL-CVS binds 'M-s' to 'cvs-status', and log-edit-mode binds it to
'log-edit-comment-search-forward'. Perhaps search commands 'log-edit-comment-search-forward'. Perhaps search commands
on the global key binding 'M-s' are useless in these modes. on the global key binding 'M-s' are useless in these modes.
5. Rmail binds '\es' to 'rmail-search'/'rmail-summary-search'. 3. Rmail binds '\es' to 'rmail-search'/'rmail-summary-search'.
* DOCUMENTATION * DOCUMENTATION

View file

@ -1,11 +1,11 @@
# BidiBrackets-10.0.0.txt # BidiBrackets-15.0.0.txt
# Date: 2017-04-12, 17:30:00 GMT [AG, LI, KW] # Date: 2022-05-03, 18:42:00 GMT [AG, LI, KW]
# © 2017 Unicode®, Inc. # © 2022 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html # For terms of use, see https://www.unicode.org/terms_of_use.html
# #
# Unicode Character Database # Unicode Character Database
# For documentation, see http://www.unicode.org/reports/tr44/ # For documentation, see https://www.unicode.org/reports/tr44/
# #
# Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties # Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties
# #
@ -56,7 +56,7 @@
# of each line. # of each line.
# #
# For information on bidirectional paired brackets, see UAX #9: Unicode # For information on bidirectional paired brackets, see UAX #9: Unicode
# Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/ # Bidirectional Algorithm, at https://www.unicode.org/reports/tr9/
# #
# This file was originally created by Andrew Glass and Laurentiu Iancu # This file was originally created by Andrew Glass and Laurentiu Iancu
# for Unicode 6.3. # for Unicode 6.3.
@ -147,6 +147,14 @@
2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET 2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET
2E28; 2E29; o # LEFT DOUBLE PARENTHESIS 2E28; 2E29; o # LEFT DOUBLE PARENTHESIS
2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS 2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS
2E55; 2E56; o # LEFT SQUARE BRACKET WITH STROKE
2E56; 2E55; c # RIGHT SQUARE BRACKET WITH STROKE
2E57; 2E58; o # LEFT SQUARE BRACKET WITH DOUBLE STROKE
2E58; 2E57; c # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
2E59; 2E5A; o # TOP HALF LEFT PARENTHESIS
2E5A; 2E59; c # TOP HALF RIGHT PARENTHESIS
2E5B; 2E5C; o # BOTTOM HALF LEFT PARENTHESIS
2E5C; 2E5B; c # BOTTOM HALF RIGHT PARENTHESIS
3008; 3009; o # LEFT ANGLE BRACKET 3008; 3009; o # LEFT ANGLE BRACKET
3009; 3008; c # RIGHT ANGLE BRACKET 3009; 3008; c # RIGHT ANGLE BRACKET
300A; 300B; o # LEFT DOUBLE ANGLE BRACKET 300A; 300B; o # LEFT DOUBLE ANGLE BRACKET

View file

@ -1,10 +1,10 @@
# BidiMirroring-10.0.0.txt # BidiMirroring-15.0.0.txt
# Date: 2017-04-12, 17:30:00 GMT [KW, LI] # Date: 2022-05-03, 18:47:00 GMT [KW, RP]
# © 2017 Unicode®, Inc. # © 2022 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html # For terms of use, see https://www.unicode.org/terms_of_use.html
# #
# Unicode Character Database # Unicode Character Database
# For documentation, see http://www.unicode.org/reports/tr44/ # For documentation, see https://www.unicode.org/reports/tr44/
# #
# Bidi_Mirroring_Glyph Property # Bidi_Mirroring_Glyph Property
# #
@ -15,7 +15,7 @@
# value, for which there is another Unicode character that typically has a glyph # value, for which there is another Unicode character that typically has a glyph
# that is the mirror image of the original character's glyph. # that is the mirror image of the original character's glyph.
# #
# The repertoire covered by the file is Unicode 10.0.0. # The repertoire covered by the file is Unicode 15.0.0.
# #
# The file contains a list of lines with mappings from one code point # The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring. # to another one for character-based mirroring.
@ -40,11 +40,30 @@
# for character-based mirroring. # for character-based mirroring.
# #
# For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm, # For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm,
# at http://www.unicode.org/unicode/reports/tr9/ # at https://www.unicode.org/reports/tr9/
# #
# This file was originally created by Markus Scherer. # This file was originally created by Markus Scherer.
# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler, # Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler,
# and for subsequent versions by Ken Whistler and Laurentiu Iancu. # and for subsequent versions by Ken Whistler, Laurentiu Iancu, and Roozbeh Pournader.
#
# Historical and Compatibility Information:
#
# The OpenType Mirroring Pairs List (OMPL) is frozen to match the
# Unicode 5.1 version of the Bidi_Mirroring_Glyph property (2008).
# See https://www.microsoft.com/typography/otspec/ompl.txt
#
# The Unicode 6.1 version of the Bidi_Mirroring_Glyph property (2011)
# added one mirroring pair: 27CB <--> 27CD.
#
# The Unicode 11.0 version of the Bidi_Mirroring_Glyph property (2018)
# underwent a substantial revision, to formally recognize all of the
# exact mirroring pairs and "BEST FIT" mirroring pairs that had been
# added after the freezing of the OMPL list. As a result, starting
# with Unicode 11.0, the bmg mapping values more accurately reflect
# the current status of glyphs for Bidi_Mirrored characters in
# the Unicode Standard, but this listing now extends significantly
# beyond the frozen OMPL list. Implementers should be aware of this
# intentional distinction.
# #
# ############################################################ # ############################################################
# #
@ -77,15 +96,22 @@
208D; 208E # SUBSCRIPT LEFT PARENTHESIS 208D; 208E # SUBSCRIPT LEFT PARENTHESIS
208E; 208D # SUBSCRIPT RIGHT PARENTHESIS 208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
2208; 220B # ELEMENT OF 2208; 220B # ELEMENT OF
2209; 220C # NOT AN ELEMENT OF 2209; 220C # [BEST FIT] NOT AN ELEMENT OF
220A; 220D # SMALL ELEMENT OF 220A; 220D # SMALL ELEMENT OF
220B; 2208 # CONTAINS AS MEMBER 220B; 2208 # CONTAINS AS MEMBER
220C; 2209 # DOES NOT CONTAIN AS MEMBER 220C; 2209 # [BEST FIT] DOES NOT CONTAIN AS MEMBER
220D; 220A # SMALL CONTAINS AS MEMBER 220D; 220A # SMALL CONTAINS AS MEMBER
2215; 29F5 # DIVISION SLASH 2215; 29F5 # DIVISION SLASH
221F; 2BFE # RIGHT ANGLE
2220; 29A3 # ANGLE
2221; 299B # MEASURED ANGLE
2222; 29A0 # SPHERICAL ANGLE
2224; 2AEE # DOES NOT DIVIDE
223C; 223D # TILDE OPERATOR 223C; 223D # TILDE OPERATOR
223D; 223C # REVERSED TILDE 223D; 223C # REVERSED TILDE
2243; 22CD # ASYMPTOTICALLY EQUAL TO 2243; 22CD # ASYMPTOTICALLY EQUAL TO
2245; 224C # APPROXIMATELY EQUAL TO
224C; 2245 # ALL EQUAL TO
2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF 2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO 2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO
2254; 2255 # COLON EQUALS 2254; 2255 # COLON EQUALS
@ -147,6 +173,7 @@
22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO 22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
22B6; 22B7 # ORIGINAL OF 22B6; 22B7 # ORIGINAL OF
22B7; 22B6 # IMAGE OF 22B7; 22B6 # IMAGE OF
22B8; 27DC # MULTIMAP
22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT 22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT 22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
22CB; 22CC # LEFT SEMIDIRECT PRODUCT 22CB; 22CC # LEFT SEMIDIRECT PRODUCT
@ -220,6 +247,7 @@
27CD; 27CB # MATHEMATICAL FALLING DIAGONAL 27CD; 27CB # MATHEMATICAL FALLING DIAGONAL
27D5; 27D6 # LEFT OUTER JOIN 27D5; 27D6 # LEFT OUTER JOIN
27D6; 27D5 # RIGHT OUTER JOIN 27D6; 27D5 # RIGHT OUTER JOIN
27DC; 22B8 # LEFT MULTIMAP
27DD; 27DE # LONG RIGHT TACK 27DD; 27DE # LONG RIGHT TACK
27DE; 27DD # LONG LEFT TACK 27DE; 27DD # LONG LEFT TACK
27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK 27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
@ -258,6 +286,19 @@
2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET 2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET
2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET 2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET
2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET 2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET
299B; 2221 # MEASURED ANGLE OPENING LEFT
29A0; 2222 # SPHERICAL ANGLE OPENING LEFT
29A3; 2220 # REVERSED ANGLE
29A4; 29A5 # ANGLE WITH UNDERBAR
29A5; 29A4 # REVERSED ANGLE WITH UNDERBAR
29A8; 29A9 # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
29A9; 29A8 # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
29AA; 29AB # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
29AB; 29AA # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
29AC; 29AD # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
29AD; 29AC # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
29AE; 29AF # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
29AF; 29AE # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
29B8; 2298 # CIRCLED REVERSE SOLIDUS 29B8; 2298 # CIRCLED REVERSE SOLIDUS
29C0; 29C1 # CIRCLED LESS-THAN 29C0; 29C1 # CIRCLED LESS-THAN
29C1; 29C0 # CIRCLED GREATER-THAN 29C1; 29C0 # CIRCLED GREATER-THAN
@ -273,6 +314,8 @@
29D9; 29D8 # RIGHT WIGGLY FENCE 29D9; 29D8 # RIGHT WIGGLY FENCE
29DA; 29DB # LEFT DOUBLE WIGGLY FENCE 29DA; 29DB # LEFT DOUBLE WIGGLY FENCE
29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE 29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE
29E8; 29E9 # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
29E9; 29E8 # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
29F5; 2215 # REVERSE SOLIDUS OPERATOR 29F5; 2215 # REVERSE SOLIDUS OPERATOR
29F8; 29F9 # BIG SOLIDUS 29F8; 29F9 # BIG SOLIDUS
29F9; 29F8 # BIG REVERSE SOLIDUS 29F9; 29F8 # BIG REVERSE SOLIDUS
@ -290,6 +333,8 @@
2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION 2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION
2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE 2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE
2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE 2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE
2A7B; 2A7C # [BEST FIT] LESS-THAN WITH QUESTION MARK ABOVE
2A7C; 2A7B # [BEST FIT] GREATER-THAN WITH QUESTION MARK ABOVE
2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO 2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO
2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO 2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO
2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE 2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
@ -298,8 +343,18 @@
2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE 2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT 2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT 2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
2A85; 2A86 # [BEST FIT] LESS-THAN OR APPROXIMATE
2A86; 2A85 # [BEST FIT] GREATER-THAN OR APPROXIMATE
2A87; 2A88 # [BEST FIT] LESS-THAN AND SINGLE-LINE NOT EQUAL TO
2A88; 2A87 # [BEST FIT] GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
2A89; 2A8A # [BEST FIT] LESS-THAN AND NOT APPROXIMATE
2A8A; 2A89 # [BEST FIT] GREATER-THAN AND NOT APPROXIMATE
2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN 2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN 2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
2A8D; 2A8E # [BEST FIT] LESS-THAN ABOVE SIMILAR OR EQUAL
2A8E; 2A8D # [BEST FIT] GREATER-THAN ABOVE SIMILAR OR EQUAL
2A8F; 2A90 # [BEST FIT] LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
2A90; 2A8F # [BEST FIT] GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL 2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL 2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL 2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
@ -312,6 +367,10 @@
2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN 2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN
2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN 2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN 2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
2A9D; 2A9E # [BEST FIT] SIMILAR OR LESS-THAN
2A9E; 2A9D # [BEST FIT] SIMILAR OR GREATER-THAN
2A9F; 2AA0 # [BEST FIT] SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
2AA0; 2A9F # [BEST FIT] SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
2AA1; 2AA2 # DOUBLE NESTED LESS-THAN 2AA1; 2AA2 # DOUBLE NESTED LESS-THAN
2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN 2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN
2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE 2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE
@ -324,8 +383,16 @@
2AAD; 2AAC # LARGER THAN OR EQUAL TO 2AAD; 2AAC # LARGER THAN OR EQUAL TO
2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN 2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN 2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
2AB1; 2AB2 # [BEST FIT] PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
2AB2; 2AB1 # [BEST FIT] SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN 2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN
2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN 2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN
2AB5; 2AB6 # [BEST FIT] PRECEDES ABOVE NOT EQUAL TO
2AB6; 2AB5 # [BEST FIT] SUCCEEDS ABOVE NOT EQUAL TO
2AB7; 2AB8 # [BEST FIT] PRECEDES ABOVE ALMOST EQUAL TO
2AB8; 2AB7 # [BEST FIT] SUCCEEDS ABOVE ALMOST EQUAL TO
2AB9; 2ABA # [BEST FIT] PRECEDES ABOVE NOT ALMOST EQUAL TO
2ABA; 2AB9 # [BEST FIT] SUCCEEDS ABOVE NOT ALMOST EQUAL TO
2ABB; 2ABC # DOUBLE PRECEDES 2ABB; 2ABC # DOUBLE PRECEDES
2ABC; 2ABB # DOUBLE SUCCEEDS 2ABC; 2ABB # DOUBLE SUCCEEDS
2ABD; 2ABE # SUBSET WITH DOT 2ABD; 2ABE # SUBSET WITH DOT
@ -338,6 +405,12 @@
2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE 2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN 2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN
2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN 2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN
2AC7; 2AC8 # [BEST FIT] SUBSET OF ABOVE TILDE OPERATOR
2AC8; 2AC7 # [BEST FIT] SUPERSET OF ABOVE TILDE OPERATOR
2AC9; 2ACA # [BEST FIT] SUBSET OF ABOVE ALMOST EQUAL TO
2ACA; 2AC9 # [BEST FIT] SUPERSET OF ABOVE ALMOST EQUAL TO
2ACB; 2ACC # [BEST FIT] SUBSET OF ABOVE NOT EQUAL TO
2ACC; 2ACB # [BEST FIT] SUPERSET OF ABOVE NOT EQUAL TO
2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR 2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR
2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR 2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR
2ACF; 2AD0 # CLOSED SUBSET 2ACF; 2AD0 # CLOSED SUBSET
@ -354,10 +427,12 @@
2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE 2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
2AEC; 2AED # DOUBLE STROKE NOT SIGN 2AEC; 2AED # DOUBLE STROKE NOT SIGN
2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN 2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN
2AEE; 2224 # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
2AF7; 2AF8 # TRIPLE NESTED LESS-THAN 2AF7; 2AF8 # TRIPLE NESTED LESS-THAN
2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN 2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN
2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO 2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO 2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
2BFE; 221F # REVERSED RIGHT ANGLE
2E02; 2E03 # LEFT SUBSTITUTION BRACKET 2E02; 2E03 # LEFT SUBSTITUTION BRACKET
2E03; 2E02 # RIGHT SUBSTITUTION BRACKET 2E03; 2E02 # RIGHT SUBSTITUTION BRACKET
2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET 2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET
@ -378,6 +453,14 @@
2E27; 2E26 # RIGHT SIDEWAYS U BRACKET 2E27; 2E26 # RIGHT SIDEWAYS U BRACKET
2E28; 2E29 # LEFT DOUBLE PARENTHESIS 2E28; 2E29 # LEFT DOUBLE PARENTHESIS
2E29; 2E28 # RIGHT DOUBLE PARENTHESIS 2E29; 2E28 # RIGHT DOUBLE PARENTHESIS
2E55; 2E56 # LEFT SQUARE BRACKET WITH STROKE
2E56; 2E55 # RIGHT SQUARE BRACKET WITH STROKE
2E57; 2E58 # LEFT SQUARE BRACKET WITH DOUBLE STROKE
2E58; 2E57 # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
2E59; 2E5A # TOP HALF LEFT PARENTHESIS
2E5A; 2E59 # TOP HALF RIGHT PARENTHESIS
2E5B; 2E5C # BOTTOM HALF LEFT PARENTHESIS
2E5C; 2E5B # BOTTOM HALF RIGHT PARENTHESIS
3008; 3009 # LEFT ANGLE BRACKET 3008; 3009 # LEFT ANGLE BRACKET
3009; 3008 # RIGHT ANGLE BRACKET 3009; 3008 # RIGHT ANGLE BRACKET
300A; 300B # LEFT DOUBLE ANGLE BRACKET 300A; 300B # LEFT DOUBLE ANGLE BRACKET
@ -432,11 +515,6 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 221B; CUBE ROOT # 221B; CUBE ROOT
# 221C; FOURTH ROOT # 221C; FOURTH ROOT
# 221D; PROPORTIONAL TO # 221D; PROPORTIONAL TO
# 221F; RIGHT ANGLE
# 2220; ANGLE
# 2221; MEASURED ANGLE
# 2222; SPHERICAL ANGLE
# 2224; DOES NOT DIVIDE
# 2226; NOT PARALLEL TO # 2226; NOT PARALLEL TO
# 222B; INTEGRAL # 222B; INTEGRAL
# 222C; DOUBLE INTEGRAL # 222C; DOUBLE INTEGRAL
@ -455,14 +533,12 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 2241; NOT TILDE # 2241; NOT TILDE
# 2242; MINUS TILDE # 2242; MINUS TILDE
# 2244; NOT ASYMPTOTICALLY EQUAL TO # 2244; NOT ASYMPTOTICALLY EQUAL TO
# 2245; APPROXIMATELY EQUAL TO
# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO # 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO # 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
# 2248; ALMOST EQUAL TO # 2248; ALMOST EQUAL TO
# 2249; NOT ALMOST EQUAL TO # 2249; NOT ALMOST EQUAL TO
# 224A; ALMOST EQUAL OR EQUAL TO # 224A; ALMOST EQUAL OR EQUAL TO
# 224B; TRIPLE TILDE # 224B; TRIPLE TILDE
# 224C; ALL EQUAL TO
# 225F; QUESTIONED EQUAL TO # 225F; QUESTIONED EQUAL TO
# 2260; NOT EQUAL TO # 2260; NOT EQUAL TO
# 2262; NOT IDENTICAL TO # 2262; NOT IDENTICAL TO
@ -473,7 +549,6 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 22AD; NOT TRUE # 22AD; NOT TRUE
# 22AE; DOES NOT FORCE # 22AE; DOES NOT FORCE
# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE # 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
# 22B8; MULTIMAP
# 22BE; RIGHT ANGLE WITH ARC # 22BE; RIGHT ANGLE WITH ARC
# 22BF; RIGHT TRIANGLE # 22BF; RIGHT TRIANGLE
# 22F5; ELEMENT OF WITH DOT ABOVE # 22F5; ELEMENT OF WITH DOT ABOVE
@ -486,28 +561,13 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 27CC; LONG DIVISION # 27CC; LONG DIVISION
# 27D3; LOWER RIGHT CORNER WITH DOT # 27D3; LOWER RIGHT CORNER WITH DOT
# 27D4; UPPER LEFT CORNER WITH DOT # 27D4; UPPER LEFT CORNER WITH DOT
# 27DC; LEFT MULTIMAP
# 299B; MEASURED ANGLE OPENING LEFT
# 299C; RIGHT ANGLE VARIANT WITH SQUARE # 299C; RIGHT ANGLE VARIANT WITH SQUARE
# 299D; MEASURED RIGHT ANGLE WITH DOT # 299D; MEASURED RIGHT ANGLE WITH DOT
# 299E; ANGLE WITH S INSIDE # 299E; ANGLE WITH S INSIDE
# 299F; ACUTE ANGLE # 299F; ACUTE ANGLE
# 29A0; SPHERICAL ANGLE OPENING LEFT
# 29A1; SPHERICAL ANGLE OPENING UP
# 29A2; TURNED ANGLE # 29A2; TURNED ANGLE
# 29A3; REVERSED ANGLE
# 29A4; ANGLE WITH UNDERBAR
# 29A5; REVERSED ANGLE WITH UNDERBAR
# 29A6; OBLIQUE ANGLE OPENING UP # 29A6; OBLIQUE ANGLE OPENING UP
# 29A7; OBLIQUE ANGLE OPENING DOWN # 29A7; OBLIQUE ANGLE OPENING DOWN
# 29A8; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
# 29A9; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
# 29AA; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
# 29AB; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
# 29AC; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
# 29AD; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
# 29AE; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
# 29AF; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT # 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT
# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT # 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
# 29C9; TWO JOINED SQUARES # 29C9; TWO JOINED SQUARES
@ -517,8 +577,6 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 29E3; EQUALS SIGN AND SLANTED PARALLEL # 29E3; EQUALS SIGN AND SLANTED PARALLEL
# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE # 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
# 29E5; IDENTICAL TO AND SLANTED PARALLEL # 29E5; IDENTICAL TO AND SLANTED PARALLEL
# 29E8; DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
# 29E9; DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
# 29F4; RULE-DELAYED # 29F4; RULE-DELAYED
# 29F6; SOLIDUS WITH OVERBAR # 29F6; SOLIDUS WITH OVERBAR
# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE # 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE
@ -559,41 +617,10 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 2A70; APPROXIMATELY EQUAL OR EQUAL TO # 2A70; APPROXIMATELY EQUAL OR EQUAL TO
# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR # 2A73; EQUALS SIGN ABOVE TILDE OPERATOR
# 2A74; DOUBLE COLON EQUAL # 2A74; DOUBLE COLON EQUAL
# 2A7B; LESS-THAN WITH QUESTION MARK ABOVE
# 2A7C; GREATER-THAN WITH QUESTION MARK ABOVE
# 2A85; LESS-THAN OR APPROXIMATE
# 2A86; GREATER-THAN OR APPROXIMATE
# 2A87; LESS-THAN AND SINGLE-LINE NOT EQUAL TO
# 2A88; GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
# 2A89; LESS-THAN AND NOT APPROXIMATE
# 2A8A; GREATER-THAN AND NOT APPROXIMATE
# 2A8D; LESS-THAN ABOVE SIMILAR OR EQUAL
# 2A8E; GREATER-THAN ABOVE SIMILAR OR EQUAL
# 2A8F; LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
# 2A90; GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
# 2A9D; SIMILAR OR LESS-THAN
# 2A9E; SIMILAR OR GREATER-THAN
# 2A9F; SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
# 2AA0; SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR # 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR
# 2AB1; PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
# 2AB2; SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
# 2AB5; PRECEDES ABOVE NOT EQUAL TO
# 2AB6; SUCCEEDS ABOVE NOT EQUAL TO
# 2AB7; PRECEDES ABOVE ALMOST EQUAL TO
# 2AB8; SUCCEEDS ABOVE ALMOST EQUAL TO
# 2AB9; PRECEDES ABOVE NOT ALMOST EQUAL TO
# 2ABA; SUCCEEDS ABOVE NOT ALMOST EQUAL TO
# 2AC7; SUBSET OF ABOVE TILDE OPERATOR
# 2AC8; SUPERSET OF ABOVE TILDE OPERATOR
# 2AC9; SUBSET OF ABOVE ALMOST EQUAL TO
# 2ACA; SUPERSET OF ABOVE ALMOST EQUAL TO
# 2ACB; SUBSET OF ABOVE NOT EQUAL TO
# 2ACC; SUPERSET OF ABOVE NOT EQUAL TO
# 2ADC; FORKING # 2ADC; FORKING
# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE # 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE
# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL # 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
# 2AEE; DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
# 2AF3; PARALLEL WITH TILDE OPERATOR # 2AF3; PARALLEL WITH TILDE OPERATOR
# 2AFB; TRIPLE SOLIDUS BINARY RELATION # 2AFB; TRIPLE SOLIDUS BINARY RELATION
# 2AFD; DOUBLE SOLIDUS OPERATOR # 2AFD; DOUBLE SOLIDUS OPERATOR

View file

@ -1,10 +1,10 @@
# Blocks-10.0.0.txt # Blocks-15.0.0.txt
# Date: 2017-04-12, 17:30:00 GMT [KW] # Date: 2022-01-28, 20:58:00 GMT [KW]
# © 2017 Unicode®, Inc. # © 2022 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html # For terms of use, see https://www.unicode.org/terms_of_use.html
# #
# Unicode Character Database # Unicode Character Database
# For documentation, see http://www.unicode.org/reports/tr44/ # For documentation, see https://www.unicode.org/reports/tr44/
# #
# Format: # Format:
# Start Code..End Code; Block Name # Start Code..End Code; Block Name
@ -15,7 +15,7 @@
# and underbars are ignored. # and underbars are ignored.
# For example, "Latin Extended-A" and "latin extended a" are equivalent. # For example, "Latin Extended-A" and "latin extended a" are equivalent.
# For more information on the comparison of property values, # For more information on the comparison of property values,
# see UAX #44: http://www.unicode.org/reports/tr44/ # see UAX #44: https://www.unicode.org/reports/tr44/
# #
# All block ranges start with a value where (cp MOD 16) = 0, # All block ranges start with a value where (cp MOD 16) = 0,
# and end with a value where (cp MOD 16) = 15. In other words, # and end with a value where (cp MOD 16) = 15. In other words,
@ -52,6 +52,7 @@
0800..083F; Samaritan 0800..083F; Samaritan
0840..085F; Mandaic 0840..085F; Mandaic
0860..086F; Syriac Supplement 0860..086F; Syriac Supplement
0870..089F; Arabic Extended-B
08A0..08FF; Arabic Extended-A 08A0..08FF; Arabic Extended-A
0900..097F; Devanagari 0900..097F; Devanagari
0980..09FF; Bengali 0980..09FF; Bengali
@ -95,6 +96,7 @@
1C00..1C4F; Lepcha 1C00..1C4F; Lepcha
1C50..1C7F; Ol Chiki 1C50..1C7F; Ol Chiki
1C80..1C8F; Cyrillic Extended-C 1C80..1C8F; Cyrillic Extended-C
1C90..1CBF; Georgian Extended
1CC0..1CCF; Sundanese Supplement 1CC0..1CCF; Sundanese Supplement
1CD0..1CFF; Vedic Extensions 1CD0..1CFF; Vedic Extensions
1D00..1D7F; Phonetic Extensions 1D00..1D7F; Phonetic Extensions
@ -214,7 +216,9 @@ FFF0..FFFF; Specials
104B0..104FF; Osage 104B0..104FF; Osage
10500..1052F; Elbasan 10500..1052F; Elbasan
10530..1056F; Caucasian Albanian 10530..1056F; Caucasian Albanian
10570..105BF; Vithkuqi
10600..1077F; Linear A 10600..1077F; Linear A
10780..107BF; Latin Extended-F
10800..1083F; Cypriot Syllabary 10800..1083F; Cypriot Syllabary
10840..1085F; Imperial Aramaic 10840..1085F; Imperial Aramaic
10860..1087F; Palmyrene 10860..1087F; Palmyrene
@ -234,7 +238,15 @@ FFF0..FFFF; Specials
10B80..10BAF; Psalter Pahlavi 10B80..10BAF; Psalter Pahlavi
10C00..10C4F; Old Turkic 10C00..10C4F; Old Turkic
10C80..10CFF; Old Hungarian 10C80..10CFF; Old Hungarian
10D00..10D3F; Hanifi Rohingya
10E60..10E7F; Rumi Numeral Symbols 10E60..10E7F; Rumi Numeral Symbols
10E80..10EBF; Yezidi
10EC0..10EFF; Arabic Extended-C
10F00..10F2F; Old Sogdian
10F30..10F6F; Sogdian
10F70..10FAF; Old Uyghur
10FB0..10FDF; Chorasmian
10FE0..10FFF; Elymaic
11000..1107F; Brahmi 11000..1107F; Brahmi
11080..110CF; Kaithi 11080..110CF; Kaithi
110D0..110FF; Sora Sompeng 110D0..110FF; Sora Sompeng
@ -252,42 +264,72 @@ FFF0..FFFF; Specials
11600..1165F; Modi 11600..1165F; Modi
11660..1167F; Mongolian Supplement 11660..1167F; Mongolian Supplement
11680..116CF; Takri 11680..116CF; Takri
11700..1173F; Ahom 11700..1174F; Ahom
11800..1184F; Dogra
118A0..118FF; Warang Citi 118A0..118FF; Warang Citi
11900..1195F; Dives Akuru
119A0..119FF; Nandinagari
11A00..11A4F; Zanabazar Square 11A00..11A4F; Zanabazar Square
11A50..11AAF; Soyombo 11A50..11AAF; Soyombo
11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
11AC0..11AFF; Pau Cin Hau 11AC0..11AFF; Pau Cin Hau
11B00..11B5F; Devanagari Extended-A
11C00..11C6F; Bhaiksuki 11C00..11C6F; Bhaiksuki
11C70..11CBF; Marchen 11C70..11CBF; Marchen
11D00..11D5F; Masaram Gondi 11D00..11D5F; Masaram Gondi
11D60..11DAF; Gunjala Gondi
11EE0..11EFF; Makasar
11F00..11F5F; Kawi
11FB0..11FBF; Lisu Supplement
11FC0..11FFF; Tamil Supplement
12000..123FF; Cuneiform 12000..123FF; Cuneiform
12400..1247F; Cuneiform Numbers and Punctuation 12400..1247F; Cuneiform Numbers and Punctuation
12480..1254F; Early Dynastic Cuneiform 12480..1254F; Early Dynastic Cuneiform
12F90..12FFF; Cypro-Minoan
13000..1342F; Egyptian Hieroglyphs 13000..1342F; Egyptian Hieroglyphs
13430..1345F; Egyptian Hieroglyph Format Controls
14400..1467F; Anatolian Hieroglyphs 14400..1467F; Anatolian Hieroglyphs
16800..16A3F; Bamum Supplement 16800..16A3F; Bamum Supplement
16A40..16A6F; Mro 16A40..16A6F; Mro
16A70..16ACF; Tangsa
16AD0..16AFF; Bassa Vah 16AD0..16AFF; Bassa Vah
16B00..16B8F; Pahawh Hmong 16B00..16B8F; Pahawh Hmong
16E40..16E9F; Medefaidrin
16F00..16F9F; Miao 16F00..16F9F; Miao
16FE0..16FFF; Ideographic Symbols and Punctuation 16FE0..16FFF; Ideographic Symbols and Punctuation
17000..187FF; Tangut 17000..187FF; Tangut
18800..18AFF; Tangut Components 18800..18AFF; Tangut Components
18B00..18CFF; Khitan Small Script
18D00..18D7F; Tangut Supplement
1AFF0..1AFFF; Kana Extended-B
1B000..1B0FF; Kana Supplement 1B000..1B0FF; Kana Supplement
1B100..1B12F; Kana Extended-A 1B100..1B12F; Kana Extended-A
1B130..1B16F; Small Kana Extension
1B170..1B2FF; Nushu 1B170..1B2FF; Nushu
1BC00..1BC9F; Duployan 1BC00..1BC9F; Duployan
1BCA0..1BCAF; Shorthand Format Controls 1BCA0..1BCAF; Shorthand Format Controls
1CF00..1CFCF; Znamenny Musical Notation
1D000..1D0FF; Byzantine Musical Symbols 1D000..1D0FF; Byzantine Musical Symbols
1D100..1D1FF; Musical Symbols 1D100..1D1FF; Musical Symbols
1D200..1D24F; Ancient Greek Musical Notation 1D200..1D24F; Ancient Greek Musical Notation
1D2C0..1D2DF; Kaktovik Numerals
1D2E0..1D2FF; Mayan Numerals
1D300..1D35F; Tai Xuan Jing Symbols 1D300..1D35F; Tai Xuan Jing Symbols
1D360..1D37F; Counting Rod Numerals 1D360..1D37F; Counting Rod Numerals
1D400..1D7FF; Mathematical Alphanumeric Symbols 1D400..1D7FF; Mathematical Alphanumeric Symbols
1D800..1DAAF; Sutton SignWriting 1D800..1DAAF; Sutton SignWriting
1DF00..1DFFF; Latin Extended-G
1E000..1E02F; Glagolitic Supplement 1E000..1E02F; Glagolitic Supplement
1E030..1E08F; Cyrillic Extended-D
1E100..1E14F; Nyiakeng Puachue Hmong
1E290..1E2BF; Toto
1E2C0..1E2FF; Wancho
1E4D0..1E4FF; Nag Mundari
1E7E0..1E7FF; Ethiopic Extended-B
1E800..1E8DF; Mende Kikakui 1E800..1E8DF; Mende Kikakui
1E900..1E95F; Adlam 1E900..1E95F; Adlam
1EC70..1ECBF; Indic Siyaq Numbers
1ED00..1ED4F; Ottoman Siyaq Numbers
1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
1F000..1F02F; Mahjong Tiles 1F000..1F02F; Mahjong Tiles
1F030..1F09F; Domino Tiles 1F030..1F09F; Domino Tiles
@ -302,12 +344,17 @@ FFF0..FFFF; Specials
1F780..1F7FF; Geometric Shapes Extended 1F780..1F7FF; Geometric Shapes Extended
1F800..1F8FF; Supplemental Arrows-C 1F800..1F8FF; Supplemental Arrows-C
1F900..1F9FF; Supplemental Symbols and Pictographs 1F900..1F9FF; Supplemental Symbols and Pictographs
1FA00..1FA6F; Chess Symbols
1FA70..1FAFF; Symbols and Pictographs Extended-A
1FB00..1FBFF; Symbols for Legacy Computing
20000..2A6DF; CJK Unified Ideographs Extension B 20000..2A6DF; CJK Unified Ideographs Extension B
2A700..2B73F; CJK Unified Ideographs Extension C 2A700..2B73F; CJK Unified Ideographs Extension C
2B740..2B81F; CJK Unified Ideographs Extension D 2B740..2B81F; CJK Unified Ideographs Extension D
2B820..2CEAF; CJK Unified Ideographs Extension E 2B820..2CEAF; CJK Unified Ideographs Extension E
2CEB0..2EBEF; CJK Unified Ideographs Extension F 2CEB0..2EBEF; CJK Unified Ideographs Extension F
2F800..2FA1F; CJK Compatibility Ideographs Supplement 2F800..2FA1F; CJK Compatibility Ideographs Supplement
30000..3134F; CJK Unified Ideographs Extension G
31350..323AF; CJK Unified Ideographs Extension H
E0000..E007F; Tags E0000..E007F; Tags
E0100..E01EF; Variation Selectors Supplement E0100..E01EF; Variation Selectors Supplement
F0000..FFFFF; Supplementary Private Use Area-A F0000..FFFFF; Supplementary Private Use Area-A

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
### @configure_input@ ### @configure_input@
# Copyright (C) 2012-2017 Free Software Foundation, Inc. # Copyright (C) 2012-2022 Free Software Foundation, Inc.
# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
# National Institute of Advanced Industrial Science and Technology (AIST) # National Institute of Advanced Industrial Science and Technology (AIST)
@ -29,6 +29,9 @@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
# Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
EMACS = ${top_builddir}/src/emacs EMACS = ${top_builddir}/src/emacs
unidir = ${top_srcdir}/lisp/international unidir = ${top_srcdir}/lisp/international
emacs = "${EMACS}" -batch --no-site-file --no-site-lisp emacs = "${EMACS}" -batch --no-site-file --no-site-lisp
@ -36,28 +39,14 @@ emacs = "${EMACS}" -batch --no-site-file --no-site-lisp
lparen = ( lparen = (
unifiles = $(addprefix ${unidir}/,$(sort $(shell sed -n 's/^[ \t][ \t]*${lparen}"\(uni-[^"]*\)"$$/\1/p' ${srcdir}/unidata-gen.el))) unifiles = $(addprefix ${unidir}/,$(sort $(shell sed -n 's/^[ \t][ \t]*${lparen}"\(uni-[^"]*\)"$$/\1/p' ${srcdir}/unidata-gen.el)))
# 'make' verbosity. -include ${top_builddir}/src/verbose.mk
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AM_V_ELC = $(am__v_ELC_@AM_V@)
am__v_ELC_ = $(am__v_ELC_@AM_DEFAULT_V@)
am__v_ELC_0 = @echo " ELC " $@;
am__v_ELC_1 =
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
.PHONY: all .PHONY: all
all: ${top_srcdir}/src/macuvs.h ${unifiles} ${unidir}/charscript.el \ all: ${top_srcdir}/src/macuvs.h ${unifiles} ${unidir}/charscript.el \
${unidir}/charprop.el ${unidir}/charprop.el ${unidir}/emoji-zwj.el ${unidir}/emoji-labels.el \
${unidir}/uni-scripts.el ${unidir}/uni-confusable.el \
${unidir}/idna-mapping.el
## Specify .elc as an order-only prereq so as to not needlessly rebuild ## Specify .elc as an order-only prereq so as to not needlessly rebuild
## target just because the .elc is missing. ## target just because the .elc is missing.
@ -79,43 +68,78 @@ unidata.txt: ${srcdir}/UnicodeData.txt
## pretend that it does since other Makefiles assume that if charprop ## pretend that it does since other Makefiles assume that if charprop
## is up-to-date, the unifiles are too. ## is up-to-date, the unifiles are too.
${unidir}/charprop.el: ${unifiles} ${srcdir}/unidata-gen.el | ${srcdir}/unidata-gen.elc ${unidir}/charprop.el: ${unifiles} ${srcdir}/unidata-gen.el | ${srcdir}/unidata-gen.elc
$(AM_V_at)[ ! -f $@ ] || chmod +w $@ $(AM_V_GEN)[ ! -f $@ ] || chmod +w $@
$(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \ $(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
-f unidata-gen-charprop $@ -f unidata-gen-charprop $@
${unifiles}: ${srcdir}/unidata-gen.el \ ${unifiles}: ${srcdir}/unidata-gen.el \
${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \ ${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \
${srcdir}/BidiBrackets.txt | \ ${srcdir}/BidiBrackets.txt | \
${srcdir}/unidata-gen.elc unidata.txt ${srcdir}/unidata-gen.elc unidata.txt
$(AM_V_at)[ ! -f $@ ] || chmod +w $@ $(AM_V_GEN)[ ! -f $@ ] || chmod +w $@
$(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \ $(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
-f unidata-gen-file $@ ${srcdir} -f unidata-gen-file $@ ${srcdir}
${unidir}/emoji-labels.el: ${unidir}/../international/emoji.el \
${srcdir}/emoji-test.txt
$(AM_V_GEN)${emacs} -l emoji.el -f emoji--generate-file $@
${unidir}/uni-scripts.el: ${srcdir}/unidata-gen.el \
${srcdir}/Scripts.txt \
${srcdir}/ScriptExtensions.txt \
${srcdir}/PropertyValueAliases.txt
$(AM_V_GEN)${emacs} -L ${srcdir} \
-l unidata-gen.el -f unidata-gen-scripts $@
${unidir}/uni-confusable.el: ${srcdir}/unidata-gen.el \
${srcdir}/confusables.txt
$(AM_V_GEN)${emacs} -L ${srcdir} \
-l unidata-gen.el -f unidata-gen-confusable $@
${unidir}/idna-mapping.el: ${srcdir}/unidata-gen.el \
${srcdir}/IdnaMappingTable.txt
$(AM_V_GEN)${emacs} -L ${srcdir} \
-l unidata-gen.el -f unidata-gen-idna-mapping $@
.PHONY: charscript.el .PHONY: charscript.el
charscript.el: ${unidir}/charscript.el charscript.el: ${unidir}/charscript.el
blocks = ${srcdir}/blocks.awk blocks = ${srcdir}/blocks.awk
${unidir}/charscript.el: ${srcdir}/Blocks.txt ${blocks} ${unidir}/charscript.el: ${blocks}
$(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@
${unidir}/charscript.el: ${srcdir}/Blocks.txt ${srcdir}/emoji-data.txt
$(AM_V_GEN)$(AWK) -f ${blocks} $^ > $@
.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean .PHONY: emoji-zwj.el
emoji-zwj.el: ${unidir}/emoji-zwj.el
zwj = ${srcdir}/emoji-zwj.awk
${unidir}/emoji-zwj.el: ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt ${zwj}
$(AM_V_GEN)$(AWK) -f ${zwj} $^ > $@
.PHONY: clean bootstrap-clean distclean maintainer-clean gen-clean
clean: clean:
rm -f ${srcdir}/*.elc unidata.txt rm -f ${srcdir}/*.elc unidata.txt
## IMO this should also run gen-clean.
bootstrap-clean: clean bootstrap-clean: clean
distclean: clean distclean: clean
rm -f Makefile rm -f Makefile
maintainer-clean: distclean ## macuvs.h is a generated file, but it's also checked in because
## macOS builds would need to do a headless bootstrap without it,
## Do not remove these files, even in a bootstrap, because they rarely ## which is currently awkward. To avoid changing checked-in files
## change and it slows down bootstrap (a tiny bit). ## from a make target, we don't delete it here.
## Cf leim/ja-dic (which is much slower). gen-clean:
extraclean: rm -f ${unidir}/charscript.el*
rm -f ${top_srcdir}/src/macuvs.h ${unidir}/charscript.el* rm -f ${unidir}/emoji-zwj.el*
rm -f ${unifiles} ${unidir}/charprop.el rm -f ${unifiles} ${unidir}/charprop.el
rm -f ${unidir}/emoji-labels.el ${unidir}/idna-mapping.el \
${unidir}/uni-confusable.el ${unidir}/uni-scripts.el
## ref: https://lists.gnu.org/r/emacs-devel/2013-11/msg01029.html
maintainer-clean: gen-clean distclean

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -7,28 +7,60 @@ The names, URLs, and dates for these files are as follows.
BidiBrackets.txt BidiBrackets.txt
http://www.unicode.org/Public/UNIDATA/BidiBrackets.txt http://www.unicode.org/Public/UNIDATA/BidiBrackets.txt
2017-04-20 2021-06-30
BidiMirroring.txt BidiMirroring.txt
http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt
2017-04-20 2021-08-08
IVD_Sequences.txt
http://www.unicode.org/ivd/
2016-08-15
UnicodeData.txt
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
2017-03-07
Blocks.txt Blocks.txt
http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
2017-04-20 2021-01-22
IVD_Sequences.txt
http://www.unicode.org/ivd/
2020-11-06
NormalizationTest.txt NormalizationTest.txt
http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
2017-03-08 2021-05-28
SpecialCasing.txt SpecialCasing.txt
http://unicode.org/Public/UNIDATA/SpecialCasing.txt http://unicode.org/Public/UNIDATA/SpecialCasing.txt
2017-04-20 2021-03-08
UnicodeData.txt
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
2021-07-06
emoji-data.txt
https://www.unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
2021-08-26
emoji-zwj-sequences.txt
https://www.unicode.org/Public/emoji/14.0/emoji-zwj-sequences.txt
2021-06-08
emoji-sequences.txt
https://www.unicode.org/Public/emoji/14.0/emoji-sequences.txt
2020-08-26
emoji-test.txt
https://unicode.org/Public/emoji/14.0/emoji-test.txt
2021-10-28
ScriptExtensions.txt
https://www.unicode.org/Public/UCD/latest/ucd/ScriptExtensions.txt
2022-01-17
Scripts.txt
https://www.unicode.org/Public/UCD/latest/ucd/Scripts.txt
2022-01-17
PropertyValueAliases.txt
https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt
2022-01-17
IdnaMappingTable.txt
https://www.unicode.org/Public/idna/latest/IdnaMappingTable.txt
2022-01-18

View file

@ -0,0 +1,628 @@
# ScriptExtensions-15.0.0.txt
# Date: 2022-02-02, 00:57:11 GMT
# © 2022 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see https://www.unicode.org/reports/tr44/
#
# The Script_Extensions property indicates which characters are commonly used
# with more than one script, but with a limited number of scripts.
# For each code point, there is one or more property values. Each such value is a Script property value.
# For more information, see:
# UAX #24, Unicode Script Property: https://www.unicode.org/reports/tr24/
# Especially the sections:
# https://www.unicode.org/reports/tr24/#Assignment_Script_Values
# https://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values
#
# Each Script_Extensions value in this file consists of a set
# of one or more abbreviated Script property values. The ordering of the
# values in that set is not material, but for stability in presentation
# it is given here as alphabetical.
#
# The Script_Extensions values are presented in sorted order in the file.
# They are sorted first by the number of Script property values in their sets,
# and then alphabetically by first differing Script property value.
#
# Following each distinct Script_Extensions value is the list of code
# points associated with that value, listed in code point order.
#
# All code points not explicitly listed for Script_Extensions
# have as their value the corresponding Script property value
#
# @missing: 0000..10FFFF; <script>
# ================================================
# Property: Script_Extensions
# ================================================
# Script_Extensions=Beng
1CF7 ; Beng # Mc VEDIC SIGN ATIKRAMA
# Total code points: 1
# ================================================
# Script_Extensions=Deva
1CD1 ; Deva # Mn VEDIC TONE SHARA
1CD4 ; Deva # Mn VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
1CDB ; Deva # Mn VEDIC TONE TRIPLE SVARITA
1CDE..1CDF ; Deva # Mn [2] VEDIC TONE TWO DOTS BELOW..VEDIC TONE THREE DOTS BELOW
1CE2..1CE8 ; Deva # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
1CEB..1CEC ; Deva # Lo [2] VEDIC SIGN ANUSVARA VAMAGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
1CEE..1CF1 ; Deva # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
# Total code points: 18
# ================================================
# Script_Extensions=Dupl
1BCA0..1BCA3 ; Dupl # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
# Total code points: 4
# ================================================
# Script_Extensions=Grek
0342 ; Grek # Mn COMBINING GREEK PERISPOMENI
0345 ; Grek # Mn COMBINING GREEK YPOGEGRAMMENI
1DC0..1DC1 ; Grek # Mn [2] COMBINING DOTTED GRAVE ACCENT..COMBINING DOTTED ACUTE ACCENT
# Total code points: 4
# ================================================
# Script_Extensions=Hani
3006 ; Hani # Lo IDEOGRAPHIC CLOSING MARK
303E..303F ; Hani # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
3190..3191 ; Hani # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; Hani # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; Hani # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
31C0..31E3 ; Hani # So [36] CJK STROKE T..CJK STROKE Q
3220..3229 ; Hani # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
322A..3247 ; Hani # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
3280..3289 ; Hani # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
328A..32B0 ; Hani # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32C0..32CB ; Hani # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
32FF ; Hani # So SQUARE ERA NAME REIWA
3358..3370 ; Hani # So [25] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
337B..337F ; Hani # So [5] SQUARE ERA NAME HEISEI..SQUARE CORPORATION
33E0..33FE ; Hani # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
1D360..1D371 ; Hani # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
1F250..1F251 ; Hani # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
# Total code points: 238
# ================================================
# Script_Extensions=Latn
0363..036F ; Latn # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X
# Total code points: 13
# ================================================
# Script_Extensions=Nand
1CFA ; Nand # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
# Total code points: 1
# ================================================
# Script_Extensions=Syrc
1DFA ; Syrc # Mn COMBINING DOT BELOW LEFT
# Total code points: 1
# ================================================
# Script_Extensions=Arab Copt
102E0 ; Arab Copt # Mn COPTIC EPACT THOUSANDS MARK
102E1..102FB ; Arab Copt # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
# Total code points: 28
# ================================================
# Script_Extensions=Arab Rohg
06D4 ; Arab Rohg # Po ARABIC FULL STOP
# Total code points: 1
# ================================================
# Script_Extensions=Arab Nkoo
FD3E ; Arab Nkoo # Pe ORNATE LEFT PARENTHESIS
FD3F ; Arab Nkoo # Ps ORNATE RIGHT PARENTHESIS
# Total code points: 2
# ================================================
# Script_Extensions=Arab Syrc
064B..0655 ; Arab Syrc # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
0670 ; Arab Syrc # Mn ARABIC LETTER SUPERSCRIPT ALEF
# Total code points: 12
# ================================================
# Script_Extensions=Arab Thaa
FDF2 ; Arab Thaa # Lo ARABIC LIGATURE ALLAH ISOLATED FORM
FDFD ; Arab Thaa # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
# Total code points: 2
# ================================================
# Script_Extensions=Beng Deva
1CD5..1CD6 ; Beng Deva # Mn [2] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
1CD8 ; Beng Deva # Mn VEDIC TONE CANDRA BELOW
1CE1 ; Beng Deva # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
1CEA ; Beng Deva # Lo VEDIC SIGN ANUSVARA BAHIRGOMUKHA
1CED ; Beng Deva # Mn VEDIC SIGN TIRYAK
1CF5..1CF6 ; Beng Deva # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
A8F1 ; Beng Deva # Mn COMBINING DEVANAGARI SIGN AVAGRAHA
# Total code points: 9
# ================================================
# Script_Extensions=Bopo Hani
302A..302D ; Bopo Hani # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
# Total code points: 4
# ================================================
# Script_Extensions=Bugi Java
A9CF ; Bugi Java # Lm JAVANESE PANGRANGKEP
# Total code points: 1
# ================================================
# Script_Extensions=Cprt Linb
10102 ; Cprt Linb # Po AEGEAN CHECK MARK
10137..1013F ; Cprt Linb # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
# Total code points: 10
# ================================================
# Script_Extensions=Cyrl Glag
0484 ; Cyrl Glag # Mn COMBINING CYRILLIC PALATALIZATION
0487 ; Cyrl Glag # Mn COMBINING CYRILLIC POKRYTIE
2E43 ; Cyrl Glag # Po DASH WITH LEFT UPTURN
A66F ; Cyrl Glag # Mn COMBINING CYRILLIC VZMET
# Total code points: 4
# ================================================
# Script_Extensions=Cyrl Latn
0485..0486 ; Cyrl Latn # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
# Total code points: 2
# ================================================
# Script_Extensions=Cyrl Perm
0483 ; Cyrl Perm # Mn COMBINING CYRILLIC TITLO
# Total code points: 1
# ================================================
# Script_Extensions=Cyrl Syrc
1DF8 ; Cyrl Syrc # Mn COMBINING DOT ABOVE LEFT
# Total code points: 1
# ================================================
# Script_Extensions=Deva Gran
1CD3 ; Deva Gran # Po VEDIC SIGN NIHSHVASA
1CF3 ; Deva Gran # Lo VEDIC SIGN ROTATED ARDHAVISARGA
1CF8..1CF9 ; Deva Gran # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
# Total code points: 4
# ================================================
# Script_Extensions=Deva Nand
1CE9 ; Deva Nand # Lo VEDIC SIGN ANUSVARA ANTARGOMUKHA
# Total code points: 1
# ================================================
# Script_Extensions=Deva Shrd
1CD7 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
1CD9 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
1CDC..1CDD ; Deva Shrd # Mn [2] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE DOT BELOW
1CE0 ; Deva Shrd # Mn VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
# Total code points: 5
# ================================================
# Script_Extensions=Deva Taml
A8F3 ; Deva Taml # Lo DEVANAGARI SIGN CANDRABINDU VIRAMA
# Total code points: 1
# ================================================
# Script_Extensions=Geor Latn
10FB ; Geor Latn # Po GEORGIAN PARAGRAPH SEPARATOR
# Total code points: 1
# ================================================
# Script_Extensions=Gran Taml
0BE6..0BEF ; Gran Taml # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
0BF0..0BF2 ; Gran Taml # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
0BF3 ; Gran Taml # So TAMIL DAY SIGN
11301 ; Gran Taml # Mn GRANTHA SIGN CANDRABINDU
11303 ; Gran Taml # Mc GRANTHA SIGN VISARGA
1133B..1133C ; Gran Taml # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
11FD0..11FD1 ; Gran Taml # No [2] TAMIL FRACTION ONE QUARTER..TAMIL FRACTION ONE HALF-1
11FD3 ; Gran Taml # No TAMIL FRACTION THREE QUARTERS
# Total code points: 21
# ================================================
# Script_Extensions=Gujr Khoj
0AE6..0AEF ; Gujr Khoj # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Guru Mult
0A66..0A6F ; Guru Mult # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Hani Latn
A700..A707 ; Hani Latn # Sk [8] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER CHINESE TONE YANG RU
# Total code points: 8
# ================================================
# Script_Extensions=Hira Kana
3031..3035 ; Hira Kana # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
3099..309A ; Hira Kana # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
309B..309C ; Hira Kana # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
30A0 ; Hira Kana # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
30FC ; Hira Kana # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF70 ; Hira Kana # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF9E..FF9F ; Hira Kana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
# Total code points: 14
# ================================================
# Script_Extensions=Knda Nand
0CE6..0CEF ; Knda Nand # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Latn Mong
202F ; Latn Mong # Zs NARROW NO-BREAK SPACE
# Total code points: 1
# ================================================
# Script_Extensions=Mani Ougr
10AF2 ; Mani Ougr # Po MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT
# Total code points: 1
# ================================================
# Script_Extensions=Mong Phag
1802..1803 ; Mong Phag # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
1805 ; Mong Phag # Po MONGOLIAN FOUR DOTS
# Total code points: 3
# ================================================
# Script_Extensions=Arab Syrc Thaa
061C ; Arab Syrc Thaa # Cf ARABIC LETTER MARK
# Total code points: 1
# ================================================
# Script_Extensions=Arab Thaa Yezi
0660..0669 ; Arab Thaa Yezi # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Beng Cakm Sylo
09E6..09EF ; Beng Cakm Sylo # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Cakm Mymr Tale
1040..1049 ; Cakm Mymr Tale # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Cpmn Cprt Linb
10100..10101 ; Cpmn Cprt Linb # Po [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT
# Total code points: 2
# ================================================
# Script_Extensions=Cprt Lina Linb
10107..10133 ; Cprt Lina Linb # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
# Total code points: 45
# ================================================
# Script_Extensions=Deva Gran Knda
1CF4 ; Deva Gran Knda # Mn VEDIC TONE CANDRA ABOVE
# Total code points: 1
# ================================================
# Script_Extensions=Deva Gran Latn
20F0 ; Deva Gran Latn # Mn COMBINING ASTERISK ABOVE
# Total code points: 1
# ================================================
# Script_Extensions=Hani Hira Kana
303C ; Hani Hira Kana # Lo MASU MARK
303D ; Hani Hira Kana # Po PART ALTERNATION MARK
# Total code points: 2
# ================================================
# Script_Extensions=Kali Latn Mymr
A92E ; Kali Latn Mymr # Po KAYAH LI SIGN CWI
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Gran Knda
1CD0 ; Beng Deva Gran Knda # Mn VEDIC TONE KARSHANA
1CD2 ; Beng Deva Gran Knda # Mn VEDIC TONE PRENKHA
# Total code points: 2
# ================================================
# Script_Extensions=Buhd Hano Tagb Tglg
1735..1736 ; Buhd Hano Tagb Tglg # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
# Total code points: 2
# ================================================
# Script_Extensions=Deva Dogr Kthi Mahj
0966..096F ; Deva Dogr Kthi Mahj # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Bopo Hang Hani Hira Kana
3003 ; Bopo Hang Hani Hira Kana # Po DITTO MARK
3013 ; Bopo Hang Hani Hira Kana # So GETA MARK
301C ; Bopo Hang Hani Hira Kana # Pd WAVE DASH
301D ; Bopo Hang Hani Hira Kana # Ps REVERSED DOUBLE PRIME QUOTATION MARK
301E..301F ; Bopo Hang Hani Hira Kana # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
3030 ; Bopo Hang Hani Hira Kana # Pd WAVY DASH
3037 ; Bopo Hang Hani Hira Kana # So IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
FE45..FE46 ; Bopo Hang Hani Hira Kana # Po [2] SESAME DOT..WHITE SESAME DOT
# Total code points: 10
# ================================================
# Script_Extensions=Arab Nkoo Rohg Syrc Thaa Yezi
060C ; Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC COMMA
061B ; Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC SEMICOLON
# Total code points: 2
# ================================================
# Script_Extensions=Bopo Hang Hani Hira Kana Yiii
3001..3002 ; Bopo Hang Hani Hira Kana Yiii # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
3008 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT ANGLE BRACKET
3009 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT ANGLE BRACKET
300A ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT DOUBLE ANGLE BRACKET
300B ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT DOUBLE ANGLE BRACKET
300C ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT CORNER BRACKET
300D ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT CORNER BRACKET
300E ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE CORNER BRACKET
300F ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE CORNER BRACKET
3010 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT BLACK LENTICULAR BRACKET
3011 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT BLACK LENTICULAR BRACKET
3014 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT TORTOISE SHELL BRACKET
3015 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT TORTOISE SHELL BRACKET
3016 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE LENTICULAR BRACKET
3017 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE LENTICULAR BRACKET
3018 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE TORTOISE SHELL BRACKET
3019 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE TORTOISE SHELL BRACKET
301A ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE SQUARE BRACKET
301B ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE SQUARE BRACKET
30FB ; Bopo Hang Hani Hira Kana Yiii # Po KATAKANA MIDDLE DOT
FF61 ; Bopo Hang Hani Hira Kana Yiii # Po HALFWIDTH IDEOGRAPHIC FULL STOP
FF62 ; Bopo Hang Hani Hira Kana Yiii # Ps HALFWIDTH LEFT CORNER BRACKET
FF63 ; Bopo Hang Hani Hira Kana Yiii # Pe HALFWIDTH RIGHT CORNER BRACKET
FF64..FF65 ; Bopo Hang Hani Hira Kana Yiii # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
# Total code points: 26
# ================================================
# Script_Extensions=Deva Knda Mlym Orya Taml Telu
1CDA ; Deva Knda Mlym Orya Taml Telu # Mn VEDIC TONE DOUBLE SVARITA
# Total code points: 1
# ================================================
# Script_Extensions=Adlm Arab Nkoo Rohg Syrc Thaa Yezi
061F ; Adlm Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC QUESTION MARK
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Gran Knda Nand Orya Telu Tirh
1CF2 ; Beng Deva Gran Knda Nand Orya Telu Tirh # Lo VEDIC SIGN ARDHAVISARGA
# Total code points: 1
# ================================================
# Script_Extensions=Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc
0640 ; Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc # Lm ARABIC TATWEEL
# Total code points: 1
# ================================================
# Script_Extensions=Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh
A836..A837 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
A838 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # Sc NORTH INDIC RUPEE MARK
A839 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So NORTH INDIC QUANTITY MARK
# Total code points: 4
# ================================================
# Script_Extensions=Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh
0952 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh # Mn DEVANAGARI STRESS SIGN ANUDATTA
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh
0951 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh # Mn DEVANAGARI STRESS SIGN UDATTA
# Total code points: 1
# ================================================
# Script_Extensions=Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Sind Takr Tirh
A833..A835 ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Sind Takr Tirh # No [3] NORTH INDIC FRACTION ONE SIXTEENTH..NORTH INDIC FRACTION THREE SIXTEENTHS
# Total code points: 3
# ================================================
# Script_Extensions=Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Sind Takr Tirh
A830..A832 ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Sind Takr Tirh # No [3] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE QUARTERS
# Total code points: 3
# ================================================
# Script_Extensions=Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh
0964 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh # Po DEVANAGARI DANDA
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Limb Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh
0965 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Limb Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh # Po DEVANAGARI DOUBLE DANDA
# Total code points: 1
# EOF

3031
admin/unidata/Scripts.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,11 @@
# SpecialCasing-10.0.0.txt # SpecialCasing-15.0.0.txt
# Date: 2017-04-14, 05:40:43 GMT # Date: 2022-02-02, 23:35:52 GMT
# © 2017 Unicode®, Inc. # © 2022 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html # For terms of use, see https://www.unicode.org/terms_of_use.html
# #
# Unicode Character Database # Unicode Character Database
# For documentation, see http://www.unicode.org/reports/tr44/ # For documentation, see https://www.unicode.org/reports/tr44/
# #
# Special Casing # Special Casing
# #
@ -121,7 +121,7 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
# The following cases are already in the UnicodeData.txt file, so are only commented here. # The following cases are already in the UnicodeData.txt file, so are only commented here.
# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI # 0345; 0345; 0399; 0399; # COMBINING GREEK YPOGEGRAMMENI
# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript) # All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
# have special uppercases. # have special uppercases.

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,9 @@
#!/usr/bin/awk -f #!/usr/bin/awk -f
## Copyright (C) 2015-2017 Free Software Foundation, Inc. ## Copyright (C) 2015-2022 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org> ## Author: Glenn Morris <rgm@gnu.org>
## Maintainer: emacs-devel@gnu.org
## This file is part of GNU Emacs. ## This file is part of GNU Emacs.
@ -55,6 +56,7 @@ BEGIN {
alias["box drawing"] = "symbol" alias["box drawing"] = "symbol"
alias["block elements"] = "symbol" alias["block elements"] = "symbol"
alias["miscellaneous symbols"] = "symbol" alias["miscellaneous symbols"] = "symbol"
alias["symbols for legacy computing"] = "symbol"
alias["cjk strokes"] = "cjk-misc" alias["cjk strokes"] = "cjk-misc"
alias["cjk symbols and punctuation"] = "cjk-misc" alias["cjk symbols and punctuation"] = "cjk-misc"
alias["halfwidth and fullwidth forms"] = "cjk-misc" alias["halfwidth and fullwidth forms"] = "cjk-misc"
@ -96,7 +98,7 @@ function name2alias(name , w, w2) {
else if (name ~ /arabic/) return "arabic" else if (name ~ /arabic/) return "arabic"
else if (name ~ /^greek/) return "greek" else if (name ~ /^greek/) return "greek"
else if (name ~ /^coptic/) return "coptic" else if (name ~ /^coptic/) return "coptic"
else if (name ~ /cuneiform number/) return "cuneiform-numbers-and-punctuation" else if (name ~ /cuneiform number/) return "cuneiform"
else if (name ~ /cuneiform/) return "cuneiform" else if (name ~ /cuneiform/) return "cuneiform"
else if (name ~ /mathematical alphanumeric symbol/) return "mathematical" else if (name ~ /mathematical alphanumeric symbol/) return "mathematical"
else if (name ~ /punctuation|mathematical|arrows|currency|superscript|small form variants|geometric|dingbats|enclosed|alchemical|pictograph|emoticon|transport/) return "symbol" else if (name ~ /punctuation|mathematical|arrows|currency|superscript|small form variants|geometric|dingbats|enclosed|alchemical|pictograph|emoticon|transport/) return "symbol"
@ -111,24 +113,27 @@ function name2alias(name , w, w2) {
else if (name ~/^(specials|tags)$/) return 0 else if (name ~/^(specials|tags)$/) return 0
else if (name ~ /linear b/) return "linear-b" else if (name ~ /linear b/) return "linear-b"
else if (name ~ /aramaic/) return "aramaic" else if (name ~ /aramaic/) return "aramaic"
else if (name ~ /rumi num/) return "rumi-number" else if (name ~ /rumi num/) return "arabic"
else if (name ~ /duployan|shorthand/) return "duployan-shorthand" else if (name ~ /duployan|shorthand/) return "duployan-shorthand"
else if (name ~ /sutton signwriting/) return "sutton-sign-writing" else if (name ~ /sutton signwriting/) return "sutton-sign-writing"
else if (name ~ /sinhala archaic number/) return "sinhala"
else if (name ~ /tangut components/) return "tangut"
sub(/ (extended|extensions|supplement).*/, "", name) sub(/^small /, "", name)
sub(/ (extended|extensions*|supplement).*/, "", name)
sub(/numbers/, "number", name) sub(/numbers/, "number", name)
sub(/numerals/, "numeral", name) sub(/numerals/, "numeral", name)
sub(/symbols/, "symbol", name) sub(/symbols/, "symbol", name)
sub(/forms$/, "form", name) sub(/forms$/, "form", name)
sub(/tiles$/, "tile", name) sub(/tiles$/, "tile", name)
sub(/^new /, "", name) sub(/^new /, "", name)
sub(/ (characters|hieroglyphs|cursive)$/, "", name) sub(/ (characters|hieroglyphs|cursive|hieroglyph format controls)$/, "", name)
gsub(/ /, "-", name) gsub(/ /, "-", name)
return name return name
} }
/^[0-9A-F]/ { FILENAME ~ "Blocks.txt" && /^[0-9A-F]/ {
sep = index($1, "..") sep = index($1, "..")
len = length($1) len = length($1)
s = substr($1,1,sep-1) s = substr($1,1,sep-1)
@ -199,9 +204,47 @@ function name2alias(name , w, w2) {
} }
} }
FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; Emoji_Presentation / {
sep = index($1, "..")
len = length($1)
if (sep > 0) {
s = substr($1,1,sep-1)
e = substr($1,sep+2,len-sep-1)
} else {
s = $1
e = $1
}
$1 = ""
i++
start[i] = s
end[i] = e
alt[i] = "emoji"
name[i] = "Autogenerated emoji"
}
END { END {
print ";;; charscript.el --- character script table" idx = 0
print ";;; Automatically generated from admin/unidata/Blocks.txt" ## This is here so that font_range can choose Emoji presentation
## for the preceding codepoint when it encounters a VS-16
## (U+FE0F). See also font_range and the comments in composite.el
## around the setup of `composition-function-table' for
## U+FE00..U+FE0E.
## It originally covered the whole FE00-FE0F range, but that
## turned out to be a mistake.
override_start[idx] = "FE0F"
override_end[idx] = "FE0F"
for (k in override_start)
{
i++
start[i] = override_start[k]
end[i] = override_end[k]
alt[i] = "emoji"
name[i] = "Autogenerated emoji (override)"
}
print ";;; charscript.el --- character script table -*- lexical-binding:t -*-"
print ";;; Automatically generated from admin/unidata/{Blocks,emoji-data}.txt"
print "(let (script-list)" print "(let (script-list)"
print " (dolist (elt '(" print " (dolist (elt '("
@ -220,6 +263,6 @@ END {
print " (or (memq (nth 2 elt) script-list)" print " (or (memq (nth 2 elt) script-list)"
print " (setq script-list (cons (nth 2 elt) script-list))))" print " (setq script-list (cons (nth 2 elt) script-list))))"
print " (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))" print " (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))"
print "" print "\n"
print "(provide 'charscript)" print "(provide 'charscript)"
} }

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,7 @@
<meta name="keywords" content="Unicode Standard, copyright"> <meta name="keywords" content="Unicode Standard, copyright">
<meta name="ProgId" content="FrontPage.Editor.Document"> <meta name="ProgId" content="FrontPage.Editor.Document">
<title>Unicode Terms of Use</title> <title>Unicode Terms of Use</title>
<link rel="stylesheet" type="text/css" <link rel="stylesheet" type="text/css"
href="http://www.unicode.org/webscripts/standard_styles.css"> href="http://www.unicode.org/webscripts/standard_styles.css">
@ -32,15 +32,13 @@ pre {
<td colspan="2"> <td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0"> <table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr> <tr>
<td class="icon" style="width:38px; height:35px"><a href="http://www.unicode.org/"><img border="0"
<td class="icon"><a href="http://www.unicode.org/"><img border="0" src="http://www.unicode.org/webscripts/logo60s2.gif" align="middle" alt="[Unicode]" width="34" height="33"></a></td>
src="http://www.unicode.org/webscripts/logo60s2.gif" align="middle" <td class="icon" style="vertical-align:middle;"> &nbsp;<a class="bar"
alt="[Unicode]" width="34" height="33"></a>&nbsp;&nbsp;<a class="bar" href="https://www.unicode.org/copyright.html"><font size="3">Terms of Use</font></a></td>
href="http://www.unicode.org/copyright.html"><font size="3">Terms of <td class="bar"><a href="https://www.unicode.org/main.html" class="bar">Tech Site</a>
Use</font></a></td> | <a href="https://www.unicode.org/sitemap/" class="bar">Site Map</a> |
<td class="bar"><a href="http://www.unicode.org" class="bar">Home</a> <a href="https://www.unicode.org/search" class="bar">Search </a></td>
| <a href="http://www.unicode.org/sitemap/" class="bar">Site Map</a> |
<a href="http://www.unicode.org/search" class="bar">Search </a></td>
</tr> </tr>
</table> </table>
</td> </td>
@ -50,7 +48,7 @@ pre {
</tr> </tr>
<tr> <tr>
<td valign="top" width="25%" class="navCol"> <td valign="top" width="25%" class="navCol">
<table class="navColTable" border="0" width="100%" cellspacing="4" <table class="navColTable" border="0" width="100%" cellspacing="4"
cellpadding="0"> cellpadding="0">
<tr> <tr>
<td class="navColTitle">Contents</td> <td class="navColTitle">Contents</td>
@ -59,46 +57,48 @@ pre {
<td valign="top" class="navColCell"><a href="#1">Unicode Copyright</a></td> <td valign="top" class="navColCell"><a href="#1">Unicode Copyright</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"><a href="#2">Restricted Rights <td valign="top" class="navColCell"><a href="#6">Definitions</a></td>
Legend</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"><a href="#3">Warranties &amp; <td valign="top" class="navColCell"><a href="#8">Terms of Use</a></td>
Disclaimers</a></td> </tr>
<tr>
<td valign="top" class="navColCell"><a href="#2">Restricted Rights Legend</a></td>
</tr>
<tr>
<td valign="top" class="navColCell"><a href="#3">Warranties &amp; Disclaimers</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"><a href="#4">Waiver of Damages</a></td> <td valign="top" class="navColCell"><a href="#4">Waiver of Damages</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"><a href="#5">Trademarks & Logos</a></td> <td valign="top" class="navColCell"><a href="#5">Trademarks &amp; Logos</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"><a href="#7">Miscellaneous</a></td> <td valign="top" class="navColCell"><a href="#7">Miscellaneous</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"><a href="#License">Data Files and <td class="navColTitle">Unicode License</td>
Software License Agreement (Exhibit 1)</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell">&nbsp;</td> <td valign="top" class="navColCell">
<a href="https://www.unicode.org/license.txt">Unicode Data Files and Software License</a></td>
</tr> </tr>
</table>
<table class="navColTable" border="0" width="100%" cellspacing="4"
cellpadding="0">
<tr> <tr>
<td class="navColTitle">Related Links</td> <td class="navColTitle">Related Links</td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"> <td valign="top" class="navColCell">
<a href="http://www.unicode.org/policies/logo_policy.html">Trademark Policy</a></td> <a href="https://www.unicode.org/policies/privacy_policy.html">Privacy Policy</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"> <td valign="top" class="navColCell">
<a href="http://www.unicode.org/policies/policies.html">Unicode <a href="https://www.unicode.org/policies/logo_policy.html">Trademark Policy</a></td>
Policies</a></td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="navColCell"></td> <td valign="top" class="navColCell">
<a href="https://www.unicode.org/policies/policies.html">Unicode
Policies</a></td>
</tr> </tr>
</table> </table>
@ -108,204 +108,159 @@ pre {
<td> <td>
<blockquote> <blockquote>
<h1>Unicode® Terms of Use</h1> <h1>Unicode® Copyright and Terms of Use</h1>
<p>For the general privacy policy governing access to this site, see <p>For the general privacy policy governing access to this site, see
the&nbsp; the&nbsp;
<a href="http://www.unicode.org/policies/privacy_policy.html"> <a href="http://www.unicode.org/policies/privacy_policy.html">
Unicode Privacy Policy</a>. For trademark usage, see Unicode Privacy Policy</a>.</p>
<a href="http://www.unicode.org/policies/logo_policy.html">the
Unicode® Consortium Name and Trademark Usage Policy</a>.</p>
<table class="sidebar" align="right" width="50%" id="table1">
<tr>
<td class="sidebarTitle">Notice to End User: Terms of Use</td>
</tr>
<tr>
<td class="sidebar">Carefully read the following legal agreement
(&quot;Agreement&quot;). Use or copying of the software and/or codes
provided with this agreement (The &quot;Software&quot;) constitutes your
acceptance of these terms. If you have any questions about these terms of use, please <a href="http://www.unicode.org/contacts.html">contact the Unicode Consortium</a>.</td>
</tr>
</table>
<ol type="A"> <ol type="A">
<li><u><a name="1"></a>Unicode Copyright.</u> <li><u><a name="1"></a>Unicode Copyright</u>
<ol> <ol>
<li>Copyright © 1991-2016 Unicode, Inc. All rights reserved.</li> <li>Copyright © 1991-2022 Unicode, Inc. All rights reserved.</li>
<li>Certain documents and files on this website contain a legend
indicating that &quot;Modification is permitted.&quot; Any person is
hereby authorized, without fee, to modify such documents and
files to create derivative works conforming to the Unicode®
Standard, subject to Terms and Conditions herein.</li>
<li>Any person is hereby authorized, without fee, to view, use,
reproduce, and distribute all documents and files solely for
informational purposes and in the creation of products supporting
the Unicode Standard, subject to the Terms and Conditions
herein.</li>
<li>Further specifications of rights and restrictions pertaining
to the use of the particular set of data files known as the
&quot;Unicode Character Database&quot; can be found in the
<a href="#License">License</a>.</li>
<li>Each version of the Unicode Standard has further
specifications of rights and restrictions of use. For the book
editions (Unicode 5.0 and earlier), these are found on the back
of the
<a href="http://www.unicode.org/versions/Unicode5.0.0/Title.pdf">title page</a>.
The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use.</li>
<li>No license is granted to &quot;mirror&quot; the Unicode website where
a fee is charged for access to the &quot;mirror&quot; site.</li>
<li>Modification is not permitted with respect to this document.
All copies of this document must be verbatim.</li>
</ol>
</li>
<li><u><a name="2"></a>Restricted Rights Legend</u>. Any technical
data or software which is licensed to the United States of
America, its agencies and/or instrumentalities under this
Agreement is commercial technical data or commercial computer
software developed exclusively at private expense as defined in
FAR&nbsp;2.101, or DFARS 252.227-7014 (June 1995), as applicable. For
technical data, use, duplication, or disclosure by the Government
is subject to restrictions as set forth in DFARS 202.227-7015
Technical Data, Commercial and Items (Nov 1995) and this
Agreement. For Software, in accordance with FAR 12-212 or DFARS
227-7202, as applicable, use, duplication or disclosure by the
Government is subject to the restrictions set forth in this
Agreement.</li>
<li><u><a name="3"></a>Warranties and Disclaimers</u>.
<ol>
<li>This publication and/or website may include technical or
typographical errors or other inaccuracies . Changes are
periodically added to the information herein; these changes will
be incorporated in new editions of the publication and/or
website. Unicode may make improvements and/or changes in the
product(s) and/or program(s) described in this publication
and/or website at any time.</li>
<li>If this file has been purchased on magnetic or optical media
from Unicode, Inc. the sole and exclusive remedy for any claim
will be exchange of the defective media within ninety (90) days
of original purchase.</li>
<li>EXCEPT AS PROVIDED IN SECTION&nbsp;C.2, THIS PUBLICATION AND/OR
SOFTWARE IS PROVIDED &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND EITHER
EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO,
ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME
NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION
AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR
LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.</li>
</ol>
</li>
<li><u><a name="4"></a>Waiver of Damages.</u> In no event shall
Unicode or its licensors be liable for any special, incidental,
indirect or consequential damages of any kind, or any damages
whatsoever, whether or not Unicode was advised of the possibility
of the damage, including, without limitation, those resulting from
the following: loss of use, data or profits, in connection with
the use, modification or distribution of this information or its
derivatives.</li>
<li><u><a name="5"></a>Trademarks &amp; Logos.</u>
<ol>
<li>The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names.</li>
<li><a href="http://www.unicode.org/policies/logo_policy.html">The Unicode Consortium Name and Trademark Usage Policy</a> (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.</li>
<li>All third party trademarks referenced herein are the property of their respective owners.
</li>
</ol> </ol>
</li> </li>
<li><u><a name="7"></a>Miscellaneous</u>. <li><u><a name="6"></a>Definitions</u>
<pre>
Unicode Data Files ("DATA FILES") include all data files under the directories:
https://www.unicode.org/Public/
https://www.unicode.org/reports/
https://www.unicode.org/ivd/data/
Unicode Data Files do not include PDF online code charts under the directory:
https://www.unicode.org/Public/
Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard
or any source code or compiled code under the directories:
https://www.unicode.org/Public/PROGRAMS/
https://www.unicode.org/Public/cldr/
http://site.icu-project.org/download/
</pre>
</li>
<li><u><a name="8"></a>Terms of Use</u>
<ol> <ol>
<li><u>Jurisdiction and Venue</u>. This server is operated from
a location in the State of California, United States of America. <li>Certain documents and files on this website contain a legend
Unicode makes no representation that the materials are indicating that &quot;Modification is permitted.&quot; Any person is
appropriate for use in other locations. If you access this hereby authorized, without fee, to modify such documents and
server from other locations, you are responsible for compliance files to create derivative works conforming to the Unicode®
with local laws. This Agreement, all use of this site and any Standard, subject to Terms and Conditions herein.</li>
claims and damages resulting from use of this site are governed <li>Any person is hereby authorized, without fee, to view, use,
solely by the laws of the State of California without regard to reproduce, and distribute all documents and files, subject to the Terms and Conditions
any principles which would apply the laws of a different herein.</li>
jurisdiction. The user agrees that any disputes regarding this <li>Further specifications of rights and restrictions pertaining
site shall be resolved solely in the courts located in Santa to the use of the Unicode DATA FILES and SOFTWARE can be found in the
Clara County, California. The user agrees said courts have <a href="https://www.unicode.org/license.txt">Unicode Data Files and Software License</a>.</li>
personal jurisdiction and agree to waive any right to transfer <li>Each version of the Unicode Standard has further
the dispute to any other forum. </li> specifications of rights and restrictions of use. For the book
<li><u>Modification by Unicode </u>Unicode shall have the right editions (Unicode 5.0 and earlier), these are found on the back
to modify this Agreement at any time by posting it to this site. of the
The user may not assign any part of this Agreement without <a href="http://www.unicode.org/versions/Unicode5.0.0/Title.pdf">title page</a>.</li>
Unicodes prior written consent.</li> <li>
<li><u>Taxes.</u> The user agrees to pay any taxes arising from The Unicode PDF <a href="https://www.unicode.org/charts/">online code charts</a> carry specific restrictions. Those restrictions are incorporated as the
access to this website or use of the information herein, except first page of each PDF code chart.</li>
<li>All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use.</li>
<li>No license is granted to &quot;mirror&quot; the Unicode website where
a fee is charged for access to the &quot;mirror&quot; site.</li>
<li>Modification is not permitted with respect to this document.
All copies of this document must be verbatim.</li>
</ol>
</li>
<li><u><a name="2"></a>Restricted Rights Legend</u>
<ol>
<li>Any technical
data or software which is licensed to the United States of
America, its agencies and/or instrumentalities under this
Agreement is commercial technical data or commercial computer
software developed exclusively at private expense as defined in
FAR&nbsp;2.101, or DFARS 252.227-7014 (June 1995), as applicable. For
technical data, use, duplication, or disclosure by the Government
is subject to restrictions as set forth in DFARS 202.227-7015
Technical Data, Commercial and Items (Nov 1995) and this
Agreement. For Software, in accordance with FAR 12-212 or DFARS
227-7202, as applicable, use, duplication or disclosure by the
Government is subject to the restrictions set forth in this
Agreement.</li>
</ol>
</li>
<li><u><a name="3"></a>Warranties and Disclaimers</u>
<ol>
<li>This publication and/or website may include technical or
typographical errors or other inaccuracies. Changes are
periodically added to the information herein; these changes will
be incorporated in new editions of the publication and/or
website. Unicode, Inc. may make improvements and/or changes in the
product(s) and/or program(s) described in this publication
and/or website at any time.</li>
<li>If this file has been purchased on magnetic or optical media
from Unicode, Inc. the sole and exclusive remedy for any claim
will be exchange of the defective media within ninety (90) days
of original purchase.</li>
<li>EXCEPT AS PROVIDED IN SECTION&nbsp;E.2, THIS PUBLICATION AND/OR
SOFTWARE IS PROVIDED &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND EITHER
EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO,
ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME
NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION
AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR
LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.</li>
</ol>
</li>
<li><u><a name="4"></a>Waiver of Damages</u>
<ol>
<li>In no event shall
Unicode, Inc. or its licensors be liable for any special, incidental,
indirect or consequential damages of any kind, or any damages
whatsoever, whether or not Unicode, Inc. was advised of the possibility
of the damage, including, without limitation, those resulting from
the following: loss of use, data or profits, in connection with
the use, modification or distribution of this information or its
derivatives.</li>
</ol>
</li>
<li><u><a name="5"></a>Trademarks &amp; Logos</u>
<ol>
<li>The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names.</li>
<li><a href="http://www.unicode.org/policies/logo_policy.html">The Unicode Consortium Name and Trademark Usage Policy</a> (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.</li>
<li>All third party trademarks referenced herein are the property of their respective owners.</li>
</ol>
</li>
<li><u><a name="7"></a>Miscellaneous</u>
<ol>
<li><u>Jurisdiction and Venue</u>. This website is operated from
a location in the State of California, United States of America.
Unicode, Inc. makes no representation that the materials are
appropriate for use in other locations. If you access this
website from other locations, you are responsible for compliance
with local laws. This Agreement, all use of this website and any
claims and damages resulting from use of this website are governed
solely by the laws of the State of California without regard to
any principles which would apply the laws of a different
jurisdiction. The user agrees that any disputes regarding this
website shall be resolved solely in the courts located in Santa
Clara County, California. The user agrees said courts have
personal jurisdiction and agree to waive any right to transfer
the dispute to any other forum.</li>
<li><u>Modification by Unicode, Inc.</u> Unicode, Inc. shall have the right
to modify this Agreement at any time by posting it to this website.
The user may not assign any part of this Agreement without
Unicode, Inc.s prior written consent.</li>
<li><u>Taxes.</u> The user agrees to pay any taxes arising from
access to this website or use of the information herein, except
for those based on Unicodes net income.</li> for those based on Unicodes net income.</li>
<li><u>Severability</u>.&nbsp; If any provision of this <li><u>Severability</u>.&nbsp; If any provision of this
Agreement is declared invalid or unenforceable, the remaining Agreement is declared invalid or unenforceable, the remaining
provisions of this Agreement shall remain in effect.</li> provisions of this Agreement shall remain in effect.</li>
<li><u>Entire Agreement</u>. This Agreement constitutes the <li><u>Entire Agreement</u>. This Agreement constitutes the
entire agreement between the parties.&nbsp;</li> entire agreement between the parties.&nbsp;</li>
</ol> </ol>
</li> </li>
</ol> </ol>
</blockquote>
<hr width="95%">
<blockquote>
<h3 align="center"><a name="Exhibit1">EXHIBIT 1</a><br>
<a name="License">UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE</a></h3>
<pre>
Unicode Data Files include all data files under the directories
http://www.unicode.org/Public/, http://www.unicode.org/reports/,
http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
http://www.unicode.org/utility/trac/browser/.
Unicode Data Files do not include PDF online code charts under the
directory http://www.unicode.org/Public/.
Software includes any source code published in the Unicode Standard
or under the directories
http://www.unicode.org/Public/, http://www.unicode.org/reports/,
http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
http://www.unicode.org/utility/trac/browser/.
NOTICE TO USER: Carefully read the following legal agreement.
BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
TERMS AND CONDITIONS OF THIS AGREEMENT.
IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
THE DATA FILES OR SOFTWARE.
COPYRIGHT AND PERMISSION NOTICE
Copyright © 1991-2016 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Unicode data files and any associated documentation
(the "Data Files") or Unicode software and any associated documentation
(the "Software") to deal in the Data Files or Software
without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, and/or sell copies of
the Data Files or Software, and to permit persons to whom the Data Files
or Software are furnished to do so, provided that either
(a) this copyright and permission notice appear with all copies
of the Data Files or Software, or
(b) this copyright and permission notice appear in associated
Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT OF THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THE DATA FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale,
use or other dealings in these Data Files or Software without prior
written authorization of the copyright holder.
</pre>
</blockquote> </blockquote>
@ -316,13 +271,13 @@ written authorization of the copyright holder.
<table cellspacing="0" cellpadding="0" border="0" id="table2"> <table cellspacing="0" cellpadding="0" border="0" id="table2">
<tr> <tr>
<td><a href="http://www.unicode.org/copyright.html"> <td><a href="http://www.unicode.org/copyright.html">
<img src="http://www.unicode.org/img/hb_notice.gif" <img src="http://www.unicode.org/img/hb_notice.gif"
border="0" alt="Access to Copyright and terms of use" border="0" alt="Access to Copyright and terms of use"
width="216" height="50"></a></td> width="216" height="50"></a></td>
</tr> </tr>
</table> </table>
<script language="Javascript" type="text/javascript" <script language="Javascript" type="text/javascript"
src="http://www.unicode.org/webscripts/lastModified.js"> src="http://www.unicode.org/webscripts/lastModified.js">
</script> </script>

1320
admin/unidata/emoji-data.txt Normal file

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more