1a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner#!/bin/sh
2a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner#
3a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# A small script used to update the content of libcxx/ to a newer
4a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# version of libc++.
5a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner#
6a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
7a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerPROGDIR=$(dirname "$0")
8a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerPROGNAME=$(basename "$0")
9a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
10a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Assume this script is under tools/
11a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerNDK_LIBCXX_DIR=$(cd "$PROGDIR"/.. && pwd)
12a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
13a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Sanitize environment.
14a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerset -e
15a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerexport LANG=C
16a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerexport LC_ALL=C
17a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
18a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Helper functions
19a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerVERBOSE=1
20a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
21a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun () {
22a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  if [ "$VERBOSE" -gt 1 ]; then
23a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "COMMAND: $@"
24a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  fi
25a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  case $VERBOSE in
26a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    0|1)
27a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner        "$@" >/dev/null 2>&1
28a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner        ;;
29a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    2)
30a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner        "$@" >/dev/null
31a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner        ;;
32a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    *)
33a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner        "$@"
34a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner        ;;
35a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  esac
36a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner}
37a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
38a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerlog () {
39a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  if [ "$VERBOSE" -gt 1 ]; then
40a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    printf "%s\n" "$@"
41a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  fi
42a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner}
43a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
44a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerget_config_field () {
45a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  cat "$NDK_LIBCXX_DIR"/upstream.config | awk '$1 == "'$1':" { print $2; }'
46a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner}
47a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
48a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Process command line.
49a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
50a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerDO_HELP=
51a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerNO_CLEANUP=
52a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
53a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfor opt; do
54a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  case $opt in
55a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    --verbose)
56a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      VERBOSE=$(( $VERBOSE + 1 ))
57a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      ;;
58a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    --help)
59a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      DO_HELP=true
60a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      ;;
61a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    --no-cleanup)
62a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      NO_CLEANUP=true
63a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      ;;
64a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    -*)
65a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      echo "ERROR: Unknown option '$opt'. See --help."
66a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      exit 1
67a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      ;;
68a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  esac
69a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerdone
70a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
71a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ "$DO_HELP" ]; then
72a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "Usage: $PROGNAME [options]"
73a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo ""
74a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "This script is used to update the LLVM libc++ sources to a"
75a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "more recent version."
76a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo ""
77a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "Valid options:"
78a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "   --help        Print this message."
79a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "   --verbose     Increase verbosity."
80a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo "   --no-cleanup  Don't remove build directory on exit."
81a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    echo ""
82a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    exit 0
83a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
84a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
85a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Create build directory.
86a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerBUILD_DIR=/tmp/ndk-$USER/llvm-libc++/build
87a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnermkdir -p "$BUILD_DIR" && rm -rf "$BUILD_DIR"/*
88a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
89a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Ensure it is cleared when this script exits.
90a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun_on_exit () {
91a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  if [ -z "$NO_CLEANUP" ]; then
92a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    # Remove temporary build directory.
93a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    rm -rf "$BUILD_DIR"
94a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  fi
95a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner}
96a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnertrap "run_on_exit \$?" EXIT QUIT HUP TERM INT
97a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
98a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner# Get upstream SVN and revision number.
99a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerSVN_URL=$(get_config_field svn)
100a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ -z "$SVN_URL" ]; then
101a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  echo "ERROR: Can't find SVN upstream in upstream.config!"
102a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  exit 1
103a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
104a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
105a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerREVISION=$(get_config_field revision)
106a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ -z "$REVISION" ]; then
107a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  echo "ERROR: Can't find upstream revision in upstream.config!"
108a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  exit 1
109a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
110a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
111a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun cd $BUILD_DIR &&
112a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Checking out $SVN_URL@$REVISION"
113a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun svn co $SVN_URL@$REVISION libcxx > /dev/null
114a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun cd libcxx
115a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
116a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Creating git repository and 'master' branch."
117a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git init
118a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho \
119a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner".gitignore
120a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner.svn/
121a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner" > .gitignore
122a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
123a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git add .
124a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git add -f .gitignore
125a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git commit -m "upstream @$REVISION"
126a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
127a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Create 'ndk' branch and apply patches.android/*"
128a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git branch ndk master
129a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git checkout ndk
130ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turnerif [ -d "$NDK_LIBCXX_DIR/patches.android" ]; then
131a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  (
132a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    set +e;
133a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    run git am "$NDK_LIBCXX_DIR"/patches.android/*
134a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    if [ "$?" != 0 ]; then
135a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      echo "A problem occured while applying the patches!!"
136a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      exit 1
137a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    fi
138a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  )
139a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
140a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
141a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Updating to newer upstream revision"
142a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git checkout master
143a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git tag revision-$REVISION HEAD
144a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
145a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun svn update
146a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerNEW_REVISION=$(svn info | awk '$1 == "Revision:" { print $2; }')
147a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Found new revision: $NEW_REVISION (was $REVISION)"
148a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
149a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerADDED_FILES=$(git ls-files -o --exclude-standard)
150a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerMODIFIED_FILES=$(git ls-files -m)
151a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerREMOVED_FILES=$(git ls-files -d)
152a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerlog "ADDED_FILES='$ADDED_FILES'"
153a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerlog "MODIFIED_FILES='$MODIFIED_FILES'"
154a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerlog "REMOVED_FILES='$REMOVED_FILES'"
155a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerCHANGED=
156a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ -n "$ADDED_FILES" ]; then
157a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  run git add $ADDED_FILES
158a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  CHANGED=true
159a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
160a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ -n "$MODIFIED_FILES" ]; then
161a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  run git add $MODIFIED_FILES
162a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  CHANGED=true
163a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
164a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ -n "$REMOVED_FILES" ]; then
165a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  run git rm -f $REMOVED_FILES
166a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  CHANGED=true
167a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
168a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
169a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerif [ -z "$CHANGED" ]; then
170a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  echo "No changes detected. Exiting."
171a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  exit 0
172a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfi
173a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
174a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerADDED_COUNT=$(echo "$ADDED_FILES" | wc -l)
175a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerMODIFIED_COUNT=$(echo "$MODIFIED_FILES" | wc -l)
176a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' TurnerREMOVED_COUNT=$(echo "$REMOVED_FILES" | wc -l)
177a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Commiting changes ($ADDED_COUNT new, $MODIFIED_COUNT changed, $REMOVED_COUNT deleted)"
178a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git commit -m "upstream @$NEW_REVISION"
179a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git tag revision-$NEW_REVISION
180a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
181a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Updating NDK branch."
182a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git checkout ndk
183a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git tag android-0 HEAD
184a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git rebase revision-$NEW_REVISION
185a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
186a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Re-creating new Android patches."
187a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git format-patch -k -o "$BUILD_DIR"/patches.android revision-$NEW_REVISION
188a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git format-patch -k -o "$BUILD_DIR"/patches.libcxx android-0
189a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
190a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Updating local sources"
191a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun cd "$NDK_LIBCXX_DIR"/libcxx
192a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerfor PATCH in "$BUILD_DIR"/patches.libcxx/*.patch; do
193a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  (
194a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    set +e
195a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    run patch -p1 < "$PATCH"
196a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    if [ $? != 0 ]; then
197a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      echo "ERROR: Can't apply $PATCH properly!"
198a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner      exit 1
199a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner    fi
200a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner  )
201a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerdone
202a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
203a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Updating local patches"
204a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun cd "$NDK_LIBCXX_DIR"
205a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git rm -f patches.android/*
206a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun cp "$BUILD_DIR"/patches.android/* patches.android/
207a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerrun git add patches.android/*
208a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
209a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Updating upstream.config"
210a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnersed -i -e "s|revision: $REVISION|revision: $NEW_REVISION|" "$NDK_LIBCXX_DIR"/upstream.config
211a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnergit add "$NDK_LIBCXX_DIR"/upstream.config
212a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turner
213a8bf9de8057ad254cc642f33bd7d0a48dc1ae55cDavid 'Digit' Turnerecho "Done updating to $NEW_REVISION."
214