xref: /titanic_50/usr/src/tools/scripts/bldenv.sh (revision 91d74a54bc02474ab29fbef3946724a428f27941)
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