JAL-3416 remove flat as default for linux
[jalview.git] / utils / de-multi-release-jar.sh
1 #!/usr/bin/env bash
2
3 CMD=$(basename $0)
4
5 usage() {
6   echo "Usage: $CMD [-v N] /path/to/jarfile" >&2
7   echo "             -v N   build jar with alternative classes for version N of java (optional, defaults to base jar packages which is usually 8)" >&2
8 }
9
10 usagexit() {
11   usage
12   exit 1
13 }
14
15 error() {
16   echo $1 >&2
17   usagexit
18 }
19
20 VERSION=""
21 while getopts v: opt
22 do
23   case "${opt}"
24     in
25     v) VERSION=${OPTARG};;
26   esac
27 done
28 shift $((OPTIND-1))
29
30 JARFILE=$1
31 [ -z $JARFILE ] && usagexit
32 [ -f $JARFILE ] || error "No file $JARFILE"
33 [ -r $JARFILE ] || error "$JARFILE not readable"
34
35 EXT=.jar
36 SUFFIX=-SINGLE_RELEASE
37 FILENAME=$(basename $JARFILE)
38 BASE=$(basename -s $EXT $JARFILE)
39 DIR=$(dirname $JARFILE)
40
41 # set absolute path to $JARFILE if not specified
42 [ x${DIR#/} = x$DIR ] && DIR=$(cd "$DIR" && pwd)
43
44 TMPDIR=/tmp/$USER-$CMD-$BASE-$$
45
46 [ x$FILENAME = x$BASE ] && error "Should be $EXT file"
47
48 mkdir -p $TMPDIR || error "Could not create tmp dir $TMPDIR"
49 cd $TMPDIR
50 jar -xvf $JARFILE > /dev/null
51 VDIR=$TMPDIR/META-INF/versions
52
53 [ -d $VDIR ] || error "$JARFILE doesn't look like a multi-release jar file"
54
55 if [ -z $VERSION ]; then
56   # no version set... nothing to copy
57   echo ""
58 elif [ -d $VDIR/$VERSION ]; then
59   # this version has alternative classes for the version asked for, copy them into the base jar
60   tar -cf - -C $VDIR/$VERSION . | tar -xf - -C $TMPDIR
61 else
62   echo "No specific classes for version $VERSION" >&2
63   echo "Available alternative versions are" >&2
64   cd $VDIR
65   ls >&2
66 fi
67
68 # remove the alternative versions
69 /bin/rm -r $VDIR
70
71 # alter the manifest. note sed on macos is a bit weird
72 if [ `uname -s` = "Darwin" ]; then
73   sed -E -i '' 's/^([Mm]ulti-[Rr]elease):).*/\1 false/' $TMPDIR/META-INF/MANIFEST.MF
74 else
75   sed -E -i 's/^([Mm]ulti-[Rr]elease):).*/\1 false/' $TMPDIR/META-INF/MANIFEST.MF
76 fi
77
78 jar -cvf $DIR/${BASE}${SUFFIX}${EXT} -C $TMPDIR . > /dev/null
79 rm -rf $TMPDIR
80