[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