-#
+#
# Copyright (C) 2007-2008 OpenWrt.org
+# Copyright (c) 2009 Thorsten Glaser <tg@mirbsd.org>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=mksh
-PKG_VERSION:=R33d
+PKG_VERSION:=38c
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).cpio.gz
+PKG_SOURCE:=$(PKG_NAME)-R$(PKG_VERSION).cpio.gz
PKG_SOURCE_URL:=http://www.mirbsd.org/MirOS/dist/mir/mksh
-PKG_MD5SUM:=8ad2547ad55dc3a02b13554ab9b5c9c8
+PKG_MD5SUM:=692192a6468b5f5c5e559756f1851766
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
-# This program seems to depend on libssp, but only for GCC 4
-GCCVER:=$(if $(DUMP),4,$(word 1,$(subst ., ,$(subst ",,$(CONFIG_GCC_VERSION)))))
-#"))))
-ifeq ($(GCCVER),4)
- DEP:=+libssp
-else
- DEP:=
-endif
-
define Package/mksh
SECTION:=shells
CATEGORY:=Base system
- TITLE:=mksh
+ TITLE:=MirBSD Korn Shell
DEPENDS:=$(DEP)
endef
define Package/mksh/description
-MirBSD version of ksh
+mksh is the MirBSD enhanced version of the Public Domain Korn
+shell (pdksh), a Bourne-compatible shell which is largely si-
+milar to the original AT&T Korn shell; mksh is the only pdksh
+derivate currently being actively developed. It includes bug
+fixes and feature improvements, in order to produce a modern,
+robust shell good for interactive and especially script use.
+mksh has UTF-8 support (e.g. in the emacs editing mode); R38c
+corresponds to OpenBSD 4.5-current ksh (without GNU bash-like
+$PS1 and fancy character classes). The code has throughoutly
+been cleaned up and simplified, bugs fixed, standards compli-
+ance added, and several enhancements (for extended compatibi-
+lity to other modern shells - as well as a couple of its own)
+have been placed.
endef
define Build/Compile
+ # -DMKSH_SMALL=1 ⇒ reduce functionality quite a lot
+ # -DMKSH_ASSUME_UTF8=0 ⇒ never automatically enable
+ # UTF-8 mode, neither use setlocale/nl_langinfo
+ # nor look at $LC_* and $LANG (not recommended)
+ # HAVE_CAN_FSTACKPROTECTORALL=0 ⇒ nuke libssp dependency
+ # HAVE_REALPATH=x ⇒ add the realpath builtin, which was
+ # disabled by MKSH_SMALL, back if realpath() exists
cd $(PKG_BUILD_DIR); \
CC="$(TARGET_CC)" \
TARGET_OS="$(shell uname -s)" \
CFLAGS="$(TARGET_CFLAGS)" \
- CPPFLAGS="-DMKSH_SMALL=1" \
+ CPPFLAGS="-DMKSH_SMALL=1 -DMKSH_ASSUME_UTF8=0" \
+ HAVE_CAN_FSTACKPROTECTORALL=0 \
+ HAVE_REALPATH=x \
LDFLAGS="$(TARGET_LDFLAGS)" \
$(BASH) Build.sh -Q -r
endef
-$FreeWRT$
+$Id$
- • FreeWRT patches:
+ • Part of the FreeWRT patches:
– no hostname(1)
– ls has no -o
- – yofuh doesn’t like $? in $PS1
+ • OpenWrt fix:
+ – since this is not ~/.mkshrc make sure subshells find it
---- a/dot.mkshrc
-+++ b/dot.mkshrc
-@@ -25,13 +25,15 @@
- # sample mksh initialisation file for interactive shells; install as
- # /etc/skel/.mkshrc (as root, for new accounts) or copy to ~/.mkshrc
+--- mksh/dot.mkshrc~ 2009-05-31 19:17:57.000000000 +0200
++++ mksh/dot.mkshrc 2009-06-12 17:37:18.000000000 +0200
+@@ -20,7 +20,7 @@
+ #-
+ # ~/.mkshrc: mksh initialisation file for interactive shells
-: ${EDITOR:=/bin/ed} ${TERM:=vt100} ${HOSTNAME:=$(ulimit -c 0;hostname -s 2>&-)}
+: ${EDITOR:=/bin/ed} ${TERM:=vt100} ${HOSTNAME:=$(</proc/sys/kernel/hostname)}
[[ $HOSTNAME = @(localhost|*([ ])) ]] && HOSTNAME=$(ulimit -c 0;hostname 2>&-)
- : ${HOSTNAME:=nil}; PS1='#'; [[ "$(ulimit -c 0; id -u 2>&-)" -eq 0 ]] || PS1='$'
+ : ${HOSTNAME:=nil}; if (( USER_ID )); then PS1='$'; else PS1='#'; fi
function precmd {
- typeset -Ui10 e=$?
-
-- (( e )) && print -n "$e|"
-+# enable this back if you want the errorlevel in your prompt
-+# this is default in upstream mksh, disabled locally in fwrt
-+# (( e )) && print -n "$e|"
- }
- PS1='$(precmd)${USER:=$(ulimit -c 0;id -un 2>&- || print \?)}@${HOSTNAME%%.*}:$(
- typeset pfx=~ wd=${PWD:-?}
-@@ -53,7 +55,7 @@
+@@ -38,7 +38,7 @@ unalias ls
alias l='ls -F'
alias la='l -a'
alias ll='l -l'
alias which='whence -p'
whence -p rot13 >&- || alias rot13='tr \
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
+@@ -283,4 +283,8 @@ function Lstripcom {
+ done; }
+ }
+
++# we need this in OpenWrt for subshells that are not login shells
++: ${ENV=/etc/mkshrc}
++[[ -z $ENV ]] || export ENV
++
+ : place customsations above this line