blob: 6c33a21bee126083cac1493700c0637331ccacb6 [file] [log] [blame]
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/eclipse-ext.eclass,v 1.13 2006/04/17 03:47:44 nichoj Exp $
# Original Author: Karl Trygve Kalleberg <karltk@gentoo.org>
# Maintainers:
# Development Tools Team <dev-tools@gentoo.org>
# Java Team <java@gentoo.org>
inherit eutils multilib
# Must be listed in oldest->newest order!
known_eclipse_slots="2 3 3.1"
# These should not be reinitialized if previously set
# (check allows require-slot in pkg_setup)
[ -z "${eclipse_ext_type}" ] && \
eclipse_ext_type="source"
[ -z "${eclipse_ext_slot}" ] && \
eclipse_ext_slot="0"
[ -z "${eclipse_ext_basedir}" ] && \
eclipse_ext_basedir="/usr/$(get_libdir)/eclipse-extensions-${eclipse_ext_slot}/eclipse"
[ -z "${eclipse_ext_platformdir}" ] && \
eclipse_ext_platformdir="/usr/$(get_libdir)/eclipse-${eclipse_ext_slot}"
# ---------------------------------------------------------------------------
# @private _find-optimum-slot
#
# Look for a given SLOT. If not found return the least highest SLOT
# available.
#
# @param $1 - SLOT of Eclipse SDK that is most desired
# @return 0 - all is well, non-zero otherwise
# ---------------------------------------------------------------------------
function _find-optimum-slot {
local found=false
for x in ${known_eclipse_slots} ; do
if [ "$1" == "$x" ] ; then
found=true
fi
if [ "${found}" == "true" ] && [ -d /usr/$(get_libdir)/eclipse-${x} ] ; then
echo $x
return 0
fi
done
echo ""
return 1
}
# ---------------------------------------------------------------------------
# @public require-slot
#
# Ensure that an Eclipse SDK is actually available for the given slot;
# sets internal state to install for selected slot.
#
# @param $1 - SLOT of Eclipse SDK that required for this ebuild
# alternatively
# @return 0 - all is well, non-zero otherwise
# ---------------------------------------------------------------------------
function eclipse-ext_require-slot {
local slot=$(_find-optimum-slot $1)
if [ -z "${slot}" ] ; then
eerror "Cannot find any Eclipse SDK supporting slot $1"
return 1
fi
if [ "${slot}" != "$1" ] ; then
ewarn "Slot $1 could not be satisfied, installing for ${slot} instead"
fi
eclipse_ext_slot=${slot}
eclipse_ext_basedir="/usr/$(get_libdir)/eclipse-extensions-${eclipse_ext_slot}/eclipse"
eclipse_ext_platformdir="/usr/$(get_libdir)/eclipse-${eclipse_ext_slot}"
return 0
}
# ---------------------------------------------------------------------------
# @public create-plugin-layout
#
# Create directory infrastructure for binary-only plugins so that the installed
# Eclipse SDK will see them. Sets internal state for installing as source or
# binary.
#
# @param $1 - type of ebuild, "source" or "binary"
# @return - nothing
# ---------------------------------------------------------------------------
function eclipse-ext_create-ext-layout {
local type=$1
if [ "${type}" == "binary" ] ; then
eclipse_ext_basedir="/opt/eclipse-extensions-${eclipse_ext_slot}/eclipse"
dodir ${eclipse_ext_basedir}/{features,plugins}
touch ${D}/${eclipse_ext_basedir}/.eclipseextension
else
eclipse_ext_basedir="/usr/$(get_libdir)/eclipse-extensions-${eclipse_ext_slot}/eclipse"
dodir ${eclipse_ext_basedir}/{features,plugins}
touch ${D}/${eclipse_ext_basedir}/.eclipseextension
fi
}
# ---------------------------------------------------------------------------
# @public install-features
#
# Installs one or multiple features into the plugin directory for the required
# Eclipse SDK.
#
# Note: You must call require-slot prior to calling install-features. If your
# ebuild is for a binary-only plugin, you must also call create-plugin-layout
# prior to calling install-features.
#
# @param $* - feature directories
# @return 0 - if all is well
# 1 - if require-slot was not called
# ---------------------------------------------------------------------------
function eclipse-ext_install-features {
if [ ${eclipse_ext_slot} == 0 ] ; then
eerror "You must call require-slot prior to calling ${FUNCNAME}!"
return 1
fi
for x in $* ; do
if [ -d "$x" ] && [ -f $x/feature.xml ] ; then
cp -a $x ${D}/${eclipse_ext_basedir}/features
else
eerror "$x not a feature directory!"
fi
done
}
# ---------------------------------------------------------------------------
# @public install-plugins
#
# Installs one or multiple plugins into the plugin directory for the required
# Eclipse SDK.
#
# Note: You must call require-slot prior to calling install-features. If your
# ebuild is for a binary-only plugin, you must also call create-plugin-layout
# prior to calling install-features.
#
# @param $* - plugin directories
# @return - nothing
# ---------------------------------------------------------------------------
function eclipse-ext_install-plugins {
if [ ${eclipse_ext_slot} == 0 ] ; then
eerror "You must call require-slot prior to calling ${FUNCNAME}!"
return 1
fi
for x in $* ; do
if [ -d "$x" ] && ( [ -f "$x/plugin.xml" ] || [ -f "$x/fragment.xml" ] ) ; then
cp -a $x ${D}/${eclipse_ext_basedir}/plugins
else
eerror "$x not a plugin directory!"
fi
done
}
# TODO really should have a page hosted on gentoo's infra
function eclipse-ext_pkg_postinst() {
einfo "For tips, tricks and general info on running Eclipse on Gentoo, go to:"
einfo "http://gentoo-wiki.com/Eclipse"
}
# ---------------------------------------------------------------------------
# @public get-classpath
#
# Tries to parse out a classpath string from a build.properties file. Is very
# stupid: Assumes it's a one-liner on the form classpath = comma:separated:
#
# @param $1 - name of the file (typically build.properties)
# @param $2 - name of the one-liner env var (default 'classpath')
# @return - echo of space-separated classpath entries.
# ---------------------------------------------------------------------------
eclipse-ext_get-classpath() {
local file=$1
local envvar="classpath"
if [ "$1" == "build.properties" ] ; then
if [ ! -z "$2" ] ; then
envvar="$2"
fi
fi
echo "$(cat ${FILESDIR}/build.properties-${PV} | sed "s/.*=//" | tr ';' ' ')"
}
_path-dissecter() {
echo $1 | sed -r "s/.*\/([^/]+)_([0-9.]+)\/(.*)/\\${2}/"
}
_get-plugin-name() {
_path-dissecter $1 1
}
_get-plugin-version() {
_path-dissecter $1 2
}
_get-plugin-content() {
_path-dissecter $1 3
}
# ---------------------------------------------------------------------------
# @public resolve-jars
#
# Takes a space-separated list of plugin_version/subdirs/file.jar entries and
# tries to resolve the version for the plugin against the chosen eclipse version
# (set by require-slot).
#
# Note: You must call require-slot prior to calling resolve-jars.
#
# @param $1 - string with space-separated plugin/jarfile
# @return - echo of :-separated resolved files
# ---------------------------------------------------------------------------
eclipse-ext_resolve-jars() {
local resolved=""
for x in $1 ; do
local jarfile=$(_get-plugin-content $x)
local name="$(_get-plugin-name $x)"
local x=$(echo ${eclipse_ext_platformdir}/plugins/${name}_*/${jarfile})
if [ -f ${x} ] ; then
resolved="${resolved}:$x"
else
:
#echo "Warning: did not find ${name}"
fi
done
echo ${resolved}
}
EXPORT_FUNCTIONS pkg_postinst