]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve Android configury
authorPo Lu <luangruo@yahoo.com>
Fri, 24 Feb 2023 14:25:48 +0000 (22:25 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 24 Feb 2023 14:25:48 +0000 (22:25 +0800)
* configure.ac (JAVA_PUSH_LINT): New macro.
(JAVAFLAGS): New variable.  Check for various lint flags and
macros and enable them.
* java/Makefile.in (ANDROID_ABI):
* java/org/gnu/emacs/EmacsSdk7FontDriver.java: Remove compiler
warning.

configure.ac
java/Makefile.in
java/org/gnu/emacs/EmacsSdk7FontDriver.java

index 715d87900266e83eab521be9e772ee5d5bba47bc..67ee0a1c413c0f468dc58d5bb6be712586ed426b 100644 (file)
@@ -739,6 +739,32 @@ AC_ARG_ENABLE([build-details],
   [test "$enableval" = no && BUILD_DETAILS=--no-build-details])
 AC_SUBST([BUILD_DETAILS])
 
+# JAVA_PUSH_LINT(OPT)
+# -------------------
+# Check if javac supports the diagnostic flag -Xlint:OPT.
+# If it does, add it to JAVAFLAGS.
+
+AC_DEFUN([JAVA_PUSH_LINT],
+[
+  AC_CACHE_CHECK([whether Java compiler accepts -Xlint:$1],
+    [emacs_cv_javac_knows_lint_$1],
+    AS_IF([rm -f conftest.class
+cat << EOF > conftest.java
+
+class conftest
+{
+
+}
+
+EOF
+("$JAVAC" -Xlint:$1 conftest.java 2>&AS_MESSAGE_LOG_FD) \
+  && rm -f conftest.class], [emacs_cv_javac_knows_lint_$1=yes],
+     [emacs_cv_javac_knows_lint_$1=no]))
+
+  AS_IF([test "$emacs_cv_javac_knows_lint_$1" = "yes"],
+    [JAVAFLAGS="$JAVAFLAGS -Xlint:$1"])
+])
+
 # Start Android configuration.  This is done in three steps:
 
 # First, the SDK tools needed to build the Android package on the host
@@ -760,6 +786,7 @@ ZIPALIGN=
 DX=
 ANDROID_JAR=
 ANDROID_ABI=
+JAVAFLAGS=
 
 # This is a list of Makefiles that have alternative versions for
 # Android.
@@ -807,7 +834,7 @@ specify its location before configuring Emacs, like so:
   JARSIGNER=/opt/jdk/bin/jarsigner ./configure --with-android])
   fi
 
-  AC_CACHE_CHECK([whether or not the Java compiler works],
+  AC_CACHE_CHECK([whether the Java compiler works],
     [emacs_cv_working_javac],
     AS_IF([rm -f conftest.class
 cat << EOF > conftest.java
@@ -836,7 +863,7 @@ EOF
 a valid path to android.jar.  See config.log for more details.])
   fi
 
-  AC_CACHE_CHECK([whether or not android.jar is new enough],
+  AC_CACHE_CHECK([whether android.jar is new enough],
     [emacs_cv_android_s_or_later],
     AS_IF([rm -f conftest.class
 cat << EOF > conftest.java
@@ -859,8 +886,52 @@ EOF
 Android 13 (Tiramisu) or later.])
   fi
 
+  dnl See if the Java compiler supports the `--release' option which
+  dnl makes it check for and prevent using features introduced after
+  dnl Java 1.7.
+
+  AC_CACHE_CHECK([whether javac accepts --release 7],
+    [emacs_cv_javac_release_7], AS_IF([rm -f conftest.class
+cat << EOF > conftest.java
+
+class conftest
+{
+
+}
+
+EOF
+("$JAVAC" --release 7 conftest.java 2>&AS_MESSAGE_LOG_FD) \
+  && rm -f conftest.class],
+      [emacs_cv_javac_release_7=yes],
+      [emacs_cv_javac_release_7=no]))
+
+  if test "$emacs_cv_javac_release_7" = "yes"; then
+    JAVAFLAGS="$JAVAFLAGS --release 7"
+  else
+    dnl If not, just make sure the generated bytecode is correct.
+    JAVAFLAGS="$JAVAFLAGS -target 1.7 -source 1.7"
+  fi
+
+  dnl Enable some useful Java linting options.
+  JAVA_PUSH_LINT([deprecation])
+  JAVA_PUSH_LINT([cast])
+  JAVA_PUSH_LINT([divzero])
+  JAVA_PUSH_LINT([nonempty])
+  JAVA_PUSH_LINT([empty])
+  JAVA_PUSH_LINT([finally])
+  JAVA_PUSH_LINT([overrides])
+  JAVA_PUSH_LINT([path])
+  JAVA_PUSH_LINT([serial])
+  JAVA_PUSH_LINT([unchecked])
+
+  # Get the name of the android.jar file.
   ANDROID_JAR="$with_android"
 
+  dnl Set up the class path to include android.jar, along with the cwd
+  dnl (which is $(top_builddir)/java.)
+  JAVAFLAGS="$JAVAFLAGS -classpath \"$ANDROID_JAR:.\""
+  AC_SUBST([JAVAFLAGS])
+
   AC_PATH_PROGS([AAPT], [aapt], [], "${SDK_BUILD_TOOLS}:$PATH")
   if test "$AAPT" = ""; then
     AC_MSG_ERROR([The Android asset packaging tool was not found.
index af44d551701935e386de68d5033b10a5a4633f9f..7ba05f6c9a310b8e4af127111fe9e6b771329739 100644 (file)
@@ -40,10 +40,7 @@ ANDROID_JAR = @ANDROID_JAR@
 ANDROID_ABI = @ANDROID_ABI@
 ANDROID_SDK_18_OR_EARLIER = @ANDROID_SDK_18_OR_EARLIER@
 ANDROID_SDK_8_OR_EARLIER = @ANDROID_SDK_8_OR_EARLIER@
-
-WARN_JAVAFLAGS = -Xlint:deprecation
-JAVAFLAGS = -classpath "$(ANDROID_JAR):." -target 1.7 -source 1.7 \
-  $(WARN_JAVAFLAGS)
+JAVAFLAGS = @JAVAFLAGS@
 
 # Android 4.3 and earlier require Emacs to be signed with a different
 # digital signature algorithm.
index a964cadb74c8fe4635086e044961f09f886a4375..ba92d4cef4982a0b46febb629d7df3f24113751b 100644 (file)
@@ -325,7 +325,7 @@ public class EmacsSdk7FontDriver extends EmacsFontDriver
          list.add (new Sdk7FontEntity (typefaceList[i]));
       }
 
-    return (FontEntity[]) list.toArray (new FontEntity[0]);
+    return list.toArray (new FontEntity[0]);
   }
 
   @Override