]> git.eshelyaron.com Git - emacs.git/commitdiff
Document means of executing Emacs from unrelated Android applications
authorPo Lu <luangruo@yahoo.com>
Fri, 12 Jul 2024 03:59:09 +0000 (11:59 +0800)
committerEshel Yaron <me@eshelyaron.com>
Fri, 12 Jul 2024 18:00:08 +0000 (20:00 +0200)
* doc/emacs/android.texi (Android Environment): Document
significance, effect and purpose of EMACS_CLASS_PATH and
EMACS_LD_LIBRARY_PATH, and the utility of `pm path
org.gnu.emacs'.

(cherry picked from commit a5ef9e25680d490e2a453e5ed518aba8f4560b2d)

doc/emacs/android.texi

index cfa29d59f3601a1a0d870bcc42646a0f6bee9bd6..250e07d9279113cd229e1ce4cdb0252b921b4d3b 100644 (file)
@@ -364,17 +364,58 @@ consult the values of the variables @code{ctags-program-name},
 and @code{rcs2log-program-name}.
 @xref{Subprocess Creation,,, elisp, the Emacs Lisp Reference Manual}.
 
-  The @file{/assets} directory containing Emacs start-up files is
-meant to be inaccessible to processes not directly created by
-@code{zygote}, the system service responsible for starting
-applications.  Since required Lisp is found in the @file{/assets}
-directory, it would thus follow that it is not possible for Emacs to
-start itself as a subprocess.  A special binary named
-@command{libandroid-emacs.so} is provided with Emacs, which tries its
-best to start Emacs for the purpose of running Lisp in batch mode.
-However, the approach it takes was devised by reading Android source
-code, and is not sanctioned by the Android compatibility definition
-documents, so your mileage may vary.
+  The @file{/assets} directory containing Emacs start-up files is meant
+to be inaccessible to processes not directly created by @code{zygote},
+the system service responsible for starting applications.  Since
+required Lisp is found in the @file{/assets} directory, it would thus
+follow that it is not possible for Emacs to start itself as a
+subprocess.  A special binary named @command{libandroid-emacs.so} is
+provided with Emacs, which is installed into the library directory, and
+which tries its best to start Emacs for the purpose of running Lisp in
+batch mode.  The approach it takes was devised by reference to Android
+source code, and is not sanctioned by the Android compatibility
+definition documents, so your mileage may vary.
+
+@cindex EMACS_CLASS_PATH environment variable, Android
+  Even when the location of the @command{libandroid-emacs.so} command is
+known in advance, special configuration is required to run Emacs from
+elsewhere than a subprocess of an existing Emacs session, as it must be
+made to understand the location of resources and shared libraries in or
+extracted from the installed application package.  The OS command
+@command{pm path org.gnu.emacs} will print the location of the
+application package, and the adjacent @file{lib} directory will hold
+shared libraries extracted from the same, though the said command must
+be invoked in a peculiar manner to satisfy system restrictions on
+communication between pseudoterminal devices created by user
+applications and system services such as the package manager, which is
+to say, with the standard IO streams redirected to a real file or a
+pipe.  Such values, once established, must be specified in the
+environment variables @code{EMACS_CLASS_PATH} and
+@code{EMACS_LD_LIBRARY_PATH}, so that this sample shell script may be
+installed as @code{emacs} in any location that is accessible:
+
+@example
+#!/system/bin/sh
+
+package_name=`pm path org.gnu.emacs 2>/dev/null </dev/null \
+               | sed 's/^package://'`
+emacs=
+ld_path=
+EMACS_CLASS_PATH=$package_name
+
+for libdir in `dirname $package_name`/lib/*; do
+  ld_path=$@{ld_path:+$@{ld_path@}:@}$libdir
+  test -x "$libdir"/libandroid-emacs.so \
+    && emacs="$libdir"/libandroid-emacs.so
+done
+
+EMACS_LD_LIBRARY_PATH=$ld_path
+
+export EMACS_CLASS_PATH
+export EMACS_LD_LIBRARY_PATH
+test -x "$emacs" || exit 1
+exec $emacs "$@@"
+@end example
 
 @cindex call-process, Android
 @vindex android-use-exec-loader