1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#!/bin/bash
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# GNU/Linux build script for ProGuard.
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
5b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Configuration.
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoANT_HOME=${ANT_HOME:-/usr/local/java/ant}
10b9cc48a43ed984587c939d02fba5316bf5c0df6eYing WangGRADLE_HOME=${GRADLE_HOME:-/usr/local/java/gradle}
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoWTK_HOME=${WTK_HOME:-/usr/local/java/wtk}
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoif [ -z $PROGUARD_HOME ]; then
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  PROGUARD_HOME=$(which "$0")
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  PROGUARD_HOME=$(dirname "$0")/..
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofi
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocd "$PROGUARD_HOME"
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoSRC=src
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoCLASSES=classes
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoLIB=lib
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoPROGUARD=proguard/ProGuard
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoPROGUARD_GUI=proguard/gui/ProGuardGUI
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoRETRACE=proguard/retrace/ReTrace
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoANT_TASK=proguard/ant/ProGuardTask
28b9cc48a43ed984587c939d02fba5316bf5c0df6eYing WangGRADLE_TASK=proguard/gradle/ProGuardTask
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoWTK_PLUGIN=proguard/wtk/ProGuardObfuscator
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoANT_JAR=$ANT_HOME/lib/ant.jar
32b9cc48a43ed984587c939d02fba5316bf5c0df6eYing WangGRADLE_PATH=\
33b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang$GRADLE_HOME/lib/plugins/gradle-plugins-1.3.jar:\
34b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang$GRADLE_HOME/lib/gradle-base-services-1.3.jar:\
35b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang$GRADLE_HOME/lib/gradle-core-1.3.jar:\
36b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang$GRADLE_HOME/lib/groovy-all-1.8.6.jar
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoWTK_JAR=$WTK_HOME/wtklib/kenv.zip
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoPROGUARD_JAR=$LIB/proguard.jar
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoPROGUARD_GUI_JAR=$LIB/proguardgui.jar
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe OnoratoRETRACE_JAR=$LIB/retrace.jar
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Function definitions.
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofunction compile {
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  # Compile java source files.
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "Compiling ${1//\//.} ..."
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  javac -nowarn -Xlint:none -sourcepath "$SRC" -d "$CLASSES" \
51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    "$SRC/$1.java" 2>&1 \
52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  | sed -e 's|^|  |'
53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  # Copy resource files.
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  (cd "$SRC"; find $(dirname $1) -maxdepth 1 \
56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     \( -name \*.properties -o -name \*.png -o -name \*.gif -o -name \*.pro \) \
57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     -exec cp --parents {} "../$CLASSES" \; )
58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofunction createjar {
61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "Creating $2..."
62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  jar -cfm "$2" "$SRC/$(dirname $1)/MANIFEST.MF" -C "$CLASSES" $(dirname $1)
63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofunction updatejar {
66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "Updating $PROGUARD_JAR..."
67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  jar -uf "$PROGUARD_JAR" -C "$CLASSES" $(dirname $1)
68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Main script body.
72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratomkdir -p "$CLASSES"
75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocompile   $PROGUARD
77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocreatejar $PROGUARD "$PROGUARD_JAR"
78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocompile   $PROGUARD_GUI
80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocreatejar $PROGUARD_GUI "$PROGUARD_GUI_JAR"
81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocompile   $RETRACE
83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratocreatejar $RETRACE "$RETRACE_JAR"
84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoif [ -f "$ANT_JAR" ]; then
86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  export CLASSPATH=$ANT_JAR
87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  compile   $ANT_TASK
88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  updatejar $ANT_TASK
89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoelse
90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "Please make sure the environment variable ANT_HOME is set correctly,"
91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "if you want to compile the optional ProGuard Ant task."
92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofi
93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
94b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangif [ -f "${GRADLE_PATH%%:*}" ]; then
95b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang  export CLASSPATH=$GRADLE_PATH
96b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang  compile   $GRADLE_TASK
97b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang  updatejar $GRADLE_TASK
98b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangelse
99b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang  echo "Please make sure the environment variable GRADLE_HOME is set correctly,"
100b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang  echo "if you want to compile the optional ProGuard Gradle task."
101b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangfi
102b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoif [ -f "$WTK_JAR" ]; then
104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  export CLASSPATH=$WTK_JAR
105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  compile   $WTK_PLUGIN
106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  updatejar $WTK_PLUGIN
107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoelse
108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "Please make sure the environment variable WTK_HOME is set correctly,"
109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato  echo "if you want to compile the optional ProGuard WTK plugin."
110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofi
111