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