mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-16 19:50:19 +01:00
system/csh: Added (C shell from BSD)
Signed-off-by: Erik Hanson <erik@slackbuilds.org>
This commit is contained in:
parent
9db9d22c50
commit
a8f4e457f4
8 changed files with 353 additions and 0 deletions
11
system/csh/README
Normal file
11
system/csh/README
Normal file
|
@ -0,0 +1,11 @@
|
|||
csh (C shell from BSD)
|
||||
|
||||
The C shell was originally written at UCB to overcome limitations in the
|
||||
Bourne shell. Its flexibility and comfort (at that time) quickly made
|
||||
it the shell of choice until more advanced shells like ksh, bash, zsh
|
||||
or tcsh appeared. Most of the latter incorporate features original to csh.
|
||||
|
||||
This build is based on OpenBSD sources from 2011.
|
||||
|
||||
For Slackware-specific details about this build of csh, see the file
|
||||
README_Slackware.txt. Seriously, really, read it.
|
79
system/csh/README_Slackware.txt
Normal file
79
system/csh/README_Slackware.txt
Normal file
|
@ -0,0 +1,79 @@
|
|||
|
||||
Notes for using SlackBuilds.org csh package:
|
||||
|
||||
This csh build conflicts slightly with Slackware's tcsh package. The
|
||||
easiest way to use this is to "removepkg tcsh" before installing csh. If
|
||||
you want to do this, you can skip the next section.
|
||||
|
||||
|
||||
Installing csh and tcsh together
|
||||
--------------------------------
|
||||
|
||||
It's possible for csh to coexist with tcsh, with a few caveats:
|
||||
|
||||
The shell is installed as /usr/bin/csh to avoid conflicting with
|
||||
Slackware's own tcsh package (which makes /bin/csh a symlink to tcsh). If
|
||||
you want to make /bin/csh point to the real csh, you have two choices:
|
||||
|
||||
1. remove the /bin/csh symlink before installing the csh package:
|
||||
# rm -f /bin/csh
|
||||
The /bin/csh symlink will get created when csh is installed.
|
||||
|
||||
2. adjust the symlink manually after csh installation:
|
||||
# rm -f /bin/csh
|
||||
# ln -s ../usr/bin/csh /bin/csh
|
||||
This works the same way as e.g. the /usr/bin/vi symlink, which points
|
||||
to either elvis or vim.
|
||||
|
||||
If you have both csh and Slackware's tcsh installed, and you remove csh,
|
||||
you'll want to reinstall tcsh to clean up afterwards.
|
||||
|
||||
Removing tcsh while csh is installed should be perfectly OK.
|
||||
|
||||
Installing/upgrading tcsh when csh is already installed is probably a
|
||||
bad idea. Remove csh first, install tcsh, then install csh.
|
||||
|
||||
As far as I know, nothing in Slackware depends on tcsh, so if you
|
||||
mess things up, you won't break your OS. You can always put things
|
||||
back to Slackware's default state by removing both csh and tsch, then
|
||||
reinstalling tcsh.
|
||||
|
||||
|
||||
Using csh as a login shell
|
||||
--------------------------
|
||||
|
||||
If you want to use csh as a login shell, be aware that Slackware's
|
||||
shipped /etc/csh.login (from the etc package) contains tcsh-specific
|
||||
code, which prevents the /etc/profile.d/*.csh scripts from running. This
|
||||
won't prevent you from logging in, but your environment won't be set up
|
||||
correctly, you'll see "[: No match." errors, and your prompt won't show
|
||||
your username, hostname, current directory as tsch does.
|
||||
|
||||
To fix this, you can replace /etc/csh.login with the /etc/csh.login.new
|
||||
installed with the csh package. It behaves the same as the original,
|
||||
for tcsh, and has conditional code to make csh behave correctly.
|
||||
|
||||
# cp /etc/csh.login /etc/csh.login.orig # back up original just in case
|
||||
# mv /etc/csh.login.new /etc/csh.login
|
||||
|
||||
If you don't want to replace Slackware's csh.login, just rm
|
||||
/etc/csh.login.new and forget about it.
|
||||
|
||||
|
||||
Other notes
|
||||
-----------
|
||||
|
||||
You should read the man page for csh. Also
|
||||
/usr/doc/csh-$VERSION/paper.(txt|pdf) is a good intro to the C shell for
|
||||
beginning users. Also, if you're an experienced tcsh user, you might
|
||||
re-read the NEW FEATURES section in tcsh's man page (it describes the
|
||||
tcsh features you won't find in csh).
|
||||
|
||||
NEVER make csh the default shell for the root account! In fact, it's
|
||||
probably a bad idea to ever change root's default shell on any Linux or
|
||||
UNIX system, especially a third-party one that isn't shipped with the OS.
|
||||
|
||||
The man page for csh states that "Words can be no longer than 1024
|
||||
characters", but this build of csh increases the limit to 8192 (actually,
|
||||
BUFSIZ as defined in stdio.h). This was done so Slackware's profile.d
|
||||
scripts will work correctly (particularly coreutils-dircolor.sh).
|
30
system/csh/bufsiz.diff
Normal file
30
system/csh/bufsiz.diff
Normal file
|
@ -0,0 +1,30 @@
|
|||
diff -Naur csh-20110502.orig/csh.h csh-20110502.patched/csh.h
|
||||
--- csh-20110502.orig/csh.h 2014-04-25 17:31:52.000000000 -0400
|
||||
+++ csh-20110502.patched/csh.h 2014-04-25 17:34:08.000000000 -0400
|
||||
@@ -36,12 +36,10 @@
|
||||
* Fundamental definitions which may vary from system to system.
|
||||
*
|
||||
* BUFSIZ The i/o buffering size; also limits word size
|
||||
+ * 20140425 bkw: moved below the #include <stdio.h> since
|
||||
+ * we want to use the system's default BUFSIZ.
|
||||
* MAILINTVL How often to mailcheck; more often is more expensive
|
||||
*/
|
||||
-#ifndef BUFSIZ
|
||||
-#define BUFSIZ 1024 /* default buffer size */
|
||||
-#endif /* BUFSIZ */
|
||||
-
|
||||
#ifndef MAXPATHLEN
|
||||
#define MAXPATHLEN BUFSIZ
|
||||
#endif
|
||||
@@ -96,6 +94,11 @@
|
||||
#include <stdio.h>
|
||||
FILE *cshin, *cshout, *csherr;
|
||||
|
||||
+/* 20140425 bkw: moved here so stdio.h is what initially defines BUFSIZ. */
|
||||
+#ifndef BUFSIZ
|
||||
+#define BUFSIZ 1024 /* default buffer size */
|
||||
+#endif /* BUFSIZ */
|
||||
+
|
||||
#include <stdio_ext.h>
|
||||
#define fpurge __fpurge
|
||||
|
106
system/csh/csh.SlackBuild
Normal file
106
system/csh/csh.SlackBuild
Normal file
|
@ -0,0 +1,106 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Slackware build script for csh
|
||||
|
||||
# Written by B. Watson (yalhcru@gmail.com)
|
||||
|
||||
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
|
||||
|
||||
PRGNAM=csh
|
||||
VERSION=${VERSION:-20110502}
|
||||
BUILD=${BUILD:-1}
|
||||
TAG=${TAG:-_SBo}
|
||||
|
||||
if [ -z "$ARCH" ]; then
|
||||
case "$( uname -m )" in
|
||||
i?86) ARCH=i486 ;;
|
||||
arm*) ARCH=arm ;;
|
||||
*) ARCH=$( uname -m ) ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
CWD=$(pwd)
|
||||
TMP=${TMP:-/tmp/SBo}
|
||||
PKG=$TMP/package-$PRGNAM
|
||||
OUTPUT=${OUTPUT:-/tmp}
|
||||
|
||||
if [ "$ARCH" = "i486" ]; then
|
||||
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
|
||||
LIBDIRSUFFIX=""
|
||||
elif [ "$ARCH" = "i686" ]; then
|
||||
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
|
||||
LIBDIRSUFFIX=""
|
||||
elif [ "$ARCH" = "x86_64" ]; then
|
||||
SLKCFLAGS="-O2 -fPIC"
|
||||
LIBDIRSUFFIX="64"
|
||||
else
|
||||
SLKCFLAGS="-O2"
|
||||
LIBDIRSUFFIX=""
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
# Grr.
|
||||
TARNAM="${PRGNAM}_${VERSION}.orig"
|
||||
DIRNAM="${PRGNAM}-${VERSION}.orig"
|
||||
|
||||
rm -rf $PKG
|
||||
mkdir -p $TMP $PKG $OUTPUT
|
||||
cd $TMP
|
||||
rm -rf $DIRNAM
|
||||
tar xvf $CWD/$TARNAM.tar.gz
|
||||
cd $DIRNAM
|
||||
tar xvf $CWD/${PRGNAM}_${VERSION}-2.debian.tar.gz
|
||||
chown -R root:root .
|
||||
find -L . \
|
||||
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
|
||||
-o -perm 511 \) -exec chmod 755 {} \; -o \
|
||||
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
|
||||
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
|
||||
|
||||
# Apply all of Debian's patches.
|
||||
for diff in debian/patches/*.diff; do
|
||||
patch -p1 < $diff
|
||||
done
|
||||
|
||||
# My own patch, keeps csh.h from defining its own (tiny) BUFSIZ. Might
|
||||
# make I/O more efficient, and allows /etc/profile.d/coreutils-dircolors.sh
|
||||
# to set a giant $LS_OPTIONS value without "Word too long" error.
|
||||
patch -p1 < $CWD/bufsiz.diff
|
||||
|
||||
# use Slackware standard flags
|
||||
sed -i "1iCFLAGS=$SLKCFLAGS" Makefile
|
||||
|
||||
# The LIBC= isn't even used, but Slackware64's pmake is broken: it has
|
||||
# /usr/lib/libc.a hard-coded, and pmake wants to build that (and can't),
|
||||
# even though the csh binary is dynamic and doesn't even need libc.a!
|
||||
# Also don't know why I have to make const.h separately, but it works.
|
||||
pmake const.h
|
||||
pmake LIBC=/usr/lib$LIBDIRSUFFIX/libc.a
|
||||
cd USD.doc
|
||||
pmake paper.ps paper.txt
|
||||
cd -
|
||||
|
||||
# I think this is the first time I've ever seen 'make install' gzip the
|
||||
# man pages and strip the binary! BSD FTW!
|
||||
mkdir -p $PKG/usr/bin $PKG/usr/man/man1
|
||||
pmake install DESTDIR=$PKG BINDIR=/usr/bin MANDIR=/usr/man
|
||||
|
||||
# Technically this conflicts with Slackware's etc package, but the file
|
||||
# that's modified still works exactly the same with tcsh. Also it's a .new
|
||||
# config file, requires manual intervention.
|
||||
mkdir -p $PKG/etc
|
||||
cat $CWD/csh.login > $PKG/etc/csh.login.new
|
||||
|
||||
DOCDIR=$PKG/usr/doc/$PRGNAM-$VERSION
|
||||
mkdir -p $DOCDIR
|
||||
cp -a USD.doc/paper.* $DOCDIR
|
||||
cat $CWD/$PRGNAM.SlackBuild > $DOCDIR/$PRGNAM.SlackBuild
|
||||
cat $CWD/README_Slackware.txt > $DOCDIR/README_Slackware.txt
|
||||
|
||||
mkdir -p $PKG/install
|
||||
cat $CWD/slack-desc > $PKG/install/slack-desc
|
||||
cat $CWD/doinst.sh > $PKG/install/doinst.sh
|
||||
|
||||
cd $PKG
|
||||
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
|
12
system/csh/csh.info
Normal file
12
system/csh/csh.info
Normal file
|
@ -0,0 +1,12 @@
|
|||
PRGNAM="csh"
|
||||
VERSION="20110502"
|
||||
HOMEPAGE="https://packages.debian.org/sid/csh"
|
||||
DOWNLOAD="http://ftp.debian.org/debian/pool/main/c/csh/csh_20110502.orig.tar.gz \
|
||||
http://ftp.debian.org/debian/pool/main/c/csh/csh_20110502-2.debian.tar.gz"
|
||||
MD5SUM="578c40bfa54c09c8affbc434e34fb40c \
|
||||
d38e605854996cd5ce5217eed665ca19"
|
||||
DOWNLOAD_x86_64=""
|
||||
MD5SUM_x86_64=""
|
||||
REQUIRES="libbsd"
|
||||
MAINTAINER="B. Watson"
|
||||
EMAIL="yalhcru@gmail.com"
|
77
system/csh/csh.login
Normal file
77
system/csh/csh.login
Normal file
|
@ -0,0 +1,77 @@
|
|||
# /etc/csh.login: This file contains login defaults used by csh and tcsh.
|
||||
|
||||
# This version is slightly modified for use with the SlackBuilds.org build of
|
||||
# Berkeley csh (but still works with tcsh). Changes are marked with ##BKW.
|
||||
# For tcsh, this behaves exactly like the original.
|
||||
|
||||
# Set up some environment variables:
|
||||
if ($?prompt) then
|
||||
umask 022
|
||||
set cdpath = ( /var/spool )
|
||||
set notify
|
||||
set history = 100
|
||||
setenv MANPATH /usr/local/man:/usr/man
|
||||
setenv MINICOM "-c on"
|
||||
setenv HOSTNAME "`cat /etc/HOSTNAME`"
|
||||
setenv LESS "-M"
|
||||
setenv LESSOPEN "|lesspipe.sh %s"
|
||||
set path = ( $path /usr/games )
|
||||
endif
|
||||
|
||||
# If the user doesn't have a .inputrc, use the one in /etc.
|
||||
if (! -r "$HOME/.inputrc") then
|
||||
setenv INPUTRC /etc/inputrc
|
||||
endif
|
||||
|
||||
# I had problems with the backspace key installed by 'tset', but you might want
|
||||
# to try it anyway instead of the section below it. I think with the right
|
||||
# /etc/termcap it would work.
|
||||
# eval `tset -sQ "$term"`
|
||||
|
||||
# Set TERM to linux for unknown type or unset variable:
|
||||
if ! $?TERM setenv TERM linux
|
||||
if ("$TERM" == "") setenv TERM linux
|
||||
if ("$TERM" == "unknown") setenv TERM linux
|
||||
|
||||
##BKW unfortunately plain csh doesn't support the handy prompt % macros, so
|
||||
# we have to do some complex and ugly stuff for csh. However, tcsh will still
|
||||
# use the macros.
|
||||
|
||||
# Set the default shell prompt:
|
||||
if $?tcsh then
|
||||
set prompt = "%n@%m:%~%# "
|
||||
else
|
||||
set _promptchar = $prompt
|
||||
# cache the hostname, assume it will never change (usually true)
|
||||
set _hostname = `hostname`
|
||||
alias _setprompt 'set prompt="$user@${_hostname}:$cwd$_promptchar "'
|
||||
alias cd 'cd \!*;_setprompt'
|
||||
alias chdir 'chdir \!*;_setprompt'
|
||||
alias pushd 'pushd \!*;_setprompt'
|
||||
alias popd 'popd \!*;_setprompt'
|
||||
cd
|
||||
endif
|
||||
|
||||
# Notify user of incoming mail. This can be overridden in the user's
|
||||
# local startup file (~/.login)
|
||||
biff y >& /dev/null
|
||||
|
||||
# Set an empty MANPATH if none exists (this prevents some profile.d scripts
|
||||
# from exiting from trying to access an unset variable):
|
||||
if ! $?MANPATH setenv MANPATH ""
|
||||
|
||||
# Append any additional csh scripts found in /etc/profile.d/:
|
||||
##BKW plain csh doesn't support [ ] unless nonomatch is set, so move the
|
||||
# 'set nonomatch' and 'unset nonomatch' outside of the for loop.
|
||||
set nonomatch
|
||||
[ -d /etc/profile.d ]
|
||||
if ($status == 0) then
|
||||
foreach file ( /etc/profile.d/*.csh )
|
||||
[ -x $file ]
|
||||
if ($status == 0) then
|
||||
source $file
|
||||
endif
|
||||
end
|
||||
unset file
|
||||
endif
|
||||
unset nonomatch
|
19
system/csh/doinst.sh
Normal file
19
system/csh/doinst.sh
Normal file
|
@ -0,0 +1,19 @@
|
|||
config() {
|
||||
NEW="$1"
|
||||
OLD="$(dirname $NEW)/$(basename $NEW .new)"
|
||||
# If there's no config file by that name, mv it over:
|
||||
if [ ! -r $OLD ]; then
|
||||
mv $NEW $OLD
|
||||
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
|
||||
# toss the redundant copy
|
||||
rm $NEW
|
||||
fi
|
||||
# Otherwise, we leave the .new copy for the admin to consider...
|
||||
}
|
||||
|
||||
config etc/csh.login.new
|
||||
|
||||
# If there's no csh link, take over:
|
||||
if [ ! -r bin/csh ]; then
|
||||
( cd bin ; ln -sf ../usr/bin/csh csh )
|
||||
fi
|
19
system/csh/slack-desc
Normal file
19
system/csh/slack-desc
Normal file
|
@ -0,0 +1,19 @@
|
|||
# HOW TO EDIT THIS FILE:
|
||||
# The "handy ruler" below makes it easier to edit a package description.
|
||||
# Line up the first '|' above the ':' following the base package name, and
|
||||
# the '|' on the right side marks the last column you can put a character in.
|
||||
# You must make exactly 11 lines for the formatting to be correct. It's also
|
||||
# customary to leave one space after the ':' except on otherwise blank lines.
|
||||
|
||||
|-----handy-ruler------------------------------------------------------|
|
||||
csh: csh (C shell from BSD)
|
||||
csh:
|
||||
csh: The C shell was originally written at UCB to overcome limitations in
|
||||
csh: the Bourne shell. Its flexibility and comfort (at that time) quickly
|
||||
csh: made it the shell of choice until more advanced shells like ksh,
|
||||
csh: bash, zsh or tcsh appeared. Most of the latter incorporate features
|
||||
csh: original to csh.
|
||||
csh:
|
||||
csh: This build is based on OpenBSD sources from 2011.
|
||||
csh:
|
||||
csh:
|
Loading…
Reference in a new issue