1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# Copyright 1999-2003 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-shells/csh/csh-1.29-r2.ebuild,v 1.2 2003/07/31 12:47:41 taviso Exp $
inherit flag-o-matic eutils ccc
DESCRIPTION="Classic UNIX shell with C like syntax"
HOMEPAGE="http://www.netbsd.org/"
SRC_URI="http://cvs.gentoo.org/~taviso/${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~x86 ~alpha"
IUSE="static doc"
DEPEND="virtual/glibc
sys-devel/pmake
>=sys-apps/sed-4
doc? ( sys-apps/groff )"
RDEPEND="virtual/glibc"
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 exisiting input after displaying completion options.
# patch contributed by splite <splite-gentoo@sigint.cs.purdue.edu>
# #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}..."
printf "\t\"%s\",\n" ${i} >> ${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.
for i in {-Dlint,-w,-D__dead="",-D__LIBC12_SOURCE__,-DNODEV="-1",-DTTYHOG=1024,-DMAXPATHLEN=4096,-D_GNU_SOURCE,-D_DIAGASSERT="assert"}
do
append-flags ${i}
done
# maybe they dont warn on BSD, but _damn_.
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 || 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
use doc >/dev/null && {
einfo "An Introduction to the C shell by William 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."
} || {
einfo "You didnt have the \`doc\` use flag set, the"
einfo "postscript document \"An Introduction to the C"
einfo "shell by William Joy\" was not installed."
}
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
}
|