1#!/bin/ksh -p 2# (note we use "/bin/ksh -p" for Linux/pdksh support in this script) 3 4# 5# CDDL HEADER START 6# 7# The contents of this file are subject to the terms of the 8# Common Development and Distribution License (the "License"). 9# You may not use this file except in compliance with the License. 10# 11# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 12# or http://www.opensolaris.org/os/licensing. 13# See the License for the specific language governing permissions 14# and limitations under the License. 15# 16# When distributing Covered Code, include this CDDL HEADER in each 17# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 18# If applicable, add the following below this CDDL HEADER, with the 19# fields enclosed by brackets "[]" replaced with your own identifying 20# information: Portions Copyright [yyyy] [name of copyright owner] 21# 22# CDDL HEADER END 23# 24 25# 26# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 27# 28 29# 30# buildksh93.sh - ast-ksh standalone build script for the 31# OpenSolaris ksh93-integration project 32# 33 34# ksh93t sources can be downloaded like this from the AT&T site: 35# wget --http-user="I accept www.opensource.org/licenses/cpl" --http-passwd="." 'http://www.research.att.com/~gsf/download/tgz/INIT.2010-03-09.tgz' 36# wget --http-user="I accept www.opensource.org/licenses/cpl" --http-passwd="." 'http://www.research.att.com/~gsf/download/tgz/ast-ksh.2010-03-09.tgz' 37 38function fatal_error 39{ 40 print -u2 "${progname}: $*" 41 exit 1 42} 43 44set -o errexit 45set -o xtrace 46 47typeset progname="$(basename "${0}")" 48typeset buildmode="$1" 49 50if [[ "${buildmode}" == "" ]] ; then 51 fatal_error "buildmode required." 52fi 53 54# Make sure we use the C locale during building to avoid any unintended 55# side-effects 56export LANG=C 57export LC_ALL=$LANG LC_MONETARY=$LANG LC_NUMERIC=$LANG LC_MESSAGES=$LANG LC_COLLATE=$LANG LC_CTYPE=$LANG 58# Make sure the POSIX/XPG6 tools are in front of /usr/bin (/bin is needed for Linux after /usr/bin) 59export PATH=/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/SUNWspro/bin 60 61# Make sure the POSIX/XPG6 packages are installed (mandatory for building 62# our version of ksh93 correctly). 63if [[ "$(uname -s)" == "SunOS" ]] ; then 64 if [[ ! -x "/usr/xpg6/bin/tr" ]] ; then 65 fatal_error "XPG6/4 packages (SUNWxcu6,SUNWxcu4) not installed." 66 fi 67fi 68 69function print_solaris_builtin_header 70{ 71# Make sure to use \\ instead of \ for continuations 72cat <<ENDOFTEXT 73/* 74 * CDDL HEADER START 75 * 76 * The contents of this file are subject to the terms of the 77 * Common Development and Distribution License (the "License"). 78 * You may not use this file except in compliance with the License. 79 * 80 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 81 * or http://www.opensolaris.org/os/licensing. 82 * See the License for the specific language governing permissions 83 * and limitations under the License. 84 * 85 * When distributing Covered Code, include this CDDL HEADER in each 86 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 87 * If applicable, add the following below this CDDL HEADER, with the 88 * fields enclosed by brackets "[]" replaced with your own identifying 89 * information: Portions Copyright [yyyy] [name of copyright owner] 90 * 91 * CDDL HEADER END 92 */ 93 94/* 95 * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 96 */ 97 98#ifndef _SOLARIS_KSH_CMDLIST_H 99#define _SOLARIS_KSH_CMDLIST_H 100 101#ifdef __cplusplus 102extern "C" { 103#endif 104 105/* 106 * List builtins for Solaris. 107 * The list here is partially autogenerated and partially hand-picked 108 * based on compatibility with the native Solaris versions of these 109 * tools 110 */ 111 112/* 113 * Commands which are 100% compatible with native Solaris versions (/bin is 114 * a softlink to ./usr/bin, ksh93 takes care about the lookup) 115 */ 116#define BINCMDLIST(f) \\ 117 { "/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 118#define USRBINCMDLIST(f) \\ 119 { "/usr/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 120#define SBINCMDLIST(f) \\ 121 { "/sbin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 122#define SUSRBINCMDLIST(f) \\ 123 { "/usr/sbin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 124/* POSIX compatible commands */ 125#define XPG6CMDLIST(f) \\ 126 { "/usr/xpg6/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 127#define XPG4CMDLIST(f) \\ 128 { "/usr/xpg4/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 129#ifdef SHOPT_USR_GNU_BIN_BUILTINS 130/* GNU coreutils compatible commands */ 131#define GNUCMDLIST(f) \\ 132 { "/usr/gnu/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 133#else 134#define GNUCMDLIST(f) 135#endif 136/* 137 * Make all ksh93 builtins accessible when /usr/ast/bin was added to 138 * /usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/SUNWspro/bin 139 */ 140#define ASTCMDLIST(f) \\ 141 { "/usr/ast/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, 142 143/* undo ast_map.h #defines to avoid collision */ 144#undef basename 145#undef dirname 146#undef mktemp 147 148/* Generated data, do not edit. */ 149ASTCMDLIST(basename) 150GNUCMDLIST(basename) 151XPG4CMDLIST(basename) 152ASTCMDLIST(cat) 153BINCMDLIST(cat) 154ASTCMDLIST(chgrp) 155// XPG4CMDLIST(chgrp) 156ASTCMDLIST(chmod) 157ASTCMDLIST(chown) 158// XPG4CMDLIST(chown) 159BINCMDLIST(chown) 160ASTCMDLIST(cksum) 161BINCMDLIST(cksum) 162GNUCMDLIST(cksum) 163ASTCMDLIST(cmp) 164BINCMDLIST(cmp) 165ASTCMDLIST(comm) 166BINCMDLIST(comm) 167GNUCMDLIST(comm) 168ASTCMDLIST(cp) 169// XPG4CMDLIST(cp) 170ASTCMDLIST(cut) 171BINCMDLIST(cut) 172GNUCMDLIST(cut) 173ASTCMDLIST(date) 174// XPG4CMDLIST(date) 175ASTCMDLIST(dirname) 176BINCMDLIST(dirname) 177GNUCMDLIST(dirname) 178// ASTCMDLIST(egrep) 179// XPG4CMDLIST(egrep) 180ASTCMDLIST(expr) 181GNUCMDLIST(expr) 182XPG6CMDLIST(expr) 183ASTCMDLIST(fds) 184// ASTCMDLIST(fgrep) 185// XPG4CMDLIST(fgrep) 186ASTCMDLIST(fmt) 187ASTCMDLIST(fold) 188BINCMDLIST(fold) 189GNUCMDLIST(fold) 190// ASTCMDLIST(grep) 191// XPG4CMDLIST(grep) 192ASTCMDLIST(head) 193BINCMDLIST(head) 194ASTCMDLIST(id) 195XPG4CMDLIST(id) 196ASTCMDLIST(join) 197BINCMDLIST(join) 198GNUCMDLIST(join) 199ASTCMDLIST(ln) 200// XPG4CMDLIST(ln) 201ASTCMDLIST(logname) 202BINCMDLIST(logname) 203GNUCMDLIST(logname) 204ASTCMDLIST(md5sum) 205ASTCMDLIST(mkdir) 206BINCMDLIST(mkdir) 207GNUCMDLIST(mkdir) 208ASTCMDLIST(mkfifo) 209BINCMDLIST(mkfifo) 210GNUCMDLIST(mkfifo) 211ASTCMDLIST(mktemp) 212BINCMDLIST(mktemp) 213GNUCMDLIST(mktemp) 214ASTCMDLIST(mv) 215// XPG4CMDLIST(mv) 216ASTCMDLIST(paste) 217BINCMDLIST(paste) 218GNUCMDLIST(paste) 219ASTCMDLIST(pathchk) 220BINCMDLIST(pathchk) 221GNUCMDLIST(pathchk) 222// ASTCMDLIST(readlink) 223ASTCMDLIST(rev) 224BINCMDLIST(rev) 225ASTCMDLIST(rm) 226XPG4CMDLIST(rm) 227ASTCMDLIST(rmdir) 228BINCMDLIST(rmdir) 229GNUCMDLIST(rmdir) 230GNUCMDLIST(sleep) 231ASTCMDLIST(stty) 232// XPG4CMDLIST(stty) 233ASTCMDLIST(sum) 234BINCMDLIST(sum) 235ASTCMDLIST(sync) 236BINCMDLIST(sync) 237GNUCMDLIST(sync) 238SBINCMDLIST(sync) 239SUSRBINCMDLIST(sync) 240ASTCMDLIST(tail) 241BINCMDLIST(tail) 242XPG4CMDLIST(tail) 243ASTCMDLIST(tee) 244BINCMDLIST(tee) 245GNUCMDLIST(tee) 246ASTCMDLIST(tty) 247BINCMDLIST(tty) 248GNUCMDLIST(tty) 249ASTCMDLIST(uname) 250ASTCMDLIST(uniq) 251BINCMDLIST(uniq) 252GNUCMDLIST(uniq) 253ASTCMDLIST(wc) 254BINCMDLIST(wc) 255GNUCMDLIST(wc) 256// ASTCMDLIST(xgrep) 257// BINCMDLIST(xgrep) 258 259/* Mandatory for ksh93 test suite and AST scripts */ 260BINCMDLIST(getconf) 261 262#ifdef __cplusplus 263} 264#endif 265#endif /* !_SOLARIS_KSH_CMDLIST_H */ 266 267ENDOFTEXT 268} 269 270function build_shell 271{ 272 set -o errexit 273 set -o xtrace 274 275 # OS.cputype.XXbit.compiler 276 case "${buildmode}" in 277 *.linux.*) 278 # ksh93+AST config flags 279 bast_flags="-DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_SYSRC -D_map_libc=1" 280 281 # gcc flags 282 bgcc99="gcc -std=gnu99 " 283 bgcc_ccflags="${bon_flags} ${bast_flags} -g" 284 285 case "${buildmode}" in 286 # Linux i386 287 *.i386.32bit.gcc*) HOSTTYPE="linux.i386" CC="${bgcc99} -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" 288 ;; 289 *) 290 fatal_error "build_shell: Illegal Linux type/compiler build mode \"${buildmode}\"." 291 ;; 292 esac 293 ;; 294 *.solaris.*) 295 # Notes: 296 # 1. Do not remove/modify these flags or their order before either 297 # asking the project leads at 298 # http://www.opensolaris.org/os/project/ksh93-integration/ 299 # These flags all have a purpose, even if they look 300 # weird/redundant/etc. at the first look. 301 # 302 # 2. We use -KPIC here since -Kpic is too small on 64bit sparc and 303 # on 32bit it's close to the barrier so we use it for both 32bit and 304 # 64bit to avoid later suprises when people update libast in the 305 # future 306 # 307 # 3. "-D_map_libc=1" is needed to force map.c to add a "_ast_" prefix to all 308 # AST symbol names which may otherwise collide with Solaris/Linux libc 309 # 310 # 4. "-DSHOPT_SYSRC" enables /etc/ksh.kshrc support (AST default is currently 311 # to enable it if /etc/ksh.kshrc or /etc/bash.bashrc are available on the 312 # build machine). 313 # 314 # 5. -D_lib_socket=1 -lsocket -lnsl" was added to make sure ksh93 is compiled 315 # with networking support enabled, the current AST build infratructure has 316 # problems with detecting networking support in Solaris. 317 # 318 # 6. "-xc99=%all -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1" is used to force 319 # the compiler into C99 mode. Otherwise ksh93 will be much slower and lacks 320 # lots of arithmethic functions. 321 # 322 # 7. "-D_TS_ERRNO -D_REENTRANT" are flags taken from the default OS/Net 323 # build system. 324 # 325 # 8. "-xpagesize_stack=64K is used on SPARC to enhance the performace 326 # 327 # 9. -DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_CMDLIB_HDR=\\\"/home/test001/ksh93/ast_ksh_20070322/solaris_cmdlist.h\\\" 328 # is used to bind all ksh93 builtins to a "virtual" directory 329 # called "/usr/ast/bin/" and to adjust the list of builtins 330 # enabled by default to those defined by PSARC 2006/550 331 332 solaris_builtin_header="${PWD}/tmp_solaris_builtin_header.h" 333 print_solaris_builtin_header >"${solaris_builtin_header}" 334 335 # OS/Net build flags 336 bon_flags="-D_TS_ERRNO -D_REENTRANT" 337 338 # ksh93+AST config flags 339 bast_flags="-DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_CMDLIB_HDR=\\\"${solaris_builtin_header}\\\" -DSHOPT_SYSRC -D_map_libc=1" 340 341 # Sun Studio flags 342 bsunc99="/opt/SUNWspro/bin/cc -xc99=%all -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1" 343 bsuncc_app_ccflags_sparc="-xpagesize_stack=64K" # use bsuncc_app_ccflags_sparc only for final executables 344 bsuncc_ccflags="${bon_flags} -KPIC -g -xs -xspace -Xa -xstrconst -z combreloc -xildoff -xcsi -errtags=yes ${bast_flags} -D_lib_socket=1 -lsocket -lnsl" 345 346 # gcc flags 347 bgcc99="/usr/sfw/bin/gcc -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1" 348 bgcc_warnflags="-Wall -Wextra -Wno-unknown-pragmas -Wno-missing-braces -Wno-sign-compare -Wno-parentheses -Wno-uninitialized -Wno-implicit-function-declaration -Wno-unused -Wno-trigraphs -Wno-char-subscripts -Wno-switch" 349 bgcc_ccflags="${bon_flags} ${bgcc_warnflags} ${bast_flags} -D_lib_socket=1 -lsocket -lnsl" 350 351 case "${buildmode}" in 352 # for -m32/-m64 flags see usr/src/Makefile.master, makefile symbols *_XARCH/co. 353 *.i386.32bit.suncc*) HOSTTYPE="sol11.i386" CC="${bsunc99} -m32" cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" ;; 354 *.i386.64bit.suncc*) HOSTTYPE="sol11.i386" CC="${bsunc99} -m64 -KPIC" cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" ;; 355 *.sparc.32bit.suncc*) HOSTTYPE="sol11.sun4" CC="${bsunc99} -m32" cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" bsuncc_app_ccflags="${bsuncc_app_ccflags_sparc}" ;; 356 *.sparc.64bit.suncc*) HOSTTYPE="sol11.sun4" CC="${bsunc99} -m64 -dalign -KPIC" cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" bsuncc_app_ccflags="${bsuncc_app_ccflags_sparc}" ;; 357 358 *.i386.32bit.gcc*) HOSTTYPE="sol11.i386" CC="${bgcc99} -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" ;; 359 *.i386.64bit.gcc*) HOSTTYPE="sol11.i386" CC="${bgcc99} -m64 -mtune=opteron -Ui386 -U__i386 -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" ;; 360 *.sparc.32bit.gcc*) HOSTTYPE="sol11.sun4" CC="${bgcc99} -m32 -mcpu=v8 -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" ;; 361 *.sparc.64bit.gcc*) HOSTTYPE="sol11.sun4" CC="${bgcc99} -m64 -mcpu=v9 -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" ;; 362 *.s390.32bit.gcc*) HOSTTYPE="sol11.s390" CC="${bgcc99} -m32 -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" ;; 363 *.s390.64bit.gcc*) HOSTTYPE="sol11.s390" CC="${bgcc99} -m64 -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}" ;; 364 365 *) 366 fatal_error "build_shell: Illegal Solaris type/compiler build mode \"${buildmode}\"." 367 ;; 368 esac 369 ;; 370 *) 371 fatal_error "Illegal OS build mode \"${buildmode}\"." 372 ;; 373 esac 374 375 # some prechecks 376 [[ -z "${CCFLAGS}" ]] && fatal_error "build_shell: CCFLAGS is empty." 377 [[ -z "${CC}" ]] && fatal_error "build_shell: CC is empty." 378 [[ -z "${HOSTTYPE}" ]] && fatal_error "build_shell: HOSTTYPE is empty." 379 [[ ! -f "bin/package" ]] && fatal_error "build_shell: bin/package missing." 380 [[ ! -x "bin/package" ]] && fatal_error "build_shell: bin/package not executable." 381 382 export CCFLAGS CC HOSTTYPE 383 384 # build ksh93 385 bin/package make CCFLAGS="${CCFLAGS}" CC="${CC}" HOSTTYPE="${HOSTTYPE}" 386 387 root="${PWD}/arch/${HOSTTYPE}" 388 [[ -d "$root" ]] || fatal_error "build_shell: directory ${root} not found." 389 log="${root}/lib/package/gen/make.out" 390 391 [[ -s $log ]] || fatal_error "build_shell: no make.out log found." 392 393 if [[ -f ${root}/lib/libast-g.a ]] then link_libast="ast-g" ; else link_libast="ast" ; fi 394 if [[ -f ${root}/lib/libdll-g.a ]] then link_libdll="dll-g" ; else link_libdll="dll" ; fi 395 if [[ -f ${root}/lib/libsum-g.a ]] then link_libsum="sum-g" ; else link_libsum="sum" ; fi 396 if [[ -f ${root}/lib/libcmd-g.a ]] then link_libcmd="cmd-g" ; else link_libcmd="cmd" ; fi 397 if [[ -f ${root}/lib/libshell-g.a ]] then link_libshell="shell-g" ; else link_libshell="shell" ; fi 398 399 if [[ "${buildmode}" != *.staticshell* ]] ; then 400 # libcmd causes some trouble since there is a squatter in solaris 401 # This has been fixed in Solaris 11/B48 but may require adjustments 402 # for older Solaris releases 403 for lib in libast libdll libsum libcmd libshell ; do 404 case "$lib" in 405 libshell) 406 base="src/cmd/ksh93/" 407 vers=1 408 link="-L${root}/lib/ -l${link_libcmd} -l${link_libsum} -l${link_libdll} -l${link_libast} -lm" 409 ;; 410 libdll) 411 base="src/lib/${lib}" 412 vers=1 413 link="-ldl" 414 ;; 415 libast) 416 base="src/lib/${lib}" 417 vers=1 418 link="-lm" 419 ;; 420 *) 421 base="src/lib/${lib}" 422 vers=1 423 link="-L${root}/lib/ -l${link_libast} -lm" 424 ;; 425 esac 426 427 ( 428 cd "${root}/${base}" 429 430 if [[ -f ${lib}-g.a ]] ; then lib_a="${lib}-g.a" ; else lib_a="${lib}.a" ; fi 431 432 if [[ "${buildmode}" == *solaris* ]] ; then 433 ${CC} ${cc_sharedlib} ${CCFLAGS} -Bdirect -Wl,-zallextract -Wl,-zmuldefs -o "${root}/lib/${lib}.so.${vers}" "${lib_a}" $link 434 else 435 ${CC} ${cc_sharedlib} ${CCFLAGS} -Wl,--whole-archive -Wl,-zmuldefs "${lib_a}" -Wl,--no-whole-archive -o "${root}/lib/${lib}.so.${vers}" $link 436 fi 437 438 #rm ${lib}.a 439 mv "${lib_a}" "disabled_${lib_a}_" 440 441 cd "${root}/lib" 442 ln -sf "${lib}.so.${vers}" "${lib}.so" 443 ) 444 done 445 446 ( 447 base=src/cmd/ksh93 448 cd "${root}/${base}" 449 rm -f \ 450 "${root}/lib/libshell.a" "${root}/lib/libshell-g.a" \ 451 "${root}/lib/libsum.a" "${root}/lib/libsum-g.a" \ 452 "${root}/lib/libdll.a" "${root}/lib/libdll-g.a" \ 453 "${root}/lib/libast.a" "${root}/lib/libast-g.a" 454 455 if [[ "${buildmode}" == *solaris* ]] ; then 456 ${CC} ${CCFLAGS} ${bsuncc_app_ccflags} -L${root}/lib/ -Bdirect -o ksh pmain.o -lshell -Bstatic -l${link_libcmd} -Bdynamic -lsum -ldll -last -lm -lmd -lsecdb 457 else 458 ${CC} ${CCFLAGS} ${bsuncc_app_ccflags} -L${root}/lib/ -o ksh pmain.o -lshell -lcmd -lsum -ldll -last -lm 459 fi 460 461 file ksh 462 file shcomp 463 464 export LD_LIBRARY_PATH="${root}/lib:${LD_LIBRARY_PATH}" 465 export LD_LIBRARY_PATH_32="${root}/lib:${LD_LIBRARY_PATH_32}" 466 export LD_LIBRARY_PATH_64="${root}/lib:${LD_LIBRARY_PATH_64}" 467 ldd ksh 468 ) 469 fi 470} 471 472function test_builtin_getconf 473{ 474( 475 print "# testing getconf builtin..." 476 set +o errexit 477 export PATH=/bin:/usr/bin 478 for lang in ${TEST_LANG} ; do 479 ( 480 printf "## testing LANG=%s\n" "${lang}" 481 export LC_ALL="${lang}" LANG="${lang}" 482 ${SHELL} -c '/usr/bin/getconf -a | 483 while read i ; do 484 t="${i%:*}" ; a="$(getconf "$t" 2>/dev/null)" ; 485 b="$(/usr/bin/getconf "$t" 2>/dev/null)" ; [ "$a" != "$b" ] && print "# |$t|:|$a| != |$b|" ; 486 done' 487 ) 488 done 489 print "# testing getconf done." 490) 491} 492 493function test_shell 494{ 495 set -o errexit 496 set -o xtrace 497 498 ulimit -s 65536 # need larger stack on 64bit SPARC to pass all tests 499 500 export SHELL="$(ls -1 $PWD/arch/*/src/cmd/ksh93/ksh)" 501 export LD_LIBRARY_PATH="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH}" 502 export LD_LIBRARY_PATH_32="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH_32}" 503 export LD_LIBRARY_PATH_64="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH_64}" 504 printf "## SHELL is |%s|\n" "${SHELL}" 505 printf "## LD_LIBRARY_PATH is |%s|\n" "${LD_LIBRARY_PATH}" 506 507 [[ ! -f "${SHELL}" ]] && fatal_error "test_shell: |${SHELL}| is not a file." 508 [[ ! -x "${SHELL}" ]] && fatal_error "test_shell: |${SHELL}| is not executable." 509 510 [[ "${TEST_LANG}" == "" ]] && TEST_LANG="C zh_CN.GB18030 en_US.UTF-8" 511 512 case "${buildmode}" in 513 testshell.bcheck*) 514 for lang in ${TEST_LANG} ; do 515 ( 516 export LC_ALL="${lang}" LANG="${lang}" 517 for i in ./src/cmd/ksh93/tests/*.sh ; do 518 bc_logfile="$(basename "$i").$$.bcheck" 519 rm -f "${bc_logfile}" 520 /opt/SUNWspro/bin/bcheck -q -access -o "${bc_logfile}" ${SHELL} ./src/cmd/ksh93/tests/shtests \ 521 LD_LIBRARY_PATH_64="$LD_LIBRARY_PATH_64" \ 522 LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ 523 LD_LIBRARY_PATH_32="$LD_LIBRARY_PATH_32"\ 524 LC_ALL="${lang}" LANG="${lang}" \ 525 VMALLOC_OPTIONS=abort \ 526 "$i" 527 cat "${bc_logfile}" 528 done 529 ) 530 done 531 ;; 532 testshell.builtin.getconf) 533 test_builtin_getconf 534 ;; 535 testshell) 536 for lang in ${TEST_LANG} ; do 537 ( 538 export LC_ALL="${lang}" LANG="${lang}" 539 for i in ./src/cmd/ksh93/tests/*.sh ; do 540 ${SHELL} ./src/cmd/ksh93/tests/shtests -a \ 541 LD_LIBRARY_PATH_64="$LD_LIBRARY_PATH_64" \ 542 LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ 543 LD_LIBRARY_PATH_32="$LD_LIBRARY_PATH_32" \ 544 LC_ALL="${lang}" LANG="${lang}" \ 545 VMALLOC_OPTIONS=abort \ 546 SHCOMP=$PWD/arch/*/bin/shcomp \ 547 "$i" 548 done 549 ) 550 done 551 test_builtin_getconf 552 ;; 553 esac 554} 555 556# main 557case "${buildmode}" in 558 build.*) build_shell ;; 559 testshell*) test_shell ;; 560 *) fatal_error "Illegal build mode \"${buildmode}\"." ;; 561esac 562# EOF. 563