Update drivers
[vuplus_openembedded] / classes / java.bbclass
index 7fa6dc1..d4cf5aa 100644 (file)
@@ -1,5 +1,8 @@
 # Defines the commonly used target directories and provides a convenience
 # function to install jar files.
+#
+# All the default directory locations herein resemble locations chosen in
+# the Debian distribution.
 
 # Jar location on target
 datadir_java ?= ${datadir}/java
@@ -7,8 +10,16 @@ datadir_java ?= ${datadir}/java
 # JNI library location on target
 libdir_jni ?= ${libdir}/jni
 
-STAGING_DATADIR_JAVA ?= ${STAGING_DATADIR}/java
+# JVM bundle location on target
+libdir_jvm ?= ${libdir}/jvm
+
+STAGING_DATADIR_JAVA ?= ${STAGING_DIR_JAVA}
 STAGING_LIBDIR_JNI ?= ${STAGING_LIBDIR}/jni
+STAGING_LIBDIR_JVM ?= ${STAGING_LIBDIR}/jvm
+
+STAGING_DATADIR_JAVA_NATIVE ?= ${STAGING_DATADIR_NATIVE}/java
+STAGING_LIBDIR_JNI_NATIVE ?= ${STAGING_LIBDIR_NATIVE}/jni
+STAGING_LIBDIR_JVM_NATIVE ?= ${STAGING_LIBDIR_NATIVE}/jvm
 
 oe_jarinstall() {
   # Purpose: Install a jar file and create all the given symlinks to it.
@@ -27,7 +38,12 @@ oe_jarinstall() {
   while [ "$#" -gt 0 ]; do
     case "$1" in
     -s)
-      dir=${STAGING_DATADIR_JAVA}
+                       # put jar files to native staging if this is a -native recipe
+                       if [ ${PACKAGE_ARCH} = ${BUILD_ARCH} ]; then
+             dir=${STAGING_DATADIR_JAVA_NATIVE}
+                       else
+             dir=${STAGING_DATADIR_JAVA}
+                       fi
       ;;
     -r)
       shift
@@ -52,7 +68,7 @@ oe_jarinstall() {
 
   # Creates symlinks out of the remaining arguments.
   while [ "$#" -gt 0 ]; do
-    if [ -e $dir/$1 ]; then
+    if [ -e $dir/$1 -o -h $dir/$1 ]; then
       oewarn "file was in the way. removing:" $dir/$1
       rm $dir/$1
     fi
@@ -60,3 +76,120 @@ oe_jarinstall() {
     shift
   done
 }
+
+oe_makeclasspath() {
+  # Purpose: Generate a classpath variable from the given Jar file names
+  # where the ".jar" has been omitted. The string is stored in the script
+  # variable whose name is given in the first argument to this function.
+  #
+  # oe_makeclasspath cp foo baz bar
+  # Stores ${datadir_java}/foo.jar:${datadir_java}/baz.jar:${datadir_java}/bar.jar
+  # in variable "cp".
+  #
+  # oe_makeclasspath bootcp -s foo baz bar
+  # Stores ${STAGING_DATADIR_JAVA}/foo.jar:${STAGING_DATADIR_JAVA}/baz.jar:${STAGING_DATADIR_JAVA}/bar.jar
+  # in variable "bootcp".
+  # 
+  # Provide the -s at the beginning otherwise strange things happen.
+  # If -s is given the function checks whether the requested jar file exists
+  # and exits with an error message if it cannot be found.
+  #
+  # Note: In order to encourage usage of the DEPENDS variable, the function
+  # can accept recipe names. If a recipe has no corresponding Jar file it
+  # is ignored. Be careful with recipes where the recipe name is different
+  # from the the Jar file name!
+  dir=${datadir_java}
+  classpath=
+  delimiter=
+  retval=$1
+
+  shift
+
+  while [ "$#" -gt 0 ]; do
+      case "$1" in
+          -s)
+              # take jar files from native staging if this is a -native recipe
+              if [ ${PACKAGE_ARCH} = ${BUILD_ARCH} ]; then
+                  dir=${STAGING_DATADIR_JAVA_NATIVE}
+              else
+                  dir=${STAGING_DATADIR_JAVA}
+              fi
+              ;;
+          -*)
+              oefatal "oe_makeclasspath: unknown option: $1"
+              ;;
+          *)
+              file=$dir/$1.jar
+
+              if [ -e $file ]; then
+                  classpath=$classpath$delimiter$file
+                  delimiter=":"
+              fi
+
+          ;;
+      esac
+      shift
+  done
+
+  eval $retval="$classpath"
+}
+
+# Creates a simple wrapper script for your Java program.
+# The script is written to ${PN} by default. 
+#
+# Parameters are as follows:
+# [options] <output file> <main class> [jar files ...]
+#
+# Options are
+# -o <name> where name is the output file name
+#
+# It can only take jar files from ${datadir_java}!
+oe_java_simple_wrapper() {
+  delimiter=
+  mainclass=
+  classpath=
+  output=${PN}
+
+  while [ "$#" -gt 0 ]; do
+    case "$1" in
+    -o)
+      shift
+      output=$1
+      ;;
+    -*)
+      oefatal "oe_java_simple_wrapper: unknown option: $1"
+      ;;
+    *)
+      if [ $mainclass ]
+      then
+        classpath=$classpath$delimiter${datadir_java}/$1
+        delimiter=":"
+      else
+        mainclass=$1
+      fi
+      ;;
+    esac
+    shift
+  done
+
+  oenote "Creating simple Java wrapper script"
+  oenote "Output File: $output"
+  oenote "Main Class: $mainclass"
+  oenote "Classpath: $classpath"
+
+  echo "#!/bin/sh" > $output
+  echo "# This file is autogenerated by the oe_java_simple_wrapper function of OpenEmbedded" >> $output
+  echo >> $output
+  echo "# You can provide additional VM arguments by setting the VMARGS environment variable." >> $output
+  echo "CLASSPATH_ARG=\"-cp $classpath\"" >> $output
+  echo >> $output
+  echo "MAIN_CLASS=$mainclass" >> $output
+  echo >> $output
+  echo "# Allows overriding the VM by setting the JAVA environment variable." >> $output
+  echo "if [ x\${JAVA} = x ]" >> $output
+  echo "then" >> $output
+  echo "  JAVA=java" >> $output
+  echo "fi" >> $output
+  echo >> $output
+  echo "exec \${JAVA} \${VMARGS} \${CLASSPATH_ARG} \${MAIN_CLASS} \${@}" >> $output
+}