               --------------------------------------------
                   muCommander compilation instructions
               --------------------------------------------

1. Configuration

  The first step to compiling muCommander is making sure all the proper
libraries and tools are installed.

  Pre-requesites are:
- JDK 1.6 or greater
  Event though muCommander runs on Java 1.4 or later, it takes advantage of
  the 1.6 API and needs it in order to compile.
  This can be retrieved from http://java.sun.com/

- Ant 1.6.5 or greater
  This can be retrieved from http://ant.apache.org/

  Optional tools are:
- FindBugs 1.3.1 or greater.
  This is used to generate bytecode analysis reports.
  It can be retrieved from http://findbugs.sourceforge.net/

- NSIS 2.20 or greater
  This is used to generate Win32 setup files.
  It can be retrieved from http://nsis.sourceforge.net/

- Launch4J 2.1.5 or greater
  This is used to generate Win32 executable files.
  It can be retrieved from http://launch4j.sourceforge.net/

- p7zip 4.43 or greater
  This is used to compress JAR files further than the Sun tools can.
  It can be retrieved from http://p7zip.sourceforge.net/
  
  Once these tools have been installed, you might want / need to configure
the muCommander build process.
This is done by copying ./build/local_template.xml to ./local.xml and
editing it.

  The values that need to be set are:
- java.lib (defaults to a system-dependant best guess)
  Path to the Java 1.6's classes JAR.
  This is usually found in /path/to/jre/lib/rt.jar
  Apple, however, decided to use non-standard paths for reasons of their own.
  Under Mac OS X, you'll find the classes JAR file in:
  /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar

- jsse.lib (defaults to a system-dependant best guess)
  Path to the JSSE JAR file.
  This is usually found in /path/to/jre/lib/jsse.jar
  Apple, however, decided to use non-standard paths for reasons of their own.
  Under Mac OS X, you'll find the classes JAR file in:
  /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/jsse.jar

- ant.lib (defaults to /path/to/ant/lib/ant.jar)
  Path to the Ant JAR file.
  This is necessary in order to compile the various Ant tasks used by
  muCommander.
  This value only needs to be set if the Ant JAR file is not in its standard
  location.

- proguard.lib (defaults to ./tools/proguard.jar)
  Path to the ProGuard JAR file.
  The one used by muCommander can be found in ./tools/proguard.jar, but you can
  modify that if you wish to try out other versions.

- antcontrib.lib (defaults to ./tools/ant-contrib.jar)
  Path to the Ant Contrib JAR file.
  The one used by muCommander can be found in ./tools/ant-contrib.jar, but you can
  modify that if you wish to try out other versions.

- doccheck.lib (defaults to ./tools/doccheck.jar)
  Path to the Doccheck JAR file.
  The one used by muCommander can be found in ./tools/doccheck.jar, but you can
  modify that if you wish to try out other versions.

- 7za.executable (non-required)
  Path to the 7za executable.
  This is used to compress muCommander's JAR file better than Java's ZIP
  implementation.
  If this property is not set, standard ZIP compression will be used.

- antdoclet.lib (defaults to ./tools/antdoclet.jar)
  Path to the AntDoclet JAR file.
  This is used to generate the Ant tools documentation.
  The one used by muCommander can be found in ./tools/antdoclet.jar, but you can
  modify that if you wish to try out other versions.

- velocity.lib (defaults to ./tools/velocity.jar)
  Path to the Velocity JAR file.
  This is used to generate the Ant tools documentation.
  The one used by muCommander can be found in ./tools/velocity.jar, but you can
  modify that if you wish to try out other versions.

- store.path (non-required)
  Password of the keystore file used to generate a signed muCommander JAR file.
  If this property is not set, you won't be able to generate signed JAR files.
  If you're not Maxence, you can safely ignore this property.

- jdeb.lib (defaults to ./tools/jdeb.jar)
  Path to the JDeb JAR file.
  This is used to generate the muCommander Debian package.
  The one used by muCommander can be found in ./tools/jdeb.jar, but you can
  modify that if you wish to try out other versions.

- nsis.executable (non-required)
  Path to the NSIS executable.
  This is used to generate a muCommander Win32 native setup.
  If this property is not set, you won't be able to generate Win32 setups.

- launch4j.dir (non-required)
  Path to the Launch4J installation directory.
  This is used to generate a muCommander Win32 executable.
  If this property is not set, you won't be able to generate Win32 or portable
  releases.

- case-sensitive-fs (defaults to false)
  Whether the file system is case sensitive.
  Case sensitive systems allow ProGuard to perform slightly more agressive
  obfuscation of the bytecode. If unsure, leave this value to false.

- findbugs.home (non-required).
  Path to the FindBugs installation directory.
  Thi sis used to generate bytecode analysis reports.
  If this property is not set, bytecode analysis reports won't be generated.

- simian.lib (Defaults to ./tools/simian.jar)
  Path to the Simian JAR file.
  The one used by muCommander can be found in ./tools/simian.jar, but you can
  modify that if you wish to try out other versions.

- javancss.lib (Defaults to ./tools/javancss.jar)
  Path to the JavaNCSS JAR file.
  The one used by muCommander can be found in ./tools/javancss.jar, but you can
  modify that if you wish to try out other versions.

  Some external tools need additional configuration to work properly:

- JUnit
  To ensure that unit testing can be performed, the
  ./lib/noinclude/junit.jar file must be copied to $ANT_HOME/lib.
  If this isn't done, unit testing will most likely be skipped.

- JDepend
  To ensure that dependency analysis can be performed, the
  ./tools/jdepend.jar file must be copied to $ANT_HOME/lib.
  If this isn't done, dependency analysis will most likely
  be skipped.



2. Compiling muCommander

  There are various ways of compiling muCommander. The most immediately
useful are:

- ant
  This will compile all the modified Java files and run the resulting
  application.

- ant jar
  This will compile all the modified Java files and store the binaries
  in ./dist/mucommander_unobf.jar.
  This jar file is meant for debug, and running it will output a fair amount
  of tracing information.

- ant obfuscate
  This will compile and obfuscate all the Java files and store
  the binaries in ./dist/mucommander_obf.jar.

- ant compress
  This is identical to ant obfuscate, but will use 7za if it's available to
  produce an even slimmer version of the JAR file in ./dist/mucommander.jar.
  This JAR file is the one we use for release.

- ant clean
  Deletes all temporary files.

- ant compile
  Compiles all the modified Java files and stores the output in
  ./tmp/compile/classes

- ant source
  Packages the sources and stores them in
  ./dist/mucommander-<version>-src.tar.gz

- ant deb
  Generates a Debian package in ./dist/mucommander_<version>_all.deb

- ant exe
  Generates a Win32 executable version of muCommander in ./dist/muCommander.exe.

- ant portable
  Generates the portable version of muCommander in
  ./dist/mucommander-<version>-portable.tar.gz.
  The portable version is meant for 'roaming' usage, typically from a USB key.

- ant setup-exe
  Generates a Win32 executable setup in ./dist/mucommander-setup.exe

- ant tgz
  Generates a Unix release file and stores it in ./dist/mucommander.tar.gz

- ant jnlp
  Generates a Webstart description file in ./dist/mucommander.jnlp

- ant sign
  Generates a signed JAR file in ./dist/mucommander_signed.jar

- ant app
  Generates a Mac OS X application bundle in ./dist/muCommander.app.
  Note that the application will only work if ran on an OS that has a chmod
  command.

- ant nightly
  Generates all know distribution files in 'nightly' mode.
  Nightly builds will have slightly different names.

- ant release
  Generates all known release files.

- ant reports
  Generates reports about various aspects of muCommander.
