From 0ca764395718627d556bff243337546a915b20eb Mon Sep 17 00:00:00 2001 From: Rashed Abdel-Tawab Date: Sat, 7 Oct 2017 14:18:39 -0400 Subject: [PATCH] extract_files: Add support for treble compatible makefiles To be honest, this name is a little misleading, this is how it should have been done in the first place. This allows devices to copy vendor files to the proper location depending on TARGET_COPY_OUT_VENDOR rather than hardcoding system/vendor. This allows devices with dedicated vendor partitions to copy directly to vendor. The only reason it's optional is that some nexi set TARGET_COPY_OUT_VENDOR to system which would cause some weird breakage. Change-Id: Ic46bc1086737835340abef9f61693d386bc6a5dc --- build/tools/extract_utils.sh | 57 ++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/build/tools/extract_utils.sh b/build/tools/extract_utils.sh index eacfb696..4a098c37 100644 --- a/build/tools/extract_utils.sh +++ b/build/tools/extract_utils.sh @@ -155,9 +155,47 @@ function prefix_match() { done } +# +# prefix_match_file: +# +# $1: the prefix to match on +# $2: the file to match the prefix for +# +# Internal function which returns true if a filename contains the +# specified prefix. +# +function prefix_match_file() { + local PREFIX="$1" + local FILE="$2" + if [[ "$FILE" =~ ^"$PREFIX" ]]; then + return 0 + else + return 1 + fi +} + +# +# truncate_file +# +# $1: the filename to truncate +# $2: the argument to output the truncated filename to +# +# Internal function which truncates a filename by removing the first dir +# in the path. ex. vendor/lib/libsdmextension.so -> lib/libsdmextension.so +# +function truncate_file() { + local FILE="$1" + RETURN_FILE="$2" + local FIND="${FILE%%/*}" + local LOCATION="${#FIND}+1" + echo ${FILE:$LOCATION} +} + # # write_product_copy_files: # +# $1: make treble compatible makefile - optional, default to false +# # Creates the PRODUCT_COPY_FILES section in the product makefile for all # items in the list which do not start with a dash (-). # @@ -166,6 +204,7 @@ function write_product_copy_files() { local TARGET= local FILE= local LINEEND= + local TREBLE_COMPAT=$1 if [ "$COUNT" -eq "0" ]; then return 0 @@ -180,8 +219,19 @@ function write_product_copy_files() { fi TARGET=$(target_file "$FILE") - printf ' %s/proprietary/%s:system/%s%s\n' \ - "$OUTDIR" "$TARGET" "$TARGET" "$LINEEND" >> "$PRODUCTMK" + if [ "$TREBLE_COMPAT" == "true" ] || [ "$TREBLE_COMPAT" == "1" ]; then + if prefix_match_file "vendor/" $TARGET ; then + local OUTTARGET=$(truncate_file $TARGET) + printf ' %s/proprietary/%s:$(TARGET_COPY_OUT_VENDOR)/%s%s\n' \ + "$OUTDIR" "$TARGET" "$OUTTARGET" "$LINEEND" >> "$PRODUCTMK" + else + printf ' %s/proprietary/%s:system/%s%s\n' \ + "$OUTDIR" "$TARGET" "$TARGET" "$LINEEND" >> "$PRODUCTMK" + fi + else + printf ' %s/proprietary/%s:system/%s%s\n' \ + "$OUTDIR" "$TARGET" "$TARGET" "$LINEEND" >> "$PRODUCTMK" + fi done return 0 } @@ -616,6 +666,7 @@ function parse_file_list() { # write_makefiles: # # $1: file containing the list of items to extract +# $2: make treble compatible makefile - optional # # Calls write_product_copy_files and write_product_packages on # the given file and appends to the Android.mk as well as @@ -623,7 +674,7 @@ function parse_file_list() { # function write_makefiles() { parse_file_list "$1" - write_product_copy_files + write_product_copy_files "$2" write_product_packages }