-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbrp-java-repack-jars
executable file
·106 lines (88 loc) · 2.71 KB
/
brp-java-repack-jars
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/sh
# If using normal root, avoid changing anything.
if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
exit 0
fi
JARS=`find $RPM_BUILD_ROOT -type f -name \*.jar`
# If jar is not installed, we can't repack the jars.
if [ ! -x /usr/bin/jar ]; then
exit 0
fi
if [ ! -z "$JARS" ]; then
# make $RPM_BUILD_ROOT/tmp if it doesn't exist
rmtmp=0
if [ ! -x "$RPM_BUILD_ROOT/tmp" ]; then
mkdir -p $RPM_BUILD_ROOT/tmp
rmtmp=1
fi
# unpack every jar, set the date of the files and directories and
# repack the jar
for j in $JARS ; do
JARNAME=`basename $j`
JTMPDIR=`mktemp -d -p $RPM_BUILD_ROOT/tmp $JARNAME.tmpdir.XXXXXXXXXX` || exit 1
JARDIR=`mktemp -d -p $RPM_BUILD_ROOT/tmp $JARNAME.jardir.XXXXXXXXXX` || exit 1
TIMEREF=`mktemp -p $RPM_BUILD_ROOT/tmp $JARNAME.timeref.XXXXXXXXXX` || exit 1
pushd $JTMPDIR > /dev/null
/usr/bin/jar xf $j
find -type d -exec chmod a+rx {} \;
find -type f -exec chmod a+r {} \;
rm -f $j
# Create the directories first.
for d in `find -type d | LC_ALL=C sort`; do
mkdir -p $JARDIR/$d
done
# Get the modtime from the newest ChangeLog. If the project
# doesn't have a ChangeLog, Jan 1, 1970 will be used.
DATE="1990-01-01 UTC"
if [ -z $_PACKAGE_BUILD_DIR ]; then
_PACKAGE_BUILD_DIR=$RPM_BUILD_DIR/$RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
fi
if [ -d $_PACKAGE_BUILD_DIR ]; then
CHANGELOGS=`find $_PACKAGE_BUILD_DIR -type f -name ChangeLog`
if [ ! -z "$CHANGELOGS" ]; then
for c in $CHANGELOGS; do
TMPDATE=`stat -c %y $c | cut -d " " -f 1-2`
if [ `date --date="$TMPDATE" +%s` -gt `date --date="$DATE" +%s` ]; then
DATE="$TMPDATE"
fi
done
fi
fi
# move the contents over to the a new directory in order and set
# the times.
for f in `find -type f | LC_ALL=C sort`; do
cp $f $JARDIR/$f
touch --date="$DATE" $JARDIR/$f
done
popd > /dev/null
# Set the times of the directories.
touch --date="$DATE" `find $JARDIR -type d`
# make the jar
pushd $JARDIR > /dev/null
# Remove manifest signature files.
# TO-DO: Find a better way to repackage jars with signature files.
if [ -e META-INF/*.SF ]; then
rm META-INF/*.SF
fi
if [ -n "`find -not -name '.'`" ]; then
if [ -e META-INF/MANIFEST.MF ]; then
/usr/bin/jar cfm $j META-INF/MANIFEST.MF .
else
/usr/bin/jar cf $j .
fi
else
# Put the empty jar back
touch $j
fi
popd > /dev/null
# Cleanup.
rm -rf $JTMPDIR
rm -rf $JARDIR
rm -f $TIMEREF
done
# remove $RPM_BUILD_ROOT/tmp if we created it
if [ $rmtmp -eq 1 ]; then
rm -rf $RPM_BUILD_ROOT/tmp
fi
fi
echo $JARS | xargs touch -h -d "@${SOURCE_DATE_EPOCH:-1549052798}" || : \