xref: /titanic_44/usr/src/tools/scripts/bldenv.sh (revision 98157a7002f4f2cf7978f3084ca5577f0a1d72b2)
1#!/bin/ksh -p
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22
23#
24# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27# ident	"%Z%%M%	%I%	%E% SMI"
28#
29# Uses supplied "env" file, based on /opt/onbld/etc/env, to set shell variables
30# before spawning a shell for doing a release-style builds interactively
31# and incrementally.
32#
33USAGE='Usage: bldenv [-fd] [+t] [ -S E|D|H|O ] <env_file> [ command ]
34
35Where:
36	-c	Force the use of csh - ignore $SHELL
37	-f	Invoke csh with -f
38	-d	Setup a DEBUG build (default: non-DEBUG)
39	+t	use the tools in $ONBLD_TOOLS/bin
40	-S	Build a variant of the source product
41		E - build exportable source
42		D - build domestic source (exportable + crypt)
43		H - build hybrid source (binaries + deleted source)
44		O - simulate OpenSolaris build
45'
46
47c_FLAG=n
48f_FLAG=n
49d_FLAG=n
50O_FLAG=n
51o_FLAG=n
52t_FLAG=y
53SE_FLAG=n
54SH_FLAG=n
55SD_FLAG=n
56SO_FLAG=n
57
58is_source_build() {
59	[ "$SE_FLAG" = "y" -o "$SD_FLAG" = "y" -o \
60	    "$SH_FLAG" = "y" -o "$SO_FLAG" = "y" ]
61	return $?
62}
63
64#
65# single function for setting -S flag and doing error checking.
66# usage: set_S_flag <type>
67# where <type> is the source build type ("E", "D", ...).
68#
69set_S_flag() {
70	if is_source_build; then
71		echo "Can only build one source variant at a time."
72		exit 1
73	fi
74	if [ "$1" = "E" ]; then
75		SE_FLAG=y
76	elif [ "$1" = "D" ]; then
77		SD_FLAG=y
78	elif [ "$1" = "H" ]; then
79		SH_FLAG=y
80	elif [ "$1" = "O" ]; then
81		SO_FLAG=y
82	else
83		echo "$USAGE"
84		exit 1
85	fi
86}
87
88OPTIND=1
89SUFFIX="-nd"
90while getopts cdfS:t FLAG
91do
92	case $FLAG in
93	  c )	c_FLAG=y
94		;;
95	  f )	f_FLAG=y
96		;;
97	  d )	d_FLAG=y
98		SUFFIX=""
99		;;
100	 +t )	t_FLAG=n
101		;;
102	  S )
103		set_S_flag $OPTARG
104		;;
105	  \?)	echo "$USAGE"
106		exit 1
107		;;
108	esac
109done
110
111# correct argument count after options
112shift `expr $OPTIND - 1`
113
114# test that the path to the environment-setting file was given
115if [ $# -lt 1 ]
116then
117	echo "$USAGE"
118	exit 1
119fi
120
121# force locale to C
122LC_COLLATE=C;   export LC_COLLATE
123LC_CTYPE=C;     export LC_CTYPE
124LC_MESSAGES=C;  export LC_MESSAGES
125LC_MONETARY=C;  export LC_MONETARY
126LC_NUMERIC=C;   export LC_NUMERIC
127LC_TIME=C;      export LC_TIME
128
129# clear environment variables we know to be bad for the build
130unset LD_OPTIONS LD_LIBRARY_PATH LD_AUDIT LD_BIND_NOW LD_BREADTH LD_CONFIG
131unset LD_DEBUG LD_FLAGS LD_LIBRARY_PATH_64 LD_NOVERSION LD_ORIGIN
132unset LD_LOADFLTR LD_NOAUXFLTR LD_NOCONFIG LD_NODIRCONFIG LD_NOOBJALTER
133unset LD_PRELOAD LD_PROFILE
134unset CONFIG
135unset GROUP
136unset OWNER
137unset REMOTE
138unset ENV
139unset ARCH
140unset CLASSPATH
141
142# setup environmental variables
143if [ -f $1 ]; then
144	if [[ $1 = */* ]]; then
145		. $1
146	else
147		. ./$1
148	fi
149else
150	if [ -f /opt/onbld/env/$1 ]; then
151		. /opt/onbld/env/$1
152	else
153		echo "Cannot find env file as either $1 or /opt/onbld/env/$1"
154		exit 1
155	fi
156fi
157shift
158
159# contents of stdenv.sh inserted after next line:
160# STDENV_START
161# STDENV_END
162
163#MACH=`uname -p`
164
165# must match the getopts in nightly.sh
166OPTIND=1
167NIGHTLY_OPTIONS=-${NIGHTLY_OPTIONS#-}
168while getopts AaBCDdFfGIilMmNnOopRrS:tUuWwXxz FLAG $NIGHTLY_OPTIONS
169do
170	case $FLAG in
171	  O)	O_FLAG=y
172		;;
173	  o)	o_FLAG=y
174		;;
175	 +t )	t_FLAG=n
176		;;
177	  S )
178		set_S_flag $OPTARG
179		;;
180	  *)    ;;
181	esac
182done
183
184echo "Build type   is  \c"
185if [ ${d_FLAG} = "y" ]; then
186	echo "DEBUG"
187	export INTERNAL_RELEASE_BUILD ; INTERNAL_RELEASE_BUILD=
188	unset RELEASE_BUILD
189	unset EXTRA_OPTIONS
190	unset EXTRA_CFLAGS
191else
192	# default is a non-DEBUG build
193	echo "non-DEBUG"
194	export INTERNAL_RELEASE_BUILD ; INTERNAL_RELEASE_BUILD=
195	export RELEASE_BUILD ; RELEASE_BUILD=
196	unset EXTRA_OPTIONS
197	unset EXTRA_CFLAGS
198fi
199
200if [ $O_FLAG = "y" ]; then
201	export MULTI_PROTO=yes
202	if [ "$CLOSED_IS_PRESENT" = "yes" ]; then
203		echo "CLOSED_IS_PRESENT is 'no' (because of '-O')"
204	fi
205	export CLOSED_IS_PRESENT=no
206	export ON_CLOSED_BINS=$CODEMGR_WS/closed.skel
207fi
208
209# update build-type variables
210CPIODIR=${CPIODIR}${SUFFIX}
211PKGARCHIVE=${PKGARCHIVE}${SUFFIX}
212
213# Append source version
214if [ "$SE_FLAG" = "y" ]; then
215        VERSION="${VERSION}:EXPORT"
216	SRC=${EXPORT_SRC}/usr/src
217fi
218
219if [ "$SD_FLAG" = "y" ]; then
220        VERSION="${VERSION}:DOMESTIC"
221	SRC=${EXPORT_SRC}/usr/src
222fi
223
224if [ "$SH_FLAG" = "y" ]; then
225        VERSION="${VERSION}:HYBRID"
226	SRC=${EXPORT_SRC}/usr/src
227fi
228
229if [ "$SO_FLAG" = "y" ]; then
230        VERSION="${VERSION}:OPEN_ONLY"
231	SRC=${OPEN_SRCDIR}/usr/src
232fi
233
234# 	Set PATH for a build
235PATH="/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:."
236if [ "${SUNWSPRO}" != "" ]; then
237	PATH="${SUNWSPRO}/bin:$PATH"
238	export PATH
239fi
240
241if [ -z "$CLOSED_IS_PRESENT" ]; then
242	if [ -d $SRC/../closed ]; then
243		CLOSED_IS_PRESENT="yes"
244	else
245		CLOSED_IS_PRESENT="no"
246	fi
247	export CLOSED_IS_PRESENT
248fi
249
250TOOLS=${SRC}/tools
251TOOLS_PROTO=${TOOLS}/proto
252
253if [ "$t_FLAG" = "y" ]; then
254	export ONBLD_TOOLS=${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}
255
256	STABS=${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs
257	export STABS
258	CTFSTABS=${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs
259	export CTFSTABS
260	GENOFFSETS=${TOOLS_PROTO}/opt/onbld/bin/genoffsets
261	export GENOFFSETS
262
263	CTFCONVERT=${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert
264	export CTFCONVERT
265	CTFMERGE=${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge
266	export CTFMERGE
267
268	CTFCVTPTBL=${TOOLS_PROTO}/opt/onbld/bin/ctfcvtptbl
269	export CTFCVTPTBL
270	CTFFINDMOD=${TOOLS_PROTO}/opt/onbld/bin/ctffindmod
271	export CTFFINDMOD
272
273	PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}"
274	PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}"
275	export PATH
276fi
277
278unset CH
279if [ "$o_FLAG" = "y" ]; then
280	CH=
281	export CH
282fi
283POUND_SIGN="#"
284DEF_STRIPFLAG="-s"
285
286TMPDIR="/tmp"
287
288export	PATH TMPDIR o_FLAG POUND_SIGN DEF_STRIPFLAG
289unset	CFLAGS LD_LIBRARY_PATH
290
291# a la ws
292ENVLDLIBS1=
293ENVLDLIBS2=
294ENVLDLIBS3=
295ENVCPPFLAGS1=
296ENVCPPFLAGS2=
297ENVCPPFLAGS3=
298ENVCPPFLAGS4=
299PARENT_ROOT=
300
301[ "$O_FLAG" = "y" ] && export ROOT=$ROOT-open
302
303if [ "$MULTI_PROTO" != "yes" -a "$MULTI_PROTO" != "no" ]; then
304	echo "WARNING: invalid value for MULTI_PROTO ($MULTI_PROTO);" \
305	    "setting to \"no\"."
306	export MULTI_PROTO=no
307fi
308
309[ "$MULTI_PROTO" = "yes" ] && export ROOT=$ROOT$SUFFIX
310
311ENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib"
312ENVCPPFLAGS1="-I$ROOT/usr/include"
313MAKEFLAGS=e
314
315export ENVLDLIBS1 ENVLDLIBS2 ENVLDLIBS3 \
316	ENVCPPFLAGS1 ENVCPPFLAGS2 ENVCPPFLAGS3 \
317	ENVCPPFLAGS4 MAKEFLAGS PARENT_ROOT
318
319echo "RELEASE      is  $RELEASE"
320echo "VERSION      is  $VERSION"
321echo "RELEASE_DATE is  $RELEASE_DATE"
322echo ""
323
324if [[ -f $SRC/Makefile ]] && egrep -s '^setup:' $SRC/Makefile; then
325	echo "The top-level 'setup' target is available \c"
326	echo "to build headers and tools."
327	echo ""
328
329elif [[ "$t_FLAG" = "y" ]]; then
330	echo "The tools can be (re)built with the install target in ${TOOLS}."
331	echo ""
332fi
333
334
335if [[ "$c_FLAG" = "n" && -x "$SHELL" && `basename $SHELL` != "csh" ]]; then
336	# $SHELL is set, and it's not csh.
337
338	if [[ "$f_FLAG" != "n" ]]; then
339		echo "WARNING: -f is ignored when \$SHELL is not csh"
340	fi
341
342	echo "Using $SHELL as shell."
343	exec $SHELL ${@:+-c "$@"}
344
345elif [[ "$f_FLAG" = "y" ]]; then
346	echo "Using csh -f as shell."
347	exec csh -f ${@:+-c "$@"}
348
349else
350	echo "Using csh as shell."
351	exec csh ${@:+-c "$@"}
352fi
353