summaryrefslogtreecommitdiff
path: root/eclass/java-osgi.eclass
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /eclass/java-osgi.eclass
reinit the tree, so we can have metadata
Diffstat (limited to 'eclass/java-osgi.eclass')
-rw-r--r--eclass/java-osgi.eclass277
1 files changed, 277 insertions, 0 deletions
diff --git a/eclass/java-osgi.eclass b/eclass/java-osgi.eclass
new file mode 100644
index 000000000000..bb8c1d8575bd
--- /dev/null
+++ b/eclass/java-osgi.eclass
@@ -0,0 +1,277 @@
+# Copyright 2007-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: java-osgi.eclass
+# @MAINTAINER:
+# java@gentoo.org
+# @AUTHOR:
+# Java maintainers (java@gentoo.org)
+# @BLURB: Java OSGi eclass
+# @DESCRIPTION:
+# 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
+
+# @ECLASS-VARIABLE: _OSGI_T
+# @INTERNAL
+# @DESCRIPTION:
+# 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/%\//}"
+
+# must get Diego to commit something like this to portability.eclass
+_canonicalise() {
+ if type -p realpath > /dev/null; then
+ realpath "${@}"
+ elif type -p readlink > /dev/null; then
+ readlink -f "${@}"
+ else
+ # can't die, subshell
+ eerror "No readlink nor realpath found, cannot canonicalise"
+ fi
+}
+
+# @FUNCTION: _java-osgi_plugin
+# @USAGE: <plugin name>
+# @INTERNAL
+# @DESCRIPTION:
+# This is an internal function, not to be called directly.
+#
+# @CODE
+# _java-osgi_plugin "JSch"
+# @CODE
+#
+# @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
+}
+
+# @FUNCTION: _java-osgi_makejar
+# @USAGE: <jar name> <symbolic name> <bundle name> <header name>
+# @INTERNAL
+# @DESCRIPTION:
+# This is an internal function, not to be called directly.
+#
+# @CODE
+# _java-osgi_makejar "dist/${PN}.jar" "com.jcraft.jsch" "JSch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true"
+# @CODE
+#
+# @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_makejar()"
+
+ local absoluteJarPath="$(_canonicalise ${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"
+
+ 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"
+}
+
+# @FUNCTION: @java-osgi_dojar
+# @USAGE: <jar name> <symbolic name> <bundle name> <header name>
+# @DESCRIPTION:
+# 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.
+#
+# @CODE
+# java-osgi_dojar "dist/${PN}.jar" "com.jcraft.jsch" "JSch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true"
+# @CODE
+#
+# @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}"
+}
+
+# @FUNCTION: java-osgi_newjar
+# @USAGE: <jar name> <symbolic name> <bundle name> <header name>
+# @DESCRIPTION:
+# 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.
+#
+# @CODE
+# java-osgi_newjar "dist/${PN}.jar" "com.jcraft.jsch" "JSch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true"
+# @CODE
+#
+# @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}" "${5}"
+ java-pkg_newjar "${_OSGI_T}/osgi/${jarName}" "${2}"
+ else
+ _java-osgi_makejar "$@"
+ java-pkg_newjar "${_OSGI_T}/osgi/${jarName}"
+ fi
+}
+
+# @FUNCTION:_java-osgi_makejar-fromfile
+# @USAGE: <jar to repackage with OSGi> <Manifest file> <bundle name> <version rewriting>
+# @INTERNAL
+# @DESCRIPTION:
+# This is an internal function, not to be called directly.
+#
+# @CODE
+# _java-osgi_makejar-fromfile "dist/${PN}.jar" "${FILESDIR}/MANIFEST.MF" "JSch" 1
+# @CODE
+#
+# @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="$(_canonicalise ${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"
+}
+
+# @FUNCTION: java-osgi_newjar-fromfile
+# @USAGE: <jar to repackage with OSGi> <Manifest file> <bundle name> <version rewriting>
+# @DESCRIPTION:
+# 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.
+#
+# @CODE
+# java-osgi_newjar-fromfile "dist/${PN}.jar" "${FILESDIR}/MANIFEST.MF" "Standard Widget Toolkit for GTK 2.0"
+# @CODE
+#
+# @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
+}
+
+# @FUNCTION: java-osgi_dojar-fromfile
+# @USAGE: <jar to repackage with OSGi> <Manifest file> <bundle name>
+# @DESCRIPTION:
+# 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.
+#
+# @CODE
+# java-osgi_dojar-fromfile "dist/${PN}.jar" "${FILESDIR}/MANIFEST.MF" "Standard Widget Toolkit for GTK 2.0"
+# @CODE
+#
+# @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}"
+}