#
# This ProGuard configuration file illustrates how to process the ProGuard GUI.
# Configuration files for typical applications will be very similar.
# Usage:
#     java -jar proguard.jar @proguardgui.pro
#

# Specify the input jars, output jars, and library jars.
# The input jars will be merged in a single output jar.
# We'll filter out the Ant and WTK classes.

-injars  ../lib/proguardgui.jar
-injars  ../lib/proguard.jar(!META-INF/**,!proguard/ant/**,!proguard/wtk/**)
-injars  ../lib/retrace.jar (!META-INF/**)
-outjars proguardgui_out.jar

-libraryjars <java.home>/lib/rt.jar

# In recent JREs, some public Swing classes depend on package visible classes,
# so don't skip these package visible classes while parsing the library jar.

-dontskipnonpubliclibraryclasses

# If we wanted to reuse the previously obfuscated proguard_out.jar, we could
# perform incremental obfuscation based on its mapping file, and only keep the
# additional GUI files instead of all files.

#-applymapping proguard.map
#-injars      ../lib/proguardgui.jar
#-outjars     proguardgui_out.jar
#-libraryjars ../lib/proguard.jar(!proguard/ant/**,!proguard/wtk/**)
#-libraryjars ../lib/retrace.jar
#-libraryjars <java.home>/lib/rt.jar


# Allow methods with the same signature, except for the return type,
# to get the same obfuscation name.

-overloadaggressively

# Put all obfuscated classes into the nameless root package.

-repackageclasses ''

# Adapt the names of resource files, based on the corresponding obfuscated
# class names. Notably, in this case, the GUI resource properties file will
# have to be renamed.

-adaptresourcefilenames **.properties,**.gif,**.jpg

# The entry point: ProGuardGUI and its main method.

-keep public class proguard.gui.ProGuardGUI {
    public static void main(java.lang.String[]);
}
