1#!/bin/sh 2# 3# Copyright (C) 2011 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16# 17# dev-platform-compress.sh 18# 19# Compressed expanded platform files into development/ndk/platforms/ 20# structure. 21# 22 23PROGDIR=$(dirname $0) 24. $PROGDIR/prebuilt-common.sh 25 26PROGRAM_PARAMETERS="" 27PROGRAM_DESCRIPTION=\ 28"This script is used to compress an expanded platforms NDK tree 29into the compressed/minimal structure used in development/ndk/platforms. 30 31The main idea is that in the destination directory, a file only appears 32once, even if it is provided by several platforms. I.e. if we have: 33 34 file1 = \$SRC/android-3/foo 35 file2 = \$SRC/android-4/foo 36 file3 = \$SRC/android-5/foo 37 38We will always store a copy of file1 under \$DST/android-3/foo 39If file2 is identical to file1, we remove its copy in \$DST/android-4/foo, 40otherwise we do copy it to the same location 41 42If file3 is identical to file2, we remove its copy in \$DST/android-4/foo, 43otherwise we copy it to the same location. 44 45Repeat for all files under \$SRC/android-N for increasing values of N. 46" 47 48SRCDIR=$TMPDIR/platforms 49register_var_option "--src-dir=<path>" SRCDIR "Specify source platforms directory" 50 51DSTDIR=$TMPDIR/platforms-compressed 52register_var_option "--dst-dir=<path>" DSTDIR "Specify destination directory" 53 54API_LEVELS=$(spaces_to_commas $API_LEVELS) 55register_var_option "--platforms=<list>" API_LEVELS "Specify all API levels" 56 57extract_parameters "$@" 58 59API_LEVELS=$(commas_to_spaces $API_LEVELS) 60 61# Sanity check 62for PLATFORM in $API_LEVELS; do 63 SDIR=$SRCDIR/android-$PLATFORM 64 if [ ! -d "$SDIR" ]; then 65 echo "ERROR: Missing source platform directory: $SDIR" 66 exit 1 67 fi 68done 69 70# Let's roll 71PREV_PLATFORM= 72for PLATFORM in $API_LEVELS; do 73 SDIR=$SRCDIR/android-$PLATFORM 74 DDIR=$DSTDIR/android-$PLATFORM 75 if [ -z "$PREV_PLATFORM" ]; then 76 # Copy everything here 77 log "Copying directory: $SDIR --> $DDIR" 78 copy_directory "$SDIR" "$DDIR" 79 else 80 # For each file, check whether it is new or 81 # different from the one in the previous platform level 82 log "Compressing directory: $SDIR" 83 PDIR=$SRCDIR/android-$PREV_PLATFORM 84 FILES=$(cd $SDIR && find . -type f) 85 echo "Files found:" 86 echo "$FILES" | tr ' ' '\n' 87 for FILENAME in $FILES; do 88 FILENAME=${FILENAME##./} # Get rid of leading ./ 89 PFILE=$PDIR/$FILENAME 90 CFILE=$SDIR/$FILENAME 91 DFILE=$DDIR/$FILENAME 92 if [ -f "$PFILE" ]; then 93 log "Comparing $CFILE with $PFILE" 94 if cmp --quiet $PFILE $CFILE; then 95 # Files are identical, remove it from destination 96 # if it exists there, it's not longer relevant. 97 if [ -f "$DFILE" ]; then 98 log "Removing obsolete $DFILE" 99 rm -f $DFILE 100 else 101 log "Skipping $CFILE" 102 fi 103 continue 104 fi 105 fi 106 # New or modified file, copy it 107 DFILE=$DDIR/$FILENAME 108 log "Copying $SFILE --> $DFILE" 109 mkdir -p $(dirname "$DFILE") && cp $CFILE $DFILE 110 fail_panic "Could not copy $CFILE to $DFILE" 111 done 112 fi 113 PREV_PLATFORM=$PLATFORM 114done 115 116log "Done!" 117exit 0 118