Print this page
11224 nightly and bldenv should be usable directly
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/tools/scripts/bldenv.sh
+++ new/usr/src/tools/scripts/bldenv
1 1 #!/usr/bin/ksh93
2 2 #
3 3 # CDDL HEADER START
4 4 #
5 5 # The contents of this file are subject to the terms of the
6 6 # Common Development and Distribution License (the "License").
7 7 # You may not use this file except in compliance with the License.
8 8 #
9 9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 10 # or http://www.opensolaris.org/os/licensing.
11 11 # See the License for the specific language governing permissions
12 12 # and limitations under the License.
13 13 #
14 14 # When distributing Covered Code, include this CDDL HEADER in each
15 15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 16 # If applicable, add the following below this CDDL HEADER, with the
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
17 17 # fields enclosed by brackets "[]" replaced with your own identifying
18 18 # information: Portions Copyright [yyyy] [name of copyright owner]
19 19 #
20 20 # CDDL HEADER END
21 21 #
22 22
23 23 #
24 24 # Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
25 25 # Copyright 2011 Nexenta Systems, Inc. All rights reserved.
26 26 # Copyright 2014 Garrett D'Amore <garrett@damore.org>
27 -# Copyright 2018 Joyent, Inc.
27 +# Copyright 2020 Joyent, Inc.
28 28 #
29 29 # Uses supplied "env" file, based on /opt/onbld/etc/env, to set shell variables
30 30 # before spawning a shell for doing a release-style builds interactively
31 31 # and incrementally.
32 32 #
33 33
34 34 function fatal_error
35 35 {
36 36 print -u2 "${progname}: $*"
37 37 exit 1
38 38 }
39 39
40 40 function usage
41 41 {
42 42 OPTIND=0
43 43 getopts -a "${progname}" "${USAGE}" OPT '-?'
44 44 exit 2
45 45 }
46 46
47 47 typeset -r USAGE=$'+
48 48 [-?\n@(#)\$Id: bldenv (OS/Net) 2008-04-06 \$\n]
49 49 [-author?OS/Net community <tools-discuss@opensolaris.org>]
50 50 [+NAME?bldenv - spawn shell for interactive incremental OS-Net
51 51 consolidation builds]
52 52 [+DESCRIPTION?bldenv is a useful companion to the nightly(1) script for
53 53 doing interactive and incremental builds in a workspace
54 54 already built with nightly(1). bldenv spawns a shell set up
55 55 with the same environment variables taken from an env_file,
56 56 as prepared for use with nightly(1).]
57 57 [+?In addition to running a shell for interactive use, bldenv
58 58 can optionally run a single command in the given environment,
59 59 in the vein of sh -c or su -c. This is useful for
60 60 scripting, when an interactive shell would not be. If the
61 61 command is composed of multiple shell words or contains
62 62 other shell metacharacters, it must be quoted appropriately.]
63 63 [+?bldenv is particularly useful for testing Makefile targets
64 64 like clobber, install and _msg, which otherwise require digging
65 65 through large build logs to figure out what is being
66 66 done.]
67 67 [+?By default, bldenv will invoke the shell specified in
68 68 $SHELL. If $SHELL is not set or is invalid, csh will be
69 69 used.]
70 70 [c?force the use of csh, regardless of the value of $SHELL.]
71 71 [f?invoke csh with the -f (fast-start) option. This option is valid
72 72 only if $SHELL is unset or if it points to csh.]
73 73 [d?set up environment for doing DEBUG builds. The default is non-DEBUG,
74 74 unless the -F flag is specified in the nightly file.]
75 75 [t?set up environment to use the tools in usr/src/tools (this is the
76 76 default, use +t to use the tools from /opt/onbld)]
77 77
78 78 <env_file> [command]
79 79
80 80 [+EXAMPLES]{
81 81 [+?Example 1: Interactive use]{
82 82 [+?Use bldenv to spawn a shell to perform a DEBUG build and
83 83 testing of the Makefile targets clobber and install for
84 84 usr/src/cmd/true.]
85 85 [+\n% rlogin wopr-2 -l gk
86 86 {root::wopr-2::49} bldenv -d /export0/jg/on10-se.env
87 87 Build type is DEBUG
88 88 RELEASE is 5.10
89 89 VERSION is wopr-2::on10-se::11/01/2001
90 90 RELEASE_DATE is May 2004
91 91 The top-level `setup\' target is available to build headers
92 92 and tools.
93 93 Using /usr/bin/tcsh as shell.
94 94 {root::wopr-2::49}
95 95 {root::wopr-2::49} cd $SRC/cmd/true
96 96 {root::wopr-2::50} make
97 97 {root::wopr-2::51} make clobber
98 98 /usr/bin/rm -f true true.po
99 99 {root::wopr-2::52} make
100 100 /usr/bin/rm -f true
101 101 cat true.sh > true
102 102 chmod +x true
103 103 {root::wopr-2::53} make install
104 104 install -s -m 0555 -u root -g bin -f /export0/jg/on10-se/proto/root_sparc/usr/bin true
105 105 `install\' is up to date.]
106 106 }
107 107 [+?Example 2: Non-interactive use]{
108 108 [+?Invoke bldenv to create SUNWonbld with a single command:]
109 109 [+\nexample% bldenv onnv_06 \'cd $SRC/tools && make pkg\']
110 110 }
111 111 }
112 112 [+SEE ALSO?\bnightly\b(1)]
113 113 '
114 114
115 115 # main
116 116 builtin basename
117 117
118 118 # boolean flags (true/false)
119 119 typeset flags=(
120 120 typeset c=false
121 121 typeset f=false
122 122 typeset d=false
123 123 typeset O=false
124 124 typeset o=false
125 125 typeset t=true
126 126 typeset s=(
127 127 typeset e=false
128 128 typeset h=false
129 129 typeset d=false
130 130 typeset o=false
131 131 )
132 132 typeset d_set=false
133 133 typeset DF_build=false
134 134 )
135 135
136 136 typeset progname="$(basename -- "${0}")"
137 137
138 138 OPTIND=1
139 139
140 140 while getopts -a "${progname}" "${USAGE}" OPT ; do
141 141 case ${OPT} in
142 142 c) flags.c=true ;;
143 143 +c) flags.c=false ;;
144 144 f) flags.f=true ;;
145 145 +f) flags.f=false ;;
146 146 d) flags.d=true ; flags.d_set=true ;;
147 147 +d) flags.d=false ; flags.d_set=true ;;
148 148 t) flags.t=true ;;
149 149 +t) flags.t=false ;;
150 150 \?) usage ;;
151 151 esac
152 152 done
153 153 shift $((OPTIND-1))
154 154
155 155 # test that the path to the environment-setting file was given
156 156 if (( $# < 1 )) ; then
157 157 usage
158 158 fi
159 159
160 160 # force locale to C
161 161 export \
162 162 LANG=C \
163 163 LC_ALL=C \
164 164 LC_COLLATE=C \
165 165 LC_CTYPE=C \
166 166 LC_MESSAGES=C \
167 167 LC_MONETARY=C \
168 168 LC_NUMERIC=C \
169 169 LC_TIME=C
170 170
171 171 # clear environment variables we know to be bad for the build
172 172 unset \
173 173 LD_OPTIONS \
174 174 LD_LIBRARY_PATH \
175 175 LD_AUDIT \
176 176 LD_BIND_NOW \
177 177 LD_BREADTH \
178 178 LD_CONFIG \
179 179 LD_DEBUG \
180 180 LD_FLAGS \
181 181 LD_LIBRARY_PATH_64 \
182 182 LD_NOVERSION \
183 183 LD_ORIGIN \
184 184 LD_LOADFLTR \
185 185 LD_NOAUXFLTR \
186 186 LD_NOCONFIG \
187 187 LD_NODIRCONFIG \
188 188 LD_NOOBJALTER \
189 189 LD_PRELOAD \
190 190 LD_PROFILE \
191 191 CONFIG \
192 192 GROUP \
193 193 OWNER \
194 194 REMOTE \
195 195 ENV \
196 196 ARCH \
197 197 CLASSPATH
198 198
199 199 #
200 200 # Setup environment variables
201 201 #
202 202 if [[ -f /etc/nightly.conf ]]; then
203 203 source /etc/nightly.conf
204 204 fi
205 205
206 206 if [[ -f "$1" ]]; then
207 207 if [[ "$1" == */* ]]; then
208 208 source "$1"
209 209 else
210 210 source "./$1"
211 211 fi
212 212 else
213 213 if [[ -f "/opt/onbld/env/$1" ]]; then
↓ open down ↓ |
176 lines elided |
↑ open up ↑ |
214 214 source "/opt/onbld/env/$1"
215 215 else
216 216 printf \
217 217 'Cannot find env file as either %s or /opt/onbld/env/%s\n' \
218 218 "$1" "$1"
219 219 exit 1
220 220 fi
221 221 fi
222 222 shift
223 223
224 -# contents of stdenv.sh inserted after next line:
225 -# STDENV_START
226 -# STDENV_END
227 -
228 224 # Check if we have sufficient data to continue...
229 225 [[ -v CODEMGR_WS ]] || fatal_error "Error: Variable CODEMGR_WS not set."
230 226 [[ -d "${CODEMGR_WS}" ]] || fatal_error "Error: ${CODEMGR_WS} is not a directory."
231 227 [[ -f "${CODEMGR_WS}/usr/src/Makefile" ]] || fatal_error "Error: ${CODEMGR_WS}/usr/src/Makefile not found."
232 228
233 -# must match the getopts in nightly.sh
229 +# must match the getopts in nightly
234 230 OPTIND=1
235 231 NIGHTLY_OPTIONS="-${NIGHTLY_OPTIONS#-}"
236 232 while getopts '+0ABCDdFfGIilMmNnpRrtUuwW' FLAG $NIGHTLY_OPTIONS
237 233 do
238 234 case "$FLAG" in
239 235 t) flags.t=true ;;
240 236 +t) flags.t=false ;;
241 237 F) flags.DF_build=true ;;
242 238 *) ;;
243 239 esac
244 240 done
245 241
246 242 # DEBUG is a little bit complicated. First, bldenv -d/+d over-rides
247 243 # the env file. Otherwise, we'll default to DEBUG iff we are *not*
248 244 # building non-DEBUG bits at all.
249 245 if [ "${flags.d_set}" != "true" ] && "${flags.DF_build}"; then
250 246 flags.d=true
251 247 fi
252 248
253 249 POUND_SIGN="#"
254 250 # have we set RELEASE_DATE in our env file?
255 251 if [ -z "$RELEASE_DATE" ]; then
256 252 RELEASE_DATE=$(LC_ALL=C date +"%B %Y")
257 253 fi
258 254 BUILD_DATE=$(LC_ALL=C date +%Y-%b-%d)
259 255 BASEWSDIR=$(basename -- "${CODEMGR_WS}")
260 256 DEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\""
261 257 export DEV_CM RELEASE_DATE POUND_SIGN
262 258
263 259 print 'Build type is \c'
264 260 if ${flags.d} ; then
265 261 print 'DEBUG'
266 262 SUFFIX=""
267 263 unset RELEASE_BUILD
268 264 unset EXTRA_OPTIONS
269 265 unset EXTRA_CFLAGS
270 266
271 267 if [ -n "$DEBUG_CONSOLE_COLOR" ]; then
272 268 export DEFAULT_CONSOLE_COLOR="$DEBUG_CONSOLE_COLOR"
273 269 fi
274 270 else
275 271 # default is a non-DEBUG build
276 272 print 'non-DEBUG'
277 273 SUFFIX="-nd"
278 274 export RELEASE_BUILD=
279 275 unset EXTRA_OPTIONS
280 276 unset EXTRA_CFLAGS
281 277
282 278 if [ -n "$RELEASE_CONSOLE_COLOR" ]; then
283 279 export DEFAULT_CONSOLE_COLOR="$RELEASE_CONSOLE_COLOR"
284 280 fi
285 281 fi
286 282
287 283 # update build-type variables
288 284 PKGARCHIVE="${PKGARCHIVE}${SUFFIX}"
289 285
290 286 # Set PATH for a build
291 287 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:."
292 288 if [[ "${SUNWSPRO}" != "" ]]; then
293 289 export PATH="${SUNWSPRO}/bin:$PATH"
294 290 fi
295 291
296 292 if [[ -n "${MAKE}" ]]; then
297 293 if [[ -x "${MAKE}" ]]; then
298 294 export PATH="$(dirname -- "${MAKE}"):$PATH"
299 295 else
300 296 print "\$MAKE (${MAKE}) is not a valid executible"
301 297 exit 1
302 298 fi
303 299 fi
304 300
305 301 TOOLS="${SRC}/tools"
306 302 TOOLS_PROTO="${TOOLS}/proto/root_${MACH}-nd" ; export TOOLS_PROTO
307 303
308 304 if "${flags.t}" ; then
309 305 export ONBLD_TOOLS="${ONBLD_TOOLS:=${TOOLS_PROTO}/opt/onbld}"
310 306
311 307 export STABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/stabs"
312 308 export CTFSTABS="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfstabs"
313 309 export GENOFFSETS="${TOOLS_PROTO}/opt/onbld/bin/genoffsets"
314 310
315 311 export CTFCONVERT="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfconvert"
316 312 export CTFMERGE="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ctfmerge"
317 313 export NDRGEN="${TOOLS_PROTO}/opt/onbld/bin/${MACH}/ndrgen"
318 314
319 315 PATH="${TOOLS_PROTO}/opt/onbld/bin/${MACH}:${PATH}"
320 316 PATH="${TOOLS_PROTO}/opt/onbld/bin:${PATH}"
321 317 export PATH
322 318 fi
323 319
324 320 export DMAKE_MODE=${DMAKE_MODE:-parallel}
325 321
326 322 #
327 323 # Work around folks who have historically used GCC_ROOT and convert it to
328 324 # GNUC_ROOT. We leave GCC_ROOT in the environment for now (though this could
329 325 # mess up the case where multiple different gcc versions are being used to
330 326 # shadow).
331 327 #
332 328 if [[ -n "${GCC_ROOT}" ]]; then
333 329 export GNUC_ROOT=${GCC_ROOT}
334 330 fi
335 331
336 332 DEF_STRIPFLAG="-s"
337 333
338 334 TMPDIR="/tmp"
339 335
340 336 export \
341 337 PATH TMPDIR \
342 338 POUND_SIGN \
343 339 DEF_STRIPFLAG \
344 340 RELEASE_DATE
345 341 unset \
346 342 CFLAGS \
347 343 LD_LIBRARY_PATH
348 344
349 345 # a la ws
350 346 ENVLDLIBS1=
351 347 ENVLDLIBS2=
352 348 ENVLDLIBS3=
353 349 ENVCPPFLAGS1=
354 350 ENVCPPFLAGS2=
355 351 ENVCPPFLAGS3=
356 352 ENVCPPFLAGS4=
357 353 PARENT_ROOT=
358 354 PARENT_TOOLS_ROOT=
359 355
360 356 if [[ "$MULTI_PROTO" != "yes" && "$MULTI_PROTO" != "no" ]]; then
361 357 printf \
362 358 'WARNING: invalid value for MULTI_PROTO (%s); setting to "no".\n' \
363 359 "$MULTI_PROTO"
364 360 export MULTI_PROTO="no"
365 361 fi
366 362
367 363 [[ "$MULTI_PROTO" == "yes" ]] && export ROOT="${ROOT}${SUFFIX}"
368 364
369 365 ENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib"
370 366 ENVCPPFLAGS1="-I$ROOT/usr/include"
371 367 MAKEFLAGS=e
372 368
373 369 export \
374 370 ENVLDLIBS1 \
375 371 ENVLDLIBS2 \
376 372 ENVLDLIBS3 \
377 373 ENVCPPFLAGS1 \
378 374 ENVCPPFLAGS2 \
379 375 ENVCPPFLAGS3 \
380 376 ENVCPPFLAGS4 \
381 377 MAKEFLAGS \
382 378 PARENT_ROOT \
383 379 PARENT_TOOLS_ROOT
384 380
385 381 printf 'RELEASE is %s\n' "$RELEASE"
386 382 printf 'VERSION is %s\n' "$VERSION"
387 383 printf 'RELEASE_DATE is %s\n\n' "$RELEASE_DATE"
388 384
389 385 if [[ -f "$SRC/Makefile" ]] && egrep -s '^setup:' "$SRC/Makefile" ; then
390 386 print "The top-level 'setup' target is available \c"
391 387 print "to build headers and tools."
392 388 print ""
393 389
394 390 elif "${flags.t}" ; then
395 391 printf \
396 392 'The tools can be (re)built with the install target in %s.\n\n' \
397 393 "${TOOLS}"
398 394 fi
399 395
400 396 #
401 397 # place ourselves in a new task, respecting BUILD_PROJECT if set.
402 398 #
403 399 /usr/bin/newtask -c $$ ${BUILD_PROJECT:+-p$BUILD_PROJECT}
404 400
405 401 if [[ "${flags.c}" == "false" && -x "$SHELL" && \
406 402 "$(basename -- "${SHELL}")" != "csh" ]]; then
407 403 # $SHELL is set, and it's not csh.
408 404
409 405 if "${flags.f}" ; then
410 406 print 'WARNING: -f is ignored when $SHELL is not csh'
411 407 fi
412 408
413 409 printf 'Using %s as shell.\n' "$SHELL"
414 410 exec "$SHELL" ${@:+-c "$@"}
415 411
416 412 elif "${flags.f}" ; then
417 413 print 'Using csh -f as shell.'
418 414 exec csh -f ${@:+-c "$@"}
419 415
420 416 else
421 417 print 'Using csh as shell.'
422 418 exec csh ${@:+-c "$@"}
423 419 fi
424 420
425 421 # not reached
↓ open down ↓ |
182 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX