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