From 3c782a41df2a346e1926ab4244e0f3a140fa2956 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Apr 10 2018 05:43:08 +0000 Subject: import mksh-46-8.el7 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..924bb9d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/mksh-R46.tgz diff --git a/.mksh.metadata b/.mksh.metadata new file mode 100644 index 0000000..20542b8 --- /dev/null +++ b/.mksh.metadata @@ -0,0 +1 @@ +f86f4d567a06813bf4495ec5cc2aaac1d57d346a SOURCES/mksh-R46.tgz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/dot-mkshrc b/SOURCES/dot-mkshrc new file mode 100644 index 0000000..b5839c9 --- /dev/null +++ b/SOURCES/dot-mkshrc @@ -0,0 +1,8 @@ +# .mkshrc + +# Source global definitions +if [ -f /etc/mkshrc ]; then + . /etc/mkshrc +fi + +# User specific aliases and functions diff --git a/SOURCES/mksh-46-fixtrace.patch b/SOURCES/mksh-46-fixtrace.patch new file mode 100644 index 0000000..5273144 --- /dev/null +++ b/SOURCES/mksh-46-fixtrace.patch @@ -0,0 +1,224 @@ +diff -up mksh/exec.c.fixtrace mksh/exec.c +--- mksh/exec.c.fixtrace 2013-04-26 23:23:09.000000000 +0200 ++++ mksh/exec.c 2017-10-10 12:11:30.472249513 +0200 +@@ -138,11 +138,6 @@ execute(struct op * volatile t, + /* Allow option parsing (bizarre, but POSIX) */ + timex_hook(t, &up); + ap = (const char **)up; +- if (Flag(FXTRACE)) { +- shf_puts(substitute(str_val(global("PS4")), 0), +- shl_out); +- Flag(FXTRACE) = 2; +- } + if (ap[0]) + tp = findcom(ap[0], FC_BI|FC_FUNC); + } +@@ -637,6 +632,8 @@ comexec(struct op *t, struct tbl * volat + l_assign = e->loc; + if (Flag(FEXPORT)) + type_flags |= EXPORT; ++ if (Flag(FXTRACE)) ++ change_xtrace(2, false); + for (i = 0; t->vars[i]; i++) { + /* do NOT lookup in the new var/fn block just created */ + e->loc = l_expand; +@@ -650,9 +647,9 @@ comexec(struct op *t, struct tbl * volat + ++ccp; + if (*ccp == '=') + ++ccp; +- shf_write(cp, ccp - cp, shl_out); +- print_value_quoted(shl_out, ccp); +- shf_putc(' ', shl_out); ++ shf_write(cp, ccp - cp, shl_xtrace); ++ print_value_quoted(shl_xtrace, ccp); ++ shf_putc(' ', shl_xtrace); + } + /* but assign in there as usual */ + typeset(cp, type_flags, 0, 0, 0); +@@ -661,17 +658,16 @@ comexec(struct op *t, struct tbl * volat + } + + if (Flag(FXTRACE)) { ++ change_xtrace(2, false); + if (ap[rv = 0]) { + xtrace_ap_loop: +- print_value_quoted(shl_out, ap[rv]); ++ print_value_quoted(shl_xtrace, ap[rv]); + if (ap[++rv]) { +- shf_putc(' ', shl_out); ++ shf_putc(' ', shl_xtrace); + goto xtrace_ap_loop; + } + } +- shf_putc('\n', shl_out); +- Flag(FXTRACE) = 1; +- shf_flush(shl_out); ++ change_xtrace(1, false); + } + + if ((cp = *ap) == NULL) { +@@ -754,9 +750,9 @@ comexec(struct op *t, struct tbl * volat + getopts_reset(1); + } + +- old_xflag = Flag(FXTRACE); +- Flag(FXTRACE) |= tp->flag & TRACE ? 1 : 0; +- ++ old_xflag = Flag(FXTRACE) ? 1 : 0; ++ change_xtrace((Flag(FXTRACEREC) ? old_xflag : 0) | ++ ((tp->flag & TRACE) ? 1 : 0), false); + old_inuse = tp->flag & FINUSE; + tp->flag |= FINUSE; + +@@ -765,9 +761,11 @@ comexec(struct op *t, struct tbl * volat + execute(tp->val.t, flags & XERROK, NULL); + i = LRETURN; + } ++ + kshname = old_kshname; +- Flag(FXTRACE) = old_xflag; ++ change_xtrace(old_xflag, false); + tp->flag = (tp->flag & ~FINUSE) | old_inuse; ++ + /* + * Were we deleted while executing? If so, free the + * execution tree. TODO: Unfortunately, the table entry +@@ -1308,8 +1306,11 @@ iosetup(struct ioword *iop, struct tbl * + iotmp.name = (iotype == IOHERE) ? NULL : cp; + iotmp.flag |= IONAMEXP; + +- if (Flag(FXTRACE) == 2) +- fptreef(shl_out, 0, "%R", &iotmp); ++ if (Flag(FXTRACE)) { ++ change_xtrace(2, false); ++ fptreef(shl_xtrace, 0, "%R", &iotmp); ++ change_xtrace(1, false); ++ } + + switch (iotype) { + case IOREAD: +diff -up mksh/main.c.fixtrace mksh/main.c +--- mksh/main.c.fixtrace 2013-05-02 22:22:08.000000000 +0200 ++++ mksh/main.c 2013-07-21 20:47:44.000000000 +0200 +@@ -332,6 +343,11 @@ main_init(int argc, const char *argv[], + */ + Flag(FBRACEEXPAND) = 1; + ++ /* ++ * Turn on "set -x" inheritance by default. ++ */ ++ Flag(FXTRACEREC) = 1; ++ + #ifndef MKSH_NO_CMDLINE_EDITING + /* + * Set edit mode to emacs by default, may be overridden +@@ -1373,7 +1393,7 @@ initio(void) + /* force buffer allocation */ + shf_fdopen(1, SHF_WR, shl_stdout); + shf_fdopen(2, SHF_WR, shl_out); +- shf_fdopen(2, SHF_WR, shl_spare); ++ shf_fdopen(2, SHF_WR, shl_xtrace); + #ifdef DF + if ((lfp = getenv("SDMKSH_PATH")) == NULL) { + if ((lfp = getenv("HOME")) == NULL || *lfp != '/') +diff -up mksh/misc.c.fixtrace mksh/misc.c +--- mksh/misc.c.fixtrace 2013-05-02 22:22:09.000000000 +0200 ++++ mksh/misc.c 2017-10-10 12:11:30.472249513 +0200 +@@ -229,8 +229,12 @@ void + change_flag(enum sh_flag f, int what, bool newset) + { + unsigned char oldval; +- unsigned char newval; ++ unsigned char newval = (newset ? 1 : 0); + ++ if (f == FXTRACE) { ++ change_xtrace(newval, true); ++ return; ++ } + oldval = Flag(f); + Flag(f) = newval = (newset ? 1 : 0); + #ifndef MKSH_UNEMPLOYED +@@ -286,6 +290,37 @@ change_flag(enum sh_flag f, int what, bo + } + } + ++void ++change_xtrace(unsigned char newval, bool dosnapshot) ++{ ++ if (!dosnapshot && newval == Flag(FXTRACE)) ++ return; ++ ++ if (Flag(FXTRACE) == 2) { ++ shf_putc('\n', shl_xtrace); ++ Flag(FXTRACE) = 1; ++ shf_flush(shl_xtrace); ++ } ++ ++ if (!dosnapshot && Flag(FXTRACE) == 1) ++ switch (newval) { ++ case 1: ++ return; ++ case 2: ++ goto changed_xtrace; ++ } ++ ++ shf_flush(shl_xtrace); ++ if (shl_xtrace->fd != 2) ++ close(shl_xtrace->fd); ++ if (!newval || (shl_xtrace->fd = savefd(2)) == -1) ++ shl_xtrace->fd = 2; ++ ++ changed_xtrace: ++ if ((Flag(FXTRACE) = newval) == 2) ++ shf_puts(substitute(str_val(global("PS4")), 0), shl_xtrace); ++} ++ + /* + * Parse command line and set command arguments. Returns the index of + * non-option arguments, -1 if there is an error. +@@ -444,8 +479,10 @@ parse_args(const char **argv, + (argv[go.optind][0] == '-' || argv[go.optind][0] == '+') && + argv[go.optind][1] == '\0') { + /* lone - clears -v and -x flags */ +- if (argv[go.optind][0] == '-') +- Flag(FVERBOSE) = Flag(FXTRACE) = 0; ++ if (argv[go.optind][0] == '-') { ++ Flag(FVERBOSE) = 0; ++ change_xtrace(0, false); ++ } + /* set skips lone - or + option */ + go.optind++; + } +diff -up mksh/sh_flags.h.fixtrace mksh/sh_flags.h +--- mksh/sh_flags.h.fixtrace 2013-05-02 22:28:40.000000000 +0200 ++++ mksh/sh_flags.h 2017-10-10 12:11:30.472249513 +0200 +@@ -45,6 +45,9 @@ FN("gmacs", FGMACS, 0, OF_ANY) + /* ./. reading EOF does not exit */ + FN("ignoreeof", FIGNOREEOF, 0, OF_ANY) + ++/* ./. inherit -x flag */ ++FN("inherit-xtrace", FXTRACEREC, 0, OF_ANY) ++ + /* -i interactive shell */ + FN("interactive", FTALKING, 'i', OF_CMDLINE) + +diff -up mksh/sh.h.fixtrace mksh/sh.h +--- mksh/sh.h.fixtrace 2013-05-03 00:00:17.000000000 +0200 ++++ mksh/sh.h 2017-10-10 12:11:30.472249513 +0200 +@@ -837,7 +837,7 @@ struct temp { + * stdio and our IO routines + */ + +-#define shl_spare (&shf_iob[0]) /* for c_read()/c_print() */ ++#define shl_xtrace (&shf_iob[0]) /* for set -x */ + #define shl_stdout (&shf_iob[1]) + #define shl_out (&shf_iob[2]) + #ifdef DF +@@ -1905,6 +1905,7 @@ void initctypes(void); + size_t option(const char *); + char *getoptions(void); + void change_flag(enum sh_flag, int, bool); ++void change_xtrace(unsigned char, bool); + int parse_args(const char **, int, bool *); + int getn(const char *, int *); + int gmatchx(const char *, const char *, bool); diff --git a/SOURCES/mksh-46-lksh.patch b/SOURCES/mksh-46-lksh.patch new file mode 100644 index 0000000..e146a69 --- /dev/null +++ b/SOURCES/mksh-46-lksh.patch @@ -0,0 +1,49 @@ +Index: Build.sh +=================================================================== +RCS file: /cvs/src/bin/mksh/Build.sh,v +retrieving revision 1.630 +retrieving revision 1.631 +diff -u -p -r1.630 -r1.631 +--- Build.sh 2 May 2013 21:59:44 -0000 1.630 ++++ Build.sh 5 May 2013 13:38:00 -0000 1.631 +@@ -63,7 +63,7 @@ vq() { + rmf() { + for _f in "$@"; do + case $_f in +- Build.sh|check.pl|check.t|dot.mkshrc|*.c|*.h|mksh.1) ;; ++ Build.sh|check.pl|check.t|dot.mkshrc|*.c|*.h|lksh.1|mksh.1) ;; + *) rm -f "$_f" ;; + esac + done +@@ -458,7 +458,7 @@ oswarn= + ccpc=-Wc, + ccpl=-Wl, + tsts= +-ccpr='|| for _f in ${tcfn}*; do case $_f in Build.sh|check.pl|check.t|dot.mkshrc|*.c|*.h|mksh.1) ;; *) rm -f "$_f" ;; esac; done' ++ccpr='|| for _f in ${tcfn}*; do case $_f in Build.sh|check.pl|check.t|dot.mkshrc|*.c|*.h|lksh.1|mksh.1) ;; *) rm -f "$_f" ;; esac; done' + + # Evil hack + if test x"$TARGET_OS" = x"Android"; then +@@ -2268,8 +2268,10 @@ test 1 = $eq && e=: + $e + $e Installing the shell: + $e "# $i -c -s -o root -g bin -m 555 $tfn /bin/$tfn" +-$e "# grep -x /bin/$tfn /etc/shells >/dev/null || echo /bin/$tfn >>/etc/shells" +-$e "# $i -c -o root -g bin -m 444 dot.mkshrc /usr/share/doc/mksh/examples/" ++if test $legacy = 0; then ++ $e "# grep -x /bin/$tfn /etc/shells >/dev/null || echo /bin/$tfn >>/etc/shells" ++ $e "# $i -c -o root -g bin -m 444 dot.mkshrc /usr/share/doc/mksh/examples/" ++fi + $e + $e Installing the manual: + if test -f $tfn.cat1; then +@@ -2277,7 +2279,7 @@ if test -f $tfn.cat1; then + "/usr/share/man/cat1/$tfn.0" + $e or + fi +-$e "# $i -c -o root -g bin -m 444 mksh.1 /usr/share/man/man1/$tfn.1" ++$e "# $i -c -o root -g bin -m 444 $tfn.1 /usr/share/man/man1/$tfn.1" + $e + $e Run the regression test suite: ./test.sh + $e Please also read the sample file dot.mkshrc and the fine manual. + diff --git a/SOURCES/mksh-46-selectopts.patch b/SOURCES/mksh-46-selectopts.patch new file mode 100644 index 0000000..be4ff90 --- /dev/null +++ b/SOURCES/mksh-46-selectopts.patch @@ -0,0 +1,18 @@ +diff -up mksh/exec.c.selectopts mksh/exec.c +--- mksh/exec.c.selectopts 2017-09-14 14:15:27.335249169 +0200 ++++ mksh/exec.c 2017-09-14 14:16:30.120467641 +0200 +@@ -1560,11 +1560,9 @@ do_selectargs(const char **ap, bool prin + shellf("%s", str_val(global("PS3"))); + if (call_builtin(findcom("read", FC_BI), read_args, Tselect)) + return (NULL); +- s = str_val(global("REPLY")); +- if (*s) { +- getn(s, &i); +- return ((i >= 1 && i <= argct) ? ap[i - 1] : null); +- } ++ if (*(s = str_val(global("REPLY")))) ++ return ((getn(s, &i) && i >= 1 && i <= argct) ? ++ ap[i - 1] : null); + print_menu = true; + } + } diff --git a/SOURCES/mksh-55-waitfail.patch b/SOURCES/mksh-55-waitfail.patch new file mode 100644 index 0000000..a40ff45 --- /dev/null +++ b/SOURCES/mksh-55-waitfail.patch @@ -0,0 +1,20 @@ +diff -up mksh/jobs.c.waitfail mksh/jobs.c +--- mksh/jobs.c.waitfail 2017-08-09 10:06:36.500591694 +0200 ++++ mksh/jobs.c 2017-08-09 10:08:34.325534710 +0200 +@@ -1009,8 +1009,14 @@ j_notify(void) + } + for (j = job_list; j; j = tmp) { + tmp = j->next; +- if (j->flags & JF_REMOVE) +- remove_job(j, "notify"); ++ if (j->flags & JF_REMOVE) { ++ if (j == async_job || (j->flags & JF_KNOWN)) { ++ j->flags = (j->flags & ~JF_REMOVE) | JF_ZOMBIE; ++ j->job = -1; ++ nzombie++; ++ } else ++ remove_job(j, "notify"); ++ } + } + shf_flush(shl_out); + #ifndef MKSH_NOPROSPECTOFWORK diff --git a/SOURCES/rtchecks.expected b/SOURCES/rtchecks.expected new file mode 100644 index 0000000..56e47ca --- /dev/null +++ b/SOURCES/rtchecks.expected @@ -0,0 +1,10 @@ +0:0=0. +1:-1=4294967295. +2:2147483647=2147483647. +3:-2147483648=2147483648. +4:-1=4294967295. +5:0=0. +6:-2147483648=2147483648. +7:2147483647=2147483647. +8:-3=2147483645. +9:-2=4294967294. diff --git a/SPECS/mksh.spec b/SPECS/mksh.spec new file mode 100644 index 0000000..b4f9a9a --- /dev/null +++ b/SPECS/mksh.spec @@ -0,0 +1,312 @@ +%define _bindir /bin +Summary: MirBSD enhanced version of the Korn Shell +Name: mksh +Version: 46 +Release: 8%{?dist} +# BSD (setmode.c), ISC (strlcpy.c), MirOS (the rest) +License: MirOS and ISC and BSD +Group: System Environment/Shells +URL: https://www.mirbsd.de/%{name}.htm +Source0: http://www.mirbsd.org/MirOS/dist/mir/%{name}/%{name}-R%{version}.tgz +Source1: dot-mkshrc +Source2: rtchecks.expected +Patch0: mksh-46-lksh.patch +# from upstream, for mksh <= 55, rhbz#1243788 +Patch1: mksh-55-waitfail.patch +# from upstream, for mksh <= 50f, rhbz#1491312 +Patch2: mksh-46-selectopts.patch +# from upstream, for mksh < 47, rhbz#1413023 +Patch3: mksh-46-fixtrace.patch +Requires: chkconfig +Requires(post): grep, chkconfig +Requires(postun): sed +BuildRequires: util-linux, ed +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +#for usage of alternatives +Conflicts: ksh < 20120801-9 + +%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, being a +bourne shell replacement, pdksh successor and an alternative to the C shell. + +%prep +%setup -q -n %{name} +%patch0 -p0 -b .lksh +%patch1 -p1 -b .waitfail +%patch2 -p1 -b .selectopts +%patch3 -p1 -b .fixtrace + +# we'll need this later +cat >rtchecks <<'EOF' +typeset -i sari=0 +typeset -Ui uari=0 +typeset -i x=0 +print -r -- $((x++)):$sari=$uari. #0 +let --sari --uari +print -r -- $((x++)):$sari=$uari. #1 +sari=2147483647 uari=2147483647 +print -r -- $((x++)):$sari=$uari. #2 +let ++sari ++uari +print -r -- $((x++)):$sari=$uari. #3 +let --sari --uari +let 'sari *= 2' 'uari *= 2' +let ++sari ++uari +print -r -- $((x++)):$sari=$uari. #4 +let ++sari ++uari +print -r -- $((x++)):$sari=$uari. #5 +sari=-2147483648 uari=-2147483648 +print -r -- $((x++)):$sari=$uari. #6 +let --sari --uari +print -r -- $((x++)):$sari=$uari. #7 +(( sari = -5 >> 1 )) +((# uari = -5 >> 1 )) +print -r -- $((x++)):$sari=$uari. #8 +(( sari = -2 )) +((# uari = sari )) +print -r -- $((x++)):$sari=$uari. #9 +EOF + +%build +# Work around RHBZ #922974 on Fedora 19 and later +%if 0%{?fedora} >= 19 || 0%{?rhel} > 6 +CFLAGS="$RPM_OPT_FLAGS -DMKSH_DISABLE_EXPERIMENTAL" sh Build.sh -r +%else +CFLAGS="$RPM_OPT_FLAGS -DMKSH_DISABLE_EXPERIMENTAL" sh Build.sh -r -c lto +%endif +cp test.sh test_mksh.sh +# Work around RHBZ #922974 on Fedora 19 and later +%if 0%{?fedora} >= 19 || 0%{?rhel} > 6 +CFLAGS="$RPM_OPT_FLAGS -DMKSH_DISABLE_EXPERIMENTAL" sh Build.sh -L -r +%else +CFLAGS="$RPM_OPT_FLAGS -DMKSH_DISABLE_EXPERIMENTAL" sh Build.sh -L -r -c lto +%endif +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 lksh.1 $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 + +# fool rpmdiff about %ghost files +touch $RPM_BUILD_ROOT/bin/ksh +touch $RPM_BUILD_ROOT%{_mandir}/man1/ksh.1.gz + +%check +./mksh rtchecks >rtchecks.got 2>&1 +if ! cmp --quiet rtchecks.got %{SOURCE2} +then + echo "rtchecks failed" + diff -Naurp %{SOURCE2} rtchecks.got + exit 1 +fi + +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 +grep -q "^%{_bindir}/%{name}$" %{_sysconfdir}/shells 2>/dev/null || \ + echo "%{_bindir}/%{name}" >> %{_sysconfdir}/shells + +%{_sbindir}/alternatives --install /bin/ksh ksh \ + /bin/mksh 10 \ + --slave %{_mandir}/man1/ksh.1.gz ksh-man \ + %{_mandir}/man1/mksh.1.gz + +%preun +if [ $1 = 0 ]; then + %{_sbindir}/alternatives --remove ksh /bin/mksh +fi + +%postun +if [ ! -x %{_bindir}/%{name} ]; then + sed -e 's@^%{_bindir}/%{name}$@POSTUNREMOVE@' -e '/^POSTUNREMOVE$/d' -i %{_sysconfdir}/shells +fi + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc dot.mkshrc +%{_bindir}/%{name} +%ghost %{_bindir}/ksh +%ghost %{_mandir}/man1/ksh.1.gz +%{_bindir}/lksh +%config(noreplace) %{_sysconfdir}/mkshrc +%config(noreplace) %{_sysconfdir}/skel/.mkshrc +%{_mandir}/man1/%{name}.1* +%{_mandir}/man1/lksh.1* + +%changelog +* Tue Oct 10 2017 Michal Hlavinka - 46-8 +- fix infinite recursion in PS4 (#1413023) + +* Thu Sep 14 2017 Michal Hlavinka - 46-7 +- fix select setting wrong value on incorrect input (#1491312) + +* Wed Aug 09 2017 Michal Hlavinka - 46-6 +- do not forget exit codes of co-processes in interactive mode (#1243788) + +* Fri Jan 24 2014 Daniel Mach - 46-5 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 46-4 +- Mass rebuild 2013-12-27 + +* Fri May 24 2013 Michal Hlavinka - 46-3 +- add alternatives switching with ksh + +* Thu May 23 2013 Michal Hlavinka - 46-2 +- add workaround for broken gcc (#960113) + +* Fri May 03 2013 Thorsten Glaser 46-1 +- Upgrade mksh to R46 + +* Wed May 01 2013 Thorsten Glaser 45-1 +- Upgrade mksh to R45 and the other files to the accompanying versions +- Drop workaround for GCC PR55009 (no longer needed) +- Use https for homepage + +* Mon Mar 18 2013 Robert Scheck 44-1 +- Upgrade to 44 and work around bug in GCC 4.8 (#922974) + +* Thu Feb 14 2013 Fedora Release Engineering - 41-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Dec 03 2012 Michal Hlavinka - 41-1 +- Upgrade to 41 + +* Fri Jul 20 2012 Michal Hlavinka - 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 - 40d-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jan 13 2012 Fedora Release Engineering - 40d-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Sun Dec 11 2011 Robert Scheck 40d-1 +- Upgrade to 40d + +* Tue Nov 22 2011 Robert Scheck 40c-1 +- Upgrade to 40c + +* Thu Jul 28 2011 Robert Scheck 40b-2 +- Use new "Build.sh -r -c lto" rather "Build.sh -r -combine" + +* Thu Jul 28 2011 Robert Scheck 40b-1 +- Upgrade to 40b + +* Tue Feb 08 2011 Fedora Release Engineering - 39c-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 04 2011 Michal Hlavinka 39c-4 +- fix crash when bad substitution is used + +* Wed Jul 21 2010 Michal Hlavinka 39c-3 +- fix crash when alias contains alias +- fix crash when xtrace is enabled + +* Sun Jul 11 2010 Robert Scheck 39c-2 +- Added default configuration /etc/mkshrc & /etc/skel/.mkshrc + as default skel (like at bash; thanks to Michal Hlavinka) +- Corrected the license tag (thanks to Michal Hlavinka) +- Removed the arc4random.c file (upstream is phasing it out) + +* Sat Feb 27 2010 Robert Scheck 39c-1 +- Upgrade to 39c and updated arc4random.c file + +* Thu Aug 13 2009 Robert Scheck 39-1 +- Upgrade to 39 and updated arc4random.c file + +* Sat Jul 25 2009 Fedora Release Engineering - 38b-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sun May 31 2009 Robert Scheck 38b-1 +- Upgrade to 38b + +* Sun May 31 2009 Robert Scheck 38-1 +- Upgrade to 38 and updated arc4random.c file +- Used -combine (-fwhole-program) rather the old -j switch + +* Sun Apr 05 2009 Robert Scheck 37b-1 +- Upgrade to 37b + +* Mon Feb 23 2009 Robert Scheck 36b-2 +- Rebuild against gcc 4.4 and rpm 4.6 + +* Sun Dec 14 2008 Robert Scheck 36b-1 +- Upgrade to 36b and updated arc4random.c file + +* Tue Dec 02 2008 Robert Scheck 36-2 +- Upstream patch for command hang/high cpu workload (#474115) + +* Sat Oct 25 2008 Robert Scheck 36-1 +- Upgrade to 36 + +* Sat Jul 19 2008 Robert Scheck 35b-1 +- Upgrade to 35b + +* Sun Jul 13 2008 Robert Scheck 35-1 +- Upgrade to 35 + +* Sat Apr 12 2008 Robert Scheck 33d-1 +- Upgrade to 33d + +* Fri Apr 04 2008 Robert Scheck 33c-1 +- Upgrade to 33c and updated arc4random.c file + +* Mon Mar 03 2008 Robert Scheck 33-1 +- Upgrade to 33 + +* Sun Feb 10 2008 Robert Scheck 32-2 +- Rebuild against gcc 4.3 + +* Sat Nov 10 2007 Robert Scheck 32-1 +- Upgrade to 32 +- Solved fork problems in %%check (thanks to Thorsten Glaser) + +* Mon Oct 15 2007 Robert Scheck 31d-1 +- Upgrade to 31d + +* Wed Sep 12 2007 Robert Scheck 31c-1 +- Upgrade to 31c +- Added a buildrequirement to ed, added arc4random.c file + +* Tue Sep 11 2007 Robert Scheck 31b-1 +- Upgrade to 31b +- Use script to get %%check happy (thanks to Thorsten Glaser) + +* Sat Sep 08 2007 Robert Scheck 31-1 +- Upgrade to 31 + +* Tue Aug 28 2007 Robert Scheck 30-2 +- Updated the license tag according to the guidelines + +* Sat Jul 28 2007 Robert Scheck 30-1 +- Upgrade to 30 + +* Sat Jul 14 2007 Robert Scheck 29g-1 +- Upgrade to 29g + +* Sun Jun 03 2007 Robert Scheck 29f-1 +- Upgrade to 29f +- Initial spec file for Fedora and Red Hat Enterprise Linux