xref: /titanic_50/usr/src/tools/scripts/bldenv.sh (revision 5c70f01ea815cb0a517425abce455bd6f407a852)
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
4563df1173Spetedefunction is_source_build
4663df1173Spetede{
4763df1173Spetede	"${flags.s.e}" || "${flags.s.d}" || "${flags.s.h}" || "${flags.s.o}"
481fe69678Skupfer	return $?
491fe69678Skupfer}
501fe69678Skupfer
511fe69678Skupfer#
521fe69678Skupfer# single function for setting -S flag and doing error checking.
531fe69678Skupfer# usage: set_S_flag <type>
541fe69678Skupfer# where <type> is the source build type ("E", "D", ...).
551fe69678Skupfer#
5663df1173Spetedefunction set_S_flag
5763df1173Spetede{
581fe69678Skupfer	if is_source_build; then
5963df1173Spetede		print 'Can only build one source variant at a time.'
601fe69678Skupfer		exit 1
611fe69678Skupfer	fi
6263df1173Spetede
6363df1173Spetede	case "$1" in
6463df1173Spetede		"E") flags.s.e=true ;;
6563df1173Spetede		"D") flags.s.d=true ;;
6663df1173Spetede		"H") flags.s.h=true ;;
6763df1173Spetede		"O") flags.s.o=true ;;
6863df1173Spetede		*)   usage ;;
6963df1173Spetede	esac
701fe69678Skupfer}
717c478bd9Sstevel@tonic-gate
7263df1173Spetedetypeset -r USAGE=$'+
7363df1173Spetede[-?\n@(#)\$Id: bldenv (OS/Net) 2008-04-06 \$\n]
7463df1173Spetede[-author?OS/Net community <tools-discuss@opensolaris.org>]
7563df1173Spetede[+NAME?bldenv - spawn shell for interactive incremental OS-Net
7663df1173Spetede    consolidation builds]
7763df1173Spetede[+DESCRIPTION?bldenv is a useful companion to the nightly(1) script for
7863df1173Spetede    doing interactive and incremental builds in a workspace
7963df1173Spetede    already built with nightly(1). bldenv spawns a shell set up
8063df1173Spetede    with the same environment variables taken from an env_file,
8163df1173Spetede    as prepared for use with nightly(1).]
8263df1173Spetede[+?In addition to running a shell for interactive use, bldenv
8363df1173Spetede    can optionally run a single command in the given environment,
8463df1173Spetede    in the vein of sh -c or su -c. This is useful for
8563df1173Spetede    scripting, when an interactive shell would not be. If the
8663df1173Spetede    command is composed of multiple shell words or contains
8763df1173Spetede    other shell metacharacters, it must be quoted appropriately.]
8863df1173Spetede[+?bldenv is particularly useful for testing Makefile targets
8963df1173Spetede    like clobber, install and _msg, which otherwise require digging
9063df1173Spetede    through large build logs to figure out what is being
9163df1173Spetede    done.]
9263df1173Spetede[+?bldenv is also useful if you run into build issues with the
9363df1173Spetede    source product or when generating OpenSolaris deliverables.
9463df1173Spetede    If a source product build is flagged, the environment is set
9563df1173Spetede    up for building the indicated source product tree, which is
9663df1173Spetede    assumed to have already been created. If the OpenSolaris
9763df1173Spetede    deliverables flag (-O) is set in NIGHTLY_OPTIONS, the
9863df1173Spetede    environment is set up for building just the open source.
9963df1173Spetede    This includes using an alternate proto area, as well as
10063df1173Spetede    using the closed binaries in $CODEMGR_WS/closed.skel (which
10163df1173Spetede    is assumed to already exist).]
10263df1173Spetede[+?By default, bldenv will invoke the shell specified in
10363df1173Spetede    $SHELL. If $SHELL is not set or is invalid, csh will be
10463df1173Spetede    used.]
10563df1173Spetede[c?force the use of csh, regardless of the  value  of $SHELL.]
10663df1173Spetede[f?invoke csh with the -f (fast-start) option. This option is valid
10763df1173Spetede    only if $SHELL is unset or if it points to csh.]
10863df1173Spetede[d?set up environment for doing DEBUG builds (default is non-DEBUG)]
10963df1173Spetede[t?set up environment to use the tools in usr/src/tools (this is the
11063df1173Spetede    default, use +t to use the tools from /opt/onbld)]
11163df1173Spetede[S]:[option?Build a variant of the source product.
11263df1173SpetedeThe value of \aoption\a must be one of the following:]{
11363df1173Spetede       [+E?build the exportable source variant of the source product.]
11463df1173Spetede       [+D?build the domestic  source  (exportable + crypt) variant of
11563df1173Spetede           the source product.]
11663df1173Spetede       [+H?build hybrid source (binaries + deleted source).]
11763df1173Spetede       [+O?simulate an OpenSolaris (open source only) build.]
11863df1173Spetede}
11963df1173Spetede
12063df1173Spetede<env_file> [command]
12163df1173Spetede
12263df1173Spetede[+EXAMPLES]{
12363df1173Spetede    [+?Example 1: Interactive use]{
12463df1173Spetede        [+?Use bldenv to spawn a shell to perform  a  DEBUG  build  and
12563df1173Spetede            testing of the  Makefile  targets  clobber and install for
12663df1173Spetede            usr/src/cmd/true.]
12763df1173Spetede        [+\n% rlogin wopr-2 -l gk
12863df1173Spetede{root::wopr-2::49} bldenv -d /export0/jg/on10-se.env
12963df1173SpetedeBuild type   is  DEBUG
13063df1173SpetedeRELEASE      is  5.10
13163df1173SpetedeVERSION      is  wopr-2::on10-se::11/01/2001
13263df1173SpetedeRELEASE_DATE is  May 2004
13363df1173SpetedeThe top-level `setup\' target is available to build headers
13463df1173Spetedeand tools.
13563df1173SpetedeUsing /usr/bin/tcsh as shell.
13663df1173Spetede{root::wopr-2::49}
13763df1173Spetede{root::wopr-2::49} cd $SRC/cmd/true
13863df1173Spetede{root::wopr-2::50} make
13963df1173Spetede{root::wopr-2::51} make clobber
14063df1173Spetede/usr/bin/rm -f true true.po
14163df1173Spetede{root::wopr-2::52} make
14263df1173Spetede/usr/bin/rm -f true
14363df1173Spetedecat true.sh > true
14463df1173Spetedechmod +x true
14563df1173Spetede{root::wopr-2::53} make install
14663df1173Spetedeinstall -s -m 0555 -u root -g bin -f /export0/jg/on10-se/proto/root_sparc/usr/bin true
14763df1173Spetede`install\' is up to date.]
14863df1173Spetede    }
14963df1173Spetede    [+?Example 2: Non-interactive use]{
15063df1173Spetede        [+?Invoke bldenv to create SUNWonbld with a single command:]
15163df1173Spetede        [+\nexample% bldenv onnv_06 \'cd $SRC/tools && make pkg\']
15263df1173Spetede        }
15363df1173Spetede}
15463df1173Spetede[+SEE ALSO?\bnightly\b(1)]
15563df1173Spetede'
15663df1173Spetede
15763df1173Spetede# main
15863df1173Spetedebuiltin basename
15963df1173Spetede
16063df1173Spetede# boolean flags (true/false)
16163df1173Spetedetypeset flags=(
16263df1173Spetede	typeset c=false
16363df1173Spetede	typeset f=false
16463df1173Spetede	typeset d=false
16563df1173Spetede	typeset O=false
16663df1173Spetede	typeset o=false
16763df1173Spetede	typeset t=true
16863df1173Spetede	typeset s=(
16963df1173Spetede		typeset e=false
17063df1173Spetede		typeset h=false
17163df1173Spetede		typeset d=false
17263df1173Spetede		typeset o=false
17363df1173Spetede	)
17463df1173Spetede)
17563df1173Spetede
176d7693b08SRoland Mainztypeset progname="$(basename -- "${0}")"
17763df1173Spetede
1787c478bd9Sstevel@tonic-gateOPTIND=1
1797c478bd9Sstevel@tonic-gateSUFFIX="-nd"
18063df1173Spetede
18163df1173Spetedewhile getopts -a "${progname}" "${USAGE}" OPT ; do
18263df1173Spetede    case ${OPT} in
18363df1173Spetede	  c)	flags.c=true  ;;
18463df1173Spetede	  +c)	flags.c=false ;;
18563df1173Spetede	  f)	flags.f=true  ;;
18663df1173Spetede	  +f)	flags.f=false ;;
18763df1173Spetede	  d)	flags.d=true  SUFFIX=""    ;;
18863df1173Spetede	  +d)	flags.d=false SUFFIX="-nd" ;;
18963df1173Spetede	  t)	flags.t=true  ;;
19063df1173Spetede	  +t)	flags.t=false ;;
19163df1173Spetede	  S)	set_S_flag "$OPTARG" ;;
19263df1173Spetede	  \?)	usage ;;
1937c478bd9Sstevel@tonic-gate    esac
1947c478bd9Sstevel@tonic-gatedone
19563df1173Spetedeshift $((OPTIND-1))
1967c478bd9Sstevel@tonic-gate
1977c478bd9Sstevel@tonic-gate# test that the path to the environment-setting file was given
19863df1173Spetedeif (( $# < 1 )) ; then
19963df1173Spetede	usage
2007c478bd9Sstevel@tonic-gatefi
2017c478bd9Sstevel@tonic-gate
2027c478bd9Sstevel@tonic-gate# force locale to C
20363df1173Spetedeexport \
20463df1173Spetede	LC_COLLATE=C \
20563df1173Spetede	LC_CTYPE=C \
20663df1173Spetede	LC_MESSAGES=C \
20763df1173Spetede	LC_MONETARY=C \
20863df1173Spetede	LC_NUMERIC=C \
20963df1173Spetede	LC_TIME=C
2107c478bd9Sstevel@tonic-gate
2117c478bd9Sstevel@tonic-gate# clear environment variables we know to be bad for the build
21263df1173Spetedeunset \
21363df1173Spetede	LD_OPTIONS \
21463df1173Spetede        LD_LIBRARY_PATH \
21563df1173Spetede        LD_AUDIT \
21663df1173Spetede        LD_BIND_NOW \
21763df1173Spetede        LD_BREADTH \
21863df1173Spetede        LD_CONFIG \
21963df1173Spetede	LD_DEBUG \
22063df1173Spetede        LD_FLAGS \
22163df1173Spetede        LD_LIBRARY_PATH_64 \
22263df1173Spetede        LD_NOVERSION \
22363df1173Spetede        LD_ORIGIN \
22463df1173Spetede	LD_LOADFLTR \
22563df1173Spetede        LD_NOAUXFLTR \
22663df1173Spetede        LD_NOCONFIG \
22763df1173Spetede        LD_NODIRCONFIG \
22863df1173Spetede        LD_NOOBJALTER \
22963df1173Spetede	LD_PRELOAD \
23063df1173Spetede        LD_PROFILE \
23163df1173Spetede	CONFIG \
23263df1173Spetede	GROUP \
23363df1173Spetede	OWNER \
23463df1173Spetede	REMOTE \
23563df1173Spetede	ENV \
23663df1173Spetede	ARCH \
23763df1173Spetede	CLASSPATH
2387c478bd9Sstevel@tonic-gate
2390756aa0bSGavin Maltby#
2400756aa0bSGavin Maltby# Setup environment variables
2410756aa0bSGavin Maltby#
2420756aa0bSGavin Maltbyif [[ -f /etc/nightly.conf ]]; then
2430756aa0bSGavin Maltby	source /etc/nightly.conf
2440756aa0bSGavin Maltbyfi
2450756aa0bSGavin Maltby
24663df1173Spetedeif [[ -f "$1" ]]; then
24763df1173Spetede	if [[ "$1" == */* ]]; then
24863df1173Spetede		source "$1"
2497c478bd9Sstevel@tonic-gate	else
25063df1173Spetede		source "./$1"
2517c478bd9Sstevel@tonic-gate	fi
2527c478bd9Sstevel@tonic-gateelse
25363df1173Spetede	if [[ -f "/opt/onbld/env/$1" ]]; then
25463df1173Spetede		source "/opt/onbld/env/$1"
2557c478bd9Sstevel@tonic-gate	else
25663df1173Spetede		printf \
25763df1173Spetede		    'Cannot find env file as either %s or /opt/onbld/env/%s\n' \
25863df1173Spetede		    "$1" "$1"
2597c478bd9Sstevel@tonic-gate		exit 1
2607c478bd9Sstevel@tonic-gate	fi
2617c478bd9Sstevel@tonic-gatefi
2627c478bd9Sstevel@tonic-gateshift
2637c478bd9Sstevel@tonic-gate
2641fe69678Skupfer# contents of stdenv.sh inserted after next line:
2651fe69678Skupfer# STDENV_START
2661fe69678Skupfer# STDENV_END
2677c478bd9Sstevel@tonic-gate
268d7693b08SRoland Mainz# Check if we have sufficient data to continue...
269d7693b08SRoland Mainz[[ -v CODEMGR_WS ]] || fatal_error "Error: Variable CODEMGR_WS not set."
270d7693b08SRoland Mainz[[ -d "${CODEMGR_WS}" ]] || fatal_error "Error: ${CODEMGR_WS} is not a directory."
271d7693b08SRoland Mainz[[ -f "${CODEMGR_WS}/usr/src/Makefile" ]] || fatal_error "Error: ${CODEMGR_WS}/usr/src/Makefile not found."
272d7693b08SRoland Mainz
2737c478bd9Sstevel@tonic-gate# must match the getopts in nightly.sh
2747c478bd9Sstevel@tonic-gateOPTIND=1
27563df1173SpetedeNIGHTLY_OPTIONS="-${NIGHTLY_OPTIONS#-}"
27611a78ea0SMark J. Nelsonwhile getopts '+0AaBCDdFfGIilMmNnOopRrS:tUuWwXxz' FLAG "$NIGHTLY_OPTIONS"
2777c478bd9Sstevel@tonic-gatedo
27863df1173Spetede	case "$FLAG" in
27963df1173Spetede	  O)    flags.O=true  ;;
28063df1173Spetede	  +O)   flags.O=false ;;
28163df1173Spetede	  o)	flags.o=true  ;;
28263df1173Spetede	  +o)	flags.o=false ;;
28363df1173Spetede	  t)	flags.t=true  ;;
28463df1173Spetede	  +t)	flags.t=false ;;
28563df1173Spetede	  S)	set_S_flag "$OPTARG" ;;
2867c478bd9Sstevel@tonic-gate	  *)	;;
2877c478bd9Sstevel@tonic-gate	esac
2887c478bd9Sstevel@tonic-gatedone
2897c478bd9Sstevel@tonic-gate
29048bc00d6SjmcpPOUND_SIGN="#"
29148bc00d6Sjmcp# have we set RELEASE_DATE in our env file?
29248bc00d6Sjmcpif [ -z "$RELEASE_DATE" ]; then
29348bc00d6Sjmcp	RELEASE_DATE=$(LC_ALL=C date +"%B %Y")
29448bc00d6Sjmcpfi
29548bc00d6SjmcpBUILD_DATE=$(LC_ALL=C date +%Y-%b-%d)
296d7693b08SRoland MainzBASEWSDIR=$(basename -- "${CODEMGR_WS}")
29748bc00d6SjmcpDEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\""
29848bc00d6Sjmcpexport DEV_CM RELEASE_DATE POUND_SIGN
29948bc00d6Sjmcp
30063df1173Spetedeexport INTERNAL_RELEASE_BUILD=
30163df1173Spetede
30263df1173Spetedeprint 'Build type   is  \c'
30363df1173Spetedeif ${flags.d} ; then
30463df1173Spetede	print 'DEBUG'
3057c478bd9Sstevel@tonic-gate	unset RELEASE_BUILD
3067c478bd9Sstevel@tonic-gate	unset EXTRA_OPTIONS
3077c478bd9Sstevel@tonic-gate	unset EXTRA_CFLAGS
3087c478bd9Sstevel@tonic-gateelse
3097c478bd9Sstevel@tonic-gate	# default is a non-DEBUG build
31063df1173Spetede	print 'non-DEBUG'
31163df1173Spetede	export RELEASE_BUILD=
3127c478bd9Sstevel@tonic-gate	unset EXTRA_OPTIONS
3137c478bd9Sstevel@tonic-gate	unset EXTRA_CFLAGS
3147c478bd9Sstevel@tonic-gatefi
3157c478bd9Sstevel@tonic-gate
316*5c70f01eSRichard Lowe[[ "${flags.O}" == "true" ]] && export MULTI_PROTO="yes"
3174e5b757fSkupfer
3187c478bd9Sstevel@tonic-gate# update build-type variables
31963df1173SpetedePKGARCHIVE="${PKGARCHIVE}${SUFFIX}"
3207c478bd9Sstevel@tonic-gate
3217c478bd9Sstevel@tonic-gate# Append source version
32263df1173Spetedeif "${flags.s.e}" ; then
32363df1173Spetede        VERSION+=":EXPORT"
32463df1173Spetede	SRC="${EXPORT_SRC}/usr/src"
3257c478bd9Sstevel@tonic-gatefi
3267c478bd9Sstevel@tonic-gate
32763df1173Spetedeif "${flags.s.d}" ; then
32863df1173Spetede        VERSION+=":DOMESTIC"
32963df1173Spetede	SRC="${EXPORT_SRC}/usr/src"
3307c478bd9Sstevel@tonic-gatefi
3317c478bd9Sstevel@tonic-gate
33263df1173Spetedeif "${flags.s.h}" ; then
33363df1173Spetede        VERSION+=":HYBRID"
33463df1173Spetede	SRC="${EXPORT_SRC}/usr/src"
3357c478bd9Sstevel@tonic-gatefi
3367c478bd9Sstevel@tonic-gate
33763df1173Spetedeif "${flags.s.o}" ; then
33863df1173Spetede        VERSION+=":OPEN_ONLY"
33963df1173Spetede	SRC="${OPEN_SRCDIR}/usr/src"
3401fe69678Skupferfi
3411fe69678Skupfer
3427c478bd9Sstevel@tonic-gate# 	Set PATH for a build
343b84bdc30SmeemPATH="/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:."
34463df1173Spetedeif [[ "${SUNWSPRO}" != "" ]]; then
34563df1173Spetede	export PATH="${SUNWSPRO}/bin:$PATH"
3467c478bd9Sstevel@tonic-gatefi
3477c478bd9Sstevel@tonic-gate
34863df1173Spetedeif [[ -z "$CLOSED_IS_PRESENT" ]]; then
34963df1173Spetede	if [[ -d $SRC/../closed ]]; then
35063df1173Spetede		export CLOSED_IS_PRESENT="yes"
3511fe69678Skupfer	else
35263df1173Spetede		export CLOSED_IS_PRESENT="no"
3531fe69678Skupfer	fi
3541fe69678Skupferfi
3551fe69678Skupfer
35663df1173SpetedeTOOLS="${SRC}/tools"
357ead1f93eSLiane PrazaTOOLS_PROTO="${TOOLS}/proto/root_${MACH}-nd" ; export TOOLS_PROTO
3587c478bd9Sstevel@tonic-gate
35963df1173Spetedeif "${flags.t}" ; then
36063df1173Spetede	export ONBLD_TOOLS="${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}"
3617c478bd9Sstevel@tonic-gate
36263df1173Spetede	export STABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs"
36363df1173Spetede	export CTFSTABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs"
36463df1173Spetede	export GENOFFSETS="${TOOLS_PROTO}/opt/onbld/bin/genoffsets"
3657c478bd9Sstevel@tonic-gate
36663df1173Spetede	export CTFCONVERT="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert"
36763df1173Spetede	export CTFMERGE="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge"
3687c478bd9Sstevel@tonic-gate
36963df1173Spetede	export CTFCVTPTBL="${TOOLS_PROTO}/opt/onbld/bin/ctfcvtptbl"
37063df1173Spetede	export CTFFINDMOD="${TOOLS_PROTO}/opt/onbld/bin/ctffindmod"
3717c478bd9Sstevel@tonic-gate
3727c478bd9Sstevel@tonic-gate	PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}"
3737c478bd9Sstevel@tonic-gate	PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}"
3747c478bd9Sstevel@tonic-gate	export PATH
3757c478bd9Sstevel@tonic-gatefi
3767c478bd9Sstevel@tonic-gate
3770756aa0bSGavin Maltbyexport DMAKE_MODE=${DMAKE_MODE:-parallel}
37863df1173Spetede
37963df1173Spetedeif "${flags.o}" ; then
38063df1173Spetede	export CH=
38163df1173Spetedeelse
3827c478bd9Sstevel@tonic-gate	unset CH
3837c478bd9Sstevel@tonic-gatefi
3847c478bd9Sstevel@tonic-gateDEF_STRIPFLAG="-s"
3857c478bd9Sstevel@tonic-gate
3867c478bd9Sstevel@tonic-gateTMPDIR="/tmp"
3877c478bd9Sstevel@tonic-gate
38878add226Sjmcp# "o_FLAG" is used by "nightly.sh" (it may be useful to rename this
38978add226Sjmcp# variable using a more descriptive name later)
39063df1173Spetedeexport o_FLAG="$(${flags.o} && print 'y' || print 'n')"
39163df1173Spetede
39263df1173Spetedeexport \
39363df1173Spetede	PATH TMPDIR \
39463df1173Spetede	POUND_SIGN \
39548bc00d6Sjmcp	DEF_STRIPFLAG \
39648bc00d6Sjmcp	RELEASE_DATE
39763df1173Spetedeunset \
39863df1173Spetede	CFLAGS \
39963df1173Spetede	LD_LIBRARY_PATH
4007c478bd9Sstevel@tonic-gate
4017c478bd9Sstevel@tonic-gate# a la ws
4027c478bd9Sstevel@tonic-gateENVLDLIBS1=
4037c478bd9Sstevel@tonic-gateENVLDLIBS2=
4047c478bd9Sstevel@tonic-gateENVLDLIBS3=
4057c478bd9Sstevel@tonic-gateENVCPPFLAGS1=
4067c478bd9Sstevel@tonic-gateENVCPPFLAGS2=
4077c478bd9Sstevel@tonic-gateENVCPPFLAGS3=
4087c478bd9Sstevel@tonic-gateENVCPPFLAGS4=
4097c478bd9Sstevel@tonic-gatePARENT_ROOT=
410ead1f93eSLiane PrazaPARENT_TOOLS_ROOT=
4117c478bd9Sstevel@tonic-gate
41263df1173Spetedeif [[ "$MULTI_PROTO" != "yes" && "$MULTI_PROTO" != "no" ]]; then
41363df1173Spetede	printf \
41463df1173Spetede	    'WARNING: invalid value for MULTI_PROTO (%s); setting to "no".\n' \
41563df1173Spetede	    "$MULTI_PROTO"
41663df1173Spetede	export MULTI_PROTO="no"
4174e5b757fSkupferfi
4184e5b757fSkupfer
41963df1173Spetede[[ "$MULTI_PROTO" == "yes" ]] && export ROOT="${ROOT}${SUFFIX}"
4204e5b757fSkupfer
421b83ec4edSjmcpexport TONICBUILD="#"
422b83ec4edSjmcp
423b83ec4edSjmcpif "${flags.O}" ; then
424b83ec4edSjmcp	if [[ "$CLOSED_IS_PRESENT" != "yes" ]]; then
425b83ec4edSjmcp		print "OpenSolaris closed binary generation requires "
426b83ec4edSjmcp		print "closed tree"
427b83ec4edSjmcp		exit 1
428b83ec4edSjmcp	fi
429b83ec4edSjmcp	print "Generating OpenSolaris deliverables"
430b83ec4edSjmcp	# We only need CLOSEDROOT in the env for convenience. Makefile.master
431b83ec4edSjmcp	# figures out what it needs when it matters.
432b83ec4edSjmcp	export CLOSEDROOT="${ROOT}-closed"
433b83ec4edSjmcp	export TONICBUILD=""
434b83ec4edSjmcpfi
435b83ec4edSjmcp
4367c478bd9Sstevel@tonic-gateENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib"
4377c478bd9Sstevel@tonic-gateENVCPPFLAGS1="-I$ROOT/usr/include"
4387c478bd9Sstevel@tonic-gateMAKEFLAGS=e
4397c478bd9Sstevel@tonic-gate
44063df1173Spetedeexport \
44163df1173Spetede        ENVLDLIBS1 \
44263df1173Spetede        ENVLDLIBS2 \
44363df1173Spetede        ENVLDLIBS3 \
44463df1173Spetede	ENVCPPFLAGS1 \
44563df1173Spetede        ENVCPPFLAGS2 \
44663df1173Spetede        ENVCPPFLAGS3 \
44763df1173Spetede	ENVCPPFLAGS4 \
44863df1173Spetede        MAKEFLAGS \
449cdf0c1d5Smjnelson        PARENT_ROOT \
450*5c70f01eSRichard Lowe        PARENT_TOOLS_ROOT
4517c478bd9Sstevel@tonic-gate
45263df1173Spetedeprintf 'RELEASE      is %s\n'   "$RELEASE"
45363df1173Spetedeprintf 'VERSION      is %s\n'   "$VERSION"
45463df1173Spetedeprintf 'RELEASE_DATE is %s\n\n' "$RELEASE_DATE"
4557c478bd9Sstevel@tonic-gate
45663df1173Spetedeif [[ -f "$SRC/Makefile" ]] && egrep -s '^setup:' "$SRC/Makefile" ; then
45763df1173Spetede	print "The top-level 'setup' target is available \c"
45863df1173Spetede	print "to build headers and tools."
45963df1173Spetede	print ""
4607c478bd9Sstevel@tonic-gate
46163df1173Spetedeelif "${flags.t}" ; then
46263df1173Spetede	printf \
46363df1173Spetede	    'The tools can be (re)built with the install target in %s.\n\n' \
46463df1173Spetede	    "${TOOLS}"
4657c478bd9Sstevel@tonic-gatefi
4667c478bd9Sstevel@tonic-gate
4670756aa0bSGavin Maltby#
4680756aa0bSGavin Maltby# place ourselves in a new task, respecting BUILD_PROJECT if set.
4690756aa0bSGavin Maltby#
4700756aa0bSGavin Maltby/usr/bin/newtask -c $$ ${BUILD_PROJECT:+-p$BUILD_PROJECT}
4717c478bd9Sstevel@tonic-gate
47263df1173Spetedeif [[ "${flags.c}" == "false" && -x "$SHELL" && \
473d7693b08SRoland Mainz    "$(basename -- "${SHELL}")" != "csh" ]]; then
4747c478bd9Sstevel@tonic-gate	# $SHELL is set, and it's not csh.
4757c478bd9Sstevel@tonic-gate
47663df1173Spetede	if "${flags.f}" ; then
47763df1173Spetede		print 'WARNING: -f is ignored when $SHELL is not csh'
4787c478bd9Sstevel@tonic-gate	fi
4797c478bd9Sstevel@tonic-gate
48063df1173Spetede	printf 'Using %s as shell.\n' "$SHELL"
48163df1173Spetede	exec "$SHELL" ${@:+-c "$@"}
4827c478bd9Sstevel@tonic-gate
48363df1173Spetedeelif "${flags.f}" ; then
48463df1173Spetede	print 'Using csh -f as shell.'
4857c478bd9Sstevel@tonic-gate	exec csh -f ${@:+-c "$@"}
4867c478bd9Sstevel@tonic-gate
4877c478bd9Sstevel@tonic-gateelse
48863df1173Spetede	print 'Using csh as shell.'
4897c478bd9Sstevel@tonic-gate	exec csh ${@:+-c "$@"}
4907c478bd9Sstevel@tonic-gatefi
49163df1173Spetede
49263df1173Spetede# not reached
493