1*fb1b10abSAndroid Build Coastguard Worker#!/bin/bash 2*fb1b10abSAndroid Build Coastguard Worker## 3*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2014 The WebM project authors. All Rights Reserved. 4*fb1b10abSAndroid Build Coastguard Worker## 5*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 6*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 7*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 8*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 9*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 10*fb1b10abSAndroid Build Coastguard Worker## 11*fb1b10abSAndroid Build Coastguard Worker 12*fb1b10abSAndroid Build Coastguard Workershell_name="$(uname -o 2>/dev/null)" 13*fb1b10abSAndroid Build Coastguard Workerif [[ "$shell_name" = "Cygwin" || "$shell_name" = "Msys" ]] \ 14*fb1b10abSAndroid Build Coastguard Worker && cygpath --help >/dev/null 2>&1; then 15*fb1b10abSAndroid Build Coastguard Worker FIXPATH='cygpath -m' 16*fb1b10abSAndroid Build Coastguard Workerelse 17*fb1b10abSAndroid Build Coastguard Worker FIXPATH='echo_path' 18*fb1b10abSAndroid Build Coastguard Workerfi 19*fb1b10abSAndroid Build Coastguard Worker 20*fb1b10abSAndroid Build Coastguard Workerdie() { 21*fb1b10abSAndroid Build Coastguard Worker echo "${self_basename}: $@" >&2 22*fb1b10abSAndroid Build Coastguard Worker exit 1 23*fb1b10abSAndroid Build Coastguard Worker} 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Workerdie_unknown(){ 26*fb1b10abSAndroid Build Coastguard Worker echo "Unknown option \"$1\"." >&2 27*fb1b10abSAndroid Build Coastguard Worker echo "See ${self_basename} --help for available options." >&2 28*fb1b10abSAndroid Build Coastguard Worker exit 1 29*fb1b10abSAndroid Build Coastguard Worker} 30*fb1b10abSAndroid Build Coastguard Worker 31*fb1b10abSAndroid Build Coastguard Workerecho_path() { 32*fb1b10abSAndroid Build Coastguard Worker for path; do 33*fb1b10abSAndroid Build Coastguard Worker echo "$path" 34*fb1b10abSAndroid Build Coastguard Worker done 35*fb1b10abSAndroid Build Coastguard Worker} 36*fb1b10abSAndroid Build Coastguard Worker 37*fb1b10abSAndroid Build Coastguard Worker# Output one, possibly changed based on the system, path per line. 38*fb1b10abSAndroid Build Coastguard Workerfix_path() { 39*fb1b10abSAndroid Build Coastguard Worker $FIXPATH "$@" 40*fb1b10abSAndroid Build Coastguard Worker} 41*fb1b10abSAndroid Build Coastguard Worker 42*fb1b10abSAndroid Build Coastguard Worker# Corrects the paths in file_list in one pass for efficiency. 43*fb1b10abSAndroid Build Coastguard Worker# $1 is the name of the array to be modified. 44*fb1b10abSAndroid Build Coastguard Workerfix_file_list() { 45*fb1b10abSAndroid Build Coastguard Worker if [ "${FIXPATH}" = "echo_path" ] ; then 46*fb1b10abSAndroid Build Coastguard Worker # When used with echo_path, fix_file_list is a no-op. Avoid warning about 47*fb1b10abSAndroid Build Coastguard Worker # unsupported 'declare -n' when it is not important. 48*fb1b10abSAndroid Build Coastguard Worker return 0 49*fb1b10abSAndroid Build Coastguard Worker elif [ "${BASH_VERSINFO}" -lt 4 ] ; then 50*fb1b10abSAndroid Build Coastguard Worker echo "Cygwin path conversion has failed. Please use a version of bash" 51*fb1b10abSAndroid Build Coastguard Worker echo "which supports nameref (-n), introduced in bash 4.3" 52*fb1b10abSAndroid Build Coastguard Worker return 1 53*fb1b10abSAndroid Build Coastguard Worker fi 54*fb1b10abSAndroid Build Coastguard Worker declare -n array_ref=$1 55*fb1b10abSAndroid Build Coastguard Worker files=$(fix_path "${array_ref[@]}") 56*fb1b10abSAndroid Build Coastguard Worker local IFS=$'\n' 57*fb1b10abSAndroid Build Coastguard Worker array_ref=($files) 58*fb1b10abSAndroid Build Coastguard Worker} 59*fb1b10abSAndroid Build Coastguard Worker 60*fb1b10abSAndroid Build Coastguard Workergenerate_uuid() { 61*fb1b10abSAndroid Build Coastguard Worker local hex="0123456789ABCDEF" 62*fb1b10abSAndroid Build Coastguard Worker local i 63*fb1b10abSAndroid Build Coastguard Worker local uuid="" 64*fb1b10abSAndroid Build Coastguard Worker local j 65*fb1b10abSAndroid Build Coastguard Worker #93995380-89BD-4b04-88EB-625FBE52EBFB 66*fb1b10abSAndroid Build Coastguard Worker for ((i=0; i<32; i++)); do 67*fb1b10abSAndroid Build Coastguard Worker (( j = $RANDOM % 16 )) 68*fb1b10abSAndroid Build Coastguard Worker uuid="${uuid}${hex:$j:1}" 69*fb1b10abSAndroid Build Coastguard Worker done 70*fb1b10abSAndroid Build Coastguard Worker echo "${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}" 71*fb1b10abSAndroid Build Coastguard Worker} 72*fb1b10abSAndroid Build Coastguard Worker 73*fb1b10abSAndroid Build Coastguard Workerindent1=" " 74*fb1b10abSAndroid Build Coastguard Workerindent="" 75*fb1b10abSAndroid Build Coastguard Workerindent_push() { 76*fb1b10abSAndroid Build Coastguard Worker indent="${indent}${indent1}" 77*fb1b10abSAndroid Build Coastguard Worker} 78*fb1b10abSAndroid Build Coastguard Workerindent_pop() { 79*fb1b10abSAndroid Build Coastguard Worker indent="${indent%${indent1}}" 80*fb1b10abSAndroid Build Coastguard Worker} 81*fb1b10abSAndroid Build Coastguard Worker 82*fb1b10abSAndroid Build Coastguard Workertag_attributes() { 83*fb1b10abSAndroid Build Coastguard Worker for opt in "$@"; do 84*fb1b10abSAndroid Build Coastguard Worker optval="${opt#*=}" 85*fb1b10abSAndroid Build Coastguard Worker [ -n "${optval}" ] || 86*fb1b10abSAndroid Build Coastguard Worker die "Missing attribute value in '$opt' while generating $tag tag" 87*fb1b10abSAndroid Build Coastguard Worker echo "${indent}${opt%%=*}=\"${optval}\"" 88*fb1b10abSAndroid Build Coastguard Worker done 89*fb1b10abSAndroid Build Coastguard Worker} 90*fb1b10abSAndroid Build Coastguard Worker 91*fb1b10abSAndroid Build Coastguard Workeropen_tag() { 92*fb1b10abSAndroid Build Coastguard Worker local tag=$1 93*fb1b10abSAndroid Build Coastguard Worker shift 94*fb1b10abSAndroid Build Coastguard Worker if [ $# -ne 0 ]; then 95*fb1b10abSAndroid Build Coastguard Worker echo "${indent}<${tag}" 96*fb1b10abSAndroid Build Coastguard Worker indent_push 97*fb1b10abSAndroid Build Coastguard Worker tag_attributes "$@" 98*fb1b10abSAndroid Build Coastguard Worker echo "${indent}>" 99*fb1b10abSAndroid Build Coastguard Worker else 100*fb1b10abSAndroid Build Coastguard Worker echo "${indent}<${tag}>" 101*fb1b10abSAndroid Build Coastguard Worker indent_push 102*fb1b10abSAndroid Build Coastguard Worker fi 103*fb1b10abSAndroid Build Coastguard Worker} 104*fb1b10abSAndroid Build Coastguard Worker 105*fb1b10abSAndroid Build Coastguard Workerclose_tag() { 106*fb1b10abSAndroid Build Coastguard Worker local tag=$1 107*fb1b10abSAndroid Build Coastguard Worker indent_pop 108*fb1b10abSAndroid Build Coastguard Worker echo "${indent}</${tag}>" 109*fb1b10abSAndroid Build Coastguard Worker} 110*fb1b10abSAndroid Build Coastguard Worker 111*fb1b10abSAndroid Build Coastguard Workertag() { 112*fb1b10abSAndroid Build Coastguard Worker local tag=$1 113*fb1b10abSAndroid Build Coastguard Worker shift 114*fb1b10abSAndroid Build Coastguard Worker if [ $# -ne 0 ]; then 115*fb1b10abSAndroid Build Coastguard Worker echo "${indent}<${tag}" 116*fb1b10abSAndroid Build Coastguard Worker indent_push 117*fb1b10abSAndroid Build Coastguard Worker tag_attributes "$@" 118*fb1b10abSAndroid Build Coastguard Worker indent_pop 119*fb1b10abSAndroid Build Coastguard Worker echo "${indent}/>" 120*fb1b10abSAndroid Build Coastguard Worker else 121*fb1b10abSAndroid Build Coastguard Worker echo "${indent}<${tag}/>" 122*fb1b10abSAndroid Build Coastguard Worker fi 123*fb1b10abSAndroid Build Coastguard Worker} 124*fb1b10abSAndroid Build Coastguard Worker 125