emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/android 69828fba287 1/2: Make sure Android builds are redumped u


From: Po Lu
Subject: feature/android 69828fba287 1/2: Make sure Android builds are redumped upon changes to shortlisp
Date: Wed, 19 Jul 2023 00:50:12 -0400 (EDT)

branch: feature/android
commit 69828fba2874e305079bf5f1a25834dbd620b2f3
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Make sure Android builds are redumped upon changes to shortlisp
    
    * build-aux/makecounter.sh: New script.
    * src/Makefile.in (abs_top_builddir): New variable.
    (BUILD_COUNTER_OBJ): Define to build-counter.o
    if compiling for Android.
    (build-counter.c): New target.  Generate this file using
    makecounter.sh upon changes to lisp.mk or shortlisp.
    (lisp.mk): Make and load relative to abs_top_builddir.
    (emacs$(EXEEXT)): Adjust acordingly.
    (mostlyclean): Remove build-counter.c.
---
 build-aux/makecounter.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
 src/Makefile.in          | 31 ++++++++++++++++++++++++++-----
 2 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/build-aux/makecounter.sh b/build-aux/makecounter.sh
new file mode 100755
index 00000000000..13ad5f485a2
--- /dev/null
+++ b/build-aux/makecounter.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Generate or update a C file containing an increasing counter
+# variable.
+#
+# Copyright (C) 2023 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/>.
+
+set -e
+
+curcount=
+if test -f "$1"; then
+    curcount=`cat "$1" | grep = | cut -d= -f2 \
+                 | sed -e 's/;//' -e 's/ //'`
+fi
+
+curcount=`expr 1 + $curcount 2>/dev/null || echo 0`
+
+cat > $1 <<EOF
+/* Generated automatically by makecounter.sh.  Do not edit! */
+
+#include <config.h>
+
+#ifdef HAVE_ANDROID
+#define EXPORT __attribute__ ((visibility ("default")))
+#endif /* HAVE_ANDROID */
+
+#ifdef EXPORT
+EXPORT
+#endif /* EXPORT */
+int counter = $curcount;
+EOF
diff --git a/src/Makefile.in b/src/Makefile.in
index 8cbdd67378c..36f3876f659 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -43,6 +43,10 @@ vpath %.c := $(srcdir)
 vpath %.h := $(srcdir)
 endif
 
+# abs_top_builddir is the name of the toplevel build directory under
+# cross-compiled builds.
+abs_top_builddir = @abs_top_builddir@
+
 CC = @CC@
 CXX = @CXX@
 CFLAGS = @CFLAGS@
@@ -510,9 +514,22 @@ PRE_ALLOC_OBJ=@PRE_ALLOC_OBJ@
 ## lastfile.o on Cygwin and MinGW, empty elsewhere.
 POST_ALLOC_OBJ=@POST_ALLOC_OBJ@
 
+## Builds using libemacs.so (Android) don't dump Emacs within this
+## Makefile, but on device.  Make sure the library hash changes for
+## each change in shortlisp by linking an object that changes
+## accordingly to it.
+BUILD_COUNTER_OBJ =
+ifeq ($(XCONFIGURE),android)
+BUILD_COUNTER_OBJ = build-counter.o
+
+# This file is then compiled into build-counter.so
+build-counter.c: $(abs_top_builddir)/src/lisp.mk $(shortlisp)
+       $(AM_V_GEN) $(top_srcdir)/build-aux/makecounter.sh $@
+endif
+
 ## List of object files that make-docfile should not be told about.
 otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(GMALLOC_OBJ) $(RALLOC_OBJ) \
-  $(POST_ALLOC_OBJ) $(WIDGET_OBJ) $(LIBOBJS)
+  $(POST_ALLOC_OBJ) $(WIDGET_OBJ) $(LIBOBJS) $(BUILD_COUNTER_OBJ)
 
 ## All object files linked into temacs.  $(VMLIMIT_OBJ) should be first.
 ## (On MinGW, firstfile.o should be before vm-limit.o.)
@@ -565,15 +582,19 @@ endif
 ## we need to remove leim-list, site-init, and site-load by hand.
 ## There's not much to choose between these two approaches,
 ## but the second one seems like it could be more future-proof.
+##
+## This list is placed in the toplevel build directory to prevent it
+## from being unnecessarily regenerated by the successive use of this
+## Makefile within cross/Makefile.
 shortlisp =
-lisp.mk: $(lispsource)/loadup.el
+$(abs_top_builddir)/src/lisp.mk: $(lispsource)/loadup.el
        ${AM_V_GEN}( printf 'shortlisp = \\\n'; \
        sed -n 's/^[ \t]*(load "\([^"]*\)".*/\1/p' $< | \
          sed -e 's/$$/.elc \\/' -e 's/\.el\.elc/.el/'; \
        echo "" ) > $@.tmp
        $(AM_V_at)mv -f $@.tmp $@
 
--include lisp.mk
+-include $(abs_top_builddir)/src/lisp.mk
 shortlisp_filter = leim/leim-list.el site-load.elc site-init.elc
 shortlisp := $(filter-out ${shortlisp_filter},${shortlisp})
 ## Place loaddefs.el first, so it gets generated first, since it is on
@@ -640,7 +661,7 @@ SYSTEM_TYPE = @SYSTEM_TYPE@
 ## since not all pieces are used on all platforms.  But DOC depends
 ## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here.
 emacs$(EXEEXT): temacs$(EXEEXT) \
-                lisp.mk $(etc)/DOC $(lisp) \
+                $(abs_top_builddir)/src/lisp.mk $(etc)/DOC $(lisp) \
                 $(lispsource)/international/charprop.el ${charsets}
 ifeq ($(SYSTEM_TYPE),cygwin)
        find ${top_builddir} -name '*.eln' | rebase -v -O -T -
@@ -808,7 +829,7 @@ ns-app: emacs$(EXEEXT) $(pdmp)
 
 mostlyclean:
        rm -f android-emacs libemacs.so
-       rm -f temacs$(EXEEXT) core ./*.core \#* ./*.o
+       rm -f temacs$(EXEEXT) core ./*.core \#* ./*.o build-counter.c
        rm -f dmpstruct.h
        rm -f emacs.pdmp
        rm -f ../etc/DOC



reply via email to

[Prev in Thread] Current Thread [Next in Thread]