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