--- /dev/null
+diff -ur mksh-40.org//eval.c mksh-40/eval.c
+--- mksh-40.org//eval.c 2011-06-12 16:45:57.000000000 +0200
++++ mksh-40/eval.c 2011-07-07 18:27:58.891492090 +0200
+@@ -887,6 +887,7 @@
+ switch (c) {
+ case '[':
+ case '!':
++ case NOT2:
+ case '-':
+ case ']':
+ /*
+diff -ur mksh-40.org//misc.c mksh-40/misc.c
+--- mksh-40.org//misc.c 2011-06-12 16:45:58.000000000 +0200
++++ mksh-40/misc.c 2011-07-07 18:28:39.015826686 +0200
+@@ -843,7 +843,7 @@
+ bool notp, found = false;
+ const unsigned char *orig_p = p;
+
+- if ((notp = tobool(ISMAGIC(*p) && *++p == '!')))
++ if ((notp = tobool(ISMAGIC(*p) && (*++p == '!' || *p == NOT2))))
+ p++;
+ do {
+ c = *p++;
+diff -ur mksh-40.org//sh.h mksh-40/sh.h
+--- mksh-40.org//sh.h 2011-06-12 16:59:09.000000000 +0200
++++ mksh-40/sh.h 2011-07-07 18:29:16.346761511 +0200
+@@ -380,5 +380,6 @@
+ #define MAGIC (7) /* prefix for *?[!{,} during expand */
+ #define ISMAGIC(c) ((unsigned char)(c) == MAGIC)
++#define NOT2 '^'
+
+ #define LINE 4096 /* input line size */
+
+diff -ur mksh-40.org//tree.c mksh-40/tree.c
+--- mksh-40.org//tree.c 2011-05-29 04:19:21.000000000 +0200
++++ mksh-40/tree.c 2011-07-07 18:30:12.088149284 +0200
+@@ -289,7 +289,7 @@
+ case CHAR:
+ c = *wp++;
+ if ((opmode & WDS_MAGIC) &&
+- (ISMAGIC(c) || c == '[' || c == '!' ||
++ (ISMAGIC(c) || c == '[' || c == '!' || c == NOT2 ||
+ c == '-' || c == ']' || c == '*' || c == '?'))
+ shf_putc(MAGIC, shf);
+ shf_putc(c, shf);
--- /dev/null
+#
+# TODO: https://bugs.launchpad.net/mksh/+bug/1179287
+#
+# Conditional build:
+%bcond_without static # static version of mksh
+%bcond_without tests # rtchecks and test.sh checks
+#
+#
+Summary: MirBSD Korn Shell
+Summary(pl.UTF-8): Powłoka Korna z MirBSD
+Name: mksh
+Version: 47
+Release: 1
+License: BSD
+Group: Applications/Shells
+Source0: http://www.mirbsd.org/MirOS/dist/mir/mksh/%{name}-R%{version}.tgz
+# Source0-md5: 71c7cbcd78306897801b8b6691091e66
+Source1: %{name}-mkshrc
+Patch0: %{name}-mkshrc_support.patch
+Patch1: %{name}-circumflex.patch
+Patch2: %{name}-no_stop_alias.patch
+Patch3: %{name}-cmdline-length.patch
+URL: https://www.mirbsd.org/mksh.htm
+%if %{with tests}
+BuildRequires: ed
+BuildRequires: perl-base
+%endif
+%{?with_static:BuildRequires: glibc-static}
+BuildRequires: rpmbuild(macros) >= 1.462
+# is needed for /etc directory existence
+Requires(pre): FHS
+Requires: setup >= 2.4.6-2
+Obsoletes: pdksh
+BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define _bindir /bin
+
+%description
+mksh is the MirBSD enhanced version of the Public Domain Korn shell
+(pdksh), a Bourne-compatible shell which is largely similar to the
+original AT&T Korn shell. It includes bug fixes and feature
+improvements in order to produce a modern, robust shell good for
+interactive and especially script use. It has UTF-8 support in the
+emacs command line editing mode; corresponds to OpenBSD 4.2-current
+ksh sans GNU bash-like $PS1; the build environment requirements are
+autoconfigured; throughout code simplification/bugfix/enhancement has
+been done, and the shell has extended compatibility to other modern
+shells.
+
+%description -l pl.UTF-8
+mksh to pochodząca z MirBSD rozszerzona wersja powłoki Public Domain
+Korn Shell (pdksh) - kompatybilnej z powłoką Bourne'a, w większości
+zbliżonej do oryginalnej powłoki Korna z AT&T. Zawiera poprawki błędów
+i rozszerzenia mające na celu stworzenie współczesnej powłoki o
+bogatych możliwościach do użytku interaktywnego i (zwłaszcza) w
+skryptach. Ma obsługę UTF-8 w trybie edycji linii poleceń w stylu
+emacsa; $PS1 odpowiada temu z ksh obecnym w OpenBSD 4.2-current;
+środowisko budowania jest automatycznie konfigurowane; dzięki
+wykonanym uproszczeniom kodu, poprawkom i rozszerzeniom powłoka ma
+rozszerzoną kompatybilność z innymi współczesnymi powłokami.
+
+%package static
+Summary: Statically linked the MirBSD enhanced version of pdksh
+Summary(pl.UTF-8): Skonsolidowana statycznie powłoka mksh
+Group: Applications/Shells
+# requires base for /etc/mkshrc?
+Requires: %{name} = %{version}-%{release}
+
+%description static
+mksh is the MirBSD enhanced version of the Public Domain Korn shell
+(pdksh), a Bourne-compatible shell which is largely similar to the
+original AT&T Korn shell.
+
+This packege contains statically linked version of mksh.
+
+%description static -l pl.UTF-8
+mksh to pochodząca z MirBSD rozszerzona wersja powłoki Public Domain
+Korn Shell (pdksh) - kompatybilnej z powłoką Bourne'a, w większości
+zbliżonej do oryginalnej powłoki Korna z AT&T.
+
+W tym pakiecie jest mksh skonsolidowany statycznie.
+
+%prep
+%setup -qcT
+gzip -dc %{SOURCE0} | cpio -mid
+mv mksh/* .; rmdir mksh
+
+%patch0 -p0
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+
+# sed rules instead of patch (needed update for every release)
+sed -i -e 's|\(#define.*MKSH_VERSION.*\)"|\1 @DISTRO@"|g' sh.h
+sed -i -e 's|\(@(#)MIRBSD KSH.*\)|\1 @DISTRO@|g' check.t
+
+# fill distro
+sed -i -e 's#@DISTRO@#PLD/Linux 3.0#g' check.t sh.h
+# sanity checks
+grep PLD/Linux check.t || exit 1
+grep PLD/Linux sh.h || exit 1
+
+# we'll need this later due to -DMKSH_GCC55009
+cat >rtchecks <<'EOF'
+typeset -i sari=0
+typeset -Ui uari=0
+typeset -i x=0
+print -r -- $((x++)):$sari=$uari.
+let --sari --uari
+print -r -- $((x++)):$sari=$uari.
+sari=2147483647 uari=2147483647
+print -r -- $((x++)):$sari=$uari.
+let ++sari ++uari
+print -r -- $((x++)):$sari=$uari.
+let --sari --uari
+let 'sari *= 2' 'uari *= 2'
+let ++sari ++uari
+print -r -- $((x++)):$sari=$uari.
+let ++sari ++uari
+print -r -- $((x++)):$sari=$uari.
+sari=-2147483648 uari=-2147483648
+print -r -- $((x++)):$sari=$uari.
+let --sari --uari
+print -r -- $((x++)):$sari=$uari.
+EOF
+
+cat >rtchecks.expected <<'EOF'
+0:0=0.
+1:-1=4294967295.
+2:2147483647=2147483647.
+3:-2147483648=2147483648.
+4:-1=4294967295.
+5:0=0.
+6:-2147483648=2147483648.
+7:2147483647=2147483647.
+EOF
+
+%build
+install -d out
+
+CC="%{__cc}" \
+CFLAGS="%{rpmcflags} -DMKSH_GCC55009" \
+LDFLAGS="%{rpmldflags}" \
+CPPFLAGS="%{rpmcppflags}" \
+sh ./Build.sh -Q -r -j -c lto
+
+# skip some tests if not on terminal
+if ! tty -s; then
+ skip_tests="-C regress:no-ctty"
+fi
+
+%if %{with tests}
+./mksh rtchecks >rtchecks.got 2>&1
+if ! cmp --quiet rtchecks.got rtchecks.expected ; then
+ echo "rtchecks failed"
+ diff -Naurp rtchecks.expected rtchecks.got
+ exit 1
+fi
+./test.sh -v $skip_tests
+%endif
+mv mksh out/mksh.dynamic
+
+%if %{with static}
+CC="%{__cc}" \
+CFLAGS="%{rpmcflags} -DMKSH_GCC55009" \
+LDFLAGS="%{rpmldflags} -static" \
+CPPFLAGS="%{rpmcppflags}" \
+sh ./Build.sh -Q -r -j -c lto
+
+%if %{with tests}
+./test.sh -v $skip_tests
+./mksh rtchecks >rtchecks.got 2>&1
+if ! cmp --quiet rtchecks.got rtchecks.expected ; then
+ echo "rtchecks failed"
+ diff -Naurp %{SOURCE3} rtchecks.got
+ exit 1
+fi
+%endif
+mv mksh out/mksh.static
+%endif
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT{%{_bindir},%{_mandir}/man1}
+install -p out/mksh.dynamic $RPM_BUILD_ROOT%{_bindir}/mksh
+%{?with_static:install -p out/mksh.static $RPM_BUILD_ROOT%{_bindir}/mksh.static}
+
+cp -a mksh.1 $RPM_BUILD_ROOT%{_mandir}/man1/mksh.1
+echo ".so mksh.1" > $RPM_BUILD_ROOT%{_mandir}/man1/sh.1
+
+install -D %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/mkshrc
+ln -sf mksh $RPM_BUILD_ROOT%{_bindir}/sh
+
+# some pdksh scripts used that
+ln -sf mksh $RPM_BUILD_ROOT%{_bindir}/ksh
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post -p %add_etc_shells -p /bin/sh /bin/ksh /bin/mksh
+%preun -p %remove_etc_shells -p /bin/sh /bin/ksh /bin/mksh
+
+%posttrans -p %add_etc_shells -p /bin/sh /bin/ksh /bin/mksh
+
+%post static -p %add_etc_shells -p /bin/mksh.static
+%preun static -p %remove_etc_shells -p /bin/mksh.static
+
+%files
+%defattr(644,root,root,755)
+%doc dot.mkshrc
+%config(noreplace,missingok) %verify(not md5 mtime size) %{_sysconfdir}/mkshrc
+%attr(755,root,root) %{_bindir}/mksh
+%attr(755,root,root) %{_bindir}/ksh
+%attr(755,root,root) %{_bindir}/sh
+%{_mandir}/man1/mksh.1*
+%{_mandir}/man1/sh.1*
+
+%if %{with static}
+%files static
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/mksh.static
+%endif