[mksh] - Upgrade to pre-release of 40i - This includes new legacy shell lksh we were asked to test

Michal Hlavinka mhlavink at fedoraproject.org
Fri Jul 20 11:40:43 UTC 2012


commit 70f5739f0a77af80efad6cd0f1bf674abc70fd5f
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Fri Jul 20 13:38:47 2012 +0200

    - Upgrade to pre-release of 40i
    - This includes new legacy shell lksh we were asked to test

 .gitignore |    1 +
 lksh.1     |  265 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 mksh.spec  |   45 +++++++---
 sources    |    2 +-
 4 files changed, 299 insertions(+), 14 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 534882d..d3dedb4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 mksh-R40d.cpio.gz
+/mksh_40.9.20120630.orig.tar.gz
diff --git a/lksh.1 b/lksh.1
new file mode 100644
index 0000000..d040352
--- /dev/null
+++ b/lksh.1
@@ -0,0 +1,265 @@
+.\" $MirOS: contrib/hosted/tg/deb/mksh/debian/lksh.1,v 1.4 2012/06/30 17:24:36 tg Exp $
+.\"-
+.\" Copyright (c) 2008, 2009, 2010, 2012
+.\"	Thorsten “mirabilos” Glaser <tg at mirbsd.org>
+.\"-
+.\" Try to make GNU groff and AT&T nroff more compatible
+.\" * ` generates ‘ in gnroff, so use \`
+.\" * ' generates ’ in gnroff, \' generates ´, so use \*(aq
+.\" * - generates ‐ in gnroff, \- generates −, so .tr it to -
+.\"   thus use - for hyphens and \- for minus signs and option dashes
+.\" * ~ is size-reduced and placed atop in groff, so use \*(TI
+.\" * ^ is size-reduced and placed atop in groff, so use \*(ha
+.\" * \(en does not work in nroff, so use \*(en
+.\" * <>| are problematic, so redefine and use \*(Lt\*(Gt\*(Ba
+.\" Also make sure to use \& especially with two-letter words.
+.\" The section after the "doc" macropackage has been loaded contains
+.\" additional code to convene between the UCB mdoc macropackage (and
+.\" its variant as BSD mdoc in groff) and the GNU mdoc macropackage.
+.\"
+.ie \n(.g \{\
+.	if \*[.T]ascii .tr \-\N'45'
+.	if \*[.T]latin1 .tr \-\N'45'
+.	if \*[.T]utf8 .tr \-\N'45'
+.	ds <= \[<=]
+.	ds >= \[>=]
+.	ds Rq \[rq]
+.	ds Lq \[lq]
+.	ds sL \(aq
+.	ds sR \(aq
+.	if \*[.T]utf8 .ds sL `
+.	if \*[.T]ps .ds sL `
+.	if \*[.T]utf8 .ds sR '
+.	if \*[.T]ps .ds sR '
+.	ds aq \(aq
+.	ds TI \(ti
+.	ds ha \(ha
+.	ds en \(en
+.\}
+.el \{\
+.	ds aq '
+.	ds TI ~
+.	ds ha ^
+.	ds en \(em
+.\}
+.\"
+.\" Implement .Dd with the Mdocdate RCS keyword
+.\"
+.rn Dd xD
+.de Dd
+.ie \\$1$Mdocdate: \{\
+.	xD \\$2 \\$3, \\$4
+.\}
+.el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+..
+.\"
+.\" .Dd must come before definition of .Mx, because when called
+.\" with -mandoc, it might implement .Mx itself, but we want to
+.\" use our own definition. And .Dd must come *first*, always.
+.\"
+.Dd $Mdocdate: June 30 2012 $
+.\"
+.\" Check which macro package we use, and do other -mdoc setup.
+.\"
+.ie \n(.g \{\
+.	if \*[.T]utf8 .tr \[la]\*(Lt
+.	if \*[.T]utf8 .tr \[ra]\*(Gt
+.	ie d volume-ds-1 .ds tT gnu
+.	el .ds tT bsd
+.\}
+.el .ds tT ucb
+.\"
+.\" Implement .Mx (MirBSD)
+.\"
+.ie "\*(tT"gnu" \{\
+.	eo
+.	de Mx
+.	nr curr-font \n[.f]
+.	nr curr-size \n[.ps]
+.	ds str-Mx \f[\n[curr-font]]\s[\n[curr-size]u]
+.	ds str-Mx1 \*[Tn-font-size]\%MirOS\*[str-Mx]
+.	if !\n[arg-limit] \
+.	if \n[.$] \{\
+.	ds macro-name Mx
+.	parse-args \$@
+.	\}
+.	if (\n[arg-limit] > \n[arg-ptr]) \{\
+.	nr arg-ptr +1
+.	ie (\n[type\n[arg-ptr]] == 2) \
+.	as str-Mx1 \~\*[arg\n[arg-ptr]]
+.	el \
+.	nr arg-ptr -1
+.	\}
+.	ds arg\n[arg-ptr] "\*[str-Mx1]
+.	nr type\n[arg-ptr] 2
+.	ds space\n[arg-ptr] "\*[space]
+.	nr num-args (\n[arg-limit] - \n[arg-ptr])
+.	nr arg-limit \n[arg-ptr]
+.	if \n[num-args] \
+.	parse-space-vector
+.	print-recursive
+..
+.	ec
+.	ds sP \s0
+.	ds tN \*[Tn-font-size]
+.\}
+.el \{\
+.	de Mx
+.	nr cF \\n(.f
+.	nr cZ \\n(.s
+.	ds aa \&\f\\n(cF\s\\n(cZ
+.	if \\n(aC==0 \{\
+.		ie \\n(.$==0 \&MirOS\\*(aa
+.		el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+.	if \\n(aC>\\n(aP \{\
+.		nr aP \\n(aP+1
+.		ie \\n(C\\n(aP==2 \{\
+.			as b1 \&MirOS\ #\&\\*(A\\n(aP\\*(aa
+.			ie \\n(aC>\\n(aP \{\
+.				nr aP \\n(aP+1
+.				nR
+.			\}
+.			el .aZ
+.		\}
+.		el \{\
+.			as b1 \&MirOS\\*(aa
+.			nR
+.		\}
+.	\}
+..
+.\}
+.\"-
+.Dt LKSH 1
+.Os MirBSD
+.Sh NAME
+.Nm lksh
+.Nd Legacy Korn shell built on mksh
+.Sh SYNOPSIS
+.Nm
+.Bk -words
+.Op Fl +abCefhiklmnprUuvXx
+.Op Fl +o Ar opt
+.Oo
+.Fl c Ar string \*(Ba
+.Fl s \*(Ba
+.Ar file
+.Op Ar args ...
+.Oc
+.Ek
+.Sh DESCRIPTION
+.Nm
+is a command interpreter intended exclusive for running legacy
+shell scripts.
+It is built on
+.Nm mksh ;
+refer to its manual page for details on the scripting language.
+.Sh LEGACY MODE
+.Nm
+has the following differences from
+.Nm mksh :
+.Bl -bullet
+.It
+.Nm
+is not suitable for use as
+.Pa /bin/sh .
+.It
+There is no explicit support for interactive use,
+nor any command line editing code.
+Hence,
+.Nm
+is not suitable as a user's login shell, either; use
+.Nm mksh
+instead.
+.It
+The
+.Ev KSH_VERSION
+string identifies
+.Nm
+as
+.Dq LEGACY KSH
+instead of
+.Dq MIRBSD KSH .
+.It
+Some
+.Nm mksh
+specific extensions are missing; specifically, the
+.Fl T
+command-line option.
+.It
+.Nm
+always uses traditional mode for constructs like:
+.Bd -literal -offset indent
+$ set -- $(getopt ab:c "$@")
+$ echo $?
+.Ed
+.Pp
+POSIX mandates this to show 0, but traditional mode
+passes through the errorlevel from the
+.Xr getopt 1
+command.
+.It
+.Nm lksh ,
+unlike
+.At
+.Nm ksh ,
+does not keep file descriptors \*(Gt 2 private.
+.It
+.Nm
+parses leading-zero numbers as octal (base 8).
+.It
+Integers use the host C environment's
+.Vt long
+type, not
+.Vt int32_t .
+Unsigned arithmetic is done using
+.Vt unsigned long ,
+not
+.Vt uint32_t .
+Neither value limits nor wraparound is guaranteed.
+Dividing the largest negative number by \-1 is Undefined Behaviour
+.Po
+but might work on 32-bit and 64-bit
+.Vt long
+types
+.Pc .
+.El
+.Sh SEE ALSO
+.Xr mksh 1
+.Pp
+.Pa https://www.mirbsd.org/mksh.htm
+.Pp
+.Pa https://www.mirbsd.org/ksh\-chan.htm
+.Sh CAVEATS
+.Nm
+tries to make a cross between a legacy bourne/posix compatibl-ish
+shell and a legacy pdksh-alike but
+.Dq legacy
+is not exactly specified.
+Parsing numbers with leading zero digits or
+.Dq 0x
+is relatively recent in all
+.Nm pdksh
+derivates, but supported here for completeness.
+It might make sense to make this a run-time option, but
+that might also be overkill.
+.Pp
+The
+.Ic set
+built-in command does not have all options one would expect
+from a full-blown
+.Nm mksh
+or
+.Nm pdksh .
+.Pp
+Talk to the
+.Mx
+development team using the mailing list at
+.Aq miros\-discuss at mirbsd.org
+or the
+.Li \&#\&!/bin/mksh
+.Pq or Li \&#ksh
+IRC channel at
+.Pa irc.freenode.net
+.Pq Port 6697 SSL, 6667 unencrypted
+if you need any further quirks.
diff --git a/mksh.spec b/mksh.spec
index 1030002..0cec9c2 100644
--- a/mksh.spec
+++ b/mksh.spec
@@ -1,15 +1,17 @@
 %define _bindir   /bin
-
+%global snapshot  20120630
 Summary:          MirBSD enhanced version of the Korn Shell
 Name:             mksh
-Version:          40d
-Release:          3%{?dist}
+Version:          40i
+Release:          0%{?dist}.%{snapshot}
 # BSD (setmode.c), ISC (strlcpy.c), MirOS (the rest)
 License:          MirOS and ISC and BSD
 Group:            System Environment/Shells
 URL:              http://www.mirbsd.de/%{name}.htm
-Source0:          http://www.mirbsd.org/MirOS/dist/mir/%{name}/%{name}-R%{version}.cpio.gz
+Source0:          ftp://ftp.debian.org/debian/pool/main/m/%{name}/%{name}_40.9.%{snapshot}.orig.tar.gz
+#Source0:          http://www.mirbsd.org/MirOS/dist/mir/%{name}/%{name}-R%{version}.cpio.gz
 Source1:          dot-mkshrc
+Source2:          lksh.1
 Requires(post):   grep
 Requires(postun): sed
 BuildRequires:    util-linux, ed
@@ -26,27 +28,37 @@ bourne shell replacement, pdksh successor and an alternative to the C shell.
 %setup -q -T -c
 
 # rpm.org has no support for *.cpio.gz
-gzip -dc %{SOURCE0} | cpio -imd
-mv %{name}/* . && rm -rf %{name}
+#gzip -dc %{SOURCE0} | cpio -imd
+#mv %{name}/* . && rm -rf %{name}
+tar xvzf %{SOURCE0}
+mv mksh-40.9.%{snapshot}.orig/* . 
 
 %build
 CFLAGS="$RPM_OPT_FLAGS" sh Build.sh -r -c lto
+cp test.sh test_mksh.sh
+CFLAGS="$RPM_OPT_FLAGS" sh Build.sh -L -r -c lto
+cp test.sh test_lksh.sh
 
 %install
 rm -rf $RPM_BUILD_ROOT
 install -D -m 755 %{name} $RPM_BUILD_ROOT%{_bindir}/%{name}
+install -D -m 755 lksh $RPM_BUILD_ROOT%{_bindir}/lksh
 install -D -m 644 %{name}.1 $RPM_BUILD_ROOT%{_mandir}/man1/%{name}.1
+install -D -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_mandir}/man1/lksh.1
 install -D -p -m 644 dot.mkshrc $RPM_BUILD_ROOT%{_sysconfdir}/mkshrc
 install -D -p -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/skel/.mkshrc
 
 %check
-echo > test.wait
-script -qc './test.sh -v; x=$?; rm -f test.wait; exit $x'
-maxwait=0
-while test -e test.wait; do
-  sleep 1
-  maxwait=$(expr $maxwait + 1)
-  test $maxwait -lt 900 || break
+for tf in test_mksh.sh test_lksh.sh
+do
+  echo > test.wait
+  script -qc "./$tf"' -v; x=$?; rm -f test.wait; exit $x'
+  maxwait=0
+  while test -e test.wait; do
+    sleep 1
+    maxwait=$(expr $maxwait + 1)
+    test $maxwait -lt 900 || break
+  done
 done
 
 %post
@@ -65,11 +77,18 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root,-)
 %doc dot.mkshrc
 %{_bindir}/%{name}
+%{_bindir}/lksh
 %config(noreplace) %{_sysconfdir}/mkshrc
 %config(noreplace) %{_sysconfdir}/skel/.mkshrc
 %{_mandir}/man1/%{name}.1*
+%{_mandir}/man1/lksh.1*
 
 %changelog
+* Fri Jul 20 2012 Michal Hlavinka <mhlavink at redhat.com> - 40i-0.20120630
+- Upgrade to pre-release of 40i
+- includes new legacy shell lksh for old scripts requiring pdksh or similar old
+  ksh-88 shell, see man lksh for differences
+
 * Fri Jul 20 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 40d-3
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
 
diff --git a/sources b/sources
index ce4f4e7..99b8b4e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c6428401103367730a95b99284bf47dc  mksh-R40d.cpio.gz
+d2da844ef5ae1c6c68d0675a4d0c1229  mksh_40.9.20120630.orig.tar.gz


More information about the scm-commits mailing list