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