blob: 8df57f4b6ba32031e73a0d2a6d07d0dc9fd7e8ab [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2021 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script is a temporary workaround for updating the
# libcore/lint-baseline.xml file to avoid merge conflicts
# (b/208656169).
if [ -z "${ANDROID_BUILD_TOP}" ] ; then
echo "This script needs to be run after sourcing build/envsetup.sh."
exit 1
fi
if [ -z "${TARGET_PRODUCT}" ] ; then
echo "This script needs to be run after selecting a build target (lunch)."
exit 1
fi
SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
LIBCORE_BASELINE="${ANDROID_BUILD_TOP}/libcore/lint-baseline.xml"
NEW_BASELINE="out/soong/.intermediates/libcore/core-all/android_common/lint/lint-baseline.xml"
# The patch file comes from go/mainline-newapi
PATCH_FILE="$SCRIPT_DIR/build.soong.patch"
# Check if it looks like the patch required has already been applied.
cd "$ANDROID_BUILD_TOP/build/soong"
if git diff-index --quiet HEAD ; then
echo "Applying $PATCH_FILE to build/soong."
git apply "$PATCH_FILE"
else
echo "Assuming $PATCH_FILE is already applied (hit ctrl-C if this is not the case)."
fi
cd "$ANDROID_BUILD_TOP"
echo "Re-generating baseline files."
# Remove LIBCORE_BASELINE file if it exists to trigger generating a
# new one in the out/ directory.
if [ -f "${LIBCORE_BASELINE}" ]; then
rm "${LIBCORE_BASELINE}"
fi
if [ -f "${NEW_BASELINE}" ]; then
rm "${NEW_BASELINE}"
fi
# The build fails when generating the new baseline file so we ignore
# the error and check if the output file exists. This is why this script
# is a temporary kludge. No sensible person would choose to do this.
build/soong/soong_ui.bash --build-mode --all-modules --dir="$PWD" "${NEW_BASELINE}"
if [ ! -f "${NEW_BASELINE}" ] ; then
echo "Failed to generate ${NEW_BASELINE}"
exit 1
fi
# Generate suppressions at API Level 33
sed -e '3i\' -e '<!-- generated by libcore/tools/update-lint-baseline/update-lint-baseline.sh -->' \
-e 's/level 32/level 33/' -e '/issues>/ {d;q}' "${NEW_BASELINE}" > "${LIBCORE_BASELINE}"
# Add comment explaining the two halves of this file.
cat<<MIDWAY >> "${LIBCORE_BASELINE}"
<!-- TODO(b/205570605): The following repeats all the issues above, but with
required API level 32 instead of 33 in the messages. This happens in
unbundled Mainline builds, e.g.
m TARGET_PRODUCT=mainline_modules_arm TARGET_BUILD_APPS=com.android.art TARGET_BUILD_UNBUNDLED=true lint-check
-->
MIDWAY
# Generate suppressions at API Level 32
sed -e '0,/<issues/ d' "${NEW_BASELINE}" >> "${LIBCORE_BASELINE}"
cat <<EPILOGUE
Updated baseline generated.
You will likely want to perform the following steps next:
# Remove soong patch added by this script
git -C $ANDROID_BUILD_TOP/build/soong co -- .
# Commit the updated lint-baseline.xml file
git -C $ANDROID_BUILD_TOP/libcore commit -a lint-baseline.xml
EPILOGUE