summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrej Shadura <andrew.shadura@collabora.co.uk>2019-03-10 12:04:58 +0000
committerAndrej Shadura <andrew.shadura@collabora.co.uk>2019-03-10 12:05:06 +0000
commit07265d9a8896f6c3e9f01ce2a1e680732acbf6f1 (patch)
treec4d54abb92b4cf6f7445aaada2ce228f10b75905
parent578e0e3628707cb2b12bceca9720c47b87065a96 (diff)
parenta2745feeed463e34362f5517a8e60b11882ca0d4 (diff)
Merge branches master and buster
-rw-r--r--debian/changelog11
-rw-r--r--debian/control1
-rw-r--r--debian/javahelper.manpages1
-rwxr-xr-xdebian/rules1
-rwxr-xr-xjh_build465
-rw-r--r--jh_build.132
6 files changed, 295 insertions, 216 deletions
diff --git a/debian/changelog b/debian/changelog
index dd6c957..0a8ec79 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+javatools (0.72.3) UNRELEASED; urgency=medium
+
+ * Team upload.
+
+ [ Niels Thykier ]
+ * Rewrite jh_build into a proper debhelper command enabling it
+ to understand "-N".
+ * Remove obsolete Suggests on cvs, gawk and tofrodos.
+
+ -- Niels Thykier <niels@thykier.net> Wed, 02 Jan 2019 08:35:39 +0000
+
javatools (0.72.2) unstable; urgency=medium
* Team upload.
diff --git a/debian/control b/debian/control
index 32178d1..85ee119 100644
--- a/debian/control
+++ b/debian/control
@@ -39,7 +39,6 @@ Depends:
libarchive-zip-perl (>= 1.30-6~),
${misc:Depends},
${perl:Depends}
-Suggests: cvs, gawk, tofrodos
Description: Helper scripts for packaging Java programs
Javahelper contains several scripts which help in packaging
Java programs.
diff --git a/debian/javahelper.manpages b/debian/javahelper.manpages
index ec5a534..e18ebd5 100644
--- a/debian/javahelper.manpages
+++ b/debian/javahelper.manpages
@@ -1,4 +1,3 @@
-jh_build.1
jh_depends.1
jh_makepkg.1
jh_repack.1
diff --git a/debian/rules b/debian/rules
index ca2b144..74aa99e 100755
--- a/debian/rules
+++ b/debian/rules
@@ -24,6 +24,7 @@ override_dh_auto_build: jh_lib.sh
$(POD2MAN) jh_setupenvironment tmp/jh_setupenvironment.1
$(POD2MAN) jh_compilefeatures tmp/jh_compilefeatures.1
$(POD2MAN) jh_exec tmp/jh_exec.1
+ $(POD2MAN) jh_build tmp/jh_build.1
$(POD2MAN) jh_linkjars tmp/jh_linkjars.1
$(POD2MAN) jh_manifest tmp/jh_manifest.1
$(POD2MAN) jh_classpath tmp/jh_classpath.1
diff --git a/jh_build b/jh_build
index 11813ee..91ce0e2 100755
--- a/jh_build
+++ b/jh_build
@@ -1,191 +1,292 @@
-#!/bin/bash --
-
-EXECDIRS="bin usr/bin usr/games"
-
-set -e
-. /usr/share/javahelper/jh_lib.sh
-
-syntax()
-{
- echo -e "Usage: jh_build [options] [<jar> <src>]"
- echo -e "Options:"
- echo -e "\t-h --help: show this text"
- echo -e "\t-V --version: show the version"
- echo -e "\t-q --quiet: don't print the build commands as they are executed"
- echo -e "\t-m<class> --main=<class>: Use this class as the main class"
- echo -e "\t-j<java-home> --java-home=<java-home>: Set the JAVA_HOME variable"
- echo -e "\t-o<javac-opts> --javacopts=<javac-opts>: Options to the Java compiler"
- echo -e "\t--clean: clean the build tree"
- echo -e "\t-N --no-javadoc: Disable building javadoc"
- echo -e "\t-J --javadoc: Enable building javadoc"
- echo -e "\t--javadoc-opts=<javadoc-opts>: Options to javadoc"
- echo -e "Environment Variables:"
- echo -e "\tJAVA_HOME: path to the JDK to use"
- echo -e "\tCLASSPATH: classpath to compile with and set in the manifest"
- echo -e "\tJH_JAR_EXTRA: extra files to be included in the jar"
- exit 1
+#!/use/bin/perl
+
+=head1 NAME
+
+jh_build - compile java sources in the absence of a (useful) upstream build system
+
+=cut
+
+use strict;
+use warnings;
+use Cwd qw(realpath);
+
+# Value to pass to -source/-target by default
+use constant DEFAULT_JAVA_RELEASE => '1.7';
+
+use Debian::Debhelper::Dh_Lib;
+use Debian::Javahelper::Java qw(write_manifest_fd);
+use Debian::Javahelper::Manifest qw(MAIN_SECTION);
+
+
+=head1 SYNOPSIS
+
+B<jh_build> [S<I<debhelper options>>]
+
+B<jh_build> [S<I<debhelper options>>] S<I<jarfile>> S<I<source>> [... S<I<source>>]
+
+=head1 DESCRIPTION
+
+
+
+=head1 FILES
+
+=over 4
+
+=item debian/javabuild
+
+A file consisting of each build to perform. One build per line
+where each line consists of:
+
+ I<jarfile> I<source> [... I<source>]
+
+Where I<jarfile> is the name of the jar file to be built and I<source> is
+a source file or directory containing source files.
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--main-class=>I<main-class>
+
+Set the B<Main-Class> attribute in the manifest of the generated jar file(s) to I<main-class>.
+This makes B<java -jar I<generated-jar-file>> run that class.
+
+=item B<--java-home=>I<home>
+
+Use I<home> as B<JAVA_HOME> (overrides the B<JAVA_HOME> environment variable).
+
+=item B<-J>, B<--javadoc>, B<-N>, B<--no-javadoc>
+
+Whether or not to build javadoc for the jar files. The default is to
+generate javadoc along with the jar files.
+
+The B<-N> is the short variant of B<--no-javadoc>.
+
+=item B<-o> I<options>, B<--javacopts=>I<options>
+
+Pass I<options> to javac (when invoking javac). The I<options> value
+is a space-separate list of options (remember to quote the argument to avoid the shell
+interpreting the value).
+
+=item B<--javadoc-opts=>I<options>
+
+Pass I<options> to javadoc (when invoking javadoc). The I<options> value
+is a space-separate list of options (remember to quote the argument to avoid the shell
+interpreting the value).
+
+=item B<--clean>
+
+If passed, B<jh_build> will clean up after itself. This is called by
+L<jh_clean(1)> and using L<jh_clean(1)> is recommended over calling
+B<jh_build> with B<--clean> directly.
+
+=back
+
+=head1 ENVIRONMENT
+
+=over 4
+
+=item B<JAVA_HOME>
+
+If set (and B<--java-home> is omitted), it determines the location of the java home
+for finding the L<javac(1)> compiler, L<javadoc(1)> compiler and the L<jar(1)> utility.
+
+If the environment variable is unset and B<--java-home> is omitted, then the default
+java home is F</usr/lib/jvm/default-java>
+
+=item CLASSPATH
+
+If set, this is the classpath used during compilation of the source code.
+
+=item JH_JAR_EXTRA
+
+A space separated list of extra files or directories to include in the generated jar file(s).
+
+Can be omitted if no extra files need to be included.
+
+=back
+
+=cut
+
+my $JAVA_HOME = $ENV{'JAVA_HOME'};
+my $CLASSPATH_ORIG = $ENV{'CLASSPATH'};
+my $CLASSPATH = $CLASSPATH_ORIG;
+my @JH_JAR_EXTRA;
+my $build_javadoc = 1;
+my (@javac_opts, @javadoc_opts, $main_class, $do_clean);
+my (@JAVAC, @JAVADOC, @JAR, @CLASSPATHDOCS, @builds);
+
+$CLASSPATH =~ tr/:/ / if defined($CLASSPATH_ORIG);
+@JH_JAR_EXTRA = split(' ', $ENV{'JH_JAR_EXTRA'}) if @JH_JAR_EXTRA;
+
+init(options => {
+ 'main|m=s' => \$main_class,
+ 'java-home|j=s' => \$JAVA_HOME,
+ 'javadoc|J!' => $build_javadoc,
+ 'N' => sub { $build_javadoc = 0; },
+ 'clean' => \$do_clean,
+ # Space-separated list of options
+ 'javacopts|o=s' => sub { @javadoc_opts = split(' ', $_[1])},
+ 'javadoc-opts=s' => sub { @javadoc_opts = split(' ', $_[1])},
+});
+
+if ($do_clean) {
+ my @files;
+ complex_doit('rm -fr debian/_jh_manifest* debian/_jh_build*');
+ if (-f 'debian/javabuild') {
+ @files = map { $_->[0] } filedoublearray('debian/javabuild');
+ rm_files(@files);
+ }
+ exit(0);
}
-ARGS="q quiet m main j java-home o javacopts J javadoc N no-javadoc O javadoc-opts clean" parseargs "$@"
-
-if [ -n "`getarg clean`" ]; then
- rm -rf debian/_jh_manifest* debian/_jh_build*
- if [ -f debian/javabuild ]; then
- rm -f `awk '{print $1}' < debian/javabuild`
- fi
- exit 0
-fi
-
-if [ -n "`getarg j java-home`" ]; then
- JAVA_HOME="`getarg j java-home`"
-elif [ -z "$JAVA_HOME" ]; then
- if [ -d /usr/lib/jvm/default-java ]; then
- JAVA_HOME=/usr/lib/jvm/default-java
- else
- JAVA_HOME=invalid
- fi
-fi
-
-JH_JAVAC_OPTS="`getarg o javacopts`"
-JH_JAVADOC_OPTS="`getarg O javadoc-opts`"
-
-if ! grep -- -encoding <<< "$JH_JAVAC_OPTS" &>/dev/null; then
- # Use ISO8859-1 as the default encoding to avoid unmappable character errors
- JH_JAVAC_OPTS="-encoding ISO8859-1 $JH_JAVAC_OPTS"
-fi
-
-if ! grep -- --release <<< "$JH_JAVAC_OPTS" &>/dev/null; then
- if ! grep -- -source <<< "$JH_JAVAC_OPTS" &>/dev/null; then
- if ! grep -- -target <<< "$JH_JAVAC_OPTS" &>/dev/null; then
- JH_JAVAC_OPTS="-source 1.7 -target 1.7 $JH_JAVAC_OPTS"
- else
- JH_JAVAC_OPTS="-source 1.7 $JH_JAVAC_OPTS"
- fi
- fi
-fi
-
-if ! grep -- --release <<< "$JH_JAVAC_OPTS" &>/dev/null; then
- if ! grep -- -source <<< "$JH_JAVADOC_OPTS" &>/dev/null; then
- JH_JAVADOC_OPTS="-source 1.7 $JH_JAVADOC_OPTS"
- fi
-fi
-
-if ! grep -- -notimestamp <<< "$JH_JAVADOC_OPTS" &>/dev/null; then
- JH_JAVADOC_OPTS="-notimestamp $JH_JAVADOC_OPTS"
-fi
-
-if ! grep -- -encoding <<< "$JH_JAVADOC_OPTS" &>/dev/null; then
- JH_JAVADOC_OPTS="-encoding ISO8859-1 $JH_JAVADOC_OPTS"
-fi
-
-function dobuild()
-{
-
- jarfile="$1"
- shift
- ext="`basename "$jarfile" .jar`"
- srcdirs=()
- srcfiles=()
- while [ -n "$1" ]; do
- if [ -f "$1" ]; then
- srcfiles+=("$1")
- elif [ -d "$1" ]; then
- srcdirs+=("$1")
- else
- echo "Ignoring $1 because it does not exist"
- fi
- shift
- done
-
- if [ "$JAVA_HOME" == "invalid" ]; then
- echo "Cannot find any JAVA_HOME: aborting" 1>&2
- exit 1
- fi
-
- rm -f debian/_jh_manifest.$ext
- (
- if [ -n "$CLASSPATH" ]; then
- echo -n "Class-Path: "
- echo $CLASSPATH | sed 's/:/ /g'
- fi
- if [ -n "`getarg m main`" ]; then
- echo "Main-Class: `getarg m main`"
- echo "Debian-Java-Home: $JAVA_HOME"
- fi
- ) | perl -p -e 's/(.{72})(?=.)/$1\n /go' >> debian/_jh_manifest.$ext
- # (NB: see D::JH::Java::write_manifest_section_fd on the regex above)
-
- CLASSPATHDOCS="`for i in $(grep-dctrl --no-field-names --show-field Build-Depends,Build-Depends-Indep -F source "$pkg" debian/control | tr , ' ' | sed 's/([^)]*)//g') ; do dpkg -L $i 2>/dev/null | grep /usr/share/doc/.*/api$; done | sed 's/^/-link /' | xargs`"
-
- mkdir -p debian/_jh_build.$ext
- if [ -n "$srcdirs" ]; then
-
- if [ -z "`getarg q quiet`" ]; then
- echo find "${srcdirs[@]}" -name '*.java' -and -type f -print0 '|' xargs -s 512000 -0 $JAVAC -g -cp $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.$ext $JH_JAVAC_OPTS "${srcfiles[@]}"
- fi
-
- find "${srcdirs[@]}" -name '*.java' -and -type f -print0 | xargs -s 512000 -0 $JAVAC -g -cp $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.$ext $JH_JAVAC_OPTS "${srcfiles[@]}"
-
- if [ -n "`getarg J javadoc`" ] || [ -z "`getarg N no-javadoc`" ]; then
- if [ -z "`getarg q quiet`" ]; then
- echo find "${srcdirs[@]}" -name '*.java' -and -type f -print0 '|' xargs -s 512000 -0 $JAVADOC $CLASSPATHDOCS -classpath $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.javadoc/api -quiet $JH_JAVADOC_OPTS "${srcfiles[@]}"
- fi
-
- find "${srcdirs[@]}" -name '*.java' -and -type f -print0 | xargs -s 512000 -0 $JAVADOC $CLASSPATHDOCS -classpath $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.javadoc/api -quiet $JH_JAVADOC_OPTS "${srcfiles[@]}"
- fi
-
- elif [ -n "$srcfiles" ]; then
-
- if [ -z "`getarg q quiet`" ]; then
- echo $JAVAC -g -cp $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.$ext $JH_JAVAC_OPTS "${srcfiles[@]}"
- fi
-
- $JAVAC -g -cp $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.$ext $JH_JAVAC_OPTS "${srcfiles[@]}"
-
- if [ -n "`getarg J javadoc`" ] || [ -z "`getarg N no-javadoc`" ]; then
- if [ -z "`getarg q quiet`" ]; then
- echo $JAVADOC $CLASSPATHDOCS -classpath $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.javadoc/api -quiet $JH_JAVADOC_OPTS "${srcfiles[@]}"
- fi
- $JAVADOC $CLASSPATHDOCS -classpath $CLASSPATH:debian/_jh_build.$ext -d debian/_jh_build.javadoc/api -quiet $JH_JAVADOC_OPTS "${srcfiles[@]}"
- fi
-
- else
- exit 0
- fi
-
- touch "$jarfile"
- jarpath="`readlink -f "$jarfile"`"
-
- (
- cd debian/_jh_build.$ext;
- if [ -z "`getarg q quiet`" ]; then
- echo $JAR cfm "$jarpath" ../_jh_manifest.$ext *
- fi
- $JAR cfm "$jarpath" ../_jh_manifest.$ext *
- )
- if [ -n "$JH_JAR_EXTRA" ]; then
- if [ -z "`getarg q quiet`" ]; then
- echo $JAR uf "$jarpath" $JH_JAR_EXTRA
- fi
- $JAR uf "$jarpath" $JH_JAR_EXTRA
- fi
+sub _has_java_option {
+ my ($opt_ref, $option_name) = @_;
+ for my $arg (@{$opt_ref}) {
+ return 1 if $arg eq $option_name;
+ }
+ return 0;
+}
+sub _default_java_option {
+ my ($opt_ref, $option_name, $default_value) = @_;
+ return if _has_java_option($opt_ref, $option_name);
+ if (defined($default_value)) {
+ # -source <version>
+ push(@{$opt_ref}, $option_name, $default_value);
+ } else {
+ # -notimestamp
+ push(@{$opt_ref}, $option_name);
+ }
+ return;
}
-JAVAC="${JAVA_HOME}/bin/javac"
-JAVADOC="${JAVA_HOME}/bin/javadoc -locale en_US"
-JAR="${JAVA_HOME}/bin/jar"
+# Use ISO8859-1 as the default encoding to avoid unmappable character errors
+_default_java_option(\@javac_opts, '-encoding', 'ISO8859-1');
+_default_java_option(\@javadoc_opts, '-encoding', 'ISO8859-1');
+
+if (not _has_java_option(\@javac_opts, '--release') and not _has_java_option(\@javac_opts, '-source')) {
+ # If neither --release nor -source is set, then set -source (and -target if also absent)
+ if (not _has_java_option(\@javac_opts, '-target')) {
+ push(@javac_opts, '-source', DEFAULT_JAVA_RELEASE, '-target', DEFAULT_JAVA_RELEASE);
+ } else {
+ push(@javac_opts, '-source', DEFAULT_JAVA_RELEASE);
+ }
+}
+
+if (not _has_java_option(\@javadoc_opts, '--release')) {
+ _default_java_option(\@javadoc_opts, '-source', DEFAULT_JAVA_RELEASE);
+}
+
+_default_java_option(\@javadoc_opts, '-notimestamp');
+
+
+sub do_build {
+ my ($jarfile, @sources) = @_;
+ my (@srcdirs, @srcfiles);
+ my $basename = basename($jarfile);
+ my $ext = $basename;
+ $ext =~ s/[.]jar$//;
+
+ for my $source (@sources) {
+ if (-f $source) {
+ push(@srcfiles, $source);
+ } elsif (-d _) {
+ push(@srcdirs, $source);
+ } else {
+ warning("Ignoring $source because it does not exist");
+ }
+ }
+ rm_files("debian/_jh_manifest.${ext}");
+ if ($main_class or defined($CLASSPATH)) {
+ my $manifest = Debian::Javahelper::Manifest->new;
+ my $main_section = $manifest->get_section(MAIN_SECTION);
+ if (defined($CLASSPATH)) {
+ $main_section->set_value('Class-Path', $CLASSPATH);
+ }
+ if ($main_class) {
+ $main_section->set_value('Main-Class', $main_class);
+ $main_section->set_value('Debian-Java-Home', $JAVA_HOME);
+ }
+ open(my $fd, '>', "debian/_jh_manifest.$ext") or error("open(debian/_jh_manifest.$ext) failed: $!");
+ write_manifest_fd($manifest, $fd, "debian/_jh_manifest.$ext");
+ close($fd) or error("close(debian/_jh_manifest.$ext) failed: $!");
+ }
+
+ install_dir("debian/_jh_build.$ext");
+
+ if (@srcdirs) {
+ my $dirs_escaped = escape_shell(@srcdirs);
+ my $files_escaped = escape_shell(@srcfiles);
+ complex_doit(qq{find $dirs_escaped -name '*.java' -and -type f -print0 | xargs -s 512000 -0 @JAVAC -g -cp ${CLASSPATH_ORIG}:debian/_jh_build.$ext -d debian/_jh_build.$ext @javac_opts $files_escaped});
+ if ($build_javadoc) {
+ complex_doit(qq{find $dirs_escaped -name '*.java' -and -type f -print0 | xargs -s 512000 -0 @JAVADOC @CLASSPATHDOCS -classpath ${CLASSPATH_ORIG}:debian/_jh_build.$ext -d debian/_jh_build.javadoc/api -quiet $JH_JAVADOC_OPTS $files_escaped});
+ }
+
+ } elsif (@srcfiles) {
+ doit(@JAVAC, '-g', '-cp', "${CLASSPATH_ORIG}:_jh_build.$ext", '-d', "debian/_jh_build.$ext", '-quiet', @javac_opts, @srcfiles);
+ if ($build_javadoc) {
+ doit(@JAVADOC, @CLASSPATHDOCS, '-classpath', "${CLASSPATH_ORIG}:_jh_build.$ext", '-d', "debian/_jh_build.javadoc/api", '-quiet', @javadoc_opts, @srcfiles);
+ }
+ } else {
+ return;
+ }
+
+ my $dir = dirname($jarfile);
+ my $resolved_dir = realpath($dir) // error("Cannot resolve $dir: $!");
+ my $jarpath = "${resolved_dir}/${basename}";
+ complex_doit(qq{cd debian/_jh_build.$ext && @JAR cfm "$jarpath" ../_jh_manifest.$ext *});
+ doit(@JAR, 'uf', $jarpath, @JH_JAR_EXTRA) if @JH_JAR_EXTRA;
+ return;
+}
+
+sub _classpath_docs {
+ my $source = sourcepackage();
+ return map {
+ chomp;
+ ('-link', $_)
+ } `for i in \$(grep-dctrl --no-field-names --show-field Build-Depends,Build-Depends-Indep -F source "${source}" debian/control | tr , ' ' | sed 's/([^)]*)//g') ; do dpkg -L \$i 2>/dev/null | grep /usr/share/doc/.*/api\$; done`;
+}
+
+# By default, jh_build does nothing without a debian/javabuild file or explicit arguments.
+# PROMISE: DH NOOP WITHOUT pkgfile(javabuild)
+
+if (@ARGV) {
+ push(@builds, [@ARGV]);
+} elsif (-f 'debian/javabuild') {
+ @builds = filedoublearray('debian/javabuild')
+}
+
+if (@builds) {
+ if (not $JAVA_HOME) {
+ $JAVA_HOME = '/usr/lib/jvm/default-java' if -d '/usr/lib/jvm/default-java';
+ }
+ if (not $JAVA_HOME) {
+ error("Cannot find any JAVA_HOME: aborting");
+ }
+ @JAVAC = ("${JAVA_HOME}/bin/javac");
+ @JAVADOC = ("${JAVA_HOME}/bin/javadoc", '-locale', 'en_US');
+ @JAR = ("${JAVA_HOME}/bin/jar");
+ @CLASSPATHDOCS = _classpath_docs();
+ for my $build (@builds) {
+ do_build(@{$build});
+ }
+}
+
+=head1 EXAMPLE
+
+ jh_build foo.jar src/java/main
+
+Will generate B<foo.jar> from compiling all the java files in F<src/java/main>
+and generate a javadoc from it.
-jarfile="${ARGV[0]}"
+=head1 SEE ALSO
-if [ -z "$jarfile" ]; then
- if [ -f debian/javabuild ]; then
- cat debian/javabuild | while read line; do
- dobuild $line
- done
- fi
-else
- dobuild "${ARGV[@]}"
-fi
+L<debhelper(7)>
+This program is a part of javahelper and uses debhelper as backend. There are
+also tutorials in /usr/share/doc/javahelper.
+=cut
diff --git a/jh_build.1 b/jh_build.1
deleted file mode 100644
index f559a91..0000000
--- a/jh_build.1
+++ /dev/null
@@ -1,32 +0,0 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
-.TH JAVAHELPER "1" "January 2008" "Javahelper Version 0.5" "User Commands"
-.SH NAME
-Javahelper \- Part of the Java Helper packaging tools
-Refer to the tutorials in /usr/share/doc/javahelper for more detail
-.SH SYNOPSIS
-.B jh_build
-[\fIoptions\fR] [\fI<jar> <src>\fR]
-.SH OPTIONS
-.HP
-\fB\-h\fR \fB\-\-help\fR: show this text
-.HP
-\fB\-V\fR \fB\-\-version\fR: show the version
-.HP
-\fB\-m\fR<class> \fB\-\-main=\fR<class>: Use this class as the main class
-.HP
-\fB\-j\fR<java\-home> \fB\-\-java\-home=\fR<java\-home>: Set the JAVA_HOME variable
-.HP
-\fB\-o\fR<javac\-opts> \fB\-\-javacopts=\fR<javac\-opts>: Options to the Java compiler
-.HP
-\fB\-J\fR \fB\-\-javadoc\fR: Build javadoc
-.HP
-\fB\-N\fR \fB\-\-no-javadoc\fR: Don't build javadoc
-.HP
-\fB\-\-javadoc-opts=\fR<javadocc\-opts>: Options to the Javadoc compiler
-.HP
-\fB\-\-clean\fR: clean the build tree
-.SS "Environment Variables:"
-.IP
-JAVA_HOME: path to the JDK to use
-CLASSPATH: classpath to compile with and set in the manifest
-JH_JAR_EXTRA: extra files to be included in the jar