<!-- This Ant build file illustrates how to process ProGuard (including its
     main application, its GUI, its Ant task, and its WTK plugin), and the
     ReTrace tool, all in one go.
     Usage: ant -f proguard.xml -->

<project name="ProGuard" default="obfuscate" basedir="../..">

<target name="obfuscate">
  <taskdef resource="proguard/ant/task.properties"
           classpath="lib/proguard.jar" />

  <proguard printmapping="proguard.map"
            overloadaggressively="on"
            repackageclasses=""
            renamesourcefileattribute="SourceFile">

    <!-- Specify the input jars, output jars, and library jars. -->

    <injar  file="lib/proguard.jar" />
    <injar  file="lib/proguardgui.jar" filter="!META-INF/**" />
    <injar  file="lib/retrace.jar"     filter="!META-INF/**" />

    <outjar file="examples/ant/proguard_out.jar" />

    <libraryjar file="${java.home}/lib/rt.jar" />
    <libraryjar file="/usr/local/java/ant/lib/ant.jar" />
    <libraryjar file="/usr/local/java/gradle-2.1/lib/plugins/gradle-plugins-2.1.jar" />
    <libraryjar file="/usr/local/java/gradle-2.1/lib/gradle-base-services-2.1.jar" />
    <libraryjar file="/usr/local/java/gradle-2.1/lib/gradle-base-services-groovy-2.1.jar" />
    <libraryjar file="/usr/local/java/gradle-2.1/lib/gradle-core-2.1.jar" />
    <libraryjar file="/usr/local/java/gradle-2.1/lib/groovy-all-2.3.6.jar" />
    <libraryjar file="/usr/local/java/wtk2.5.2/wtklib/kenv.zip" />

    <!-- Adapt the resource file names, based on the corresponding obfuscated
         class names. -->

    <adaptresourcefilenames    filter="**.properties,**.gif,**.jpg"  />
    <adaptresourcefilecontents filter="proguard/ant/task.properties" />

    <!-- Optionally preserve line numbers in the obfuscated stack traces.
    <keepattribute name="LineNumberTable">
    <keepattribute name="SourceFile">
    -->

    <!-- The main seeds: ProGuard and its companion tool ReTrace. -->

    <keep access="public" name="proguard.ProGuard">
      <method access    ="public static"
              type      ="void"
              name      ="main"
              parameters="java.lang.String[]" />
    </keep>
    <keep access="public" name="proguard.gui.ProGuardGUI">
      <method access    ="public static"
              type      ="void"
              name      ="main"
              parameters="java.lang.String[]" />
    </keep>
    <keep access="public" name="proguard.retrace.ReTrace">
      <method access    ="public static"
              type      ="void"
              name      ="main"
              parameters="java.lang.String[]" />
    </keep>

    <!-- If we have ant.jar, we can properly process the Ant task. -->

    <keeppackagename name="proguard.ant" />
    <keep name="proguard.ant.*" allowobfuscation="true" />
    <keepclassmembers access="public" name="proguard.ant.*">
      <constructor parameters="org.apache.tools.ant.Project" />
      <method access="public" type="void" name="set*" parameters="***" />
      <method access="public" type="void" name="add*" parameters="***" />
    </keepclassmembers>

    <!-- If we have the Gradle jars, we can properly process the Gradle task. -->

    <keep access="public" name="proguard.gradle.*">
      <method access="public" />
    </keep>

    <!-- If we have kenv.zip, we can process the J2ME WTK plugin. -->

    <keep access="public" name="proguard.wtk.ProGuardObfuscator" />

  </proguard>
</target>

</project>