# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/net-fs/coda/coda-6.9.5.ebuild,v 1.1 2010/05/10 22:07:06 george Exp $ inherit autotools eutils toolchain-funcs IUSE="client server coda_layout coda_symlinks kerberos" # client : causes the coda client (venus) to be built. # server : causes the coda server (vice) to be built. # coda_layout : doesn't apply FHS compliancy patches. Use this if using any directory # other than /coda for the mount point makes you upset. # coda_symlinks : create legacy symlinks if FHS layout is used. DESCRIPTION="Coda is an advanced networked filesystem developed at Carnegie Mellon Univ." HOMEPAGE="http://www.coda.cs.cmu.edu/" SRC_URI="http://www.coda.cs.cmu.edu/pub/coda/src/${P}.tar.gz" SLOT="0" LICENSE="GPL-2" KEYWORDS="~amd64 ~ppc ~x86" # partly based on the deps suggested by Mandrake's RPM, and/or on my current versions # Also, definely needs coda.h from linux-headers. RDEPEND=">=sys-libs/lwp-2.1 >=net-libs/rpc2-2.6 >=sys-libs/rvm-1.15 >=sys-libs/db-3 >=sys-libs/ncurses-4 >=sys-libs/readline-3 >=dev-lang/perl-5.8 kerberos? ( virtual/krb5 )" DEPEND="${RDEPEND} sys-apps/gawk sys-devel/bison sys-apps/grep virtual/os-headers" pkg_setup() { echo einfo "gcc-version = $(gcc-version)" echo if ! use client && ! use server; then eerror "Neither client nor server is enabled." eerror "Please enable at least one of these flags!" die "at least one of client or server flags should be on!" fi if use coda_layout; then einfo ewarn "You selected coda (legacy) layout." ewarn "Please note, that coda itself have transitioned to more FHS" ewarn "compilant layout starting with version 6.9.5. Although not all" ewarn "internal paths seem to have been updated." ewarn "Use with care!" einfo ewarn "In case you are updating existing installation it is" ewarn "recommended to keep old layout in conf files or perform a clean" ewarn "transition - copying data externally to fresh version." einfo sleep 5 fi } src_unpack() { unpack ${A} cd "${S}" tar xjpf "${FILESDIR}"/scripts.tar.bz2 epatch "${FILESDIR}"/fixdeps.patch epatch "${FILESDIR}"/vice-setup.in.patch if ! use coda_layout; then einfo "seding sources.." # First, some common substitutions. # As this is a rather critical subsystem and screwing paths can break # user's data, protect all seds by die. # # NOTE: gentoo specific init scripts installed as a part of unpack ${A} # have some paths specified inside. However these will be autoupdated by # below seds for free, no need for special care. # # first, special cases under /usr/coda # for spool, look only in subdirs, as we do not want to touch ChangeLog grep -rl "/usr/coda/spool" "${S}"/*/* | xargs \ sed -i -e "s:/usr/coda/spool:/var/spool/coda:" \ || die "setting FHS compliant paths failed" # coda/etc used to contain vstab file, which normally would reside in # /etc/coda. However this file was deprecated, so no special handling.. # do only subdirs here too. grep -rl "/usr/coda/etc" "${S}"/*/* | xargs \ sed -i -e "s:/usr/coda/etc:/var/log/coda:" \ || die "setting FHS compliant paths failed" # stuff uder venus.cache need special care # "real cache" goues under /var/cache and pid related files under # /var/run grep -rl "cachedir=/usr/coda/venus.cache" "${S}"/* | xargs \ sed -i -e "s:cachedir=/usr/coda/venus.cache:cachedir=/var/cache/coda:" \ || die "setting FHS compliant paths failed" sed -i -e "s:DFLT_CD \"/usr/coda/venus.cache\":DFLT_CD \"/var/cache/coda\":" \ "${S}"/coda-src/venus/venus.private.h || die "seding venus.private.h failed" grep -rl "/usr/coda/venus.cache" "${S}"/* | xargs \ sed -i -e "s:/usr/coda/venus.cache:/var/run/coda:" \ || die "setting FHS compliant paths failed" # what's left in /usr/coda goes to /var/lib/coda # NOTE: dumplits.5 man page seems unduly touched by this sed, ignoring # for now.. grep -rl "/usr/coda" "${S}"/*/* | xargs \ sed -i -e "s:/usr/coda:/var/lib/coda:" \ || die "setting FHS compliant paths failed" # move /coda to /mnt/coda grep -rle "[[:space:]\"=]/coda" "${S}"/*/* | xargs \ sed -i -e "s:\([[:space:]\"=]\)/coda:\1/mnt/coda:" \ || die "setting FHS compliant paths failed" # move /vice and /vicepX under /var/lib/coda/ grep -rle "[[:space:]\"=\[]/vice" "${S}"/*/* | xargs \ sed -i -e "s:\([[:space:]\"=\[]\)/vice:\1/var/lib/coda/vice:g" \ || die "setting FHS compliant paths failed" fi eautoreconf } my_build_venus_prereqs() { # Coda uses a recursive make with some directories depending # on objects built in other directories, so run make inside # the prerequisite dirs first. This builds everything required # by venus in the order listed in coda-src/Makefile.am. cd "${S}/lib-src" emake || die "emake failed" # auth2 depends on kerndep cd "${S}/coda-src/kerndep" emake || die "emake failed" # auth2 depends on util. cd "${S}/coda-src/util" emake || die "emake failed" # librepair depends on vicedep cd "${S}/coda-src/vicedep" emake || die "emake failed" # venus depends on dir cd "${S}/coda-src/dir" emake || die "emake failed" # venus depends on al cd "${S}/coda-src/al" emake || die "emake failed" # librepair depends on auth2 cd "${S}/coda-src/auth2" emake || die "emake failed" # venus depends on vv cd "${S}/coda-src/vv" emake || die "emake failed" # venus depends on lka cd "${S}/coda-src/lka" emake || die "emake failed" # venus depends on vol cd "${S}/coda-src/vol" emake || die "emake failed" # venus depends on librepair cd "${S}/coda-src/librepair" emake || die "emake failed" } src_compile() { local myflags="" # Coda uses type punning in a way that violates assumptions made by -O2 # and friends (via -fstrict-aliasing). Disable this optimization where # required. local my_safe_cflags="${CFLAGS} -fno-strict-aliasing" local my_safe_cxxflags="${CXXFLAGS} -fno-strict-aliasing" # Include the server/client code. use client && myflags="${myflags} --enable-client" use server && myflags="${myflags} --enable-server" # Enable kerboeros? if use kerberos; then myflags="${myflags} --with-crypto --with-krb5" myflags="${myflags} --with-krb5-includes=/usr/include/krb5" myflags="${myflags} --with-krb5-libs=/usr/lib" fi # Perform the actual configure. econf ${myflags} || die "configure failed" # Build any prerequisites for venus. my_build_venus_prereqs # Venus uses unsafe type punning, so disable # some optimizations for venus. pushd coda-src/venus emake \ CFLAGS="${my_safe_cflags}" \ CXXFLAGS="${my_safe_cxxflags}" \ || die "emake failed" popd # Now run make in the source directory to finish the compile. emake -j1 || die "emake failed" } src_install () { emake DESTDIR="${D}" install dodoc INSTALL* README* NEWS ChangeLog AUTHORS use server && doinitd coda-src/scripts/codasrv use client && doinitd coda-src/scripts/venus # Fix conflict with backup.sh from tar mv -f "${D}"/usr/sbin/backup{,-coda}.sh if use coda_layout; then # Create coda specific layout dodir /usr/coda dodir /usr/coda/etc dodir /usr/coda/spool if use server; then dodir /vice dodir /vicepa fi if use client; then dodir /coda diropts -m0700 dodir /usr/coda/venus.cache fi else # Create FHS compliant layout dodir /var/lib/coda dodir /var/log/coda dodir /var/spool/coda if use server; then dodir /var/lib/coda/vice dodir /var/lib/coda/vicepa fi if use client; then dodir /mnt/coda dosym mnt/coda /coda diropts -m0700 dodir /var/cache/coda fi if use coda_symlinks; then # Symlink traditional coda dirs to gentoo dirs. # NOTE: /coda symlink is unconditional for compatibility of client apps dosym ../var/lib/coda /usr/coda if use server; then dosym var/lib/coda/vice /vice dosym var/lib/coda/vicepa /vicepa fi fi fi } pkg_preinst () { enewgroup codaroot enewuser codaroot -1 -1 -1 codaroot } pkg_postinst () { einfo elog "To enable the coda server at boot up, please do:" elog " rc-update add codasrv default" elog elog "To enable the coda client at boot up, do:" elog " rc-update add venus default" elog elog "To get started, run vice-setup and/or venus-setup." einfo }