1 #!/bin/sh 2 srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.734 2019/03/01 16:18:13 tg Exp $' 3 #- 4 # Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 5 # 2011, 2012, 2013, 2014, 2015, 2016, 2017 6 # mirabilos <m (at] mirbsd.org> 7 # 8 # Provided that these terms and disclaimer and all copyright notices 9 # are retained or reproduced in an accompanying document, permission 10 # is granted to deal in this work without restriction, including un- 11 # limited rights to use, publicly perform, distribute, sell, modify, 12 # merge, give away, or sublicence. 13 # 14 # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to 15 # the utmost extent permitted by applicable law, neither express nor 16 # implied; without malicious intent or gross negligence. In no event 17 # may a licensor, author or contributor be held liable for indirect, 18 # direct, other damage, loss, or other issues arising in any way out 19 # of dealing in the work, even if advised of the possibility of such 20 # damage or existence of a defect, except proven that it results out 21 # of said person's immediate fault when using the work as intended. 22 #- 23 # People analysing the output must whitelist conftest.c for any kind 24 # of compiler warning checks (mirtoconf is by design not quiet). 25 # 26 # Used environment documentation is at the end of this file. 27 28 LC_ALL=C 29 export LC_ALL 30 31 case $ZSH_VERSION:$VERSION in 32 :zsh*) ZSH_VERSION=2 ;; 33 esac 34 35 if test -n "${ZSH_VERSION+x}" && (emulate sh) >/dev/null 2>&1; then 36 emulate sh 37 NULLCMD=: 38 fi 39 40 if test -d /usr/xpg4/bin/. >/dev/null 2>&1; then 41 # Solaris: some of the tools have weird behaviour, use portable ones 42 PATH=/usr/xpg4/bin:$PATH 43 export PATH 44 fi 45 46 nl=' 47 ' 48 safeIFS=' ' 49 safeIFS=" $safeIFS$nl" 50 IFS=$safeIFS 51 allu=QWERTYUIOPASDFGHJKLZXCVBNM 52 alll=qwertyuiopasdfghjklzxcvbnm 53 alln=0123456789 54 alls=______________________________________________________________ 55 56 case `echo a | tr '\201' X` in 57 X) 58 # EBCDIC build system 59 lfcr='\n\r' 60 ;; 61 *) 62 lfcr='\012\015' 63 ;; 64 esac 65 66 genopt_die() { 67 if test -n "$1"; then 68 echo >&2 "E: $*" 69 echo >&2 "E: in '$srcfile': '$line'" 70 else 71 echo >&2 "E: invalid input in '$srcfile': '$line'" 72 fi 73 rm -f "$bn.gen" 74 exit 1 75 } 76 77 genopt_soptc() { 78 optc=`echo "$line" | sed 's/^[<>]\(.\).*$/\1/'` 79 test x"$optc" = x'|' && return 80 optclo=`echo "$optc" | tr $allu $alll` 81 if test x"$optc" = x"$optclo"; then 82 islo=1 83 else 84 islo=0 85 fi 86 sym=`echo "$line" | sed 's/^[<>]/|/'` 87 o_str=$o_str$nl"<$optclo$islo$sym" 88 } 89 90 genopt_scond() { 91 case x$cond in 92 x) 93 cond= 94 ;; 95 x*' '*) 96 cond=`echo "$cond" | sed 's/^ //'` 97 cond="#if $cond" 98 ;; 99 x'!'*) 100 cond=`echo "$cond" | sed 's/^!//'` 101 cond="#ifndef $cond" 102 ;; 103 x*) 104 cond="#ifdef $cond" 105 ;; 106 esac 107 } 108 109 do_genopt() { 110 srcfile=$1 111 test -f "$srcfile" || genopt_die Source file \$srcfile not set. 112 bn=`basename "$srcfile" | sed 's/.opt$//'` 113 o_hdr='/* +++ GENERATED FILE +++ DO NOT EDIT +++ */' 114 o_gen= 115 o_str= 116 o_sym= 117 ddefs= 118 state=0 119 exec <"$srcfile" 120 IFS= 121 while IFS= read line; do 122 IFS=$safeIFS 123 case $state:$line in 124 2:'|'*) 125 # end of input 126 o_sym=`echo "$line" | sed 's/^.//'` 127 o_gen=$o_gen$nl"#undef F0" 128 o_gen=$o_gen$nl"#undef FN" 129 o_gen=$o_gen$ddefs 130 state=3 131 ;; 132 1:@@) 133 # start of data block 134 o_gen=$o_gen$nl"#endif" 135 o_gen=$o_gen$nl"#ifndef F0" 136 o_gen=$o_gen$nl"#define F0 FN" 137 o_gen=$o_gen$nl"#endif" 138 state=2 139 ;; 140 *:@@*) 141 genopt_die ;; 142 0:/\*-|0:\ \**|0:) 143 o_hdr=$o_hdr$nl$line 144 ;; 145 0:@*|1:@*) 146 # start of a definition block 147 sym=`echo "$line" | sed 's/^@//'` 148 if test $state = 0; then 149 o_gen=$o_gen$nl"#if defined($sym)" 150 else 151 o_gen=$o_gen$nl"#elif defined($sym)" 152 fi 153 ddefs="$ddefs$nl#undef $sym" 154 state=1 155 ;; 156 0:*|3:*) 157 genopt_die ;; 158 1:*) 159 # definition line 160 o_gen=$o_gen$nl$line 161 ;; 162 2:'<'*'|'*) 163 genopt_soptc 164 ;; 165 2:'>'*'|'*) 166 genopt_soptc 167 cond=`echo "$line" | sed 's/^[^|]*|//'` 168 genopt_scond 169 case $optc in 170 '|') optc=0 ;; 171 *) optc=\'$optc\' ;; 172 esac 173 IFS= read line || genopt_die Unexpected EOF 174 IFS=$safeIFS 175 test -n "$cond" && o_gen=$o_gen$nl"$cond" 176 o_gen=$o_gen$nl"$line, $optc)" 177 test -n "$cond" && o_gen=$o_gen$nl"#endif" 178 ;; 179 esac 180 done 181 case $state:$o_sym in 182 3:) genopt_die Expected optc sym at EOF ;; 183 3:*) ;; 184 *) genopt_die Missing EOF marker ;; 185 esac 186 echo "$o_str" | sort | while IFS='|' read x opts cond; do 187 IFS=$safeIFS 188 test -n "$x" || continue 189 genopt_scond 190 test -n "$cond" && echo "$cond" 191 echo "\"$opts\"" 192 test -n "$cond" && echo "#endif" 193 done | { 194 echo "$o_hdr" 195 echo "#ifndef $o_sym$o_gen" 196 echo "#else" 197 cat 198 echo "#undef $o_sym" 199 echo "#endif" 200 } >"$bn.gen" 201 IFS=$safeIFS 202 return 0 203 } 204 205 if test x"$BUILDSH_RUN_GENOPT" = x"1"; then 206 set x -G "$srcfile" 207 shift 208 fi 209 if test x"$1" = x"-G"; then 210 do_genopt "$2" 211 exit $? 212 fi 213 214 echo "For the build logs, demonstrate that /dev/null and /dev/tty exist:" 215 ls -l /dev/null /dev/tty 216 217 v() { 218 $e "$*" 219 eval "$@" 220 } 221 222 vv() { 223 _c=$1 224 shift 225 $e "\$ $*" 2>&1 226 eval "$@" >vv.out 2>&1 227 sed "s^${_c} " <vv.out 228 } 229 230 vq() { 231 eval "$@" 232 } 233 234 rmf() { 235 for _f in "$@"; do 236 case $_f in 237 Build.sh|check.pl|check.t|dot.mkshrc|*.1|*.c|*.h|*.ico|*.opt) ;; 238 *) rm -f "$_f" ;; 239 esac 240 done 241 } 242 243 tcfn=no 244 bi= 245 ui= 246 ao= 247 fx= 248 me=`basename "$0"` 249 orig_CFLAGS=$CFLAGS 250 phase=x 251 oldish_ed=stdout-ed,no-stderr-ed 252 253 if test -t 1; then 254 bi='[1m' 255 ui='[4m' 256 ao='[0m' 257 fi 258 259 upper() { 260 echo :"$@" | sed 's/^://' | tr $alll $allu 261 } 262 263 # clean up after ac_testrun() 264 ac_testdone() { 265 eval HAVE_$fu=$fv 266 fr=no 267 test 0 = $fv || fr=yes 268 $e "$bi==> $fd...$ao $ui$fr$ao$fx" 269 fx= 270 } 271 272 # ac_cache label: sets f, fu, fv?=0 273 ac_cache() { 274 f=$1 275 fu=`upper $f` 276 eval fv=\$HAVE_$fu 277 case $fv in 278 0|1) 279 fx=' (cached)' 280 return 0 281 ;; 282 esac 283 fv=0 284 return 1 285 } 286 287 # ac_testinit label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput 288 # returns 1 if value was cached/implied, 0 otherwise: call ac_testdone 289 ac_testinit() { 290 if ac_cache $1; then 291 test x"$2" = x"!" && shift 292 test x"$2" = x"" || shift 293 fd=${3-$f} 294 ac_testdone 295 return 1 296 fi 297 fc=0 298 if test x"$2" = x""; then 299 ft=1 300 else 301 if test x"$2" = x"!"; then 302 fc=1 303 shift 304 fi 305 eval ft=\$HAVE_`upper $2` 306 shift 307 fi 308 fd=${3-$f} 309 if test $fc = "$ft"; then 310 fv=$2 311 fx=' (implied)' 312 ac_testdone 313 return 1 314 fi 315 $e ... $fd 316 return 0 317 } 318 319 # pipe .c | ac_test[n] [!] label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput 320 ac_testnnd() { 321 if test x"$1" = x"!"; then 322 fr=1 323 shift 324 else 325 fr=0 326 fi 327 ac_testinit "$@" || return 1 328 cat >conftest.c 329 vv ']' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN conftest.c $LIBS $ccpr" 330 test $tcfn = no && test -f a.out && tcfn=a.out 331 test $tcfn = no && test -f a.exe && tcfn=a.exe 332 test $tcfn = no && test -f conftest.exe && tcfn=conftest.exe 333 test $tcfn = no && test -f conftest && tcfn=conftest 334 if test -f $tcfn; then 335 test 1 = $fr || fv=1 336 else 337 test 0 = $fr || fv=1 338 fi 339 vscan= 340 if test $phase = u; then 341 test $ct = gcc && vscan='unrecogni[sz]ed' 342 test $ct = hpcc && vscan='unsupported' 343 test $ct = pcc && vscan='unsupported' 344 test $ct = sunpro && vscan='-e ignored -e turned.off' 345 fi 346 test -n "$vscan" && grep $vscan vv.out >/dev/null 2>&1 && fv=$fr 347 return 0 348 } 349 ac_testn() { 350 ac_testnnd "$@" || return 351 rmf conftest.c conftest.o ${tcfn}* vv.out 352 ac_testdone 353 } 354 355 # ac_ifcpp cppexpr [!] label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput 356 ac_ifcpp() { 357 expr=$1; shift 358 ac_testn "$@" <<-EOF 359 #include <unistd.h> 360 extern int thiswillneverbedefinedIhope(void); 361 int main(void) { return (isatty(0) + 362 #$expr 363 0 364 #else 365 /* force a failure: expr is false */ 366 thiswillneverbedefinedIhope() 367 #endif 368 ); } 369 EOF 370 test x"$1" = x"!" && shift 371 f=$1 372 fu=`upper $f` 373 eval fv=\$HAVE_$fu 374 test x"$fv" = x"1" 375 } 376 377 add_cppflags() { 378 CPPFLAGS="$CPPFLAGS $*" 379 } 380 381 ac_cppflags() { 382 test x"$1" = x"" || fu=$1 383 fv=$2 384 test x"$2" = x"" && eval fv=\$HAVE_$fu 385 add_cppflags -DHAVE_$fu=$fv 386 } 387 388 ac_test() { 389 ac_testn "$@" 390 ac_cppflags 391 } 392 393 # ac_flags [-] add varname cflags [text] [ldflags] 394 ac_flags() { 395 if test x"$1" = x"-"; then 396 shift 397 hf=1 398 else 399 hf=0 400 fi 401 fa=$1 402 vn=$2 403 f=$3 404 ft=$4 405 fl=$5 406 test x"$ft" = x"" && ft="if $f can be used" 407 save_CFLAGS=$CFLAGS 408 CFLAGS="$CFLAGS $f" 409 if test -n "$fl"; then 410 save_LDFLAGS=$LDFLAGS 411 LDFLAGS="$LDFLAGS $fl" 412 fi 413 if test 1 = $hf; then 414 ac_testn can_$vn '' "$ft" 415 else 416 ac_testn can_$vn '' "$ft" <<-'EOF' 417 /* evil apo'stroph in comment test */ 418 #include <unistd.h> 419 int main(void) { return (isatty(0)); } 420 EOF 421 #' 422 fi 423 eval fv=\$HAVE_CAN_`upper $vn` 424 if test -n "$fl"; then 425 test 11 = $fa$fv || LDFLAGS=$save_LDFLAGS 426 fi 427 test 11 = $fa$fv || CFLAGS=$save_CFLAGS 428 } 429 430 # ac_header [!] header [prereq ...] 431 ac_header() { 432 if test x"$1" = x"!"; then 433 na=1 434 shift 435 else 436 na=0 437 fi 438 hf=$1; shift 439 hv=`echo "$hf" | tr -d "$lfcr" | tr -c $alll$allu$alln $alls` 440 echo "/* NeXTstep bug workaround */" >x 441 for i 442 do 443 case $i in 444 _time) 445 echo '#if HAVE_BOTH_TIME_H' >>x 446 echo '#include <sys/time.h>' >>x 447 echo '#include <time.h>' >>x 448 echo '#elif HAVE_SYS_TIME_H' >>x 449 echo '#include <sys/time.h>' >>x 450 echo '#elif HAVE_TIME_H' >>x 451 echo '#include <time.h>' >>x 452 echo '#endif' >>x 453 ;; 454 *) 455 echo "#include <$i>" >>x 456 ;; 457 esac 458 done 459 echo "#include <$hf>" >>x 460 echo '#include <unistd.h>' >>x 461 echo 'int main(void) { return (isatty(0)); }' >>x 462 ac_testn "$hv" "" "<$hf>" <x 463 rmf x 464 test 1 = $na || ac_cppflags 465 } 466 467 addsrcs() { 468 if test x"$1" = x"!"; then 469 fr=0 470 shift 471 else 472 fr=1 473 fi 474 eval i=\$$1 475 test $fr = "$i" && case " $SRCS " in 476 *\ $2\ *) ;; 477 *) SRCS="$SRCS $2" ;; 478 esac 479 } 480 481 482 curdir=`pwd` srcdir=`dirname "$0" 2>/dev/null` 483 case x$srcdir in 484 x) 485 srcdir=. 486 ;; 487 *\ *|*" "*|*"$nl"*) 488 echo >&2 Source directory should not contain space or tab or newline. 489 echo >&2 Errors may occur. 490 ;; 491 *"'"*) 492 echo Source directory must not contain single quotes. 493 exit 1 494 ;; 495 esac 496 dstversion=`sed -n '/define MKSH_VERSION/s/^.*"\([^"]*\)".*$/\1/p' "$srcdir/sh.h"` 497 add_cppflags -DMKSH_BUILDSH 498 499 e=echo 500 r=0 501 eq=0 502 pm=0 503 cm=normal 504 optflags=-std-compile-opts 505 check_categories= 506 last= 507 tfn= 508 legacy=0 509 textmode=0 510 ebcdic=false 511 512 for i 513 do 514 case $last:$i in 515 c:combine|c:dragonegg|c:llvm|c:lto) 516 cm=$i 517 last= 518 ;; 519 c:*) 520 echo "$me: Unknown option -c '$i'!" >&2 521 exit 1 522 ;; 523 o:*) 524 optflags=$i 525 last= 526 ;; 527 t:*) 528 tfn=$i 529 last= 530 ;; 531 :-c) 532 last=c 533 ;; 534 :-E) 535 ebcdic=true 536 ;; 537 :-G) 538 echo "$me: Do not call me with '-G'!" >&2 539 exit 1 540 ;; 541 :-g) 542 # checker, debug, valgrind build 543 add_cppflags -DDEBUG 544 CFLAGS="$CFLAGS -g3 -fno-builtin" 545 ;; 546 :-j) 547 pm=1 548 ;; 549 :-L) 550 legacy=1 551 ;; 552 :+L) 553 legacy=0 554 ;; 555 :-M) 556 cm=makefile 557 ;; 558 :-O) 559 optflags=-std-compile-opts 560 ;; 561 :-o) 562 last=o 563 ;; 564 :-Q) 565 eq=1 566 ;; 567 :-r) 568 r=1 569 ;; 570 :-T) 571 textmode=1 572 ;; 573 :+T) 574 textmode=0 575 ;; 576 :-t) 577 last=t 578 ;; 579 :-v) 580 echo "Build.sh $srcversion" 581 echo "for mksh $dstversion" 582 exit 0 583 ;; 584 :*) 585 echo "$me: Unknown option '$i'!" >&2 586 exit 1 587 ;; 588 *) 589 echo "$me: Unknown option -'$last' '$i'!" >&2 590 exit 1 591 ;; 592 esac 593 done 594 if test -n "$last"; then 595 echo "$me: Option -'$last' not followed by argument!" >&2 596 exit 1 597 fi 598 599 test -z "$tfn" && if test $legacy = 0; then 600 tfn=mksh 601 else 602 tfn=lksh 603 fi 604 if test -d $tfn || test -d $tfn.exe; then 605 echo "$me: Error: ./$tfn is a directory!" >&2 606 exit 1 607 fi 608 rmf a.exe* a.out* conftest.c conftest.exe* *core core.* ${tfn}* *.bc *.dbg \ 609 *.ll *.o *.gen *.cat1 Rebuild.sh lft no signames.inc test.sh x vv.out 610 611 SRCS="lalloc.c edit.c eval.c exec.c expr.c funcs.c histrap.c jobs.c" 612 SRCS="$SRCS lex.c main.c misc.c shf.c syn.c tree.c var.c" 613 614 if test $legacy = 0; then 615 check_categories="$check_categories shell:legacy-no int:32" 616 else 617 check_categories="$check_categories shell:legacy-yes" 618 add_cppflags -DMKSH_LEGACY_MODE 619 fi 620 621 if $ebcdic; then 622 add_cppflags -DMKSH_EBCDIC 623 fi 624 625 if test $textmode = 0; then 626 check_categories="$check_categories shell:textmode-no shell:binmode-yes" 627 else 628 check_categories="$check_categories shell:textmode-yes shell:binmode-no" 629 add_cppflags -DMKSH_WITH_TEXTMODE 630 fi 631 632 if test x"$srcdir" = x"."; then 633 CPPFLAGS="-I. $CPPFLAGS" 634 else 635 CPPFLAGS="-I. -I'$srcdir' $CPPFLAGS" 636 fi 637 test -n "$LDSTATIC" && if test -n "$LDFLAGS"; then 638 LDFLAGS="$LDFLAGS $LDSTATIC" 639 else 640 LDFLAGS=$LDSTATIC 641 fi 642 643 if test -z "$TARGET_OS"; then 644 x=`uname -s 2>/dev/null || uname` 645 test x"$x" = x"`uname -n 2>/dev/null`" || TARGET_OS=$x 646 fi 647 if test -z "$TARGET_OS"; then 648 echo "$me: Set TARGET_OS, your uname is broken!" >&2 649 exit 1 650 fi 651 oswarn= 652 ccpc=-Wc, 653 ccpl=-Wl, 654 tsts= 655 ccpr='|| for _f in ${tcfn}*; do case $_f in Build.sh|check.pl|check.t|dot.mkshrc|*.1|*.c|*.h|*.ico|*.opt) ;; *) rm -f "$_f" ;; esac; done' 656 657 # Evil hack 658 if test x"$TARGET_OS" = x"Android"; then 659 check_categories="$check_categories android" 660 TARGET_OS=Linux 661 fi 662 663 # Evil OS 664 if test x"$TARGET_OS" = x"Minix"; then 665 echo >&2 " 666 WARNING: additional checks before running Build.sh required! 667 You can avoid these by calling Build.sh correctly, see below. 668 " 669 cat >conftest.c <<'EOF' 670 #include <sys/types.h> 671 const char * 672 #ifdef _NETBSD_SOURCE 673 ct="Ninix3" 674 #else 675 ct="Minix3" 676 #endif 677 ; 678 EOF 679 ct=unknown 680 vv ']' "${CC-cc} -E $CFLAGS $CPPFLAGS $NOWARN conftest.c | grep ct= | tr -d \\\\015 >x" 681 sed 's/^/[ /' x 682 eval `cat x` 683 rmf x vv.out 684 case $ct in 685 Minix3|Ninix3) 686 echo >&2 " 687 Warning: you set TARGET_OS to $TARGET_OS but that is ambiguous. 688 Please set it to either Minix3 or Ninix3, whereas the latter is 689 all versions of Minix with even partial NetBSD(R) userland. The 690 value determined from your compiler for the current compilation 691 (which may be wrong) is: $ct 692 " 693 TARGET_OS=$ct 694 ;; 695 *) 696 echo >&2 " 697 Warning: you set TARGET_OS to $TARGET_OS but that is ambiguous. 698 Please set it to either Minix3 or Ninix3, whereas the latter is 699 all versions of Minix with even partial NetBSD(R) userland. The 700 proper value couldn't be determined, continue at your own risk. 701 " 702 ;; 703 esac 704 fi 705 706 # Configuration depending on OS revision, on OSes that need them 707 case $TARGET_OS in 708 NEXTSTEP) 709 test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`hostinfo 2>&1 | \ 710 grep 'NeXT Mach [0-9][0-9.]*:' | \ 711 sed 's/^.*NeXT Mach \([0-9][0-9.]*\):.*$/\1/'` 712 ;; 713 QNX|SCO_SV) 714 test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r` 715 ;; 716 esac 717 718 # Configuration depending on OS name 719 case $TARGET_OS in 720 386BSD) 721 : "${HAVE_CAN_OTWO=0}" 722 add_cppflags -DMKSH_NO_SIGSETJMP 723 add_cppflags -DMKSH_TYPEDEF_SIG_ATOMIC_T=int 724 ;; 725 AIX) 726 add_cppflags -D_ALL_SOURCE 727 : "${HAVE_SETLOCALE_CTYPE=0}" 728 ;; 729 BeOS) 730 case $KSH_VERSION in 731 *MIRBSD\ KSH*) 732 oswarn="; it has minor issues" 733 ;; 734 *) 735 oswarn="; you must recompile mksh with" 736 oswarn="$oswarn${nl}itself in a second stage" 737 ;; 738 esac 739 # BeOS has no real tty either 740 add_cppflags -DMKSH_UNEMPLOYED 741 add_cppflags -DMKSH_DISABLE_TTY_WARNING 742 # BeOS doesn't have different UIDs and GIDs 743 add_cppflags -DMKSH__NO_SETEUGID 744 ;; 745 BSD/OS) 746 : "${HAVE_SETLOCALE_CTYPE=0}" 747 ;; 748 Coherent) 749 oswarn="; it has major issues" 750 add_cppflags -DMKSH__NO_SYMLINK 751 check_categories="$check_categories nosymlink" 752 add_cppflags -DMKSH__NO_SETEUGID 753 add_cppflags -DMKSH_DISABLE_TTY_WARNING 754 ;; 755 CYGWIN*) 756 : "${HAVE_SETLOCALE_CTYPE=0}" 757 ;; 758 Darwin) 759 add_cppflags -D_DARWIN_C_SOURCE 760 ;; 761 DragonFly) 762 ;; 763 FreeBSD) 764 ;; 765 FreeMiNT) 766 oswarn="; it has minor issues" 767 add_cppflags -D_GNU_SOURCE 768 : "${HAVE_SETLOCALE_CTYPE=0}" 769 ;; 770 GNU) 771 case $CC in 772 *tendracc*) ;; 773 *) add_cppflags -D_GNU_SOURCE ;; 774 esac 775 add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN 776 # define MKSH__NO_PATH_MAX to use Hurd-only functions 777 add_cppflags -DMKSH__NO_PATH_MAX 778 ;; 779 GNU/kFreeBSD) 780 case $CC in 781 *tendracc*) ;; 782 *) add_cppflags -D_GNU_SOURCE ;; 783 esac 784 add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN 785 ;; 786 Haiku) 787 add_cppflags -DMKSH_ASSUME_UTF8 788 HAVE_ISSET_MKSH_ASSUME_UTF8=1 789 HAVE_ISOFF_MKSH_ASSUME_UTF8=0 790 ;; 791 Harvey) 792 add_cppflags -D_POSIX_SOURCE 793 add_cppflags -D_LIMITS_EXTENSION 794 add_cppflags -D_BSD_EXTENSION 795 add_cppflags -D_SUSV2_SOURCE 796 add_cppflags -D_GNU_SOURCE 797 add_cppflags -DMKSH_ASSUME_UTF8 798 HAVE_ISSET_MKSH_ASSUME_UTF8=1 799 HAVE_ISOFF_MKSH_ASSUME_UTF8=0 800 add_cppflags -DMKSH__NO_SYMLINK 801 check_categories="$check_categories nosymlink" 802 add_cppflags -DMKSH_NO_CMDLINE_EDITING 803 add_cppflags -DMKSH__NO_SETEUGID 804 oswarn=' and will currently not work' 805 add_cppflags -DMKSH_UNEMPLOYED 806 add_cppflags -DMKSH_NOPROSPECTOFWORK 807 # these taken from Harvey-OS github and need re-checking 808 add_cppflags -D_setjmp=setjmp -D_longjmp=longjmp 809 : "${HAVE_CAN_NO_EH_FRAME=0}" 810 : "${HAVE_CAN_FNOSTRICTALIASING=0}" 811 : "${HAVE_CAN_FSTACKPROTECTORSTRONG=0}" 812 ;; 813 HP-UX) 814 ;; 815 Interix) 816 ccpc='-X ' 817 ccpl='-Y ' 818 add_cppflags -D_ALL_SOURCE 819 : "${LIBS=-lcrypt}" 820 : "${HAVE_SETLOCALE_CTYPE=0}" 821 ;; 822 IRIX*) 823 : "${HAVE_SETLOCALE_CTYPE=0}" 824 ;; 825 Jehanne) 826 add_cppflags -DMKSH_ASSUME_UTF8 827 HAVE_ISSET_MKSH_ASSUME_UTF8=1 828 HAVE_ISOFF_MKSH_ASSUME_UTF8=0 829 add_cppflags -DMKSH__NO_SYMLINK 830 check_categories="$check_categories nosymlink" 831 add_cppflags -DMKSH_NO_CMDLINE_EDITING 832 add_cppflags -DMKSH_DISABLE_REVOKE_WARNING 833 add_cppflags '-D_PATH_DEFPATH=\"/cmd\"' 834 add_cppflags '-DMKSH_DEFAULT_EXECSHELL=\"/cmd/mksh\"' 835 add_cppflags '-DMKSH_DEFAULT_PROFILEDIR=\"/cfg/mksh\"' 836 add_cppflags '-DMKSH_ENVDIR=\"/env\"' 837 SRCS="$SRCS jehanne.c" 838 ;; 839 Linux) 840 case $CC in 841 *tendracc*) ;; 842 *) add_cppflags -D_GNU_SOURCE ;; 843 esac 844 add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN 845 : "${HAVE_REVOKE=0}" 846 ;; 847 LynxOS) 848 oswarn="; it has minor issues" 849 ;; 850 MidnightBSD) 851 ;; 852 Minix-vmd) 853 add_cppflags -DMKSH__NO_SETEUGID 854 add_cppflags -DMKSH_UNEMPLOYED 855 add_cppflags -D_MINIX_SOURCE 856 oldish_ed=no-stderr-ed # no /bin/ed, maybe see below 857 : "${HAVE_SETLOCALE_CTYPE=0}" 858 ;; 859 Minix3) 860 add_cppflags -DMKSH_UNEMPLOYED 861 add_cppflags -DMKSH_NO_LIMITS 862 add_cppflags -D_POSIX_SOURCE -D_POSIX_1_SOURCE=2 -D_MINIX 863 oldish_ed=no-stderr-ed # /usr/bin/ed(!) is broken 864 : "${HAVE_SETLOCALE_CTYPE=0}" 865 ;; 866 MirBSD) 867 ;; 868 MSYS_*) 869 add_cppflags -DMKSH_ASSUME_UTF8=0 870 HAVE_ISSET_MKSH_ASSUME_UTF8=1 871 HAVE_ISOFF_MKSH_ASSUME_UTF8=1 872 # almost same as CYGWIN* (from RT|Chatzilla) 873 : "${HAVE_SETLOCALE_CTYPE=0}" 874 # broken on this OE (from ir0nh34d) 875 : "${HAVE_STDINT_H=0}" 876 ;; 877 NetBSD) 878 ;; 879 NEXTSTEP) 880 add_cppflags -D_NEXT_SOURCE 881 add_cppflags -D_POSIX_SOURCE 882 : "${AWK=gawk}" 883 : "${CC=cc -posix}" 884 add_cppflags -DMKSH_NO_SIGSETJMP 885 # NeXTstep cannot get a controlling tty 886 add_cppflags -DMKSH_UNEMPLOYED 887 case $TARGET_OSREV in 888 4.2*) 889 # OpenStep 4.2 is broken by default 890 oswarn="; it needs libposix.a" 891 ;; 892 esac 893 ;; 894 Ninix3) 895 # similar to Minix3 896 add_cppflags -DMKSH_UNEMPLOYED 897 add_cppflags -DMKSH_NO_LIMITS 898 # but no idea what else could be needed 899 oswarn="; it has unknown issues" 900 ;; 901 OpenBSD) 902 : "${HAVE_SETLOCALE_CTYPE=0}" 903 ;; 904 OS/2) 905 add_cppflags -DMKSH_ASSUME_UTF8=0 906 HAVE_ISSET_MKSH_ASSUME_UTF8=1 907 HAVE_ISOFF_MKSH_ASSUME_UTF8=1 908 HAVE_TERMIOS_H=0 909 HAVE_MKNOD=0 # setmode() incompatible 910 oswarn="; it is being ported" 911 check_categories="$check_categories nosymlink" 912 : "${CC=gcc}" 913 : "${SIZE=: size}" 914 SRCS="$SRCS os2.c" 915 add_cppflags -DMKSH_UNEMPLOYED 916 add_cppflags -DMKSH_NOPROSPECTOFWORK 917 add_cppflags -DMKSH_NO_LIMITS 918 add_cppflags -DMKSH_DOSPATH 919 if test $textmode = 0; then 920 x='dis' 921 y='standard OS/2 tools' 922 else 923 x='en' 924 y='standard Unix mksh and other tools' 925 fi 926 echo >&2 " 927 OS/2 Note: mksh can be built with or without 'textmode'. 928 Without 'textmode' it will behave like a standard Unix utility, 929 compatible to mksh on all other platforms, using only ASCII LF 930 (0x0A) as line ending character. This is supported by the mksh 931 upstream developer. 932 With 'textmode', mksh will be modified to behave more like other 933 OS/2 utilities, supporting ASCII CR+LF (0x0D 0x0A) as line ending 934 at the cost of deviation from standard mksh. This is supported by 935 the mksh-os2 porter. 936 937 ] You are currently compiling with textmode ${x}abled, introducing 938 ] incompatibilities with $y. 939 " 940 ;; 941 OS/390) 942 add_cppflags -DMKSH_ASSUME_UTF8=0 943 HAVE_ISSET_MKSH_ASSUME_UTF8=1 944 HAVE_ISOFF_MKSH_ASSUME_UTF8=1 945 : "${CC=xlc}" 946 : "${SIZE=: size}" 947 add_cppflags -DMKSH_FOR_Z_OS 948 add_cppflags -D_ALL_SOURCE 949 oswarn='; EBCDIC support is incomplete' 950 ;; 951 OSF1) 952 HAVE_SIG_T=0 # incompatible 953 add_cppflags -D_OSF_SOURCE 954 add_cppflags -D_POSIX_C_SOURCE=200112L 955 add_cppflags -D_XOPEN_SOURCE=600 956 add_cppflags -D_XOPEN_SOURCE_EXTENDED 957 : "${HAVE_SETLOCALE_CTYPE=0}" 958 ;; 959 Plan9) 960 add_cppflags -D_POSIX_SOURCE 961 add_cppflags -D_LIMITS_EXTENSION 962 add_cppflags -D_BSD_EXTENSION 963 add_cppflags -D_SUSV2_SOURCE 964 add_cppflags -DMKSH_ASSUME_UTF8 965 HAVE_ISSET_MKSH_ASSUME_UTF8=1 966 HAVE_ISOFF_MKSH_ASSUME_UTF8=0 967 add_cppflags -DMKSH__NO_SYMLINK 968 check_categories="$check_categories nosymlink" 969 add_cppflags -DMKSH_NO_CMDLINE_EDITING 970 add_cppflags -DMKSH__NO_SETEUGID 971 oswarn=' and will currently not work' 972 add_cppflags -DMKSH_UNEMPLOYED 973 # this is for detecting kencc 974 add_cppflags -DMKSH_MAYBE_KENCC 975 ;; 976 PW32*) 977 HAVE_SIG_T=0 # incompatible 978 oswarn=' and will currently not work' 979 : "${HAVE_SETLOCALE_CTYPE=0}" 980 ;; 981 QNX) 982 add_cppflags -D__NO_EXT_QNX 983 add_cppflags -D__EXT_UNIX_MISC 984 case $TARGET_OSREV in 985 [012345].*|6.[0123].*|6.4.[01]) 986 oldish_ed=no-stderr-ed # oldish /bin/ed is broken 987 ;; 988 esac 989 : "${HAVE_SETLOCALE_CTYPE=0}" 990 ;; 991 SCO_SV) 992 case $TARGET_OSREV in 993 3.2*) 994 # SCO OpenServer 5 995 add_cppflags -DMKSH_UNEMPLOYED 996 ;; 997 5*) 998 # SCO OpenServer 6 999 ;; 1000 *) 1001 oswarn='; this is an unknown version of' 1002 oswarn="$oswarn$nl$TARGET_OS ${TARGET_OSREV}, please tell me what to do" 1003 ;; 1004 esac 1005 : "${HAVE_SYS_SIGLIST=0}${HAVE__SYS_SIGLIST=0}" 1006 ;; 1007 skyos) 1008 oswarn="; it has minor issues" 1009 ;; 1010 SunOS) 1011 add_cppflags -D_BSD_SOURCE 1012 add_cppflags -D__EXTENSIONS__ 1013 ;; 1014 syllable) 1015 add_cppflags -D_GNU_SOURCE 1016 add_cppflags -DMKSH_NO_SIGSUSPEND 1017 oswarn=' and will currently not work' 1018 ;; 1019 ULTRIX) 1020 : "${CC=cc -YPOSIX}" 1021 add_cppflags -DMKSH_TYPEDEF_SSIZE_T=int 1022 : "${HAVE_SETLOCALE_CTYPE=0}" 1023 ;; 1024 UnixWare|UNIX_SV) 1025 # SCO UnixWare 1026 : "${HAVE_SYS_SIGLIST=0}${HAVE__SYS_SIGLIST=0}" 1027 ;; 1028 UWIN*) 1029 ccpc='-Yc,' 1030 ccpl='-Yl,' 1031 tsts=" 3<>/dev/tty" 1032 oswarn="; it will compile, but the target" 1033 oswarn="$oswarn${nl}platform itself is very flakey/unreliable" 1034 : "${HAVE_SETLOCALE_CTYPE=0}" 1035 ;; 1036 _svr4) 1037 # generic target for SVR4 Unix with uname -s = uname -n 1038 # this duplicates the * target below 1039 oswarn='; it may or may not work' 1040 test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r` 1041 ;; 1042 *) 1043 oswarn='; it may or may not work' 1044 test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r` 1045 ;; 1046 esac 1047 1048 : "${HAVE_MKNOD=0}" 1049 1050 : "${AWK=awk}${CC=cc}${NROFF=nroff}${SIZE=size}" 1051 test 0 = $r && echo | $NROFF -v 2>&1 | grep GNU >/dev/null 2>&1 && \ 1052 echo | $NROFF -c >/dev/null 2>&1 && NROFF="$NROFF -c" 1053 1054 # this aids me in tracing FTBFSen without access to the buildd 1055 $e "Hi from$ao $bi$srcversion$ao on:" 1056 case $TARGET_OS in 1057 AIX) 1058 vv '|' "oslevel >&2" 1059 vv '|' "uname -a >&2" 1060 ;; 1061 Darwin) 1062 vv '|' "hwprefs machine_type os_type os_class >&2" 1063 vv '|' "sw_vers >&2" 1064 vv '|' "system_profiler -detailLevel mini SPSoftwareDataType SPHardwareDataType >&2" 1065 vv '|' "/bin/sh --version >&2" 1066 vv '|' "xcodebuild -version >&2" 1067 vv '|' "uname -a >&2" 1068 vv '|' "sysctl kern.version hw.machine hw.model hw.memsize hw.availcpu hw.ncpu hw.cpufrequency hw.byteorder hw.cpu64bit_capable >&2" 1069 vv '|' "sysctl hw.cpufrequency hw.byteorder hw.cpu64bit_capable hw.ncpu >&2" 1070 ;; 1071 IRIX*) 1072 vv '|' "uname -a >&2" 1073 vv '|' "hinv -v >&2" 1074 ;; 1075 OSF1) 1076 vv '|' "uname -a >&2" 1077 vv '|' "/usr/sbin/sizer -v >&2" 1078 ;; 1079 SCO_SV|UnixWare|UNIX_SV) 1080 vv '|' "uname -a >&2" 1081 vv '|' "uname -X >&2" 1082 ;; 1083 *) 1084 vv '|' "uname -a >&2" 1085 ;; 1086 esac 1087 test -z "$oswarn" || echo >&2 " 1088 Warning: mksh has not yet been ported to or tested on your 1089 operating system '$TARGET_OS'$oswarn. If you can provide 1090 a shell account to the developer, this may improve; please 1091 drop us a success or failure notice or even send in diffs. 1092 " 1093 $e "$bi$me: Building the MirBSD Korn Shell$ao $ui$dstversion$ao on $TARGET_OS ${TARGET_OSREV}..." 1094 1095 # 1096 # Start of mirtoconf checks 1097 # 1098 $e $bi$me: Scanning for functions... please ignore any errors.$ao 1099 1100 # 1101 # Compiler: which one? 1102 # 1103 # notes: 1104 # - ICC defines __GNUC__ too 1105 # - GCC defines __hpux too 1106 # - LLVM+clang defines __GNUC__ too 1107 # - nwcc defines __GNUC__ too 1108 CPP="$CC -E" 1109 $e ... which compiler type seems to be used 1110 cat >conftest.c <<'EOF' 1111 const char * 1112 #if defined(__ICC) || defined(__INTEL_COMPILER) 1113 ct="icc" 1114 #elif defined(__xlC__) || defined(__IBMC__) 1115 ct="xlc" 1116 #elif defined(__SUNPRO_C) 1117 ct="sunpro" 1118 #elif defined(__ACK__) 1119 ct="ack" 1120 #elif defined(__BORLANDC__) 1121 ct="bcc" 1122 #elif defined(__WATCOMC__) 1123 ct="watcom" 1124 #elif defined(__MWERKS__) 1125 ct="metrowerks" 1126 #elif defined(__HP_cc) 1127 ct="hpcc" 1128 #elif defined(__DECC) || (defined(__osf__) && !defined(__GNUC__)) 1129 ct="dec" 1130 #elif defined(__PGI) 1131 ct="pgi" 1132 #elif defined(__DMC__) 1133 ct="dmc" 1134 #elif defined(_MSC_VER) 1135 ct="msc" 1136 #elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) 1137 ct="adsp" 1138 #elif defined(__IAR_SYSTEMS_ICC__) 1139 ct="iar" 1140 #elif defined(SDCC) 1141 ct="sdcc" 1142 #elif defined(__PCC__) 1143 ct="pcc" 1144 #elif defined(__TenDRA__) 1145 ct="tendra" 1146 #elif defined(__TINYC__) 1147 ct="tcc" 1148 #elif defined(__llvm__) && defined(__clang__) 1149 ct="clang" 1150 #elif defined(__NWCC__) 1151 ct="nwcc" 1152 #elif defined(__GNUC__) 1153 ct="gcc" 1154 #elif defined(_COMPILER_VERSION) 1155 ct="mipspro" 1156 #elif defined(__sgi) 1157 ct="mipspro" 1158 #elif defined(__hpux) || defined(__hpua) 1159 ct="hpcc" 1160 #elif defined(__ultrix) 1161 ct="ucode" 1162 #elif defined(__USLC__) 1163 ct="uslc" 1164 #elif defined(__LCC__) 1165 ct="lcc" 1166 #elif defined(MKSH_MAYBE_KENCC) 1167 /* and none of the above matches */ 1168 ct="kencc" 1169 #else 1170 ct="unknown" 1171 #endif 1172 ; 1173 const char * 1174 #if defined(__KLIBC__) && !defined(__OS2__) 1175 et="klibc" 1176 #else 1177 et="unknown" 1178 #endif 1179 ; 1180 EOF 1181 ct=untested 1182 et=untested 1183 vv ']' "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c | \ 1184 sed -n '/^ *[ce]t *= */s/^ *\([ce]t\) *= */\1=/p' | tr -d \\\\015 >x" 1185 sed 's/^/[ /' x 1186 eval `cat x` 1187 rmf x vv.out 1188 cat >conftest.c <<'EOF' 1189 #include <unistd.h> 1190 int main(void) { return (isatty(0)); } 1191 EOF 1192 case $ct in 1193 ack) 1194 # work around "the famous ACK const bug" 1195 CPPFLAGS="-Dconst= $CPPFLAGS" 1196 ;; 1197 adsp) 1198 echo >&2 'Warning: Analog Devices C++ compiler for Blackfin, TigerSHARC 1199 and SHARC (21000) DSPs detected. This compiler has not yet 1200 been tested for compatibility with mksh. Continue at your 1201 own risk, please report success/failure to the developers.' 1202 ;; 1203 bcc) 1204 echo >&2 "Warning: Borland C++ Builder detected. This compiler might 1205 produce broken executables. Continue at your own risk, 1206 please report success/failure to the developers." 1207 ;; 1208 clang) 1209 # does not work with current "ccc" compiler driver 1210 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version" 1211 # one of these two works, for now 1212 vv '|' "${CLANG-clang} -version" 1213 vv '|' "${CLANG-clang} --version" 1214 # ensure compiler and linker are in sync unless overridden 1215 case $CCC_CC:$CCC_LD in 1216 :*) ;; 1217 *:) CCC_LD=$CCC_CC; export CCC_LD ;; 1218 esac 1219 : "${HAVE_STRING_POOLING=i1}" 1220 ;; 1221 dec) 1222 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V" 1223 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS" 1224 ;; 1225 dmc) 1226 echo >&2 "Warning: Digital Mars Compiler detected. When running under" 1227 echo >&2 " UWIN, mksh tends to be unstable due to the limitations" 1228 echo >&2 " of this platform. Continue at your own risk," 1229 echo >&2 " please report success/failure to the developers." 1230 ;; 1231 gcc) 1232 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS" 1233 vv '|' 'echo `$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS \ 1234 -dumpmachine` gcc`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN \ 1235 $LIBS -dumpversion`' 1236 : "${HAVE_STRING_POOLING=i2}" 1237 ;; 1238 hpcc) 1239 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS" 1240 ;; 1241 iar) 1242 echo >&2 'Warning: IAR Systems (http://www.iar.com) compiler for embedded 1243 systems detected. This unsupported compiler has not yet 1244 been tested for compatibility with mksh. Continue at your 1245 own risk, please report success/failure to the developers.' 1246 ;; 1247 icc) 1248 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V" 1249 ;; 1250 kencc) 1251 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS" 1252 ;; 1253 lcc) 1254 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS" 1255 add_cppflags -D__inline__=__inline 1256 ;; 1257 metrowerks) 1258 echo >&2 'Warning: Metrowerks C compiler detected. This has not yet 1259 been tested for compatibility with mksh. Continue at your 1260 own risk, please report success/failure to the developers.' 1261 ;; 1262 mipspro) 1263 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version" 1264 ;; 1265 msc) 1266 ccpr= # errorlevels are not reliable 1267 case $TARGET_OS in 1268 Interix) 1269 if [[ -n $C89_COMPILER ]]; then 1270 C89_COMPILER=`ntpath2posix -c "$C89_COMPILER"` 1271 else 1272 C89_COMPILER=CL.EXE 1273 fi 1274 if [[ -n $C89_LINKER ]]; then 1275 C89_LINKER=`ntpath2posix -c "$C89_LINKER"` 1276 else 1277 C89_LINKER=LINK.EXE 1278 fi 1279 vv '|' "$C89_COMPILER /HELP >&2" 1280 vv '|' "$C89_LINKER /LINK >&2" 1281 ;; 1282 esac 1283 ;; 1284 nwcc) 1285 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version" 1286 ;; 1287 pcc) 1288 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v" 1289 ;; 1290 pgi) 1291 echo >&2 'Warning: PGI detected. This unknown compiler has not yet 1292 been tested for compatibility with mksh. Continue at your 1293 own risk, please report success/failure to the developers.' 1294 ;; 1295 sdcc) 1296 echo >&2 'Warning: sdcc (http://sdcc.sourceforge.net), the small devices 1297 C compiler for embedded systems detected. This has not yet 1298 been tested for compatibility with mksh. Continue at your 1299 own risk, please report success/failure to the developers.' 1300 ;; 1301 sunpro) 1302 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS" 1303 ;; 1304 tcc) 1305 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v" 1306 ;; 1307 tendra) 1308 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V 2>&1 | \ 1309 grep -F -i -e version -e release" 1310 ;; 1311 ucode) 1312 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V" 1313 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS" 1314 ;; 1315 uslc) 1316 case $TARGET_OS:$TARGET_OSREV in 1317 SCO_SV:3.2*) 1318 # SCO OpenServer 5 1319 CFLAGS="$CFLAGS -g" 1320 : "${HAVE_CAN_OTWO=0}${HAVE_CAN_OPTIMISE=0}" 1321 ;; 1322 esac 1323 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS" 1324 ;; 1325 watcom) 1326 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS" 1327 ;; 1328 xlc) 1329 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion" 1330 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion=verbose" 1331 vv '|' "ld -V" 1332 ;; 1333 *) 1334 test x"$ct" = x"untested" && $e "!!! detecting preprocessor failed" 1335 ct=unknown 1336 vv "$CC --version" 1337 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS" 1338 vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS" 1339 ;; 1340 esac 1341 case $cm in 1342 dragonegg|llvm) 1343 vv '|' "llc -version" 1344 ;; 1345 esac 1346 etd=" on $et" 1347 case $et in 1348 klibc) 1349 add_cppflags -DMKSH_NO_LIMITS 1350 ;; 1351 unknown) 1352 # nothing special detected, dont worry 1353 etd= 1354 ;; 1355 *) 1356 # huh? 1357 ;; 1358 esac 1359 $e "$bi==> which compiler type seems to be used...$ao $ui$ct$etd$ao" 1360 rmf conftest.c conftest.o conftest a.out* a.exe* conftest.exe* vv.out 1361 1362 # 1363 # Compiler: works as-is, with -Wno-error and -Werror 1364 # 1365 save_NOWARN=$NOWARN 1366 NOWARN= 1367 DOWARN= 1368 ac_flags 0 compiler_works '' 'if the compiler works' 1369 test 1 = $HAVE_CAN_COMPILER_WORKS || exit 1 1370 HAVE_COMPILER_KNOWN=0 1371 test $ct = unknown || HAVE_COMPILER_KNOWN=1 1372 if ac_ifcpp 'if 0' compiler_fails '' \ 1373 'if the compiler does not fail correctly'; then 1374 save_CFLAGS=$CFLAGS 1375 : "${HAVE_CAN_DELEXE=x}" 1376 case $ct in 1377 dec) 1378 CFLAGS="$CFLAGS ${ccpl}-non_shared" 1379 ac_testn can_delexe compiler_fails 0 'for the -non_shared linker option' <<-EOF 1380 #include <unistd.h> 1381 int main(void) { return (isatty(0)); } 1382 EOF 1383 ;; 1384 dmc) 1385 CFLAGS="$CFLAGS ${ccpl}/DELEXECUTABLE" 1386 ac_testn can_delexe compiler_fails 0 'for the /DELEXECUTABLE linker option' <<-EOF 1387 #include <unistd.h> 1388 int main(void) { return (isatty(0)); } 1389 EOF 1390 ;; 1391 *) 1392 exit 1 1393 ;; 1394 esac 1395 test 1 = $HAVE_CAN_DELEXE || CFLAGS=$save_CFLAGS 1396 ac_testn compiler_still_fails '' 'if the compiler still does not fail correctly' <<-EOF 1397 EOF 1398 test 1 = $HAVE_COMPILER_STILL_FAILS && exit 1 1399 fi 1400 if ac_ifcpp 'ifdef __TINYC__' couldbe_tcc '!' compiler_known 0 \ 1401 'if this could be tcc'; then 1402 ct=tcc 1403 CPP='cpp -D__TINYC__' 1404 HAVE_COMPILER_KNOWN=1 1405 fi 1406 1407 case $ct in 1408 bcc) 1409 save_NOWARN="${ccpc}-w" 1410 DOWARN="${ccpc}-w!" 1411 ;; 1412 dec) 1413 # -msg_* flags not used yet, or is -w2 correct? 1414 ;; 1415 dmc) 1416 save_NOWARN="${ccpc}-w" 1417 DOWARN="${ccpc}-wx" 1418 ;; 1419 hpcc) 1420 save_NOWARN= 1421 DOWARN=+We 1422 ;; 1423 kencc) 1424 save_NOWARN= 1425 DOWARN= 1426 ;; 1427 mipspro) 1428 save_NOWARN= 1429 DOWARN="-diag_error 1-10000" 1430 ;; 1431 msc) 1432 save_NOWARN="${ccpc}/w" 1433 DOWARN="${ccpc}/WX" 1434 ;; 1435 sunpro) 1436 test x"$save_NOWARN" = x"" && save_NOWARN='-errwarn=%none' 1437 ac_flags 0 errwarnnone "$save_NOWARN" 1438 test 1 = $HAVE_CAN_ERRWARNNONE || save_NOWARN= 1439 ac_flags 0 errwarnall "-errwarn=%all" 1440 test 1 = $HAVE_CAN_ERRWARNALL && DOWARN="-errwarn=%all" 1441 ;; 1442 tendra) 1443 save_NOWARN=-w 1444 ;; 1445 ucode) 1446 save_NOWARN= 1447 DOWARN=-w2 1448 ;; 1449 watcom) 1450 save_NOWARN= 1451 DOWARN=-Wc,-we 1452 ;; 1453 xlc) 1454 case $TARGET_OS in 1455 OS/390) 1456 save_NOWARN=-qflag=e 1457 DOWARN=-qflag=i 1458 ;; 1459 *) 1460 save_NOWARN=-qflag=i:e 1461 DOWARN=-qflag=i:i 1462 ;; 1463 esac 1464 ;; 1465 *) 1466 test x"$save_NOWARN" = x"" && save_NOWARN=-Wno-error 1467 ac_flags 0 wnoerror "$save_NOWARN" 1468 test 1 = $HAVE_CAN_WNOERROR || save_NOWARN= 1469 ac_flags 0 werror -Werror 1470 test 1 = $HAVE_CAN_WERROR && DOWARN=-Werror 1471 test $ct = icc && DOWARN="$DOWARN -wd1419" 1472 ;; 1473 esac 1474 NOWARN=$save_NOWARN 1475 1476 # 1477 # Compiler: extra flags (-O2 -f* -W* etc.) 1478 # 1479 i=`echo :"$orig_CFLAGS" | sed 's/^://' | tr -c -d $alll$allu$alln` 1480 # optimisation: only if orig_CFLAGS is empty 1481 test x"$i" = x"" && case $ct in 1482 hpcc) 1483 phase=u 1484 ac_flags 1 otwo +O2 1485 phase=x 1486 ;; 1487 kencc|tcc|tendra) 1488 # no special optimisation 1489 ;; 1490 sunpro) 1491 cat >x <<-'EOF' 1492 #include <unistd.h> 1493 int main(void) { return (isatty(0)); } 1494 #define __IDSTRING_CONCAT(l,p) __LINTED__ ## l ## _ ## p 1495 #define __IDSTRING_EXPAND(l,p) __IDSTRING_CONCAT(l,p) 1496 #define pad void __IDSTRING_EXPAND(__LINE__,x)(void) { } 1497 EOF 1498 yes pad | head -n 256 >>x 1499 ac_flags - 1 otwo -xO2 <x 1500 rmf x 1501 ;; 1502 xlc) 1503 ac_flags 1 othree "-O3 -qstrict" 1504 test 1 = $HAVE_CAN_OTHREE || ac_flags 1 otwo -O2 1505 ;; 1506 *) 1507 ac_flags 1 otwo -O2 1508 test 1 = $HAVE_CAN_OTWO || ac_flags 1 optimise -O 1509 ;; 1510 esac 1511 # other flags: just add them if they are supported 1512 i=0 1513 case $ct in 1514 bcc) 1515 ac_flags 1 strpool "${ccpc}-d" 'if string pooling can be enabled' 1516 ;; 1517 clang) 1518 i=1 1519 ;; 1520 dec) 1521 ac_flags 0 verb -verbose 1522 ac_flags 1 rodata -readonly_strings 1523 ;; 1524 dmc) 1525 ac_flags 1 decl "${ccpc}-r" 'for strict prototype checks' 1526 ac_flags 1 schk "${ccpc}-s" 'for stack overflow checking' 1527 ;; 1528 gcc) 1529 # The following tests run with -Werror (gcc only) if possible 1530 NOWARN=$DOWARN; phase=u 1531 ac_flags 1 wnodeprecateddecls -Wno-deprecated-declarations 1532 # mksh is not written in CFrustFrust! 1533 ac_flags 1 no_eh_frame -fno-asynchronous-unwind-tables 1534 ac_flags 1 fnostrictaliasing -fno-strict-aliasing 1535 ac_flags 1 fstackprotectorstrong -fstack-protector-strong 1536 test 1 = $HAVE_CAN_FSTACKPROTECTORSTRONG || \ 1537 ac_flags 1 fstackprotectorall -fstack-protector-all 1538 test $cm = dragonegg && case " $CC $CFLAGS $LDFLAGS " in 1539 *\ -fplugin=*dragonegg*) ;; 1540 *) ac_flags 1 fplugin_dragonegg -fplugin=dragonegg ;; 1541 esac 1542 case $cm in 1543 combine) 1544 fv=0 1545 checks='7 8' 1546 ;; 1547 lto) 1548 fv=0 1549 checks='1 2 3 4 5 6 7 8' 1550 ;; 1551 *) 1552 fv=1 1553 ;; 1554 esac 1555 test $fv = 1 || for what in $checks; do 1556 test $fv = 1 && break 1557 case $what in 1558 1) t_cflags='-flto=jobserver' 1559 t_ldflags='-fuse-linker-plugin' 1560 t_use=1 t_name=fltojs_lp ;; 1561 2) t_cflags='-flto=jobserver' t_ldflags='' 1562 t_use=1 t_name=fltojs_nn ;; 1563 3) t_cflags='-flto=jobserver' 1564 t_ldflags='-fno-use-linker-plugin -fwhole-program' 1565 t_use=1 t_name=fltojs_np ;; 1566 4) t_cflags='-flto' 1567 t_ldflags='-fuse-linker-plugin' 1568 t_use=1 t_name=fltons_lp ;; 1569 5) t_cflags='-flto' t_ldflags='' 1570 t_use=1 t_name=fltons_nn ;; 1571 6) t_cflags='-flto' 1572 t_ldflags='-fno-use-linker-plugin -fwhole-program' 1573 t_use=1 t_name=fltons_np ;; 1574 7) t_cflags='-fwhole-program --combine' t_ldflags='' 1575 t_use=0 t_name=combine cm=combine ;; 1576 8) fv=1 cm=normal ;; 1577 esac 1578 test $fv = 1 && break 1579 ac_flags $t_use $t_name "$t_cflags" \ 1580 "if gcc supports $t_cflags $t_ldflags" "$t_ldflags" 1581 done 1582 ac_flags 1 data_abi_align -malign-data=abi 1583 i=1 1584 ;; 1585 hpcc) 1586 phase=u 1587 # probably not needed 1588 #ac_flags 1 agcc -Agcc 'for support of GCC extensions' 1589 phase=x 1590 ;; 1591 icc) 1592 ac_flags 1 fnobuiltinsetmode -fno-builtin-setmode 1593 ac_flags 1 fnostrictaliasing -fno-strict-aliasing 1594 ac_flags 1 fstacksecuritycheck -fstack-security-check 1595 i=1 1596 ;; 1597 mipspro) 1598 ac_flags 1 fullwarn -fullwarn 'for remark output support' 1599 ;; 1600 msc) 1601 ac_flags 1 strpool "${ccpc}/GF" 'if string pooling can be enabled' 1602 echo 'int main(void) { char test[64] = ""; return (*test); }' >x 1603 ac_flags - 1 stackon "${ccpc}/GZ" 'if stack checks can be enabled' <x 1604 ac_flags - 1 stckall "${ccpc}/Ge" 'stack checks for all functions' <x 1605 ac_flags - 1 secuchk "${ccpc}/GS" 'for compiler security checks' <x 1606 rmf x 1607 ac_flags 1 wall "${ccpc}/Wall" 'to enable all warnings' 1608 ac_flags 1 wp64 "${ccpc}/Wp64" 'to enable 64-bit warnings' 1609 ;; 1610 nwcc) 1611 #broken# ac_flags 1 ssp -stackprotect 1612 i=1 1613 ;; 1614 pcc) 1615 ac_flags 1 fstackprotectorall -fstack-protector-all 1616 i=1 1617 ;; 1618 sunpro) 1619 phase=u 1620 ac_flags 1 v -v 1621 ac_flags 1 ipo -xipo 'for cross-module optimisation' 1622 phase=x 1623 ;; 1624 tcc) 1625 : #broken# ac_flags 1 boundschk -b 1626 ;; 1627 tendra) 1628 ac_flags 0 ysystem -Ysystem 1629 test 1 = $HAVE_CAN_YSYSTEM && CPPFLAGS="-Ysystem $CPPFLAGS" 1630 ac_flags 1 extansi -Xa 1631 ;; 1632 xlc) 1633 case $TARGET_OS in 1634 OS/390) 1635 # On IBM z/OS, the following are warnings by default: 1636 # CCN3296: #include file <foo.h> not found. 1637 # CCN3944: Attribute "__foo__" is not supported and is ignored. 1638 # CCN3963: The attribute "foo" is not a valid variable attribute and is ignored. 1639 ac_flags 1 halton '-qhaltonmsg=CCN3296 -qhaltonmsg=CCN3944 -qhaltonmsg=CCN3963' 1640 # CCN3290: Unknown macro name FOO on #undef directive. 1641 # CCN4108: The use of keyword '__attribute__' is non-portable. 1642 ac_flags 1 supprss '-qsuppress=CCN3290 -qsuppress=CCN4108' 1643 ;; 1644 *) 1645 ac_flags 1 rodata '-qro -qroconst -qroptr' 1646 ac_flags 1 rtcheck -qcheck=all 1647 #ac_flags 1 rtchkc -qextchk # reported broken 1648 ac_flags 1 wformat '-qformat=all -qformat=nozln' 1649 ;; 1650 esac 1651 #ac_flags 1 wp64 -qwarn64 # too verbose for now 1652 ;; 1653 esac 1654 # flags common to a subset of compilers (run with -Werror on gcc) 1655 if test 1 = $i; then 1656 ac_flags 1 wall -Wall 1657 ac_flags 1 fwrapv -fwrapv 1658 fi 1659 1660 # on demand means: GCC version >= 4 1661 fd='if to rely on compiler for string pooling' 1662 ac_cache string_pooling || case $HAVE_STRING_POOLING in 1663 2) fx=' (on demand, cached)' ;; 1664 i1) fv=1 ;; 1665 i2) fv=2; fx=' (on demand)' ;; 1666 esac 1667 ac_testdone 1668 test x"$HAVE_STRING_POOLING" = x"0" || ac_cppflags 1669 1670 phase=x 1671 # The following tests run with -Werror or similar (all compilers) if possible 1672 NOWARN=$DOWARN 1673 test $ct = pcc && phase=u 1674 1675 # 1676 # Compiler: check for stuff that only generates warnings 1677 # 1678 ac_test attribute_bounded '' 'for __attribute__((__bounded__))' <<-'EOF' 1679 #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2)) 1680 extern int thiswillneverbedefinedIhope(void); 1681 /* force a failure: TenDRA and gcc 1.42 have false positive here */ 1682 int main(void) { return (thiswillneverbedefinedIhope()); } 1683 #else 1684 #include <string.h> 1685 #undef __attribute__ 1686 int xcopy(const void *, void *, size_t) 1687 __attribute__((__bounded__(__buffer__, 1, 3))) 1688 __attribute__((__bounded__(__buffer__, 2, 3))); 1689 int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); } 1690 int xcopy(const void *s, void *d, size_t n) { 1691 /* 1692 * if memmove does not exist, we are not on a system 1693 * with GCC with __bounded__ attribute either so poo 1694 */ 1695 memmove(d, s, n); return ((int)n); 1696 } 1697 #endif 1698 EOF 1699 ac_test attribute_format '' 'for __attribute__((__format__))' <<-'EOF' 1700 #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2)) 1701 extern int thiswillneverbedefinedIhope(void); 1702 /* force a failure: TenDRA and gcc 1.42 have false positive here */ 1703 int main(void) { return (thiswillneverbedefinedIhope()); } 1704 #else 1705 #define fprintf printfoo 1706 #include <stdio.h> 1707 #undef __attribute__ 1708 #undef fprintf 1709 extern int fprintf(FILE *, const char *format, ...) 1710 __attribute__((__format__(__printf__, 2, 3))); 1711 int main(int ac, char **av) { return (fprintf(stderr, "%s%d", *av, ac)); } 1712 #endif 1713 EOF 1714 ac_test attribute_noreturn '' 'for __attribute__((__noreturn__))' <<-'EOF' 1715 #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2)) 1716 extern int thiswillneverbedefinedIhope(void); 1717 /* force a failure: TenDRA and gcc 1.42 have false positive here */ 1718 int main(void) { return (thiswillneverbedefinedIhope()); } 1719 #else 1720 #include <stdlib.h> 1721 #undef __attribute__ 1722 void fnord(void) __attribute__((__noreturn__)); 1723 int main(void) { fnord(); } 1724 void fnord(void) { exit(0); } 1725 #endif 1726 EOF 1727 ac_test attribute_pure '' 'for __attribute__((__pure__))' <<-'EOF' 1728 #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2)) 1729 extern int thiswillneverbedefinedIhope(void); 1730 /* force a failure: TenDRA and gcc 1.42 have false positive here */ 1731 int main(void) { return (thiswillneverbedefinedIhope()); } 1732 #else 1733 #include <unistd.h> 1734 #undef __attribute__ 1735 int foo(const char *) __attribute__((__pure__)); 1736 int main(int ac, char **av) { return (foo(av[ac - 1]) + isatty(0)); } 1737 int foo(const char *s) { return ((int)s[0]); } 1738 #endif 1739 EOF 1740 ac_test attribute_unused '' 'for __attribute__((__unused__))' <<-'EOF' 1741 #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2)) 1742 extern int thiswillneverbedefinedIhope(void); 1743 /* force a failure: TenDRA and gcc 1.42 have false positive here */ 1744 int main(void) { return (thiswillneverbedefinedIhope()); } 1745 #else 1746 #include <unistd.h> 1747 #undef __attribute__ 1748 int main(int ac __attribute__((__unused__)), char **av 1749 __attribute__((__unused__))) { return (isatty(0)); } 1750 #endif 1751 EOF 1752 ac_test attribute_used '' 'for __attribute__((__used__))' <<-'EOF' 1753 #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2)) 1754 extern int thiswillneverbedefinedIhope(void); 1755 /* force a failure: TenDRA and gcc 1.42 have false positive here */ 1756 int main(void) { return (thiswillneverbedefinedIhope()); } 1757 #else 1758 #include <unistd.h> 1759 #undef __attribute__ 1760 static const char fnord[] __attribute__((__used__)) = "42"; 1761 int main(void) { return (isatty(0)); } 1762 #endif 1763 EOF 1764 1765 # End of tests run with -Werror 1766 NOWARN=$save_NOWARN 1767 phase=x 1768 1769 # 1770 # mksh: flavours (full/small mksh, omit certain stuff) 1771 # 1772 if ac_ifcpp 'ifdef MKSH_SMALL' isset_MKSH_SMALL '' \ 1773 "if a reduced-feature mksh is requested"; then 1774 : "${HAVE_NICE=0}" 1775 : "${HAVE_PERSISTENT_HISTORY=0}" 1776 check_categories="$check_categories smksh" 1777 fi 1778 ac_ifcpp 'if defined(MKSH_BINSHPOSIX) || defined(MKSH_BINSHREDUCED)' \ 1779 isset_MKSH_BINSH '' 'if invoking as sh should be handled specially' && \ 1780 check_categories="$check_categories binsh" 1781 ac_ifcpp 'ifdef MKSH_UNEMPLOYED' isset_MKSH_UNEMPLOYED '' \ 1782 "if mksh will be built without job control" && \ 1783 check_categories="$check_categories arge" 1784 ac_ifcpp 'ifdef MKSH_NOPROSPECTOFWORK' isset_MKSH_NOPROSPECTOFWORK '' \ 1785 "if mksh will be built without job signals" && \ 1786 check_categories="$check_categories arge nojsig" 1787 ac_ifcpp 'ifdef MKSH_ASSUME_UTF8' isset_MKSH_ASSUME_UTF8 '' \ 1788 'if the default UTF-8 mode is specified' && : "${HAVE_SETLOCALE_CTYPE=0}" 1789 ac_ifcpp 'if !MKSH_ASSUME_UTF8' isoff_MKSH_ASSUME_UTF8 \ 1790 isset_MKSH_ASSUME_UTF8 0 \ 1791 'if the default UTF-8 mode is disabled' && \ 1792 check_categories="$check_categories noutf8" 1793 #ac_ifcpp 'ifdef MKSH_DISABLE_DEPRECATED' isset_MKSH_DISABLE_DEPRECATED '' \ 1794 # "if deprecated features are to be omitted" && \ 1795 # check_categories="$check_categories nodeprecated" 1796 #ac_ifcpp 'ifdef MKSH_DISABLE_EXPERIMENTAL' isset_MKSH_DISABLE_EXPERIMENTAL '' \ 1797 # "if experimental features are to be omitted" && \ 1798 # check_categories="$check_categories noexperimental" 1799 ac_ifcpp 'ifdef MKSH_MIDNIGHTBSD01ASH_COMPAT' isset_MKSH_MIDNIGHTBSD01ASH_COMPAT '' \ 1800 'if the MidnightBSD 0.1 ash compatibility mode is requested' && \ 1801 check_categories="$check_categories mnbsdash" 1802 1803 # 1804 # Environment: headers 1805 # 1806 ac_header sys/time.h sys/types.h 1807 ac_header time.h sys/types.h 1808 test "11" = "$HAVE_SYS_TIME_H$HAVE_TIME_H" || HAVE_BOTH_TIME_H=0 1809 ac_test both_time_h '' 'whether <sys/time.h> and <time.h> can both be included' <<-'EOF' 1810 #include <sys/types.h> 1811 #include <sys/time.h> 1812 #include <time.h> 1813 #include <unistd.h> 1814 int main(void) { struct tm tm; return ((int)sizeof(tm) + isatty(0)); } 1815 EOF 1816 ac_header sys/bsdtypes.h 1817 ac_header sys/file.h sys/types.h 1818 ac_header sys/mkdev.h sys/types.h 1819 ac_header sys/mman.h sys/types.h 1820 ac_header sys/param.h 1821 ac_header sys/resource.h sys/types.h _time 1822 ac_header sys/select.h sys/types.h 1823 ac_header sys/sysmacros.h 1824 ac_header bstring.h 1825 ac_header grp.h sys/types.h 1826 ac_header io.h 1827 ac_header libgen.h 1828 ac_header libutil.h sys/types.h 1829 ac_header paths.h 1830 ac_header stdint.h stdarg.h 1831 # include strings.h only if compatible with string.h 1832 ac_header strings.h sys/types.h string.h 1833 ac_header termios.h 1834 ac_header ulimit.h sys/types.h 1835 ac_header values.h 1836 1837 # 1838 # Environment: definitions 1839 # 1840 echo '#include <sys/types.h> 1841 #include <unistd.h> 1842 /* check that off_t can represent 2^63-1 correctly, thx FSF */ 1843 #define LARGE_OFF_T ((((off_t)1 << 31) << 31) - 1 + (((off_t)1 << 31) << 31)) 1844 int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && 1845 LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; 1846 int main(void) { return (isatty(0)); }' >lft.c 1847 ac_testn can_lfs '' "for large file support" <lft.c 1848 save_CPPFLAGS=$CPPFLAGS 1849 add_cppflags -D_FILE_OFFSET_BITS=64 1850 ac_testn can_lfs_sus '!' can_lfs 0 "... with -D_FILE_OFFSET_BITS=64" <lft.c 1851 if test 0 = $HAVE_CAN_LFS_SUS; then 1852 CPPFLAGS=$save_CPPFLAGS 1853 add_cppflags -D_LARGE_FILES=1 1854 ac_testn can_lfs_aix '!' can_lfs 0 "... with -D_LARGE_FILES=1" <lft.c 1855 test 1 = $HAVE_CAN_LFS_AIX || CPPFLAGS=$save_CPPFLAGS 1856 fi 1857 rm -f lft.c 1858 rmf lft* # end of large file support test 1859 1860 # 1861 # Environment: types 1862 # 1863 ac_test can_inttypes '!' stdint_h 1 "for standard 32-bit integer types" <<-'EOF' 1864 #include <sys/types.h> 1865 #include <stddef.h> 1866 int main(int ac, char **av) { return ((uint32_t)(size_t)*av + (int32_t)ac); } 1867 EOF 1868 ac_test can_ucbints '!' can_inttypes 1 "for UCB 32-bit integer types" <<-'EOF' 1869 #include <sys/types.h> 1870 #include <stddef.h> 1871 int main(int ac, char **av) { return ((u_int32_t)(size_t)*av + (int32_t)ac); } 1872 EOF 1873 ac_test can_int8type '!' stdint_h 1 "for standard 8-bit integer type" <<-'EOF' 1874 #include <sys/types.h> 1875 #include <stddef.h> 1876 int main(int ac, char **av) { return ((uint8_t)(size_t)av[ac]); } 1877 EOF 1878 ac_test can_ucbint8 '!' can_int8type 1 "for UCB 8-bit integer type" <<-'EOF' 1879 #include <sys/types.h> 1880 #include <stddef.h> 1881 int main(int ac, char **av) { return ((u_int8_t)(size_t)av[ac]); } 1882 EOF 1883 1884 ac_test rlim_t <<-'EOF' 1885 #include <sys/types.h> 1886 #if HAVE_BOTH_TIME_H 1887 #include <sys/time.h> 1888 #include <time.h> 1889 #elif HAVE_SYS_TIME_H 1890 #include <sys/time.h> 1891 #elif HAVE_TIME_H 1892 #include <time.h> 1893 #endif 1894 #if HAVE_SYS_RESOURCE_H 1895 #include <sys/resource.h> 1896 #endif 1897 #include <unistd.h> 1898 int main(void) { return (((int)(rlim_t)0) + isatty(0)); } 1899 EOF 1900 1901 # only testn: added later below 1902 ac_testn sig_t <<-'EOF' 1903 #include <sys/types.h> 1904 #include <signal.h> 1905 #include <stddef.h> 1906 volatile sig_t foo = (sig_t)0; 1907 int main(void) { return (foo == (sig_t)0); } 1908 EOF 1909 1910 ac_testn sighandler_t '!' sig_t 0 <<-'EOF' 1911 #include <sys/types.h> 1912 #include <signal.h> 1913 #include <stddef.h> 1914 volatile sighandler_t foo = (sighandler_t)0; 1915 int main(void) { return (foo == (sighandler_t)0); } 1916 EOF 1917 if test 1 = $HAVE_SIGHANDLER_T; then 1918 add_cppflags -Dsig_t=sighandler_t 1919 HAVE_SIG_T=1 1920 fi 1921 1922 ac_testn __sighandler_t '!' sig_t 0 <<-'EOF' 1923 #include <sys/types.h> 1924 #include <signal.h> 1925 #include <stddef.h> 1926 volatile __sighandler_t foo = (__sighandler_t)0; 1927 int main(void) { return (foo == (__sighandler_t)0); } 1928 EOF 1929 if test 1 = $HAVE___SIGHANDLER_T; then 1930 add_cppflags -Dsig_t=__sighandler_t 1931 HAVE_SIG_T=1 1932 fi 1933 1934 test 1 = $HAVE_SIG_T || add_cppflags -Dsig_t=nosig_t 1935 ac_cppflags SIG_T 1936 1937 # 1938 # check whether whatever we use for the final link will succeed 1939 # 1940 if test $cm = makefile; then 1941 : nothing to check 1942 else 1943 HAVE_LINK_WORKS=x 1944 ac_testinit link_works '' 'checking if the final link command may succeed' 1945 fv=1 1946 cat >conftest.c <<-EOF 1947 #define EXTERN 1948 #define MKSH_INCLUDES_ONLY 1949 #include "sh.h" 1950 __RCSID("$srcversion"); 1951 int main(void) { printf("Hello, World!\\n"); return (isatty(0)); } 1952 EOF 1953 case $cm in 1954 llvm) 1955 v "$CC $CFLAGS $CPPFLAGS $NOWARN -emit-llvm -c conftest.c" || fv=0 1956 rmf $tfn.s 1957 test $fv = 0 || v "llvm-link -o - conftest.o | opt $optflags | llc -o $tfn.s" || fv=0 1958 test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn $tfn.s $LIBS $ccpr" 1959 ;; 1960 dragonegg) 1961 v "$CC $CFLAGS $CPPFLAGS $NOWARN -S -flto conftest.c" || fv=0 1962 test $fv = 0 || v "mv conftest.s conftest.ll" 1963 test $fv = 0 || v "llvm-as conftest.ll" || fv=0 1964 rmf $tfn.s 1965 test $fv = 0 || v "llvm-link -o - conftest.bc | opt $optflags | llc -o $tfn.s" || fv=0 1966 test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn $tfn.s $LIBS $ccpr" 1967 ;; 1968 combine) 1969 v "$CC $CFLAGS $CPPFLAGS $LDFLAGS -fwhole-program --combine $NOWARN -o $tcfn conftest.c $LIBS $ccpr" 1970 ;; 1971 lto|normal) 1972 cm=normal 1973 v "$CC $CFLAGS $CPPFLAGS $NOWARN -c conftest.c" || fv=0 1974 test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn conftest.o $LIBS $ccpr" 1975 ;; 1976 esac 1977 test -f $tcfn || fv=0 1978 ac_testdone 1979 test $fv = 1 || exit 1 1980 fi 1981 1982 # 1983 # Environment: errors and signals 1984 # 1985 test x"NetBSD" = x"$TARGET_OS" && $e Ignore the compatibility warning. 1986 1987 ac_testn sys_errlist '' "the sys_errlist[] array and sys_nerr" <<-'EOF' 1988 extern const int sys_nerr; 1989 extern const char * const sys_errlist[]; 1990 extern int isatty(int); 1991 int main(void) { return (*sys_errlist[sys_nerr - 1] + isatty(0)); } 1992 EOF 1993 ac_testn _sys_errlist '!' sys_errlist 0 "the _sys_errlist[] array and _sys_nerr" <<-'EOF' 1994 extern const int _sys_nerr; 1995 extern const char * const _sys_errlist[]; 1996 extern int isatty(int); 1997 int main(void) { return (*_sys_errlist[_sys_nerr - 1] + isatty(0)); } 1998 EOF 1999 if test 1 = "$HAVE__SYS_ERRLIST"; then 2000 add_cppflags -Dsys_nerr=_sys_nerr 2001 add_cppflags -Dsys_errlist=_sys_errlist 2002 HAVE_SYS_ERRLIST=1 2003 fi 2004 ac_cppflags SYS_ERRLIST 2005 2006 for what in name list; do 2007 uwhat=`upper $what` 2008 ac_testn sys_sig$what '' "the sys_sig${what}[] array" <<-EOF 2009 extern const char * const sys_sig${what}[]; 2010 extern int isatty(int); 2011 int main(void) { return (sys_sig${what}[0][0] + isatty(0)); } 2012 EOF 2013 ac_testn _sys_sig$what '!' sys_sig$what 0 "the _sys_sig${what}[] array" <<-EOF 2014 extern const char * const _sys_sig${what}[]; 2015 extern int isatty(int); 2016 int main(void) { return (_sys_sig${what}[0][0] + isatty(0)); } 2017 EOF 2018 eval uwhat_v=\$HAVE__SYS_SIG$uwhat 2019 if test 1 = "$uwhat_v"; then 2020 add_cppflags -Dsys_sig$what=_sys_sig$what 2021 eval HAVE_SYS_SIG$uwhat=1 2022 fi 2023 ac_cppflags SYS_SIG$uwhat 2024 done 2025 2026 # 2027 # Environment: library functions 2028 # 2029 ac_test flock <<-'EOF' 2030 #include <sys/types.h> 2031 #include <fcntl.h> 2032 #undef flock 2033 #if HAVE_SYS_FILE_H 2034 #include <sys/file.h> 2035 #endif 2036 int main(void) { return (flock(0, LOCK_EX | LOCK_UN)); } 2037 EOF 2038 2039 ac_test lock_fcntl '!' flock 1 'whether we can lock files with fcntl' <<-'EOF' 2040 #include <fcntl.h> 2041 #undef flock 2042 int main(void) { 2043 struct flock lks; 2044 lks.l_type = F_WRLCK | F_UNLCK; 2045 return (fcntl(0, F_SETLKW, &lks)); 2046 } 2047 EOF 2048 2049 ac_test getrusage <<-'EOF' 2050 #define MKSH_INCLUDES_ONLY 2051 #include "sh.h" 2052 int main(void) { 2053 struct rusage ru; 2054 return (getrusage(RUSAGE_SELF, &ru) + 2055 getrusage(RUSAGE_CHILDREN, &ru)); 2056 } 2057 EOF 2058 2059 ac_test getsid <<-'EOF' 2060 #include <unistd.h> 2061 int main(void) { return ((int)getsid(0)); } 2062 EOF 2063 2064 ac_test gettimeofday <<-'EOF' 2065 #define MKSH_INCLUDES_ONLY 2066 #include "sh.h" 2067 int main(void) { struct timeval tv; return (gettimeofday(&tv, NULL)); } 2068 EOF 2069 2070 ac_test killpg <<-'EOF' 2071 #include <signal.h> 2072 int main(int ac, char *av[]) { return (av[0][killpg(123, ac)]); } 2073 EOF 2074 2075 ac_test memmove <<-'EOF' 2076 #include <sys/types.h> 2077 #include <stddef.h> 2078 #include <string.h> 2079 #if HAVE_STRINGS_H 2080 #include <strings.h> 2081 #endif 2082 int main(int ac, char *av[]) { 2083 return (*(int *)(void *)memmove(av[0], av[1], (size_t)ac)); 2084 } 2085 EOF 2086 2087 ac_test mknod '' 'if to use mknod(), makedev() and friends' <<-'EOF' 2088 #define MKSH_INCLUDES_ONLY 2089 #include "sh.h" 2090 int main(int ac, char *av[]) { 2091 dev_t dv; 2092 dv = makedev((unsigned int)ac, (unsigned int)av[0][0]); 2093 return (mknod(av[0], (mode_t)0, dv) ? (int)major(dv) : 2094 (int)minor(dv)); 2095 } 2096 EOF 2097 2098 ac_test mmap lock_fcntl 0 'for mmap and munmap' <<-'EOF' 2099 #include <sys/types.h> 2100 #if HAVE_SYS_FILE_H 2101 #include <sys/file.h> 2102 #endif 2103 #if HAVE_SYS_MMAN_H 2104 #include <sys/mman.h> 2105 #endif 2106 #include <stddef.h> 2107 #include <stdlib.h> 2108 int main(void) { return ((void *)mmap(NULL, (size_t)0, 2109 PROT_READ, MAP_PRIVATE, 0, (off_t)0) == (void *)NULL ? 1 : 2110 munmap(NULL, 0)); } 2111 EOF 2112 2113 ac_test ftruncate mmap 0 'for ftruncate' <<-'EOF' 2114 #include <unistd.h> 2115 int main(void) { return (ftruncate(0, 0)); } 2116 EOF 2117 2118 ac_test nice <<-'EOF' 2119 #include <unistd.h> 2120 int main(void) { return (nice(4)); } 2121 EOF 2122 2123 ac_test revoke <<-'EOF' 2124 #include <sys/types.h> 2125 #if HAVE_LIBUTIL_H 2126 #include <libutil.h> 2127 #endif 2128 #include <unistd.h> 2129 int main(int ac, char *av[]) { return (ac + revoke(av[0])); } 2130 EOF 2131 2132 ac_test setlocale_ctype '' 'setlocale(LC_CTYPE, "")' <<-'EOF' 2133 #include <locale.h> 2134 #include <stddef.h> 2135 int main(void) { return ((int)(size_t)(void *)setlocale(LC_CTYPE, "")); } 2136 EOF 2137 2138 ac_test langinfo_codeset setlocale_ctype 0 'nl_langinfo(CODESET)' <<-'EOF' 2139 #include <langinfo.h> 2140 #include <stddef.h> 2141 int main(void) { return ((int)(size_t)(void *)nl_langinfo(CODESET)); } 2142 EOF 2143 2144 ac_test select <<-'EOF' 2145 #include <sys/types.h> 2146 #if HAVE_BOTH_TIME_H 2147 #include <sys/time.h> 2148 #include <time.h> 2149 #elif HAVE_SYS_TIME_H 2150 #include <sys/time.h> 2151 #elif HAVE_TIME_H 2152 #include <time.h> 2153 #endif 2154 #if HAVE_SYS_BSDTYPES_H 2155 #include <sys/bsdtypes.h> 2156 #endif 2157 #if HAVE_SYS_SELECT_H 2158 #include <sys/select.h> 2159 #endif 2160 #if HAVE_BSTRING_H 2161 #include <bstring.h> 2162 #endif 2163 #include <stddef.h> 2164 #include <stdlib.h> 2165 #include <string.h> 2166 #if HAVE_STRINGS_H 2167 #include <strings.h> 2168 #endif 2169 #include <unistd.h> 2170 int main(void) { 2171 struct timeval tv = { 1, 200000 }; 2172 fd_set fds; FD_ZERO(&fds); FD_SET(0, &fds); 2173 return (select(FD_SETSIZE, &fds, NULL, NULL, &tv)); 2174 } 2175 EOF 2176 2177 ac_test setresugid <<-'EOF' 2178 #include <sys/types.h> 2179 #include <unistd.h> 2180 int main(void) { return (setresuid(0,0,0) + setresgid(0,0,0)); } 2181 EOF 2182 2183 ac_test setgroups setresugid 0 <<-'EOF' 2184 #include <sys/types.h> 2185 #if HAVE_GRP_H 2186 #include <grp.h> 2187 #endif 2188 #include <unistd.h> 2189 int main(void) { gid_t gid = 0; return (setgroups(0, &gid)); } 2190 EOF 2191 2192 if test x"$et" = x"klibc"; then 2193 2194 ac_testn __rt_sigsuspend '' 'whether klibc uses RT signals' <<-'EOF' 2195 #define MKSH_INCLUDES_ONLY 2196 #include "sh.h" 2197 extern int __rt_sigsuspend(const sigset_t *, size_t); 2198 int main(void) { return (__rt_sigsuspend(NULL, 0)); } 2199 EOF 2200 2201 # no? damn! legacy crap ahead! 2202 2203 ac_testn __sigsuspend_s '!' __rt_sigsuspend 1 \ 2204 'whether sigsuspend is usable (1/2)' <<-'EOF' 2205 #define MKSH_INCLUDES_ONLY 2206 #include "sh.h" 2207 extern int __sigsuspend_s(sigset_t); 2208 int main(void) { return (__sigsuspend_s(0)); } 2209 EOF 2210 ac_testn __sigsuspend_xxs '!' __sigsuspend_s 1 \ 2211 'whether sigsuspend is usable (2/2)' <<-'EOF' 2212 #define MKSH_INCLUDES_ONLY 2213 #include "sh.h" 2214 extern int __sigsuspend_xxs(int, int, sigset_t); 2215 int main(void) { return (__sigsuspend_xxs(0, 0, 0)); } 2216 EOF 2217 2218 if test "000" = "$HAVE___RT_SIGSUSPEND$HAVE___SIGSUSPEND_S$HAVE___SIGSUSPEND_XXS"; then 2219 # no usable sigsuspend(), use pause() *ugh* 2220 add_cppflags -DMKSH_NO_SIGSUSPEND 2221 fi 2222 fi 2223 2224 ac_test strerror '!' sys_errlist 0 <<-'EOF' 2225 extern char *strerror(int); 2226 int main(int ac, char *av[]) { return (*strerror(*av[ac])); } 2227 EOF 2228 2229 ac_test strsignal '!' sys_siglist 0 <<-'EOF' 2230 #include <string.h> 2231 #include <signal.h> 2232 int main(void) { return (strsignal(1)[0]); } 2233 EOF 2234 2235 ac_test strlcpy <<-'EOF' 2236 #include <string.h> 2237 int main(int ac, char *av[]) { return (strlcpy(*av, av[1], 2238 (size_t)ac)); } 2239 EOF 2240 2241 # 2242 # check headers for declarations 2243 # 2244 ac_test flock_decl flock 1 'for declaration of flock()' <<-'EOF' 2245 #define MKSH_INCLUDES_ONLY 2246 #include "sh.h" 2247 #if HAVE_SYS_FILE_H 2248 #include <sys/file.h> 2249 #endif 2250 int main(void) { return ((flock)(0, 0)); } 2251 EOF 2252 ac_test revoke_decl revoke 1 'for declaration of revoke()' <<-'EOF' 2253 #define MKSH_INCLUDES_ONLY 2254 #include "sh.h" 2255 int main(void) { return ((revoke)("")); } 2256 EOF 2257 ac_test sys_errlist_decl sys_errlist 0 "for declaration of sys_errlist[] and sys_nerr" <<-'EOF' 2258 #define MKSH_INCLUDES_ONLY 2259 #include "sh.h" 2260 int main(void) { return (*sys_errlist[sys_nerr - 1] + isatty(0)); } 2261 EOF 2262 ac_test sys_siglist_decl sys_siglist 0 'for declaration of sys_siglist[]' <<-'EOF' 2263 #define MKSH_INCLUDES_ONLY 2264 #include "sh.h" 2265 int main(void) { return (sys_siglist[0][0] + isatty(0)); } 2266 EOF 2267 2268 # 2269 # other checks 2270 # 2271 fd='if to use persistent history' 2272 ac_cache PERSISTENT_HISTORY || case $HAVE_FTRUNCATE$HAVE_MMAP$HAVE_FLOCK$HAVE_LOCK_FCNTL in 2273 111*|1101) fv=1 ;; 2274 esac 2275 test 1 = $fv || check_categories="$check_categories no-histfile" 2276 ac_testdone 2277 ac_cppflags 2278 2279 # 2280 # extra checks for legacy mksh 2281 # 2282 if test $legacy = 1; then 2283 ac_test long_32bit '' 'whether long is 32 bit wide' <<-'EOF' 2284 #define MKSH_INCLUDES_ONLY 2285 #include "sh.h" 2286 #ifndef CHAR_BIT 2287 #define CHAR_BIT 0 2288 #endif 2289 struct ctasserts { 2290 #define cta(name, assertion) char name[(assertion) ? 1 : -1] 2291 cta(char_is_8_bits, (CHAR_BIT) == 8); 2292 cta(long_is_32_bits, sizeof(long) == 4); 2293 }; 2294 int main(void) { return (sizeof(struct ctasserts)); } 2295 EOF 2296 2297 ac_test long_64bit '!' long_32bit 0 'whether long is 64 bit wide' <<-'EOF' 2298 #define MKSH_INCLUDES_ONLY 2299 #include "sh.h" 2300 #ifndef CHAR_BIT 2301 #define CHAR_BIT 0 2302 #endif 2303 struct ctasserts { 2304 #define cta(name, assertion) char name[(assertion) ? 1 : -1] 2305 cta(char_is_8_bits, (CHAR_BIT) == 8); 2306 cta(long_is_64_bits, sizeof(long) == 8); 2307 }; 2308 int main(void) { return (sizeof(struct ctasserts)); } 2309 EOF 2310 2311 case $HAVE_LONG_32BIT$HAVE_LONG_64BIT in 2312 10) check_categories="$check_categories int:32" ;; 2313 01) check_categories="$check_categories int:64" ;; 2314 *) check_categories="$check_categories int:u" ;; 2315 esac 2316 fi 2317 2318 # 2319 # Compiler: Praeprocessor (only if needed) 2320 # 2321 test 0 = $HAVE_SYS_SIGNAME && if ac_testinit cpp_dd '' \ 2322 'checking if the C Preprocessor supports -dD'; then 2323 echo '#define foo bar' >conftest.c 2324 vv ']' "$CPP $CFLAGS $CPPFLAGS $NOWARN -dD conftest.c >x" 2325 grep '#define foo bar' x >/dev/null 2>&1 && fv=1 2326 rmf conftest.c x vv.out 2327 ac_testdone 2328 fi 2329 2330 # 2331 # End of mirtoconf checks 2332 # 2333 $e ... done. 2334 2335 # Some operating systems have ancient versions of ed(1) writing 2336 # the character count to standard output; cope for that 2337 echo wq >x 2338 ed x <x 2>/dev/null | grep 3 >/dev/null 2>&1 && \ 2339 check_categories="$check_categories $oldish_ed" 2340 rmf x vv.out 2341 2342 if test 0 = $HAVE_SYS_SIGNAME; then 2343 if test 1 = $HAVE_CPP_DD; then 2344 $e Generating list of signal names... 2345 else 2346 $e No list of signal names available via cpp. Falling back... 2347 fi 2348 sigseenone=: 2349 sigseentwo=: 2350 echo '#include <signal.h> 2351 #if defined(NSIG_MAX) 2352 #define cfg_NSIG NSIG_MAX 2353 #elif defined(NSIG) 2354 #define cfg_NSIG NSIG 2355 #elif defined(_NSIG) 2356 #define cfg_NSIG _NSIG 2357 #elif defined(SIGMAX) 2358 #define cfg_NSIG (SIGMAX + 1) 2359 #elif defined(_SIGMAX) 2360 #define cfg_NSIG (_SIGMAX + 1) 2361 #else 2362 /*XXX better error out, see sh.h */ 2363 #define cfg_NSIG 64 2364 #endif 2365 int 2366 mksh_cfg= cfg_NSIG 2367 ;' >conftest.c 2368 # GNU sed 2.03 segfaults when optimising this to sed -n 2369 NSIG=`vq "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c" | \ 2370 grep -v '^#' | \ 2371 sed '/mksh_cfg.*= *$/{ 2372 N 2373 s/\n/ / 2374 }' | \ 2375 grep '^ *mksh_cfg *=' | \ 2376 sed 's/^ *mksh_cfg *=[ ]*\([()0-9x+-][()0-9x+ -]*\).*$/\1/'` 2377 case $NSIG in 2378 *mksh_cfg*) $e "Error: NSIG='$NSIG'"; NSIG=0 ;; 2379 *[\ \(\)+-]*) NSIG=`"$AWK" "BEGIN { print $NSIG }" </dev/null` ;; 2380 esac 2381 printf=printf 2382 (printf hallo) >/dev/null 2>&1 || printf=echo 2383 test $printf = echo || test "`printf %d 42`" = 42 || printf=echo 2384 test $printf = echo || NSIG=`printf %d "$NSIG" 2>/dev/null` 2385 $printf "NSIG=$NSIG ... " 2386 sigs="ABRT FPE ILL INT SEGV TERM ALRM BUS CHLD CONT HUP KILL PIPE QUIT" 2387 sigs="$sigs STOP TSTP TTIN TTOU USR1 USR2 POLL PROF SYS TRAP URG VTALRM" 2388 sigs="$sigs XCPU XFSZ INFO WINCH EMT IO DIL LOST PWR SAK CLD IOT STKFLT" 2389 sigs="$sigs ABND DCE DUMP IOERR TRACE DANGER THCONT THSTOP RESV UNUSED" 2390 test 1 = $HAVE_CPP_DD && test $NSIG -gt 1 && sigs="$sigs "`vq \ 2391 "$CPP $CFLAGS $CPPFLAGS $NOWARN -dD conftest.c" | \ 2392 grep '[ ]SIG[A-Z0-9][A-Z0-9]*[ ]' | \ 2393 sed 's/^.*[ ]SIG\([A-Z0-9][A-Z0-9]*\)[ ].*$/\1/' | sort` 2394 test $NSIG -gt 1 || sigs= 2395 for name in $sigs; do 2396 case $sigseenone in 2397 *:$name:*) continue ;; 2398 esac 2399 sigseenone=$sigseenone$name: 2400 echo '#include <signal.h>' >conftest.c 2401 echo int >>conftest.c 2402 echo mksh_cfg= SIG$name >>conftest.c 2403 echo ';' >>conftest.c 2404 # GNU sed 2.03 croaks on optimising this, too 2405 vq "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c" | \ 2406 grep -v '^#' | \ 2407 sed '/mksh_cfg.*= *$/{ 2408 N 2409 s/\n/ / 2410 }' | \ 2411 grep '^ *mksh_cfg *=' | \ 2412 sed 's/^ *mksh_cfg *=[ ]*\([0-9][0-9x]*\).*$/:\1 '$name/ 2413 done | sed -n '/^:[^ ]/s/^://p' | while read nr name; do 2414 test $printf = echo || nr=`printf %d "$nr" 2>/dev/null` 2415 test $nr -gt 0 && test $nr -lt $NSIG || continue 2416 case $sigseentwo in 2417 *:$nr:*) ;; 2418 *) echo " { \"$name\", $nr }," 2419 sigseentwo=$sigseentwo$nr: 2420 $printf "$name=$nr " >&2 2421 ;; 2422 esac 2423 done 2>&1 >signames.inc 2424 rmf conftest.c 2425 $e done. 2426 fi 2427 2428 addsrcs '!' HAVE_STRLCPY strlcpy.c 2429 addsrcs USE_PRINTF_BUILTIN printf.c 2430 test 1 = "$USE_PRINTF_BUILTIN" && add_cppflags -DMKSH_PRINTF_BUILTIN 2431 test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose" 2432 add_cppflags -DMKSH_BUILD_R=571 2433 2434 $e $bi$me: Finished configuration testing, now producing output.$ao 2435 2436 files= 2437 objs= 2438 sp= 2439 case $tcfn in 2440 a.exe|conftest.exe) 2441 mkshexe=$tfn.exe 2442 add_cppflags -DMKSH_EXE_EXT 2443 ;; 2444 *) 2445 mkshexe=$tfn 2446 ;; 2447 esac 2448 case $curdir in 2449 *\ *) mkshshebang="#!./$mkshexe" ;; 2450 *) mkshshebang="#!$curdir/$mkshexe" ;; 2451 esac 2452 cat >test.sh <<-EOF 2453 $mkshshebang 2454 LC_ALL=C PATH='$PATH'; export LC_ALL PATH 2455 test -n "\$KSH_VERSION" || exit 1 2456 set -A check_categories -- $check_categories 2457 pflag='$curdir/$mkshexe' 2458 sflag='$srcdir/check.t' 2459 usee=0 useU=0 Pflag=0 Sflag=0 uset=0 vflag=1 xflag=0 2460 while getopts "C:e:fPp:QSs:t:U:v" ch; do case \$ch { 2461 (C) check_categories[\${#check_categories[*]}]=\$OPTARG ;; 2462 (e) usee=1; eflag=\$OPTARG ;; 2463 (f) check_categories[\${#check_categories[*]}]=fastbox ;; 2464 (P) Pflag=1 ;; 2465 (+P) Pflag=0 ;; 2466 (p) pflag=\$OPTARG ;; 2467 (Q) vflag=0 ;; 2468 (+Q) vflag=1 ;; 2469 (S) Sflag=1 ;; 2470 (+S) Sflag=0 ;; 2471 (s) sflag=\$OPTARG ;; 2472 (t) uset=1; tflag=\$OPTARG ;; 2473 (U) useU=1; Uflag=\$OPTARG ;; 2474 (v) vflag=1 ;; 2475 (+v) vflag=0 ;; 2476 (*) xflag=1 ;; 2477 } 2478 done 2479 shift \$((OPTIND - 1)) 2480 set -A args -- '$srcdir/check.pl' -p "\$pflag" 2481 if $ebcdic; then 2482 args[\${#args[*]}]=-E 2483 fi 2484 x= 2485 for y in "\${check_categories[@]}"; do 2486 x=\$x,\$y 2487 done 2488 if [[ -n \$x ]]; then 2489 args[\${#args[*]}]=-C 2490 args[\${#args[*]}]=\${x#,} 2491 fi 2492 if (( usee )); then 2493 args[\${#args[*]}]=-e 2494 args[\${#args[*]}]=\$eflag 2495 fi 2496 (( Pflag )) && args[\${#args[*]}]=-P 2497 if (( uset )); then 2498 args[\${#args[*]}]=-t 2499 args[\${#args[*]}]=\$tflag 2500 fi 2501 if (( useU )); then 2502 args[\${#args[*]}]=-U 2503 args[\${#args[*]}]=\$Uflag 2504 fi 2505 (( vflag )) && args[\${#args[*]}]=-v 2506 (( xflag )) && args[\${#args[*]}]=-x # force usage by synerr 2507 if [[ -n \$TMPDIR && -d \$TMPDIR/. ]]; then 2508 args[\${#args[*]}]=-T 2509 args[\${#args[*]}]=\$TMPDIR 2510 fi 2511 print Testing mksh for conformance: 2512 grep -F -e Mir''OS: -e MIRBSD "\$sflag" 2513 print "This shell is actually:\\n\\t\$KSH_VERSION" 2514 print 'test.sh built for mksh $dstversion' 2515 cstr='\$os = defined \$^O ? \$^O : "unknown";' 2516 cstr="\$cstr"'print \$os . ", Perl version " . \$];' 2517 for perli in \$PERL perl5 perl no; do 2518 if [[ \$perli = no ]]; then 2519 print Cannot find a working Perl interpreter, aborting. 2520 exit 1 2521 fi 2522 print "Trying Perl interpreter '\$perli'..." 2523 perlos=\$(\$perli -e "\$cstr") 2524 rv=\$? 2525 print "Errorlevel \$rv, running on '\$perlos'" 2526 if (( rv )); then 2527 print "=> not using" 2528 continue 2529 fi 2530 if [[ -n \$perlos ]]; then 2531 print "=> using it" 2532 break 2533 fi 2534 done 2535 (( Sflag )) || echo + \$perli "\${args[@]}" -s "\$sflag" "\$@" 2536 (( Sflag )) || exec \$perli "\${args[@]}" -s "\$sflag" "\$@"$tsts 2537 # use of the -S option for check.t split into multiple chunks 2538 rv=0 2539 for s in "\$sflag".*; do 2540 echo + \$perli "\${args[@]}" -s "\$s" "\$@" 2541 \$perli "\${args[@]}" -s "\$s" "\$@"$tsts 2542 rc=\$? 2543 (( rv = rv ? rv : rc )) 2544 done 2545 exit \$rv 2546 EOF 2547 chmod 755 test.sh 2548 case $cm in 2549 dragonegg) 2550 emitbc="-S -flto" 2551 ;; 2552 llvm) 2553 emitbc="-emit-llvm -c" 2554 ;; 2555 *) 2556 emitbc=-c 2557 ;; 2558 esac 2559 echo ": # work around NeXTstep bug" >Rebuild.sh 2560 cd "$srcdir" 2561 optfiles=`echo *.opt` 2562 cd "$curdir" 2563 for file in $optfiles; do 2564 echo "echo + Running genopt on '$file'..." 2565 echo "(srcfile='$srcdir/$file'; BUILDSH_RUN_GENOPT=1; . '$srcdir/Build.sh')" 2566 done >>Rebuild.sh 2567 echo set -x >>Rebuild.sh 2568 for file in $SRCS; do 2569 op=`echo x"$file" | sed 's/^x\(.*\)\.c$/\1./'` 2570 test -f $file || file=$srcdir/$file 2571 files="$files$sp$file" 2572 sp=' ' 2573 echo "$CC $CFLAGS $CPPFLAGS $emitbc $file || exit 1" >>Rebuild.sh 2574 if test $cm = dragonegg; then 2575 echo "mv ${op}s ${op}ll" >>Rebuild.sh 2576 echo "llvm-as ${op}ll || exit 1" >>Rebuild.sh 2577 objs="$objs$sp${op}bc" 2578 else 2579 objs="$objs$sp${op}o" 2580 fi 2581 done 2582 case $cm in 2583 dragonegg|llvm) 2584 echo "rm -f $tfn.s" >>Rebuild.sh 2585 echo "llvm-link -o - $objs | opt $optflags | llc -o $tfn.s" >>Rebuild.sh 2586 lobjs=$tfn.s 2587 ;; 2588 *) 2589 lobjs=$objs 2590 ;; 2591 esac 2592 echo tcfn=$mkshexe >>Rebuild.sh 2593 echo "$CC $CFLAGS $LDFLAGS -o \$tcfn $lobjs $LIBS $ccpr" >>Rebuild.sh 2594 echo "test -f \$tcfn || exit 1; $SIZE \$tcfn" >>Rebuild.sh 2595 if test $cm = makefile; then 2596 extras='emacsfn.h exprtok.h rlimits.opt sh.h sh_flags.opt var_spec.h' 2597 test 0 = $HAVE_SYS_SIGNAME && extras="$extras signames.inc" 2598 gens= genq= 2599 for file in $optfiles; do 2600 genf=`basename "$file" | sed 's/.opt$/.gen/'` 2601 gens="$gens $genf" 2602 genq="$genq$nl$genf: $srcdir/Build.sh $srcdir/$file 2603 srcfile=$srcdir/$file; BUILDSH_RUN_GENOPT=1; . $srcdir/Build.sh" 2604 done 2605 cat >Makefrag.inc <<EOF 2606 # Makefile fragment for building mksh $dstversion 2607 2608 PROG= $mkshexe 2609 MAN= mksh.1 2610 SRCS= $SRCS 2611 SRCS_FP= $files 2612 OBJS_BP= $objs 2613 INDSRCS= $extras 2614 NONSRCS_INST= dot.mkshrc \$(MAN) 2615 NONSRCS_NOINST= Build.sh Makefile Rebuild.sh check.pl check.t test.sh 2616 CC= $CC 2617 CFLAGS= $CFLAGS 2618 CPPFLAGS= $CPPFLAGS 2619 LDFLAGS= $LDFLAGS 2620 LIBS= $LIBS 2621 2622 .depend \$(OBJS_BP):$gens$genq 2623 2624 # not BSD make only: 2625 #VPATH= $srcdir 2626 #all: \$(PROG) 2627 #\$(PROG): \$(OBJS_BP) 2628 # \$(CC) \$(CFLAGS) \$(LDFLAGS) -o \$@ \$(OBJS_BP) \$(LIBS) 2629 #\$(OBJS_BP): \$(SRCS_FP) \$(NONSRCS) 2630 #.c.o: 2631 # \$(CC) \$(CFLAGS) \$(CPPFLAGS) -c \$< 2632 2633 # for all make variants: 2634 #REGRESS_FLAGS= -f 2635 #regress: 2636 # ./test.sh \$(REGRESS_FLAGS) 2637 check_categories=$check_categories 2638 2639 # for BSD make only: 2640 #.PATH: $srcdir 2641 #.include <bsd.prog.mk> 2642 EOF 2643 $e 2644 $e Generated Makefrag.inc successfully. 2645 exit 0 2646 fi 2647 for file in $optfiles; do 2648 $e "+ Running genopt on '$file'..." 2649 do_genopt "$srcdir/$file" || exit 1 2650 done 2651 if test $cm = combine; then 2652 objs="-o $mkshexe" 2653 for file in $SRCS; do 2654 test -f $file || file=$srcdir/$file 2655 objs="$objs $file" 2656 done 2657 emitbc="-fwhole-program --combine" 2658 v "$CC $CFLAGS $CPPFLAGS $LDFLAGS $emitbc $objs $LIBS $ccpr" 2659 elif test 1 = $pm; then 2660 for file in $SRCS; do 2661 test -f $file || file=$srcdir/$file 2662 v "$CC $CFLAGS $CPPFLAGS $emitbc $file" & 2663 done 2664 wait 2665 else 2666 for file in $SRCS; do 2667 test $cm = dragonegg && \ 2668 op=`echo x"$file" | sed 's/^x\(.*\)\.c$/\1./'` 2669 test -f $file || file=$srcdir/$file 2670 v "$CC $CFLAGS $CPPFLAGS $emitbc $file" || exit 1 2671 if test $cm = dragonegg; then 2672 v "mv ${op}s ${op}ll" 2673 v "llvm-as ${op}ll" || exit 1 2674 fi 2675 done 2676 fi 2677 case $cm in 2678 dragonegg|llvm) 2679 rmf $tfn.s 2680 v "llvm-link -o - $objs | opt $optflags | llc -o $tfn.s" 2681 ;; 2682 esac 2683 tcfn=$mkshexe 2684 test $cm = combine || v "$CC $CFLAGS $LDFLAGS -o $tcfn $lobjs $LIBS $ccpr" 2685 test -f $tcfn || exit 1 2686 test 1 = $r || v "$NROFF -mdoc <'$srcdir/lksh.1' >lksh.cat1" || rmf lksh.cat1 2687 test 1 = $r || v "$NROFF -mdoc <'$srcdir/mksh.1' >mksh.cat1" || rmf mksh.cat1 2688 test 0 = $eq && v $SIZE $tcfn 2689 i=install 2690 test -f /usr/ucb/$i && i=/usr/ucb/$i 2691 test 1 = $eq && e=: 2692 $e 2693 $e Installing the shell: 2694 $e "# $i -c -s -o root -g bin -m 555 $tfn /bin/$tfn" 2695 if test $legacy = 0; then 2696 $e "# grep -x /bin/$tfn /etc/shells >/dev/null || echo /bin/$tfn >>/etc/shells" 2697 $e "# $i -c -o root -g bin -m 444 dot.mkshrc /usr/share/doc/mksh/examples/" 2698 fi 2699 $e 2700 $e Installing the manual: 2701 if test -f mksh.cat1; then 2702 $e "# $i -c -o root -g bin -m 444 lksh.cat1" \ 2703 "/usr/share/man/cat1/lksh.0" 2704 $e "# $i -c -o root -g bin -m 444 mksh.cat1" \ 2705 "/usr/share/man/cat1/mksh.0" 2706 $e or 2707 fi 2708 $e "# $i -c -o root -g bin -m 444 lksh.1 mksh.1 /usr/share/man/man1/" 2709 $e 2710 $e Run the regression test suite: ./test.sh 2711 $e Please also read the sample file dot.mkshrc and the fine manual. 2712 exit 0 2713 2714 : <<'EOD' 2715 2716 === Environment used === 2717 2718 ==== build environment ==== 2719 AWK default: awk 2720 CC default: cc 2721 CFLAGS if empty, defaults to -xO2 or +O2 2722 or -O3 -qstrict or -O2, per compiler 2723 CPPFLAGS default empty 2724 LDFLAGS default empty; added before sources 2725 LDSTATIC set this to '-static'; default unset 2726 LIBS default empty; added after sources 2727 [Interix] default: -lcrypt (XXX still needed?) 2728 NOWARN -Wno-error or similar 2729 NROFF default: nroff 2730 TARGET_OS default: $(uname -s || uname) 2731 TARGET_OSREV [QNX] default: $(uname -r) 2732 2733 ==== feature selectors ==== 2734 USE_PRINTF_BUILTIN 1 to include (unsupported) printf(1) as builtin 2735 ===== general format ===== 2736 HAVE_STRLEN ac_test 2737 HAVE_STRING_H ac_header 2738 HAVE_CAN_FSTACKPROTECTORALL ac_flags 2739 2740 ==== cpp definitions ==== 2741 DEBUG dont use in production, wants gcc, implies: 2742 DEBUG_LEAKS enable freeing resources before exiting 2743 MKSHRC_PATH "~/.mkshrc" (do not change) 2744 MKSH_A4PB force use of arc4random_pushb 2745 MKSH_ASSUME_UTF8 (0=disabled, 1=enabled; default: unset) 2746 MKSH_BINSHPOSIX if */sh or */-sh, enable set -o posix 2747 MKSH_BINSHREDUCED if */sh or */-sh, enable set -o sh 2748 MKSH_CLS_STRING KSH_ESC_STRING "[;H" KSH_ESC_STRING "[J" 2749 MKSH_DEFAULT_EXECSHELL "/bin/sh" (do not change) 2750 MKSH_DEFAULT_PROFILEDIR "/etc" (do not change) 2751 MKSH_DEFAULT_TMPDIR "/tmp" (do not change) 2752 MKSH_DISABLE_DEPRECATED disable code paths scheduled for later removal 2753 MKSH_DISABLE_EXPERIMENTAL disable code not yet comfy for (LTS) snapshots 2754 MKSH_DISABLE_TTY_WARNING shut up warning about ctty if OS cant be fixed 2755 MKSH_DONT_EMIT_IDSTRING omit RCS IDs from binary 2756 MKSH_EARLY_LOCALE_TRACKING track utf8-mode from POSIX locale, for SuSE 2757 MKSH_MIDNIGHTBSD01ASH_COMPAT set -o sh: additional compatibility quirk 2758 MKSH_NOPROSPECTOFWORK disable jobs, co-processes, etc. (do not use) 2759 MKSH_NOPWNAM skip PAM calls, for -static on glibc or Solaris 2760 MKSH_NO_CMDLINE_EDITING disable command line editing code entirely 2761 MKSH_NO_DEPRECATED_WARNING omit warning when deprecated stuff is run 2762 MKSH_NO_LIMITS omit ulimit code 2763 MKSH_NO_SIGSETJMP define if sigsetjmp is broken or not available 2764 MKSH_NO_SIGSUSPEND use sigprocmask+pause instead of sigsuspend 2765 MKSH_SMALL omit some code, optimise hard for size (slower) 2766 MKSH_SMALL_BUT_FAST disable some hard-for-size optim. (modern sys.) 2767 MKSH_S_NOVI=1 disable Vi editing mode (default if MKSH_SMALL) 2768 MKSH_TYPEDEF_SIG_ATOMIC_T define to e.g. 'int' if sig_atomic_t is missing 2769 MKSH_TYPEDEF_SSIZE_T define to e.g. 'long' if your OS has no ssize_t 2770 MKSH_UNEMPLOYED disable job control (but not jobs/co-processes) 2771 2772 === generic installation instructions === 2773 2774 Set CC and possibly CFLAGS, CPPFLAGS, LDFLAGS, LIBS. If cross-compiling, 2775 also set TARGET_OS. To disable tests, set e.g. HAVE_STRLCPY=0; to enable 2776 them, set to a value other than 0 or 1. Ensure /bin/ed is installed. For 2777 MKSH_SMALL but with Vi mode, add -DMKSH_S_NOVI=0 to CPPFLAGS as well. 2778 2779 Normally, the following command is what you want to run, then: 2780 $ (sh Build.sh -r -c lto && ./test.sh -f) 2>&1 | tee log 2781 2782 Copy dot.mkshrc to /etc/skel/.mkshrc; install mksh into $prefix/bin; or 2783 /bin; install the manpage, if omitting the -r flag a catmanpage is made 2784 using $NROFF. Consider using a forward script as /etc/skel/.mkshrc like 2785 http://anonscm.debian.org/cgit/collab-maint/mksh.git/plain/debian/.mkshrc 2786 and put dot.mkshrc as /etc/mkshrc so users need not keep up their HOME. 2787 2788 You may also want to install the lksh binary (also as /bin/sh) built by: 2789 $ CPPFLAGS="$CPPFLAGS -DMKSH_BINSHPOSIX" sh Build.sh -L -r -c lto 2790 2791 EOD 2792