123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- # 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}"
- }
|