summaryrefslogtreecommitdiffstats
path: root/classes
diff options
context:
space:
mode:
authorHenning Heinold <heinold@inf.fu-berlin.de>2011-11-12 20:58:34 +0100
committerHenning Heinold <heinold@inf.fu-berlin.de>2011-11-26 23:41:44 +0100
commit57e069cde6617f00ca8834a82c6f360af43d5067 (patch)
tree48cbe15e96d217c45acfa64b0c13aad8c6424980 /classes
downloadmeta-java-57e069cde6617f00ca8834a82c6f360af43d5067.tar.gz
meta-java: initial commit
* taken over mostly stuff from oe classic * cleaned up recipes * added license checksums * bump icedtea6-native to 1.8.11 * use jamvm from git as native
Diffstat (limited to 'classes')
-rw-r--r--classes/java-library.bbclass58
-rw-r--r--classes/java-native.bbclass9
-rw-r--r--classes/java.bbclass184
3 files changed, 251 insertions, 0 deletions
diff --git a/classes/java-library.bbclass b/classes/java-library.bbclass
new file mode 100644
index 0000000..4396bb3
--- /dev/null
+++ b/classes/java-library.bbclass
@@ -0,0 +1,58 @@
1# Inherit this bbclass for each java recipe that builds a Java library (jar file[s]).
2#
3# It automatically adds important build dependencies, defines JPN (Java Package Name)
4# a package named ${JPN} whose contents are those of ${datadir}/java (the jar location).
5#
6# The JPN is basically lib${PN}-java but takes care of the fact that ${PN} already
7# starts with "lib" and/or ends with "-java". In case the "lib" prefix is part of
8# your package's normal name (e.g. liberator) the guessing is wrong and you have
9# to set JPN manually!
10
11inherit java
12
13# use java_stage for native packages
14JAVA_NATIVE_STAGE_INSTALL = "1"
15
16def java_package_name(d):
17 import bb;
18
19 pre=""
20 post=""
21
22 pn = bb.data.getVar('PN', d, 1)
23 if not pn.startswith("lib"):
24 pre='lib'
25
26 if not pn.endswith("-java"):
27 post='-java'
28
29 return pre + pn + post
30
31JPN ?= "${@java_package_name(d)}"
32
33DEPENDS_prepend = "virtual/javac-native fastjar-native "
34
35PACKAGES = "${JPN}"
36
37PACKAGE_ARCH_${JPN} = "all"
38
39FILES_${JPN} = "${datadir_java}"
40
41# File name of the libraries' main Jar file
42JARFILENAME = "${BP}.jar"
43
44# Space-separated list of alternative file names.
45ALTJARFILENAMES = "${BPN}.jar"
46
47# Java "source" distributions often contain precompiled things
48# we want to delete first.
49do_removebinaries() {
50 find ${WORKDIR} -name "*.jar" -exec rm {} \;
51 find ${WORKDIR} -name "*.class" -exec rm {} \;
52}
53
54addtask removebinaries after do_unpack before do_patch
55
56do_install() {
57 oe_jarinstall ${JARFILENAME} ${ALTJARFILENAMES}
58}
diff --git a/classes/java-native.bbclass b/classes/java-native.bbclass
new file mode 100644
index 0000000..cade7b1
--- /dev/null
+++ b/classes/java-native.bbclass
@@ -0,0 +1,9 @@
1# This is to be used by recipes which rely on java-library.bbclass
2# infrastructure and are a *-native recipe which needs to install
3# jar files into staging.
4#
5# This class has nothing to do with Java's JNI.
6
7inherit native
8
9NATIVE_INSTALL_WORKS = "1"
diff --git a/classes/java.bbclass b/classes/java.bbclass
new file mode 100644
index 0000000..6a45065
--- /dev/null
+++ b/classes/java.bbclass
@@ -0,0 +1,184 @@
1# Defines the commonly used target directories and provides a convenience
2# function to install jar files.
3#
4# All the default directory locations herein resemble locations chosen in
5# the Debian distribution.
6
7# Jar location on target
8datadir_java ?= ${datadir}/java
9
10# JNI library location on target
11libdir_jni ?= ${libdir}/jni
12
13# JVM bundle location on target
14libdir_jvm ?= ${libdir}/jvm
15
16STAGING_DATADIR_JAVA ?= ${STAGING_DATADIR}/java
17STAGING_LIBDIR_JNI ?= ${STAGING_LIBDIR}/jni
18STAGING_LIBDIR_JVM ?= ${STAGING_LIBDIR}/jvm
19
20STAGING_DATADIR_JAVA_NATIVE ?= ${STAGING_DATADIR_NATIVE}/java
21STAGING_LIBDIR_JNI_NATIVE ?= ${STAGING_LIBDIR_NATIVE}/jni
22STAGING_LIBDIR_JVM_NATIVE ?= ${STAGING_LIBDIR_NATIVE}/jvm
23
24oe_jarinstall() {
25 # Purpose: Install a jar file and create all the given symlinks to it.
26 # Example:
27 # oe_jarinstall foo-1.3.jar foo.jar
28 # Installs foo-1.3.jar and creates symlink foo.jar.
29 #
30 # oe_jarinstall -r foo-1.3.jar foo_1_3.jar foo.jar
31 # Installs foo_1_3.jar as foo-1.3.jar and creates a symlink to this.
32 #
33 dir=${D}${datadir_java}
34 destname=""
35 while [ "$#" -gt 0 ]; do
36 case "$1" in
37 -r)
38 shift
39 destname=$1
40 ;;
41 -*)
42 oefatal "oe_jarinstall: unknown option: $1"
43 ;;
44 *)
45 break;
46 ;;
47 esac
48 shift
49 done
50
51 jarname=$1
52 destname=${destname:-`basename $jarname`}
53 shift
54
55 install -d $dir
56 install -m 0644 $jarname $dir/$destname
57
58 # Creates symlinks out of the remaining arguments.
59 while [ "$#" -gt 0 ]; do
60 if [ -e $dir/$1 -o -h $dir/$1 ]; then
61 oewarn "file was in the way. removing:" $dir/$1
62 rm $dir/$1
63 fi
64 ln -s $destname $dir/$1
65 shift
66 done
67}
68
69oe_makeclasspath() {
70 # Purpose: Generate a classpath variable from the given Jar file names
71 # where the ".jar" has been omitted. The string is stored in the script
72 # variable whose name is given in the first argument to this function.
73 #
74 # oe_makeclasspath cp foo baz bar
75 # Stores ${datadir_java}/foo.jar:${datadir_java}/baz.jar:${datadir_java}/bar.jar
76 # in variable "cp".
77 #
78 # oe_makeclasspath bootcp -s foo baz bar
79 # Stores ${STAGING_DATADIR_JAVA}/foo.jar:${STAGING_DATADIR_JAVA}/baz.jar:${STAGING_DATADIR_JAVA}/bar.jar
80 # in variable "bootcp".
81 #
82 # Provide the -s at the beginning otherwise strange things happen.
83 # If -s is given the function checks whether the requested jar file exists
84 # and exits with an error message if it cannot be found.
85 #
86 # Note: In order to encourage usage of the DEPENDS variable, the function
87 # can accept recipe names. If a recipe has no corresponding Jar file it
88 # is ignored. Be careful with recipes where the recipe name is different
89 # from the the Jar file name!
90 dir=${datadir_java}
91 classpath=
92 delimiter=
93 retval=$1
94
95 shift
96
97 while [ "$#" -gt 0 ]; do
98 case "$1" in
99 -s)
100 # take jar files from native staging if this is a -native recipe
101 if [ ${PACKAGE_ARCH} = ${BUILD_ARCH} ]; then
102 dir=${STAGING_DATADIR_JAVA_NATIVE}
103 else
104 dir=${STAGING_DATADIR_JAVA}
105 fi
106 ;;
107 -*)
108 oefatal "oe_makeclasspath: unknown option: $1"
109 ;;
110 *)
111 file=$dir/$1.jar
112
113 if [ -e $file ]; then
114 classpath=$classpath$delimiter$file
115 delimiter=":"
116 fi
117
118 ;;
119 esac
120 shift
121 done
122
123 eval $retval="$classpath"
124}
125
126# Creates a simple wrapper script for your Java program.
127# The script is written to ${PN} by default.
128#
129# Parameters are as follows:
130# [options] <output file> <main class> [jar files ...]
131#
132# Options are
133# -o <name> where name is the output file name
134#
135# It can only take jar files from ${datadir_java}!
136oe_java_simple_wrapper() {
137 delimiter=
138 mainclass=
139 classpath=
140 output=${PN}
141
142 while [ "$#" -gt 0 ]; do
143 case "$1" in
144 -o)
145 shift
146 output=$1
147 ;;
148 -*)
149 oefatal "oe_java_simple_wrapper: unknown option: $1"
150 ;;
151 *)
152 if [ $mainclass ]
153 then
154 classpath=$classpath$delimiter${datadir_java}/$1
155 delimiter=":"
156 else
157 mainclass=$1
158 fi
159 ;;
160 esac
161 shift
162 done
163
164 oenote "Creating simple Java wrapper script"
165 oenote "Output File: $output"
166 oenote "Main Class: $mainclass"
167 oenote "Classpath: $classpath"
168
169 echo "#!/bin/sh" > $output
170 echo "# This file is autogenerated by the oe_java_simple_wrapper function of OpenEmbedded" >> $output
171 echo >> $output
172 echo "# You can provide additional VM arguments by setting the VMARGS environment variable." >> $output
173 echo "CLASSPATH_ARG=\"-cp $classpath\"" >> $output
174 echo >> $output
175 echo "MAIN_CLASS=$mainclass" >> $output
176 echo >> $output
177 echo "# Allows overriding the VM by setting the JAVA environment variable." >> $output
178 echo "if [ x\${JAVA} = x ]" >> $output
179 echo "then" >> $output
180 echo " JAVA=java" >> $output
181 echo "fi" >> $output
182 echo >> $output
183 echo "exec \${JAVA} \${VMARGS} \${CLASSPATH_ARG} \${MAIN_CLASS} \${@}" >> $output
184}