# Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/app-shells/csh/csh-1.29-r3.ebuild,v 1.15 2005/05/02 18:31:46 spb Exp $ inherit flag-o-matic eutils ccc DESCRIPTION="Classic UNIX shell with C like syntax" HOMEPAGE="http://www.netbsd.org/" SRC_URI="mirror://gentoo/${P}.tar.gz" LICENSE="BSD" SLOT="0" KEYWORDS="x86 alpha arm amd64 ia64 sparc ppc" IUSE="static doc" DEPEND="sys-devel/pmake !app-shells/tcsh >=sys-apps/sed-4" RDEPEND="virtual/libc" S=${WORKDIR}/src/bin/csh src_unpack() { # unpack the source tarball unpack ${A} # hide some BSDisms, mostly my work, got some hints from the # debian project (they use an older OpenBSD csh, though). cd ${S}; epatch ${FILESDIR}/linux-vs-bsd.diff || die "patching failed." # print the existing input after displaying completion options. # patch contributed by splite # #24290 epatch ${FILESDIR}/retype-input.diff || die "patching failed." # copy some required files over, from NetBSD cd ${S}; cp ${WORKDIR}/printf.c \ ${WORKDIR}/vis.h \ ${WORKDIR}/vis.c \ ${FILESDIR}/dot.login \ ${FILESDIR}/dot.cshrc \ ${S} # this parses the output of the bash builtin `kill` # and creates an array of signal names for csh. einfo "Making a list of signal names..." local cnt=0 printf "/* automatically generated during %s build */\n\n" ${PF} > ${S}/signames.h printf "const char *const sys_signame[NSIG + 3] = {\n" >> ${S}/signames.h printf "\t\"EXIT\",\t\n" >> ${S}/signames.h let cnt++ for i in `kill -l` do let $((cnt++))%2 && continue einfo " Adding ${i:3}..." printf "\t\"%s\",\n" ${i:3} >> ${S}/signames.h done printf "\t\"DEBUG\",\n\t\"ERR\",\n\t(char *)0x0\n};\n\n" >> ${S}/signames.h einfo "Making some final tweaks..." sed -i 's#sys/tty.h#linux/tty.h#g' ${S}/file.c sed -i 's!\(#include "proc.h"\)!\1\n#include "signames.h"\n!g' ${S}/proc.c sed -i 's#\(strpct.c time.c\)#\1 vis.c#g' ${S}/Makefile sed -i 's!#include "namespace.h"!!g' ${S}/vis.c sed -i 's#/usr/games/fortune#/usr/bin/fortune#g' ${S}/dot.login } src_compile() { einfo "Adding flags required for succesful compilation..." # this should be easier than maintaining a patch. append-flags -Dlint -w -D__dead="" -D__LIBC12_SOURCE__ -DNODEV="-1" append-flags -DTTYHOG=1024 -DMAXPATHLEN=4096 -D_GNU_SOURCE append-flags -D_DIAGASSERT="assert" # maybe they dont warn on BSD, but on linux they are very noisy. export NOGCCERROR=1 # if csh is a users preferred shell, they may want # a static binary to help on the event of fs emergency. use static && append-ldflags -static # pmake is a portage binary as well, so specify full path. # if yours isnt in /usr/bin, you can set PMAKE_PATH. einfo "Starting build..." ${PMAKE_PATH:-/usr/bin/}pmake LIBC='' || die "compile failed." echo size csh echo # make the c shell guide use doc && { einfo "Making documentation..." cd ${S}/USD.doc ${PMAKE_PATH:-/usr/bin/}pmake } cd ${S} einfo "Making empty configuration files.." printf "#\n# System-wide .cshrc file for csh(1).\n\n" > csh.cshrc printf "#\n# System-wide .login file for csh(1).\n\n" > csh.login printf "if ( -f /etc/csh.env ) source /etc/csh.env\n" >> csh.login printf "#\n# System-wide .logout file for csh(1).\n\n" > csh.logout } src_install() { exeinto /bin doexe csh doman csh.1 use doc && dodoc USD.doc/paper.ps dodoc dot.cshrc dot.login insinto /etc doins csh.cshrc csh.login csh.logout } pkg_postinst() { echo if use doc; then einfo "An Introduction to the C shell by Bill Joy, a " einfo "postscript document included with this shell has" einfo "been installed in /usr/share/doc/${PF}, if you are new" einfo "to the C shell, you may find it interesting." else einfo "You don't have USE=doc, so the" einfo "postscript document \"An Introduction to the C" einfo "shell by Bill Joy\" was not installed." fi echo einfo "Example login scripts have been installed in /usr/share/doc/${PF}." einfo "You can install a simple dot.cshrc like this:" einfo einfo " % zcat /usr/share/doc/${PF}/dot.cshrc > ~/.cshrc" einfo " % zcat /usr/share/doc/${PF}/dot.login > ~/.login" einfo einfo "And then edit to your liking." echo }