163df1173Spetede#!/usr/bin/ksh93 27c478bd9Sstevel@tonic-gate# 37c478bd9Sstevel@tonic-gate# CDDL HEADER START 47c478bd9Sstevel@tonic-gate# 57c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the 6b84bdc30Smeem# Common Development and Distribution License (the "License"). 7b84bdc30Smeem# You may not use this file except in compliance with the License. 87c478bd9Sstevel@tonic-gate# 97c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate# and limitations under the License. 137c478bd9Sstevel@tonic-gate# 147c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate# 207c478bd9Sstevel@tonic-gate# CDDL HEADER END 217c478bd9Sstevel@tonic-gate# 224e5b757fSkupfer 237c478bd9Sstevel@tonic-gate# 24b83ec4edSjmcp# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 25d7693b08SRoland Mainz# Copyright 2011 Nexenta Systems, Inc. All rights reserved. 267c478bd9Sstevel@tonic-gate# 277c478bd9Sstevel@tonic-gate# Uses supplied "env" file, based on /opt/onbld/etc/env, to set shell variables 287c478bd9Sstevel@tonic-gate# before spawning a shell for doing a release-style builds interactively 297c478bd9Sstevel@tonic-gate# and incrementally. 307c478bd9Sstevel@tonic-gate# 317c478bd9Sstevel@tonic-gate 32d7693b08SRoland Mainzfunction fatal_error 33d7693b08SRoland Mainz{ 34d7693b08SRoland Mainz print -u2 "${progname}: $*" 35d7693b08SRoland Mainz exit 1 36d7693b08SRoland Mainz} 37d7693b08SRoland Mainz 3863df1173Spetedefunction usage 3963df1173Spetede{ 4063df1173Spetede OPTIND=0 4163df1173Spetede getopts -a "${progname}" "${USAGE}" OPT '-?' 4263df1173Spetede exit 2 4363df1173Spetede} 447c478bd9Sstevel@tonic-gate 4563df1173Spetedetypeset -r USAGE=$'+ 4663df1173Spetede[-?\n@(#)\$Id: bldenv (OS/Net) 2008-04-06 \$\n] 4763df1173Spetede[-author?OS/Net community <tools-discuss@opensolaris.org>] 4863df1173Spetede[+NAME?bldenv - spawn shell for interactive incremental OS-Net 4963df1173Spetede consolidation builds] 5063df1173Spetede[+DESCRIPTION?bldenv is a useful companion to the nightly(1) script for 5163df1173Spetede doing interactive and incremental builds in a workspace 5263df1173Spetede already built with nightly(1). bldenv spawns a shell set up 5363df1173Spetede with the same environment variables taken from an env_file, 5463df1173Spetede as prepared for use with nightly(1).] 5563df1173Spetede[+?In addition to running a shell for interactive use, bldenv 5663df1173Spetede can optionally run a single command in the given environment, 5763df1173Spetede in the vein of sh -c or su -c. This is useful for 5863df1173Spetede scripting, when an interactive shell would not be. If the 5963df1173Spetede command is composed of multiple shell words or contains 6063df1173Spetede other shell metacharacters, it must be quoted appropriately.] 6163df1173Spetede[+?bldenv is particularly useful for testing Makefile targets 6263df1173Spetede like clobber, install and _msg, which otherwise require digging 6363df1173Spetede through large build logs to figure out what is being 6463df1173Spetede done.] 6563df1173Spetede[+?By default, bldenv will invoke the shell specified in 6663df1173Spetede $SHELL. If $SHELL is not set or is invalid, csh will be 6763df1173Spetede used.] 6863df1173Spetede[c?force the use of csh, regardless of the value of $SHELL.] 6963df1173Spetede[f?invoke csh with the -f (fast-start) option. This option is valid 7063df1173Spetede only if $SHELL is unset or if it points to csh.] 7163df1173Spetede[d?set up environment for doing DEBUG builds (default is non-DEBUG)] 7263df1173Spetede[t?set up environment to use the tools in usr/src/tools (this is the 7363df1173Spetede default, use +t to use the tools from /opt/onbld)] 7463df1173Spetede 7563df1173Spetede<env_file> [command] 7663df1173Spetede 7763df1173Spetede[+EXAMPLES]{ 7863df1173Spetede [+?Example 1: Interactive use]{ 7963df1173Spetede [+?Use bldenv to spawn a shell to perform a DEBUG build and 8063df1173Spetede testing of the Makefile targets clobber and install for 8163df1173Spetede usr/src/cmd/true.] 8263df1173Spetede [+\n% rlogin wopr-2 -l gk 8363df1173Spetede{root::wopr-2::49} bldenv -d /export0/jg/on10-se.env 8463df1173SpetedeBuild type is DEBUG 8563df1173SpetedeRELEASE is 5.10 8663df1173SpetedeVERSION is wopr-2::on10-se::11/01/2001 8763df1173SpetedeRELEASE_DATE is May 2004 8863df1173SpetedeThe top-level `setup\' target is available to build headers 8963df1173Spetedeand tools. 9063df1173SpetedeUsing /usr/bin/tcsh as shell. 9163df1173Spetede{root::wopr-2::49} 9263df1173Spetede{root::wopr-2::49} cd $SRC/cmd/true 9363df1173Spetede{root::wopr-2::50} make 9463df1173Spetede{root::wopr-2::51} make clobber 9563df1173Spetede/usr/bin/rm -f true true.po 9663df1173Spetede{root::wopr-2::52} make 9763df1173Spetede/usr/bin/rm -f true 9863df1173Spetedecat true.sh > true 9963df1173Spetedechmod +x true 10063df1173Spetede{root::wopr-2::53} make install 10163df1173Spetedeinstall -s -m 0555 -u root -g bin -f /export0/jg/on10-se/proto/root_sparc/usr/bin true 10263df1173Spetede`install\' is up to date.] 10363df1173Spetede } 10463df1173Spetede [+?Example 2: Non-interactive use]{ 10563df1173Spetede [+?Invoke bldenv to create SUNWonbld with a single command:] 10663df1173Spetede [+\nexample% bldenv onnv_06 \'cd $SRC/tools && make pkg\'] 10763df1173Spetede } 10863df1173Spetede} 10963df1173Spetede[+SEE ALSO?\bnightly\b(1)] 11063df1173Spetede' 11163df1173Spetede 11263df1173Spetede# main 11363df1173Spetedebuiltin basename 11463df1173Spetede 11563df1173Spetede# boolean flags (true/false) 11663df1173Spetedetypeset flags=( 11763df1173Spetede typeset c=false 11863df1173Spetede typeset f=false 11963df1173Spetede typeset d=false 12063df1173Spetede typeset O=false 12163df1173Spetede typeset o=false 12263df1173Spetede typeset t=true 12363df1173Spetede typeset s=( 12463df1173Spetede typeset e=false 12563df1173Spetede typeset h=false 12663df1173Spetede typeset d=false 12763df1173Spetede typeset o=false 12863df1173Spetede ) 12963df1173Spetede) 13063df1173Spetede 131d7693b08SRoland Mainztypeset progname="$(basename -- "${0}")" 13263df1173Spetede 1337c478bd9Sstevel@tonic-gateOPTIND=1 1347c478bd9Sstevel@tonic-gateSUFFIX="-nd" 13563df1173Spetede 13663df1173Spetedewhile getopts -a "${progname}" "${USAGE}" OPT ; do 13763df1173Spetede case ${OPT} in 13863df1173Spetede c) flags.c=true ;; 13963df1173Spetede +c) flags.c=false ;; 14063df1173Spetede f) flags.f=true ;; 14163df1173Spetede +f) flags.f=false ;; 14263df1173Spetede d) flags.d=true SUFFIX="" ;; 14363df1173Spetede +d) flags.d=false SUFFIX="-nd" ;; 14463df1173Spetede t) flags.t=true ;; 14563df1173Spetede +t) flags.t=false ;; 14663df1173Spetede \?) usage ;; 1477c478bd9Sstevel@tonic-gate esac 1487c478bd9Sstevel@tonic-gatedone 14963df1173Spetedeshift $((OPTIND-1)) 1507c478bd9Sstevel@tonic-gate 1517c478bd9Sstevel@tonic-gate# test that the path to the environment-setting file was given 15263df1173Spetedeif (( $# < 1 )) ; then 15363df1173Spetede usage 1547c478bd9Sstevel@tonic-gatefi 1557c478bd9Sstevel@tonic-gate 1567c478bd9Sstevel@tonic-gate# force locale to C 15763df1173Spetedeexport \ 158*91d74a54SRichard Lowe LANG=C \ 159*91d74a54SRichard Lowe LC_ALL=C \ 16063df1173Spetede LC_COLLATE=C \ 16163df1173Spetede LC_CTYPE=C \ 16263df1173Spetede LC_MESSAGES=C \ 16363df1173Spetede LC_MONETARY=C \ 16463df1173Spetede LC_NUMERIC=C \ 16563df1173Spetede LC_TIME=C 1667c478bd9Sstevel@tonic-gate 1677c478bd9Sstevel@tonic-gate# clear environment variables we know to be bad for the build 16863df1173Spetedeunset \ 16963df1173Spetede LD_OPTIONS \ 17063df1173Spetede LD_LIBRARY_PATH \ 17163df1173Spetede LD_AUDIT \ 17263df1173Spetede LD_BIND_NOW \ 17363df1173Spetede LD_BREADTH \ 17463df1173Spetede LD_CONFIG \ 17563df1173Spetede LD_DEBUG \ 17663df1173Spetede LD_FLAGS \ 17763df1173Spetede LD_LIBRARY_PATH_64 \ 17863df1173Spetede LD_NOVERSION \ 17963df1173Spetede LD_ORIGIN \ 18063df1173Spetede LD_LOADFLTR \ 18163df1173Spetede LD_NOAUXFLTR \ 18263df1173Spetede LD_NOCONFIG \ 18363df1173Spetede LD_NODIRCONFIG \ 18463df1173Spetede LD_NOOBJALTER \ 18563df1173Spetede LD_PRELOAD \ 18663df1173Spetede LD_PROFILE \ 18763df1173Spetede CONFIG \ 18863df1173Spetede GROUP \ 18963df1173Spetede OWNER \ 19063df1173Spetede REMOTE \ 19163df1173Spetede ENV \ 19263df1173Spetede ARCH \ 19363df1173Spetede CLASSPATH 1947c478bd9Sstevel@tonic-gate 1950756aa0bSGavin Maltby# 1960756aa0bSGavin Maltby# Setup environment variables 1970756aa0bSGavin Maltby# 1980756aa0bSGavin Maltbyif [[ -f /etc/nightly.conf ]]; then 1990756aa0bSGavin Maltby source /etc/nightly.conf 2000756aa0bSGavin Maltbyfi 2010756aa0bSGavin Maltby 20263df1173Spetedeif [[ -f "$1" ]]; then 20363df1173Spetede if [[ "$1" == */* ]]; then 20463df1173Spetede source "$1" 2057c478bd9Sstevel@tonic-gate else 20663df1173Spetede source "./$1" 2077c478bd9Sstevel@tonic-gate fi 2087c478bd9Sstevel@tonic-gateelse 20963df1173Spetede if [[ -f "/opt/onbld/env/$1" ]]; then 21063df1173Spetede source "/opt/onbld/env/$1" 2117c478bd9Sstevel@tonic-gate else 21263df1173Spetede printf \ 21363df1173Spetede 'Cannot find env file as either %s or /opt/onbld/env/%s\n' \ 21463df1173Spetede "$1" "$1" 2157c478bd9Sstevel@tonic-gate exit 1 2167c478bd9Sstevel@tonic-gate fi 2177c478bd9Sstevel@tonic-gatefi 2187c478bd9Sstevel@tonic-gateshift 2197c478bd9Sstevel@tonic-gate 2201fe69678Skupfer# contents of stdenv.sh inserted after next line: 2211fe69678Skupfer# STDENV_START 2221fe69678Skupfer# STDENV_END 2237c478bd9Sstevel@tonic-gate 224d7693b08SRoland Mainz# Check if we have sufficient data to continue... 225d7693b08SRoland Mainz[[ -v CODEMGR_WS ]] || fatal_error "Error: Variable CODEMGR_WS not set." 226d7693b08SRoland Mainz[[ -d "${CODEMGR_WS}" ]] || fatal_error "Error: ${CODEMGR_WS} is not a directory." 227d7693b08SRoland Mainz[[ -f "${CODEMGR_WS}/usr/src/Makefile" ]] || fatal_error "Error: ${CODEMGR_WS}/usr/src/Makefile not found." 228d7693b08SRoland Mainz 2297c478bd9Sstevel@tonic-gate# must match the getopts in nightly.sh 2307c478bd9Sstevel@tonic-gateOPTIND=1 23163df1173SpetedeNIGHTLY_OPTIONS="-${NIGHTLY_OPTIONS#-}" 232cb4d1691SRichard Lowewhile getopts '+0ABCDdFfGIilMmNnpRrtUuwW' FLAG "$NIGHTLY_OPTIONS" 2337c478bd9Sstevel@tonic-gatedo 23463df1173Spetede case "$FLAG" in 23563df1173Spetede t) flags.t=true ;; 23663df1173Spetede +t) flags.t=false ;; 2377c478bd9Sstevel@tonic-gate *) ;; 2387c478bd9Sstevel@tonic-gate esac 2397c478bd9Sstevel@tonic-gatedone 2407c478bd9Sstevel@tonic-gate 24148bc00d6SjmcpPOUND_SIGN="#" 24248bc00d6Sjmcp# have we set RELEASE_DATE in our env file? 24348bc00d6Sjmcpif [ -z "$RELEASE_DATE" ]; then 24448bc00d6Sjmcp RELEASE_DATE=$(LC_ALL=C date +"%B %Y") 24548bc00d6Sjmcpfi 24648bc00d6SjmcpBUILD_DATE=$(LC_ALL=C date +%Y-%b-%d) 247d7693b08SRoland MainzBASEWSDIR=$(basename -- "${CODEMGR_WS}") 24848bc00d6SjmcpDEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\"" 24948bc00d6Sjmcpexport DEV_CM RELEASE_DATE POUND_SIGN 25048bc00d6Sjmcp 25163df1173Spetedeprint 'Build type is \c' 25263df1173Spetedeif ${flags.d} ; then 25363df1173Spetede print 'DEBUG' 2547c478bd9Sstevel@tonic-gate unset RELEASE_BUILD 2557c478bd9Sstevel@tonic-gate unset EXTRA_OPTIONS 2567c478bd9Sstevel@tonic-gate unset EXTRA_CFLAGS 2577c478bd9Sstevel@tonic-gateelse 2587c478bd9Sstevel@tonic-gate # default is a non-DEBUG build 25963df1173Spetede print 'non-DEBUG' 26063df1173Spetede export RELEASE_BUILD= 2617c478bd9Sstevel@tonic-gate unset EXTRA_OPTIONS 2627c478bd9Sstevel@tonic-gate unset EXTRA_CFLAGS 2637c478bd9Sstevel@tonic-gatefi 2647c478bd9Sstevel@tonic-gate 2657c478bd9Sstevel@tonic-gate# update build-type variables 26663df1173SpetedePKGARCHIVE="${PKGARCHIVE}${SUFFIX}" 2677c478bd9Sstevel@tonic-gate 2687c478bd9Sstevel@tonic-gate# Set PATH for a build 269b84bdc30SmeemPATH="/opt/onbld/bin:/opt/onbld/bin/${MACH}:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/bin:/usr/sbin:/usr/ucb:/usr/etc:/usr/openwin/bin:/usr/sfw/bin:/opt/sfw/bin:." 27063df1173Spetedeif [[ "${SUNWSPRO}" != "" ]]; then 27163df1173Spetede export PATH="${SUNWSPRO}/bin:$PATH" 2727c478bd9Sstevel@tonic-gatefi 2737c478bd9Sstevel@tonic-gate 274b1a0a82dSRobert Mustacchiif [[ -n "${MAKE}" ]]; then 275e119f243SRobert Mustacchi if [[ -x "${MAKE}" ]]; then 276e119f243SRobert Mustacchi export PATH="$(dirname -- "${MAKE}"):$PATH" 277e119f243SRobert Mustacchi else 278b1a0a82dSRobert Mustacchi print "\$MAKE (${MAKE}) is not a valid executible" 279e119f243SRobert Mustacchi exit 1 280e119f243SRobert Mustacchi fi 281b1a0a82dSRobert Mustacchifi 282e119f243SRobert Mustacchi 28363df1173SpetedeTOOLS="${SRC}/tools" 284ead1f93eSLiane PrazaTOOLS_PROTO="${TOOLS}/proto/root_${MACH}-nd" ; export TOOLS_PROTO 2857c478bd9Sstevel@tonic-gate 28663df1173Spetedeif "${flags.t}" ; then 28763df1173Spetede export ONBLD_TOOLS="${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}" 2887c478bd9Sstevel@tonic-gate 28963df1173Spetede export STABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs" 29063df1173Spetede export CTFSTABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs" 29163df1173Spetede export GENOFFSETS="${TOOLS_PROTO}/opt/onbld/bin/genoffsets" 2927c478bd9Sstevel@tonic-gate 29363df1173Spetede export CTFCONVERT="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert" 29463df1173Spetede export CTFMERGE="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge" 2957c478bd9Sstevel@tonic-gate 29663df1173Spetede export CTFCVTPTBL="${TOOLS_PROTO}/opt/onbld/bin/ctfcvtptbl" 29763df1173Spetede export CTFFINDMOD="${TOOLS_PROTO}/opt/onbld/bin/ctffindmod" 2987c478bd9Sstevel@tonic-gate 2997c478bd9Sstevel@tonic-gate PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}" 3007c478bd9Sstevel@tonic-gate PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}" 3017c478bd9Sstevel@tonic-gate export PATH 3027c478bd9Sstevel@tonic-gatefi 3037c478bd9Sstevel@tonic-gate 3040756aa0bSGavin Maltbyexport DMAKE_MODE=${DMAKE_MODE:-parallel} 30563df1173Spetede 3067c478bd9Sstevel@tonic-gateDEF_STRIPFLAG="-s" 3077c478bd9Sstevel@tonic-gate 3087c478bd9Sstevel@tonic-gateTMPDIR="/tmp" 3097c478bd9Sstevel@tonic-gate 31063df1173Spetedeexport \ 31163df1173Spetede PATH TMPDIR \ 31263df1173Spetede POUND_SIGN \ 31348bc00d6Sjmcp DEF_STRIPFLAG \ 31448bc00d6Sjmcp RELEASE_DATE 31563df1173Spetedeunset \ 31663df1173Spetede CFLAGS \ 31763df1173Spetede LD_LIBRARY_PATH 3187c478bd9Sstevel@tonic-gate 3197c478bd9Sstevel@tonic-gate# a la ws 3207c478bd9Sstevel@tonic-gateENVLDLIBS1= 3217c478bd9Sstevel@tonic-gateENVLDLIBS2= 3227c478bd9Sstevel@tonic-gateENVLDLIBS3= 3237c478bd9Sstevel@tonic-gateENVCPPFLAGS1= 3247c478bd9Sstevel@tonic-gateENVCPPFLAGS2= 3257c478bd9Sstevel@tonic-gateENVCPPFLAGS3= 3267c478bd9Sstevel@tonic-gateENVCPPFLAGS4= 3277c478bd9Sstevel@tonic-gatePARENT_ROOT= 328ead1f93eSLiane PrazaPARENT_TOOLS_ROOT= 3297c478bd9Sstevel@tonic-gate 33063df1173Spetedeif [[ "$MULTI_PROTO" != "yes" && "$MULTI_PROTO" != "no" ]]; then 33163df1173Spetede printf \ 33263df1173Spetede 'WARNING: invalid value for MULTI_PROTO (%s); setting to "no".\n' \ 33363df1173Spetede "$MULTI_PROTO" 33463df1173Spetede export MULTI_PROTO="no" 3354e5b757fSkupferfi 3364e5b757fSkupfer 33763df1173Spetede[[ "$MULTI_PROTO" == "yes" ]] && export ROOT="${ROOT}${SUFFIX}" 3384e5b757fSkupfer 3397c478bd9Sstevel@tonic-gateENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib" 3407c478bd9Sstevel@tonic-gateENVCPPFLAGS1="-I$ROOT/usr/include" 3417c478bd9Sstevel@tonic-gateMAKEFLAGS=e 3427c478bd9Sstevel@tonic-gate 34363df1173Spetedeexport \ 34463df1173Spetede ENVLDLIBS1 \ 34563df1173Spetede ENVLDLIBS2 \ 34663df1173Spetede ENVLDLIBS3 \ 34763df1173Spetede ENVCPPFLAGS1 \ 34863df1173Spetede ENVCPPFLAGS2 \ 34963df1173Spetede ENVCPPFLAGS3 \ 35063df1173Spetede ENVCPPFLAGS4 \ 35163df1173Spetede MAKEFLAGS \ 352cdf0c1d5Smjnelson PARENT_ROOT \ 3535c70f01eSRichard Lowe PARENT_TOOLS_ROOT 3547c478bd9Sstevel@tonic-gate 35563df1173Spetedeprintf 'RELEASE is %s\n' "$RELEASE" 35663df1173Spetedeprintf 'VERSION is %s\n' "$VERSION" 35763df1173Spetedeprintf 'RELEASE_DATE is %s\n\n' "$RELEASE_DATE" 3587c478bd9Sstevel@tonic-gate 35963df1173Spetedeif [[ -f "$SRC/Makefile" ]] && egrep -s '^setup:' "$SRC/Makefile" ; then 36063df1173Spetede print "The top-level 'setup' target is available \c" 36163df1173Spetede print "to build headers and tools." 36263df1173Spetede print "" 3637c478bd9Sstevel@tonic-gate 36463df1173Spetedeelif "${flags.t}" ; then 36563df1173Spetede printf \ 36663df1173Spetede 'The tools can be (re)built with the install target in %s.\n\n' \ 36763df1173Spetede "${TOOLS}" 3687c478bd9Sstevel@tonic-gatefi 3697c478bd9Sstevel@tonic-gate 3700756aa0bSGavin Maltby# 3710756aa0bSGavin Maltby# place ourselves in a new task, respecting BUILD_PROJECT if set. 3720756aa0bSGavin Maltby# 3730756aa0bSGavin Maltby/usr/bin/newtask -c $$ ${BUILD_PROJECT:+-p$BUILD_PROJECT} 3747c478bd9Sstevel@tonic-gate 37563df1173Spetedeif [[ "${flags.c}" == "false" && -x "$SHELL" && \ 376d7693b08SRoland Mainz "$(basename -- "${SHELL}")" != "csh" ]]; then 3777c478bd9Sstevel@tonic-gate # $SHELL is set, and it's not csh. 3787c478bd9Sstevel@tonic-gate 37963df1173Spetede if "${flags.f}" ; then 38063df1173Spetede print 'WARNING: -f is ignored when $SHELL is not csh' 3817c478bd9Sstevel@tonic-gate fi 3827c478bd9Sstevel@tonic-gate 38363df1173Spetede printf 'Using %s as shell.\n' "$SHELL" 38463df1173Spetede exec "$SHELL" ${@:+-c "$@"} 3857c478bd9Sstevel@tonic-gate 38663df1173Spetedeelif "${flags.f}" ; then 38763df1173Spetede print 'Using csh -f as shell.' 3887c478bd9Sstevel@tonic-gate exec csh -f ${@:+-c "$@"} 3897c478bd9Sstevel@tonic-gate 3907c478bd9Sstevel@tonic-gateelse 39163df1173Spetede print 'Using csh as shell.' 3927c478bd9Sstevel@tonic-gate exec csh ${@:+-c "$@"} 3937c478bd9Sstevel@tonic-gatefi 39463df1173Spetede 39563df1173Spetede# not reached 396