[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 822c98a 1/3: Merge from origin/emacs-27
From: |
Glenn Morris |
Subject: |
master 822c98a 1/3: Merge from origin/emacs-27 |
Date: |
Fri, 27 Dec 2019 10:55:04 -0500 (EST) |
branch: master
commit 822c98a4426f852b2753f607538093bf20e61add
Merge: 4fff3ed 8aad80d
Author: Glenn Morris <address@hidden>
Commit: Glenn Morris <address@hidden>
Merge from origin/emacs-27
8aad80d661 Fix installer build
47a73e3e14 Update Windows build documentation
cd55984153 Calc: add missing dynamic variable declarations
e8aa6f19e9 * doc/emacs/buffers.texi (Kill Buffer): Improve indexing.
ccd7cd2c51 Speed up dired-do-find-regexp
7edb1f0773 ; Remove outdated declarations
6ab40c1a51 ; Clarify the assumption
be38e39fcc project--find-regexp-in-files: Support remote files
21c3020fce Document some restrictions for module functions.
e1ce9f3423 Don't recommend using 'module-load' for loading modules.
03f962a486 Port x_get_monitor_attributes_fallback to !HAVE_GTK3
0b32f59764 Fix compilation warning in gnus-start.el
---
admin/nt/dist-build/README-scripts | 53 +++++++++++++++++++++++++++++++++++---
admin/nt/dist-build/build-zips.sh | 14 ++++++----
doc/emacs/buffers.texi | 2 ++
doc/lispref/internals.texi | 20 ++++++++++++--
doc/lispref/loading.texi | 6 +++++
lisp/calc/calc-alg.el | 15 +++++++++++
lisp/dired-aux.el | 21 ++++++++++-----
lisp/gnus/gnus-start.el | 1 -
lisp/gnus/gnus-util.el | 23 ++++++++---------
lisp/progmodes/elisp-mode.el | 2 --
lisp/progmodes/project.el | 9 ++++++-
src/xfns.c | 2 --
test/lisp/calc/calc-tests.el | 15 +++++++++++
13 files changed, 147 insertions(+), 36 deletions(-)
diff --git a/admin/nt/dist-build/README-scripts
b/admin/nt/dist-build/README-scripts
index 1c62a86..4c3554e 100644
--- a/admin/nt/dist-build/README-scripts
+++ b/admin/nt/dist-build/README-scripts
@@ -68,7 +68,8 @@ uploaded.
Build Process
-------------
-For each major version:
+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
@@ -78,9 +79,9 @@ To do this:
Update msys to the latest version with `pacman -Syu`.
-Then run build-dep-zips.py, in this directory. Three zips will be
-created, containing the 64bit and 32bit dependencies, as well as the
-source for these.
+Then run build-dep-zips.py, in the ~/emacs-build/deps directory. Three
+zips will be created, containing the 64bit and 32bit dependencies, as
+well as the source for these.
For emacs release or pre-test version:
@@ -90,3 +91,47 @@ 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. Three
+zips will be created, containing the 64bit and 32bit 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 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.
diff --git a/admin/nt/dist-build/build-zips.sh
b/admin/nt/dist-build/build-zips.sh
index cff6fde..d8cbee3 100755
--- a/admin/nt/dist-build/build-zips.sh
+++ b/admin/nt/dist-build/build-zips.sh
@@ -160,23 +160,27 @@ while getopts "36gb:hnsiV:" opt; do
esac
done
-if [ -z $VERSION ];
+
+## ACTUAL_VERSION is the version declared by emacs
+if [ -z $ACTUAL_VERSION ];
then
- VERSION=`
+ ACTUAL_VERSION=`
sed -n 's/^AC_INIT(GNU Emacs,[ ]*\([^ ,)]*\).*/\1/p' <
../../../configure.ac
`
fi
-if [ -z $VERSION ];
+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)"
-## ACTUAL VERSION is the version declared by emacs
-ACTUAL_VERSION=$VERSION
## VERSION includes the word snapshot if necessary
VERSION=$VERSION$SNAPSHOT
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi
index b5a1741..7b4e070 100644
--- a/doc/emacs/buffers.texi
+++ b/doc/emacs/buffers.texi
@@ -308,6 +308,8 @@ Offer to kill all buffers matching a regular expression.
@findex kill-buffer
@kindex C-x k
+@cindex killing unsaved buffers
+@cindex unsaved buffers, killing
@kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you
specify in the minibuffer. The default, used if you type just
@key{RET} in the minibuffer, is to kill the current buffer. If you
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index 896738c..75e8345 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -1408,6 +1408,22 @@ the function to that symbol. Note that it is possible
to use
@code{fset} instead of @code{defalias}; the differences are described
in @ref{Defining Functions, defalias}.
+Module functions including the @code{emacs_module_init} function
+(@pxref{module initialization function}) may only interact with Emacs
+by calling environment functions from some live @code{emacs_env}
+pointer while being called directly or indirectly from Emacs. In
+other words, if a module function wants to call Lisp functions or
+Emacs primitives, convert @code{emacs_value} objects to and from C
+datatypes (@pxref{Module Values}), or interact with Emacs in any other
+way, some call from Emacs to @code{emacs_module_init} or to a module
+function must be in the callstack. Module function may not interact
+with Emacs while garbage collection is running; @pxref{Garbage
+Collection}. They may only interact with Emacs from Lisp interpreter
+threads (including the main thread) created by Emacs; @pxref{Threads}.
+The @kbd{--module-assertions} command-line option can detect some
+violations of the above requirements. @xref{Initial Options,,,emacs,
+The GNU Emacs Manual}.
+
Using the module @acronym{API}, it is possible to define more complex
function and data types: interactive functions, inline functions,
macros, etc. However, the resulting C code will be cumbersome and
@@ -1428,8 +1444,8 @@ following simple Lisp wrapper:
@end lisp
The Lisp package which goes with your module could then load the
-module using the @code{module-load} primitive (@pxref{Dynamic
-Modules}) when the package is loaded into Emacs.
+module using the @code{load} primitive (@pxref{Dynamic Modules}) when
+the package is loaded into Emacs.
@node Module Values
@subsection Conversion Between Lisp and Module Values
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index fdd8af1..821e67e 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -1220,6 +1220,12 @@ during the initialization. If the initialization
succeeds,
@code{module-load} returns @code{t}. Note that @var{file} must
already have the proper file-name extension, as this function doesn't
try looking for files with known extensions, unlike @code{load}.
+
+Unlike @code{load}, @code{module-load} doesn't record the module in
+@code{load-history}, doesn't print any messages, and doesn't protect
+against recursive loads. Most users should therefore use @code{load},
+@code{load-file}, @code{load-library}, or @code{require} instead of
+@code{module-load}.
@end defun
Loadable modules in Emacs are enabled by using the
diff --git a/lisp/calc/calc-alg.el b/lisp/calc/calc-alg.el
index c3efeee..4905a45 100644
--- a/lisp/calc/calc-alg.el
+++ b/lisp/calc/calc-alg.el
@@ -30,6 +30,8 @@
;;; Algebra commands.
+(defvar math-simplify-only)
+
(defun calc-alg-evaluate (arg)
(interactive "p")
(calc-slow-wrapper
@@ -38,6 +40,8 @@
(calc-modify-simplify-mode arg)
(calc-enter-result 1 "dsmp" (calc-top 1))))))
+(defvar calc-simplify-mode)
+
(defun calc-modify-simplify-mode (arg)
(if (= (math-abs arg) 2)
(setq calc-simplify-mode 'alg)
@@ -67,6 +71,8 @@
(calc-with-default-simplification
(calc-enter-result 1 "esmp" (math-simplify-extended (calc-top-n 1))))))
+(defvar math-expand-formulas)
+
(defun calc-expand-formula (arg)
(interactive "p")
(calc-slow-wrapper
@@ -160,6 +166,8 @@
(calc-binary-op "pgcd" 'calcFunc-pgcd arg)))
+(defvar calc-poly-div-remainder)
+
(defun calc-poly-div (arg)
(interactive "P")
(calc-slow-wrapper
@@ -303,6 +311,7 @@
(math-beforep (car a) (car b)))))
(t (string-lessp (car a) (car b)))))
+(defvar math-living-dangerously)
(defsubst math-simplify-extended (a)
(let ((math-living-dangerously t))
@@ -363,6 +372,9 @@
;; math-normalize-error is declared in calc.el.
(defvar math-normalize-error)
+(defvar math-simplifying)
+(defvar calc-angle-mode)
+
(defun math-simplify (top-expr)
(let ((math-simplifying t)
(calc-angle-mode (if (calc-input-angle-units top-expr)
@@ -677,6 +689,8 @@ and should return the simplified expression to use (or
nil)."
(math-make-frac (math-gcd (nth 1 a) (nth 1 b))
(math-gcd (nth 2 a) (nth 2 b)))))))
+(defvar calc-prefer-frac)
+
(math-defsimplify %
(and (Math-realp (nth 2 expr))
(Math-posp (nth 2 expr))
@@ -1671,6 +1685,7 @@ and should return the simplified expression to use (or
nil)."
(defvar math-is-poly-degree)
(defvar math-is-poly-loose)
(defvar math-var)
+(defvar math-poly-base-variable)
(defun math-is-polynomial (expr var &optional degree loose)
(let* ((math-poly-base-variable (if loose
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index fb1ad62..ce967b0 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -2957,6 +2957,8 @@ with the command \\[tags-loop-continue]."
(declare-function xref--show-xrefs "xref")
(declare-function xref-query-replace-in-results "xref")
+(declare-function project--files-in-directory "project")
+(declare-function project--find-regexp-in-files "project")
;;;###autoload
(defun dired-do-find-regexp (regexp)
@@ -2975,19 +2977,24 @@ REGEXP should use constructs supported by your local
`grep' command."
(require 'xref)
(defvar grep-find-ignored-files)
(declare-function rgrep-find-ignored-directories "grep" (dir))
- (let* ((files (dired-get-marked-files nil nil nil nil t))
+ (let* ((marks (dired-get-marked-files nil nil nil nil t))
(ignores (nconc (mapcar
#'file-name-as-directory
(rgrep-find-ignored-directories default-directory))
grep-find-ignored-files))
(fetcher
(lambda ()
- (let ((xrefs (mapcan
- (lambda (file)
- (xref-collect-matches regexp "*" file
- (and (file-directory-p file)
- ignores)))
- files)))
+ (let (files xrefs)
+ (mapc
+ (lambda (mark)
+ (if (file-directory-p mark)
+ (setq files (nconc
+ (project--files-in-directory mark ignores
"*")
+ files))
+ (push mark files)))
+ (nreverse marks))
+ (setq xrefs
+ (project--find-regexp-in-files regexp files))
(unless xrefs
(user-error "No matches for: %s" regexp))
xrefs))))
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index 409fd44..784a4e4 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -2871,7 +2871,6 @@ SPECIFIC-VARIABLES, or those in `gnus-variable-list'."
(nth 1 (gethash g gnus-newsrc-hashtb)))
(delete "dummy.group" gnus-group-list)))
(let* ((print-quoted t)
- (print-readably t)
(print-escape-multibyte nil)
(print-escape-nonascii t)
(print-length nil)
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 42021d3..ce5b2a1 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -690,13 +690,12 @@ yield \"nnimap:yxa\"."
(defmacro gnus-bind-print-variables (&rest forms)
"Bind print-* variables and evaluate FORMS.
-This macro is used with `prin1', `pp', etc. in order to ensure printed
-Lisp objects are loadable. Bind `print-quoted' and `print-readably'
-to t, and `print-escape-multibyte', `print-escape-newlines',
+This macro is used with `prin1', `pp', etc. in order to ensure
+printed Lisp objects are loadable. Bind `print-quoted' to t, and
+`print-escape-multibyte', `print-escape-newlines',
`print-escape-nonascii', `print-length', `print-level' and
`print-string-length' to nil."
`(let ((print-quoted t)
- (print-readably t)
;;print-circle
;;print-continuous-numbering
print-escape-multibyte
@@ -710,26 +709,26 @@ to t, and `print-escape-multibyte',
`print-escape-newlines',
(defun gnus-prin1 (form)
"Use `prin1' on FORM in the current buffer.
-Bind `print-quoted' and `print-readably' to t, and `print-length' and
-`print-level' to nil. See also `gnus-bind-print-variables'."
+Bind `print-quoted' to t, and `print-length' and `print-level' to
+nil. See also `gnus-bind-print-variables'."
(gnus-bind-print-variables (prin1 form (current-buffer))))
(defun gnus-prin1-to-string (form)
"The same as `prin1'.
-Bind `print-quoted' and `print-readably' to t, and `print-length' and
-`print-level' to nil. See also `gnus-bind-print-variables'."
+Bind `print-quoted' to t, and `print-length' and `print-level' to
+nil. See also `gnus-bind-print-variables'."
(gnus-bind-print-variables (prin1-to-string form)))
(defun gnus-pp (form &optional stream)
"Use `pp' on FORM in the current buffer.
-Bind `print-quoted' and `print-readably' to t, and `print-length' and
-`print-level' to nil. See also `gnus-bind-print-variables'."
+Bind `print-quoted' to t, and `print-length' and `print-level' to
+nil. See also `gnus-bind-print-variables'."
(gnus-bind-print-variables (pp form (or stream (current-buffer)))))
(defun gnus-pp-to-string (form)
"The same as `pp-to-string'.
-Bind `print-quoted' and `print-readably' to t, and `print-length' and
-`print-level' to nil. See also `gnus-bind-print-variables'."
+Bind `print-quoted' to t, and `print-length' and `print-level' to
+nil. See also `gnus-bind-print-variables'."
(gnus-bind-print-variables (pp-to-string form)))
(defun gnus-make-directory (directory)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 7705761..9cd852b 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -630,9 +630,7 @@ functions are annotated with \"<f>\" via the
;;; Xref backend
-(declare-function xref-make-bogus-location "xref" (message))
(declare-function xref-make "xref" (summary location))
-(declare-function xref-collect-references "xref" (symbol dir))
(defun elisp--xref-backend () 'elisp)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index e45cb5d..e21600f 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -450,6 +450,10 @@ pattern to search for."
(status nil)
(hits nil)
(xrefs nil)
+ ;; Support for remote files. The assumption is that, if the
+ ;; first file is remote, they all are, and on the same host.
+ (dir (file-name-directory (car files)))
+ (remote-id (file-remote-p dir))
;; 'git ls-files' can output broken symlinks.
(command (format "xargs -0 grep %s -snHE -e %s"
(if (and case-fold-search
@@ -457,10 +461,13 @@ pattern to search for."
"-i"
"")
(shell-quote-argument (xref--regexp-to-extended
regexp)))))
+ (when remote-id
+ (setq files (mapcar #'file-local-name files)))
(with-current-buffer output
(erase-buffer)
(with-temp-buffer
(insert (mapconcat #'identity files "\0"))
+ (setq default-directory dir)
(setq status
(project--process-file-region (point-min)
(point-max)
@@ -478,7 +485,7 @@ pattern to search for."
(buffer-substring (point-min) (line-end-position))))
(while (re-search-forward grep-re nil t)
(push (list (string-to-number (match-string line-group))
- (match-string file-group)
+ (concat remote-id (match-string file-group))
(buffer-substring-no-properties (point)
(line-end-position)))
hits)))
(setq xrefs (xref--convert-hits (nreverse hits) regexp))
diff --git a/src/xfns.c b/src/xfns.c
index 47aa196..0ce1e73 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -4576,7 +4576,6 @@ On MS Windows, this just returns nil. */)
Return false if and only if the workarea information cannot be
obtained via the _NET_WORKAREA root window property. */
-#ifndef HAVE_GTK3
static bool
x_get_net_workarea (struct x_display_info *dpyinfo, XRectangle *rect)
{
@@ -4634,7 +4633,6 @@ x_get_net_workarea (struct x_display_info *dpyinfo,
XRectangle *rect)
return result;
}
-#endif
#ifndef USE_GTK
diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el
index 3f5adce..33e6b14 100644
--- a/test/lisp/calc/calc-tests.el
+++ b/test/lisp/calc/calc-tests.el
@@ -318,6 +318,21 @@ An existing calc stack is reused, otherwise a new one is
created."
'(vec (calcFunc-eq (var x var-x) 3)
(calcFunc-eq (var y var-y) 0)))))
+(ert-deftest calc-poly-div ()
+ "Test polynomial division, and that the remainder is recorded in the trail."
+ (with-current-buffer (calc-trail-buffer)
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+
+ (calc-eval "2x**3+1" 'push)
+ (calc-eval "x**2+2x" 'push)
+ (calc-poly-div nil)
+ (let ((tos (calc-top-n 1))
+ (trail (buffer-string)))
+ (calc-pop 0)
+ (should (equal tos '(- (* 2 (var x var-x)) 4)))
+ (should (equal trail "pdiv 2 * x - 4\nprem 8 * x + 1\n"))))))
+
(provide 'calc-tests)
;;; calc-tests.el ends here