xref: /aosp_15_r20/build/soong/scripts/jar-args.sh (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker#!/bin/bash -e
2*333d2b36SAndroid Build Coastguard Worker
3*333d2b36SAndroid Build Coastguard Worker# Copyright 2017 Google Inc. All rights reserved.
4*333d2b36SAndroid Build Coastguard Worker#
5*333d2b36SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*333d2b36SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*333d2b36SAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*333d2b36SAndroid Build Coastguard Worker#
9*333d2b36SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*333d2b36SAndroid Build Coastguard Worker#
11*333d2b36SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*333d2b36SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*333d2b36SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*333d2b36SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*333d2b36SAndroid Build Coastguard Worker# limitations under the License.
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Worker# Script that takes a list of files on stdin and converts it to arguments to jar on stdout
18*333d2b36SAndroid Build Coastguard Worker# Usage:
19*333d2b36SAndroid Build Coastguard Worker#        find $dir -type f | sort | jar-args.sh $dir > jar_args.txt
20*333d2b36SAndroid Build Coastguard Worker#        jar cf out.jar @jar_args.txt
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Workercase $(uname) in
23*333d2b36SAndroid Build Coastguard Worker  Linux)
24*333d2b36SAndroid Build Coastguard Worker    extended_re=-r
25*333d2b36SAndroid Build Coastguard Worker    ;;
26*333d2b36SAndroid Build Coastguard Worker  Darwin)
27*333d2b36SAndroid Build Coastguard Worker    extended_re=-E
28*333d2b36SAndroid Build Coastguard Worker    ;;
29*333d2b36SAndroid Build Coastguard Worker  *) echo "unknown OS:" $(uname) >&2 && exit 1;;
30*333d2b36SAndroid Build Coastguard Workeresac
31*333d2b36SAndroid Build Coastguard Worker
32*333d2b36SAndroid Build Coastguard Workerif [ "$1" == "--test" ]; then
33*333d2b36SAndroid Build Coastguard Worker  in=$(mktemp)
34*333d2b36SAndroid Build Coastguard Worker  expected=$(mktemp)
35*333d2b36SAndroid Build Coastguard Worker  out=$(mktemp)
36*333d2b36SAndroid Build Coastguard Worker  cat > $in <<EOF
37*333d2b36SAndroid Build Coastguard Workera
38*333d2b36SAndroid Build Coastguard Workera/b
39*333d2b36SAndroid Build Coastguard Workera/b/'
40*333d2b36SAndroid Build Coastguard Workera/b/"
41*333d2b36SAndroid Build Coastguard Workera/b/\\
42*333d2b36SAndroid Build Coastguard Workera/b/#
43*333d2b36SAndroid Build Coastguard Workera/b/a
44*333d2b36SAndroid Build Coastguard WorkerEOF
45*333d2b36SAndroid Build Coastguard Worker  cat > $expected <<EOF
46*333d2b36SAndroid Build Coastguard Worker
47*333d2b36SAndroid Build Coastguard Worker-C 'a' 'b'
48*333d2b36SAndroid Build Coastguard Worker-C 'a' 'b/\\''
49*333d2b36SAndroid Build Coastguard Worker-C 'a' 'b/"'
50*333d2b36SAndroid Build Coastguard Worker-C 'a' 'b/\\\\'
51*333d2b36SAndroid Build Coastguard Worker-C 'a' 'b/#'
52*333d2b36SAndroid Build Coastguard Worker-C 'a' 'b/a'
53*333d2b36SAndroid Build Coastguard WorkerEOF
54*333d2b36SAndroid Build Coastguard Worker  cat $in | $0 a > $out
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker  if cmp $out $expected; then
57*333d2b36SAndroid Build Coastguard Worker    status=0
58*333d2b36SAndroid Build Coastguard Worker    echo "PASS"
59*333d2b36SAndroid Build Coastguard Worker  else
60*333d2b36SAndroid Build Coastguard Worker    status=1
61*333d2b36SAndroid Build Coastguard Worker    echo "FAIL"
62*333d2b36SAndroid Build Coastguard Worker    echo "got:"
63*333d2b36SAndroid Build Coastguard Worker    cat $out
64*333d2b36SAndroid Build Coastguard Worker    echo "expected:"
65*333d2b36SAndroid Build Coastguard Worker    cat $expected
66*333d2b36SAndroid Build Coastguard Worker  fi
67*333d2b36SAndroid Build Coastguard Worker  rm -f $in $expected $out
68*333d2b36SAndroid Build Coastguard Worker  exit $status
69*333d2b36SAndroid Build Coastguard Workerfi
70*333d2b36SAndroid Build Coastguard Worker
71*333d2b36SAndroid Build Coastguard Worker# In order, the regexps:
72*333d2b36SAndroid Build Coastguard Worker#   - Strip $1/ from the beginning of each line, and everything from lines that just have $1
73*333d2b36SAndroid Build Coastguard Worker#   - Escape single and double quotes, '#', ' ', and '\'
74*333d2b36SAndroid Build Coastguard Worker#   - Prefix each non-blank line with -C $1
75*333d2b36SAndroid Build Coastguard Workersed ${extended_re} \
76*333d2b36SAndroid Build Coastguard Worker  -e"s,^$1(/|\$),," \
77*333d2b36SAndroid Build Coastguard Worker  -e"s,(['\\]),\\\\\1,g" \
78*333d2b36SAndroid Build Coastguard Worker  -e"s,^(.+),-C '$1' '\1',"
79