#!/bin/bash --

MINJARWRAPPERVER=0.5
DEFAULTJVM=gcj

. /usr/share/javahelper/jh_lib.sh

set -e

syntax()
{
   echo -e "Usage: jh_depends [options]"
   echo -e "Options:"
   echo -e "\t-h --help: show this text"
   echo -e "\t-V --version: print the version"
   echo -e "\t-p<package> --package=<package>: package to act on (default=all)"  
   echo -e "\t-P<packagedir> --tmpdir=<package>: package directory (default=\$CWD/debian/package)"  
   echo -e "\t-v --verbose: show more information while running"
   echo -e "\t-i --indep: work on all indep packages"
   echo -e "\t-s --arch: work on all arch-specific packages"
   echo -e "\t-n --no-act: don't actually do anything, just print the results"
   echo -e "\t-j[<jvm>] --jvm[=<jvm>]: Options are: default, headless, gcj, open, sun, sun5, sun6. Can be a space-separated list."
   exit 1
}

ARGS="p package P tmpdir v verbose i indep s arch n no-act j jvm" parseargs "$@"

VERBOSE="`getarg v verbose`"

dh_testdir

TEMPDIR=`mktemp -d`
OLDDIR=`pwd`

WRAPPER=

PACKAGES=`findpackages`
for p in $PACKAGES; do

   PACKAGEDIR="`getarg P tmpdir`"
   if [ -z "$PACKAGEDIR" ]; then
      PACKAGEDIR="`pwd`/debian/$p"
   else
      PACKAGEDIR="`realpath $PACKAGEDIR`"
   fi

   if [ ! -d "$PACKAGEDIR" ]; then
      continue
   fi

   if [ -n "$VERBOSE" ]; then
      echo "Searching $PACKAGEDIR for $p"
   fi

   JARS=`find $PACKAGEDIR -name '*.jar'`

   if [ -n "$VERBOSE" ]; then
      echo "Searching" $JARS
   fi

   cd "$TEMPDIR" && rm -f META-INF/MANIFEST.MF

   JARDEPS=""
   for i in $JARS; do
      if [ -x "$i" ]; then
         WRAPPER="true"
      fi
      jar xf "$i" META-INF/MANIFEST.MF
      JARDEPS="$JARDEPS `extractline META-INF/MANIFEST.MF Class-Path`"
      if grep ^Main-Class META-INF/MANIFEST.MF >/dev/null; then 
         JHOME="`extractline META-INF/MANIFEST.MF Debian-Java-Home`"
         if echo $JHOME | grep headless >/dev/null; then
            JVM="$JVM headless"
         elif echo $JHOME | grep default >/dev/null; then
            JVM="$JVM default"
         elif echo $JHOME | grep gcj >/dev/null; then
            JVM="$JVM gcj"
         elif echo $JHOME | grep 1.5.0-sun >/dev/null; then
            JVM="sun5"
         elif echo $JHOME | grep 6-sun >/dev/null; then
            JVM="$JVM sun6"
         elif echo $JHOME | grep 6-openjdk >/dev/null; then
            JVM="$JVM open"
         fi
      fi
      rm -f META-INF/MANIFEST.MF
   done
   JARDEPS=`echo $JARDEPS | xargs -n1 | sort -u`

   if [ -n "$VERBOSE" ]; then
      echo "Found Jars:" $JARDEPS
   fi

   DEBDEPS=""
   for i in $JARDEPS; do
      for j in $PACKAGES; do
         if [ -n "$VERBOSE" ]; then
            echo "Checking: " $OLDDIR/debian/$j$i
         fi
         if [ -f $OLDDIR/debian/$j$i ]; then
            DEBDEPS="$DEBDEPS $j (= \${binary:Version})"
            JARDEPS=`echo $JARDEPS | sed "s,$i,,g"`
         fi
      done
   done

   if [ -n "$JARDEPS" ]; then
      DEBDEPS="$DEBDEPS `dpkg -S $JARDEPS 2>/dev/null | grep -v ^$p: | cut -d: -f1 | sort -u`"
   fi
   if [ -n "$VERBOSE" ]; then
      echo "Found Debs:" $DEBDEPS
   fi
   if [ -n "$WRAPPER" ]; then
      DEBDEPS="jarwrapper (>=0.5) $DEBDEPS"
   fi
   JVMDEPS=
   if [ -n "`getarg j jvm`" ] && [ -z "$JVM" ]; then
      JVM="`getarg j jvm`"
   fi
   if [ -n "$JVM" ]; then
      for j in $JVM; do
         if [ -n "$JVMDEPS" ]; then
            JVMDEPS="$JVMDEPS |"
         fi
         case "$j" in
            "default"|"true")
               JVMDEPS="default-jre | java1-runtime | java2-runtime "
               break
               ;;
            "headless")
               JVMDEPS="default-jre-headless | java1-runtime | java2-runtime "
               break
               ;;
            "gcj")
               JVMDEPS="$JVMDEPS java-gcj-compat  "
               ;;
            "sun")
               JVMDEPS="$JVMDEPS sun-java5-jre | sun-java6-jre  "
               ;;
            "sun5")
               JVMDEPS="$JVMDEPS sun-java5-jre "
               ;;
            "sun6")
               JVMDEPS="$JVMDEPS sun-java6-jre "
               ;;
            "open")
               JVMDEPS="$JVMDEPS openjdk-6-jre "
               ;;
            *)
               echo "Warning: unknown JVM type: $j"
               ;;
         esac
      done
      if [ -n "$JVMDEPS" ]; then
         JVMDEPS="$JVMDEPS, "
      fi
   fi

   cd "$OLDDIR"
   if [ -n "$VERBOSE" ]; then
      echo "Adding substvars:" "java:Depends=$JVMDEPS`echo $DEBDEPS | sed 's/\([a-zA-Z0-9_.+-]*\( *([^)]*)\)\{0,1\}\)/\1, /g;s/, *$//'`"
   fi

   if [ -z "`getarg n no-act`" ]; then
      echo "java:Depends=$JVMDEPS`echo $DEBDEPS | sed 's/\([a-zA-Z0-9_.+-]*\( *([^)]*)\)\{0,1\}\)/\1, /g;s/, *$//'`" >> debian/$p.substvars
   else
      echo "java:Depends=$JVMDEPS`echo $DEBDEPS | sed 's/\([a-zA-Z0-9_.+-]*\( *([^)]*)\)\{0,1\}\)/\1, /g;s/, *$//'`"
   fi

   unset PACKAGEDIR

done
rm -rf "$TEMPDIR"

