Home | History | Annotate | Download | only in scripts
      1   6594    petede #!/usr/bin/ksh93
      2      0    stevel #
      3      0    stevel # CDDL HEADER START
      4      0    stevel #
      5      0    stevel # The contents of this file are subject to the terms of the
      6   2294      meem # Common Development and Distribution License (the "License").
      7   2294      meem # You may not use this file except in compliance with the License.
      8      0    stevel #
      9      0    stevel # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10      0    stevel # or http://www.opensolaris.org/os/licensing.
     11      0    stevel # See the License for the specific language governing permissions
     12      0    stevel # and limitations under the License.
     13      0    stevel #
     14      0    stevel # When distributing Covered Code, include this CDDL HEADER in each
     15      0    stevel # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16      0    stevel # If applicable, add the following below this CDDL HEADER, with the
     17      0    stevel # fields enclosed by brackets "[]" replaced with your own identifying
     18      0    stevel # information: Portions Copyright [yyyy] [name of copyright owner]
     19      0    stevel #
     20      0    stevel # CDDL HEADER END
     21      0    stevel #
     22   4162    kupfer 
     23      0    stevel #
     24   9990     Gavin # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     25      0    stevel # Use is subject to license terms.
     26      0    stevel #
     27      0    stevel # Uses supplied "env" file, based on /opt/onbld/etc/env, to set shell variables
     28      0    stevel # before spawning a shell for doing a release-style builds interactively
     29      0    stevel # and incrementally.
     30      0    stevel #
     31      0    stevel 
     32   6594    petede function usage
     33   6594    petede {
     34   6594    petede     OPTIND=0
     35   6594    petede     getopts -a "${progname}" "${USAGE}" OPT '-?'
     36   6594    petede     exit 2
     37   6594    petede }
     38      0    stevel 
     39   6594    petede function is_source_build
     40   6594    petede {
     41   6594    petede 	"${flags.s.e}" || "${flags.s.d}" || "${flags.s.h}" || "${flags.s.o}"
     42   2947    kupfer 	return $?
     43   2947    kupfer }
     44   2947    kupfer 
     45   2947    kupfer #
     46   2947    kupfer # single function for setting -S flag and doing error checking.
     47   2947    kupfer # usage: set_S_flag <type>
     48   2947    kupfer # where <type> is the source build type ("E", "D", ...).
     49   2947    kupfer #
     50   6594    petede function set_S_flag
     51   6594    petede {
     52   2947    kupfer 	if is_source_build; then
     53   6594    petede 		print 'Can only build one source variant at a time.'
     54   2947    kupfer 		exit 1
     55   2947    kupfer 	fi
     56   6594    petede 	
     57   6594    petede 	case "$1" in
     58   6594    petede 		"E") flags.s.e=true ;;
     59   6594    petede 		"D") flags.s.d=true ;;
     60   6594    petede 		"H") flags.s.h=true ;;
     61   6594    petede 		"O") flags.s.o=true ;;
     62   6594    petede 		*)   usage ;;
     63   6594    petede 	esac
     64   2947    kupfer }
     65   6594    petede 
     66   6594    petede typeset -r USAGE=$'+
     67   6594    petede [-?\n@(#)\$Id: bldenv (OS/Net) 2008-04-06 \$\n]
     68   6594    petede [-author?OS/Net community <tools-discuss (at] opensolaris.org>]
     69   6594    petede [+NAME?bldenv - spawn shell for interactive incremental OS-Net
     70   6594    petede     consolidation builds]
     71   6594    petede [+DESCRIPTION?bldenv is a useful companion to the nightly(1) script for
     72   6594    petede     doing interactive and incremental builds in a workspace
     73   6594    petede     already built with nightly(1). bldenv spawns a shell set up
     74   6594    petede     with the same environment variables taken from an env_file,
     75   6594    petede     as prepared for use with nightly(1).]
     76   6594    petede [+?In addition to running a shell for interactive use, bldenv
     77   6594    petede     can optionally run a single command in the given environment,
     78   6594    petede     in the vein of sh -c or su -c. This is useful for
     79   6594    petede     scripting, when an interactive shell would not be. If the
     80   6594    petede     command is composed of multiple shell words or contains
     81   6594    petede     other shell metacharacters, it must be quoted appropriately.]
     82   6594    petede [+?bldenv is particularly useful for testing Makefile targets
     83   6594    petede     like clobber, install and _msg, which otherwise require digging
     84   6594    petede     through large build logs to figure out what is being
     85   6594    petede     done.]
     86   6594    petede [+?bldenv is also useful if you run into build issues with the
     87   6594    petede     source product or when generating OpenSolaris deliverables.
     88   6594    petede     If a source product build is flagged, the environment is set
     89   6594    petede     up for building the indicated source product tree, which is
     90   6594    petede     assumed to have already been created. If the OpenSolaris
     91   6594    petede     deliverables flag (-O) is set in NIGHTLY_OPTIONS, the
     92   6594    petede     environment is set up for building just the open source.
     93   6594    petede     This includes using an alternate proto area, as well as
     94   6594    petede     using the closed binaries in $CODEMGR_WS/closed.skel (which
     95   6594    petede     is assumed to already exist).]
     96   6594    petede [+?By default, bldenv will invoke the shell specified in
     97   6594    petede     $SHELL. If $SHELL is not set or is invalid, csh will be
     98   6594    petede     used.]
     99   6594    petede [c?force the use of csh, regardless of the  value  of $SHELL.]
    100   6594    petede [f?invoke csh with the -f (fast-start) option. This option is valid
    101   6594    petede     only if $SHELL is unset or if it points to csh.]
    102   6594    petede [d?set up environment for doing DEBUG builds (default is non-DEBUG)]
    103   6594    petede [t?set up environment to use the tools in usr/src/tools (this is the
    104   6594    petede     default, use +t to use the tools from /opt/onbld)]
    105   6594    petede [S]:[option?Build a variant of the source product.
    106   6594    petede The value of \aoption\a must be one of the following:]{
    107   6594    petede        [+E?build the exportable source variant of the source product.]
    108   6594    petede        [+D?build the domestic  source  (exportable + crypt) variant of
    109   6594    petede            the source product.]
    110   6594    petede        [+H?build hybrid source (binaries + deleted source).]
    111   6594    petede        [+O?simulate an OpenSolaris (open source only) build.]
    112   6594    petede }
    113   6594    petede 
    114   6594    petede <env_file> [command]
    115   6594    petede 
    116   6594    petede [+EXAMPLES]{
    117   6594    petede     [+?Example 1: Interactive use]{
    118   6594    petede         [+?Use bldenv to spawn a shell to perform  a  DEBUG  build  and
    119   6594    petede             testing of the  Makefile  targets  clobber and install for
    120   6594    petede             usr/src/cmd/true.]
    121   6594    petede         [+\n% rlogin wopr-2 -l gk
    122   6594    petede {root::wopr-2::49} bldenv -d /export0/jg/on10-se.env
    123   6594    petede Build type   is  DEBUG
    124   6594    petede RELEASE      is  5.10
    125   6594    petede VERSION      is  wopr-2::on10-se::11/01/2001
    126   6594    petede RELEASE_DATE is  May 2004
    127   6594    petede The top-level `setup\' target is available to build headers
    128   6594    petede and tools.
    129   6594    petede Using /usr/bin/tcsh as shell.
    130   6594    petede {root::wopr-2::49}
    131   6594    petede {root::wopr-2::49} cd $SRC/cmd/true
    132   6594    petede {root::wopr-2::50} make
    133   6594    petede {root::wopr-2::51} make clobber
    134   6594    petede /usr/bin/rm -f true true.po
    135   6594    petede {root::wopr-2::52} make
    136   6594    petede /usr/bin/rm -f true
    137   6594    petede cat true.sh > true
    138   6594    petede chmod +x true
    139   6594    petede {root::wopr-2::53} make install
    140   6594    petede install -s -m 0555 -u root -g bin -f /export0/jg/on10-se/proto/root_sparc/usr/bin true
    141   6594    petede `install\' is up to date.]
    142   6594    petede     }
    143   6594    petede     [+?Example 2: Non-interactive use]{
    144   6594    petede         [+?Invoke bldenv to create SUNWonbld with a single command:]
    145   6594    petede         [+\nexample% bldenv onnv_06 \'cd $SRC/tools && make pkg\']
    146   6594    petede         }
    147   6594    petede }
    148   6594    petede [+SEE ALSO?\bnightly\b(1)]
    149   6594    petede '
    150   6594    petede 
    151   6594    petede # main
    152   6594    petede builtin basename
    153   6594    petede 
    154   6594    petede # boolean flags (true/false)
    155   6594    petede typeset flags=(
    156   6594    petede 	typeset c=false
    157   6594    petede 	typeset f=false
    158   6594    petede 	typeset d=false
    159   6594    petede 	typeset O=false
    160   6594    petede 	typeset o=false
    161   6594    petede 	typeset t=true
    162   6594    petede 	typeset s=(
    163   6594    petede 		typeset e=false
    164   6594    petede 		typeset h=false
    165   6594    petede 		typeset d=false
    166   6594    petede 		typeset o=false
    167   6594    petede 	)
    168   6594    petede )
    169   6594    petede 
    170   6594    petede typeset progname="$(basename "${0}")"
    171      0    stevel 
    172      0    stevel OPTIND=1
    173      0    stevel SUFFIX="-nd"
    174   6594    petede 
    175   6594    petede while getopts -a "${progname}" "${USAGE}" OPT ; do 
    176   6594    petede     case ${OPT} in
    177   6594    petede 	  c)	flags.c=true  ;;
    178   6594    petede 	  +c)	flags.c=false ;;
    179   6594    petede 	  f)	flags.f=true  ;;
    180   6594    petede 	  +f)	flags.f=false ;;
    181   6594    petede 	  d)	flags.d=true  SUFFIX=""    ;;
    182   6594    petede 	  +d)	flags.d=false SUFFIX="-nd" ;;
    183   6594    petede 	  t)	flags.t=true  ;;
    184   6594    petede 	  +t)	flags.t=false ;;
    185   6594    petede 	  S)	set_S_flag "$OPTARG" ;;
    186   6594    petede 	  \?)	usage ;;
    187   6594    petede     esac
    188      0    stevel done
    189   6594    petede shift $((OPTIND-1))
    190      0    stevel 
    191      0    stevel # test that the path to the environment-setting file was given
    192   6594    petede if (( $# < 1 )) ; then
    193   6594    petede 	usage
    194      0    stevel fi
    195      0    stevel 
    196      0    stevel # force locale to C
    197   6594    petede export \
    198   6594    petede 	LC_COLLATE=C \
    199   6594    petede 	LC_CTYPE=C \
    200   6594    petede 	LC_MESSAGES=C \
    201   6594    petede 	LC_MONETARY=C \
    202   6594    petede 	LC_NUMERIC=C \
    203   6594    petede 	LC_TIME=C
    204      0    stevel 
    205      0    stevel # clear environment variables we know to be bad for the build
    206   6594    petede unset \
    207   6594    petede 	LD_OPTIONS \
    208   6594    petede         LD_LIBRARY_PATH \
    209   6594    petede         LD_AUDIT \
    210   6594    petede         LD_BIND_NOW \
    211   6594    petede         LD_BREADTH \
    212   6594    petede         LD_CONFIG \
    213   6594    petede 	LD_DEBUG \
    214   6594    petede         LD_FLAGS \
    215   6594    petede         LD_LIBRARY_PATH_64 \
    216   6594    petede         LD_NOVERSION \
    217   6594    petede         LD_ORIGIN \
    218   6594    petede 	LD_LOADFLTR \
    219   6594    petede         LD_NOAUXFLTR \
    220   6594    petede         LD_NOCONFIG \
    221   6594    petede         LD_NODIRCONFIG \
    222   6594    petede         LD_NOOBJALTER \
    223   6594    petede 	LD_PRELOAD \
    224   6594    petede         LD_PROFILE \
    225   6594    petede 	CONFIG \
    226   6594    petede 	GROUP \
    227   6594    petede 	OWNER \
    228   6594    petede 	REMOTE \
    229   6594    petede 	ENV \
    230   6594    petede 	ARCH \
    231   6594    petede 	CLASSPATH
    232      0    stevel 
    233   9990     Gavin #
    234   9990     Gavin # Setup environment variables
    235   9990     Gavin #
    236   9990     Gavin if [[ -f /etc/nightly.conf ]]; then
    237   9990     Gavin 	source /etc/nightly.conf
    238   9990     Gavin fi
    239   9990     Gavin 
    240   6594    petede if [[ -f "$1" ]]; then
    241   6594    petede 	if [[ "$1" == */* ]]; then
    242   6594    petede 		source "$1"
    243      0    stevel 	else
    244   6594    petede 		source "./$1"
    245      0    stevel 	fi
    246      0    stevel else
    247   6594    petede 	if [[ -f "/opt/onbld/env/$1" ]]; then
    248   6594    petede 		source "/opt/onbld/env/$1"
    249      0    stevel 	else
    250   6594    petede 		printf \
    251   6594    petede 		    'Cannot find env file as either %s or /opt/onbld/env/%s\n' \
    252   6594    petede 		    "$1" "$1"
    253      0    stevel 		exit 1
    254      0    stevel 	fi
    255      0    stevel fi
    256      0    stevel shift
    257      0    stevel 
    258   2947    kupfer # contents of stdenv.sh inserted after next line:
    259   2947    kupfer # STDENV_START
    260   2947    kupfer # STDENV_END
    261   2947    kupfer 
    262   6594    petede #MACH=$(uname -p)
    263      0    stevel 
    264      0    stevel # must match the getopts in nightly.sh
    265      0    stevel OPTIND=1
    266   6594    petede NIGHTLY_OPTIONS="-${NIGHTLY_OPTIONS#-}"
    267  10517      Mark while getopts '+0AaBCDdFfGIilMmNnOopRrS:tUuWwXxz' FLAG "$NIGHTLY_OPTIONS"
    268      0    stevel do
    269   6594    petede 	case "$FLAG" in
    270   6594    petede 	  O)	flags.O=true  ;;
    271   6594    petede 	  +O)	flags.O=false ;;
    272   6594    petede 	  o)	flags.o=true  ;;
    273   6594    petede 	  +o)	flags.o=false ;;
    274   6594    petede 	  t)	flags.t=true  ;;
    275   6594    petede 	  +t)	flags.t=false ;;
    276   6594    petede 	  S)	set_S_flag "$OPTARG" ;;
    277   6594    petede 	  *)	;;
    278      0    stevel 	esac
    279      0    stevel done
    280      0    stevel 
    281  10738     James POUND_SIGN="#"
    282  10738     James # have we set RELEASE_DATE in our env file?
    283  10738     James if [ -z "$RELEASE_DATE" ]; then
    284  10738     James 	RELEASE_DATE=$(LC_ALL=C date +"%B %Y")
    285  10738     James fi
    286  10738     James BUILD_DATE=$(LC_ALL=C date +%Y-%b-%d)
    287  10738     James BASEWSDIR=$(basename $CODEMGR_WS)
    288  10738     James DEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\""
    289  10738     James export DEV_CM RELEASE_DATE POUND_SIGN
    290  10738     James 
    291   6594    petede export INTERNAL_RELEASE_BUILD=
    292   6594    petede 
    293   6594    petede print 'Build type   is  \c'
    294   6594    petede if ${flags.d} ; then
    295   6594    petede 	print 'DEBUG'
    296      0    stevel 	unset RELEASE_BUILD
    297      0    stevel 	unset EXTRA_OPTIONS
    298      0    stevel 	unset EXTRA_CFLAGS
    299      0    stevel else
    300      0    stevel 	# default is a non-DEBUG build
    301   6594    petede 	print 'non-DEBUG'
    302   6594    petede 	export RELEASE_BUILD=
    303      0    stevel 	unset EXTRA_OPTIONS
    304      0    stevel 	unset EXTRA_CFLAGS
    305   4162    kupfer fi
    306   4162    kupfer 
    307   6594    petede if ${flags.O} ; then
    308   6594    petede 	export MULTI_PROTO="yes"
    309   6594    petede 	if [[ "$CLOSED_IS_PRESENT" == "yes" ]]; then
    310   6594    petede 		print "CLOSED_IS_PRESENT is 'no' (because of '-O')"
    311   4162    kupfer 	fi
    312   4162    kupfer 	export CLOSED_IS_PRESENT=no
    313   6594    petede 	export ON_CLOSED_BINS="$CODEMGR_WS/closed.skel"
    314      0    stevel fi
    315      0    stevel 
    316      0    stevel # update build-type variables
    317   6594    petede CPIODIR="${CPIODIR}${SUFFIX}"
    318   6594    petede PKGARCHIVE="${PKGARCHIVE}${SUFFIX}"
    319      0    stevel 
    320      0    stevel # Append source version
    321   6594    petede if "${flags.s.e}" ; then
    322   6594    petede         VERSION+=":EXPORT"
    323   6594    petede 	SRC="${EXPORT_SRC}/usr/src"
    324      0    stevel fi
    325      0    stevel  
    326   6594    petede if "${flags.s.d}" ; then
    327   6594    petede         VERSION+=":DOMESTIC"
    328   6594    petede 	SRC="${EXPORT_SRC}/usr/src"
    329      0    stevel fi
    330      0    stevel 
    331   6594    petede if "${flags.s.h}" ; then
    332   6594    petede         VERSION+=":HYBRID"
    333   6594    petede 	SRC="${EXPORT_SRC}/usr/src"
    334      0    stevel fi
    335      0    stevel  
    336   6594    petede if "${flags.s.o}" ; then
    337   6594    petede         VERSION+=":OPEN_ONLY"
    338   6594    petede 	SRC="${OPEN_SRCDIR}/usr/src"
    339   2947    kupfer fi
    340   2947    kupfer  
    341   7078  mjnelson #
    342   7078  mjnelson # Keep track of this now, before we manipulate $PATH
    343   7078  mjnelson #
    344   7078  mjnelson WHICH_SCM=$(dirname $(whence $0))/which_scm
    345   7078  mjnelson if [[ ! -x $WHICH_SCM ]]; then
    346   7078  mjnelson 	WHICH_SCM=which_scm
    347   7078  mjnelson fi
    348   7078  mjnelson $WHICH_SCM | read SCM_TYPE junk
    349   7078  mjnelson 
    350   7078  mjnelson 
    351      0    stevel # 	Set PATH for a build
    352   2294      meem PATH="/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:."
    353   6594    petede if [[ "${SUNWSPRO}" != "" ]]; then 
    354   6594    petede 	export PATH="${SUNWSPRO}/bin:$PATH" 
    355      0    stevel fi 
    356   2947    kupfer 
    357   6594    petede if [[ -z "$CLOSED_IS_PRESENT" ]]; then
    358   6594    petede 	if [[ -d $SRC/../closed ]]; then
    359   6594    petede 		export CLOSED_IS_PRESENT="yes"
    360   2947    kupfer 	else
    361   6594    petede 		export CLOSED_IS_PRESENT="no"
    362   2947    kupfer 	fi
    363   2947    kupfer fi
    364      0    stevel 
    365   6594    petede TOOLS="${SRC}/tools"
    366   6594    petede TOOLS_PROTO="${TOOLS}/proto"
    367      0    stevel 
    368   6594    petede if "${flags.t}" ; then
    369   6594    petede 	export ONBLD_TOOLS="${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}"
    370      0    stevel 
    371   6594    petede 	export STABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs"
    372   6594    petede 	export CTFSTABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs"
    373   6594    petede 	export GENOFFSETS="${TOOLS_PROTO}/opt/onbld/bin/genoffsets"
    374      0    stevel 
    375   6594    petede 	export CTFCONVERT="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert"
    376   6594    petede 	export CTFMERGE="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge"
    377      0    stevel 
    378   6594    petede 	export CTFCVTPTBL="${TOOLS_PROTO}/opt/onbld/bin/ctfcvtptbl"
    379   6594    petede 	export CTFFINDMOD="${TOOLS_PROTO}/opt/onbld/bin/ctffindmod"
    380      0    stevel 
    381      0    stevel 	PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}"
    382      0    stevel 	PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}"
    383      0    stevel 	export PATH
    384      0    stevel fi
    385      0    stevel 
    386   9990     Gavin export DMAKE_MODE=${DMAKE_MODE:-parallel}
    387   6594    petede 
    388   6594    petede if "${flags.o}" ; then
    389   6594    petede 	export CH=
    390   6594    petede else
    391   6594    petede 	unset CH
    392      0    stevel fi
    393      0    stevel DEF_STRIPFLAG="-s"
    394      0    stevel 
    395      0    stevel TMPDIR="/tmp"
    396      0    stevel 
    397   6594    petede # "o_FLAG" is used by "nightly.sh" and "makebfu.sh" (it may be useful to
    398   6594    petede # rename this variable using a more descriptive name later)
    399   6594    petede export o_FLAG="$(${flags.o} && print 'y' || print 'n')"
    400   6594    petede 
    401   6594    petede export \
    402   6594    petede 	PATH TMPDIR \
    403   6594    petede 	POUND_SIGN \
    404  10738     James 	DEF_STRIPFLAG \
    405  10738     James 	RELEASE_DATE
    406   6594    petede unset \
    407   6594    petede 	CFLAGS \
    408   6594    petede 	LD_LIBRARY_PATH
    409      0    stevel 
    410      0    stevel # a la ws
    411      0    stevel ENVLDLIBS1=
    412      0    stevel ENVLDLIBS2=
    413      0    stevel ENVLDLIBS3=
    414      0    stevel ENVCPPFLAGS1=
    415      0    stevel ENVCPPFLAGS2=
    416      0    stevel ENVCPPFLAGS3=
    417      0    stevel ENVCPPFLAGS4=
    418      0    stevel PARENT_ROOT=
    419      0    stevel 
    420   6594    petede "${flags.O}" && export ROOT="$ROOT-open"
    421   4162    kupfer 
    422   6594    petede if [[ "$MULTI_PROTO" != "yes" && "$MULTI_PROTO" != "no" ]]; then
    423   6594    petede 	printf \
    424   6594    petede 	    'WARNING: invalid value for MULTI_PROTO (%s);setting to "no".\n' \
    425   6594    petede 	    "$MULTI_PROTO"
    426   6594    petede 	export MULTI_PROTO="no"
    427   4162    kupfer fi
    428   4162    kupfer 
    429   6594    petede [[ "$MULTI_PROTO" == "yes" ]] && export ROOT="${ROOT}${SUFFIX}"
    430   4162    kupfer 
    431      0    stevel ENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib"
    432      0    stevel ENVCPPFLAGS1="-I$ROOT/usr/include"
    433      0    stevel MAKEFLAGS=e
    434      0    stevel 
    435   6594    petede export \
    436   6594    petede         ENVLDLIBS1 \
    437   6594    petede         ENVLDLIBS2 \
    438   6594    petede         ENVLDLIBS3 \
    439   6594    petede 	ENVCPPFLAGS1 \
    440   6594    petede         ENVCPPFLAGS2 \
    441   6594    petede         ENVCPPFLAGS3 \
    442   6594    petede 	ENVCPPFLAGS4 \
    443   6594    petede         MAKEFLAGS \
    444   7078  mjnelson         PARENT_ROOT \
    445   7078  mjnelson 	SCM_TYPE
    446      0    stevel 
    447   6594    petede printf 'RELEASE      is %s\n'   "$RELEASE"
    448   6594    petede printf 'VERSION      is %s\n'   "$VERSION"
    449   6594    petede printf 'RELEASE_DATE is %s\n\n' "$RELEASE_DATE"
    450      0    stevel 
    451   6594    petede if [[ -f "$SRC/Makefile" ]] && egrep -s '^setup:' "$SRC/Makefile" ; then
    452   6594    petede 	print "The top-level 'setup' target is available \c"
    453   6594    petede 	print "to build headers and tools."
    454   6594    petede 	print ""
    455      0    stevel 
    456   6594    petede elif "${flags.t}" ; then
    457   6594    petede 	printf \
    458   6594    petede 	    'The tools can be (re)built with the install target in %s.\n\n' \
    459   6594    petede 	    "${TOOLS}"
    460      0    stevel fi
    461      0    stevel 
    462   9990     Gavin #
    463   9990     Gavin # place ourselves in a new task, respecting BUILD_PROJECT if set.
    464   9990     Gavin #
    465   9990     Gavin /usr/bin/newtask -c $$ ${BUILD_PROJECT:+-p$BUILD_PROJECT}
    466      0    stevel 
    467   6594    petede if [[ "${flags.c}" == "false" && -x "$SHELL" && \
    468   6594    petede     "$(basename "${SHELL}")" != "csh" ]]; then
    469      0    stevel 	# $SHELL is set, and it's not csh.
    470      0    stevel 
    471   6594    petede 	if "${flags.f}" ; then
    472   6594    petede 		print 'WARNING: -f is ignored when $SHELL is not csh'
    473      0    stevel 	fi
    474      0    stevel 
    475   6594    petede 	printf 'Using %s as shell.\n' "$SHELL"
    476   6594    petede 	exec "$SHELL" ${@:+-c "$@"}
    477      0    stevel 
    478   6594    petede elif "${flags.f}" ; then
    479   6594    petede 	print 'Using csh -f as shell.'
    480      0    stevel 	exec csh -f ${@:+-c "$@"}
    481      0    stevel 
    482      0    stevel else
    483   6594    petede 	print 'Using csh as shell.'
    484      0    stevel 	exec csh ${@:+-c "$@"}
    485      0    stevel fi
    486   6594    petede 
    487   6594    petede # not reached
    488