117 lines
3.8 KiB
Bash
Executable file
117 lines
3.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2011 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.
|
|
#
|
|
# dev-platform-compress.sh
|
|
#
|
|
# Compressed expanded platform files into development/ndk/platforms/
|
|
# structure.
|
|
#
|
|
|
|
PROGDIR=$(dirname $0)
|
|
. $PROGDIR/prebuilt-common.sh
|
|
|
|
PROGRAM_PARAMETERS=""
|
|
PROGRAM_DESCRIPTION=\
|
|
"This script is used to compress an expanded platforms NDK tree
|
|
into the compressed/minimal structure used in development/ndk/platforms.
|
|
|
|
The main idea is that in the destination directory, a file only appears
|
|
once, even if it is provided by several platforms. I.e. if we have:
|
|
|
|
file1 = \$SRC/android-3/foo
|
|
file2 = \$SRC/android-4/foo
|
|
file3 = \$SRC/android-5/foo
|
|
|
|
We will always store a copy of file1 under \$DST/android-3/foo
|
|
If file2 is identical to file1, we remove its copy in \$DST/android-4/foo,
|
|
otherwise we do copy it to the same location
|
|
|
|
If file3 is identical to file2, we remove its copy in \$DST/android-4/foo,
|
|
otherwise we copy it to the same location.
|
|
|
|
Repeat for all files under \$SRC/android-N for increasing values of N.
|
|
"
|
|
|
|
SRCDIR=$TMPDIR/platforms
|
|
register_var_option "--src-dir=<path>" SRCDIR "Specify source platforms directory"
|
|
|
|
DSTDIR=$TMPDIR/platforms-compressed
|
|
register_var_option "--dst-dir=<path>" DSTDIR "Specify destination directory"
|
|
|
|
API_LEVELS=$(spaces_to_commas $API_LEVELS)
|
|
register_var_option "--platforms=<list>" API_LEVELS "Specify all API levels"
|
|
|
|
extract_parameters "$@"
|
|
|
|
API_LEVELS=$(commas_to_spaces $API_LEVELS)
|
|
|
|
# Sanity check
|
|
for PLATFORM in $API_LEVELS; do
|
|
SDIR=$SRCDIR/android-$PLATFORM
|
|
if [ ! -d "$SDIR" ]; then
|
|
echo "ERROR: Missing source platform directory: $SDIR"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Let's roll
|
|
PREV_PLATFORM=
|
|
for PLATFORM in $API_LEVELS; do
|
|
SDIR=$SRCDIR/android-$PLATFORM
|
|
DDIR=$DSTDIR/android-$PLATFORM
|
|
if [ -z "$PREV_PLATFORM" ]; then
|
|
# Copy everything here
|
|
log "Copying directory: $SDIR --> $DDIR"
|
|
copy_directory "$SDIR" "$DDIR"
|
|
else
|
|
# For each file, check whether it is new or
|
|
# different from the one in the previous platform level
|
|
log "Compressing directory: $SDIR"
|
|
PDIR=$SRCDIR/android-$PREV_PLATFORM
|
|
FILES=$(cd $SDIR && find . -type f)
|
|
echo "Files found:"
|
|
echo "$FILES" | tr ' ' '\n'
|
|
for FILENAME in $FILES; do
|
|
FILENAME=${FILENAME##./} # Get rid of leading ./
|
|
PFILE=$PDIR/$FILENAME
|
|
CFILE=$SDIR/$FILENAME
|
|
DFILE=$DDIR/$FILENAME
|
|
if [ -f "$PFILE" ]; then
|
|
log "Comparing $CFILE with $PFILE"
|
|
if cmp --quiet $PFILE $CFILE; then
|
|
# Files are identical, remove it from destination
|
|
# if it exists there, it's not longer relevant.
|
|
if [ -f "$DFILE" ]; then
|
|
log "Removing obsolete $DFILE"
|
|
rm -f $DFILE
|
|
else
|
|
log "Skipping $CFILE"
|
|
fi
|
|
continue
|
|
fi
|
|
fi
|
|
# New or modified file, copy it
|
|
DFILE=$DDIR/$FILENAME
|
|
log "Copying $SFILE --> $DFILE"
|
|
mkdir -p $(dirname "$DFILE") && cp $CFILE $DFILE
|
|
fail_panic "Could not copy $CFILE to $DFILE"
|
|
done
|
|
fi
|
|
PREV_PLATFORM=$PLATFORM
|
|
done
|
|
|
|
log "Done!"
|
|
exit 0
|