Files
odfstudio/android/Bootstrap/Makefile.shared
T
Michael Weghorn 5d4ecaa33c android: Add missing make dependency
After

    commit f9b9e70246
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Wed Nov 15 13:26:38 2023 +0100

        android: Add button to open privacy URL

, Android Jenkins builds started to fail intermittently
(e.g. [1]) like this:

    > Task :stripStrippedUIEditingDebugDebugSymbols

    > Task :compileStrippedUIEditingDebugJavaWithJavac FAILED
    /home/tdf/lode/jenkins/workspace/android_x86/android/source/src/java/org/libreoffice/AboutDialogFragment.java:93: error: cannot find symbol
            final String privacyUrl = BuildConfig.PRIVACY_POLICY_URL;
                                                 ^
      symbol:   variable PRIVACY_POLICY_URL
      location: class BuildConfig
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    1 error

    FAILURE: Build failed with an exception.

This seems due to the pre-existing issue of a missing
dependency of the `liboSettings.gradle` target on
`android/Bootstrap/Makefile.shared`, so a change
to the latter would not have caused the former
to be regenerated and any old one still around
that didn't set the new build config variable
would get used, resulting in the above error.

Issue reproducible locally:

* do a local Android master build
* `git revert f9b9e702465b4de29153b49e077c70a0ad78c89d`
* `rm android/source/liboSettings.gradle`
* `make`
* `git cherry-pick f9b9e702465b4de29153b49e077c70a0ad78c89d`
* `make`

[1] https://ci.libreoffice.org/job/gerrit_android_x86/33773/console

Change-Id: I87275fc71d93f460dfad4d75fc197b8ed8cd9922
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159497
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-11-16 12:22:53 +01:00

119 lines
4.9 KiB
Makefile

#
# Common Makefile pieces for building Java / Android apps.
#
#
# BOOTSTRAPDIR needs to be set to this directory before starting this
#
# Probably would be best to just stop fooling around with the possibilities to
# set various stuff with the -env command line parameters (and environment
# variables?) and in a plethora of rc files, and hardcode construction of
# *all* required pathnames based on the app installation location for Android
# (and iOS), etc. We don't really win anything by having so many layers of
# configurability on platforms like Android and iOS where apps based on LO
# code are very much self-contained pre-packaged thingies.
JNILIBSDIR=$(BUILDDIR)/android/jniLibs
SODEST=$(JNILIBSDIR)/$(ANDROID_APP_ABI)
OBJLOCAL=$(BUILDDIR)/android/obj/local/$(ANDROID_APP_ABI)
#
# Helpful rules ...
#
local.properties: $(BUILDDIR)/config_host.mk
echo sdk.dir=$(ANDROID_SDK_DIR) >local.properties
#
# Build / link the single .so for this app
#
ALL_STATIC_LIBS := $(shell $(SRCDIR)/bin/lo-all-static-libs)
LIBS = \
-Wl,--start-group \
$(ALL_STATIC_LIBS) \
-Wl,--end-group
NSSLIBS = freebl3 \
nspr4 \
nss3 \
nssckbi \
nssdbm3 \
nssutil3 \
plc4 \
plds4 \
smime3 \
softokn3 \
sqlite3 \
ssl3 \
WHOLELIBS = \
-Wl,--whole-archive \
$(addprefix -l,$(strip \
$(if $(ENABLE_JAVA),juh) \
)) \
-Wl,--no-whole-archive
$(OBJLOCAL)/liblo-native-code.so : native-code.cxx $(ALL_STATIC_LIBS)
@echo "Linking $@"
mkdir -p $(OBJLOCAL)
$(CXX) -Wl,--build-id=sha1 -Wl,--gc-sections -Wl,--version-script=../Bootstrap/version.map -Wl,--no-undefined -DANDROID -DDISABLE_DYNLOADING -shared -Wl,-soname,liblo-native-code.so -o $(OBJLOCAL)/liblo-native-code.so -I$(BUILDDIR)/config_host -I$(SRCDIR)/include native-code.cxx -L$(INSTDIR)/$(LIBO_LIB_FOLDER) $(WHOLELIBS) $(LIBS) -lc++_static -lc++abi $(if $(filter-out arm64-v8a x86_64,$(ANDROID_APP_ABI)),-landroid_support) $(if $(filter armeabi-v7a,$(ANDROID_APP_ABI)),-lunwind) $(addprefix -l,$(NSSLIBS)) -lGLESv2 -landroid -ljnigraphics -llog -lz
$(SODEST)/liblo-native-code.so : $(OBJLOCAL)/liblo-native-code.so
mkdir -p $(SODEST)
$(STRIP) -o $(SODEST)/liblo-native-code.so $(OBJLOCAL)/liblo-native-code.so
#to keep some symbols, eg.: $(STRIP) -o $(SODEST)/liblo-native-code.so $(OBJLOCAL)/liblo-native-code.so -w -K 'Java*'
$(SODEST)/nss-libraries :
mkdir -p $(SODEST)
$(foreach lib,$(NSSLIBS),$(STRIP) -o $(SODEST)/lib$(lib).so $(INSTDIR)/$(LIBO_LIB_FOLDER)/lib$(lib).so;)
$(SODEST)/libc++_shared.so : $(ANDROID_TOOLCHAIN)/sysroot/usr/lib/$(ANDROID_SYSROOT_PLATFORM)/libc++_shared.so
mkdir -p $(SODEST)
cp $< $@
link-so: $(SODEST)/liblo-native-code.so $(SODEST)/nss-libraries $(SODEST)/libc++_shared.so
# If you reinstall an app several times *on the emulator*, even if you
# uninstall it between, disk space seems to leak that won't get recycled until
# you stop and start... No idea if this holds for a device, too. (And you
# can't "stop" a device anyway.)
stop-start-cycle:
$(ANDROID_SDK_DIR)/platform-tools/adb shell stop && $(ANDROID_SDK_DIR)/platform-tools/adb shell start && sleep 10
# build-host specific stuff (build paths and the like) to keep build.gradle static
liboSettings.gradle: $(BUILDDIR)/config_build.mk $(BUILDDIR)/config_host.mk $(SRCDIR)/android/Bootstrap/Makefile.shared
@echo "creating $@"
( \
echo "// created by Makefile.shared - your changes will be overridden" \
&& echo "ext {" \
&& echo " liboSrcRoot = '$(SRC_ROOT)'" \
&& echo " liboJniLibsdir = '$(JNILIBSDIR)'" \
&& echo " liboWorkdir = '$(WORKDIR)'" \
&& echo " liboInstdir = '$(INSTDIR)'" \
&& echo " liboEtcFolder = '$(LIBO_ETC_FOLDER)'" \
&& echo " liboUreMiscFolder = '$(LIBO_URE_MISC_FOLDER)'" \
&& echo " liboSharedResFolder = '$(LIBO_SHARE_RESOURCE_FOLDER)'" \
&& echo " liboUREJavaFolder = '$(LIBO_URE_SHARE_JAVA_FOLDER)'" \
&& echo " liboShareJavaFolder = '$(LIBO_SHARE_JAVA_FOLDER)'" \
&& echo " liboVersionMajor = '$(LIBO_VERSION_MAJOR)'" \
&& echo " liboVersionMinor = '$(LIBO_VERSION_MINOR)'" \
&& echo " liboGitFullCommit = '$(shell cd $(SRCDIR) && git log -1 --format=%H)'" \
&& echo "}" \
&& echo "android {" \
&& echo " ndkPath '$(ANDROID_NDK_DIR)'" \
&& echo "}" \
&& echo "android.defaultConfig {" \
&& echo " applicationId '$(ANDROID_PACKAGE_NAME)'" \
&& echo " archivesBaseName = 'LibreOfficeViewer'" \
&& echo " minSdkVersion = $(ANDROID_API_LEVEL)" \
&& echo " versionCode project.hasProperty('cmdVersionCode') ? cmdVersionCode.toInteger() : $(if $(versionCode),$(versionCode),1)" \
&& echo " versionName '$(LIBO_VERSION_MAJOR).$(LIBO_VERSION_MINOR).$(LIBO_VERSION_MICRO).$(LIBO_VERSION_PATCH)$(LIBO_VERSION_SUFFIX)$(LIBO_VERSION_SUFFIX_SUFFIX)/$(shell cd $(SRCDIR) && git log -1 --format=%h)/$(OOO_VENDOR)'" \
&& echo " buildConfigField('String', 'PRIVACY_POLICY_URL', '\"$(PRIVACY_POLICY_URL)\"')" \
&& echo "}" \
) > $@