6a3af4f155512d37705db5e16e75b6c0f93512e9
[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 TMPDIR=/tmp/$USER-$CMD-$BASE-$$
42
43 [ x$FILENAME = x$BASE ] && error "Should be $EXT file"
44
45 mkdir -p $TMPDIR || error "Could not create tmp dir $TMPDIR"
46 cd $TMPDIR
47 jar -xvf $JARFILE > /dev/null
48 VDIR=$TMPDIR/META-INF/versions
49
50 [ -d $VDIR ] || error "$JARFILE doesn't look like a multi-release jar file"
51
52 if [ -z $VERSION ]; then
53   # no version set... nothing to copy
54   echo ""
55 elif [ -d $VDIR/$VERSION ]; then
56   # this version has alternative classes for the version asked for, copy them into the base jar
57   tar -cf - -C $VDIR/$VERSION . | tar -xf - -C $TMPDIR
58 else
59   echo "No specific classes for version $VERSION" >&2
60   echo "Available alternative versions are" >&2
61   cd $VDIR
62   ls >&2
63 fi
64
65 # remove the alternative versions
66 /bin/rm -r $VDIR
67
68 # alter the manifest. note sed on macos is a bit weird
69 if [ `uname -s` = "Darwin" ]; then
70   sed -E -i '' 's/^([Mm]ulti-[Rr]elease):).*/\1 false/' $TMPDIR/META-INF/MANIFEST.MF
71 else
72   sed -E -i 's/^([Mm]ulti-[Rr]elease):).*/\1 false/' $TMPDIR/META-INF/MANIFEST.MF
73 fi
74
75 jar -cvf $DIR/${BASE}${SUFFIX}${EXT} -C $TMPDIR . > /dev/null
76 rm -rf $TMPDIR
77