PageRenderTime 2730ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/external/mksh/src/Build.sh

https://gitlab.com/brian0218/rk3188_r-box_android4.2.2_sdk
Shell | 1783 lines | 1688 code | 29 blank | 66 comment | 110 complexity | 92bffc749e0e094cade3c9c331bf43a4 MD5 | raw file
  1. #!/bin/sh
  2. srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.488 2011/10/07 19:51:41 tg Exp $'
  3. #-
  4. # Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
  5. # Thorsten Glaser <tg@mirbsd.org>
  6. #
  7. # Provided that these terms and disclaimer and all copyright notices
  8. # are retained or reproduced in an accompanying document, permission
  9. # is granted to deal in this work without restriction, including un-
  10. # limited rights to use, publicly perform, distribute, sell, modify,
  11. # merge, give away, or sublicence.
  12. #
  13. # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
  14. # the utmost extent permitted by applicable law, neither express nor
  15. # implied; without malicious intent or gross negligence. In no event
  16. # may a licensor, author or contributor be held liable for indirect,
  17. # direct, other damage, loss, or other issues arising in any way out
  18. # of dealing in the work, even if advised of the possibility of such
  19. # damage or existence of a defect, except proven that it results out
  20. # of said person's immediate fault when using the work as intended.
  21. #-
  22. # People analysing the output must whitelist conftest.c for any kind
  23. # of compiler warning checks (mirtoconf is by design not quiet).
  24. #
  25. # Environment used: CC CFLAGS CPPFLAGS LDFLAGS LIBS NOWARN NROFF
  26. # TARGET_OS TARGET_OSREV
  27. # Feature selectors: USE_PRINTF_BUILTIN
  28. # CPPFLAGS recognised: MKSH_ASSUME_UTF8 MKSH_BINSHREDUCED MKSH_CLS_STRING
  29. # MKSH_CONSERVATIVE_FDS MKSH_MIDNIGHTBSD01ASH_COMPAT
  30. # MKSH_NOPWNAM MKSH_NO_LIMITS MKSH_SMALL MKSH_S_NOVI
  31. # MKSH_UNEMPLOYED MKSH_DEFAULT_EXECSHELL MKSHRC_PATH
  32. # MKSH_DEFAULT_TMPDIR MKSH_CLRTOEOL_STRING MKSH_A4PB
  33. # MKSH_NO_DEPRECATED_WARNING MKSH_DONT_EMIT_IDSTRING
  34. # MKSH_NOPROSPECTOFWORK MKSH_NO_EXTERNAL_CAT
  35. LC_ALL=C
  36. export LC_ALL
  37. v() {
  38. $e "$*"
  39. eval "$@"
  40. }
  41. vv() {
  42. _c=$1
  43. shift
  44. $e "\$ $*" 2>&1
  45. eval "$@" >vv.out 2>&1
  46. sed "s^${_c} " <vv.out
  47. }
  48. vq() {
  49. eval "$@"
  50. }
  51. rmf() {
  52. for _f in "$@"; do
  53. case ${_f} in
  54. mksh.1) ;;
  55. *) rm -f "${_f}" ;;
  56. esac
  57. done
  58. }
  59. if test -d /usr/xpg4/bin/. >/dev/null 2>&1; then
  60. # Solaris: some of the tools have weird behaviour, use portable ones
  61. PATH=/usr/xpg4/bin:$PATH
  62. export PATH
  63. fi
  64. if test -n "${ZSH_VERSION+x}" && (emulate sh) >/dev/null 2>&1; then
  65. emulate sh
  66. NULLCMD=:
  67. fi
  68. allu=QWERTYUIOPASDFGHJKLZXCVBNM
  69. alll=qwertyuiopasdfghjklzxcvbnm
  70. alln=0123456789
  71. alls=______________________________________________________________
  72. nl='
  73. '
  74. tcfn=no
  75. bi=
  76. ui=
  77. ao=
  78. fx=
  79. me=`basename "$0"`
  80. orig_CFLAGS=$CFLAGS
  81. phase=x
  82. oldish_ed=stdout-ed,no-stderr-ed
  83. if test -t 1; then
  84. bi=''
  85. ui=''
  86. ao=''
  87. fi
  88. upper() {
  89. echo :"$@" | sed 's/^://' | tr $alll $allu
  90. }
  91. # clean up after ac_testrun()
  92. ac_testdone() {
  93. eval HAVE_$fu=$fv
  94. fr=no
  95. test 0 = $fv || fr=yes
  96. $e "$bi==> $fd...$ao $ui$fr$ao$fx"
  97. fx=
  98. }
  99. # ac_cache label: sets f, fu, fv?=0
  100. ac_cache() {
  101. f=$1
  102. fu=`upper $f`
  103. eval fv=\$HAVE_$fu
  104. case $fv in
  105. 0|1)
  106. fx=' (cached)'
  107. return 0
  108. ;;
  109. esac
  110. fv=0
  111. return 1
  112. }
  113. # ac_testinit label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput
  114. # returns 1 if value was cached/implied, 0 otherwise: call ac_testdone
  115. ac_testinit() {
  116. if ac_cache $1; then
  117. test x"$2" = x"!" && shift
  118. test x"$2" = x"" || shift
  119. fd=${3-$f}
  120. ac_testdone
  121. return 1
  122. fi
  123. fc=0
  124. if test x"$2" = x""; then
  125. ft=1
  126. else
  127. if test x"$2" = x"!"; then
  128. fc=1
  129. shift
  130. fi
  131. eval ft=\$HAVE_`upper $2`
  132. shift
  133. fi
  134. fd=${3-$f}
  135. if test $fc = "$ft"; then
  136. fv=$2
  137. fx=' (implied)'
  138. ac_testdone
  139. return 1
  140. fi
  141. $e ... $fd
  142. return 0
  143. }
  144. # pipe .c | ac_test[n] [!] label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput
  145. ac_testn() {
  146. if test x"$1" = x"!"; then
  147. fr=1
  148. shift
  149. else
  150. fr=0
  151. fi
  152. ac_testinit "$@" || return
  153. cat >conftest.c
  154. vv ']' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN conftest.c $LIBS $ccpr"
  155. test $tcfn = no && test -f a.out && tcfn=a.out
  156. test $tcfn = no && test -f a.exe && tcfn=a.exe
  157. test $tcfn = no && test -f conftest && tcfn=conftest
  158. if test -f $tcfn; then
  159. test 1 = $fr || fv=1
  160. else
  161. test 0 = $fr || fv=1
  162. fi
  163. vscan=
  164. if test $phase = u; then
  165. test $ct = gcc && vscan='unrecogni[sz]ed'
  166. test $ct = hpcc && vscan='unsupported'
  167. test $ct = pcc && vscan='unsupported'
  168. test $ct = sunpro && vscan='-e ignored -e turned.off'
  169. fi
  170. test -n "$vscan" && grep $vscan vv.out >/dev/null 2>&1 && fv=$fr
  171. rmf conftest.c conftest.o ${tcfn}* vv.out
  172. ac_testdone
  173. }
  174. # ac_ifcpp cppexpr [!] label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput
  175. ac_ifcpp() {
  176. expr=$1; shift
  177. ac_testn "$@" <<-EOF
  178. int main(void) { return (
  179. #$expr
  180. 0
  181. #else
  182. /* force a failure: expr is false */
  183. thiswillneverbedefinedIhope()
  184. #endif
  185. ); }
  186. EOF
  187. test x"$1" = x"!" && shift
  188. f=$1
  189. fu=`upper $f`
  190. eval fv=\$HAVE_$fu
  191. test x"$fv" = x"1"
  192. }
  193. add_cppflags() {
  194. CPPFLAGS="$CPPFLAGS $*"
  195. }
  196. ac_cppflags() {
  197. test x"$1" = x"" || fu=$1
  198. fv=$2
  199. test x"$2" = x"" && eval fv=\$HAVE_$fu
  200. add_cppflags -DHAVE_$fu=$fv
  201. }
  202. ac_test() {
  203. ac_testn "$@"
  204. ac_cppflags
  205. }
  206. # ac_flags [-] add varname cflags [text] [ldflags]
  207. ac_flags() {
  208. if test x"$1" = x"-"; then
  209. shift
  210. hf=1
  211. else
  212. hf=0
  213. fi
  214. fa=$1
  215. vn=$2
  216. f=$3
  217. ft=$4
  218. fl=$5
  219. test x"$ft" = x"" && ft="if $f can be used"
  220. save_CFLAGS=$CFLAGS
  221. CFLAGS="$CFLAGS $f"
  222. if test -n "$fl"; then
  223. save_LDFLAGS=$LDFLAGS
  224. LDFLAGS="$LDFLAGS $fl"
  225. fi
  226. if test 1 = $hf; then
  227. ac_testn can_$vn '' "$ft"
  228. else
  229. ac_testn can_$vn '' "$ft" <<-'EOF'
  230. /* evil apo'stroph in comment test */
  231. int main(void) { return (0); }
  232. EOF
  233. fi
  234. eval fv=\$HAVE_CAN_`upper $vn`
  235. if test -n "$fl"; then
  236. test 11 = $fa$fv || LDFLAGS=$save_LDFLAGS
  237. fi
  238. test 11 = $fa$fv || CFLAGS=$save_CFLAGS
  239. }
  240. # ac_header [!] header [prereq ...]
  241. ac_header() {
  242. if test x"$1" = x"!"; then
  243. na=1
  244. shift
  245. else
  246. na=0
  247. fi
  248. hf=$1; shift
  249. hv=`echo "$hf" | tr -d '\012\015' | tr -c $alll$allu$alln $alls`
  250. for i
  251. do
  252. echo "#include <$i>" >>x
  253. done
  254. echo "#include <$hf>" >>x
  255. echo 'int main(void) { return (0); }' >>x
  256. ac_testn "$hv" "" "<$hf>" <x
  257. rmf x
  258. test 1 = $na || ac_cppflags
  259. }
  260. addsrcs() {
  261. if test x"$1" = x"!"; then
  262. fr=0
  263. shift
  264. else
  265. fr=1
  266. fi
  267. eval i=\$$1
  268. test $fr = "$i" && case " $SRCS " in
  269. *\ $2\ *) ;;
  270. *) SRCS="$SRCS $2" ;;
  271. esac
  272. }
  273. if test -d mksh || test -d mksh.exe; then
  274. echo "$me: Error: ./mksh is a directory!" >&2
  275. exit 1
  276. fi
  277. rmf a.exe* a.out* conftest.c *core lft mksh* no *.bc *.ll *.o \
  278. Rebuild.sh signames.inc test.sh x vv.out
  279. curdir=`pwd` srcdir=`dirname "$0"` check_categories=
  280. test -n "$srcdir" || srcdir=.
  281. dstversion=`sed -n '/define MKSH_VERSION/s/^.*"\(.*\)".*$/\1/p' $srcdir/sh.h`
  282. e=echo
  283. r=0
  284. eq=0
  285. pm=0
  286. cm=normal
  287. optflags=-std-compile-opts
  288. last=
  289. for i
  290. do
  291. case $last:$i in
  292. c:combine|c:dragonegg|c:llvm|c:lto)
  293. cm=$i
  294. last=
  295. ;;
  296. c:*)
  297. echo "$me: Unknown option -c '$i'!" >&2
  298. exit 1
  299. ;;
  300. o:*)
  301. optflags=$i
  302. last=
  303. ;;
  304. :-c)
  305. last=c
  306. ;;
  307. :-g)
  308. # checker, debug, valgrind build
  309. add_cppflags -DDEBUG
  310. CFLAGS="$CFLAGS -g3 -fno-builtin"
  311. ;;
  312. :-j)
  313. pm=1
  314. ;;
  315. :-M)
  316. cm=makefile
  317. ;;
  318. :-O)
  319. optflags=-std-compile-opts
  320. ;;
  321. :-o)
  322. last=o
  323. ;;
  324. :-Q)
  325. eq=1
  326. ;;
  327. :-r)
  328. r=1
  329. ;;
  330. :-v)
  331. echo "Build.sh $srcversion"
  332. echo "for mksh $dstversion"
  333. exit 0
  334. ;;
  335. :*)
  336. echo "$me: Unknown option '$i'!" >&2
  337. exit 1
  338. ;;
  339. *)
  340. echo "$me: Unknown option -'$last' '$i'!" >&2
  341. exit 1
  342. ;;
  343. esac
  344. done
  345. if test -n "$last"; then
  346. echo "$me: Option -'$last' not followed by argument!" >&2
  347. exit 1
  348. fi
  349. SRCS="lalloc.c edit.c eval.c exec.c expr.c funcs.c histrap.c"
  350. SRCS="$SRCS jobs.c lex.c main.c misc.c shf.c syn.c tree.c var.c"
  351. if test x"$srcdir" = x"."; then
  352. CPPFLAGS="-I. $CPPFLAGS"
  353. else
  354. CPPFLAGS="-I. -I'$srcdir' $CPPFLAGS"
  355. fi
  356. test x"$TARGET_OS" = x"" && TARGET_OS=`uname -s 2>/dev/null || uname`
  357. if test x"$TARGET_OS" = x""; then
  358. echo "$me: Set TARGET_OS, your uname is broken!" >&2
  359. exit 1
  360. fi
  361. oswarn=
  362. ccpc=-Wc,
  363. ccpl=-Wl,
  364. tsts=
  365. ccpr='|| for _f in ${tcfn}*; do test x"${_f}" = x"mksh.1" || rm -f "${_f}"; done'
  366. # Evil hack
  367. if test x"$TARGET_OS" = x"Android"; then
  368. check_categories="$check_categories android"
  369. TARGET_OS=Linux
  370. fi
  371. # Configuration depending on OS revision, on OSes that need them
  372. case $TARGET_OS in
  373. QNX)
  374. test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r`
  375. ;;
  376. esac
  377. # Configuration depending on OS name
  378. case $TARGET_OS in
  379. AIX)
  380. add_cppflags -D_ALL_SOURCE
  381. : ${HAVE_SETLOCALE_CTYPE=0}
  382. ;;
  383. BeOS)
  384. oswarn=' and will currently not work'
  385. ;;
  386. BSD/OS)
  387. : ${HAVE_SETLOCALE_CTYPE=0}
  388. ;;
  389. CYGWIN*)
  390. : ${HAVE_SETLOCALE_CTYPE=0}
  391. ;;
  392. Darwin)
  393. ;;
  394. DragonFly)
  395. ;;
  396. FreeBSD)
  397. ;;
  398. FreeMiNT)
  399. oswarn="; it has minor issues"
  400. add_cppflags -D_GNU_SOURCE
  401. : ${HAVE_SETLOCALE_CTYPE=0}
  402. ;;
  403. GNU)
  404. case $CC in
  405. *tendracc*) ;;
  406. *) add_cppflags -D_GNU_SOURCE ;;
  407. esac
  408. # define NO_PATH_MAX to use Hurd-only functions
  409. add_cppflags -DNO_PATH_MAX
  410. ;;
  411. GNU/kFreeBSD)
  412. case $CC in
  413. *tendracc*) ;;
  414. *) add_cppflags -D_GNU_SOURCE ;;
  415. esac
  416. ;;
  417. Haiku)
  418. add_cppflags -DMKSH_ASSUME_UTF8
  419. ;;
  420. HP-UX)
  421. ;;
  422. Interix)
  423. ccpc='-X '
  424. ccpl='-Y '
  425. add_cppflags -D_ALL_SOURCE
  426. : ${LIBS='-lcrypt'}
  427. : ${HAVE_SETLOCALE_CTYPE=0}
  428. ;;
  429. IRIX*)
  430. : ${HAVE_SETLOCALE_CTYPE=0}
  431. ;;
  432. Linux)
  433. case $CC in
  434. *tendracc*) ;;
  435. *) add_cppflags -D_GNU_SOURCE ;;
  436. esac
  437. add_cppflags -DSETUID_CAN_FAIL_WITH_EAGAIN
  438. : ${HAVE_REVOKE=0}
  439. ;;
  440. MidnightBSD)
  441. ;;
  442. Minix)
  443. add_cppflags -DMKSH_UNEMPLOYED
  444. add_cppflags -DMKSH_CONSERVATIVE_FDS
  445. add_cppflags -DMKSH_NO_LIMITS
  446. add_cppflags -D_POSIX_SOURCE -D_POSIX_1_SOURCE=2 -D_MINIX
  447. oldish_ed=no-stderr-ed # /usr/bin/ed(!) is broken
  448. : ${HAVE_SETLOCALE_CTYPE=0}
  449. ;;
  450. MirBSD)
  451. ;;
  452. MSYS_*)
  453. # probably same as CYGWIN* – need to test; from RT|Chatzilla
  454. oswarn='but will probably work'
  455. ;;
  456. NetBSD)
  457. ;;
  458. OpenBSD)
  459. : ${HAVE_SETLOCALE_CTYPE=0}
  460. ;;
  461. OSF1)
  462. HAVE_SIG_T=0 # incompatible
  463. add_cppflags -D_OSF_SOURCE
  464. add_cppflags -D_POSIX_C_SOURCE=200112L
  465. add_cppflags -D_XOPEN_SOURCE=600
  466. add_cppflags -D_XOPEN_SOURCE_EXTENDED
  467. : ${HAVE_SETLOCALE_CTYPE=0}
  468. ;;
  469. Plan9)
  470. add_cppflags -D_POSIX_SOURCE
  471. add_cppflags -D_LIMITS_EXTENSION
  472. add_cppflags -D_BSD_EXTENSION
  473. add_cppflags -D_SUSV2_SOURCE
  474. add_cppflags -DMKSH_ASSUME_UTF8
  475. oswarn=' and will currently not work'
  476. add_cppflags -DMKSH_UNEMPLOYED
  477. ;;
  478. PW32*)
  479. HAVE_SIG_T=0 # incompatible
  480. oswarn=' and will currently not work'
  481. : ${HAVE_SETLOCALE_CTYPE=0}
  482. ;;
  483. QNX)
  484. add_cppflags -D__NO_EXT_QNX
  485. case $TARGET_OSREV in
  486. [012345].*|6.[0123].*|6.4.[01])
  487. oldish_ed=no-stderr-ed # oldish /bin/ed is broken
  488. ;;
  489. esac
  490. : ${HAVE_SETLOCALE_CTYPE=0}
  491. ;;
  492. SunOS)
  493. add_cppflags -D_BSD_SOURCE
  494. add_cppflags -D__EXTENSIONS__
  495. ;;
  496. syllable)
  497. add_cppflags -D_GNU_SOURCE
  498. oswarn=' and will currently not work'
  499. ;;
  500. ULTRIX)
  501. : ${CC=cc -YPOSIX}
  502. add_cppflags -Dssize_t=int
  503. : ${HAVE_SETLOCALE_CTYPE=0}
  504. ;;
  505. UWIN*)
  506. ccpc='-Yc,'
  507. ccpl='-Yl,'
  508. tsts=" 3<>/dev/tty"
  509. oswarn="; it will compile, but the target"
  510. oswarn="$oswarn${nl}platform itself is very flakey/unreliable"
  511. : ${HAVE_SETLOCALE_CTYPE=0}
  512. ;;
  513. *)
  514. oswarn='; it may or may not work'
  515. ;;
  516. esac
  517. : ${HAVE_MKNOD=0}
  518. : ${CC=cc} ${NROFF=nroff}
  519. test 0 = $r && echo | $NROFF -v 2>&1 | grep GNU >/dev/null 2>&1 && \
  520. NROFF="$NROFF -c"
  521. # this aids me in tracing FTBFSen without access to the buildd
  522. $e "Hi from$ao $bi$srcversion$ao on:"
  523. case $TARGET_OS in
  524. AIX)
  525. vv '|' "oslevel >&2"
  526. vv '|' "uname -a >&2"
  527. ;;
  528. Darwin)
  529. vv '|' "hwprefs machine_type os_type os_class >&2"
  530. vv '|' "uname -a >&2"
  531. ;;
  532. IRIX*)
  533. vv '|' "uname -a >&2"
  534. vv '|' "hinv -v >&2"
  535. ;;
  536. OSF1)
  537. vv '|' "uname -a >&2"
  538. vv '|' "/usr/sbin/sizer -v >&2"
  539. ;;
  540. *)
  541. vv '|' "uname -a >&2"
  542. ;;
  543. esac
  544. test -z "$oswarn" || echo >&2 "
  545. Warning: mksh has not yet been ported to or tested on your
  546. operating system '$TARGET_OS'$oswarn. If you can provide
  547. a shell account to the developer, this may improve; please
  548. drop us a success or failure notice or even send in diffs.
  549. "
  550. $e "$bi$me: Building the MirBSD Korn Shell$ao $ui$dstversion$ao"
  551. #
  552. # Begin of mirtoconf checks
  553. #
  554. $e $bi$me: Scanning for functions... please ignore any errors.$ao
  555. #
  556. # Compiler: which one?
  557. #
  558. # notes:
  559. # - ICC defines __GNUC__ too
  560. # - GCC defines __hpux too
  561. # - LLVM+clang defines __GNUC__ too
  562. # - nwcc defines __GNUC__ too
  563. CPP="$CC -E"
  564. $e ... which compiler seems to be used
  565. cat >conftest.c <<'EOF'
  566. #if defined(__ICC) || defined(__INTEL_COMPILER)
  567. ct=icc
  568. #elif defined(__xlC__) || defined(__IBMC__)
  569. ct=xlc
  570. #elif defined(__SUNPRO_C)
  571. ct=sunpro
  572. #elif defined(__ACK__)
  573. ct=ack
  574. #elif defined(__BORLANDC__)
  575. ct=bcc
  576. #elif defined(__WATCOMC__)
  577. ct=watcom
  578. #elif defined(__MWERKS__)
  579. ct=metrowerks
  580. #elif defined(__HP_cc)
  581. ct=hpcc
  582. #elif defined(__DECC) || (defined(__osf__) && !defined(__GNUC__))
  583. ct=dec
  584. #elif defined(__PGI)
  585. ct=pgi
  586. #elif defined(__DMC__)
  587. ct=dmc
  588. #elif defined(_MSC_VER)
  589. ct=msc
  590. #elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
  591. ct=adsp
  592. #elif defined(__IAR_SYSTEMS_ICC__)
  593. ct=iar
  594. #elif defined(SDCC)
  595. ct=sdcc
  596. #elif defined(__PCC__)
  597. ct=pcc
  598. #elif defined(__TenDRA__)
  599. ct=tendra
  600. #elif defined(__TINYC__)
  601. ct=tcc
  602. #elif defined(__llvm__) && defined(__clang__)
  603. ct=clang
  604. #elif defined(__NWCC__)
  605. ct=nwcc
  606. #elif defined(__GNUC__)
  607. ct=gcc
  608. #elif defined(_COMPILER_VERSION)
  609. ct=mipspro
  610. #elif defined(__sgi)
  611. ct=mipspro
  612. #elif defined(__hpux) || defined(__hpua)
  613. ct=hpcc
  614. #elif defined(__ultrix)
  615. ct=ucode
  616. #else
  617. ct=unknown
  618. #endif
  619. EOF
  620. ct=unknown
  621. vv ']' "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c | grep ct= | tr -d \\\\015 >x"
  622. sed 's/^/[ /' x
  623. eval `cat x`
  624. rmf x vv.out
  625. echo 'int main(void) { return (0); }' >conftest.c
  626. case $ct in
  627. ack)
  628. # work around "the famous ACK const bug"
  629. CPPFLAGS="-Dconst= $CPPFLAGS"
  630. ;;
  631. adsp)
  632. echo >&2 'Warning: Analog Devices C++ compiler for Blackfin, TigerSHARC
  633. and SHARC (21000) DSPs detected. This compiler has not yet
  634. been tested for compatibility with mksh. Continue at your
  635. own risk, please report success/failure to the developers.'
  636. ;;
  637. bcc)
  638. echo >&2 "Warning: Borland C++ Builder detected. This compiler might
  639. produce broken executables. Continue at your own risk,
  640. please report success/failure to the developers."
  641. ;;
  642. clang)
  643. # does not work with current "ccc" compiler driver
  644. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
  645. # this works, for now
  646. vv '|' "${CLANG-clang} -version"
  647. # ensure compiler and linker are in sync unless overridden
  648. case $CCC_CC:$CCC_LD in
  649. :*) ;;
  650. *:) CCC_LD=$CCC_CC; export CCC_LD ;;
  651. esac
  652. ;;
  653. dec)
  654. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
  655. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS"
  656. ;;
  657. dmc)
  658. echo >&2 "Warning: Digital Mars Compiler detected. When running under"
  659. echo >&2 " UWIN, mksh tends to be unstable due to the limitations"
  660. echo >&2 " of this platform. Continue at your own risk,"
  661. echo >&2 " please report success/failure to the developers."
  662. ;;
  663. gcc)
  664. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
  665. vv '|' 'echo `$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS \
  666. -dumpmachine` gcc`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN \
  667. $LIBS -dumpversion`'
  668. ;;
  669. hpcc)
  670. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
  671. ;;
  672. iar)
  673. echo >&2 'Warning: IAR Systems (http://www.iar.com) compiler for embedded
  674. systems detected. This unsupported compiler has not yet
  675. been tested for compatibility with mksh. Continue at your
  676. own risk, please report success/failure to the developers.'
  677. ;;
  678. icc)
  679. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
  680. ;;
  681. metrowerks)
  682. echo >&2 'Warning: Metrowerks C compiler detected. This has not yet
  683. been tested for compatibility with mksh. Continue at your
  684. own risk, please report success/failure to the developers.'
  685. ;;
  686. mipspro)
  687. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
  688. ;;
  689. msc)
  690. ccpr= # errorlevels are not reliable
  691. case $TARGET_OS in
  692. Interix)
  693. if [[ -n $C89_COMPILER ]]; then
  694. C89_COMPILER=`ntpath2posix -c "$C89_COMPILER"`
  695. else
  696. C89_COMPILER=CL.EXE
  697. fi
  698. if [[ -n $C89_LINKER ]]; then
  699. C89_LINKER=`ntpath2posix -c "$C89_LINKER"`
  700. else
  701. C89_LINKER=LINK.EXE
  702. fi
  703. vv '|' "$C89_COMPILER /HELP >&2"
  704. vv '|' "$C89_LINKER /LINK >&2"
  705. ;;
  706. esac
  707. ;;
  708. nwcc)
  709. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
  710. ;;
  711. pcc)
  712. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v"
  713. ;;
  714. pgi)
  715. echo >&2 'Warning: PGI detected. This unknown compiler has not yet
  716. been tested for compatibility with mksh. Continue at your
  717. own risk, please report success/failure to the developers.'
  718. ;;
  719. sdcc)
  720. echo >&2 'Warning: sdcc (http://sdcc.sourceforge.net), the small devices
  721. C compiler for embedded systems detected. This has not yet
  722. been tested for compatibility with mksh. Continue at your
  723. own risk, please report success/failure to the developers.'
  724. ;;
  725. sunpro)
  726. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
  727. ;;
  728. tcc)
  729. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v"
  730. ;;
  731. tendra)
  732. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V 2>&1 | \
  733. fgrep -i -e version -e release"
  734. ;;
  735. ucode)
  736. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
  737. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS"
  738. ;;
  739. watcom)
  740. echo >&2 'Warning: Watcom C Compiler detected. This compiler has not yet
  741. been tested for compatibility with mksh. Continue at your
  742. own risk, please report success/failure to the developers.'
  743. ;;
  744. xlc)
  745. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion"
  746. vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion=verbose"
  747. vv '|' "ld -V"
  748. ;;
  749. *)
  750. ct=unknown
  751. ;;
  752. esac
  753. case $cm in
  754. dragonegg|llvm)
  755. vv '|' "llc -version"
  756. ;;
  757. esac
  758. $e "$bi==> which compiler seems to be used...$ao $ui$ct$ao"
  759. rmf conftest.c conftest.o conftest a.out* a.exe* vv.out
  760. #
  761. # Compiler: works as-is, with -Wno-error and -Werror
  762. #
  763. save_NOWARN=$NOWARN
  764. NOWARN=
  765. DOWARN=
  766. ac_flags 0 compiler_works '' 'if the compiler works'
  767. test 1 = $HAVE_CAN_COMPILER_WORKS || exit 1
  768. HAVE_COMPILER_KNOWN=0
  769. test $ct = unknown || HAVE_COMPILER_KNOWN=1
  770. if ac_ifcpp 'if 0' compiler_fails '' \
  771. 'if the compiler does not fail correctly'; then
  772. save_CFLAGS=$CFLAGS
  773. : ${HAVE_CAN_DELEXE=x}
  774. if test $ct = dmc; then
  775. CFLAGS="$CFLAGS ${ccpl}/DELEXECUTABLE"
  776. ac_testn can_delexe compiler_fails 0 'for the /DELEXECUTABLE linker option' <<-EOF
  777. int main(void) { return (0); }
  778. EOF
  779. elif test $ct = dec; then
  780. CFLAGS="$CFLAGS ${ccpl}-non_shared"
  781. ac_testn can_delexe compiler_fails 0 'for the -non_shared linker option' <<-EOF
  782. int main(void) { return (0); }
  783. EOF
  784. else
  785. exit 1
  786. fi
  787. test 1 = $HAVE_CAN_DELEXE || CFLAGS=$save_CFLAGS
  788. ac_testn compiler_still_fails '' 'if the compiler still does not fail correctly' <<-EOF
  789. EOF
  790. test 1 = $HAVE_COMPILER_STILL_FAILS && exit 1
  791. fi
  792. if ac_ifcpp 'ifdef __TINYC__' couldbe_tcc '!' compiler_known 0 \
  793. 'if this could be tcc'; then
  794. ct=tcc
  795. CPP='cpp -D__TINYC__'
  796. fi
  797. if test $ct = sunpro; then
  798. test x"$save_NOWARN" = x"" && save_NOWARN='-errwarn=%none'
  799. ac_flags 0 errwarnnone "$save_NOWARN"
  800. test 1 = $HAVE_CAN_ERRWARNNONE || save_NOWARN=
  801. ac_flags 0 errwarnall "-errwarn=%all"
  802. test 1 = $HAVE_CAN_ERRWARNALL && DOWARN="-errwarn=%all"
  803. elif test $ct = hpcc; then
  804. save_NOWARN=
  805. DOWARN=+We
  806. elif test $ct = mipspro; then
  807. save_NOWARN=
  808. DOWARN="-diag_error 1-10000"
  809. elif test $ct = msc; then
  810. save_NOWARN="${ccpc}/w"
  811. DOWARN="${ccpc}/WX"
  812. elif test $ct = dmc; then
  813. save_NOWARN="${ccpc}-w"
  814. DOWARN="${ccpc}-wx"
  815. elif test $ct = bcc; then
  816. save_NOWARN="${ccpc}-w"
  817. DOWARN="${ccpc}-w!"
  818. elif test $ct = dec; then
  819. : -msg_* flags not used yet, or is -w2 correct?
  820. elif test $ct = xlc; then
  821. save_NOWARN=-qflag=i:e
  822. DOWARN=-qflag=i:i
  823. elif test $ct = tendra; then
  824. save_NOWARN=-w
  825. elif test $ct = ucode; then
  826. save_NOWARN=
  827. DOWARN=-w2
  828. else
  829. test x"$save_NOWARN" = x"" && save_NOWARN=-Wno-error
  830. ac_flags 0 wnoerror "$save_NOWARN"
  831. test 1 = $HAVE_CAN_WNOERROR || save_NOWARN=
  832. ac_flags 0 werror -Werror
  833. test 1 = $HAVE_CAN_WERROR && DOWARN=-Werror
  834. fi
  835. test $ct = icc && DOWARN="$DOWARN -wd1419"
  836. NOWARN=$save_NOWARN
  837. #
  838. # Compiler: extra flags (-O2 -f* -W* etc.)
  839. #
  840. i=`echo :"$orig_CFLAGS" | sed 's/^://' | tr -c -d $alll$allu$alln`
  841. # optimisation: only if orig_CFLAGS is empty
  842. test x"$i" = x"" && if test $ct = sunpro; then
  843. cat >x <<-'EOF'
  844. int main(void) { return (0); }
  845. #define __IDSTRING_CONCAT(l,p) __LINTED__ ## l ## _ ## p
  846. #define __IDSTRING_EXPAND(l,p) __IDSTRING_CONCAT(l,p)
  847. #define pad void __IDSTRING_EXPAND(__LINE__,x)(void) { }
  848. EOF
  849. yes pad | head -n 256 >>x
  850. ac_flags - 1 otwo -xO2 <x
  851. rmf x
  852. elif test $ct = hpcc; then
  853. phase=u
  854. ac_flags 1 otwo +O2
  855. phase=x
  856. elif test $ct = xlc; then
  857. ac_flags 1 othree "-O3 -qstrict"
  858. test 1 = $HAVE_CAN_OTHREE || ac_flags 1 otwo -O2
  859. elif test $ct = tcc || test $ct = tendra; then
  860. : no special optimisation
  861. else
  862. ac_flags 1 otwo -O2
  863. test 1 = $HAVE_CAN_OTWO || ac_flags 1 optimise -O
  864. fi
  865. # other flags: just add them if they are supported
  866. i=0
  867. if test $ct = gcc; then
  868. # The following tests run with -Werror (gcc only) if possible
  869. NOWARN=$DOWARN; phase=u
  870. ac_flags 1 fnostrictaliasing -fno-strict-aliasing
  871. ac_flags 1 fstackprotectorall -fstack-protector-all
  872. ac_flags 1 fwrapv -fwrapv
  873. test $cm = dragonegg && case " $CC $CFLAGS $LDFLAGS " in
  874. *\ -fplugin=*dragonegg*) ;;
  875. *) ac_flags 1 fplugin_dragonegg -fplugin=dragonegg ;;
  876. esac
  877. if test $cm = lto; then
  878. fv=0
  879. checks='1 2 3 4 5 6 7 8'
  880. elif test $cm = combine; then
  881. fv=0
  882. checks='7 8'
  883. else
  884. fv=1
  885. fi
  886. test $fv = 1 || for what in $checks; do
  887. test $fv = 1 && break
  888. case $what in
  889. 1) t_cflags='-flto=jobserver'
  890. t_ldflags='-fuse-linker-plugin'
  891. t_use=1 t_name=fltojs_lp ;;
  892. 2) t_cflags='-flto=jobserver' t_ldflags=''
  893. t_use=1 t_name=fltojs_nn ;;
  894. 3) t_cflags='-flto=jobserver'
  895. t_ldflags='-fno-use-linker-plugin -fwhole-program'
  896. t_use=1 t_name=fltojs_np ;;
  897. 4) t_cflags='-flto'
  898. t_ldflags='-fuse-linker-plugin'
  899. t_use=1 t_name=fltons_lp ;;
  900. 5) t_cflags='-flto' t_ldflags=''
  901. t_use=1 t_name=fltons_nn ;;
  902. 6) t_cflags='-flto'
  903. t_ldflags='-fno-use-linker-plugin -fwhole-program'
  904. t_use=1 t_name=fltons_np ;;
  905. 7) t_cflags='-fwhole-program --combine' t_ldflags=''
  906. t_use=0 t_name=combine cm=combine ;;
  907. 8) fv=1 cm=normal ;;
  908. esac
  909. test $fv = 1 && break
  910. ac_flags $t_use $t_name "$t_cflags" \
  911. "if gcc supports $t_cflags $t_ldflags" "$t_ldflags"
  912. done
  913. i=1
  914. elif test $ct = icc; then
  915. ac_flags 1 fnobuiltinsetmode -fno-builtin-setmode
  916. ac_flags 1 fnostrictaliasing -fno-strict-aliasing
  917. ac_flags 1 fstacksecuritycheck -fstack-security-check
  918. i=1
  919. elif test $ct = sunpro; then
  920. phase=u
  921. ac_flags 1 v -v
  922. ac_flags 1 xc99 -xc99 'for support of ISO C99'
  923. ac_flags 1 ipo -xipo 'for cross-module optimisation'
  924. phase=x
  925. elif test $ct = hpcc; then
  926. phase=u
  927. ac_flags 1 agcc -Agcc 'for support of GCC extensions'
  928. ac_flags 1 ac99 -AC99 'for support of ISO C99'
  929. phase=x
  930. elif test $ct = dec; then
  931. ac_flags 0 verb -verbose
  932. ac_flags 1 rodata -readonly_strings
  933. elif test $ct = dmc; then
  934. ac_flags 1 decl "${ccpc}-r" 'for strict prototype checks'
  935. ac_flags 1 schk "${ccpc}-s" 'for stack overflow checking'
  936. elif test $ct = bcc; then
  937. ac_flags 1 strpool "${ccpc}-d" 'if string pooling can be enabled'
  938. elif test $ct = mipspro; then
  939. ac_flags 1 xc99 -c99 'for support of ISO C99'
  940. ac_flags 1 fullwarn -fullwarn 'for remark output support'
  941. elif test $ct = msc; then
  942. ac_flags 1 strpool "${ccpc}/GF" 'if string pooling can be enabled'
  943. echo 'int main(void) { char test[64] = ""; return (*test); }' >x
  944. ac_flags - 1 stackon "${ccpc}/GZ" 'if stack checks can be enabled' <x
  945. ac_flags - 1 stckall "${ccpc}/Ge" 'stack checks for all functions' <x
  946. ac_flags - 1 secuchk "${ccpc}/GS" 'for compiler security checks' <x
  947. rmf x
  948. ac_flags 1 wall "${ccpc}/Wall" 'to enable all warnings'
  949. ac_flags 1 wp64 "${ccpc}/Wp64" 'to enable 64-bit warnings'
  950. elif test $ct = xlc; then
  951. ac_flags 1 x99 -qlanglvl=extc99
  952. test 1 = $HAVE_CAN_X99 || ac_flags 1 c99 -qlanglvl=stdc99
  953. ac_flags 1 rodata "-qro -qroconst -qroptr"
  954. ac_flags 1 rtcheck -qcheck=all
  955. ac_flags 1 rtchkc -qextchk
  956. ac_flags 1 wformat "-qformat=all -qformat=nozln"
  957. #ac_flags 1 wp64 -qwarn64 # too verbose for now
  958. elif test $ct = tendra; then
  959. ac_flags 0 ysystem -Ysystem
  960. test 1 = $HAVE_CAN_YSYSTEM && CPPFLAGS="-Ysystem $CPPFLAGS"
  961. ac_flags 1 extansi -Xa
  962. elif test $ct = tcc; then
  963. ac_flags 1 boundschk -b
  964. elif test $ct = clang; then
  965. i=1
  966. elif test $ct = nwcc; then
  967. i=1
  968. #broken# ac_flags 1 ssp -stackprotect
  969. fi
  970. # flags common to a subset of compilers (run with -Werror on gcc)
  971. if test 1 = $i; then
  972. ac_flags 1 stdg99 -std=gnu99 'for support of ISO C99 + GCC extensions'
  973. test 1 = $HAVE_CAN_STDG99 || \
  974. ac_flags 1 stdc99 -std=c99 'for support of ISO C99'
  975. ac_flags 1 wall -Wall
  976. fi
  977. phase=x
  978. # The following tests run with -Werror or similar (all compilers) if possible
  979. NOWARN=$DOWARN
  980. test $ct = pcc && phase=u
  981. #
  982. # Compiler: check for stuff that only generates warnings
  983. #
  984. ac_test attribute_bounded '' 'for __attribute__((__bounded__))' <<-'EOF'
  985. #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
  986. /* force a failure: TenDRA and gcc 1.42 have false positive here */
  987. int main(void) { return (thiswillneverbedefinedIhope()); }
  988. #else
  989. #include <string.h>
  990. #undef __attribute__
  991. int xcopy(const void *, void *, size_t)
  992. __attribute__((__bounded__ (__buffer__, 1, 3)))
  993. __attribute__((__bounded__ (__buffer__, 2, 3)));
  994. int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); }
  995. int xcopy(const void *s, void *d, size_t n) {
  996. memmove(d, s, n); return ((int)n);
  997. }
  998. #endif
  999. EOF
  1000. ac_test attribute_format '' 'for __attribute__((__format__))' <<-'EOF'
  1001. #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
  1002. /* force a failure: TenDRA and gcc 1.42 have false positive here */
  1003. int main(void) { return (thiswillneverbedefinedIhope()); }
  1004. #else
  1005. #define fprintf printfoo
  1006. #include <stdio.h>
  1007. #undef __attribute__
  1008. #undef fprintf
  1009. extern int fprintf(FILE *, const char *format, ...)
  1010. __attribute__((__format__ (__printf__, 2, 3)));
  1011. int main(int ac, char **av) { return (fprintf(stderr, "%s%d", *av, ac)); }
  1012. #endif
  1013. EOF
  1014. ac_test attribute_nonnull '' 'for __attribute__((__nonnull__))' <<-'EOF'
  1015. #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
  1016. /* force a failure: TenDRA and gcc 1.42 have false positive here */
  1017. int main(void) { return (thiswillneverbedefinedIhope()); }
  1018. #else
  1019. int foo(char *s1, char *s2) __attribute__((__nonnull__));
  1020. int bar(char *s1, char *s2) __attribute__((__nonnull__ (1, 2)));
  1021. int baz(char *s) __attribute__((__nonnull__ (1)));
  1022. int foo(char *s1, char *s2) { return (bar(s2, s1)); }
  1023. int bar(char *s1, char *s2) { return (baz(s1) - baz(s2)); }
  1024. int baz(char *s) { return (*s); }
  1025. int main(int ac, char **av) { return (ac == foo(av[0], av[ac-1])); }
  1026. #endif
  1027. EOF
  1028. ac_test attribute_noreturn '' 'for __attribute__((__noreturn__))' <<-'EOF'
  1029. #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
  1030. /* force a failure: TenDRA and gcc 1.42 have false positive here */
  1031. int main(void) { return (thiswillneverbedefinedIhope()); }
  1032. #else
  1033. #include <stdlib.h>
  1034. #undef __attribute__
  1035. void fnord(void) __attribute__((__noreturn__));
  1036. int main(void) { fnord(); }
  1037. void fnord(void) { exit(0); }
  1038. #endif
  1039. EOF
  1040. ac_test attribute_unused '' 'for __attribute__((__unused__))' <<-'EOF'
  1041. #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
  1042. /* force a failure: TenDRA and gcc 1.42 have false positive here */
  1043. int main(void) { return (thiswillneverbedefinedIhope()); }
  1044. #else
  1045. int main(int ac __attribute__((__unused__)), char **av
  1046. __attribute__((__unused__))) { return (0); }
  1047. #endif
  1048. EOF
  1049. ac_test attribute_used '' 'for __attribute__((__used__))' <<-'EOF'
  1050. #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
  1051. /* force a failure: TenDRA and gcc 1.42 have false positive here */
  1052. int main(void) { return (thiswillneverbedefinedIhope()); }
  1053. #else
  1054. static const char fnord[] __attribute__((__used__)) = "42";
  1055. int main(void) { return (0); }
  1056. #endif
  1057. EOF
  1058. # End of tests run with -Werror
  1059. NOWARN=$save_NOWARN
  1060. phase=x
  1061. #
  1062. # mksh: flavours (full/small mksh, omit certain stuff)
  1063. #
  1064. if ac_ifcpp 'ifdef MKSH_SMALL' isset_MKSH_SMALL '' \
  1065. "if a reduced-feature mksh is requested"; then
  1066. #XXX this sucks; fix it for *all* compilers
  1067. case $ct in
  1068. clang|icc|nwcc)
  1069. ac_flags 1 fnoinline -fno-inline
  1070. ;;
  1071. gcc)
  1072. NOWARN=$DOWARN; phase=u
  1073. ac_flags 1 fnoinline -fno-inline
  1074. NOWARN=$save_NOWARN; phase=x
  1075. ;;
  1076. sunpro)
  1077. ac_flags 1 fnoinline -xinline=
  1078. ;;
  1079. xlc)
  1080. ac_flags 1 fnoinline -qnoinline
  1081. ;;
  1082. esac
  1083. : ${HAVE_NICE=0}
  1084. : ${HAVE_PERSISTENT_HISTORY=0}
  1085. check_categories="$check_categories smksh"
  1086. HAVE_ISSET_MKSH_CONSERVATIVE_FDS=1 # from sh.h
  1087. fi
  1088. ac_ifcpp 'ifdef MKSH_BINSHREDUCED' isset_MKSH_BINSHREDUCED '' \
  1089. "if a reduced-feature sh is requested" && \
  1090. check_categories="$check_categories binsh"
  1091. ac_ifcpp 'ifdef MKSH_UNEMPLOYED' isset_MKSH_UNEMPLOYED '' \
  1092. "if mksh will be built without job control" && \
  1093. check_categories="$check_categories arge"
  1094. ac_ifcpp 'ifdef MKSH_NOPROSPECTOFWORK' isset_MKSH_NOPROSPECTOFWORK '' \
  1095. "if mksh will be built without job signals" && \
  1096. check_categories="$check_categories arge nojsig"
  1097. ac_ifcpp 'ifdef MKSH_ASSUME_UTF8' isset_MKSH_ASSUME_UTF8 '' \
  1098. 'if the default UTF-8 mode is specified' && : ${HAVE_SETLOCALE_CTYPE=0}
  1099. ac_ifcpp 'ifdef MKSH_CONSERVATIVE_FDS' isset_MKSH_CONSERVATIVE_FDS '' \
  1100. 'if traditional/conservative fd use is requested' && \
  1101. check_categories="$check_categories convfds"
  1102. #
  1103. # Environment: headers
  1104. #
  1105. ac_header sys/bsdtypes.h
  1106. ac_header sys/file.h sys/types.h
  1107. ac_header sys/mkdev.h sys/types.h
  1108. ac_header sys/mman.h sys/types.h
  1109. ac_header sys/param.h
  1110. ac_header sys/select.h sys/types.h
  1111. ac_header sys/sysmacros.h
  1112. ac_header bstring.h
  1113. ac_header grp.h sys/types.h
  1114. ac_header libgen.h
  1115. ac_header libutil.h sys/types.h
  1116. ac_header paths.h
  1117. ac_header stdint.h stdarg.h
  1118. # include strings.h only if compatible with string.h
  1119. ac_header strings.h sys/types.h string.h
  1120. ac_header ulimit.h sys/types.h
  1121. ac_header values.h
  1122. #
  1123. # check whether whatever we use for the final link will succeed
  1124. #
  1125. if test $cm = makefile; then
  1126. : nothing to check
  1127. else
  1128. HAVE_LINK_WORKS=x
  1129. ac_testinit link_works '' 'checking if the final link command may succeed'
  1130. fv=1
  1131. cat >conftest.c <<-'EOF'
  1132. #define EXTERN
  1133. #define MKSH_INCLUDES_ONLY
  1134. #include "sh.h"
  1135. __RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.488 2011/10/07 19:51:41 tg Exp $");
  1136. int main(void) { printf("Hello, World!\n"); return (0); }
  1137. EOF
  1138. case $cm in
  1139. llvm)
  1140. v "$CC $CFLAGS $CPPFLAGS $NOWARN -emit-llvm -c conftest.c" || fv=0
  1141. rmf mksh.s
  1142. test $fv = 0 || v "llvm-link -o - conftest.o | opt $optflags | llc -o mksh.s" || fv=0
  1143. test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn mksh.s $LIBS $ccpr"
  1144. ;;
  1145. dragonegg)
  1146. v "$CC $CFLAGS $CPPFLAGS $NOWARN -S -flto conftest.c" || fv=0
  1147. test $fv = 0 || v "mv conftest.s conftest.ll"
  1148. test $fv = 0 || v "llvm-as conftest.ll" || fv=0
  1149. rmf mksh.s
  1150. test $fv = 0 || v "llvm-link -o - conftest.bc | opt $optflags | llc -o mksh.s" || fv=0
  1151. test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn mksh.s $LIBS $ccpr"
  1152. ;;
  1153. combine)
  1154. v "$CC $CFLAGS $CPPFLAGS $LDFLAGS -fwhole-program --combine $NOWARN -o $tcfn conftest.c $LIBS $ccpr"
  1155. ;;
  1156. lto|normal)
  1157. cm=normal
  1158. v "$CC $CFLAGS $CPPFLAGS $NOWARN -c conftest.c" || fv=0
  1159. test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn conftest.o $LIBS $ccpr"
  1160. ;;
  1161. esac
  1162. test -f $tcfn || fv=0
  1163. ac_testdone
  1164. test $fv = 1 || exit 1
  1165. fi
  1166. #
  1167. # Environment: definitions
  1168. #
  1169. echo '#include <sys/types.h>
  1170. /* check that off_t can represent 2^63-1 correctly, thx FSF */
  1171. #define LARGE_OFF_T (((off_t)1 << 62) - 1 + ((off_t)1 << 62))
  1172. int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 &&
  1173. LARGE_OFF_T % 2147483647 == 1) ? 1 : -1];
  1174. int main(void) { return (0); }' >lft.c
  1175. ac_testn can_lfs '' "for large file support" <lft.c
  1176. save_CPPFLAGS=$CPPFLAGS
  1177. add_cppflags -D_FILE_OFFSET_BITS=64
  1178. ac_testn can_lfs_sus '!' can_lfs 0 "... with -D_FILE_OFFSET_BITS=64" <lft.c
  1179. if test 0 = $HAVE_CAN_LFS_SUS; then
  1180. CPPFLAGS=$save_CPPFLAGS
  1181. add_cppflags -D_LARGE_FILES=1
  1182. ac_testn can_lfs_aix '!' can_lfs 0 "... with -D_LARGE_FILES=1" <lft.c
  1183. test 1 = $HAVE_CAN_LFS_AIX || CPPFLAGS=$save_CPPFLAGS
  1184. fi
  1185. rmf lft* # end of large file support test
  1186. #
  1187. # Environment: types
  1188. #
  1189. ac_test can_inttypes '!' stdint_h 1 "for standard 32-bit integer types" <<-'EOF'
  1190. #include <sys/types.h>
  1191. #include <stddef.h>
  1192. int main(int ac, char **av) { return ((uint32_t)(ptrdiff_t)*av + (int32_t)ac); }
  1193. EOF
  1194. ac_test can_ucbints '!' can_inttypes 1 "for UCB 32-bit integer types" <<-'EOF'
  1195. #include <sys/types.h>
  1196. #include <stddef.h>
  1197. int main(int ac, char **av) { return ((u_int32_t)(ptrdiff_t)*av + (int32_t)ac); }
  1198. EOF
  1199. ac_test can_int8type '!' stdint_h 1 "for standard 8-bit integer type" <<-'EOF'
  1200. #include <sys/types.h>
  1201. #include <stddef.h>
  1202. int main(int ac, char **av) { return ((uint8_t)(ptrdiff_t)av[ac]); }
  1203. EOF
  1204. ac_test can_ucbint8 '!' can_int8type 1 "for UCB 8-bit integer type" <<-'EOF'
  1205. #include <sys/types.h>
  1206. #include <stddef.h>
  1207. int main(int ac, char **av) { return ((u_int8_t)(ptrdiff_t)av[ac]); }
  1208. EOF
  1209. ac_test rlim_t <<-'EOF'
  1210. #include <sys/types.h>
  1211. #include <sys/time.h>
  1212. #include <sys/resource.h>
  1213. #include <unistd.h>
  1214. int main(void) { return ((int)(rlim_t)0); }
  1215. EOF
  1216. # only testn: added later below
  1217. ac_testn sig_t <<-'EOF'
  1218. #include <sys/types.h>
  1219. #include <signal.h>
  1220. #include <stddef.h>
  1221. int main(void) { return ((int)(ptrdiff_t)(sig_t)(ptrdiff_t)kill(0,0)); }
  1222. EOF
  1223. ac_testn sighandler_t '!' sig_t 0 <<-'EOF'
  1224. #include <sys/types.h>
  1225. #include <signal.h>
  1226. #include <stddef.h>
  1227. int main(void) { return ((int)(ptrdiff_t)(sighandler_t)(ptrdiff_t)kill(0,0)); }
  1228. EOF
  1229. if test 1 = $HAVE_SIGHANDLER_T; then
  1230. add_cppflags -Dsig_t=sighandler_t
  1231. HAVE_SIG_T=1
  1232. fi
  1233. ac_testn __sighandler_t '!' sig_t 0 <<-'EOF'
  1234. #include <sys/types.h>
  1235. #include <signal.h>
  1236. #include <stddef.h>
  1237. int main(void) { return ((int)(ptrdiff_t)(__sighandler_t)(ptrdiff_t)kill(0,0)); }
  1238. EOF
  1239. if test 1 = $HAVE___SIGHANDLER_T; then
  1240. add_cppflags -Dsig_t=__sighandler_t
  1241. HAVE_SIG_T=1
  1242. fi
  1243. test 1 = $HAVE_SIG_T || add_cppflags -Dsig_t=nosig_t
  1244. ac_cppflags SIG_T
  1245. #
  1246. # Environment: signals
  1247. #
  1248. test x"NetBSD" = x"$TARGET_OS" && $e Ignore the compatibility warning.
  1249. for what in name list; do
  1250. uwhat=`upper $what`
  1251. ac_testn sys_sig$what '' "the sys_sig${what}[] array" <<-EOF
  1252. extern const char *const sys_sig${what}[];
  1253. int main(void) { return (sys_sig${what}[0][0]); }
  1254. EOF
  1255. ac_testn _sys_sig$what '!' sys_sig$what 0 "the _sys_sig${what}[] array" <<-EOF
  1256. extern const char *const _sys_sig${what}[];
  1257. int main(void) { return (_sys_sig${what}[0][0]); }
  1258. EOF
  1259. eval uwhat_v=\$HAVE__SYS_SIG$uwhat
  1260. if test 1 = "$uwhat_v"; then
  1261. add_cppflags -Dsys_sig$what=_sys_sig$what
  1262. eval HAVE_SYS_SIG$uwhat=1
  1263. fi
  1264. ac_cppflags SYS_SIG$uwhat
  1265. done
  1266. ac_test strsignal '!' sys_siglist 0 <<-'EOF'
  1267. #include <string.h>
  1268. #include <signal.h>
  1269. int main(void) { return (strsignal(1)[0]); }
  1270. EOF
  1271. #
  1272. # Environment: library functions
  1273. #
  1274. ac_testn flock_ex '' 'flock and mmap' <<-'EOF'
  1275. #include <sys/types.h>
  1276. #if HAVE_SYS_FILE_H
  1277. #include <sys/file.h>
  1278. #endif
  1279. #if HAVE_SYS_MMAN_H
  1280. #include <sys/mman.h>
  1281. #endif
  1282. #include <fcntl.h>
  1283. #include <stdlib.h>
  1284. int main(void) { return ((void *)mmap(NULL, (size_t)flock(0, LOCK_EX),
  1285. PROT_READ, MAP_PRIVATE, 0, (off_t)0) == (void *)NULL ? 1 :
  1286. munmap(NULL, 0)); }
  1287. EOF
  1288. ac_test getrusage <<-'EOF'
  1289. #define MKSH_INCLUDES_ONLY
  1290. #include "sh.h"
  1291. int main(void) {
  1292. struct rusage ru;
  1293. return (getrusage(RUSAGE_SELF, &ru) +
  1294. getrusage(RUSAGE_CHILDREN, &ru));
  1295. }
  1296. EOF
  1297. ac_test killpg <<-'EOF'
  1298. #include <signal.h>
  1299. int main(int ac, char *av[]) { return (av[0][killpg(123, ac)]); }
  1300. EOF
  1301. ac_test mknod '' 'if to use mknod(), makedev() and friends' <<-'EOF'
  1302. #define MKSH_INCLUDES_ONLY
  1303. #include "sh.h"
  1304. int main(int ac, char *av[]) {
  1305. dev_t dv;
  1306. dv = makedev((unsigned int)ac, (unsigned int)av[0][0]);
  1307. return (mknod(av[0], (mode_t)0, dv) ? (int)major(dv) :
  1308. (int)minor(dv));
  1309. }
  1310. EOF
  1311. ac_test mkstemp <<-'EOF'
  1312. #include <stdlib.h>
  1313. #include <unistd.h>
  1314. int main(void) { char tmpl[] = "X"; return (mkstemp(tmpl)); }
  1315. EOF
  1316. ac_test nice <<-'EOF'
  1317. #include <unistd.h>
  1318. int main(void) { return (nice(4)); }
  1319. EOF
  1320. ac_test revoke <<-'EOF'
  1321. #include <sys/types.h>
  1322. #if HAVE_LIBUTIL_H
  1323. #include <libutil.h>
  1324. #endif
  1325. #include <unistd.h>
  1326. int main(int ac, char *av[]) { return (ac + revoke(av[0])); }
  1327. EOF
  1328. ac_test setlocale_ctype '' 'setlocale(LC_CTYPE, "")' <<-'EOF'
  1329. #include <locale.h>
  1330. #include <stddef.h>
  1331. int main(void) { return ((int)(ptrdiff_t)(void *)setlocale(LC_CTYPE, "")); }
  1332. EOF
  1333. ac_test langinfo_codeset setlocale_ctype 0 'nl_langinfo(CODESET)' <<-'EOF'
  1334. #include <langinfo.h>
  1335. #include <stddef.h>
  1336. int main(void) { return ((int)(ptrdiff_t)(void *)nl_langinfo(CODESET)); }
  1337. EOF
  1338. ac_test select <<-'EOF'
  1339. #include <sys/types.h>
  1340. #include <sys/time.h>
  1341. #if HAVE_SYS_BSDTYPES_H
  1342. #include <sys/bsdtypes.h>
  1343. #endif
  1344. #if HAVE_SYS_SELECT_H
  1345. #include <sys/select.h>
  1346. #endif
  1347. #if HAVE_BSTRING_H
  1348. #include <bstring.h>
  1349. #endif
  1350. #include <stddef.h>
  1351. #include <stdlib.h>
  1352. #include <string.h>
  1353. #if HAVE_STRINGS_H
  1354. #include <strings.h>
  1355. #endif
  1356. #include <unistd.h>
  1357. int main(void) {
  1358. struct timeval tv = { 1, 200000 };
  1359. fd_set fds; FD_ZERO(&fds); FD_SET(0, &fds);
  1360. return (select(FD_SETSIZE, &fds, NULL, NULL, &tv));
  1361. }
  1362. EOF
  1363. ac_test setresugid <<-'EOF'
  1364. #include <sys/types.h>
  1365. #include <unistd.h>
  1366. int main(void) { setresuid(0,0,0); return (setresgid(0,0,0)); }
  1367. EOF
  1368. ac_test setgroups setresugid 0 <<-'EOF'
  1369. #include <sys/types.h>
  1370. #if HAVE_GRP_H
  1371. #include <grp.h>
  1372. #endif
  1373. #include <unistd.h>
  1374. int main(void) { gid_t gid = 0; return (setgroups(0, &gid)); }
  1375. EOF
  1376. ac_test strcasestr <<-'EOF'
  1377. #include <sys/types.h>
  1378. #include <stddef.h>
  1379. #include <string.h>
  1380. #if HAVE_STRINGS_H
  1381. #include <strings.h>
  1382. #endif
  1383. int main(int ac, char *av[]) {
  1384. return ((int)(ptrdiff_t)(void *)strcasestr(*av, av[ac]));
  1385. }
  1386. EOF
  1387. ac_test strlcpy <<-'EOF'
  1388. #include <string.h>
  1389. int main(int ac, char *av[]) { return (strlcpy(*av, av[1],
  1390. (size_t)ac)); }
  1391. EOF
  1392. #
  1393. # check headers for declarations
  1394. #
  1395. save_CC=$CC; save_LDFLAGS=$LDFLAGS; save_LIBS=$LIBS
  1396. CC="$CC -c -o $tcfn"; LDFLAGS=; LIBS=
  1397. ac_test '!' flock_decl flock_ex 1 'if flock() does not need to be declared' <<-'EOF'
  1398. #define MKSH_INCLUDES_ONLY
  1399. #include "sh.h"
  1400. long flock(void); /* this clashes if defined before */
  1401. int main(void) { return ((int)flock()); }
  1402. EOF
  1403. ac_test '!' revoke_decl revoke 1 'if revoke() does not need to be declared' <<-'EOF'
  1404. #define MKSH_INCLUDES_ONLY
  1405. #include "sh.h"
  1406. long revoke(void); /* this clashes if defined before */
  1407. int main(void) { return ((int)revoke()); }
  1408. EOF
  1409. ac_test sys_siglist_decl sys_siglist 1 'if sys_siglist[] does not need to be declared' <<-'EOF'
  1410. #define MKSH_INCLUDES_ONLY
  1411. #include "sh.h"
  1412. int main(void) { return (sys_siglist[0][0]); }
  1413. EOF
  1414. CC=$save_CC; LDFLAGS=$save_LDFLAGS; LIBS=$save_LIBS
  1415. #
  1416. # other checks
  1417. #
  1418. fd='if to use persistent history'
  1419. ac_cache PERSISTENT_HISTORY || test 0 = $HAVE_FLOCK_EX || fv=1
  1420. test 1 = $fv || check_categories="$check_categories no-histfile"
  1421. ac_testdone
  1422. ac_cppflags
  1423. #
  1424. # Compiler: Praeprocessor (only if needed)
  1425. #
  1426. test 0 = $HAVE_SYS_SIGNAME && if ac_testinit cpp_dd '' \
  1427. 'checking if the C Preprocessor supports -dD'; then
  1428. echo '#define foo bar' >conftest.c
  1429. vv ']' "$CPP $CFLAGS $CPPFLAGS $NOWARN -dD conftest.c >x"
  1430. grep '#define foo bar' x >/dev/null 2>&1 && fv=1
  1431. rmf conftest.c x vv.out
  1432. ac_testdone
  1433. fi
  1434. #
  1435. # End of mirtoconf checks
  1436. #
  1437. $e ... done.
  1438. # Some operating systems have ancient versions of ed(1) writing
  1439. # the character count to standard output; cope for that
  1440. echo wq >x
  1441. ed x <x 2>/dev/null | grep 3 >/dev/null 2>&1 && \
  1442. check_categories="$check_categories $oldish_ed"
  1443. rmf x vv.out
  1444. if test 0 = $HAVE_SYS_SIGNAME; then
  1445. if test 1 = $HAVE_CPP_DD; then
  1446. $e Generating list of signal names...
  1447. else
  1448. $e No list of signal names available via cpp. Falling back...
  1449. fi
  1450. sigseen=:
  1451. echo '#include <signal.h>
  1452. #ifndef NSIG
  1453. #if defined(_NSIG)
  1454. #define NSIG _NSIG
  1455. #elif defined(SIGMAX)
  1456. #define NSIG (SIGMAX+1)
  1457. #endif
  1458. #endif
  1459. mksh_cfg: NSIG' >conftest.c
  1460. NSIG=`vq "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c" | \
  1461. grep mksh_cfg: | sed 's/^mksh_cfg:[ ]*\([0-9x ()+-]*\).*$/\1/'`
  1462. case $NSIG in
  1463. *[\ \(\)+-]*) NSIG=`awk "BEGIN { print $NSIG }"` ;;
  1464. esac
  1465. printf=printf
  1466. (printf hallo) >/dev/null 2>&1 || printf=echo
  1467. test $printf = echo || NSIG=`printf %d "$NSIG" 2>/dev/null`
  1468. $printf "NSIG=$NSIG ... "
  1469. sigs="ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INFO INT IO IOT"
  1470. sigs="$sigs KILL LOST PIPE PROF PWR QUIT RESV SAK SEGV STOP SYS TERM"
  1471. sigs="$sigs TRAP TSTP TTIN TTOU URG USR1 USR2 VTALRM WINCH XCPU XFSZ"
  1472. test 1 = $HAVE_CPP_DD && test $NSIG -gt 1 && sigs="$sigs "`vq \
  1473. "$CPP $CFLAGS $CPPFLAGS $NOWARN -dD conftest.c" | \
  1474. grep '[ ]SIG[A-Z0-9]*[ ]' | \
  1475. sed 's/^\(.*[ ]SIG\)\([A-Z0-9]*\)\([ ].*\)$/\2/' | sort`
  1476. test $NSIG -gt 1 || sigs=
  1477. for name in $sigs; do
  1478. echo '#include <signal.h>' >conftest.c
  1479. echo mksh_cfg: SIG$name >>conftest.c
  1480. vq "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c" | \
  1481. grep mksh_cfg: | \
  1482. sed 's/^mksh_cfg:[ ]*\([0-9x]*\).*$/\1:'$name/
  1483. done | grep -v '^:' | sed 's/:/ /g' | while read nr name; do
  1484. test $printf = echo || nr=`printf %d "$nr" 2>/dev/null`
  1485. test $nr -gt 0 && test $nr -le $NSIG || continue
  1486. case $sigseen in
  1487. *:$nr:*) ;;
  1488. *) echo " { \"$name\", $nr },"
  1489. sigseen=$sigseen$nr:
  1490. $printf "$name=$nr " >&2
  1491. ;;
  1492. esac
  1493. done 2>&1 >signames.inc
  1494. rmf conftest.c
  1495. $e done.
  1496. fi
  1497. addsrcs '!' HAVE_STRLCPY strlcpy.c
  1498. addsrcs USE_PRINTF_BUILTIN printf.c
  1499. test 1 = "$USE_PRINTF_BUILTIN" && add_cppflags -DMKSH_PRINTF_BUILTIN
  1500. test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose"
  1501. $e $bi$me: Finished configuration testing, now producing output.$ao
  1502. files=
  1503. objs=
  1504. sp=
  1505. case $curdir in
  1506. *\ *) echo "#!./mksh" >test.sh ;;
  1507. *) echo "#!$curdir/mksh" >test.sh ;;
  1508. esac
  1509. cat >>test.sh <<-EOF
  1510. LC_ALL=C PATH='$PATH'; export LC_ALL PATH
  1511. test -n "\$KSH_VERSION" || exit 1
  1512. set -A check_categories -- $check_categories
  1513. pflag='$curdir/mksh'
  1514. sflag='$srcdir/check.t'
  1515. usee=0 Pflag=0 uset=0 vflag=0 xflag=0
  1516. while getopts "C:e:Pp:s:t:v" ch; do case \$ch {
  1517. (C) check_categories[\${#check_categories[*]}]=\$OPTARG ;;
  1518. (e) usee=1; eflag=\$OPTARG ;;
  1519. (P) Pflag=1 ;;
  1520. (p) pflag=\$OPTARG ;;
  1521. (s) sflag=\$OPTARG ;;
  1522. (t) uset=1; tflag=\$OPTARG ;;
  1523. (v) vflag=1 ;;
  1524. (*) xflag=1 ;;
  1525. }
  1526. done
  1527. shift \$((OPTIND - 1))
  1528. set -A args -- '$srcdir/check.pl' -p "\$pflag" -s "\$sflag"
  1529. x=
  1530. for y in "\${check_categories[@]}"; do
  1531. x=\$x,\$y
  1532. done
  1533. if [[ -n \$x ]]; then
  1534. args[\${#args[*]}]=-C
  1535. args[\${#args[*]}]=\${x#,}
  1536. fi
  1537. if (( usee )); then
  1538. args[\${#args[*]}]=-e
  1539. args[\${#args[*]}]=\$eflag
  1540. fi
  1541. (( Pflag )) && args[\${#args[*]}]=-P
  1542. if (( uset )); then
  1543. args[\${#args[*]}]=-t
  1544. args[\${#args[*]}]=\$tflag
  1545. fi
  1546. (( vflag )) && args[\${#args[*]}]=-v
  1547. (( xflag )) && args[\${#args[*]}]=-x # force usage by synerr
  1548. print Testing mksh for conformance:
  1549. fgrep MirOS: '$srcdir/check.t'
  1550. fgrep MIRBSD '$srcdir/check.t'
  1551. print "This shell is actually:\\n\\t\$KSH_VERSION"
  1552. print 'test.sh built for mksh $dstversion'
  1553. cstr='\$os = defined \$^O ? \$^O : "unknown";'
  1554. cstr="\$cstr"'print \$os . ", Perl version " . \$];'
  1555. for perli in \$PERL perl5 perl no; do
  1556. [[ \$perli = no ]] && exit 1
  1557. perlos=\$(\$perli -e "\$cstr") 2>/dev/null || continue
  1558. print "Perl interpreter '\$perli' running on '\$perlos'"
  1559. [[ -n \$perlos ]] && break
  1560. done
  1561. exec \$perli "\${args[@]}" "\$@"$tsts
  1562. EOF
  1563. chmod 755 test.sh
  1564. if test $cm = llvm; then
  1565. emitbc="-emit-llvm -c"
  1566. elif test $cm = dragonegg; then
  1567. emitbc="-S -flto"
  1568. else
  1569. emitbc=-c
  1570. fi
  1571. echo set -x >Rebuild.sh
  1572. for file in $SRCS; do
  1573. op=`echo x"$file" | sed 's/^x\(.*\)\.c$/\1./'`
  1574. test -f $file || file=$srcdir/$file
  1575. files="$files$sp$file"
  1576. sp=' '
  1577. echo "$CC $CFLAGS $CPPFLAGS $emitbc $file || exit 1" >>Rebuild.sh
  1578. if test $cm = dragonegg; then
  1579. echo "mv ${op}s ${op}ll" >>Rebuild.sh
  1580. echo "llvm-as ${op}ll || exit 1" >>Rebuild.sh
  1581. objs="$objs$sp${op}bc"
  1582. else
  1583. objs="$objs$sp${op}o"
  1584. fi
  1585. done
  1586. case $cm in
  1587. dragonegg|llvm)
  1588. echo "rm -f mksh.s" >>Rebuild.sh
  1589. echo "llvm-link -o - $objs | opt $optflags | llc -o mksh.s" >>Rebuild.sh
  1590. lobjs=mksh.s
  1591. ;;
  1592. *)
  1593. lobjs=$objs
  1594. ;;
  1595. esac
  1596. case $tcfn in
  1597. a.exe) mkshexe=mksh.exe ;;
  1598. *) mkshexe=mksh ;;
  1599. esac
  1600. echo tcfn=$mkshexe >>Rebuild.sh
  1601. echo "$CC $CFLAGS $LDFLAGS -o \$tcfn $lobjs $LIBS $ccpr" >>Rebuild.sh
  1602. echo 'test -f $tcfn || exit 1; size $tcfn' >>Rebuild.sh
  1603. if test $cm = makefile; then
  1604. extras='emacsfn.h sh.h sh_flags.h var_spec.h'
  1605. test 0 = $HAVE_SYS_SIGNAME && extras="$extras signames.inc"
  1606. cat >Makefrag.inc <<EOF
  1607. # Makefile fragment for building mksh $dstversion
  1608. PROG= $mkshexe
  1609. MAN= mksh.1
  1610. SRCS= $SRCS
  1611. SRCS_FP= $files
  1612. OBJS_BP= $objs
  1613. INDSRCS= $extras
  1614. NONSRCS_INST= dot.mkshrc \$(MAN)
  1615. NONSRCS_NOINST= Build.sh Makefile Rebuild.sh check.pl check.t test.sh
  1616. CC= $CC
  1617. CFLAGS= $CFLAGS
  1618. CPPFLAGS= $CPPFLAGS
  1619. LDFLAGS= $LDFLAGS
  1620. LIBS= $LIBS
  1621. # not BSD make only:
  1622. #VPATH= $srcdir
  1623. #all: \$(PROG)
  1624. #\$(PROG): \$(OBJS_BP)
  1625. # \$(CC) \$(CFLAGS) \$(LDFLAGS) -o \$@ \$(OBJS_BP) \$(LIBS)
  1626. #\$(OBJS_BP): \$(SRCS_FP) \$(NONSRCS)
  1627. #.c.o:
  1628. # \$(CC) \$(CFLAGS) \$(CPPFLAGS) -c \$<
  1629. # for all make variants:
  1630. #REGRESS_FLAGS= -v
  1631. #regress:
  1632. # ./test.sh \$(REGRESS_FLAGS)
  1633. # for BSD make only:
  1634. #.PATH: $srcdir
  1635. #.include <bsd.prog.mk>
  1636. EOF
  1637. $e
  1638. $e Generated Makefrag.inc successfully.
  1639. exit 0
  1640. fi
  1641. if test $cm = combine; then
  1642. objs="-o $mkshexe"
  1643. for file in $SRCS; do
  1644. test -f $file || file=$srcdir/$file
  1645. objs="$objs $file"
  1646. done
  1647. emitbc="-fwhole-program --combine"
  1648. v "$CC $CFLAGS $CPPFLAGS $LDFLAGS $emitbc $objs $LIBS $ccpr"
  1649. elif test 1 = $pm; then
  1650. for file in $SRCS; do
  1651. test -f $file || file=$srcdir/$file
  1652. v "$CC $CFLAGS $CPPFLAGS $emitbc $file" &
  1653. done
  1654. wait
  1655. else
  1656. for file in $SRCS; do
  1657. test $cm = dragonegg && \
  1658. op=`echo x"$file" | sed 's/^x\(.*\)\.c$/\1./'`
  1659. test -f $file || file=$srcdir/$file
  1660. v "$CC $CFLAGS $CPPFLAGS $emitbc $file" || exit 1
  1661. if test $cm = dragonegg; then
  1662. v "mv ${op}s ${op}ll"
  1663. v "llvm-as ${op}ll" || exit 1
  1664. fi
  1665. done
  1666. fi
  1667. case $cm in
  1668. dragonegg|llvm)
  1669. rmf mksh.s
  1670. v "llvm-link -o - $objs | opt $optflags | llc -o mksh.s"
  1671. ;;
  1672. esac
  1673. tcfn=$mkshexe
  1674. test $cm = combine || v "$CC $CFLAGS $LDFLAGS -o $tcfn $lobjs $LIBS $ccpr"
  1675. test -f $tcfn || exit 1
  1676. test 1 = $r || v "$NROFF -mdoc <'$srcdir/mksh.1' >mksh.cat1" || \
  1677. rmf mksh.cat1
  1678. test 0 = $eq && v size $tcfn
  1679. i=install
  1680. test -f /usr/ucb/$i && i=/usr/ucb/$i
  1681. test 1 = $eq && e=:
  1682. $e
  1683. $e Installing the shell:
  1684. $e "# $i -c -s -o root -g bin -m 555 mksh /bin/mksh"
  1685. $e "# grep -x /bin/mksh /etc/shells >/dev/null || echo /bin/mksh >>/etc/shells"
  1686. $e "# $i -c -o root -g bin -m 444 dot.mkshrc /usr/share/doc/mksh/examples/"
  1687. $e
  1688. $e Installing the manual:
  1689. if test -f mksh.cat1; then
  1690. $e "# $i -c -o root -g bin -m 444 mksh.cat1" \
  1691. "/usr/share/man/cat1/mksh.0"
  1692. $e or
  1693. fi
  1694. $e "# $i -c -o root -g bin -m 444 mksh.1 /usr/share/man/man1/mksh.1"
  1695. $e
  1696. $e Run the regression test suite: ./test.sh
  1697. $e Please also read the sample file dot.mkshrc and the fine manual.
  1698. exit 0