xref: /titanic_51/usr/src/tools/scripts/bldenv.sh (revision 105958d7eca6f896fb8caab1f9777157eb0a352c)
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.
26*306f6ed4SGarrett D'Amore# Copyright 2014 Garrett D'Amore <garrett@damore.org>
277c478bd9Sstevel@tonic-gate#
287c478bd9Sstevel@tonic-gate# Uses supplied "env" file, based on /opt/onbld/etc/env, to set shell variables
297c478bd9Sstevel@tonic-gate# before spawning a shell for doing a release-style builds interactively
307c478bd9Sstevel@tonic-gate# and incrementally.
317c478bd9Sstevel@tonic-gate#
327c478bd9Sstevel@tonic-gate
33d7693b08SRoland Mainzfunction fatal_error
34d7693b08SRoland Mainz{
35d7693b08SRoland Mainz	print -u2 "${progname}: $*"
36d7693b08SRoland Mainz	exit 1
37d7693b08SRoland Mainz}
38d7693b08SRoland Mainz
3963df1173Spetedefunction usage
4063df1173Spetede{
4163df1173Spetede    OPTIND=0
4263df1173Spetede    getopts -a "${progname}" "${USAGE}" OPT '-?'
4363df1173Spetede    exit 2
4463df1173Spetede}
457c478bd9Sstevel@tonic-gate
4663df1173Spetedetypeset -r USAGE=$'+
4763df1173Spetede[-?\n@(#)\$Id: bldenv (OS/Net) 2008-04-06 \$\n]
4863df1173Spetede[-author?OS/Net community <tools-discuss@opensolaris.org>]
4963df1173Spetede[+NAME?bldenv - spawn shell for interactive incremental OS-Net
5063df1173Spetede    consolidation builds]
5163df1173Spetede[+DESCRIPTION?bldenv is a useful companion to the nightly(1) script for
5263df1173Spetede    doing interactive and incremental builds in a workspace
5363df1173Spetede    already built with nightly(1). bldenv spawns a shell set up
5463df1173Spetede    with the same environment variables taken from an env_file,
5563df1173Spetede    as prepared for use with nightly(1).]
5663df1173Spetede[+?In addition to running a shell for interactive use, bldenv
5763df1173Spetede    can optionally run a single command in the given environment,
5863df1173Spetede    in the vein of sh -c or su -c. This is useful for
5963df1173Spetede    scripting, when an interactive shell would not be. If the
6063df1173Spetede    command is composed of multiple shell words or contains
6163df1173Spetede    other shell metacharacters, it must be quoted appropriately.]
6263df1173Spetede[+?bldenv is particularly useful for testing Makefile targets
6363df1173Spetede    like clobber, install and _msg, which otherwise require digging
6463df1173Spetede    through large build logs to figure out what is being
6563df1173Spetede    done.]
6663df1173Spetede[+?By default, bldenv will invoke the shell specified in
6763df1173Spetede    $SHELL. If $SHELL is not set or is invalid, csh will be
6863df1173Spetede    used.]
6963df1173Spetede[c?force the use of csh, regardless of the  value  of $SHELL.]
7063df1173Spetede[f?invoke csh with the -f (fast-start) option. This option is valid
7163df1173Spetede    only if $SHELL is unset or if it points to csh.]
7263df1173Spetede[d?set up environment for doing DEBUG builds (default is non-DEBUG)]
7363df1173Spetede[t?set up environment to use the tools in usr/src/tools (this is the
7463df1173Spetede    default, use +t to use the tools from /opt/onbld)]
7563df1173Spetede
7663df1173Spetede<env_file> [command]
7763df1173Spetede
7863df1173Spetede[+EXAMPLES]{
7963df1173Spetede    [+?Example 1: Interactive use]{
8063df1173Spetede        [+?Use bldenv to spawn a shell to perform  a  DEBUG  build  and
8163df1173Spetede            testing of the  Makefile  targets  clobber and install for
8263df1173Spetede            usr/src/cmd/true.]
8363df1173Spetede        [+\n% rlogin wopr-2 -l gk
8463df1173Spetede{root::wopr-2::49} bldenv -d /export0/jg/on10-se.env
8563df1173SpetedeBuild type   is  DEBUG
8663df1173SpetedeRELEASE      is  5.10
8763df1173SpetedeVERSION      is  wopr-2::on10-se::11/01/2001
8863df1173SpetedeRELEASE_DATE is  May 2004
8963df1173SpetedeThe top-level `setup\' target is available to build headers
9063df1173Spetedeand tools.
9163df1173SpetedeUsing /usr/bin/tcsh as shell.
9263df1173Spetede{root::wopr-2::49}
9363df1173Spetede{root::wopr-2::49} cd $SRC/cmd/true
9463df1173Spetede{root::wopr-2::50} make
9563df1173Spetede{root::wopr-2::51} make clobber
9663df1173Spetede/usr/bin/rm -f true true.po
9763df1173Spetede{root::wopr-2::52} make
9863df1173Spetede/usr/bin/rm -f true
9963df1173Spetedecat true.sh > true
10063df1173Spetedechmod +x true
10163df1173Spetede{root::wopr-2::53} make install
10263df1173Spetedeinstall -s -m 0555 -u root -g bin -f /export0/jg/on10-se/proto/root_sparc/usr/bin true
10363df1173Spetede`install\' is up to date.]
10463df1173Spetede    }
10563df1173Spetede    [+?Example 2: Non-interactive use]{
10663df1173Spetede        [+?Invoke bldenv to create SUNWonbld with a single command:]
10763df1173Spetede        [+\nexample% bldenv onnv_06 \'cd $SRC/tools && make pkg\']
10863df1173Spetede        }
10963df1173Spetede}
11063df1173Spetede[+SEE ALSO?\bnightly\b(1)]
11163df1173Spetede'
11263df1173Spetede
11363df1173Spetede# main
11463df1173Spetedebuiltin basename
11563df1173Spetede
11663df1173Spetede# boolean flags (true/false)
11763df1173Spetedetypeset flags=(
11863df1173Spetede	typeset c=false
11963df1173Spetede	typeset f=false
12063df1173Spetede	typeset d=false
12163df1173Spetede	typeset O=false
12263df1173Spetede	typeset o=false
12363df1173Spetede	typeset t=true
12463df1173Spetede	typeset s=(
12563df1173Spetede		typeset e=false
12663df1173Spetede		typeset h=false
12763df1173Spetede		typeset d=false
12863df1173Spetede		typeset o=false
12963df1173Spetede	)
13063df1173Spetede)
13163df1173Spetede
132d7693b08SRoland Mainztypeset progname="$(basename -- "${0}")"
13363df1173Spetede
1347c478bd9Sstevel@tonic-gateOPTIND=1
1357c478bd9Sstevel@tonic-gateSUFFIX="-nd"
13663df1173Spetede
13763df1173Spetedewhile getopts -a "${progname}" "${USAGE}" OPT ; do
13863df1173Spetede    case ${OPT} in
13963df1173Spetede	  c)	flags.c=true  ;;
14063df1173Spetede	  +c)	flags.c=false ;;
14163df1173Spetede	  f)	flags.f=true  ;;
14263df1173Spetede	  +f)	flags.f=false ;;
14363df1173Spetede	  d)	flags.d=true  SUFFIX=""    ;;
14463df1173Spetede	  +d)	flags.d=false SUFFIX="-nd" ;;
14563df1173Spetede	  t)	flags.t=true  ;;
14663df1173Spetede	  +t)	flags.t=false ;;
14763df1173Spetede	  \?)	usage ;;
1487c478bd9Sstevel@tonic-gate    esac
1497c478bd9Sstevel@tonic-gatedone
15063df1173Spetedeshift $((OPTIND-1))
1517c478bd9Sstevel@tonic-gate
1527c478bd9Sstevel@tonic-gate# test that the path to the environment-setting file was given
15363df1173Spetedeif (( $# < 1 )) ; then
15463df1173Spetede	usage
1557c478bd9Sstevel@tonic-gatefi
1567c478bd9Sstevel@tonic-gate
1577c478bd9Sstevel@tonic-gate# force locale to C
15863df1173Spetedeexport \
15991d74a54SRichard Lowe	LANG=C \
16091d74a54SRichard Lowe	LC_ALL=C \
16163df1173Spetede	LC_COLLATE=C \
16263df1173Spetede	LC_CTYPE=C \
16363df1173Spetede	LC_MESSAGES=C \
16463df1173Spetede	LC_MONETARY=C \
16563df1173Spetede	LC_NUMERIC=C \
16663df1173Spetede	LC_TIME=C
1677c478bd9Sstevel@tonic-gate
1687c478bd9Sstevel@tonic-gate# clear environment variables we know to be bad for the build
16963df1173Spetedeunset \
17063df1173Spetede	LD_OPTIONS \
17163df1173Spetede	LD_LIBRARY_PATH \
17263df1173Spetede	LD_AUDIT \
17363df1173Spetede	LD_BIND_NOW \
17463df1173Spetede	LD_BREADTH \
17563df1173Spetede	LD_CONFIG \
17663df1173Spetede	LD_DEBUG \
17763df1173Spetede	LD_FLAGS \
17863df1173Spetede	LD_LIBRARY_PATH_64 \
17963df1173Spetede	LD_NOVERSION \
18063df1173Spetede	LD_ORIGIN \
18163df1173Spetede	LD_LOADFLTR \
18263df1173Spetede	LD_NOAUXFLTR \
18363df1173Spetede	LD_NOCONFIG \
18463df1173Spetede	LD_NODIRCONFIG \
18563df1173Spetede	LD_NOOBJALTER \
18663df1173Spetede	LD_PRELOAD \
18763df1173Spetede	LD_PROFILE \
18863df1173Spetede	CONFIG \
18963df1173Spetede	GROUP \
19063df1173Spetede	OWNER \
19163df1173Spetede	REMOTE \
19263df1173Spetede	ENV \
19363df1173Spetede	ARCH \
19463df1173Spetede	CLASSPATH
1957c478bd9Sstevel@tonic-gate
1960756aa0bSGavin Maltby#
1970756aa0bSGavin Maltby# Setup environment variables
1980756aa0bSGavin Maltby#
1990756aa0bSGavin Maltbyif [[ -f /etc/nightly.conf ]]; then
2000756aa0bSGavin Maltby	source /etc/nightly.conf
2010756aa0bSGavin Maltbyfi
2020756aa0bSGavin Maltby
20363df1173Spetedeif [[ -f "$1" ]]; then
20463df1173Spetede	if [[ "$1" == */* ]]; then
20563df1173Spetede		source "$1"
2067c478bd9Sstevel@tonic-gate	else
20763df1173Spetede		source "./$1"
2087c478bd9Sstevel@tonic-gate	fi
2097c478bd9Sstevel@tonic-gateelse
21063df1173Spetede	if [[ -f "/opt/onbld/env/$1" ]]; then
21163df1173Spetede		source "/opt/onbld/env/$1"
2127c478bd9Sstevel@tonic-gate	else
21363df1173Spetede		printf \
21463df1173Spetede		    'Cannot find env file as either %s or /opt/onbld/env/%s\n' \
21563df1173Spetede		    "$1" "$1"
2167c478bd9Sstevel@tonic-gate		exit 1
2177c478bd9Sstevel@tonic-gate	fi
2187c478bd9Sstevel@tonic-gatefi
2197c478bd9Sstevel@tonic-gateshift
2207c478bd9Sstevel@tonic-gate
2211fe69678Skupfer# contents of stdenv.sh inserted after next line:
2221fe69678Skupfer# STDENV_START
2231fe69678Skupfer# STDENV_END
2247c478bd9Sstevel@tonic-gate
225d7693b08SRoland Mainz# Check if we have sufficient data to continue...
226d7693b08SRoland Mainz[[ -v CODEMGR_WS ]] || fatal_error "Error: Variable CODEMGR_WS not set."
227d7693b08SRoland Mainz[[ -d "${CODEMGR_WS}" ]] || fatal_error "Error: ${CODEMGR_WS} is not a directory."
228d7693b08SRoland Mainz[[ -f "${CODEMGR_WS}/usr/src/Makefile" ]] || fatal_error "Error: ${CODEMGR_WS}/usr/src/Makefile not found."
229d7693b08SRoland Mainz
2307c478bd9Sstevel@tonic-gate# must match the getopts in nightly.sh
2317c478bd9Sstevel@tonic-gateOPTIND=1
23263df1173SpetedeNIGHTLY_OPTIONS="-${NIGHTLY_OPTIONS#-}"
233*306f6ed4SGarrett D'Amorewhile getopts '+0ABCDdFfGIilMmNnpRrtUuwW' FLAG $NIGHTLY_OPTIONS
2347c478bd9Sstevel@tonic-gatedo
23563df1173Spetede	case "$FLAG" in
23663df1173Spetede	  t)	flags.t=true  ;;
23763df1173Spetede	  +t)	flags.t=false ;;
2387c478bd9Sstevel@tonic-gate	  *)	;;
2397c478bd9Sstevel@tonic-gate	esac
2407c478bd9Sstevel@tonic-gatedone
2417c478bd9Sstevel@tonic-gate
24248bc00d6SjmcpPOUND_SIGN="#"
24348bc00d6Sjmcp# have we set RELEASE_DATE in our env file?
24448bc00d6Sjmcpif [ -z "$RELEASE_DATE" ]; then
24548bc00d6Sjmcp	RELEASE_DATE=$(LC_ALL=C date +"%B %Y")
24648bc00d6Sjmcpfi
24748bc00d6SjmcpBUILD_DATE=$(LC_ALL=C date +%Y-%b-%d)
248d7693b08SRoland MainzBASEWSDIR=$(basename -- "${CODEMGR_WS}")
24948bc00d6SjmcpDEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\""
25048bc00d6Sjmcpexport DEV_CM RELEASE_DATE POUND_SIGN
25148bc00d6Sjmcp
25263df1173Spetedeprint 'Build type   is  \c'
25363df1173Spetedeif ${flags.d} ; then
25463df1173Spetede	print 'DEBUG'
2557c478bd9Sstevel@tonic-gate	unset RELEASE_BUILD
2567c478bd9Sstevel@tonic-gate	unset EXTRA_OPTIONS
2577c478bd9Sstevel@tonic-gate	unset EXTRA_CFLAGS
2587c478bd9Sstevel@tonic-gateelse
2597c478bd9Sstevel@tonic-gate	# default is a non-DEBUG build
26063df1173Spetede	print 'non-DEBUG'
26163df1173Spetede	export RELEASE_BUILD=
2627c478bd9Sstevel@tonic-gate	unset EXTRA_OPTIONS
2637c478bd9Sstevel@tonic-gate	unset EXTRA_CFLAGS
2647c478bd9Sstevel@tonic-gatefi
2657c478bd9Sstevel@tonic-gate
2667c478bd9Sstevel@tonic-gate# update build-type variables
26763df1173SpetedePKGARCHIVE="${PKGARCHIVE}${SUFFIX}"
2687c478bd9Sstevel@tonic-gate
2697c478bd9Sstevel@tonic-gate# 	Set PATH for a build
270b84bdc30SmeemPATH="/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:."
27163df1173Spetedeif [[ "${SUNWSPRO}" != "" ]]; then
27263df1173Spetede	export PATH="${SUNWSPRO}/bin:$PATH"
2737c478bd9Sstevel@tonic-gatefi
2747c478bd9Sstevel@tonic-gate
275b1a0a82dSRobert Mustacchiif [[ -n "${MAKE}" ]]; then
276e119f243SRobert Mustacchi	if [[ -x "${MAKE}" ]]; then
277e119f243SRobert Mustacchi		export PATH="$(dirname -- "${MAKE}"):$PATH"
278e119f243SRobert Mustacchi	else
279b1a0a82dSRobert Mustacchi		print "\$MAKE (${MAKE}) is not a valid executible"
280e119f243SRobert Mustacchi		exit 1
281e119f243SRobert Mustacchi	fi
282b1a0a82dSRobert Mustacchifi
283e119f243SRobert Mustacchi
28463df1173SpetedeTOOLS="${SRC}/tools"
285ead1f93eSLiane PrazaTOOLS_PROTO="${TOOLS}/proto/root_${MACH}-nd" ; export TOOLS_PROTO
2867c478bd9Sstevel@tonic-gate
28763df1173Spetedeif "${flags.t}" ; then
28863df1173Spetede	export ONBLD_TOOLS="${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}"
2897c478bd9Sstevel@tonic-gate
29063df1173Spetede	export STABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs"
29163df1173Spetede	export CTFSTABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs"
29263df1173Spetede	export GENOFFSETS="${TOOLS_PROTO}/opt/onbld/bin/genoffsets"
2937c478bd9Sstevel@tonic-gate
29463df1173Spetede	export CTFCONVERT="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert"
29563df1173Spetede	export CTFMERGE="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge"
2967c478bd9Sstevel@tonic-gate
2977c478bd9Sstevel@tonic-gate	PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}"
2987c478bd9Sstevel@tonic-gate	PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}"
2997c478bd9Sstevel@tonic-gate	export PATH
3007c478bd9Sstevel@tonic-gatefi
3017c478bd9Sstevel@tonic-gate
3020756aa0bSGavin Maltbyexport DMAKE_MODE=${DMAKE_MODE:-parallel}
30363df1173Spetede
3047c478bd9Sstevel@tonic-gateDEF_STRIPFLAG="-s"
3057c478bd9Sstevel@tonic-gate
3067c478bd9Sstevel@tonic-gateTMPDIR="/tmp"
3077c478bd9Sstevel@tonic-gate
30863df1173Spetedeexport \
30963df1173Spetede	PATH TMPDIR \
31063df1173Spetede	POUND_SIGN \
31148bc00d6Sjmcp	DEF_STRIPFLAG \
31248bc00d6Sjmcp	RELEASE_DATE
31363df1173Spetedeunset \
31463df1173Spetede	CFLAGS \
31563df1173Spetede	LD_LIBRARY_PATH
3167c478bd9Sstevel@tonic-gate
3177c478bd9Sstevel@tonic-gate# a la ws
3187c478bd9Sstevel@tonic-gateENVLDLIBS1=
3197c478bd9Sstevel@tonic-gateENVLDLIBS2=
3207c478bd9Sstevel@tonic-gateENVLDLIBS3=
3217c478bd9Sstevel@tonic-gateENVCPPFLAGS1=
3227c478bd9Sstevel@tonic-gateENVCPPFLAGS2=
3237c478bd9Sstevel@tonic-gateENVCPPFLAGS3=
3247c478bd9Sstevel@tonic-gateENVCPPFLAGS4=
3257c478bd9Sstevel@tonic-gatePARENT_ROOT=
326ead1f93eSLiane PrazaPARENT_TOOLS_ROOT=
3277c478bd9Sstevel@tonic-gate
32863df1173Spetedeif [[ "$MULTI_PROTO" != "yes" && "$MULTI_PROTO" != "no" ]]; then
32963df1173Spetede	printf \
33063df1173Spetede	    'WARNING: invalid value for MULTI_PROTO (%s); setting to "no".\n' \
33163df1173Spetede	    "$MULTI_PROTO"
33263df1173Spetede	export MULTI_PROTO="no"
3334e5b757fSkupferfi
3344e5b757fSkupfer
33563df1173Spetede[[ "$MULTI_PROTO" == "yes" ]] && export ROOT="${ROOT}${SUFFIX}"
3364e5b757fSkupfer
3377c478bd9Sstevel@tonic-gateENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib"
3387c478bd9Sstevel@tonic-gateENVCPPFLAGS1="-I$ROOT/usr/include"
3397c478bd9Sstevel@tonic-gateMAKEFLAGS=e
3407c478bd9Sstevel@tonic-gate
34163df1173Spetedeexport \
34263df1173Spetede        ENVLDLIBS1 \
34363df1173Spetede        ENVLDLIBS2 \
34463df1173Spetede        ENVLDLIBS3 \
34563df1173Spetede	ENVCPPFLAGS1 \
34663df1173Spetede        ENVCPPFLAGS2 \
34763df1173Spetede        ENVCPPFLAGS3 \
34863df1173Spetede	ENVCPPFLAGS4 \
34963df1173Spetede        MAKEFLAGS \
350cdf0c1d5Smjnelson        PARENT_ROOT \
3515c70f01eSRichard Lowe        PARENT_TOOLS_ROOT
3527c478bd9Sstevel@tonic-gate
35363df1173Spetedeprintf 'RELEASE      is %s\n'   "$RELEASE"
35463df1173Spetedeprintf 'VERSION      is %s\n'   "$VERSION"
35563df1173Spetedeprintf 'RELEASE_DATE is %s\n\n' "$RELEASE_DATE"
3567c478bd9Sstevel@tonic-gate
35763df1173Spetedeif [[ -f "$SRC/Makefile" ]] && egrep -s '^setup:' "$SRC/Makefile" ; then
35863df1173Spetede	print "The top-level 'setup' target is available \c"
35963df1173Spetede	print "to build headers and tools."
36063df1173Spetede	print ""
3617c478bd9Sstevel@tonic-gate
36263df1173Spetedeelif "${flags.t}" ; then
36363df1173Spetede	printf \
36463df1173Spetede	    'The tools can be (re)built with the install target in %s.\n\n' \
36563df1173Spetede	    "${TOOLS}"
3667c478bd9Sstevel@tonic-gatefi
3677c478bd9Sstevel@tonic-gate
3680756aa0bSGavin Maltby#
3690756aa0bSGavin Maltby# place ourselves in a new task, respecting BUILD_PROJECT if set.
3700756aa0bSGavin Maltby#
3710756aa0bSGavin Maltby/usr/bin/newtask -c $$ ${BUILD_PROJECT:+-p$BUILD_PROJECT}
3727c478bd9Sstevel@tonic-gate
37363df1173Spetedeif [[ "${flags.c}" == "false" && -x "$SHELL" && \
374d7693b08SRoland Mainz    "$(basename -- "${SHELL}")" != "csh" ]]; then
3757c478bd9Sstevel@tonic-gate	# $SHELL is set, and it's not csh.
3767c478bd9Sstevel@tonic-gate
37763df1173Spetede	if "${flags.f}" ; then
37863df1173Spetede		print 'WARNING: -f is ignored when $SHELL is not csh'
3797c478bd9Sstevel@tonic-gate	fi
3807c478bd9Sstevel@tonic-gate
38163df1173Spetede	printf 'Using %s as shell.\n' "$SHELL"
38263df1173Spetede	exec "$SHELL" ${@:+-c "$@"}
3837c478bd9Sstevel@tonic-gate
38463df1173Spetedeelif "${flags.f}" ; then
38563df1173Spetede	print 'Using csh -f as shell.'
3867c478bd9Sstevel@tonic-gate	exec csh -f ${@:+-c "$@"}
3877c478bd9Sstevel@tonic-gate
3887c478bd9Sstevel@tonic-gateelse
38963df1173Spetede	print 'Using csh as shell.'
3907c478bd9Sstevel@tonic-gate	exec csh ${@:+-c "$@"}
3917c478bd9Sstevel@tonic-gatefi
39263df1173Spetede
39363df1173Spetede# not reached
394