diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /eclass/java-osgi.eclass | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'eclass/java-osgi.eclass')
-rw-r--r-- | eclass/java-osgi.eclass | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/eclass/java-osgi.eclass b/eclass/java-osgi.eclass new file mode 100644 index 000000000000..7e13ed2edd5f --- /dev/null +++ b/eclass/java-osgi.eclass @@ -0,0 +1,292 @@ +# Base eclass for Java packages that needs to be OSGi compliant +# +# Copyright (c) 2007, Jean-Noël Rivasseau <elvanor@gmail.com> +# Copyright (c) 2007-2011, Gentoo Foundation +# +# Licensed under the GNU General Public License, v2 +# +# $Id$ + +# ----------------------------------------------------------------------------- +# @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/%\//}" + +# 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 +} + +# ----------------------------------------------------------------------------- +# @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_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" +} + +# ----------------------------------------------------------------------------- +# @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" "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_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" "JSch" "com.jcraft.jsch, com.jcraft.jsch.jce;x-internal:=true" +# +# @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 +} + +# ----------------------------------------------------------------------------- +# @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="$(_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" +} + +# ----------------------------------------------------------------------------- +# @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}" +} |