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=/tmp/ndk-$USER/platforms 49register_var_option "--src-dir=<path>" SRCDIR "Specify source platforms directory" 50 51DSTDIR=/tmp/ndk-$USER/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 if [ "$VERBOSE2" = "yes" ]; then 86 echo "Files found:" 87 echo "$FILES" | tr ' ' '\n' 88 fi 89 for FILENAME in $FILES; do 90 FILENAME=${FILENAME##./} # Get rid of leading ./ 91 PFILE=$PDIR/$FILENAME 92 CFILE=$SDIR/$FILENAME 93 DFILE=$DDIR/$FILENAME 94 if [ -f "$PFILE" ]; then 95 log2 "Comparing $CFILE with $PFILE" 96 if cmp --quiet $PFILE $CFILE; then 97 # Files are identical, remove it from destination 98 # if it exists there, it's not longer relevant. 99 if [ -f "$DFILE" ]; then 100 log2 "Removing obsolete $DFILE" 101 rm -f $DFILE 102 else 103 log2 "Skipping $CFILE" 104 fi 105 continue 106 fi 107 fi 108 # New or modified file, copy it 109 DFILE=$DDIR/$FILENAME 110 log2 "Copying $SFILE --> $DFILE" 111 mkdir -p $(dirname "$DFILE") && cp $CFILE $DFILE 112 fail_panic "Could not copy $CFILE to $DFILE" 113 done 114 fi 115 PREV_PLATFORM=$PLATFORM 116done 117 118log "Done!" 119exit 0 120