X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2FBuild.sh;h=be3f71173f824bf811120e19e8edc220acad2522;hb=47086265c3f79e7562a86d725864bf12c7193ed8;hp=c59163b977201a43c1441761d52dccadfbadfa11;hpb=94d772d0c48c4501517a6962dfa76a7f473168fc;p=android-x86%2Fexternal-mksh.git diff --git a/src/Build.sh b/src/Build.sh index c59163b..be3f711 100644 --- a/src/Build.sh +++ b/src/Build.sh @@ -1,9 +1,9 @@ #!/bin/sh -srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.669 2014/10/07 15:22:12 tg Exp $' +srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.734 2019/03/01 16:18:13 tg Exp $' #- # Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012, 2013, 2014 -# Thorsten Glaser +# 2011, 2012, 2013, 2014, 2015, 2016, 2017 +# mirabilos # # Provided that these terms and disclaimer and all copyright notices # are retained or reproduced in an accompanying document, permission @@ -53,6 +53,16 @@ alll=qwertyuiopasdfghjklzxcvbnm alln=0123456789 alls=______________________________________________________________ +case `echo a | tr '\201' X` in +X) + # EBCDIC build system + lfcr='\n\r' + ;; +*) + lfcr='\012\015' + ;; +esac + genopt_die() { if test -n "$1"; then echo >&2 "E: $*" @@ -100,6 +110,7 @@ do_genopt() { srcfile=$1 test -f "$srcfile" || genopt_die Source file \$srcfile not set. bn=`basename "$srcfile" | sed 's/.opt$//'` + o_hdr='/* +++ GENERATED FILE +++ DO NOT EDIT +++ */' o_gen= o_str= o_sym= @@ -119,7 +130,7 @@ do_genopt() { state=3 ;; 1:@@) - # begin of data block + # start of data block o_gen=$o_gen$nl"#endif" o_gen=$o_gen$nl"#ifndef F0" o_gen=$o_gen$nl"#define F0 FN" @@ -128,8 +139,11 @@ do_genopt() { ;; *:@@*) genopt_die ;; + 0:/\*-|0:\ \**|0:) + o_hdr=$o_hdr$nl$line + ;; 0:@*|1:@*) - # begin of a definition block + # start of a definition block sym=`echo "$line" | sed 's/^@//'` if test $state = 0; then o_gen=$o_gen$nl"#if defined($sym)" @@ -177,6 +191,7 @@ do_genopt() { echo "\"$opts\"" test -n "$cond" && echo "#endif" done | { + echo "$o_hdr" echo "#ifndef $o_sym$o_gen" echo "#else" cat @@ -314,6 +329,7 @@ ac_testnnd() { vv ']' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN conftest.c $LIBS $ccpr" test $tcfn = no && test -f a.out && tcfn=a.out test $tcfn = no && test -f a.exe && tcfn=a.exe + test $tcfn = no && test -f conftest.exe && tcfn=conftest.exe test $tcfn = no && test -f conftest && tcfn=conftest if test -f $tcfn; then test 1 = $fr || fv=1 @@ -402,6 +418,7 @@ ac_flags() { #include int main(void) { return (isatty(0)); } EOF + #' fi eval fv=\$HAVE_CAN_`upper $vn` if test -n "$fl"; then @@ -419,7 +436,7 @@ ac_header() { na=0 fi hf=$1; shift - hv=`echo "$hf" | tr -d '\012\015' | tr -c $alll$allu$alln $alls` + hv=`echo "$hf" | tr -d "$lfcr" | tr -c $alll$allu$alln $alls` echo "/* NeXTstep bug workaround */" >x for i do @@ -489,6 +506,8 @@ check_categories= last= tfn= legacy=0 +textmode=0 +ebcdic=false for i do @@ -512,6 +531,9 @@ do :-c) last=c ;; + :-E) + ebcdic=true + ;; :-G) echo "$me: Do not call me with '-G'!" >&2 exit 1 @@ -545,6 +567,12 @@ do :-r) r=1 ;; + :-T) + textmode=1 + ;; + :+T) + textmode=0 + ;; :-t) last=t ;; @@ -577,20 +605,28 @@ if test -d $tfn || test -d $tfn.exe; then echo "$me: Error: ./$tfn is a directory!" >&2 exit 1 fi -rmf a.exe* a.out* conftest.c *core core.* lft ${tfn}* no *.bc *.ll *.o *.gen \ - Rebuild.sh signames.inc test.sh x vv.out +rmf a.exe* a.out* conftest.c conftest.exe* *core core.* ${tfn}* *.bc *.dbg \ + *.ll *.o *.gen *.cat1 Rebuild.sh lft no signames.inc test.sh x vv.out -SRCS="lalloc.c eval.c exec.c expr.c funcs.c histrap.c jobs.c" +SRCS="lalloc.c edit.c eval.c exec.c expr.c funcs.c histrap.c jobs.c" SRCS="$SRCS lex.c main.c misc.c shf.c syn.c tree.c var.c" if test $legacy = 0; then - SRCS="$SRCS edit.c" check_categories="$check_categories shell:legacy-no int:32" else check_categories="$check_categories shell:legacy-yes" add_cppflags -DMKSH_LEGACY_MODE - HAVE_PERSISTENT_HISTORY=0 - HAVE_ISSET_MKSH_CONSERVATIVE_FDS=1 # from sh.h +fi + +if $ebcdic; then + add_cppflags -DMKSH_EBCDIC +fi + +if test $textmode = 0; then + check_categories="$check_categories shell:textmode-no shell:binmode-yes" +else + check_categories="$check_categories shell:textmode-yes shell:binmode-no" + add_cppflags -DMKSH_WITH_TEXTMODE fi if test x"$srcdir" = x"."; then @@ -682,14 +718,13 @@ esac # Configuration depending on OS name case $TARGET_OS in 386BSD) - : ${HAVE_CAN_OTWO=0} + : "${HAVE_CAN_OTWO=0}" add_cppflags -DMKSH_NO_SIGSETJMP add_cppflags -DMKSH_TYPEDEF_SIG_ATOMIC_T=int - add_cppflags -DMKSH_CONSERVATIVE_FDS ;; AIX) add_cppflags -D_ALL_SOURCE - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; BeOS) case $KSH_VERSION in @@ -708,18 +743,17 @@ BeOS) add_cppflags -DMKSH__NO_SETEUGID ;; BSD/OS) - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; Coherent) oswarn="; it has major issues" add_cppflags -DMKSH__NO_SYMLINK check_categories="$check_categories nosymlink" add_cppflags -DMKSH__NO_SETEUGID - add_cppflags -DMKSH_CONSERVATIVE_FDS add_cppflags -DMKSH_DISABLE_TTY_WARNING ;; CYGWIN*) - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; Darwin) add_cppflags -D_DARWIN_C_SOURCE @@ -731,14 +765,14 @@ FreeBSD) FreeMiNT) oswarn="; it has minor issues" add_cppflags -D_GNU_SOURCE - add_cppflags -DMKSH_CONSERVATIVE_FDS - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; GNU) case $CC in *tendracc*) ;; *) add_cppflags -D_GNU_SOURCE ;; esac + add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN # define MKSH__NO_PATH_MAX to use Hurd-only functions add_cppflags -DMKSH__NO_PATH_MAX ;; @@ -747,9 +781,34 @@ GNU/kFreeBSD) *tendracc*) ;; *) add_cppflags -D_GNU_SOURCE ;; esac + add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN ;; Haiku) - add_cppflags -DMKSH_ASSUME_UTF8; HAVE_ISSET_MKSH_ASSUME_UTF8=1 + add_cppflags -DMKSH_ASSUME_UTF8 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=0 + ;; +Harvey) + add_cppflags -D_POSIX_SOURCE + add_cppflags -D_LIMITS_EXTENSION + add_cppflags -D_BSD_EXTENSION + add_cppflags -D_SUSV2_SOURCE + add_cppflags -D_GNU_SOURCE + add_cppflags -DMKSH_ASSUME_UTF8 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=0 + add_cppflags -DMKSH__NO_SYMLINK + check_categories="$check_categories nosymlink" + add_cppflags -DMKSH_NO_CMDLINE_EDITING + add_cppflags -DMKSH__NO_SETEUGID + oswarn=' and will currently not work' + add_cppflags -DMKSH_UNEMPLOYED + add_cppflags -DMKSH_NOPROSPECTOFWORK + # these taken from Harvey-OS github and need re-checking + add_cppflags -D_setjmp=setjmp -D_longjmp=longjmp + : "${HAVE_CAN_NO_EH_FRAME=0}" + : "${HAVE_CAN_FNOSTRICTALIASING=0}" + : "${HAVE_CAN_FSTACKPROTECTORSTRONG=0}" ;; HP-UX) ;; @@ -757,11 +816,25 @@ Interix) ccpc='-X ' ccpl='-Y ' add_cppflags -D_ALL_SOURCE - : ${LIBS='-lcrypt'} - : ${HAVE_SETLOCALE_CTYPE=0} + : "${LIBS=-lcrypt}" + : "${HAVE_SETLOCALE_CTYPE=0}" ;; IRIX*) - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" + ;; +Jehanne) + add_cppflags -DMKSH_ASSUME_UTF8 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=0 + add_cppflags -DMKSH__NO_SYMLINK + check_categories="$check_categories nosymlink" + add_cppflags -DMKSH_NO_CMDLINE_EDITING + add_cppflags -DMKSH_DISABLE_REVOKE_WARNING + add_cppflags '-D_PATH_DEFPATH=\"/cmd\"' + add_cppflags '-DMKSH_DEFAULT_EXECSHELL=\"/cmd/mksh\"' + add_cppflags '-DMKSH_DEFAULT_PROFILEDIR=\"/cfg/mksh\"' + add_cppflags '-DMKSH_ENVDIR=\"/env\"' + SRCS="$SRCS jehanne.c" ;; Linux) case $CC in @@ -769,7 +842,7 @@ Linux) *) add_cppflags -D_GNU_SOURCE ;; esac add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN - : ${HAVE_REVOKE=0} + : "${HAVE_REVOKE=0}" ;; LynxOS) oswarn="; it has minor issues" @@ -779,34 +852,35 @@ MidnightBSD) Minix-vmd) add_cppflags -DMKSH__NO_SETEUGID add_cppflags -DMKSH_UNEMPLOYED - add_cppflags -DMKSH_CONSERVATIVE_FDS add_cppflags -D_MINIX_SOURCE oldish_ed=no-stderr-ed # no /bin/ed, maybe see below - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; Minix3) add_cppflags -DMKSH_UNEMPLOYED - add_cppflags -DMKSH_CONSERVATIVE_FDS add_cppflags -DMKSH_NO_LIMITS add_cppflags -D_POSIX_SOURCE -D_POSIX_1_SOURCE=2 -D_MINIX oldish_ed=no-stderr-ed # /usr/bin/ed(!) is broken - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; MirBSD) ;; MSYS_*) - add_cppflags -DMKSH_ASSUME_UTF8=0; HAVE_ISSET_MKSH_ASSUME_UTF8=1 + add_cppflags -DMKSH_ASSUME_UTF8=0 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=1 # almost same as CYGWIN* (from RT|Chatzilla) - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" # broken on this OE (from ir0nh34d) - : ${HAVE_STDINT_H=0} + : "${HAVE_STDINT_H=0}" ;; NetBSD) ;; NEXTSTEP) add_cppflags -D_NEXT_SOURCE add_cppflags -D_POSIX_SOURCE - : ${AWK=gawk} ${CC=cc -posix} + : "${AWK=gawk}" + : "${CC=cc -posix}" add_cppflags -DMKSH_NO_SIGSETJMP # NeXTstep cannot get a controlling tty add_cppflags -DMKSH_UNEMPLOYED @@ -816,18 +890,63 @@ NEXTSTEP) oswarn="; it needs libposix.a" ;; esac - add_cppflags -DMKSH_CONSERVATIVE_FDS ;; Ninix3) # similar to Minix3 add_cppflags -DMKSH_UNEMPLOYED - add_cppflags -DMKSH_CONSERVATIVE_FDS add_cppflags -DMKSH_NO_LIMITS # but no idea what else could be needed oswarn="; it has unknown issues" ;; OpenBSD) - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" + ;; +OS/2) + add_cppflags -DMKSH_ASSUME_UTF8=0 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=1 + HAVE_TERMIOS_H=0 + HAVE_MKNOD=0 # setmode() incompatible + oswarn="; it is being ported" + check_categories="$check_categories nosymlink" + : "${CC=gcc}" + : "${SIZE=: size}" + SRCS="$SRCS os2.c" + add_cppflags -DMKSH_UNEMPLOYED + add_cppflags -DMKSH_NOPROSPECTOFWORK + add_cppflags -DMKSH_NO_LIMITS + add_cppflags -DMKSH_DOSPATH + if test $textmode = 0; then + x='dis' + y='standard OS/2 tools' + else + x='en' + y='standard Unix mksh and other tools' + fi + echo >&2 " +OS/2 Note: mksh can be built with or without 'textmode'. +Without 'textmode' it will behave like a standard Unix utility, +compatible to mksh on all other platforms, using only ASCII LF +(0x0A) as line ending character. This is supported by the mksh +upstream developer. +With 'textmode', mksh will be modified to behave more like other +OS/2 utilities, supporting ASCII CR+LF (0x0D 0x0A) as line ending +at the cost of deviation from standard mksh. This is supported by +the mksh-os2 porter. + +] You are currently compiling with textmode ${x}abled, introducing +] incompatibilities with $y. +" + ;; +OS/390) + add_cppflags -DMKSH_ASSUME_UTF8=0 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=1 + : "${CC=xlc}" + : "${SIZE=: size}" + add_cppflags -DMKSH_FOR_Z_OS + add_cppflags -D_ALL_SOURCE + oswarn='; EBCDIC support is incomplete' ;; OSF1) HAVE_SIG_T=0 # incompatible @@ -835,14 +954,18 @@ OSF1) add_cppflags -D_POSIX_C_SOURCE=200112L add_cppflags -D_XOPEN_SOURCE=600 add_cppflags -D_XOPEN_SOURCE_EXTENDED - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; Plan9) add_cppflags -D_POSIX_SOURCE add_cppflags -D_LIMITS_EXTENSION add_cppflags -D_BSD_EXTENSION add_cppflags -D_SUSV2_SOURCE - add_cppflags -DMKSH_ASSUME_UTF8; HAVE_ISSET_MKSH_ASSUME_UTF8=1 + add_cppflags -DMKSH_ASSUME_UTF8 + HAVE_ISSET_MKSH_ASSUME_UTF8=1 + HAVE_ISOFF_MKSH_ASSUME_UTF8=0 + add_cppflags -DMKSH__NO_SYMLINK + check_categories="$check_categories nosymlink" add_cppflags -DMKSH_NO_CMDLINE_EDITING add_cppflags -DMKSH__NO_SETEUGID oswarn=' and will currently not work' @@ -853,7 +976,7 @@ Plan9) PW32*) HAVE_SIG_T=0 # incompatible oswarn=' and will currently not work' - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; QNX) add_cppflags -D__NO_EXT_QNX @@ -863,7 +986,7 @@ QNX) oldish_ed=no-stderr-ed # oldish /bin/ed is broken ;; esac - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; SCO_SV) case $TARGET_OSREV in @@ -879,8 +1002,7 @@ SCO_SV) oswarn="$oswarn$nl$TARGET_OS ${TARGET_OSREV}, please tell me what to do" ;; esac - add_cppflags -DMKSH_CONSERVATIVE_FDS - : ${HAVE_SYS_SIGLIST=0} ${HAVE__SYS_SIGLIST=0} + : "${HAVE_SYS_SIGLIST=0}${HAVE__SYS_SIGLIST=0}" ;; skyos) oswarn="; it has minor issues" @@ -895,15 +1017,13 @@ syllable) oswarn=' and will currently not work' ;; ULTRIX) - : ${CC=cc -YPOSIX} + : "${CC=cc -YPOSIX}" add_cppflags -DMKSH_TYPEDEF_SSIZE_T=int - add_cppflags -DMKSH_CONSERVATIVE_FDS - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; UnixWare|UNIX_SV) # SCO UnixWare - add_cppflags -DMKSH_CONSERVATIVE_FDS - : ${HAVE_SYS_SIGLIST=0} ${HAVE__SYS_SIGLIST=0} + : "${HAVE_SYS_SIGLIST=0}${HAVE__SYS_SIGLIST=0}" ;; UWIN*) ccpc='-Yc,' @@ -911,7 +1031,7 @@ UWIN*) tsts=" 3<>/dev/tty" oswarn="; it will compile, but the target" oswarn="$oswarn${nl}platform itself is very flakey/unreliable" - : ${HAVE_SETLOCALE_CTYPE=0} + : "${HAVE_SETLOCALE_CTYPE=0}" ;; _svr4) # generic target for SVR4 Unix with uname -s = uname -n @@ -925,11 +1045,11 @@ _svr4) ;; esac -: ${HAVE_MKNOD=0} +: "${HAVE_MKNOD=0}" -: ${AWK=awk} ${CC=cc} ${NROFF=nroff} ${SIZE=size} +: "${AWK=awk}${CC=cc}${NROFF=nroff}${SIZE=size}" test 0 = $r && echo | $NROFF -v 2>&1 | grep GNU >/dev/null 2>&1 && \ - NROFF="$NROFF -c" + echo | $NROFF -c >/dev/null 2>&1 && NROFF="$NROFF -c" # this aids me in tracing FTBFSen without access to the buildd $e "Hi from$ao $bi$srcversion$ao on:" @@ -941,11 +1061,12 @@ AIX) Darwin) vv '|' "hwprefs machine_type os_type os_class >&2" vv '|' "sw_vers >&2" - vv '|' "system_profiler SPSoftwareDataType SPHardwareDataType >&2" + vv '|' "system_profiler -detailLevel mini SPSoftwareDataType SPHardwareDataType >&2" vv '|' "/bin/sh --version >&2" vv '|' "xcodebuild -version >&2" vv '|' "uname -a >&2" - vv '|' "sysctl kern.version hw.machine hw.model hw.memsize hw.availcpu hw.cpufrequency hw.byteorder hw.cpu64bit_capable >&2" + vv '|' "sysctl kern.version hw.machine hw.model hw.memsize hw.availcpu hw.ncpu hw.cpufrequency hw.byteorder hw.cpu64bit_capable >&2" + vv '|' "sysctl hw.cpufrequency hw.byteorder hw.cpu64bit_capable hw.ncpu >&2" ;; IRIX*) vv '|' "uname -a >&2" @@ -972,7 +1093,7 @@ drop us a success or failure notice or even send in diffs. $e "$bi$me: Building the MirBSD Korn Shell$ao $ui$dstversion$ao on $TARGET_OS ${TARGET_OSREV}..." # -# Begin of mirtoconf checks +# Start of mirtoconf checks # $e $bi$me: Scanning for functions... please ignore any errors.$ao @@ -985,7 +1106,7 @@ $e $bi$me: Scanning for functions... please ignore any errors.$ao # - LLVM+clang defines __GNUC__ too # - nwcc defines __GNUC__ too CPP="$CC -E" -$e ... which compiler seems to be used +$e ... which compiler type seems to be used cat >conftest.c <<'EOF' const char * #if defined(__ICC) || defined(__INTEL_COMPILER) @@ -1050,7 +1171,7 @@ ct="unknown" #endif ; const char * -#if defined(__KLIBC__) +#if defined(__KLIBC__) && !defined(__OS2__) et="klibc" #else et="unknown" @@ -1095,6 +1216,7 @@ clang) :*) ;; *:) CCC_LD=$CCC_CC; export CCC_LD ;; esac + : "${HAVE_STRING_POOLING=i1}" ;; dec) vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V" @@ -1111,6 +1233,7 @@ gcc) vv '|' 'echo `$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS \ -dumpmachine` gcc`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN \ $LIBS -dumpversion`' + : "${HAVE_STRING_POOLING=i2}" ;; hpcc) vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS" @@ -1183,7 +1306,7 @@ tcc) ;; tendra) vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V 2>&1 | \ - fgrep -i -e version -e release" + grep -F -i -e version -e release" ;; ucode) vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V" @@ -1194,7 +1317,7 @@ uslc) SCO_SV:3.2*) # SCO OpenServer 5 CFLAGS="$CFLAGS -g" - : ${HAVE_CAN_OTWO=0} ${HAVE_CAN_OPTIMISE=0} + : "${HAVE_CAN_OTWO=0}${HAVE_CAN_OPTIMISE=0}" ;; esac vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS" @@ -1220,20 +1343,21 @@ dragonegg|llvm) vv '|' "llc -version" ;; esac +etd=" on $et" case $et in klibc) add_cppflags -DMKSH_NO_LIMITS ;; unknown) # nothing special detected, don’t worry - unset et + etd= ;; *) # huh? ;; esac -$e "$bi==> which compiler seems to be used...$ao $ui$ct${et+ on $et}$ao" -rmf conftest.c conftest.o conftest a.out* a.exe* vv.out +$e "$bi==> which compiler type seems to be used...$ao $ui$ct$etd$ao" +rmf conftest.c conftest.o conftest a.out* a.exe* conftest.exe* vv.out # # Compiler: works as-is, with -Wno-error and -Werror @@ -1248,7 +1372,7 @@ test $ct = unknown || HAVE_COMPILER_KNOWN=1 if ac_ifcpp 'if 0' compiler_fails '' \ 'if the compiler does not fail correctly'; then save_CFLAGS=$CFLAGS - : ${HAVE_CAN_DELEXE=x} + : "${HAVE_CAN_DELEXE=x}" case $ct in dec) CFLAGS="$CFLAGS ${ccpl}-non_shared" @@ -1327,8 +1451,16 @@ watcom) DOWARN=-Wc,-we ;; xlc) - save_NOWARN=-qflag=i:e - DOWARN=-qflag=i:i + case $TARGET_OS in + OS/390) + save_NOWARN=-qflag=e + DOWARN=-qflag=i + ;; + *) + save_NOWARN=-qflag=i:e + DOWARN=-qflag=i:i + ;; + esac ;; *) test x"$save_NOWARN" = x"" && save_NOWARN=-Wno-error @@ -1447,6 +1579,7 @@ gcc) ac_flags $t_use $t_name "$t_cflags" \ "if gcc supports $t_cflags $t_ldflags" "$t_ldflags" done + ac_flags 1 data_abi_align -malign-data=abi i=1 ;; hpcc) @@ -1475,8 +1608,12 @@ msc) ac_flags 1 wp64 "${ccpc}/Wp64" 'to enable 64-bit warnings' ;; nwcc) - i=1 #broken# ac_flags 1 ssp -stackprotect + i=1 + ;; +pcc) + ac_flags 1 fstackprotectorall -fstack-protector-all + i=1 ;; sunpro) phase=u @@ -1493,10 +1630,24 @@ tendra) ac_flags 1 extansi -Xa ;; xlc) - ac_flags 1 rodata "-qro -qroconst -qroptr" - ac_flags 1 rtcheck -qcheck=all - #ac_flags 1 rtchkc -qextchk # reported broken - ac_flags 1 wformat "-qformat=all -qformat=nozln" + case $TARGET_OS in + OS/390) + # On IBM z/OS, the following are warnings by default: + # CCN3296: #include file not found. + # CCN3944: Attribute "__foo__" is not supported and is ignored. + # CCN3963: The attribute "foo" is not a valid variable attribute and is ignored. + ac_flags 1 halton '-qhaltonmsg=CCN3296 -qhaltonmsg=CCN3944 -qhaltonmsg=CCN3963' + # CCN3290: Unknown macro name FOO on #undef directive. + # CCN4108: The use of keyword '__attribute__' is non-portable. + ac_flags 1 supprss '-qsuppress=CCN3290 -qsuppress=CCN4108' + ;; + *) + ac_flags 1 rodata '-qro -qroconst -qroptr' + ac_flags 1 rtcheck -qcheck=all + #ac_flags 1 rtchkc -qextchk # reported broken + ac_flags 1 wformat '-qformat=all -qformat=nozln' + ;; + esac #ac_flags 1 wp64 -qwarn64 # too verbose for now ;; esac @@ -1506,6 +1657,16 @@ if test 1 = $i; then ac_flags 1 fwrapv -fwrapv fi +# “on demand” means: GCC version >= 4 +fd='if to rely on compiler for string pooling' +ac_cache string_pooling || case $HAVE_STRING_POOLING in +2) fx=' (on demand, cached)' ;; +i1) fv=1 ;; +i2) fv=2; fx=' (on demand)' ;; +esac +ac_testdone +test x"$HAVE_STRING_POOLING" = x"0" || ac_cppflags + phase=x # The following tests run with -Werror or similar (all compilers) if possible NOWARN=$DOWARN @@ -1610,10 +1771,9 @@ phase=x # if ac_ifcpp 'ifdef MKSH_SMALL' isset_MKSH_SMALL '' \ "if a reduced-feature mksh is requested"; then - : ${HAVE_NICE=0} - : ${HAVE_PERSISTENT_HISTORY=0} + : "${HAVE_NICE=0}" + : "${HAVE_PERSISTENT_HISTORY=0}" check_categories="$check_categories smksh" - HAVE_ISSET_MKSH_CONSERVATIVE_FDS=1 # from sh.h fi ac_ifcpp 'if defined(MKSH_BINSHPOSIX) || defined(MKSH_BINSHREDUCED)' \ isset_MKSH_BINSH '' 'if invoking as sh should be handled specially' && \ @@ -1625,10 +1785,11 @@ ac_ifcpp 'ifdef MKSH_NOPROSPECTOFWORK' isset_MKSH_NOPROSPECTOFWORK '' \ "if mksh will be built without job signals" && \ check_categories="$check_categories arge nojsig" ac_ifcpp 'ifdef MKSH_ASSUME_UTF8' isset_MKSH_ASSUME_UTF8 '' \ - 'if the default UTF-8 mode is specified' && : ${HAVE_SETLOCALE_CTYPE=0} -ac_ifcpp 'ifdef MKSH_CONSERVATIVE_FDS' isset_MKSH_CONSERVATIVE_FDS '' \ - 'if traditional/conservative fd use is requested' && \ - check_categories="$check_categories convfds" + 'if the default UTF-8 mode is specified' && : "${HAVE_SETLOCALE_CTYPE=0}" +ac_ifcpp 'if !MKSH_ASSUME_UTF8' isoff_MKSH_ASSUME_UTF8 \ + isset_MKSH_ASSUME_UTF8 0 \ + 'if the default UTF-8 mode is disabled' && \ + check_categories="$check_categories noutf8" #ac_ifcpp 'ifdef MKSH_DISABLE_DEPRECATED' isset_MKSH_DISABLE_DEPRECATED '' \ # "if deprecated features are to be omitted" && \ # check_categories="$check_categories nodeprecated" @@ -1662,6 +1823,7 @@ ac_header sys/select.h sys/types.h ac_header sys/sysmacros.h ac_header bstring.h ac_header grp.h sys/types.h +ac_header io.h ac_header libgen.h ac_header libutil.h sys/types.h ac_header paths.h @@ -1692,6 +1854,7 @@ if test 0 = $HAVE_CAN_LFS_SUS; then ac_testn can_lfs_aix '!' can_lfs 0 "... with -D_LARGE_FILES=1" #include - int main(int ac, char **av) { return ((uint32_t)(ptrdiff_t)*av + (int32_t)ac); } + int main(int ac, char **av) { return ((uint32_t)(size_t)*av + (int32_t)ac); } EOF ac_test can_ucbints '!' can_inttypes 1 "for UCB 32-bit integer types" <<-'EOF' #include #include - int main(int ac, char **av) { return ((u_int32_t)(ptrdiff_t)*av + (int32_t)ac); } + int main(int ac, char **av) { return ((u_int32_t)(size_t)*av + (int32_t)ac); } EOF ac_test can_int8type '!' stdint_h 1 "for standard 8-bit integer type" <<-'EOF' #include #include - int main(int ac, char **av) { return ((uint8_t)(ptrdiff_t)av[ac]); } + int main(int ac, char **av) { return ((uint8_t)(size_t)av[ac]); } EOF ac_test can_ucbint8 '!' can_int8type 1 "for UCB 8-bit integer type" <<-'EOF' #include #include - int main(int ac, char **av) { return ((u_int8_t)(ptrdiff_t)av[ac]); } + int main(int ac, char **av) { return ((u_int8_t)(size_t)av[ac]); } EOF ac_test rlim_t <<-'EOF' @@ -1780,12 +1943,12 @@ else HAVE_LINK_WORKS=x ac_testinit link_works '' 'checking if the final link command may succeed' fv=1 - cat >conftest.c <<-'EOF' + cat >conftest.c <<-EOF #define EXTERN #define MKSH_INCLUDES_ONLY #include "sh.h" - __RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.669 2014/10/07 15:22:12 tg Exp $"); - int main(void) { printf("Hello, World!\n"); return (isatty(0)); } + __RCSID("$srcversion"); + int main(void) { printf("Hello, World!\\n"); return (isatty(0)); } EOF case $cm in llvm) @@ -1904,11 +2067,6 @@ ac_test gettimeofday <<-'EOF' int main(void) { struct timeval tv; return (gettimeofday(&tv, NULL)); } EOF -ac_test issetugid <<-'EOF' - #include - int main(void) { return (issetugid()); } -EOF - ac_test killpg <<-'EOF' #include int main(int ac, char *av[]) { return (av[0][killpg(123, ac)]); } @@ -1952,6 +2110,11 @@ ac_test mmap lock_fcntl 0 'for mmap and munmap' <<-'EOF' munmap(NULL, 0)); } EOF +ac_test ftruncate mmap 0 'for ftruncate' <<-'EOF' + #include + int main(void) { return (ftruncate(0, 0)); } +EOF + ac_test nice <<-'EOF' #include int main(void) { return (nice(4)); } @@ -1969,13 +2132,13 @@ EOF ac_test setlocale_ctype '' 'setlocale(LC_CTYPE, "")' <<-'EOF' #include #include - int main(void) { return ((int)(ptrdiff_t)(void *)setlocale(LC_CTYPE, "")); } + int main(void) { return ((int)(size_t)(void *)setlocale(LC_CTYPE, "")); } EOF ac_test langinfo_codeset setlocale_ctype 0 'nl_langinfo(CODESET)' <<-'EOF' #include #include - int main(void) { return ((int)(ptrdiff_t)(void *)nl_langinfo(CODESET)); } + int main(void) { return ((int)(size_t)(void *)nl_langinfo(CODESET)); } EOF ac_test select <<-'EOF' @@ -2106,75 +2269,13 @@ EOF # other checks # fd='if to use persistent history' -ac_cache PERSISTENT_HISTORY || case $HAVE_MMAP$HAVE_FLOCK$HAVE_LOCK_FCNTL in -11*|101) fv=1 ;; +ac_cache PERSISTENT_HISTORY || case $HAVE_FTRUNCATE$HAVE_MMAP$HAVE_FLOCK$HAVE_LOCK_FCNTL in +111*|1101) fv=1 ;; esac test 1 = $fv || check_categories="$check_categories no-histfile" ac_testdone ac_cppflags -save_CFLAGS=$CFLAGS -ac_testn compile_time_asserts_$$ '' 'whether compile-time assertions pass' <<-'EOF' - #define MKSH_INCLUDES_ONLY - #include "sh.h" - #ifndef CHAR_BIT - #define CHAR_BIT 8 /* defuse this test on really legacy systems */ - #endif - struct ctasserts { - #define cta(name, assertion) char name[(assertion) ? 1 : -1] -/* this one should be defined by the standard */ -cta(char_is_1_char, (sizeof(char) == 1) && (sizeof(signed char) == 1) && - (sizeof(unsigned char) == 1)); -cta(char_is_8_bits, ((CHAR_BIT) == 8) && ((int)(unsigned char)0xFF == 0xFF) && - ((int)(unsigned char)0x100 == 0) && ((int)(unsigned char)(int)-1 == 0xFF)); -/* the next assertion is probably not really needed */ -cta(short_is_2_char, sizeof(short) == 2); -cta(short_size_no_matter_of_signedness, sizeof(short) == sizeof(unsigned short)); -/* the next assertion is probably not really needed */ -cta(int_is_4_char, sizeof(int) == 4); -cta(int_size_no_matter_of_signedness, sizeof(int) == sizeof(unsigned int)); - -cta(long_ge_int, sizeof(long) >= sizeof(int)); -cta(long_size_no_matter_of_signedness, sizeof(long) == sizeof(unsigned long)); - -#ifndef MKSH_LEGACY_MODE -/* the next assertion is probably not really needed */ -cta(ari_is_4_char, sizeof(mksh_ari_t) == 4); -/* but this is */ -cta(ari_has_31_bit, 0 < (mksh_ari_t)(((((mksh_ari_t)1 << 15) << 15) - 1) * 2 + 1)); -/* the next assertion is probably not really needed */ -cta(uari_is_4_char, sizeof(mksh_uari_t) == 4); -/* but the next three are; we REQUIRE unsigned integer wraparound */ -cta(uari_has_31_bit, 0 < (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 2 + 1)); -cta(uari_has_32_bit, 0 < (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 3)); -cta(uari_wrap_32_bit, - (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 3) > - (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 4)); -#define NUM 22 -#else -#define NUM 16 -#endif -/* these are always required */ -cta(ari_is_signed, (mksh_ari_t)-1 < (mksh_ari_t)0); -cta(uari_is_unsigned, (mksh_uari_t)-1 > (mksh_uari_t)0); -/* we require these to have the precisely same size and assume 2s complement */ -cta(ari_size_no_matter_of_signedness, sizeof(mksh_ari_t) == sizeof(mksh_uari_t)); - -cta(sizet_size_no_matter_of_signedness, sizeof(ssize_t) == sizeof(size_t)); -cta(ptrdifft_sizet_same_size, sizeof(ptrdiff_t) == sizeof(size_t)); -cta(ptrdifft_voidptr_same_size, sizeof(ptrdiff_t) == sizeof(void *)); -cta(ptrdifft_funcptr_same_size, sizeof(ptrdiff_t) == sizeof(void (*)(void))); -/* our formatting routines assume this */ -cta(ptr_fits_in_long, sizeof(ptrdiff_t) <= sizeof(long)); -/* for struct alignment people */ - char padding[64 - NUM]; - }; -char ctasserts_dblcheck[sizeof(struct ctasserts) == 64 ? 1 : -1]; - int main(void) { return (sizeof(ctasserts_dblcheck) + isatty(0)); } -EOF -CFLAGS=$save_CFLAGS -eval test 1 = \$HAVE_COMPILE_TIME_ASSERTS_$$ || exit 1 - # # extra checks for legacy mksh # @@ -2247,23 +2348,30 @@ if test 0 = $HAVE_SYS_SIGNAME; then sigseenone=: sigseentwo=: echo '#include -#ifndef NSIG -#if defined(_NSIG) -#define NSIG _NSIG +#if defined(NSIG_MAX) +#define cfg_NSIG NSIG_MAX +#elif defined(NSIG) +#define cfg_NSIG NSIG +#elif defined(_NSIG) +#define cfg_NSIG _NSIG #elif defined(SIGMAX) -#define NSIG (SIGMAX+1) +#define cfg_NSIG (SIGMAX + 1) #elif defined(_SIGMAX) -#define NSIG (_SIGMAX+1) +#define cfg_NSIG (_SIGMAX + 1) #else -/* XXX better error out, see sh.h */ -#define NSIG 64 -#endif +/*XXX better error out, see sh.h */ +#define cfg_NSIG 64 #endif int -mksh_cfg= NSIG +mksh_cfg= cfg_NSIG ;' >conftest.c # GNU sed 2.03 segfaults when optimising this to sed -n NSIG=`vq "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c" | \ + grep -v '^#' | \ + sed '/mksh_cfg.*= *$/{ + N + s/\n/ / + }' | \ grep '^ *mksh_cfg *=' | \ sed 's/^ *mksh_cfg *=[ ]*\([()0-9x+-][()0-9x+ -]*\).*$/\1/'` case $NSIG in @@ -2277,8 +2385,8 @@ mksh_cfg= NSIG $printf "NSIG=$NSIG ... " sigs="ABRT FPE ILL INT SEGV TERM ALRM BUS CHLD CONT HUP KILL PIPE QUIT" sigs="$sigs STOP TSTP TTIN TTOU USR1 USR2 POLL PROF SYS TRAP URG VTALRM" - sigs="$sigs XCPU XFSZ INFO WINCH EMT IO DIL LOST PWR SAK CLD IOT RESV" - sigs="$sigs STKFLT UNUSED" + sigs="$sigs XCPU XFSZ INFO WINCH EMT IO DIL LOST PWR SAK CLD IOT STKFLT" + sigs="$sigs ABND DCE DUMP IOERR TRACE DANGER THCONT THSTOP RESV UNUSED" test 1 = $HAVE_CPP_DD && test $NSIG -gt 1 && sigs="$sigs "`vq \ "$CPP $CFLAGS $CPPFLAGS $NOWARN -dD conftest.c" | \ grep '[ ]SIG[A-Z0-9][A-Z0-9]*[ ]' | \ @@ -2295,11 +2403,16 @@ mksh_cfg= NSIG echo ';' >>conftest.c # GNU sed 2.03 croaks on optimising this, too vq "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c" | \ + grep -v '^#' | \ + sed '/mksh_cfg.*= *$/{ + N + s/\n/ / + }' | \ grep '^ *mksh_cfg *=' | \ sed 's/^ *mksh_cfg *=[ ]*\([0-9][0-9x]*\).*$/:\1 '$name/ done | sed -n '/^:[^ ]/s/^://p' | while read nr name; do test $printf = echo || nr=`printf %d "$nr" 2>/dev/null` - test $nr -gt 0 && test $nr -le $NSIG || continue + test $nr -gt 0 && test $nr -lt $NSIG || continue case $sigseentwo in *:$nr:*) ;; *) echo " { \"$name\", $nr }," @@ -2316,7 +2429,7 @@ addsrcs '!' HAVE_STRLCPY strlcpy.c addsrcs USE_PRINTF_BUILTIN printf.c test 1 = "$USE_PRINTF_BUILTIN" && add_cppflags -DMKSH_PRINTF_BUILTIN test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose" -add_cppflags -DMKSH_BUILD_R=504 +add_cppflags -DMKSH_BUILD_R=571 $e $bi$me: Finished configuration testing, now producing output.$ao @@ -2324,8 +2437,13 @@ files= objs= sp= case $tcfn in -a.exe) mkshexe=$tfn.exe ;; -*) mkshexe=$tfn ;; +a.exe|conftest.exe) + mkshexe=$tfn.exe + add_cppflags -DMKSH_EXE_EXT + ;; +*) + mkshexe=$tfn + ;; esac case $curdir in *\ *) mkshshebang="#!./$mkshexe" ;; @@ -2338,8 +2456,8 @@ cat >test.sh <<-EOF set -A check_categories -- $check_categories pflag='$curdir/$mkshexe' sflag='$srcdir/check.t' - usee=0 Pflag=0 Sflag=0 uset=0 vflag=1 xflag=0 - while getopts "C:e:fPp:QSs:t:v" ch; do case \$ch { + usee=0 useU=0 Pflag=0 Sflag=0 uset=0 vflag=1 xflag=0 + while getopts "C:e:fPp:QSs:t:U:v" ch; do case \$ch { (C) check_categories[\${#check_categories[*]}]=\$OPTARG ;; (e) usee=1; eflag=\$OPTARG ;; (f) check_categories[\${#check_categories[*]}]=fastbox ;; @@ -2352,6 +2470,7 @@ cat >test.sh <<-EOF (+S) Sflag=0 ;; (s) sflag=\$OPTARG ;; (t) uset=1; tflag=\$OPTARG ;; + (U) useU=1; Uflag=\$OPTARG ;; (v) vflag=1 ;; (+v) vflag=0 ;; (*) xflag=1 ;; @@ -2359,6 +2478,9 @@ cat >test.sh <<-EOF done shift \$((OPTIND - 1)) set -A args -- '$srcdir/check.pl' -p "\$pflag" + if $ebcdic; then + args[\${#args[*]}]=-E + fi x= for y in "\${check_categories[@]}"; do x=\$x,\$y @@ -2376,6 +2498,10 @@ cat >test.sh <<-EOF args[\${#args[*]}]=-t args[\${#args[*]}]=\$tflag fi + if (( useU )); then + args[\${#args[*]}]=-U + args[\${#args[*]}]=\$Uflag + fi (( vflag )) && args[\${#args[*]}]=-v (( xflag )) && args[\${#args[*]}]=-x # force usage by synerr if [[ -n \$TMPDIR && -d \$TMPDIR/. ]]; then @@ -2383,7 +2509,7 @@ cat >test.sh <<-EOF args[\${#args[*]}]=\$TMPDIR fi print Testing mksh for conformance: - fgrep -e MirOS: -e MIRBSD "\$sflag" + grep -F -e Mir''OS: -e MIRBSD "\$sflag" print "This shell is actually:\\n\\t\$KSH_VERSION" print 'test.sh built for mksh $dstversion' cstr='\$os = defined \$^O ? \$^O : "unknown";' @@ -2431,9 +2557,12 @@ llvm) ;; esac echo ": # work around NeXTstep bug" >Rebuild.sh -for file in "$srcdir"/*.opt; do +cd "$srcdir" +optfiles=`echo *.opt` +cd "$curdir" +for file in $optfiles; do echo "echo + Running genopt on '$file'..." - echo "(srcfile='$file'; BUILDSH_RUN_GENOPT=1; . '$srcdir/Build.sh')" + echo "(srcfile='$srcdir/$file'; BUILDSH_RUN_GENOPT=1; . '$srcdir/Build.sh')" done >>Rebuild.sh echo set -x >>Rebuild.sh for file in $SRCS; do @@ -2464,14 +2593,14 @@ echo tcfn=$mkshexe >>Rebuild.sh echo "$CC $CFLAGS $LDFLAGS -o \$tcfn $lobjs $LIBS $ccpr" >>Rebuild.sh echo "test -f \$tcfn || exit 1; $SIZE \$tcfn" >>Rebuild.sh if test $cm = makefile; then - extras='emacsfn.h rlimits.opt sh.h sh_flags.opt var_spec.h' + extras='emacsfn.h exprtok.h rlimits.opt sh.h sh_flags.opt var_spec.h' test 0 = $HAVE_SYS_SIGNAME && extras="$extras signames.inc" gens= genq= - for file in "$srcdir"/*.opt; do + for file in $optfiles; do genf=`basename "$file" | sed 's/.opt$/.gen/'` gens="$gens $genf" - genq="$genq$nl$genf: $srcdir/Build.sh $file - srcfile=$file; BUILDSH_RUN_GENOPT=1; . $srcdir/Build.sh" + genq="$genq$nl$genf: $srcdir/Build.sh $srcdir/$file + srcfile=$srcdir/$file; BUILDSH_RUN_GENOPT=1; . $srcdir/Build.sh" done cat >Makefrag.inc <$tfn.cat1" || \ - rmf $tfn.cat1 +test 1 = $r || v "$NROFF -mdoc <'$srcdir/lksh.1' >lksh.cat1" || rmf lksh.cat1 +test 1 = $r || v "$NROFF -mdoc <'$srcdir/mksh.1' >mksh.cat1" || rmf mksh.cat1 test 0 = $eq && v $SIZE $tcfn i=install test -f /usr/ucb/$i && i=/usr/ucb/$i @@ -2569,12 +2698,14 @@ if test $legacy = 0; then fi $e $e Installing the manual: -if test -f $tfn.cat1; then - $e "# $i -c -o root -g bin -m 444 $tfn.cat1" \ - "/usr/share/man/cat1/$tfn.0" +if test -f mksh.cat1; then + $e "# $i -c -o root -g bin -m 444 lksh.cat1" \ + "/usr/share/man/cat1/lksh.0" + $e "# $i -c -o root -g bin -m 444 mksh.cat1" \ + "/usr/share/man/cat1/mksh.0" $e or fi -$e "# $i -c -o root -g bin -m 444 $tfn.1 /usr/share/man/man1/$tfn.1" +$e "# $i -c -o root -g bin -m 444 lksh.1 mksh.1 /usr/share/man/man1/" $e $e Run the regression test suite: ./test.sh $e Please also read the sample file dot.mkshrc and the fine manual. @@ -2614,9 +2745,7 @@ MKSH_A4PB force use of arc4random_pushb MKSH_ASSUME_UTF8 (0=disabled, 1=enabled; default: unset) MKSH_BINSHPOSIX if */sh or */-sh, enable set -o posix MKSH_BINSHREDUCED if */sh or */-sh, enable set -o sh -MKSH_CLRTOEOL_STRING "\033[K" -MKSH_CLS_STRING "\033[;H\033[J" -MKSH_CONSERVATIVE_FDS fd 0-9 for scripts, shell only up to 31 +MKSH_CLS_STRING KSH_ESC_STRING "[;H" KSH_ESC_STRING "[J" MKSH_DEFAULT_EXECSHELL "/bin/sh" (do not change) MKSH_DEFAULT_PROFILEDIR "/etc" (do not change) MKSH_DEFAULT_TMPDIR "/tmp" (do not change) @@ -2624,12 +2753,12 @@ MKSH_DISABLE_DEPRECATED disable code paths scheduled for later removal MKSH_DISABLE_EXPERIMENTAL disable code not yet comfy for (LTS) snapshots MKSH_DISABLE_TTY_WARNING shut up warning about ctty if OS cant be fixed MKSH_DONT_EMIT_IDSTRING omit RCS IDs from binary +MKSH_EARLY_LOCALE_TRACKING track utf8-mode from POSIX locale, for SuSE MKSH_MIDNIGHTBSD01ASH_COMPAT set -o sh: additional compatibility quirk MKSH_NOPROSPECTOFWORK disable jobs, co-processes, etc. (do not use) MKSH_NOPWNAM skip PAM calls, for -static on glibc or Solaris MKSH_NO_CMDLINE_EDITING disable command line editing code entirely MKSH_NO_DEPRECATED_WARNING omit warning when deprecated stuff is run -MKSH_NO_EXTERNAL_CAT omit hack to skip cat builtin when flags passed MKSH_NO_LIMITS omit ulimit code MKSH_NO_SIGSETJMP define if sigsetjmp is broken or not available MKSH_NO_SIGSUSPEND use sigprocmask+pause instead of sigsuspend @@ -2656,4 +2785,7 @@ using $NROFF. Consider using a forward script as /etc/skel/.mkshrc like http://anonscm.debian.org/cgit/collab-maint/mksh.git/plain/debian/.mkshrc and put dot.mkshrc as /etc/mkshrc so users need not keep up their HOME. +You may also want to install the lksh binary (also as /bin/sh) built by: +$ CPPFLAGS="$CPPFLAGS -DMKSH_BINSHPOSIX" sh Build.sh -L -r -c lto + EOD