diff --git a/INSTALL b/INSTALL
index e880b4e3547..5909e8c9fcf 100644
--- a/INSTALL
+++ b/INSTALL
@@ -117,19 +117,25 @@ ADDITIONAL DISTRIBUTION FILES
* Complex Text Layout support libraries
-On GNU and Unix systems, Emacs needs the optional libraries "m17n-db",
-"libm17n-flt", "libotf" to correctly display such complex scripts as
-Indic and Khmer, and also for scripts that require Arabic shaping
-support (Arabic and Farsi). On some systems, particularly GNU/Linux,
-these libraries may be already present or 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. Otherwise,
-you can download the libraries from .
+On GNU and Unix systems, Emacs needs optional libraries to correctly
+display such complex scripts as Indic and Khmer, and also for scripts
+that require Arabic shaping support (Arabic and Farsi). If the
+HarfBuzz library is installed, Emacs will build with it and use it for
+this purpose. HarfBuzz is the preferred shaping engine, both on Posix
+hosts and on MS-Windows, so we recommend installing it before building
+Emacs. The alternative for GNU/Linux and Posix systems is to use the
+"m17n-db", "libm17n-flt", and "libotf" libraries. (On some systems,
+particularly GNU/Linux, these libraries may be already present or
+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
-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
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 8ed92ab75e0..f24c6f03c8e 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -352,11 +352,11 @@ is the current directory.
*** Set find-function-C-source-directory accordingly.
Once you have installed the source package, for example at
-/home/myself/deb-src/emacs-26.3, add the following line to your
+/home/myself/deb-src/emacs-27.1, add the following line to your
startup file:
(setq find-function-C-source-directory
- "/home/myself/deb-src/emacs-26.3/src/")
+ "/home/myself/deb-src/emacs-27.1/src/")
The installation directory of the Emacs source package will contain
the exact package name and version number of Emacs that is installed
@@ -386,7 +386,7 @@ To get describe-function and similar commands to work, you can then
add something like the following to your startup file:
(setq find-function-C-source-directory
- "/usr/src/debug/emacs-26.3-1.fc31.x86_64/src/")
+ "/usr/src/debug/emacs-27.1-1.fc31.x86_64/src/")
However, the exact directory name will depend on the system, and you
will need to both upgrade source and debug info when your system
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 146cf612505..4315771a496 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -1974,14 +1974,13 @@ make_tag (const char *name, /* tag name, or NULL if unnamed */
/* Record a tag. */
static void
-pfnote (char *name, bool is_func, char *linestart, ptrdiff_t linelen,
- intmax_t lno, intmax_t cno)
- /* tag name, or NULL if unnamed */
- /* tag is a function */
- /* start of the line where tag is */
- /* length of the line where tag is */
- /* line number */
- /* character number */
+pfnote (char *name, /* tag name, or NULL if unnamed */
+ bool is_func, /* tag is a function */
+ char *linestart, /* start of the line where tag is */
+ ptrdiff_t linelen, /* length of the line where tag is */
+ intmax_t lno, /* line number */
+ intmax_t cno) /* character number */
+
{
register node *np;
@@ -2905,15 +2904,13 @@ static void make_C_tag (bool);
*/
static bool
-consider_token (char *str, ptrdiff_t len, int c, int *c_extp,
- ptrdiff_t bracelev, ptrdiff_t parlev, bool *is_func_or_var)
- /* IN: token pointer */
- /* IN: token length */
- /* IN: first char after the token */
- /* IN, OUT: C extensions mask */
- /* IN: brace level */
- /* IN: parenthesis level */
- /* OUT: function or variable found */
+consider_token (char *str, /* IN: token pointer */
+ ptrdiff_t len, /* IN: token length */
+ int c, /* IN: first char after the token */
+ int *c_extp, /* IN, OUT: C extensions mask */
+ ptrdiff_t bracelev, /* IN: brace level */
+ ptrdiff_t parlev, /* IN: parenthesis level */
+ bool *is_func_or_var) /* OUT: function or variable found */
{
/* When structdef is stagseen, scolonseen, or snone with bracelev > 0,
structtype is the type of the preceding struct-like keyword, and
@@ -3312,9 +3309,8 @@ perhaps_more_input (FILE *inf)
* C syntax and adds them to the list.
*/
static void
-C_entries (int c_ext, FILE *inf)
- /* extension of C */
- /* input file */
+C_entries (int c_ext, /* extension of C */
+ FILE *inf) /* input file */
{
char c; /* latest char read; '\0' for end of line */
char *lp; /* pointer one beyond the character `c' */
diff --git a/lib-src/make-fingerprint.c b/lib-src/make-fingerprint.c
index c013d0aca3b..b72ee90bbca 100644
--- a/lib-src/make-fingerprint.c
+++ b/lib-src/make-fingerprint.c
@@ -19,9 +19,12 @@ You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see . */
-/* The arguments given to this program are all the object files that
- go into building GNU Emacs. There is no special search logic to find
- the files. */
+/* The argument given to this program is the initial version of the
+ temacs executable file used when building GNU Emacs. This program computes
+ a digest fingerprint for the executable, and modifies the binary in
+ place, replacing all instances of the existing fingerprint (normally
+ the default fingerprint from libgnu's lib/fingerprint.c) with the
+ new value. With option -r, it just prints the digest. */
#include
diff --git a/lisp/emacs-lisp/benchmark.el b/lisp/emacs-lisp/benchmark.el
index 2fa5a878801..8cf1f54411a 100644
--- a/lisp/emacs-lisp/benchmark.el
+++ b/lisp/emacs-lisp/benchmark.el
@@ -43,7 +43,7 @@
;;;###autoload
(defmacro benchmark-run (&optional repetitions &rest forms)
"Time execution of FORMS.
-If REPETITIONS is supplied as a number, run forms that many times,
+If REPETITIONS is supplied as a number, run FORMS that many times,
accounting for the overhead of the resulting loop. Otherwise run
FORMS once.
Return a list of the total elapsed time for execution, the number of
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index e111ae8e225..3eb158dc2c8 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -1292,7 +1292,15 @@ changed with `comment-style'."
(defun comment-region-default (beg end &optional arg)
(if comment-combine-change-calls
- (combine-change-calls beg end (comment-region-default-1 beg end arg))
+ (combine-change-calls beg
+ ;; A new line might get inserted and whitespace deleted
+ ;; after END for line comments. Ensure the next argument is
+ ;; after any and all changes.
+ (save-excursion
+ (goto-char end)
+ (forward-line)
+ (point))
+ (comment-region-default-1 beg end arg))
(comment-region-default-1 beg end arg)))
;;;###autoload
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 80c461c76cb..d6089ea2950 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -3683,7 +3683,7 @@ When \"(\" is present, that defun will attempt to parse a
parenthesized expression inside the template. When \")\" is
present it will treat an unbalanced closing paren as a sign of
the invalidity of the putative template construct."
- t "[<;{},|+&->)]"
+ t "[<;{},|+&>)-]"
c++ "[<;{},>()]")
(c-lang-defvar c-<>-notable-chars-re (c-lang-const c-<>-notable-chars-re))
diff --git a/nt/INSTALL b/nt/INSTALL
index 2fe2c8c2673..27fb5f096f7 100644
--- a/nt/INSTALL
+++ b/nt/INSTALL
@@ -502,11 +502,21 @@ build will run on Windows 9X and newer systems).
Does Emacs use -lgnutls? yes
Does Emacs use -lxml2? yes
Does Emacs use -lfreetype? no
+ Does Emacs use HarfBuzz? yes
Does Emacs use -lm17n-flt? no
Does Emacs use -lotf? no
Does Emacs use -lxft? no
+ Does Emacs use -lsystemd? no
+ Does Emacs use -ljansson? yes
+ Does Emacs use the GMP library? yes
Does Emacs directly use zlib? yes
+ Does Emacs have dynamic modules support? yes
Does Emacs use toolkit scroll bars? yes
+ Does Emacs support Xwidgets? no
+ Does Emacs have threading support in lisp? yes
+ Does Emacs support the portable dumper? yes
+ Does Emacs support the legacy unexec dumping? no
+ Which dumping strategy does Emacs use? pdumper
You are almost there, hang on.
@@ -815,6 +825,14 @@ build will run on Windows 9X and newer systems).
the libjansson DLL (for 32-bit builds of Emacs) are available from
the ezwinports site and from the MSYS2 project.
+* Optional support for HarfBuzzz shaping library
+
+ Emacs supports display of complex scripts and Arabic shaping. The
+ preferred library for that is HarfBuzz; prebuilt binaries are
+ available from the ezwinports site (for 32-bit builds of Emacs) and
+ from the MSYS2 project. If HarfBuzz is not available, Emacs will
+ use the Uniscribe shaping engine that is part of MS-Windows.
+
This file is part of GNU Emacs.
diff --git a/nt/INSTALL.W64 b/nt/INSTALL.W64
index 0a0e0330a24..4724116ebcc 100644
--- a/nt/INSTALL.W64
+++ b/nt/INSTALL.W64
@@ -55,14 +55,16 @@ packages (you can copy and paste it into the shell with Shift + Insert):
mingw-w64-x86_64-jansson \
mingw-w64-x86_64-libxml2 \
mingw-w64-x86_64-gnutls \
- mingw-w64-x86_64-zlib
+ mingw-w64-x86_64-zlib \
+ mingw-w64-x86_64-harfbuzz
The packages include the base developer tools (autoconf, grep, make, etc.),
the compiler toolchain (gcc, gdb, etc.), several image libraries, an XML
-library, the GnuTLS (transport layer security) library, and zlib for
-decompressing text. Only the first three packages are required (base-devel,
-toolchain, xpm-nox); the rest are optional. You can select only part of the
-libraries if you don't need them all.
+library, the GnuTLS (transport layer security) library, zlib for
+decompressing text, and HarfBuzz for use as the shaping engine. Only the
+first three packages are required (base-devel, toolchain, xpm-nox); the
+rest are optional. You can select only part of the libraries if you don't
+need them all.
You now have a complete build environment for Emacs.
diff --git a/test/manual/etags/ETAGS.good_1 b/test/manual/etags/ETAGS.good_1
index 5451a79efaa..3de15514e79 100644
--- a/test/manual/etags/ETAGS.good_1
+++ b/test/manual/etags/ETAGS.good_1
@@ -3153,13 +3153,13 @@ tex-src/gzip.texi,303
@node Top,62,2139
@node Copying,80,2652
@node Overview,83,2705
-@node Sample,166,7272
-@node Invoking gzip,Invoking gzip210,8828
-@node Advanced usage,Advanced usage357,13496
-@node Environment,420,15208
-@node Tapes,437,15769
-@node Problems,460,16768
-@node Concept Index,Concept Index473,17288
+@node Sample,166,7273
+@node Invoking gzip,Invoking gzip210,8829
+@node Advanced usage,Advanced usage357,13497
+@node Environment,420,15209
+@node Tapes,437,15770
+@node Problems,460,16769
+@node Concept Index,Concept Index473,17289
tex-src/texinfo.tex,30627
\def\texinfoversion{\texinfoversion26,1035
diff --git a/test/manual/etags/ETAGS.good_2 b/test/manual/etags/ETAGS.good_2
index ab2111eafb2..ddb8d19540b 100644
--- a/test/manual/etags/ETAGS.good_2
+++ b/test/manual/etags/ETAGS.good_2
@@ -3726,13 +3726,13 @@ tex-src/gzip.texi,303
@node Top,62,2139
@node Copying,80,2652
@node Overview,83,2705
-@node Sample,166,7272
-@node Invoking gzip,Invoking gzip210,8828
-@node Advanced usage,Advanced usage357,13496
-@node Environment,420,15208
-@node Tapes,437,15769
-@node Problems,460,16768
-@node Concept Index,Concept Index473,17288
+@node Sample,166,7273
+@node Invoking gzip,Invoking gzip210,8829
+@node Advanced usage,Advanced usage357,13497
+@node Environment,420,15209
+@node Tapes,437,15770
+@node Problems,460,16769
+@node Concept Index,Concept Index473,17289
tex-src/texinfo.tex,30627
\def\texinfoversion{\texinfoversion26,1035
diff --git a/test/manual/etags/ETAGS.good_3 b/test/manual/etags/ETAGS.good_3
index e53fb9629c5..40be768aacb 100644
--- a/test/manual/etags/ETAGS.good_3
+++ b/test/manual/etags/ETAGS.good_3
@@ -3560,13 +3560,13 @@ tex-src/gzip.texi,303
@node Top,62,2139
@node Copying,80,2652
@node Overview,83,2705
-@node Sample,166,7272
-@node Invoking gzip,Invoking gzip210,8828
-@node Advanced usage,Advanced usage357,13496
-@node Environment,420,15208
-@node Tapes,437,15769
-@node Problems,460,16768
-@node Concept Index,Concept Index473,17288
+@node Sample,166,7273
+@node Invoking gzip,Invoking gzip210,8829
+@node Advanced usage,Advanced usage357,13497
+@node Environment,420,15209
+@node Tapes,437,15770
+@node Problems,460,16769
+@node Concept Index,Concept Index473,17289
tex-src/texinfo.tex,30627
\def\texinfoversion{\texinfoversion26,1035
diff --git a/test/manual/etags/ETAGS.good_4 b/test/manual/etags/ETAGS.good_4
index 5a4b5b4b8ba..15f67c5d28a 100644
--- a/test/manual/etags/ETAGS.good_4
+++ b/test/manual/etags/ETAGS.good_4
@@ -3317,13 +3317,13 @@ tex-src/gzip.texi,303
@node Top,62,2139
@node Copying,80,2652
@node Overview,83,2705
-@node Sample,166,7272
-@node Invoking gzip,Invoking gzip210,8828
-@node Advanced usage,Advanced usage357,13496
-@node Environment,420,15208
-@node Tapes,437,15769
-@node Problems,460,16768
-@node Concept Index,Concept Index473,17288
+@node Sample,166,7273
+@node Invoking gzip,Invoking gzip210,8829
+@node Advanced usage,Advanced usage357,13497
+@node Environment,420,15209
+@node Tapes,437,15770
+@node Problems,460,16769
+@node Concept Index,Concept Index473,17289
tex-src/texinfo.tex,30627
\def\texinfoversion{\texinfoversion26,1035
diff --git a/test/manual/etags/ETAGS.good_5 b/test/manual/etags/ETAGS.good_5
index f89cfefc388..583de5cbe22 100644
--- a/test/manual/etags/ETAGS.good_5
+++ b/test/manual/etags/ETAGS.good_5
@@ -4297,13 +4297,13 @@ tex-src/gzip.texi,303
@node Top,62,2139
@node Copying,80,2652
@node Overview,83,2705
-@node Sample,166,7272
-@node Invoking gzip,Invoking gzip210,8828
-@node Advanced usage,Advanced usage357,13496
-@node Environment,420,15208
-@node Tapes,437,15769
-@node Problems,460,16768
-@node Concept Index,Concept Index473,17288
+@node Sample,166,7273
+@node Invoking gzip,Invoking gzip210,8829
+@node Advanced usage,Advanced usage357,13497
+@node Environment,420,15209
+@node Tapes,437,15770
+@node Problems,460,16769
+@node Concept Index,Concept Index473,17289
tex-src/texinfo.tex,30627
\def\texinfoversion{\texinfoversion26,1035
diff --git a/test/manual/etags/ETAGS.good_6 b/test/manual/etags/ETAGS.good_6
index 0a31ed078e8..86df93afab1 100644
--- a/test/manual/etags/ETAGS.good_6
+++ b/test/manual/etags/ETAGS.good_6
@@ -4297,13 +4297,13 @@ tex-src/gzip.texi,303
@node Top,62,2139
@node Copying,80,2652
@node Overview,83,2705
-@node Sample,166,7272
-@node Invoking gzip,Invoking gzip210,8828
-@node Advanced usage,Advanced usage357,13496
-@node Environment,420,15208
-@node Tapes,437,15769
-@node Problems,460,16768
-@node Concept Index,Concept Index473,17288
+@node Sample,166,7273
+@node Invoking gzip,Invoking gzip210,8829
+@node Advanced usage,Advanced usage357,13497
+@node Environment,420,15209
+@node Tapes,437,15770
+@node Problems,460,16769
+@node Concept Index,Concept Index473,17289
tex-src/texinfo.tex,30627
\def\texinfoversion{\texinfoversion26,1035