summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorJean-Noël Rivasseau <elvanor@gentoo.org>2008-01-09 10:51:20 +0000
committerJean-Noël Rivasseau <elvanor@gentoo.org>2008-01-09 10:51:20 +0000
commitfa7330a4444fa9d94d0175ce78033c0c08309a0d (patch)
treee29f6db0a661ea014609a3ee687a99e51ead9a95 /eclass
parentFix P / MY_P usage for bug #202624 (diff)
downloadgentoo-2-fa7330a4444fa9d94d0175ce78033c0c08309a0d.tar.gz
gentoo-2-fa7330a4444fa9d94d0175ce78033c0c08309a0d.tar.bz2
gentoo-2-fa7330a4444fa9d94d0175ce78033c0c08309a0d.zip
Added the java-osgi eclass which is needed for creating OSGi compliants Java packages.
The main reason for this addition is to pave the way for Eclipse-3.3.
Diffstat (limited to 'eclass')
-rw-r--r--eclass/java-osgi.eclass280
1 files changed, 280 insertions, 0 deletions
diff --git a/eclass/java-osgi.eclass b/eclass/java-osgi.eclass
new file mode 100644
index 000000000000..4b8dec88098a
--- /dev/null
+++ b/eclass/java-osgi.eclass
@@ -0,0 +1,280 @@
+# Base eclass for Java packages that needs to be OSGi compliant
+#
+# Copyright (c) 2007, Jean-Noël Rivasseau <elvanor@gmail.com>
+# Copyright (c) 2007, Gentoo Foundation
+#
+# Licensed under the GNU General Public License, v2
+#
+# $Header: /var/cvsroot/gentoo-x86/eclass/java-osgi.eclass,v 1.1 2008/01/09 10:51:20 elvanor Exp $
+
+# -----------------------------------------------------------------------------
+# @eclass-begin
+# @eclass-shortdesc Java OSGi eclass
+# @eclass-maintainer java@gentoo.org
+#
+# This eclass provides functionality which is used by
+# packages that need to be OSGi compliant. This means
+# that the generated jars will have special headers in their manifests.
+# Currently this is used only by Eclipse-3.3 - later
+# we could extend this so that Gentoo Java system would be
+# fully OSGi compliant.
+#
+# -----------------------------------------------------------------------------
+
+inherit java-utils-2
+
+# We define _OSGI_T so that it does not contain a slash at the end.
+# According to Paludis guys, there is currently a proposal for EAPIs that
+# would require all variables to end with a slash.
+
+_OSGI_T="${T/%\//}"
+
+# -----------------------------------------------------------------------------
+# @ebuild-function _java-osgi_plugin
+#
+# This is an internal function, not to be called directly.
+#
+# @example
+# _java-osgi_plugin "JSch"
+#
+# @param $1 - bundle name
+#
+# ------------------------------------------------------------------------------
+
+_java-osgi_plugin() {
+ # We hardcode Gentoo as the vendor name
+
+ cat > "${_OSGI_T}/tmp_jar/plugin.properties" <<-EOF
+ bundleName="${1}"
+ vendorName="Gentoo"
+ EOF
+}
+
+# -----------------------------------------------------------------------------
+# @ebuild-function _java-osgi_makejar
+#
+# This is an internal function, not to be called directly.
+#
+# @example
+# _java-osgi_makejar "dist/${PN}.jar" "com.jcraft.jsch" "JSch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true"
+#
+# @param $1 - name of jar to repackage with OSGi
+# @param $2 - bundle symbolic name
+# @param $3 - bundle name
+# @param $4 - export-package header
+#
+# ------------------------------------------------------------------------------
+
+_java-osgi_makejar() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ (( ${#} < 4 )) && die "Four arguments are needed for java-osgi_dojar-fromfile()"
+
+ local absoluteJarPath="$(readlink -f ${1})"
+ local jarName="$(basename $1)"
+
+ mkdir "${_OSGI_T}/tmp_jar" || die "Unable to create directory ${_OSGI_T}/tmp_jar"
+ [[ -d "${_OSGI_T}/osgi" ]] || mkdir "${_OSGI_T}/osgi" || die "Unable to create directory ${_OSGI_T}/osgi"
+
+ cd "${_OSGI_T}/tmp_jar" && jar xf "${1}" && cd - > /dev/null \
+ || die "Unable to uncompress correctly the original jar"
+
+ cat > "${_OSGI_T}/tmp_jar/META-INF/MANIFEST.MF" <<-EOF
+ Manifest-Version: 1.0
+ Bundle-ManifestVersion: 2
+ Bundle-Name: %bundleName
+ Bundle-Vendor: %vendorName
+ Bundle-Localization: plugin
+ Bundle-SymbolicName: ${2}
+ Bundle-Version: ${PV}
+ Export-Package: ${4}
+ EOF
+
+ _java-osgi_plugin "${3}"
+
+ jar cfm "${_OSGI_T}/osgi/${jarName}" "${_OSGI_T}/tmp_jar/META-INF/MANIFEST.MF" \
+ -C "${_OSGI_T}/tmp_jar/" . > /dev/null || die "Unable to recreate the OSGi compliant jar"
+ rm -rf "${_OSGI_T}/tmp_jar"
+}
+
+# -----------------------------------------------------------------------------
+# @ebuild-function java-osgi_dojar
+#
+# Rewrites a jar, and produce an OSGi compliant jar from arguments given on the command line.
+# The arguments given correspond to the minimal set of headers
+# that must be present on a Manifest file of an OSGi package.
+# If you need more headers, you should use the *-fromfile functions below,
+# that create the Manifest from a file.
+# It will call java-pkg_dojar at the end.
+#
+# @example
+# java-osgi_dojar "dist/${PN}.jar" "com.jcraft.jsch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true" "JSch"
+#
+# @param $1 - name of jar to repackage with OSGi
+# @param $2 - bundle symbolic name
+# @param $3 - bundle name
+# @param $4 - export-package-header
+#
+# ------------------------------------------------------------------------------
+
+java-osgi_dojar() {
+ debug-print-function ${FUNCNAME} "$@"
+ local jarName="$(basename ${1})"
+ _java-osgi_makejar "$@"
+ java-pkg_dojar "${_OSGI_T}/osgi/${jarName}"
+}
+
+# -----------------------------------------------------------------------------
+# @ebuild-function java-osgi_newjar
+#
+# Rewrites a jar, and produce an OSGi compliant jar.
+# The arguments given correspond to the minimal set of headers
+# that must be present on a Manifest file of an OSGi package.
+# If you need more headers, you should use the *-fromfile functions below,
+# that create the Manifest from a file.
+# It will call java-pkg_newjar at the end.
+#
+# @example
+# java-osgi_newjar "dist/${PN}.jar" "com.jcraft.jsch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true" "JSch"
+#
+# @param $1 - name of jar to repackage with OSGi
+# @param $2 (optional) - name of the target jar. It will default to package name if not specified.
+# @param $3 - bundle symbolic name
+# @param $4 - bundle name
+# @param $5 - export-package header
+#
+# ------------------------------------------------------------------------------
+
+java-osgi_newjar() {
+ debug-print-function ${FUNCNAME} "$@"
+ local jarName="$(basename $1)"
+
+ if (( ${#} > 4 )); then
+ _java-osgi_makejar "${1}" "${3}" "${4}"
+ java-pkg_newjar "${_OSGI_T}/osgi/${jarName}" "${2}"
+ else
+ _java-osgi_makejar "$@"
+ java-pkg_newjar "${_OSGI_T}/osgi/${jarName}"
+ fi
+}
+
+# -----------------------------------------------------------------------------
+# @ebuild-function _java-osgi_makejar-fromfile
+#
+# This is an internal function, not to be called directly.
+#
+# @example
+# _java-osgi_makejar-fromfile "dist/${PN}.jar" "${FILESDIR}/MANIFEST.MF" "JSch" 1
+#
+# @param $1 - name of jar to repackage with OSGi
+# @param $2 - path to the Manifest file
+# @param $3 - bundle name
+# @param $4 - automatic version rewriting (0 or 1)
+#
+# ------------------------------------------------------------------------------
+
+_java-osgi_makejar-fromfile() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ ((${#} < 4)) && die "Four arguments are needed for _java-osgi_makejar-fromfile()"
+
+ local absoluteJarPath="$(readlink -f ${1})"
+ local jarName="$(basename ${1})"
+
+ mkdir "${_OSGI_T}/tmp_jar" || die "Unable to create directory ${_OSGI_T}/tmp_jar"
+ [[ -d "${_OSGI_T}/osgi" ]] || mkdir "${_OSGI_T}/osgi" || die "Unable to create directory ${_OSGI_T}/osgi"
+
+ cd "${_OSGI_T}/tmp_jar" && jar xf "${absoluteJarPath}" && cd - > /dev/null \
+ || die "Unable to uncompress correctly the original jar"
+
+ [[ -e "${2}" ]] || die "Manifest file ${2} not found"
+
+ # We automatically change the version if automatic version rewriting is on
+
+ if (( ${4} )); then
+ cat "${2}" | sed "s/Bundle-Version:.*/Bundle-Version: ${PV}/" > \
+ "${_OSGI_T}/tmp_jar/META-INF/MANIFEST.MF"
+ else
+ cat "${2}" > "${_OSGI_T}/tmp_jar/META-INF/MANIFEST.MF"
+ fi
+
+ _java-osgi_plugin "${3}"
+
+ jar cfm "${_OSGI_T}/osgi/${jarName}" "${_OSGI_T}/tmp_jar/META-INF/MANIFEST.MF" \
+ -C "${_OSGI_T}/tmp_jar/" . > /dev/null || die "Unable to recreate the OSGi compliant jar"
+ rm -rf "${_OSGI_T}/tmp_jar"
+}
+
+# -----------------------------------------------------------------------------
+# @ebuild-function java-osgi_newjar-fromfile()
+#
+# This function produces an OSGi compliant jar from a given manifest file.
+# The Manifest Bundle-Version header will be replaced by the current version
+# of the package, unless the --no-auto-version option is given.
+# It will call java-pkg_newjar at the end.
+#
+# @example
+# java-osgi_newjar-fromfile "dist/${PN}.jar" "${FILESDIR}/MANIFEST.MF" "Standard Widget Toolkit for GTK 2.0"
+#
+# @param $opt
+# --no-auto-version - This option disables automatic rewriting of the
+# version in the Manifest file#
+# @param $1 - name of jar to repackage with OSGi
+# @param $2 (optional) - name of the target jar. It will default to package name if not specified.
+# @param $3 - path to the Manifest file
+# @param $4 - bundle name
+#
+# ------------------------------------------------------------------------------
+
+java-osgi_newjar-fromfile() {
+ debug-print-function ${FUNCNAME} "$@"
+ local versionRewriting=1
+
+ if [[ "${1}" == "--no-auto-version" ]]; then
+ versionRewriting=0
+ shift
+ fi
+ local jarName="$(basename ${1})"
+
+ if (( ${#} > 3 )); then
+ _java-osgi_makejar-fromfile "${1}" "${3}" "${4}" "${versionRewriting}"
+ java-pkg_newjar "${_OSGI_T}/osgi/${jarName}" "${2}"
+ else
+ _java-osgi_makejar-fromfile "$@" "${versionRewriting}"
+ java-pkg_newjar "${_OSGI_T}/osgi/${jarName}"
+ fi
+}
+
+# -----------------------------------------------------------------------------
+# @ebuild-function java-osgi_dojar-fromfile()
+#
+# This function produces an OSGi compliant jar from a given manifestfile.
+# The Manifest Bundle-Version header will be replaced by the current version
+# of the package, unless the --no-auto-version option is given.
+# It will call java-pkg_dojar at the end.
+#
+# @example
+# java-osgi_dojar-fromfile "dist/${PN}.jar" "${FILESDIR}/MANIFEST.MF" "Standard Widget Toolkit for GTK 2.0"
+#
+# @param $opt
+# --no-auto-version - This option disables automatic rewriting of the
+# version in the Manifest file
+# @param $1 - name of jar to repackage with OSGi
+# @param $2 - path to the Manifest file
+# @param $3 - bundle name
+#
+# ------------------------------------------------------------------------------
+
+java-osgi_dojar-fromfile() {
+ debug-print-function ${FUNCNAME} "$@"
+ local versionRewriting=1
+
+ if [[ "${1}" == "--no-auto-version" ]]; then
+ versionRewriting=0
+ shift
+ fi
+ local jarName="$(basename ${1})"
+
+ _java-osgi_makejar-fromfile "$@" "${versionRewriting}"
+ java-pkg_dojar "${_OSGI_T}/osgi/${jarName}"
+}