blob: df7a2ab1dc3d0cb63ccec65c69f55ed5ee1d1cba [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/rox-0install.eclass,v 1.2 2007/12/04 21:26:55 lack Exp $
# ROX-0install eclass Version 1
# Created by Jim Ramsay (lack@gentoo.org) to ease installation of ROX desktop
# applications and integrate this with zeroinstall-injector
# (http://0install.net)
# These variables are only used inside functions, and so may be set anywhere in
# the ebuild:
#
# ZEROINSTALL_STRIP_REQUIRES - this flag, if set, will force the local
# zeroinstall feed to have all its 'requires' directives stripped out
# LOCAL_FEED_SRC - The ebuild-supplied native feed, for those packages which do
# not already contain one. By default we check for ${APPNAME}.xml and
# ${APPNAME}/${APPNAME}.xml
# This is an extension of rox.eclass
inherit rox
DEPEND="${DEPEND}
>=rox-base/zeroinstall-injector-0.31"
# Some locations for ZEROINSTALL
NATIVE_FEED_DIR="/usr/share/0install.net/native_feeds"
ICON_CACHE_DIR="/var/cache/0install.net/interface_icons"
# Does all the 0install local feed magic you could want:
# - Parses the input file to get the interface URI
# - Edits the input file and installs it to the final location
# - Installs a local feed pointer
#
# Environment variables:
# ZEROINSTALL_STRIP_REQUIRES - If set, strips all 'requires' sections from the XML
# on editing. Default: Not set
#
# 0install_native_feed <src> <destpath>
# src - The XML file we will edit, install, and point at
# path - The path where the implementation will be installed
# IE, the final edited xml will be at <path>/<basename of src>
0install_native_feed() {
local src=$1 path=$2
local feedfile=${src##*/}
local dest="${path}/${feedfile}"
0distutils "${src}" > tmp.native_feed || die "0distutils feed edit failed"
if [[ ${ZEROINSTALL_STRIP_REQUIRES} ]]; then
# Strip out all 'requires' sections
sed -i -e '/<requires.*\/>/d' \
-e '/<requires.*\>/,/<\/requires>/d' tmp.native_feed
fi
(
insinto ${path}
newins tmp.native_feed ${feedfile}
)
local feedname
feedname=$(0distutils -e "${src}") || die "0distutils URI escape failed"
dosym "${dest}" "${NATIVE_FEED_DIR}/${feedname}"
local cachedname
cachedname=$(0distutils -c "${src}") || die "0distutils URI escape failed"
dosym "${path}/.DirIcon" "${ICON_CACHE_DIR}/${cachedname}"
}
# Exported functions
rox-0install_src_install() {
# First do the regular Rox install
rox_src_install
# Now search for the feed, and install it if found.
local search_list="${LOCAL_FEED_SRC} ${APPNAME}/${APPNAME}.xml ${APPNAME}.xml"
local installed=""
for feed in ${search_list}; do
if [[ -f "${feed}" ]]; then
0install_native_feed "${feed}" "${APPDIR}/${APPNAME}"
installed="true"
break
fi
done
if [[ -z ${installed} ]]; then
ewarn "No native feed found - This application will not be found by 0launch."
fi
}
EXPORT_FUNCTIONS src_install