xref: /titanic_50/usr/src/tools/scripts/bldenv.sh (revision b83ec4ed825d984ca8f038544e15b4ca0eac82c7)
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#
24*b83ec4edSjmcp# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
257c478bd9Sstevel@tonic-gate#
267c478bd9Sstevel@tonic-gate# Uses supplied "env" file, based on /opt/onbld/etc/env, to set shell variables
277c478bd9Sstevel@tonic-gate# before spawning a shell for doing a release-style builds interactively
287c478bd9Sstevel@tonic-gate# and incrementally.
297c478bd9Sstevel@tonic-gate#
307c478bd9Sstevel@tonic-gate
3163df1173Spetedefunction usage
3263df1173Spetede{
3363df1173Spetede    OPTIND=0
3463df1173Spetede    getopts -a "${progname}" "${USAGE}" OPT '-?'
3563df1173Spetede    exit 2
3663df1173Spetede}
377c478bd9Sstevel@tonic-gate
3863df1173Spetedefunction is_source_build
3963df1173Spetede{
4063df1173Spetede	"${flags.s.e}" || "${flags.s.d}" || "${flags.s.h}" || "${flags.s.o}"
411fe69678Skupfer	return $?
421fe69678Skupfer}
431fe69678Skupfer
441fe69678Skupfer#
451fe69678Skupfer# single function for setting -S flag and doing error checking.
461fe69678Skupfer# usage: set_S_flag <type>
471fe69678Skupfer# where <type> is the source build type ("E", "D", ...).
481fe69678Skupfer#
4963df1173Spetedefunction set_S_flag
5063df1173Spetede{
511fe69678Skupfer	if is_source_build; then
5263df1173Spetede		print 'Can only build one source variant at a time.'
531fe69678Skupfer		exit 1
541fe69678Skupfer	fi
5563df1173Spetede
5663df1173Spetede	case "$1" in
5763df1173Spetede		"E") flags.s.e=true ;;
5863df1173Spetede		"D") flags.s.d=true ;;
5963df1173Spetede		"H") flags.s.h=true ;;
6063df1173Spetede		"O") flags.s.o=true ;;
6163df1173Spetede		*)   usage ;;
6263df1173Spetede	esac
631fe69678Skupfer}
647c478bd9Sstevel@tonic-gate
6563df1173Spetedetypeset -r USAGE=$'+
6663df1173Spetede[-?\n@(#)\$Id: bldenv (OS/Net) 2008-04-06 \$\n]
6763df1173Spetede[-author?OS/Net community <tools-discuss@opensolaris.org>]
6863df1173Spetede[+NAME?bldenv - spawn shell for interactive incremental OS-Net
6963df1173Spetede    consolidation builds]
7063df1173Spetede[+DESCRIPTION?bldenv is a useful companion to the nightly(1) script for
7163df1173Spetede    doing interactive and incremental builds in a workspace
7263df1173Spetede    already built with nightly(1). bldenv spawns a shell set up
7363df1173Spetede    with the same environment variables taken from an env_file,
7463df1173Spetede    as prepared for use with nightly(1).]
7563df1173Spetede[+?In addition to running a shell for interactive use, bldenv
7663df1173Spetede    can optionally run a single command in the given environment,
7763df1173Spetede    in the vein of sh -c or su -c. This is useful for
7863df1173Spetede    scripting, when an interactive shell would not be. If the
7963df1173Spetede    command is composed of multiple shell words or contains
8063df1173Spetede    other shell metacharacters, it must be quoted appropriately.]
8163df1173Spetede[+?bldenv is particularly useful for testing Makefile targets
8263df1173Spetede    like clobber, install and _msg, which otherwise require digging
8363df1173Spetede    through large build logs to figure out what is being
8463df1173Spetede    done.]
8563df1173Spetede[+?bldenv is also useful if you run into build issues with the
8663df1173Spetede    source product or when generating OpenSolaris deliverables.
8763df1173Spetede    If a source product build is flagged, the environment is set
8863df1173Spetede    up for building the indicated source product tree, which is
8963df1173Spetede    assumed to have already been created. If the OpenSolaris
9063df1173Spetede    deliverables flag (-O) is set in NIGHTLY_OPTIONS, the
9163df1173Spetede    environment is set up for building just the open source.
9263df1173Spetede    This includes using an alternate proto area, as well as
9363df1173Spetede    using the closed binaries in $CODEMGR_WS/closed.skel (which
9463df1173Spetede    is assumed to already exist).]
9563df1173Spetede[+?By default, bldenv will invoke the shell specified in
9663df1173Spetede    $SHELL. If $SHELL is not set or is invalid, csh will be
9763df1173Spetede    used.]
9863df1173Spetede[c?force the use of csh, regardless of the  value  of $SHELL.]
9963df1173Spetede[f?invoke csh with the -f (fast-start) option. This option is valid
10063df1173Spetede    only if $SHELL is unset or if it points to csh.]
10163df1173Spetede[d?set up environment for doing DEBUG builds (default is non-DEBUG)]
10263df1173Spetede[t?set up environment to use the tools in usr/src/tools (this is the
10363df1173Spetede    default, use +t to use the tools from /opt/onbld)]
10463df1173Spetede[S]:[option?Build a variant of the source product.
10563df1173SpetedeThe value of \aoption\a must be one of the following:]{
10663df1173Spetede       [+E?build the exportable source variant of the source product.]
10763df1173Spetede       [+D?build the domestic  source  (exportable + crypt) variant of
10863df1173Spetede           the source product.]
10963df1173Spetede       [+H?build hybrid source (binaries + deleted source).]
11063df1173Spetede       [+O?simulate an OpenSolaris (open source only) build.]
11163df1173Spetede}
11263df1173Spetede
11363df1173Spetede<env_file> [command]
11463df1173Spetede
11563df1173Spetede[+EXAMPLES]{
11663df1173Spetede    [+?Example 1: Interactive use]{
11763df1173Spetede        [+?Use bldenv to spawn a shell to perform  a  DEBUG  build  and
11863df1173Spetede            testing of the  Makefile  targets  clobber and install for
11963df1173Spetede            usr/src/cmd/true.]
12063df1173Spetede        [+\n% rlogin wopr-2 -l gk
12163df1173Spetede{root::wopr-2::49} bldenv -d /export0/jg/on10-se.env
12263df1173SpetedeBuild type   is  DEBUG
12363df1173SpetedeRELEASE      is  5.10
12463df1173SpetedeVERSION      is  wopr-2::on10-se::11/01/2001
12563df1173SpetedeRELEASE_DATE is  May 2004
12663df1173SpetedeThe top-level `setup\' target is available to build headers
12763df1173Spetedeand tools.
12863df1173SpetedeUsing /usr/bin/tcsh as shell.
12963df1173Spetede{root::wopr-2::49}
13063df1173Spetede{root::wopr-2::49} cd $SRC/cmd/true
13163df1173Spetede{root::wopr-2::50} make
13263df1173Spetede{root::wopr-2::51} make clobber
13363df1173Spetede/usr/bin/rm -f true true.po
13463df1173Spetede{root::wopr-2::52} make
13563df1173Spetede/usr/bin/rm -f true
13663df1173Spetedecat true.sh > true
13763df1173Spetedechmod +x true
13863df1173Spetede{root::wopr-2::53} make install
13963df1173Spetedeinstall -s -m 0555 -u root -g bin -f /export0/jg/on10-se/proto/root_sparc/usr/bin true
14063df1173Spetede`install\' is up to date.]
14163df1173Spetede    }
14263df1173Spetede    [+?Example 2: Non-interactive use]{
14363df1173Spetede        [+?Invoke bldenv to create SUNWonbld with a single command:]
14463df1173Spetede        [+\nexample% bldenv onnv_06 \'cd $SRC/tools && make pkg\']
14563df1173Spetede        }
14663df1173Spetede}
14763df1173Spetede[+SEE ALSO?\bnightly\b(1)]
14863df1173Spetede'
14963df1173Spetede
15063df1173Spetede# main
15163df1173Spetedebuiltin basename
15263df1173Spetede
15363df1173Spetede# boolean flags (true/false)
15463df1173Spetedetypeset flags=(
15563df1173Spetede	typeset c=false
15663df1173Spetede	typeset f=false
15763df1173Spetede	typeset d=false
15863df1173Spetede	typeset O=false
15963df1173Spetede	typeset o=false
16063df1173Spetede	typeset t=true
16163df1173Spetede	typeset s=(
16263df1173Spetede		typeset e=false
16363df1173Spetede		typeset h=false
16463df1173Spetede		typeset d=false
16563df1173Spetede		typeset o=false
16663df1173Spetede	)
16763df1173Spetede)
16863df1173Spetede
16963df1173Spetedetypeset progname="$(basename "${0}")"
17063df1173Spetede
1717c478bd9Sstevel@tonic-gateOPTIND=1
1727c478bd9Sstevel@tonic-gateSUFFIX="-nd"
17363df1173Spetede
17463df1173Spetedewhile getopts -a "${progname}" "${USAGE}" OPT ; do
17563df1173Spetede    case ${OPT} in
17663df1173Spetede	  c)	flags.c=true  ;;
17763df1173Spetede	  +c)	flags.c=false ;;
17863df1173Spetede	  f)	flags.f=true  ;;
17963df1173Spetede	  +f)	flags.f=false ;;
18063df1173Spetede	  d)	flags.d=true  SUFFIX=""    ;;
18163df1173Spetede	  +d)	flags.d=false SUFFIX="-nd" ;;
18263df1173Spetede	  t)	flags.t=true  ;;
18363df1173Spetede	  +t)	flags.t=false ;;
18463df1173Spetede	  S)	set_S_flag "$OPTARG" ;;
18563df1173Spetede	  \?)	usage ;;
1867c478bd9Sstevel@tonic-gate    esac
1877c478bd9Sstevel@tonic-gatedone
18863df1173Spetedeshift $((OPTIND-1))
1897c478bd9Sstevel@tonic-gate
1907c478bd9Sstevel@tonic-gate# test that the path to the environment-setting file was given
19163df1173Spetedeif (( $# < 1 )) ; then
19263df1173Spetede	usage
1937c478bd9Sstevel@tonic-gatefi
1947c478bd9Sstevel@tonic-gate
1957c478bd9Sstevel@tonic-gate# force locale to C
19663df1173Spetedeexport \
19763df1173Spetede	LC_COLLATE=C \
19863df1173Spetede	LC_CTYPE=C \
19963df1173Spetede	LC_MESSAGES=C \
20063df1173Spetede	LC_MONETARY=C \
20163df1173Spetede	LC_NUMERIC=C \
20263df1173Spetede	LC_TIME=C
2037c478bd9Sstevel@tonic-gate
2047c478bd9Sstevel@tonic-gate# clear environment variables we know to be bad for the build
20563df1173Spetedeunset \
20663df1173Spetede	LD_OPTIONS \
20763df1173Spetede        LD_LIBRARY_PATH \
20863df1173Spetede        LD_AUDIT \
20963df1173Spetede        LD_BIND_NOW \
21063df1173Spetede        LD_BREADTH \
21163df1173Spetede        LD_CONFIG \
21263df1173Spetede	LD_DEBUG \
21363df1173Spetede        LD_FLAGS \
21463df1173Spetede        LD_LIBRARY_PATH_64 \
21563df1173Spetede        LD_NOVERSION \
21663df1173Spetede        LD_ORIGIN \
21763df1173Spetede	LD_LOADFLTR \
21863df1173Spetede        LD_NOAUXFLTR \
21963df1173Spetede        LD_NOCONFIG \
22063df1173Spetede        LD_NODIRCONFIG \
22163df1173Spetede        LD_NOOBJALTER \
22263df1173Spetede	LD_PRELOAD \
22363df1173Spetede        LD_PROFILE \
22463df1173Spetede	CONFIG \
22563df1173Spetede	GROUP \
22663df1173Spetede	OWNER \
22763df1173Spetede	REMOTE \
22863df1173Spetede	ENV \
22963df1173Spetede	ARCH \
23063df1173Spetede	CLASSPATH
2317c478bd9Sstevel@tonic-gate
2320756aa0bSGavin Maltby#
2330756aa0bSGavin Maltby# Setup environment variables
2340756aa0bSGavin Maltby#
2350756aa0bSGavin Maltbyif [[ -f /etc/nightly.conf ]]; then
2360756aa0bSGavin Maltby	source /etc/nightly.conf
2370756aa0bSGavin Maltbyfi
2380756aa0bSGavin Maltby
23963df1173Spetedeif [[ -f "$1" ]]; then
24063df1173Spetede	if [[ "$1" == */* ]]; then
24163df1173Spetede		source "$1"
2427c478bd9Sstevel@tonic-gate	else
24363df1173Spetede		source "./$1"
2447c478bd9Sstevel@tonic-gate	fi
2457c478bd9Sstevel@tonic-gateelse
24663df1173Spetede	if [[ -f "/opt/onbld/env/$1" ]]; then
24763df1173Spetede		source "/opt/onbld/env/$1"
2487c478bd9Sstevel@tonic-gate	else
24963df1173Spetede		printf \
25063df1173Spetede		    'Cannot find env file as either %s or /opt/onbld/env/%s\n' \
25163df1173Spetede		    "$1" "$1"
2527c478bd9Sstevel@tonic-gate		exit 1
2537c478bd9Sstevel@tonic-gate	fi
2547c478bd9Sstevel@tonic-gatefi
2557c478bd9Sstevel@tonic-gateshift
2567c478bd9Sstevel@tonic-gate
2571fe69678Skupfer# contents of stdenv.sh inserted after next line:
2581fe69678Skupfer# STDENV_START
2591fe69678Skupfer# STDENV_END
2607c478bd9Sstevel@tonic-gate
26163df1173Spetede#MACH=$(uname -p)
262fb9f9b97Skupfer
2637c478bd9Sstevel@tonic-gate# must match the getopts in nightly.sh
2647c478bd9Sstevel@tonic-gateOPTIND=1
26563df1173SpetedeNIGHTLY_OPTIONS="-${NIGHTLY_OPTIONS#-}"
26611a78ea0SMark J. Nelsonwhile getopts '+0AaBCDdFfGIilMmNnOopRrS:tUuWwXxz' FLAG "$NIGHTLY_OPTIONS"
2677c478bd9Sstevel@tonic-gatedo
26863df1173Spetede	case "$FLAG" in
26963df1173Spetede	  O)    flags.O=true  ;;
27063df1173Spetede	  +O)   flags.O=false ;;
27163df1173Spetede	  o)	flags.o=true  ;;
27263df1173Spetede	  +o)	flags.o=false ;;
27363df1173Spetede	  t)	flags.t=true  ;;
27463df1173Spetede	  +t)	flags.t=false ;;
27563df1173Spetede	  S)	set_S_flag "$OPTARG" ;;
2767c478bd9Sstevel@tonic-gate	  *)	;;
2777c478bd9Sstevel@tonic-gate	esac
2787c478bd9Sstevel@tonic-gatedone
2797c478bd9Sstevel@tonic-gate
28048bc00d6SjmcpPOUND_SIGN="#"
28148bc00d6Sjmcp# have we set RELEASE_DATE in our env file?
28248bc00d6Sjmcpif [ -z "$RELEASE_DATE" ]; then
28348bc00d6Sjmcp	RELEASE_DATE=$(LC_ALL=C date +"%B %Y")
28448bc00d6Sjmcpfi
28548bc00d6SjmcpBUILD_DATE=$(LC_ALL=C date +%Y-%b-%d)
28648bc00d6SjmcpBASEWSDIR=$(basename $CODEMGR_WS)
28748bc00d6SjmcpDEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\""
28848bc00d6Sjmcpexport DEV_CM RELEASE_DATE POUND_SIGN
28948bc00d6Sjmcp
29063df1173Spetedeexport INTERNAL_RELEASE_BUILD=
29163df1173Spetede
29263df1173Spetedeprint 'Build type   is  \c'
29363df1173Spetedeif ${flags.d} ; then
29463df1173Spetede	print 'DEBUG'
2957c478bd9Sstevel@tonic-gate	unset RELEASE_BUILD
2967c478bd9Sstevel@tonic-gate	unset EXTRA_OPTIONS
2977c478bd9Sstevel@tonic-gate	unset EXTRA_CFLAGS
2987c478bd9Sstevel@tonic-gateelse
2997c478bd9Sstevel@tonic-gate	# default is a non-DEBUG build
30063df1173Spetede	print 'non-DEBUG'
30163df1173Spetede	export RELEASE_BUILD=
3027c478bd9Sstevel@tonic-gate	unset EXTRA_OPTIONS
3037c478bd9Sstevel@tonic-gate	unset EXTRA_CFLAGS
3047c478bd9Sstevel@tonic-gatefi
3057c478bd9Sstevel@tonic-gate
306*b83ec4edSjmcp[[ "${flags.O}" ]] && export MULTI_PROTO="yes"
3074e5b757fSkupfer
3087c478bd9Sstevel@tonic-gate# update build-type variables
30963df1173SpetedeCPIODIR="${CPIODIR}${SUFFIX}"
31063df1173SpetedePKGARCHIVE="${PKGARCHIVE}${SUFFIX}"
3117c478bd9Sstevel@tonic-gate
3127c478bd9Sstevel@tonic-gate# Append source version
31363df1173Spetedeif "${flags.s.e}" ; then
31463df1173Spetede        VERSION+=":EXPORT"
31563df1173Spetede	SRC="${EXPORT_SRC}/usr/src"
3167c478bd9Sstevel@tonic-gatefi
3177c478bd9Sstevel@tonic-gate
31863df1173Spetedeif "${flags.s.d}" ; then
31963df1173Spetede        VERSION+=":DOMESTIC"
32063df1173Spetede	SRC="${EXPORT_SRC}/usr/src"
3217c478bd9Sstevel@tonic-gatefi
3227c478bd9Sstevel@tonic-gate
32363df1173Spetedeif "${flags.s.h}" ; then
32463df1173Spetede        VERSION+=":HYBRID"
32563df1173Spetede	SRC="${EXPORT_SRC}/usr/src"
3267c478bd9Sstevel@tonic-gatefi
3277c478bd9Sstevel@tonic-gate
32863df1173Spetedeif "${flags.s.o}" ; then
32963df1173Spetede        VERSION+=":OPEN_ONLY"
33063df1173Spetede	SRC="${OPEN_SRCDIR}/usr/src"
3311fe69678Skupferfi
3321fe69678Skupfer
333cdf0c1d5Smjnelson#
334cdf0c1d5Smjnelson# Keep track of this now, before we manipulate $PATH
335cdf0c1d5Smjnelson#
336cdf0c1d5SmjnelsonWHICH_SCM=$(dirname $(whence $0))/which_scm
337cdf0c1d5Smjnelsonif [[ ! -x $WHICH_SCM ]]; then
338cdf0c1d5Smjnelson	WHICH_SCM=which_scm
339cdf0c1d5Smjnelsonfi
340cdf0c1d5Smjnelson$WHICH_SCM | read SCM_TYPE junk
341cdf0c1d5Smjnelson
342cdf0c1d5Smjnelson
3437c478bd9Sstevel@tonic-gate# 	Set PATH for a build
344b84bdc30SmeemPATH="/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:."
34563df1173Spetedeif [[ "${SUNWSPRO}" != "" ]]; then
34663df1173Spetede	export PATH="${SUNWSPRO}/bin:$PATH"
3477c478bd9Sstevel@tonic-gatefi
3487c478bd9Sstevel@tonic-gate
34963df1173Spetedeif [[ -z "$CLOSED_IS_PRESENT" ]]; then
35063df1173Spetede	if [[ -d $SRC/../closed ]]; then
35163df1173Spetede		export CLOSED_IS_PRESENT="yes"
3521fe69678Skupfer	else
35363df1173Spetede		export CLOSED_IS_PRESENT="no"
3541fe69678Skupfer	fi
3551fe69678Skupferfi
3561fe69678Skupfer
35763df1173SpetedeTOOLS="${SRC}/tools"
358ead1f93eSLiane PrazaTOOLS_PROTO="${TOOLS}/proto/root_${MACH}-nd" ; export TOOLS_PROTO
3597c478bd9Sstevel@tonic-gate
36063df1173Spetedeif "${flags.t}" ; then
36163df1173Spetede	export ONBLD_TOOLS="${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}"
3627c478bd9Sstevel@tonic-gate
36363df1173Spetede	export STABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs"
36463df1173Spetede	export CTFSTABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs"
36563df1173Spetede	export GENOFFSETS="${TOOLS_PROTO}/opt/onbld/bin/genoffsets"
3667c478bd9Sstevel@tonic-gate
36763df1173Spetede	export CTFCONVERT="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert"
36863df1173Spetede	export CTFMERGE="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge"
3697c478bd9Sstevel@tonic-gate
37063df1173Spetede	export CTFCVTPTBL="${TOOLS_PROTO}/opt/onbld/bin/ctfcvtptbl"
37163df1173Spetede	export CTFFINDMOD="${TOOLS_PROTO}/opt/onbld/bin/ctffindmod"
3727c478bd9Sstevel@tonic-gate
3737c478bd9Sstevel@tonic-gate	PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}"
3747c478bd9Sstevel@tonic-gate	PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}"
3757c478bd9Sstevel@tonic-gate	export PATH
3767c478bd9Sstevel@tonic-gatefi
3777c478bd9Sstevel@tonic-gate
3780756aa0bSGavin Maltbyexport DMAKE_MODE=${DMAKE_MODE:-parallel}
37963df1173Spetede
38063df1173Spetedeif "${flags.o}" ; then
38163df1173Spetede	export CH=
38263df1173Spetedeelse
3837c478bd9Sstevel@tonic-gate	unset CH
3847c478bd9Sstevel@tonic-gatefi
3857c478bd9Sstevel@tonic-gateDEF_STRIPFLAG="-s"
3867c478bd9Sstevel@tonic-gate
3877c478bd9Sstevel@tonic-gateTMPDIR="/tmp"
3887c478bd9Sstevel@tonic-gate
38963df1173Spetede# "o_FLAG" is used by "nightly.sh" and "makebfu.sh" (it may be useful to
39063df1173Spetede# rename this variable using a more descriptive name later)
39163df1173Spetedeexport o_FLAG="$(${flags.o} && print 'y' || print 'n')"
39263df1173Spetede
39363df1173Spetedeexport \
39463df1173Spetede	PATH TMPDIR \
39563df1173Spetede	POUND_SIGN \
39648bc00d6Sjmcp	DEF_STRIPFLAG \
39748bc00d6Sjmcp	RELEASE_DATE
39863df1173Spetedeunset \
39963df1173Spetede	CFLAGS \
40063df1173Spetede	LD_LIBRARY_PATH
4017c478bd9Sstevel@tonic-gate
4027c478bd9Sstevel@tonic-gate# a la ws
4037c478bd9Sstevel@tonic-gateENVLDLIBS1=
4047c478bd9Sstevel@tonic-gateENVLDLIBS2=
4057c478bd9Sstevel@tonic-gateENVLDLIBS3=
4067c478bd9Sstevel@tonic-gateENVCPPFLAGS1=
4077c478bd9Sstevel@tonic-gateENVCPPFLAGS2=
4087c478bd9Sstevel@tonic-gateENVCPPFLAGS3=
4097c478bd9Sstevel@tonic-gateENVCPPFLAGS4=
4107c478bd9Sstevel@tonic-gatePARENT_ROOT=
411ead1f93eSLiane PrazaPARENT_TOOLS_ROOT=
4127c478bd9Sstevel@tonic-gate
41363df1173Spetedeif [[ "$MULTI_PROTO" != "yes" && "$MULTI_PROTO" != "no" ]]; then
41463df1173Spetede	printf \
41563df1173Spetede	    'WARNING: invalid value for MULTI_PROTO (%s); setting to "no".\n' \
41663df1173Spetede	    "$MULTI_PROTO"
41763df1173Spetede	export MULTI_PROTO="no"
4184e5b757fSkupferfi
4194e5b757fSkupfer
42063df1173Spetede[[ "$MULTI_PROTO" == "yes" ]] && export ROOT="${ROOT}${SUFFIX}"
4214e5b757fSkupfer
422*b83ec4edSjmcpexport TONICBUILD="#"
423*b83ec4edSjmcp
424*b83ec4edSjmcpif "${flags.O}" ; then
425*b83ec4edSjmcp	if [[ "$CLOSED_IS_PRESENT" != "yes" ]]; then
426*b83ec4edSjmcp		print "OpenSolaris closed binary generation requires "
427*b83ec4edSjmcp		print "closed tree"
428*b83ec4edSjmcp		exit 1
429*b83ec4edSjmcp	fi
430*b83ec4edSjmcp	print "Generating OpenSolaris deliverables"
431*b83ec4edSjmcp	# We only need CLOSEDROOT in the env for convenience. Makefile.master
432*b83ec4edSjmcp	# figures out what it needs when it matters.
433*b83ec4edSjmcp	export CLOSEDROOT="${ROOT}-closed"
434*b83ec4edSjmcp	export TONICBUILD=""
435*b83ec4edSjmcpfi
436*b83ec4edSjmcp
4377c478bd9Sstevel@tonic-gateENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib"
4387c478bd9Sstevel@tonic-gateENVCPPFLAGS1="-I$ROOT/usr/include"
4397c478bd9Sstevel@tonic-gateMAKEFLAGS=e
4407c478bd9Sstevel@tonic-gate
44163df1173Spetedeexport \
44263df1173Spetede        ENVLDLIBS1 \
44363df1173Spetede        ENVLDLIBS2 \
44463df1173Spetede        ENVLDLIBS3 \
44563df1173Spetede	ENVCPPFLAGS1 \
44663df1173Spetede        ENVCPPFLAGS2 \
44763df1173Spetede        ENVCPPFLAGS3 \
44863df1173Spetede	ENVCPPFLAGS4 \
44963df1173Spetede        MAKEFLAGS \
450cdf0c1d5Smjnelson        PARENT_ROOT \
451ead1f93eSLiane Praza        PARENT_TOOLS_ROOT \
452cdf0c1d5Smjnelson	SCM_TYPE
4537c478bd9Sstevel@tonic-gate
45463df1173Spetedeprintf 'RELEASE      is %s\n'   "$RELEASE"
45563df1173Spetedeprintf 'VERSION      is %s\n'   "$VERSION"
45663df1173Spetedeprintf 'RELEASE_DATE is %s\n\n' "$RELEASE_DATE"
4577c478bd9Sstevel@tonic-gate
45863df1173Spetedeif [[ -f "$SRC/Makefile" ]] && egrep -s '^setup:' "$SRC/Makefile" ; then
45963df1173Spetede	print "The top-level 'setup' target is available \c"
46063df1173Spetede	print "to build headers and tools."
46163df1173Spetede	print ""
4627c478bd9Sstevel@tonic-gate
46363df1173Spetedeelif "${flags.t}" ; then
46463df1173Spetede	printf \
46563df1173Spetede	    'The tools can be (re)built with the install target in %s.\n\n' \
46663df1173Spetede	    "${TOOLS}"
4677c478bd9Sstevel@tonic-gatefi
4687c478bd9Sstevel@tonic-gate
4690756aa0bSGavin Maltby#
4700756aa0bSGavin Maltby# place ourselves in a new task, respecting BUILD_PROJECT if set.
4710756aa0bSGavin Maltby#
4720756aa0bSGavin Maltby/usr/bin/newtask -c $$ ${BUILD_PROJECT:+-p$BUILD_PROJECT}
4737c478bd9Sstevel@tonic-gate
47463df1173Spetedeif [[ "${flags.c}" == "false" && -x "$SHELL" && \
47563df1173Spetede    "$(basename "${SHELL}")" != "csh" ]]; then
4767c478bd9Sstevel@tonic-gate	# $SHELL is set, and it's not csh.
4777c478bd9Sstevel@tonic-gate
47863df1173Spetede	if "${flags.f}" ; then
47963df1173Spetede		print 'WARNING: -f is ignored when $SHELL is not csh'
4807c478bd9Sstevel@tonic-gate	fi
4817c478bd9Sstevel@tonic-gate
48263df1173Spetede	printf 'Using %s as shell.\n' "$SHELL"
48363df1173Spetede	exec "$SHELL" ${@:+-c "$@"}
4847c478bd9Sstevel@tonic-gate
48563df1173Spetedeelif "${flags.f}" ; then
48663df1173Spetede	print 'Using csh -f as shell.'
4877c478bd9Sstevel@tonic-gate	exec csh -f ${@:+-c "$@"}
4887c478bd9Sstevel@tonic-gate
4897c478bd9Sstevel@tonic-gateelse
49063df1173Spetede	print 'Using csh as shell.'
4917c478bd9Sstevel@tonic-gate	exec csh ${@:+-c "$@"}
4927c478bd9Sstevel@tonic-gatefi
49363df1173Spetede
49463df1173Spetede# not reached
495