Make binaries distributed with Emacs work on Android
authorPo Lu <luangruo@yahoo.com>
Tue, 24 Jan 2023 13:37:22 +0000 (21:37 +0800)
committerPo Lu <luangruo@yahoo.com>
Tue, 24 Jan 2023 13:37:22 +0000 (21:37 +0800)
* doc/lispref/processes.texi (Subprocess Creation): Document
variables containing program names.
* etc/NEWS: Document new variables.
* java/Makefile.in (CROSS_BINS): Add missing etags binary.
* lisp/cedet/semantic/db-ebrowse.el
(semanticdb-create-ebrowse-database):
* lisp/gnus/mail-source.el (mail-source-movemail-program):
* lisp/hexl.el (hexl-program):
* lisp/htmlfontify.el (hfy-etags-bin):
* lisp/ielm.el (inferior-emacs-lisp-mode):
* lisp/mail/rmail.el (rmail-autodetect):
(rmail-insert-inbox-text):
* lisp/org/org-ctags.el (org-ctags-path-to-ctags):
* lisp/progmodes/cperl-mode.el (cperl-etags):
* lisp/speedbar.el (speedbar-fetch-etags-command):
* lisp/textmodes/reftex-global.el (reftex-create-tags-file): Use
new variables.
* src/callproc.c (syms_of_callproc): New variables naming
binaries redistributed with Emacs.

14 files changed:
doc/lispref/processes.texi
etc/NEWS
java/Makefile.in
lisp/cedet/semantic/db-ebrowse.el
lisp/gnus/mail-source.el
lisp/hexl.el
lisp/htmlfontify.el
lisp/ielm.el
lisp/mail/rmail.el
lisp/org/org-ctags.el
lisp/progmodes/cperl-mode.el
lisp/speedbar.el
lisp/textmodes/reftex-global.el
src/callproc.c

index 50e67475d8ebc0adb09ce3c146e4bb27bf0c1e1d..aa71e3ee131e656273f074ed6c4138a074ca0d83 100644 (file)
@@ -185,6 +185,24 @@ respective remote host.  In case of a local @code{default-directory},
 the function returns just the value of the variable @code{exec-path}.
 @end defun
 
+@cindex programs distributed with Emacs, starting
+@vindex ctags-program-name
+@vindex etags-program-name
+@vindex hexl-program-name
+@vindex emacsclient-program-name
+@vindex movemail-program-name
+@vindex ebrowse-program-manem
+  When starting a program that is part of the Emacs distribution,
+you must take into account that the program may have been renamed in
+order to comply with executable naming restrictions present on the
+system.
+
+  Instead of starting @command{ctags}, for example, you should specify
+the value of @code{ctags-program-name} instead.  Likewise, instead of
+starting @command{movemail}, you must start
+@code{movemail-program-name}, and the same goes for @command{etags},
+@command{hexl}, @command{emacsclient}, and @command{ebrowse}.
+
 @node Shell Arguments
 @section Shell Arguments
 @cindex arguments for shell commands
index 3a52492fd19c14441f7cc2d992503cee6bca7446..40f4364d8f64353c950a347afacbfc82ae68b490 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -238,6 +238,14 @@ This user option has been obsoleted in Emacs 27, use
 \f
 * Lisp Changes in Emacs 30.1
 
++++
+** New variables describing the names of built in programs.
+The new variables 'ctags-program-name', 'ebrowse-program-name',
+'etags-program-name', 'hexl-program-name', 'emacsclient-program-name'
+and 'movemail-program-name' should be used instead of "ctags",
+"ebrowse", "etags", "hexl", and "emacsclient", when starting one of
+these built in programs in a subprocess.
+
 +++
 ** 'x-popup-menu' now understands touch screen events.
 When a 'touchscreen-begin' or 'touchscreen-end' event is passed as the
index b5e0cd7bb563bce049a01523ae7055f4aa13084e..b32b2442305968d551d61959d18c193a5f438b49 100644 (file)
@@ -69,6 +69,7 @@ APK_NAME = emacs-$(version)-$(ANDROID_MIN_SDK)-$(ANDROID_ABI).apk
 #  lib/$(ANDROID_ABI)/libemacs.so
 #  lib/$(ANDROID_ABI)/libandroid-emacs.so
 #  lib/$(ANDROID_ABI)/libctags.so
+#  lib/$(ANDROID_ABI)/libetags.so
 #  lib/$(ANDROID_ABI)/libhexl.so
 #  lib/$(ANDROID_ABI)/libmovemail.so
 #  lib/$(ANDROID_ABI)/librcs2log.so
@@ -83,7 +84,8 @@ all: $(APK_NAME)
 # Binaries to cross-compile.
 CROSS_BINS = ../cross/src/android-emacs ../cross/lib-src/ctags \
             ../cross/lib-src/hexl ../cross/lib-src/movemail    \
-            ../cross/lib-src/ebrowse ../cross/lib-src/emacsclient
+            ../cross/lib-src/ebrowse ../cross/lib-src/emacsclient \
+            ../cross/lib-src/etags
 
 # Libraries to cross-compile.
 CROSS_LIBS = ../cross/src/libemacs.so
index f8ea73cbdde5a4871ef9609637fcf16f4afe9903..3e54b9e76cf34308da7244ab0e88c93365dc7540 100644 (file)
@@ -158,7 +158,8 @@ is specified by `semanticdb-default-save-directory'."
       ;; Call the EBROWSE command.
       (message "Creating ebrowse file: %s ..." savein)
       (call-process-region (point-min) (point-max)
-                          "ebrowse" nil "*EBROWSE OUTPUT*" nil
+                          ebrowse-program-name
+                           nil "*EBROWSE OUTPUT*" nil
                           (concat "--output-file=" savein)
                           "--very-verbose")
       )
index 639a29582b33b3db5c52fe798066cb4a13df8241..82cb7ddd8ad6eb682174a7bbb71cfa808482c480 100644 (file)
@@ -285,7 +285,7 @@ number."
   "Number of idle seconds to wait before checking for new mail."
   :type 'number)
 
-(defcustom mail-source-movemail-program "movemail"
+(defcustom mail-source-movemail-program movemail-program-name
   "If non-nil, name of program for fetching new mail."
   :version "26.2"
   :type '(choice (const nil) string))
index bb57f4ac4c30f7c2a4ee220d2c0d600bb9a31996..5fa09459a465682041a63a776881faebc829bd7a 100644 (file)
@@ -60,7 +60,7 @@
                  (const 64))
   :version "24.3")
 
-(defcustom hexl-program "hexl"
+(defcustom hexl-program hexl-program-name
   "The program that will hexlify and dehexlify its stdin.
 `hexl-program' will always be concatenated with `hexl-options'
 and \"-de\" when dehexlifying a buffer."
index 1ab33cc641126e0b8921225b2b1c097cb4e5e5b8..a06387687b9bfe39926141177850ee6f3b0052ab 100644 (file)
@@ -308,13 +308,14 @@ done;")
   :tag   "etags-cmd-alist"
   :type  '(alist :key-type (string) :value-type (string)))
 
-(defcustom hfy-etags-bin "etags"
+(defcustom hfy-etags-bin etags-program-name
   "Location of etags binary (we begin by assuming it's in your path).
 
 Note that if etags is not in your path, you will need to alter the shell
 commands in `hfy-etags-cmd-alist'."
   :tag   "etags-bin"
-  :type  '(file))
+  :type  '(file)
+  :version "30.1")
 
 (defcustom hfy-shell-file-name "/bin/sh"
   "Shell (Bourne or compatible) to invoke for complex shell operations."
index 5c370733c055b38f767bfe48991436a52d31178c..1eeec5fbb84429b9fcd371a30e86f8bd1350a5ab 100644 (file)
@@ -605,7 +605,7 @@ Customized bindings may be defined in `ielm-map', which currently contains:
     ;; Was cat, but on non-Unix platforms that might not exist, so
     ;; use hexl instead, which is part of the Emacs distribution.
     (condition-case nil
-        (start-process "ielm" (current-buffer) "hexl")
+        (start-process "ielm" (current-buffer) hexl-program-name)
       (file-error (start-process "ielm" (current-buffer) "cat")))
     (set-process-query-on-exit-flag (ielm-process) nil)
     (goto-char (point-max))
index 659649b5d4281c208e07554afc1094d524211fd7..0572283b6091ad0aa0287de9942848978b67321c 100644 (file)
@@ -263,7 +263,7 @@ Otherwise, look for `movemail' in the directories in
          ;; assuming it would work.
          ;; https://lists.gnu.org/r/bug-gnu-emacs/2008-02/msg00087.html
          (let ((progname (expand-file-name
-                          (concat "movemail"
+                          (concat movemail-program-name
                                   (if (memq system-type '(ms-dos windows-nt))
                                       ".exe")) dir)))
            (when (and (not (file-directory-p progname))
@@ -1989,7 +1989,9 @@ Value is the size of the newly read mail after conversion."
                 (buffer-disable-undo errors)
                 (let ((args
                        (append
-                        (list (or rmail-movemail-program "movemail") nil errors nil)
+                        (list (or rmail-movemail-program
+                                   movemail-program-name)
+                               nil errors nil)
                         (if rmail-preserve-inbox
                             (list "-p")
                           nil)
index 5dd2bfd59cd02417c043c6462f829c70713275c2..990214f411705a47eb98790776f97ef7fc00ac37 100644 (file)
@@ -156,7 +156,9 @@ Format is: /REGEXP/TAGNAME/FLAGS,TAGTYPE/
 See the ctags documentation for more information.")
 
 (defcustom org-ctags-path-to-ctags
-  (if (executable-find "ctags-exuberant") "ctags-exuberant" "ctags")
+  (if (executable-find "ctags-exuberant")
+      "ctags-exuberant"
+    ctags-program-name)
   "Name of the ctags executable file."
   :version "24.1"
   :type 'file)
index 412283f34885b8093aef1528cd3cc1499ec081f0..9f79834f9647181f77c6007e50cecda9b838bc1e 100644 (file)
@@ -6533,7 +6533,7 @@ in subdirectories too."
   ;; of etags has been commented out in the menu since ... well,
   ;; forever.  So, let's just stick to ASCII here. -- haj, 2021-09-14
   (interactive)
-  (let ((cmd "etags")
+  (let ((cmd etags-program-name)
        (args `("-l" "none" "-r"
                ;;                        1=fullname  2=package?             3=name                       4=proto?             5=attrs? (VERY APPROX!)
                ,(concat
index 60113ca141037c0f7b3a7c9ebf9ec238b0632851..2f1d9d22110f02eec502ca1bf9ad24a8fda9b18d 100644 (file)
@@ -3532,7 +3532,7 @@ to be at the beginning of a line in the etags buffer.
 
 This variable is ignored if `speedbar-use-imenu-flag' is non-nil.")
 
-(defcustom speedbar-fetch-etags-command "etags"
+(defcustom speedbar-fetch-etags-command etags-program-name
   "Command used to create an etags file.
 This variable is ignored if `speedbar-use-imenu-flag' is t."
   :group 'speedbar
index acf0891432f4f7d76be57e237ef7bd5335a70274..b8b0ae6a061daae10648d43dddba1e091b953d16 100644 (file)
@@ -39,8 +39,10 @@ The TAGS file is also immediately visited with `visit-tags-table'."
   (reftex-access-scan-info current-prefix-arg)
   (let* ((master (reftex-TeX-master-file))
          (files  (reftex-all-document-files))
-         (cmd    (format "etags %s" (mapconcat #'shell-quote-argument
-                                              files " "))))
+         (cmd    (format "%s %s"
+                         etags-program-name
+                         (mapconcat #'shell-quote-argument
+                                   files " "))))
     (with-current-buffer (reftex-get-file-buffer-force master)
       (message "Running etags to create TAGS file...")
       (shell-command cmd)
index 5e1e1a8cc0a0527d769bb42e6bb93d4f275f0371..85895a7d9f21bb45216ac0444890af1aa76c4d71 100644 (file)
@@ -2110,6 +2110,69 @@ use.
 See `setenv' and `getenv'.  */);
   Vprocess_environment = Qnil;
 
+  DEFVAR_LISP ("ctags-program-name", Vctags_program_name,
+    doc: /* Name of the `ctags' program distributed with Emacs.
+Use this instead of calling `ctags' directly, as `ctags' may have been
+renamed to comply with executable naming restrictions on the system.  */);
+#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
+  Vctags_program_name = build_pure_c_string ("ctags");
+#else
+  Vctags_program_name = build_pure_c_string ("libctags.so");
+#endif
+
+  DEFVAR_LISP ("etags-program-name", Vetags_program_name,
+    doc: /* Name of the `etags' program distributed with Emacs.
+Use this instead of calling `etags' directly, as `etags' may have been
+renamed to comply with executable naming restrictions on the system.  */);
+#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
+  Vetags_program_name = build_pure_c_string ("etags");
+#else
+  Vetags_program_name = build_pure_c_string ("libetags.so");
+#endif
+
+  DEFVAR_LISP ("hexl-program-name", Vhexl_program_name,
+    doc: /* Name of the `hexl' program distributed with Emacs.
+Use this instead of calling `hexl' directly, as `hexl' may have been
+renamed to comply with executable naming restrictions on the system.  */);
+#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
+  Vhexl_program_name = build_pure_c_string ("hexl");
+#else
+  Vhexl_program_name = build_pure_c_string ("libhexl.so");
+#endif
+
+  DEFVAR_LISP ("emacsclient-program-name", Vemacsclient_program_name,
+    doc: /* Name of the `emacsclient' program distributed with Emacs.
+Use this instead of calling `emacsclient' directly, as `emacsclient'
+may have been renamed to comply with executable naming restrictions on
+the system.  */);
+#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
+  Vemacsclient_program_name = build_pure_c_string ("emacsclient");
+#else
+  Vemacsclient_program_name = build_pure_c_string ("libemacsclient.so");
+#endif
+
+  DEFVAR_LISP ("movemail-program-name", Vmovemail_program_name,
+    doc: /* Name of the `movemail' program distributed with Emacs.
+Use this instead of calling `movemail' directly, as `movemail'
+may have been renamed to comply with executable naming restrictions on
+the system.  */);
+#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
+  Vmovemail_program_name = build_pure_c_string ("movemail");
+#else
+  Vmovemail_program_name = build_pure_c_string ("libmovemail.so");
+#endif
+
+  DEFVAR_LISP ("ebrowse-program-name", Vebrowse_program_name,
+    doc: /* Name of the `ebrowse' program distributed with Emacs.
+Use this instead of calling `ebrowse' directly, as `ebrowse'
+may have been renamed to comply with executable naming restrictions on
+the system.  */);
+#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
+  Vebrowse_program_name = build_pure_c_string ("ebrowse");
+#else
+  Vebrowse_program_name = build_pure_c_string ("libebrowse.so");
+#endif
+
   defsubr (&Scall_process);
   defsubr (&Sgetenv_internal);
   defsubr (&Scall_process_region);