19e4fd900SJohn Levon#!/bin/ksh -p 29e4fd900SJohn Levon# 39e4fd900SJohn Levon# CDDL HEADER START 49e4fd900SJohn Levon# 59e4fd900SJohn Levon# The contents of this file are subject to the terms of the 69e4fd900SJohn Levon# Common Development and Distribution License (the "License"). 79e4fd900SJohn Levon# You may not use this file except in compliance with the License. 89e4fd900SJohn Levon# 99e4fd900SJohn Levon# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 109e4fd900SJohn Levon# or http://www.opensolaris.org/os/licensing. 119e4fd900SJohn Levon# See the License for the specific language governing permissions 129e4fd900SJohn Levon# and limitations under the License. 139e4fd900SJohn Levon# 149e4fd900SJohn Levon# When distributing Covered Code, include this CDDL HEADER in each 159e4fd900SJohn Levon# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 169e4fd900SJohn Levon# If applicable, add the following below this CDDL HEADER, with the 179e4fd900SJohn Levon# fields enclosed by brackets "[]" replaced with your own identifying 189e4fd900SJohn Levon# information: Portions Copyright [yyyy] [name of copyright owner] 199e4fd900SJohn Levon# 209e4fd900SJohn Levon# CDDL HEADER END 219e4fd900SJohn Levon# 229e4fd900SJohn Levon 239e4fd900SJohn Levon# 249e4fd900SJohn Levon# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 259e4fd900SJohn Levon# Copyright 2008, 2010, Richard Lowe 269e4fd900SJohn Levon# Copyright 2011 Nexenta Systems, Inc. All rights reserved. 279e4fd900SJohn Levon# Copyright 2012 Joshua M. Clulow <josh@sysmgr.org> 289e4fd900SJohn Levon# Copyright 2020 Joyent, Inc. 29b85ab92fSAndy Fiddaman# Copyright 2020 OmniOS Community Edition (OmniOSce) Association. 309e4fd900SJohn Levon# 319e4fd900SJohn Levon# Based on the nightly script from the integration folks, 329e4fd900SJohn Levon# Mostly modified and owned by mike_s. 339e4fd900SJohn Levon# Changes also by kjc, dmk. 349e4fd900SJohn Levon# 359e4fd900SJohn Levon# BRINGOVER_WS may be specified in the env file. 369e4fd900SJohn Levon# The default is the old behavior of CLONE_WS 379e4fd900SJohn Levon# 389e4fd900SJohn Levon# -i on the command line, means fast options, so when it's on the 399e4fd900SJohn Levon# command line (only), lint and check builds are skipped no matter what 409e4fd900SJohn Levon# the setting of their individual flags are in NIGHTLY_OPTIONS. 419e4fd900SJohn Levon# 429e4fd900SJohn Levon# LINTDIRS can be set in the env file, format is a list of: 439e4fd900SJohn Levon# 449e4fd900SJohn Levon# /dirname-to-run-lint-on flag 459e4fd900SJohn Levon# 469e4fd900SJohn Levon# Where flag is: y - enable lint noise diff output 479e4fd900SJohn Levon# n - disable lint noise diff output 489e4fd900SJohn Levon# 499e4fd900SJohn Levon# For example: LINTDIRS="$SRC/uts n $SRC/stand y $SRC/psm y" 509e4fd900SJohn Levon# 519e4fd900SJohn Levon# OPTHOME may be set in the environment to override /opt 529e4fd900SJohn Levon# 539e4fd900SJohn Levon 549e4fd900SJohn Levon# 559e4fd900SJohn Levon# The CDPATH variable causes ksh's `cd' builtin to emit messages to stdout 569e4fd900SJohn Levon# under certain circumstances, which can really screw things up; unset it. 579e4fd900SJohn Levon# 589e4fd900SJohn Levonunset CDPATH 599e4fd900SJohn Levon 609e4fd900SJohn Levon# Get the absolute path of the nightly script that the user invoked. This 619e4fd900SJohn Levon# may be a relative path, and we need to do this before changing directory. 629e4fd900SJohn Levonnightly_path=`whence $0` 639e4fd900SJohn Levon 649e4fd900SJohn Levon# 659e4fd900SJohn Levon# Keep track of where we found nightly so we can invoke the matching 669e4fd900SJohn Levon# which_scm script. If that doesn't work, don't go guessing, just rely 679e4fd900SJohn Levon# on the $PATH settings, which will generally give us either /opt/onbld 689e4fd900SJohn Levon# or the user's workspace. 699e4fd900SJohn Levon# 709e4fd900SJohn LevonWHICH_SCM=$(dirname $nightly_path)/which_scm 719e4fd900SJohn Levonif [[ ! -x $WHICH_SCM ]]; then 729e4fd900SJohn Levon WHICH_SCM=which_scm 739e4fd900SJohn Levonfi 749e4fd900SJohn Levon 759e4fd900SJohn Levonfunction fatal_error 769e4fd900SJohn Levon{ 779e4fd900SJohn Levon print -u2 "nightly: $*" 789e4fd900SJohn Levon exit 1 799e4fd900SJohn Levon} 809e4fd900SJohn Levon 819e4fd900SJohn Levon# 829e4fd900SJohn Levon# Function to do a DEBUG and non-DEBUG build. Needed because we might 839e4fd900SJohn Levon# need to do another for the source build, and since we only deliver DEBUG or 849e4fd900SJohn Levon# non-DEBUG packages. 859e4fd900SJohn Levon# 869e4fd900SJohn Levon# usage: normal_build 879e4fd900SJohn Levon# 889e4fd900SJohn Levonfunction normal_build { 899e4fd900SJohn Levon 909e4fd900SJohn Levon typeset orig_p_FLAG="$p_FLAG" 919e4fd900SJohn Levon typeset crypto_signer="$CODESIGN_USER" 929e4fd900SJohn Levon 939e4fd900SJohn Levon suffix="" 949e4fd900SJohn Levon 959e4fd900SJohn Levon # non-DEBUG build begins 969e4fd900SJohn Levon 979e4fd900SJohn Levon if [ "$F_FLAG" = "n" ]; then 989e4fd900SJohn Levon set_non_debug_build_flags 999e4fd900SJohn Levon CODESIGN_USER="$crypto_signer" \ 1009e4fd900SJohn Levon build "non-DEBUG" "$suffix-nd" "-nd" "$MULTI_PROTO" 1019e4fd900SJohn Levon else 1029e4fd900SJohn Levon echo "\n==== No non-DEBUG $open_only build ====\n" >> "$LOGFILE" 1039e4fd900SJohn Levon fi 1049e4fd900SJohn Levon 1059e4fd900SJohn Levon # non-DEBUG build ends 1069e4fd900SJohn Levon 1079e4fd900SJohn Levon # DEBUG build begins 1089e4fd900SJohn Levon 1099e4fd900SJohn Levon if [ "$D_FLAG" = "y" ]; then 1109e4fd900SJohn Levon set_debug_build_flags 1119e4fd900SJohn Levon CODESIGN_USER="$crypto_signer" \ 1129e4fd900SJohn Levon build "DEBUG" "$suffix" "" "$MULTI_PROTO" 1139e4fd900SJohn Levon else 1149e4fd900SJohn Levon echo "\n==== No DEBUG $open_only build ====\n" >> "$LOGFILE" 1159e4fd900SJohn Levon fi 1169e4fd900SJohn Levon 1179e4fd900SJohn Levon # DEBUG build ends 1189e4fd900SJohn Levon 1199e4fd900SJohn Levon p_FLAG="$orig_p_FLAG" 1209e4fd900SJohn Levon} 1219e4fd900SJohn Levon 1229e4fd900SJohn Levon# 1239e4fd900SJohn Levon# usage: run_hook HOOKNAME ARGS... 1249e4fd900SJohn Levon# 1259e4fd900SJohn Levon# If variable "$HOOKNAME" is defined, insert a section header into 1269e4fd900SJohn Levon# our logs and then run the command with ARGS 1279e4fd900SJohn Levon# 1289e4fd900SJohn Levonfunction run_hook { 1299e4fd900SJohn Levon HOOKNAME=$1 1309e4fd900SJohn Levon eval HOOKCMD=\$$HOOKNAME 1319e4fd900SJohn Levon shift 1329e4fd900SJohn Levon 1339e4fd900SJohn Levon if [ -n "$HOOKCMD" ]; then 1349e4fd900SJohn Levon ( 1359e4fd900SJohn Levon echo "\n==== Running $HOOKNAME command: $HOOKCMD ====\n" 1369e4fd900SJohn Levon ( $HOOKCMD "$@" 2>&1 ) 1379e4fd900SJohn Levon if [ "$?" -ne 0 ]; then 1389e4fd900SJohn Levon # Let exit status propagate up 1399e4fd900SJohn Levon touch $TMPDIR/abort 1409e4fd900SJohn Levon fi 1419e4fd900SJohn Levon ) | tee -a $mail_msg_file >> $LOGFILE 1429e4fd900SJohn Levon 1439e4fd900SJohn Levon if [ -f $TMPDIR/abort ]; then 1449e4fd900SJohn Levon build_ok=n 1459e4fd900SJohn Levon echo "\nAborting at request of $HOOKNAME" | 1469e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 1479e4fd900SJohn Levon exit 1 1489e4fd900SJohn Levon fi 1499e4fd900SJohn Levon fi 1509e4fd900SJohn Levon} 1519e4fd900SJohn Levon 1529e4fd900SJohn Levon# Return library search directive as function of given root. 1539e4fd900SJohn Levonfunction myldlibs { 1549e4fd900SJohn Levon echo "-L$1/lib -L$1/usr/lib" 1559e4fd900SJohn Levon} 1569e4fd900SJohn Levon 1579e4fd900SJohn Levon# Return header search directive as function of given root. 1589e4fd900SJohn Levonfunction myheaders { 1599e4fd900SJohn Levon echo "-I$1/usr/include" 1609e4fd900SJohn Levon} 1619e4fd900SJohn Levon 1629e4fd900SJohn Levon# 1639e4fd900SJohn Levon# Function to do the build, including package generation. 1649e4fd900SJohn Levon# usage: build LABEL SUFFIX ND MULTIPROTO 1659e4fd900SJohn Levon# - LABEL is used to tag build output. 1669e4fd900SJohn Levon# - SUFFIX is used to distinguish files (e.g., DEBUG vs non-DEBUG, 1679e4fd900SJohn Levon# open-only vs full tree). 1689e4fd900SJohn Levon# - ND is "-nd" (non-DEBUG builds) or "" (DEBUG builds). 1699e4fd900SJohn Levon# - If MULTIPROTO is "yes", it means to name the proto area according to 1709e4fd900SJohn Levon# SUFFIX. Otherwise ("no"), (re)use the standard proto area. 1719e4fd900SJohn Levon# 1729e4fd900SJohn Levonfunction build { 1739e4fd900SJohn Levon LABEL=$1 1749e4fd900SJohn Levon SUFFIX=$2 1759e4fd900SJohn Levon ND=$3 1769e4fd900SJohn Levon MULTIPROTO=$4 1779e4fd900SJohn Levon INSTALLOG=install${SUFFIX}-${MACH} 1789e4fd900SJohn Levon NOISE=noise${SUFFIX}-${MACH} 1799e4fd900SJohn Levon PKGARCHIVE=${PKGARCHIVE_ORIG}${SUFFIX} 1809e4fd900SJohn Levon 1819e4fd900SJohn Levon ORIGROOT=$ROOT 1829e4fd900SJohn Levon [ $MULTIPROTO = no ] || export ROOT=$ROOT$SUFFIX 1839e4fd900SJohn Levon 1849e4fd900SJohn Levon export ENVLDLIBS1=`myldlibs $ROOT` 1859e4fd900SJohn Levon export ENVCPPFLAGS1=`myheaders $ROOT` 1869e4fd900SJohn Levon 1879e4fd900SJohn Levon this_build_ok=y 1889e4fd900SJohn Levon # 1899e4fd900SJohn Levon # Build OS-Networking source 1909e4fd900SJohn Levon # 1919e4fd900SJohn Levon echo "\n==== Building OS-Net source at `date` ($LABEL) ====\n" \ 1929e4fd900SJohn Levon >> $LOGFILE 1939e4fd900SJohn Levon 1949e4fd900SJohn Levon rm -f $SRC/${INSTALLOG}.out 1959e4fd900SJohn Levon cd $SRC 1969e4fd900SJohn Levon /bin/time $MAKE -e install 2>&1 | \ 1979e4fd900SJohn Levon tee -a $SRC/${INSTALLOG}.out >> $LOGFILE 1989e4fd900SJohn Levon 1999e4fd900SJohn Levon echo "\n==== Build errors ($LABEL) ====\n" >> $mail_msg_file 2009e4fd900SJohn Levon egrep ":" $SRC/${INSTALLOG}.out | 2019e4fd900SJohn Levon egrep -e "(^${MAKE}:|[ ]error[: \n])" | \ 2029e4fd900SJohn Levon egrep -v "Ignoring unknown host" | \ 2039e4fd900SJohn Levon egrep -v "cc .* -o error " | \ 2049e4fd900SJohn Levon egrep -v "warning" | tee $TMPDIR/build_errs${SUFFIX} \ 2059e4fd900SJohn Levon >> $mail_msg_file 2069e4fd900SJohn Levon if [[ -s $TMPDIR/build_errs${SUFFIX} ]]; then 2079e4fd900SJohn Levon build_ok=n 2089e4fd900SJohn Levon this_build_ok=n 2099e4fd900SJohn Levon fi 2109e4fd900SJohn Levon grep "bootblock image is .* bytes too big" $SRC/${INSTALLOG}.out \ 2119e4fd900SJohn Levon >> $mail_msg_file 2129e4fd900SJohn Levon if [ "$?" = "0" ]; then 2139e4fd900SJohn Levon build_ok=n 2149e4fd900SJohn Levon this_build_ok=n 2159e4fd900SJohn Levon fi 2169e4fd900SJohn Levon 2179e4fd900SJohn Levon echo "\n==== Build warnings ($LABEL) ====\n" >>$mail_msg_file 2189e4fd900SJohn Levon egrep -i warning: $SRC/${INSTALLOG}.out \ 2199e4fd900SJohn Levon | egrep -v '^tic:' \ 2209e4fd900SJohn Levon | egrep -v "symbol (\`|')timezone' has differing types:" \ 2219e4fd900SJohn Levon | egrep -v "parameter <PSTAMP> set to" \ 2229e4fd900SJohn Levon | egrep -v "Ignoring unknown host" \ 2239e4fd900SJohn Levon | egrep -v "redefining segment flags attribute for" \ 2249e4fd900SJohn Levon | tee $TMPDIR/build_warnings${SUFFIX} >> $mail_msg_file 2259e4fd900SJohn Levon if [[ -s $TMPDIR/build_warnings${SUFFIX} ]]; then 2269e4fd900SJohn Levon build_ok=n 2279e4fd900SJohn Levon this_build_ok=n 2289e4fd900SJohn Levon fi 2299e4fd900SJohn Levon 2309e4fd900SJohn Levon echo "\n==== Ended OS-Net source build at `date` ($LABEL) ====\n" \ 2319e4fd900SJohn Levon >> $LOGFILE 2329e4fd900SJohn Levon 2339e4fd900SJohn Levon echo "\n==== Elapsed build time ($LABEL) ====\n" >>$mail_msg_file 2349e4fd900SJohn Levon tail -3 $SRC/${INSTALLOG}.out >>$mail_msg_file 2359e4fd900SJohn Levon 2369e4fd900SJohn Levon if [ "$i_FLAG" = "n" ]; then 2379e4fd900SJohn Levon rm -f $SRC/${NOISE}.ref 2389e4fd900SJohn Levon if [ -f $SRC/${NOISE}.out ]; then 2399e4fd900SJohn Levon mv $SRC/${NOISE}.out $SRC/${NOISE}.ref 2409e4fd900SJohn Levon fi 2419e4fd900SJohn Levon grep : $SRC/${INSTALLOG}.out \ 2429e4fd900SJohn Levon | egrep -v '^/' \ 2439e4fd900SJohn Levon | egrep -v '^(Start|Finish|real|user|sys|./bld_awk)' \ 2449e4fd900SJohn Levon | egrep -v '^tic:' \ 2459e4fd900SJohn Levon | egrep -v '^mcs' \ 2469e4fd900SJohn Levon | egrep -v '^LD_LIBRARY_PATH=' \ 2479e4fd900SJohn Levon | egrep -v 'ar: creating' \ 2489e4fd900SJohn Levon | egrep -v 'ar: writing' \ 2499e4fd900SJohn Levon | egrep -v 'conflicts:' \ 2509e4fd900SJohn Levon | egrep -v ':saved created' \ 2519e4fd900SJohn Levon | egrep -v '^stty.*c:' \ 2529e4fd900SJohn Levon | egrep -v '^mfgname.c:' \ 2539e4fd900SJohn Levon | egrep -v '^uname-i.c:' \ 2549e4fd900SJohn Levon | egrep -v '^volumes.c:' \ 2559e4fd900SJohn Levon | egrep -v '^lint library construction:' \ 2569e4fd900SJohn Levon | egrep -v 'tsort: INFORM:' \ 2579e4fd900SJohn Levon | egrep -v 'stripalign:' \ 2589e4fd900SJohn Levon | egrep -v 'chars, width' \ 2599e4fd900SJohn Levon | egrep -v "symbol (\`|')timezone' has differing types:" \ 2609e4fd900SJohn Levon | egrep -v 'PSTAMP' \ 2619e4fd900SJohn Levon | egrep -v '|%WHOANDWHERE%|' \ 2629e4fd900SJohn Levon | egrep -v '^Manifying' \ 2639e4fd900SJohn Levon | egrep -v 'Ignoring unknown host' \ 2649e4fd900SJohn Levon | egrep -v 'Processing method:' \ 2659e4fd900SJohn Levon | egrep -v '^Writing' \ 2669e4fd900SJohn Levon | egrep -v 'spellin1:' \ 2679e4fd900SJohn Levon | egrep -v '^adding:' \ 2689e4fd900SJohn Levon | egrep -v "^echo 'msgid" \ 2699e4fd900SJohn Levon | egrep -v '^echo ' \ 2709e4fd900SJohn Levon | egrep -v '\.c:$' \ 2719e4fd900SJohn Levon | egrep -v '^Adding file:' \ 2729e4fd900SJohn Levon | egrep -v 'CLASSPATH=' \ 2739e4fd900SJohn Levon | egrep -v '\/var\/mail\/:saved' \ 2749e4fd900SJohn Levon | egrep -v -- '-DUTS_VERSION=' \ 2759e4fd900SJohn Levon | egrep -v '^Running Mkbootstrap' \ 2769e4fd900SJohn Levon | egrep -v '^Applet length read:' \ 2779e4fd900SJohn Levon | egrep -v 'bytes written:' \ 2789e4fd900SJohn Levon | egrep -v '^File:SolarisAuthApplet.bin' \ 2799e4fd900SJohn Levon | egrep -v -i 'jibversion' \ 2809e4fd900SJohn Levon | egrep -v '^Output size:' \ 2819e4fd900SJohn Levon | egrep -v '^Solo size statistics:' \ 2829e4fd900SJohn Levon | egrep -v '^Using ROM API Version' \ 2839e4fd900SJohn Levon | egrep -v '^Zero Signature length:' \ 2849e4fd900SJohn Levon | egrep -v '^Note \(probably harmless\):' \ 2859e4fd900SJohn Levon | egrep -v '::' \ 2869e4fd900SJohn Levon | egrep -v -- '-xcache' \ 2879e4fd900SJohn Levon | egrep -v '^\+' \ 2889e4fd900SJohn Levon | egrep -v '^cc1: note: -fwritable-strings' \ 2899e4fd900SJohn Levon | egrep -v 'svccfg-native -s svc:/' \ 2909e4fd900SJohn Levon | sort | uniq >$SRC/${NOISE}.out 2919e4fd900SJohn Levon if [ ! -f $SRC/${NOISE}.ref ]; then 2929e4fd900SJohn Levon cp $SRC/${NOISE}.out $SRC/${NOISE}.ref 2939e4fd900SJohn Levon fi 2949e4fd900SJohn Levon echo "\n==== Build noise differences ($LABEL) ====\n" \ 2959e4fd900SJohn Levon >>$mail_msg_file 2969e4fd900SJohn Levon diff $SRC/${NOISE}.ref $SRC/${NOISE}.out >>$mail_msg_file 2979e4fd900SJohn Levon fi 2989e4fd900SJohn Levon 2999e4fd900SJohn Levon # 3009e4fd900SJohn Levon # Re-sign selected binaries using signing server 3019e4fd900SJohn Levon # (gatekeeper builds only) 3029e4fd900SJohn Levon # 3039e4fd900SJohn Levon if [ -n "$CODESIGN_USER" -a "$this_build_ok" = "y" ]; then 3049e4fd900SJohn Levon echo "\n==== Signing proto area at `date` ====\n" >> $LOGFILE 3059e4fd900SJohn Levon signing_file="${TMPDIR}/signing" 3069e4fd900SJohn Levon rm -f ${signing_file} 3079e4fd900SJohn Levon export CODESIGN_USER 3089e4fd900SJohn Levon signproto $SRC/tools/codesign/creds 2>&1 | \ 3099e4fd900SJohn Levon tee -a ${signing_file} >> $LOGFILE 3109e4fd900SJohn Levon echo "\n==== Finished signing proto area at `date` ====\n" \ 3119e4fd900SJohn Levon >> $LOGFILE 3129e4fd900SJohn Levon echo "\n==== Crypto module signing errors ($LABEL) ====\n" \ 3139e4fd900SJohn Levon >> $mail_msg_file 3149e4fd900SJohn Levon egrep 'WARNING|ERROR' ${signing_file} >> $mail_msg_file 3159e4fd900SJohn Levon if (( $? == 0 )) ; then 3169e4fd900SJohn Levon build_ok=n 3179e4fd900SJohn Levon this_build_ok=n 3189e4fd900SJohn Levon fi 3199e4fd900SJohn Levon fi 3209e4fd900SJohn Levon 3219e4fd900SJohn Levon # 3229e4fd900SJohn Levon # Building Packages 3239e4fd900SJohn Levon # 3249e4fd900SJohn Levon if [ "$p_FLAG" = "y" -a "$this_build_ok" = "y" ]; then 3259e4fd900SJohn Levon if [ -d $SRC/pkg ]; then 3269e4fd900SJohn Levon echo "\n==== Creating $LABEL packages at `date` ====\n" \ 3279e4fd900SJohn Levon >> $LOGFILE 3289e4fd900SJohn Levon echo "Clearing out $PKGARCHIVE ..." >> $LOGFILE 3299e4fd900SJohn Levon rm -rf $PKGARCHIVE >> "$LOGFILE" 2>&1 3309e4fd900SJohn Levon mkdir -p $PKGARCHIVE >> "$LOGFILE" 2>&1 3319e4fd900SJohn Levon 3329e4fd900SJohn Levon rm -f $SRC/pkg/${INSTALLOG}.out 3339e4fd900SJohn Levon cd $SRC/pkg 3349e4fd900SJohn Levon /bin/time $MAKE -e install 2>&1 | \ 3359e4fd900SJohn Levon tee -a $SRC/pkg/${INSTALLOG}.out >> $LOGFILE 3369e4fd900SJohn Levon 3379e4fd900SJohn Levon echo "\n==== package build errors ($LABEL) ====\n" \ 3389e4fd900SJohn Levon >> $mail_msg_file 3399e4fd900SJohn Levon 3409e4fd900SJohn Levon egrep "${MAKE}|ERROR|WARNING" $SRC/pkg/${INSTALLOG}.out | \ 3419e4fd900SJohn Levon grep ':' | \ 3429e4fd900SJohn Levon grep -v PSTAMP | \ 3439e4fd900SJohn Levon egrep -v "Ignoring unknown host" | \ 3449e4fd900SJohn Levon tee $TMPDIR/package >> $mail_msg_file 3459e4fd900SJohn Levon if [[ -s $TMPDIR/package ]]; then 3469e4fd900SJohn Levon build_extras_ok=n 3479e4fd900SJohn Levon this_build_ok=n 3489e4fd900SJohn Levon fi 3499e4fd900SJohn Levon else 3509e4fd900SJohn Levon # 3519e4fd900SJohn Levon # Handle it gracefully if -p was set but there so 3529e4fd900SJohn Levon # no pkg directory. 3539e4fd900SJohn Levon # 3549e4fd900SJohn Levon echo "\n==== No $LABEL packages to build ====\n" \ 3559e4fd900SJohn Levon >> $LOGFILE 3569e4fd900SJohn Levon fi 3579e4fd900SJohn Levon else 3589e4fd900SJohn Levon echo "\n==== Not creating $LABEL packages ====\n" >> $LOGFILE 3599e4fd900SJohn Levon fi 3609e4fd900SJohn Levon 3619e4fd900SJohn Levon ROOT=$ORIGROOT 3629e4fd900SJohn Levon} 3639e4fd900SJohn Levon 3649e4fd900SJohn Levon# Usage: dolint /dir y|n 3659e4fd900SJohn Levon# Arg. 2 is a flag to turn on/off the lint diff output 3669e4fd900SJohn Levonfunction dolint { 3679e4fd900SJohn Levon if [ ! -d "$1" ]; then 3689e4fd900SJohn Levon echo "dolint error: $1 is not a directory" 3699e4fd900SJohn Levon exit 1 3709e4fd900SJohn Levon fi 3719e4fd900SJohn Levon 3729e4fd900SJohn Levon if [ "$2" != "y" -a "$2" != "n" ]; then 3739e4fd900SJohn Levon echo "dolint internal error: $2 should be 'y' or 'n'" 3749e4fd900SJohn Levon exit 1 3759e4fd900SJohn Levon fi 3769e4fd900SJohn Levon 3779e4fd900SJohn Levon lintdir=$1 3789e4fd900SJohn Levon dodiff=$2 3799e4fd900SJohn Levon base=`basename $lintdir` 3809e4fd900SJohn Levon LINTOUT=$lintdir/lint-${MACH}.out 3819e4fd900SJohn Levon LINTNOISE=$lintdir/lint-noise-${MACH} 3829e4fd900SJohn Levon export ENVLDLIBS1=`myldlibs $ROOT` 3839e4fd900SJohn Levon export ENVCPPFLAGS1=`myheaders $ROOT` 3849e4fd900SJohn Levon 3859e4fd900SJohn Levon set_debug_build_flags 3869e4fd900SJohn Levon 3879e4fd900SJohn Levon # 3889e4fd900SJohn Levon # '$MAKE lint' in $lintdir 3899e4fd900SJohn Levon # 3909e4fd900SJohn Levon echo "\n==== Begin '$MAKE lint' of $base at `date` ====\n" >> $LOGFILE 3919e4fd900SJohn Levon 3929e4fd900SJohn Levon # remove old lint.out 3939e4fd900SJohn Levon rm -f $lintdir/lint.out $lintdir/lint-noise.out 3949e4fd900SJohn Levon if [ -f $lintdir/lint-noise.ref ]; then 3959e4fd900SJohn Levon mv $lintdir/lint-noise.ref ${LINTNOISE}.ref 3969e4fd900SJohn Levon fi 3979e4fd900SJohn Levon 3989e4fd900SJohn Levon rm -f $LINTOUT 3999e4fd900SJohn Levon cd $lintdir 4009e4fd900SJohn Levon # 4019e4fd900SJohn Levon # Remove all .ln files to ensure a full reference file 4029e4fd900SJohn Levon # 4039e4fd900SJohn Levon rm -f Nothing_to_remove \ 4049e4fd900SJohn Levon `find . \( -name SCCS -o -name .hg -o -name .svn -o -name .git \) \ 4059e4fd900SJohn Levon -prune -o -type f -name '*.ln' -print ` 4069e4fd900SJohn Levon 4079e4fd900SJohn Levon /bin/time $MAKE -ek lint 2>&1 | \ 4089e4fd900SJohn Levon tee -a $LINTOUT >> $LOGFILE 4099e4fd900SJohn Levon 4109e4fd900SJohn Levon echo "\n==== '$MAKE lint' of $base ERRORS ====\n" >> $mail_msg_file 4119e4fd900SJohn Levon 4129e4fd900SJohn Levon grep "$MAKE:" $LINTOUT | 4139e4fd900SJohn Levon egrep -v "Ignoring unknown host" | \ 4149e4fd900SJohn Levon tee $TMPDIR/lint_errs >> $mail_msg_file 4159e4fd900SJohn Levon if [[ -s $TMPDIR/lint_errs ]]; then 4169e4fd900SJohn Levon build_extras_ok=n 4179e4fd900SJohn Levon fi 4189e4fd900SJohn Levon 4199e4fd900SJohn Levon echo "\n==== Ended '$MAKE lint' of $base at `date` ====\n" >> $LOGFILE 4209e4fd900SJohn Levon 4219e4fd900SJohn Levon echo "\n==== Elapsed time of '$MAKE lint' of $base ====\n" \ 4229e4fd900SJohn Levon >>$mail_msg_file 4239e4fd900SJohn Levon tail -3 $LINTOUT >>$mail_msg_file 4249e4fd900SJohn Levon 4259e4fd900SJohn Levon rm -f ${LINTNOISE}.ref 4269e4fd900SJohn Levon if [ -f ${LINTNOISE}.out ]; then 4279e4fd900SJohn Levon mv ${LINTNOISE}.out ${LINTNOISE}.ref 4289e4fd900SJohn Levon fi 4299e4fd900SJohn Levon grep : $LINTOUT | \ 4309e4fd900SJohn Levon egrep -v '^(real|user|sys)' | 4319e4fd900SJohn Levon egrep -v '(library construction)' | \ 4329e4fd900SJohn Levon egrep -v ': global crosschecks' | \ 4339e4fd900SJohn Levon egrep -v 'Ignoring unknown host' | \ 4349e4fd900SJohn Levon egrep -v '\.c:$' | \ 4359e4fd900SJohn Levon sort | uniq > ${LINTNOISE}.out 4369e4fd900SJohn Levon if [ ! -f ${LINTNOISE}.ref ]; then 4379e4fd900SJohn Levon cp ${LINTNOISE}.out ${LINTNOISE}.ref 4389e4fd900SJohn Levon fi 4399e4fd900SJohn Levon 4409e4fd900SJohn Levon if [ "$dodiff" != "n" ]; then 4419e4fd900SJohn Levon echo "\n==== lint warnings $base ====\n" \ 4429e4fd900SJohn Levon >>$mail_msg_file 4439e4fd900SJohn Levon # should be none, though there are a few that were filtered out 4449e4fd900SJohn Levon # above 4459e4fd900SJohn Levon egrep -i '(warning|lint):' ${LINTNOISE}.out \ 4469e4fd900SJohn Levon | sort | uniq | tee $TMPDIR/lint_warns >> $mail_msg_file 4479e4fd900SJohn Levon if [[ -s $TMPDIR/lint_warns ]]; then 4489e4fd900SJohn Levon build_extras_ok=n 4499e4fd900SJohn Levon fi 4509e4fd900SJohn Levon echo "\n==== lint noise differences $base ====\n" \ 4519e4fd900SJohn Levon >> $mail_msg_file 4529e4fd900SJohn Levon diff ${LINTNOISE}.ref ${LINTNOISE}.out \ 4539e4fd900SJohn Levon >> $mail_msg_file 4549e4fd900SJohn Levon fi 4559e4fd900SJohn Levon} 4569e4fd900SJohn Levon 4579e4fd900SJohn Levon# 4589e4fd900SJohn Levon# Build and install the onbld tools. 4599e4fd900SJohn Levon# 4609e4fd900SJohn Levon# usage: build_tools DESTROOT 4619e4fd900SJohn Levon# 4629e4fd900SJohn Levon# returns non-zero status if the build was successful. 4639e4fd900SJohn Levon# 4649e4fd900SJohn Levonfunction build_tools { 4659e4fd900SJohn Levon DESTROOT=$1 4669e4fd900SJohn Levon 4679e4fd900SJohn Levon INSTALLOG=install-${MACH} 4689e4fd900SJohn Levon 4699e4fd900SJohn Levon echo "\n==== Building tools at `date` ====\n" \ 4709e4fd900SJohn Levon >> $LOGFILE 4719e4fd900SJohn Levon 4729e4fd900SJohn Levon rm -f ${TOOLS}/${INSTALLOG}.out 4739e4fd900SJohn Levon cd ${TOOLS} 4749e4fd900SJohn Levon /bin/time $MAKE TOOLS_PROTO=${DESTROOT} -e install 2>&1 | \ 4759e4fd900SJohn Levon tee -a ${TOOLS}/${INSTALLOG}.out >> $LOGFILE 4769e4fd900SJohn Levon 4779e4fd900SJohn Levon echo "\n==== Tools build errors ====\n" >> $mail_msg_file 4789e4fd900SJohn Levon 4799e4fd900SJohn Levon egrep ":" ${TOOLS}/${INSTALLOG}.out | 4809e4fd900SJohn Levon egrep -e "(${MAKE}:|[ ]error[: \n])" | \ 4819e4fd900SJohn Levon egrep -v "Ignoring unknown host" | \ 4829e4fd900SJohn Levon egrep -v warning | tee $TMPDIR/tools_errors >> $mail_msg_file 4839e4fd900SJohn Levon 4849e4fd900SJohn Levon if [[ -s $TMPDIR/tools_errors ]]; then 4859e4fd900SJohn Levon return 1 4869e4fd900SJohn Levon fi 4879e4fd900SJohn Levon return 0 4889e4fd900SJohn Levon} 4899e4fd900SJohn Levon 4909e4fd900SJohn Levon# 4919e4fd900SJohn Levon# Set up to use locally installed tools. 4929e4fd900SJohn Levon# 4939e4fd900SJohn Levon# usage: use_tools TOOLSROOT 4949e4fd900SJohn Levon# 4959e4fd900SJohn Levonfunction use_tools { 4969e4fd900SJohn Levon TOOLSROOT=$1 4979e4fd900SJohn Levon 4989e4fd900SJohn Levon # 4999e4fd900SJohn Levon # If we're not building ON workspace, then the TOOLSROOT 5009e4fd900SJohn Levon # settings here are clearly ignored by the workspace 5019e4fd900SJohn Levon # makefiles, prepending nonexistent directories to PATH is 5029e4fd900SJohn Levon # harmless, and we clearly do not wish to override 5039e4fd900SJohn Levon # ONBLD_TOOLS. 5049e4fd900SJohn Levon # 5059e4fd900SJohn Levon # If we're building an ON workspace, then the prepended PATH 5069e4fd900SJohn Levon # elements should supercede the preexisting ONBLD_TOOLS paths, 5079e4fd900SJohn Levon # and we want to override ONBLD_TOOLS to catch the tools that 5089e4fd900SJohn Levon # don't have specific path env vars here. 5099e4fd900SJohn Levon # 5109e4fd900SJohn Levon # So the only conditional behavior is overriding ONBLD_TOOLS, 5119e4fd900SJohn Levon # and we check for "an ON workspace" by looking for 5129e4fd900SJohn Levon # ${TOOLSROOT}/opt/onbld. 5139e4fd900SJohn Levon # 5149e4fd900SJohn Levon 5159e4fd900SJohn Levon STABS=${TOOLSROOT}/opt/onbld/bin/${MACH}/stabs 5169e4fd900SJohn Levon export STABS 5179e4fd900SJohn Levon CTFSTABS=${TOOLSROOT}/opt/onbld/bin/${MACH}/ctfstabs 5189e4fd900SJohn Levon export CTFSTABS 5199e4fd900SJohn Levon GENOFFSETS=${TOOLSROOT}/opt/onbld/bin/genoffsets 5209e4fd900SJohn Levon export GENOFFSETS 5219e4fd900SJohn Levon 5229e4fd900SJohn Levon CTFCONVERT=${TOOLSROOT}/opt/onbld/bin/${MACH}/ctfconvert 5239e4fd900SJohn Levon export CTFCONVERT 5249e4fd900SJohn Levon CTFMERGE=${TOOLSROOT}/opt/onbld/bin/${MACH}/ctfmerge 5259e4fd900SJohn Levon export CTFMERGE 5269e4fd900SJohn Levon 5279e4fd900SJohn Levon if [ "$VERIFY_ELFSIGN" = "y" ]; then 5289e4fd900SJohn Levon ELFSIGN=${TOOLSROOT}/opt/onbld/bin/elfsigncmp 5299e4fd900SJohn Levon else 5309e4fd900SJohn Levon ELFSIGN=${TOOLSROOT}/opt/onbld/bin/${MACH}/elfsign 5319e4fd900SJohn Levon fi 5329e4fd900SJohn Levon export ELFSIGN 5339e4fd900SJohn Levon 5349e4fd900SJohn Levon PATH="${TOOLSROOT}/opt/onbld/bin/${MACH}:${PATH}" 5359e4fd900SJohn Levon PATH="${TOOLSROOT}/opt/onbld/bin:${PATH}" 5369e4fd900SJohn Levon export PATH 5379e4fd900SJohn Levon 5389e4fd900SJohn Levon if [ -d "${TOOLSROOT}/opt/onbld" ]; then 5399e4fd900SJohn Levon ONBLD_TOOLS=${TOOLSROOT}/opt/onbld 5409e4fd900SJohn Levon export ONBLD_TOOLS 5419e4fd900SJohn Levon fi 5429e4fd900SJohn Levon 5439e4fd900SJohn Levon echo "\n==== New environment settings. ====\n" >> $LOGFILE 5449e4fd900SJohn Levon echo "STABS=${STABS}" >> $LOGFILE 5459e4fd900SJohn Levon echo "CTFSTABS=${CTFSTABS}" >> $LOGFILE 5469e4fd900SJohn Levon echo "CTFCONVERT=${CTFCONVERT}" >> $LOGFILE 5479e4fd900SJohn Levon echo "CTFMERGE=${CTFMERGE}" >> $LOGFILE 5489e4fd900SJohn Levon echo "ELFSIGN=${ELFSIGN}" >> $LOGFILE 5499e4fd900SJohn Levon echo "PATH=${PATH}" >> $LOGFILE 5509e4fd900SJohn Levon echo "ONBLD_TOOLS=${ONBLD_TOOLS}" >> $LOGFILE 5519e4fd900SJohn Levon} 5529e4fd900SJohn Levon 5539e4fd900SJohn Levonfunction staffer { 5549e4fd900SJohn Levon if [ $ISUSER -ne 0 ]; then 5559e4fd900SJohn Levon "$@" 5569e4fd900SJohn Levon else 5579e4fd900SJohn Levon arg="\"$1\"" 5589e4fd900SJohn Levon shift 5599e4fd900SJohn Levon for i 5609e4fd900SJohn Levon do 5619e4fd900SJohn Levon arg="$arg \"$i\"" 5629e4fd900SJohn Levon done 5639e4fd900SJohn Levon eval su $STAFFER -c \'$arg\' 5649e4fd900SJohn Levon fi 5659e4fd900SJohn Levon} 5669e4fd900SJohn Levon 5679e4fd900SJohn Levon# 5689e4fd900SJohn Levon# Verify that the closed bins are present 5699e4fd900SJohn Levon# 5709e4fd900SJohn Levonfunction check_closed_bins { 5719e4fd900SJohn Levon if [[ ! -d "$ON_CLOSED_BINS" ]]; then 5729e4fd900SJohn Levon echo "ON_CLOSED_BINS must point to the closed binaries tree." 5739e4fd900SJohn Levon build_ok=n 5749e4fd900SJohn Levon exit 1 5759e4fd900SJohn Levon fi 5769e4fd900SJohn Levon} 5779e4fd900SJohn Levon 5789e4fd900SJohn Levon# 5799e4fd900SJohn Levon# wrapper over wsdiff. 5809e4fd900SJohn Levon# usage: do_wsdiff LABEL OLDPROTO NEWPROTO 5819e4fd900SJohn Levon# 5829e4fd900SJohn Levonfunction do_wsdiff { 5839e4fd900SJohn Levon label=$1 5849e4fd900SJohn Levon oldproto=$2 5859e4fd900SJohn Levon newproto=$3 586bf16a978SMarcel Telka results=$4 5879e4fd900SJohn Levon 5889e4fd900SJohn Levon wsdiff="wsdiff" 5899e4fd900SJohn Levon [ "$t_FLAG" = y ] && wsdiff="wsdiff -t" 5909e4fd900SJohn Levon 5919e4fd900SJohn Levon echo "\n==== Getting object changes since last build at `date`" \ 5929e4fd900SJohn Levon "($label) ====\n" | tee -a $LOGFILE >> $mail_msg_file 593bf16a978SMarcel Telka $wsdiff -s -r ${TMPDIR}/$results $oldproto $newproto 2>&1 | \ 5949e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 5959e4fd900SJohn Levon echo "\n==== Object changes determined at `date` ($label) ====\n" | \ 5969e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 5979e4fd900SJohn Levon} 5989e4fd900SJohn Levon 5999e4fd900SJohn Levon# 6009e4fd900SJohn Levon# Functions for setting build flags (DEBUG/non-DEBUG). Keep them 6019e4fd900SJohn Levon# together. 6029e4fd900SJohn Levon# 6039e4fd900SJohn Levon 6049e4fd900SJohn Levonfunction set_non_debug_build_flags { 6059e4fd900SJohn Levon export RELEASE_BUILD ; RELEASE_BUILD= 6069e4fd900SJohn Levon unset EXTRA_OPTIONS 6079e4fd900SJohn Levon unset EXTRA_CFLAGS 6089e4fd900SJohn Levon} 6099e4fd900SJohn Levon 6109e4fd900SJohn Levonfunction set_debug_build_flags { 6119e4fd900SJohn Levon unset RELEASE_BUILD 6129e4fd900SJohn Levon unset EXTRA_OPTIONS 6139e4fd900SJohn Levon unset EXTRA_CFLAGS 6149e4fd900SJohn Levon} 6159e4fd900SJohn Levon 6169e4fd900SJohn Levon 6179e4fd900SJohn LevonMACH=`uname -p` 6189e4fd900SJohn Levon 6199e4fd900SJohn Levonif [ "$OPTHOME" = "" ]; then 6209e4fd900SJohn Levon OPTHOME=/opt 6219e4fd900SJohn Levon export OPTHOME 6229e4fd900SJohn Levonfi 6239e4fd900SJohn Levon 6249e4fd900SJohn LevonUSAGE='Usage: nightly [-in] [+t] [-V VERS ] <env_file> 6259e4fd900SJohn Levon 6269e4fd900SJohn LevonWhere: 6279e4fd900SJohn Levon -i Fast incremental options (no clobber, lint, check) 6289e4fd900SJohn Levon -n Do not do a bringover 6299e4fd900SJohn Levon +t Use the build tools in $ONBLD_TOOLS/bin 6309e4fd900SJohn Levon -V VERS set the build version string to VERS 6319e4fd900SJohn Levon 6329e4fd900SJohn Levon <env_file> file in Bourne shell syntax that sets and exports 6339e4fd900SJohn Levon variables that configure the operation of this script and many of 6349e4fd900SJohn Levon the scripts this one calls. If <env_file> does not exist, 6359e4fd900SJohn Levon it will be looked for in $OPTHOME/onbld/env. 6369e4fd900SJohn Levon 6379e4fd900SJohn Levonnon-DEBUG is the default build type. Build options can be set in the 6389e4fd900SJohn LevonNIGHTLY_OPTIONS variable in the <env_file> as follows: 6399e4fd900SJohn Levon 6409e4fd900SJohn Levon -A check for ABI differences in .so files 6419e4fd900SJohn Levon -C check for cstyle/hdrchk errors 6429e4fd900SJohn Levon -D do a build with DEBUG on 6439e4fd900SJohn Levon -F do _not_ do a non-DEBUG build 6449e4fd900SJohn Levon -G gate keeper default group of options (-au) 6459e4fd900SJohn Levon -I integration engineer default group of options (-ampu) 646b85ab92fSAndy Fiddaman -L do not run pkglint 6479e4fd900SJohn Levon -M do not run pmodes (safe file permission checker) 6489e4fd900SJohn Levon -N do not run protocmp 6499e4fd900SJohn Levon -R default group of options for building a release (-mp) 6509e4fd900SJohn Levon -U update proto area in the parent 6519e4fd900SJohn Levon -V VERS set the build version string to VERS 6529e4fd900SJohn Levon -f find unreferenced files 6539e4fd900SJohn Levon -i do an incremental build (no "make clobber") 6549e4fd900SJohn Levon -l do "make lint" in $LINTDIRS (default: $SRC y) 6559e4fd900SJohn Levon -m send mail to $MAILTO at end of build 6569e4fd900SJohn Levon -n do not do a bringover 6579e4fd900SJohn Levon -p create packages 6589e4fd900SJohn Levon -r check ELF runtime attributes in the proto area 6599e4fd900SJohn Levon -t build and use the tools in $SRC/tools (default setting) 6609e4fd900SJohn Levon +t Use the build tools in $ONBLD_TOOLS/bin 6619e4fd900SJohn Levon -u update proto_list_$MACH and friends in the parent workspace; 6629e4fd900SJohn Levon when used with -f, also build an unrefmaster.out in the parent 6639e4fd900SJohn Levon -w report on differences between previous and current proto areas 6649e4fd900SJohn Levon' 6659e4fd900SJohn Levon# 6669e4fd900SJohn Levon# A log file will be generated under the name $LOGFILE 6679e4fd900SJohn Levon# for partially completed build and log.`date '+%F'` 6689e4fd900SJohn Levon# in the same directory for fully completed builds. 6699e4fd900SJohn Levon# 6709e4fd900SJohn Levon 6719e4fd900SJohn Levon# default values for low-level FLAGS; G I R are group FLAGS 6729e4fd900SJohn LevonA_FLAG=n 6739e4fd900SJohn LevonC_FLAG=n 6749e4fd900SJohn LevonD_FLAG=n 6759e4fd900SJohn LevonF_FLAG=n 6769e4fd900SJohn Levonf_FLAG=n 6779e4fd900SJohn Levoni_FLAG=n; i_CMD_LINE_FLAG=n 678b85ab92fSAndy FiddamanL_FLAG=n 6799e4fd900SJohn Levonl_FLAG=n 6809e4fd900SJohn LevonM_FLAG=n 6819e4fd900SJohn Levonm_FLAG=n 6829e4fd900SJohn LevonN_FLAG=n 6839e4fd900SJohn Levonn_FLAG=n 6849e4fd900SJohn Levonp_FLAG=n 6859e4fd900SJohn Levonr_FLAG=n 6869e4fd900SJohn Levont_FLAG=y 6879e4fd900SJohn LevonU_FLAG=n 6889e4fd900SJohn Levonu_FLAG=n 6899e4fd900SJohn LevonV_FLAG=n 6909e4fd900SJohn Levonw_FLAG=n 6919e4fd900SJohn LevonW_FLAG=n 6929e4fd900SJohn Levon# 6939e4fd900SJohn Levonbuild_ok=y 6949e4fd900SJohn Levonbuild_extras_ok=y 6959e4fd900SJohn Levon 6969e4fd900SJohn Levon# 6979e4fd900SJohn Levon# examine arguments 6989e4fd900SJohn Levon# 6999e4fd900SJohn Levon 7009e4fd900SJohn LevonOPTIND=1 7019e4fd900SJohn Levonwhile getopts +intV:W FLAG 7029e4fd900SJohn Levondo 7039e4fd900SJohn Levon case $FLAG in 7049e4fd900SJohn Levon i ) i_FLAG=y; i_CMD_LINE_FLAG=y 7059e4fd900SJohn Levon ;; 7069e4fd900SJohn Levon n ) n_FLAG=y 7079e4fd900SJohn Levon ;; 7089e4fd900SJohn Levon +t ) t_FLAG=n 7099e4fd900SJohn Levon ;; 7109e4fd900SJohn Levon V ) V_FLAG=y 7119e4fd900SJohn Levon V_ARG="$OPTARG" 7129e4fd900SJohn Levon ;; 7139e4fd900SJohn Levon W ) W_FLAG=y 7149e4fd900SJohn Levon ;; 7159e4fd900SJohn Levon \? ) echo "$USAGE" 7169e4fd900SJohn Levon exit 1 7179e4fd900SJohn Levon ;; 7189e4fd900SJohn Levon esac 7199e4fd900SJohn Levondone 7209e4fd900SJohn Levon 7219e4fd900SJohn Levon# correct argument count after options 7229e4fd900SJohn Levonshift `expr $OPTIND - 1` 7239e4fd900SJohn Levon 7249e4fd900SJohn Levon# test that the path to the environment-setting file was given 7259e4fd900SJohn Levonif [ $# -ne 1 ]; then 7269e4fd900SJohn Levon echo "$USAGE" 7279e4fd900SJohn Levon exit 1 7289e4fd900SJohn Levonfi 7299e4fd900SJohn Levon 7309e4fd900SJohn Levon# check if user is running nightly as root 7319e4fd900SJohn Levon# ISUSER is set non-zero if an ordinary user runs nightly, or is zero 7329e4fd900SJohn Levon# when root invokes nightly. 7339e4fd900SJohn Levon/usr/bin/id | grep '^uid=0(' >/dev/null 2>&1 7349e4fd900SJohn LevonISUSER=$?; export ISUSER 7359e4fd900SJohn Levon 7369e4fd900SJohn Levon# 7379e4fd900SJohn Levon# force locale to C 7389e4fd900SJohn LevonLANG=C; export LANG 7399e4fd900SJohn LevonLC_ALL=C; export LC_ALL 7409e4fd900SJohn LevonLC_COLLATE=C; export LC_COLLATE 7419e4fd900SJohn LevonLC_CTYPE=C; export LC_CTYPE 7429e4fd900SJohn LevonLC_MESSAGES=C; export LC_MESSAGES 7439e4fd900SJohn LevonLC_MONETARY=C; export LC_MONETARY 7449e4fd900SJohn LevonLC_NUMERIC=C; export LC_NUMERIC 7459e4fd900SJohn LevonLC_TIME=C; export LC_TIME 7469e4fd900SJohn Levon 7479e4fd900SJohn Levon# clear environment variables we know to be bad for the build 7489e4fd900SJohn Levonunset LD_OPTIONS 7499e4fd900SJohn Levonunset LD_AUDIT LD_AUDIT_32 LD_AUDIT_64 7509e4fd900SJohn Levonunset LD_BIND_NOW LD_BIND_NOW_32 LD_BIND_NOW_64 7519e4fd900SJohn Levonunset LD_BREADTH LD_BREADTH_32 LD_BREADTH_64 7529e4fd900SJohn Levonunset LD_CONFIG LD_CONFIG_32 LD_CONFIG_64 7539e4fd900SJohn Levonunset LD_DEBUG LD_DEBUG_32 LD_DEBUG_64 7549e4fd900SJohn Levonunset LD_DEMANGLE LD_DEMANGLE_32 LD_DEMANGLE_64 7559e4fd900SJohn Levonunset LD_FLAGS LD_FLAGS_32 LD_FLAGS_64 7569e4fd900SJohn Levonunset LD_LIBRARY_PATH LD_LIBRARY_PATH_32 LD_LIBRARY_PATH_64 7579e4fd900SJohn Levonunset LD_LOADFLTR LD_LOADFLTR_32 LD_LOADFLTR_64 7589e4fd900SJohn Levonunset LD_NOAUDIT LD_NOAUDIT_32 LD_NOAUDIT_64 7599e4fd900SJohn Levonunset LD_NOAUXFLTR LD_NOAUXFLTR_32 LD_NOAUXFLTR_64 7609e4fd900SJohn Levonunset LD_NOCONFIG LD_NOCONFIG_32 LD_NOCONFIG_64 7619e4fd900SJohn Levonunset LD_NODIRCONFIG LD_NODIRCONFIG_32 LD_NODIRCONFIG_64 7629e4fd900SJohn Levonunset LD_NODIRECT LD_NODIRECT_32 LD_NODIRECT_64 7639e4fd900SJohn Levonunset LD_NOLAZYLOAD LD_NOLAZYLOAD_32 LD_NOLAZYLOAD_64 7649e4fd900SJohn Levonunset LD_NOOBJALTER LD_NOOBJALTER_32 LD_NOOBJALTER_64 7659e4fd900SJohn Levonunset LD_NOVERSION LD_NOVERSION_32 LD_NOVERSION_64 7669e4fd900SJohn Levonunset LD_ORIGIN LD_ORIGIN_32 LD_ORIGIN_64 7679e4fd900SJohn Levonunset LD_PRELOAD LD_PRELOAD_32 LD_PRELOAD_64 7689e4fd900SJohn Levonunset LD_PROFILE LD_PROFILE_32 LD_PROFILE_64 7699e4fd900SJohn Levon 7709e4fd900SJohn Levonunset CONFIG 7719e4fd900SJohn Levonunset GROUP 7729e4fd900SJohn Levonunset OWNER 7739e4fd900SJohn Levonunset REMOTE 7749e4fd900SJohn Levonunset ENV 7759e4fd900SJohn Levonunset ARCH 7769e4fd900SJohn Levonunset CLASSPATH 7779e4fd900SJohn Levonunset NAME 7789e4fd900SJohn Levon 7799e4fd900SJohn Levon# 7809e4fd900SJohn Levon# To get ONBLD_TOOLS from the environment, it must come from the env file. 7819e4fd900SJohn Levon# If it comes interactively, it is generally TOOLS_PROTO, which will be 7829e4fd900SJohn Levon# clobbered before the compiler version checks, which will therefore fail. 7839e4fd900SJohn Levon# 7849e4fd900SJohn Levonunset ONBLD_TOOLS 7859e4fd900SJohn Levon 7869e4fd900SJohn Levon# 7879e4fd900SJohn Levon# Setup environmental variables 7889e4fd900SJohn Levon# 7899e4fd900SJohn Levonif [ -f /etc/nightly.conf ]; then 7909e4fd900SJohn Levon . /etc/nightly.conf 7919e4fd900SJohn Levonfi 7929e4fd900SJohn Levon 7939e4fd900SJohn Levonif [ -f $1 ]; then 7949e4fd900SJohn Levon if [[ $1 = */* ]]; then 7959e4fd900SJohn Levon . $1 7969e4fd900SJohn Levon else 7979e4fd900SJohn Levon . ./$1 7989e4fd900SJohn Levon fi 7999e4fd900SJohn Levonelse 8009e4fd900SJohn Levon if [ -f $OPTHOME/onbld/env/$1 ]; then 8019e4fd900SJohn Levon . $OPTHOME/onbld/env/$1 8029e4fd900SJohn Levon else 8039e4fd900SJohn Levon echo "Cannot find env file as either $1 or $OPTHOME/onbld/env/$1" 8049e4fd900SJohn Levon exit 1 8059e4fd900SJohn Levon fi 8069e4fd900SJohn Levonfi 8079e4fd900SJohn Levon 8089e4fd900SJohn Levon# Check if we have sufficient data to continue... 8099e4fd900SJohn Levon[[ -v CODEMGR_WS ]] || fatal_error "Error: Variable CODEMGR_WS not set." 8109e4fd900SJohn Levonif [[ "${NIGHTLY_OPTIONS}" == ~(F)n ]] ; then 8119e4fd900SJohn Levon # Check if the gate data are valid if we don't do a "bringover" below 8129e4fd900SJohn Levon [[ -d "${CODEMGR_WS}" ]] || \ 8139e4fd900SJohn Levon fatal_error "Error: ${CODEMGR_WS} is not a directory." 8149e4fd900SJohn Levon [[ -f "${CODEMGR_WS}/usr/src/Makefile" ]] || \ 8159e4fd900SJohn Levon fatal_error "Error: ${CODEMGR_WS}/usr/src/Makefile not found." 8169e4fd900SJohn Levonfi 8179e4fd900SJohn Levon 8189e4fd900SJohn Levon# 8199e4fd900SJohn Levon# place ourselves in a new task, respecting BUILD_PROJECT if set. 8209e4fd900SJohn Levon# 8219e4fd900SJohn Levonif [ -z "$BUILD_PROJECT" ]; then 8229e4fd900SJohn Levon /usr/bin/newtask -c $$ 8239e4fd900SJohn Levonelse 8249e4fd900SJohn Levon /usr/bin/newtask -c $$ -p $BUILD_PROJECT 8259e4fd900SJohn Levonfi 8269e4fd900SJohn Levon 8279e4fd900SJohn Levonps -o taskid= -p $$ | read build_taskid 8289e4fd900SJohn Levonps -o project= -p $$ | read build_project 8299e4fd900SJohn Levon 8309e4fd900SJohn Levon# 8319e4fd900SJohn Levon# See if NIGHTLY_OPTIONS is set 8329e4fd900SJohn Levon# 8339e4fd900SJohn Levonif [ "$NIGHTLY_OPTIONS" = "" ]; then 8349e4fd900SJohn Levon NIGHTLY_OPTIONS="-aBm" 8359e4fd900SJohn Levonfi 8369e4fd900SJohn Levon 8379e4fd900SJohn Levon# 8389e4fd900SJohn Levon# If BRINGOVER_WS was not specified, let it default to CLONE_WS 8399e4fd900SJohn Levon# 8409e4fd900SJohn Levonif [ "$BRINGOVER_WS" = "" ]; then 8419e4fd900SJohn Levon BRINGOVER_WS=$CLONE_WS 8429e4fd900SJohn Levonfi 8439e4fd900SJohn Levon 8449e4fd900SJohn Levon# 8459e4fd900SJohn Levon# If BRINGOVER_FILES was not specified, default to usr 8469e4fd900SJohn Levon# 8479e4fd900SJohn Levonif [ "$BRINGOVER_FILES" = "" ]; then 8489e4fd900SJohn Levon BRINGOVER_FILES="usr" 8499e4fd900SJohn Levonfi 8509e4fd900SJohn Levon 8519e4fd900SJohn Levoncheck_closed_bins 8529e4fd900SJohn Levon 8539e4fd900SJohn Levon# 8549e4fd900SJohn Levon# Note: changes to the option letters here should also be applied to the 8559e4fd900SJohn Levon# bldenv script. `d' is listed for backward compatibility. 8569e4fd900SJohn Levon# 8579e4fd900SJohn LevonNIGHTLY_OPTIONS=-${NIGHTLY_OPTIONS#-} 8589e4fd900SJohn LevonOPTIND=1 859b85ab92fSAndy Fiddamanwhile getopts +ABCDdFfGIiLlMmNnpRrtUuwW FLAG $NIGHTLY_OPTIONS 8609e4fd900SJohn Levondo 8619e4fd900SJohn Levon case $FLAG in 8629e4fd900SJohn Levon A ) A_FLAG=y 8639e4fd900SJohn Levon ;; 8649e4fd900SJohn Levon B ) D_FLAG=y 8659e4fd900SJohn Levon ;; # old version of D 8669e4fd900SJohn Levon C ) C_FLAG=y 8679e4fd900SJohn Levon ;; 8689e4fd900SJohn Levon D ) D_FLAG=y 8699e4fd900SJohn Levon ;; 8709e4fd900SJohn Levon F ) F_FLAG=y 8719e4fd900SJohn Levon ;; 8729e4fd900SJohn Levon f ) f_FLAG=y 8739e4fd900SJohn Levon ;; 8749e4fd900SJohn Levon G ) u_FLAG=y 8759e4fd900SJohn Levon ;; 8769e4fd900SJohn Levon I ) m_FLAG=y 8779e4fd900SJohn Levon p_FLAG=y 8789e4fd900SJohn Levon u_FLAG=y 8799e4fd900SJohn Levon ;; 8809e4fd900SJohn Levon i ) i_FLAG=y 8819e4fd900SJohn Levon ;; 882b85ab92fSAndy Fiddaman L ) L_FLAG=y 883b85ab92fSAndy Fiddaman ;; 8849e4fd900SJohn Levon l ) l_FLAG=y 8859e4fd900SJohn Levon ;; 8869e4fd900SJohn Levon M ) M_FLAG=y 8879e4fd900SJohn Levon ;; 8889e4fd900SJohn Levon m ) m_FLAG=y 8899e4fd900SJohn Levon ;; 8909e4fd900SJohn Levon N ) N_FLAG=y 8919e4fd900SJohn Levon ;; 8929e4fd900SJohn Levon n ) n_FLAG=y 8939e4fd900SJohn Levon ;; 8949e4fd900SJohn Levon p ) p_FLAG=y 8959e4fd900SJohn Levon ;; 8969e4fd900SJohn Levon R ) m_FLAG=y 8979e4fd900SJohn Levon p_FLAG=y 8989e4fd900SJohn Levon ;; 8999e4fd900SJohn Levon r ) r_FLAG=y 9009e4fd900SJohn Levon ;; 9019e4fd900SJohn Levon +t ) t_FLAG=n 9029e4fd900SJohn Levon ;; 9039e4fd900SJohn Levon U ) if [ -z "${PARENT_ROOT}" ]; then 9049e4fd900SJohn Levon echo "PARENT_ROOT must be set if the U flag is" \ 9059e4fd900SJohn Levon "present in NIGHTLY_OPTIONS." 9069e4fd900SJohn Levon exit 1 9079e4fd900SJohn Levon fi 9089e4fd900SJohn Levon NIGHTLY_PARENT_ROOT=$PARENT_ROOT 9099e4fd900SJohn Levon if [ -n "${PARENT_TOOLS_ROOT}" ]; then 9109e4fd900SJohn Levon NIGHTLY_PARENT_TOOLS_ROOT=$PARENT_TOOLS_ROOT 9119e4fd900SJohn Levon fi 9129e4fd900SJohn Levon U_FLAG=y 9139e4fd900SJohn Levon ;; 9149e4fd900SJohn Levon u ) u_FLAG=y 9159e4fd900SJohn Levon ;; 9169e4fd900SJohn Levon w ) w_FLAG=y 9179e4fd900SJohn Levon ;; 9189e4fd900SJohn Levon W ) W_FLAG=y 9199e4fd900SJohn Levon ;; 9209e4fd900SJohn Levon \? ) echo "$USAGE" 9219e4fd900SJohn Levon exit 1 9229e4fd900SJohn Levon ;; 9239e4fd900SJohn Levon esac 9249e4fd900SJohn Levondone 9259e4fd900SJohn Levon 9268bae3323SMatt Fiddaman# Skip pkglint if packages aren't being built 9278bae3323SMatt Fiddaman[ $p_FLAG = n ] && L_FLAG=y 9288bae3323SMatt Fiddaman 9299e4fd900SJohn Levonif [ $ISUSER -ne 0 ]; then 9309e4fd900SJohn Levon # Set default value for STAFFER, if needed. 9319e4fd900SJohn Levon if [ -z "$STAFFER" -o "$STAFFER" = "nobody" ]; then 9329e4fd900SJohn Levon STAFFER=`/usr/xpg4/bin/id -un` 9339e4fd900SJohn Levon export STAFFER 9349e4fd900SJohn Levon fi 9359e4fd900SJohn Levonfi 9369e4fd900SJohn Levon 9379e4fd900SJohn Levonif [ -z "$MAILTO" -o "$MAILTO" = "nobody" ]; then 9389e4fd900SJohn Levon MAILTO=$STAFFER 9399e4fd900SJohn Levon export MAILTO 9409e4fd900SJohn Levonfi 9419e4fd900SJohn Levon 9429e4fd900SJohn LevonPATH="$OPTHOME/onbld/bin:$OPTHOME/onbld/bin/${MACH}:/usr/ccs/bin" 9439e4fd900SJohn LevonPATH="$PATH:$OPTHOME/SUNWspro/bin:/usr/bin:/usr/sbin:/usr/ucb" 9449e4fd900SJohn LevonPATH="$PATH:/usr/openwin/bin:/usr/sfw/bin:/opt/sfw/bin:." 9459e4fd900SJohn Levonexport PATH 9469e4fd900SJohn Levon 9479e4fd900SJohn Levon# roots of source trees, both relative to $SRC and absolute. 9489e4fd900SJohn Levonrelsrcdirs="." 9499e4fd900SJohn Levonabssrcdirs="$SRC" 9509e4fd900SJohn Levon 9519e4fd900SJohn LevonPROTOCMPTERSE="protocmp.terse -gu" 9529e4fd900SJohn LevonPOUND_SIGN="#" 9539e4fd900SJohn Levon# have we set RELEASE_DATE in our env file? 9549e4fd900SJohn Levonif [ -z "$RELEASE_DATE" ]; then 9559e4fd900SJohn Levon RELEASE_DATE=$(LC_ALL=C date +"%B %Y") 9569e4fd900SJohn Levonfi 9579e4fd900SJohn LevonBUILD_DATE=$(LC_ALL=C date +%Y-%b-%d) 9589e4fd900SJohn LevonBASEWSDIR=$(basename $CODEMGR_WS) 9599e4fd900SJohn LevonDEV_CM="\"@(#)SunOS Internal Development: $LOGNAME $BUILD_DATE [$BASEWSDIR]\"" 9609e4fd900SJohn Levon 9619e4fd900SJohn Levon# we export POUND_SIGN, RELEASE_DATE and DEV_CM to speed up the build process 9629e4fd900SJohn Levon# by avoiding repeated shell invocations to evaluate Makefile.master 9639e4fd900SJohn Levon# definitions. 9649e4fd900SJohn Levonexport POUND_SIGN RELEASE_DATE DEV_CM 9659e4fd900SJohn Levon 9669e4fd900SJohn Levonmaketype="distributed" 9679e4fd900SJohn Levonif [[ -z "$MAKE" ]]; then 9689e4fd900SJohn Levon MAKE=dmake 9699e4fd900SJohn Levonelif [[ ! -x "$MAKE" ]]; then 9709e4fd900SJohn Levon echo "\$MAKE is set to garbage in the environment" 9719e4fd900SJohn Levon exit 1 9729e4fd900SJohn Levonfi 9739e4fd900SJohn Levonexport PATH 9749e4fd900SJohn Levonexport MAKE 9759e4fd900SJohn Levon 9769e4fd900SJohn Levonif [ "${SUNWSPRO}" != "" ]; then 9779e4fd900SJohn Levon PATH="${SUNWSPRO}/bin:$PATH" 9789e4fd900SJohn Levon export PATH 9799e4fd900SJohn Levonfi 9809e4fd900SJohn Levon 9819e4fd900SJohn Levonhostname=$(uname -n) 9829e4fd900SJohn Levonif [[ $DMAKE_MAX_JOBS != +([0-9]) || $DMAKE_MAX_JOBS -eq 0 ]] 9839e4fd900SJohn Levonthen 9849e4fd900SJohn Levon maxjobs= 9859e4fd900SJohn Levon if [[ -f $HOME/.make.machines ]] 9869e4fd900SJohn Levon then 9879e4fd900SJohn Levon # Note: there is a hard tab and space character in the []s 9889e4fd900SJohn Levon # below. 9899e4fd900SJohn Levon egrep -i "^[ ]*$hostname[ \.]" \ 9909e4fd900SJohn Levon $HOME/.make.machines | read host jobs 9919e4fd900SJohn Levon maxjobs=${jobs##*=} 9929e4fd900SJohn Levon fi 9939e4fd900SJohn Levon 9949e4fd900SJohn Levon if [[ $maxjobs != +([0-9]) || $maxjobs -eq 0 ]] 9959e4fd900SJohn Levon then 9969e4fd900SJohn Levon # default 9979e4fd900SJohn Levon maxjobs=4 9989e4fd900SJohn Levon fi 9999e4fd900SJohn Levon 10009e4fd900SJohn Levon export DMAKE_MAX_JOBS=$maxjobs 10019e4fd900SJohn Levonfi 10029e4fd900SJohn Levon 10039e4fd900SJohn LevonDMAKE_MODE=parallel; 10049e4fd900SJohn Levonexport DMAKE_MODE 10059e4fd900SJohn Levon 10069e4fd900SJohn Levonif [ -z "${ROOT}" ]; then 10079e4fd900SJohn Levon echo "ROOT must be set." 10089e4fd900SJohn Levon exit 1 10099e4fd900SJohn Levonfi 10109e4fd900SJohn Levon 10119e4fd900SJohn Levon# 10129e4fd900SJohn Levon# if -V flag was given, reset VERSION to V_ARG 10139e4fd900SJohn Levon# 10149e4fd900SJohn Levonif [ "$V_FLAG" = "y" ]; then 10159e4fd900SJohn Levon VERSION=$V_ARG 10169e4fd900SJohn Levonfi 10179e4fd900SJohn Levon 10189e4fd900SJohn LevonTMPDIR="/tmp/nightly.tmpdir.$$" 10199e4fd900SJohn Levonexport TMPDIR 10209e4fd900SJohn Levonrm -rf ${TMPDIR} 10219e4fd900SJohn Levonmkdir -p $TMPDIR || exit 1 10229e4fd900SJohn Levonchmod 777 $TMPDIR 10239e4fd900SJohn Levon 10249e4fd900SJohn Levon# 10259e4fd900SJohn Levon# Keep elfsign's use of pkcs11_softtoken from looking in the user home 10269e4fd900SJohn Levon# directory, which doesn't always work. Needed until all build machines 10279e4fd900SJohn Levon# have the fix for 6271754 10289e4fd900SJohn Levon# 10299e4fd900SJohn LevonSOFTTOKEN_DIR=$TMPDIR 10309e4fd900SJohn Levonexport SOFTTOKEN_DIR 10319e4fd900SJohn Levon 10329e4fd900SJohn Levon# 10339e4fd900SJohn Levon# Tools should only be built non-DEBUG. Keep track of the tools proto 10349e4fd900SJohn Levon# area path relative to $TOOLS, because the latter changes in an 10359e4fd900SJohn Levon# export build. 10369e4fd900SJohn Levon# 10379e4fd900SJohn Levon# TOOLS_PROTO is included below for builds other than usr/src/tools 10389e4fd900SJohn Levon# that look for this location. For usr/src/tools, this will be 10399e4fd900SJohn Levon# overridden on the $MAKE command line in build_tools(). 10409e4fd900SJohn Levon# 10419e4fd900SJohn LevonTOOLS=${SRC}/tools 10429e4fd900SJohn LevonTOOLS_PROTO_REL=proto/root_${MACH}-nd 10439e4fd900SJohn LevonTOOLS_PROTO=${TOOLS}/${TOOLS_PROTO_REL}; export TOOLS_PROTO 10449e4fd900SJohn Levon 10459e4fd900SJohn Levonunset CFLAGS LD_LIBRARY_PATH LDFLAGS 10469e4fd900SJohn Levon 10479e4fd900SJohn Levon# create directories that are automatically removed if the nightly script 10489e4fd900SJohn Levon# fails to start correctly 10499e4fd900SJohn Levonfunction newdir { 10509e4fd900SJohn Levon dir=$1 10519e4fd900SJohn Levon toadd= 10529e4fd900SJohn Levon while [ ! -d $dir ]; do 10539e4fd900SJohn Levon toadd="$dir $toadd" 10549e4fd900SJohn Levon dir=`dirname $dir` 10559e4fd900SJohn Levon done 10569e4fd900SJohn Levon torm= 10579e4fd900SJohn Levon newlist= 10589e4fd900SJohn Levon for dir in $toadd; do 10599e4fd900SJohn Levon if staffer mkdir $dir; then 10609e4fd900SJohn Levon newlist="$ISUSER $dir $newlist" 10619e4fd900SJohn Levon torm="$dir $torm" 10629e4fd900SJohn Levon else 10639e4fd900SJohn Levon [ -z "$torm" ] || staffer rmdir $torm 10649e4fd900SJohn Levon return 1 10659e4fd900SJohn Levon fi 10669e4fd900SJohn Levon done 10679e4fd900SJohn Levon newdirlist="$newlist $newdirlist" 10689e4fd900SJohn Levon return 0 10699e4fd900SJohn Levon} 10709e4fd900SJohn Levonnewdirlist= 10719e4fd900SJohn Levon 10729e4fd900SJohn Levon[ -d $CODEMGR_WS ] || newdir $CODEMGR_WS || exit 1 10739e4fd900SJohn Levon 10749e4fd900SJohn Levon# since this script assumes the build is from full source, it nullifies 10759e4fd900SJohn Levon# variables likely to have been set by a "ws" script; nullification 10769e4fd900SJohn Levon# confines the search space for headers and libraries to the proto area 10779e4fd900SJohn Levon# built from this immediate source. 10789e4fd900SJohn LevonENVLDLIBS1= 10799e4fd900SJohn LevonENVLDLIBS2= 10809e4fd900SJohn LevonENVLDLIBS3= 10819e4fd900SJohn LevonENVCPPFLAGS1= 10829e4fd900SJohn LevonENVCPPFLAGS2= 10839e4fd900SJohn LevonENVCPPFLAGS3= 10849e4fd900SJohn LevonENVCPPFLAGS4= 10859e4fd900SJohn LevonPARENT_ROOT= 10869e4fd900SJohn Levon 10879e4fd900SJohn Levonexport ENVLDLIBS3 ENVCPPFLAGS1 ENVCPPFLAGS2 ENVCPPFLAGS3 ENVCPPFLAGS4 \ 10889e4fd900SJohn Levon ENVLDLIBS1 ENVLDLIBS2 PARENT_ROOT 10899e4fd900SJohn Levon 10909e4fd900SJohn LevonPKGARCHIVE_ORIG=$PKGARCHIVE 10919e4fd900SJohn Levon 10929e4fd900SJohn Levon# 10939e4fd900SJohn Levon# Juggle the logs and optionally send mail on completion. 10949e4fd900SJohn Levon# 10959e4fd900SJohn Levon 10969e4fd900SJohn Levonfunction logshuffle { 10979e4fd900SJohn Levon LLOG="$ATLOG/log.`date '+%F.%H:%M'`" 10989e4fd900SJohn Levon if [ -f $LLOG -o -d $LLOG ]; then 10999e4fd900SJohn Levon LLOG=$LLOG.$$ 11009e4fd900SJohn Levon fi 11019e4fd900SJohn Levon mkdir $LLOG 11029e4fd900SJohn Levon export LLOG 11039e4fd900SJohn Levon 11049e4fd900SJohn Levon if [ "$build_ok" = "y" ]; then 11059e4fd900SJohn Levon mv $ATLOG/proto_list_${MACH} $LLOG 11069e4fd900SJohn Levon 11079e4fd900SJohn Levon if [ -f $ATLOG/proto_list_tools_${MACH} ]; then 11089e4fd900SJohn Levon mv $ATLOG/proto_list_tools_${MACH} $LLOG 11099e4fd900SJohn Levon fi 11109e4fd900SJohn Levon 11119e4fd900SJohn Levon if [ -f $TMPDIR/wsdiff.results ]; then 11129e4fd900SJohn Levon mv $TMPDIR/wsdiff.results $LLOG 11139e4fd900SJohn Levon fi 11149e4fd900SJohn Levon 11159e4fd900SJohn Levon if [ -f $TMPDIR/wsdiff-nd.results ]; then 11169e4fd900SJohn Levon mv $TMPDIR/wsdiff-nd.results $LLOG 11179e4fd900SJohn Levon fi 1118bf16a978SMarcel Telka 1119bf16a978SMarcel Telka if [ -f $TMPDIR/wsdiff-tools.results ]; then 1120bf16a978SMarcel Telka mv $TMPDIR/wsdiff-tools.results $LLOG 1121bf16a978SMarcel Telka fi 11229e4fd900SJohn Levon fi 11239e4fd900SJohn Levon 11249e4fd900SJohn Levon # 11259e4fd900SJohn Levon # Now that we're about to send mail, it's time to check the noise 11269e4fd900SJohn Levon # file. In the event that an error occurs beyond this point, it will 11279e4fd900SJohn Levon # be recorded in the nightly.log file, but nowhere else. This would 11289e4fd900SJohn Levon # include only errors that cause the copying of the noise log to fail 11299e4fd900SJohn Levon # or the mail itself not to be sent. 11309e4fd900SJohn Levon # 11319e4fd900SJohn Levon 11329e4fd900SJohn Levon exec >>$LOGFILE 2>&1 11339e4fd900SJohn Levon if [ -s $build_noise_file ]; then 11349e4fd900SJohn Levon echo "\n==== Nightly build noise ====\n" | 11359e4fd900SJohn Levon tee -a $LOGFILE >>$mail_msg_file 11369e4fd900SJohn Levon cat $build_noise_file >>$LOGFILE 11379e4fd900SJohn Levon cat $build_noise_file >>$mail_msg_file 11389e4fd900SJohn Levon echo | tee -a $LOGFILE >>$mail_msg_file 11399e4fd900SJohn Levon fi 11409e4fd900SJohn Levon rm -f $build_noise_file 11419e4fd900SJohn Levon 11429e4fd900SJohn Levon case "$build_ok" in 11439e4fd900SJohn Levon y) 11449e4fd900SJohn Levon state=Completed 11459e4fd900SJohn Levon ;; 11469e4fd900SJohn Levon i) 11479e4fd900SJohn Levon state=Interrupted 11489e4fd900SJohn Levon ;; 11499e4fd900SJohn Levon *) 11509e4fd900SJohn Levon state=Failed 11519e4fd900SJohn Levon ;; 11529e4fd900SJohn Levon esac 11539e4fd900SJohn Levon 11549e4fd900SJohn Levon if [[ $state != "Interrupted" && $build_extras_ok != "y" ]]; then 11559e4fd900SJohn Levon state=Failed 11569e4fd900SJohn Levon fi 11579e4fd900SJohn Levon 11589e4fd900SJohn Levon NIGHTLY_STATUS=$state 11599e4fd900SJohn Levon export NIGHTLY_STATUS 11609e4fd900SJohn Levon 11619e4fd900SJohn Levon run_hook POST_NIGHTLY $state 11629e4fd900SJohn Levon run_hook SYS_POST_NIGHTLY $state 11639e4fd900SJohn Levon 11649e4fd900SJohn Levon # 11659e4fd900SJohn Levon # mailx(1) sets From: based on the -r flag 11669e4fd900SJohn Levon # if it is given. 11679e4fd900SJohn Levon # 11689e4fd900SJohn Levon mailx_r= 11699e4fd900SJohn Levon if [[ -n "${MAILFROM}" ]]; then 11709e4fd900SJohn Levon mailx_r="-r ${MAILFROM}" 11719e4fd900SJohn Levon fi 11729e4fd900SJohn Levon 11739e4fd900SJohn Levon cat $build_time_file $build_environ_file $mail_msg_file \ 11749e4fd900SJohn Levon > ${LLOG}/mail_msg 11759e4fd900SJohn Levon if [ "$m_FLAG" = "y" ]; then 11769e4fd900SJohn Levon cat ${LLOG}/mail_msg | /usr/bin/mailx ${mailx_r} -s \ 11779e4fd900SJohn Levon "Nightly ${MACH} Build of `basename ${CODEMGR_WS}` ${state}." \ 11789e4fd900SJohn Levon ${MAILTO} 11799e4fd900SJohn Levon fi 11809e4fd900SJohn Levon 11819e4fd900SJohn Levon if [ "$u_FLAG" = "y" -a "$build_ok" = "y" ]; then 11829e4fd900SJohn Levon staffer cp ${LLOG}/mail_msg $PARENT_WS/usr/src/mail_msg-${MACH} 11839e4fd900SJohn Levon staffer cp $LOGFILE $PARENT_WS/usr/src/nightly-${MACH}.log 11849e4fd900SJohn Levon fi 11859e4fd900SJohn Levon 11869e4fd900SJohn Levon mv $LOGFILE $LLOG 11879e4fd900SJohn Levon} 11889e4fd900SJohn Levon 11899e4fd900SJohn Levon# 11909e4fd900SJohn Levon# Remove the locks and temporary files on any exit 11919e4fd900SJohn Levon# 11929e4fd900SJohn Levonfunction cleanup { 11939e4fd900SJohn Levon logshuffle 11949e4fd900SJohn Levon 11959e4fd900SJohn Levon [ -z "$lockfile" ] || staffer rm -f $lockfile 11969e4fd900SJohn Levon [ -z "$atloglockfile" ] || rm -f $atloglockfile 11979e4fd900SJohn Levon [ -z "$ulockfile" ] || staffer rm -f $ulockfile 11989e4fd900SJohn Levon [ -z "$Ulockfile" ] || rm -f $Ulockfile 11999e4fd900SJohn Levon 12009e4fd900SJohn Levon set -- $newdirlist 12019e4fd900SJohn Levon while [ $# -gt 0 ]; do 12029e4fd900SJohn Levon ISUSER=$1 staffer rmdir $2 12039e4fd900SJohn Levon shift; shift 12049e4fd900SJohn Levon done 12059e4fd900SJohn Levon rm -rf $TMPDIR 12069e4fd900SJohn Levon} 12079e4fd900SJohn Levon 12089e4fd900SJohn Levonfunction cleanup_signal { 12099e4fd900SJohn Levon build_ok=i 12109e4fd900SJohn Levon # this will trigger cleanup(), above. 12119e4fd900SJohn Levon exit 1 12129e4fd900SJohn Levon} 12139e4fd900SJohn Levon 12149e4fd900SJohn Levontrap cleanup 0 12159e4fd900SJohn Levontrap cleanup_signal 1 2 3 15 12169e4fd900SJohn Levon 12179e4fd900SJohn Levon# 12189e4fd900SJohn Levon# Generic lock file processing -- make sure that the lock file doesn't 12199e4fd900SJohn Levon# exist. If it does, it should name the build host and PID. If it 12209e4fd900SJohn Levon# doesn't, then make sure we can create it. Clean up locks that are 12219e4fd900SJohn Levon# known to be stale (assumes host name is unique among build systems 12229e4fd900SJohn Levon# for the workspace). 12239e4fd900SJohn Levon# 12249e4fd900SJohn Levonfunction create_lock { 12259e4fd900SJohn Levon lockf=$1 12269e4fd900SJohn Levon lockvar=$2 12279e4fd900SJohn Levon 12289e4fd900SJohn Levon ldir=`dirname $lockf` 12299e4fd900SJohn Levon [ -d $ldir ] || newdir $ldir || exit 1 12309e4fd900SJohn Levon eval $lockvar=$lockf 12319e4fd900SJohn Levon 12329e4fd900SJohn Levon while ! staffer ln -s $hostname.$STAFFER.$$ $lockf 2> /dev/null; do 12339e4fd900SJohn Levon basews=`basename $CODEMGR_WS` 12349e4fd900SJohn Levon ls -l $lockf | nawk '{print $NF}' | IFS=. read host user pid 12359e4fd900SJohn Levon if [ "$host" != "$hostname" ]; then 12369e4fd900SJohn Levon echo "$MACH build of $basews apparently" \ 12379e4fd900SJohn Levon "already started by $user on $host as $pid." 12389e4fd900SJohn Levon exit 1 12399e4fd900SJohn Levon elif kill -s 0 $pid 2>/dev/null; then 12409e4fd900SJohn Levon echo "$MACH build of $basews already started" \ 12419e4fd900SJohn Levon "by $user as $pid." 12429e4fd900SJohn Levon exit 1 12439e4fd900SJohn Levon else 12449e4fd900SJohn Levon # stale lock; clear it out and try again 12459e4fd900SJohn Levon rm -f $lockf 12469e4fd900SJohn Levon fi 12479e4fd900SJohn Levon done 12489e4fd900SJohn Levon} 12499e4fd900SJohn Levon 12509e4fd900SJohn Levon# 12519e4fd900SJohn Levon# Return the list of interesting proto areas, depending on the current 12529e4fd900SJohn Levon# options. 12539e4fd900SJohn Levon# 12549e4fd900SJohn Levonfunction allprotos { 12559e4fd900SJohn Levon typeset roots="$ROOT" 12569e4fd900SJohn Levon 12579e4fd900SJohn Levon if [[ "$F_FLAG" = n && "$MULTI_PROTO" = yes ]]; then 12589e4fd900SJohn Levon roots="$roots $ROOT-nd" 12599e4fd900SJohn Levon fi 12609e4fd900SJohn Levon 12619e4fd900SJohn Levon echo $roots 12629e4fd900SJohn Levon} 12639e4fd900SJohn Levon 12649e4fd900SJohn Levon# Ensure no other instance of this script is running on this host. 12659e4fd900SJohn Levon# LOCKNAME can be set in <env_file>, and is by default, but is not 12669e4fd900SJohn Levon# required due to the use of $ATLOG below. 12679e4fd900SJohn Levonif [ -n "$LOCKNAME" ]; then 12689e4fd900SJohn Levon create_lock /tmp/$LOCKNAME "lockfile" 12699e4fd900SJohn Levonfi 12709e4fd900SJohn Levon# 12719e4fd900SJohn Levon# Create from one, two, or three other locks: 12729e4fd900SJohn Levon# $ATLOG/nightly.lock 12739e4fd900SJohn Levon# - protects against multiple builds in same workspace 12749e4fd900SJohn Levon# $PARENT_WS/usr/src/nightly.$MACH.lock 12759e4fd900SJohn Levon# - protects against multiple 'u' copy-backs 12769e4fd900SJohn Levon# $NIGHTLY_PARENT_ROOT/nightly.lock 12779e4fd900SJohn Levon# - protects against multiple 'U' copy-backs 12789e4fd900SJohn Levon# 12799e4fd900SJohn Levon# Overriding ISUSER to 1 causes the lock to be created as root if the 12809e4fd900SJohn Levon# script is run as root. The default is to create it as $STAFFER. 12819e4fd900SJohn LevonISUSER=1 create_lock $ATLOG/nightly.lock "atloglockfile" 12829e4fd900SJohn Levonif [ "$u_FLAG" = "y" ]; then 12839e4fd900SJohn Levon create_lock $PARENT_WS/usr/src/nightly.$MACH.lock "ulockfile" 12849e4fd900SJohn Levonfi 12859e4fd900SJohn Levonif [ "$U_FLAG" = "y" ]; then 12869e4fd900SJohn Levon # NIGHTLY_PARENT_ROOT is written as root if script invoked as root. 12879e4fd900SJohn Levon ISUSER=1 create_lock $NIGHTLY_PARENT_ROOT/nightly.lock "Ulockfile" 12889e4fd900SJohn Levonfi 12899e4fd900SJohn Levon 12909e4fd900SJohn Levon# Locks have been taken, so we're doing a build and we're committed to 12919e4fd900SJohn Levon# the directories we may have created so far. 12929e4fd900SJohn Levonnewdirlist= 12939e4fd900SJohn Levon 12949e4fd900SJohn Levon# 12959e4fd900SJohn Levon# Create mail_msg_file 12969e4fd900SJohn Levon# 12979e4fd900SJohn Levonmail_msg_file="${TMPDIR}/mail_msg" 12989e4fd900SJohn Levontouch $mail_msg_file 12999e4fd900SJohn Levonbuild_time_file="${TMPDIR}/build_time" 13009e4fd900SJohn Levonbuild_environ_file="${TMPDIR}/build_environ" 13019e4fd900SJohn Levontouch $build_environ_file 13029e4fd900SJohn Levon# 13039e4fd900SJohn Levon# Move old LOGFILE aside 13049e4fd900SJohn Levon# ATLOG directory already made by 'create_lock' above 13059e4fd900SJohn Levon# 13069e4fd900SJohn Levonif [ -f $LOGFILE ]; then 13079e4fd900SJohn Levon mv -f $LOGFILE ${LOGFILE}- 13089e4fd900SJohn Levonfi 13099e4fd900SJohn Levon# 13109e4fd900SJohn Levon# Build OsNet source 13119e4fd900SJohn Levon# 13129e4fd900SJohn LevonSTART_DATE=`date` 13139e4fd900SJohn LevonSECONDS=0 13149e4fd900SJohn Levonecho "\n==== Nightly $maketype build started: $START_DATE ====" \ 13159e4fd900SJohn Levon | tee -a $LOGFILE > $build_time_file 13169e4fd900SJohn Levon 13179e4fd900SJohn Levonecho "\nBuild project: $build_project\nBuild taskid: $build_taskid" | \ 13189e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 13199e4fd900SJohn Levon 13209e4fd900SJohn Levon# make sure we log only to the nightly build file 13219e4fd900SJohn Levonbuild_noise_file="${TMPDIR}/build_noise" 13229e4fd900SJohn Levonexec </dev/null >$build_noise_file 2>&1 13239e4fd900SJohn Levon 13249e4fd900SJohn Levonrun_hook SYS_PRE_NIGHTLY 13259e4fd900SJohn Levonrun_hook PRE_NIGHTLY 13269e4fd900SJohn Levon 13279e4fd900SJohn Levonecho "\n==== list of environment variables ====\n" >> $LOGFILE 13289e4fd900SJohn Levonenv >> $LOGFILE 13299e4fd900SJohn Levon 13309e4fd900SJohn Levonecho "\n==== Nightly argument issues ====\n" | tee -a $mail_msg_file >> $LOGFILE 13319e4fd900SJohn Levon 13329e4fd900SJohn Levonif [ "$N_FLAG" = "y" ]; then 13339e4fd900SJohn Levon if [ "$p_FLAG" = "y" ]; then 13349e4fd900SJohn Levon cat <<EOF | tee -a $mail_msg_file >> $LOGFILE 13359e4fd900SJohn LevonWARNING: the p option (create packages) is set, but so is the N option (do 13369e4fd900SJohn Levon not run protocmp); this is dangerous; you should unset the N option 13379e4fd900SJohn LevonEOF 13389e4fd900SJohn Levon else 13399e4fd900SJohn Levon cat <<EOF | tee -a $mail_msg_file >> $LOGFILE 13409e4fd900SJohn LevonWarning: the N option (do not run protocmp) is set; it probably shouldn't be 13419e4fd900SJohn LevonEOF 13429e4fd900SJohn Levon fi 13439e4fd900SJohn Levon echo "" | tee -a $mail_msg_file >> $LOGFILE 13449e4fd900SJohn Levonfi 13459e4fd900SJohn Levon 13469e4fd900SJohn Levonif [ "$D_FLAG" = "n" -a "$l_FLAG" = "y" ]; then 13479e4fd900SJohn Levon # 13489e4fd900SJohn Levon # In the past we just complained but went ahead with the lint 13499e4fd900SJohn Levon # pass, even though the proto area was built non-DEBUG. It's 13509e4fd900SJohn Levon # unlikely that non-DEBUG headers will make a difference, but 13519e4fd900SJohn Levon # rather than assuming it's a safe combination, force the user 13529e4fd900SJohn Levon # to specify a DEBUG build. 13539e4fd900SJohn Levon # 13549e4fd900SJohn Levon echo "WARNING: DEBUG build not requested; disabling lint.\n" \ 13559e4fd900SJohn Levon | tee -a $mail_msg_file >> $LOGFILE 13569e4fd900SJohn Levon l_FLAG=n 13579e4fd900SJohn Levonfi 13589e4fd900SJohn Levon 13599e4fd900SJohn Levonif [ "$f_FLAG" = "y" ]; then 13609e4fd900SJohn Levon if [ "$i_FLAG" = "y" ]; then 13619e4fd900SJohn Levon echo "WARNING: the -f flag cannot be used during incremental" \ 13629e4fd900SJohn Levon "builds; ignoring -f\n" | tee -a $mail_msg_file >> $LOGFILE 13639e4fd900SJohn Levon f_FLAG=n 13649e4fd900SJohn Levon fi 13659e4fd900SJohn Levon if [ "${l_FLAG}${p_FLAG}" != "yy" ]; then 13669e4fd900SJohn Levon echo "WARNING: the -f flag requires -l, and -p;" \ 13679e4fd900SJohn Levon "ignoring -f\n" | tee -a $mail_msg_file >> $LOGFILE 13689e4fd900SJohn Levon f_FLAG=n 13699e4fd900SJohn Levon fi 13709e4fd900SJohn Levonfi 13719e4fd900SJohn Levon 13729e4fd900SJohn Levonif [ "$w_FLAG" = "y" -a ! -d $ROOT ]; then 13739e4fd900SJohn Levon echo "WARNING: -w specified, but $ROOT does not exist;" \ 13749e4fd900SJohn Levon "ignoring -w\n" | tee -a $mail_msg_file >> $LOGFILE 13759e4fd900SJohn Levon w_FLAG=n 13769e4fd900SJohn Levonfi 13779e4fd900SJohn Levon 13789e4fd900SJohn Levonif [ "$t_FLAG" = "n" ]; then 13799e4fd900SJohn Levon # 13809e4fd900SJohn Levon # We're not doing a tools build, so make sure elfsign(1) is 13819e4fd900SJohn Levon # new enough to safely sign non-crypto binaries. We test 13829e4fd900SJohn Levon # debugging output from elfsign to detect the old version. 13839e4fd900SJohn Levon # 13849e4fd900SJohn Levon newelfsigntest=`SUNW_CRYPTO_DEBUG=stderr /usr/bin/elfsign verify \ 13859e4fd900SJohn Levon -e /usr/lib/security/pkcs11_softtoken.so.1 2>&1 \ 13869e4fd900SJohn Levon | egrep algorithmOID` 13879e4fd900SJohn Levon if [ -z "$newelfsigntest" ]; then 13889e4fd900SJohn Levon echo "WARNING: /usr/bin/elfsign out of date;" \ 13899e4fd900SJohn Levon "will only sign crypto modules\n" | \ 13909e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 13919e4fd900SJohn Levon export ELFSIGN_OBJECT=true 13929e4fd900SJohn Levon elif [ "$VERIFY_ELFSIGN" = "y" ]; then 13939e4fd900SJohn Levon echo "WARNING: VERIFY_ELFSIGN=y requires" \ 13949e4fd900SJohn Levon "the -t flag; ignoring VERIFY_ELFSIGN\n" | \ 13959e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 13969e4fd900SJohn Levon fi 13979e4fd900SJohn Levonfi 13989e4fd900SJohn Levon 13999e4fd900SJohn Levoncase $MULTI_PROTO in 14009e4fd900SJohn Levonyes|no) ;; 14019e4fd900SJohn Levon*) 14029e4fd900SJohn Levon echo "WARNING: MULTI_PROTO is \"$MULTI_PROTO\"; " \ 14039e4fd900SJohn Levon "should be \"yes\" or \"no\"." | tee -a $mail_msg_file >> $LOGFILE 14049e4fd900SJohn Levon echo "Setting MULTI_PROTO to \"no\".\n" | \ 14059e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 14069e4fd900SJohn Levon export MULTI_PROTO=no 14079e4fd900SJohn Levon ;; 14089e4fd900SJohn Levonesac 14099e4fd900SJohn Levon 14109e4fd900SJohn Levonecho "\n==== Build version ====\n" | tee -a $mail_msg_file >> $LOGFILE 14119e4fd900SJohn Levonecho $VERSION | tee -a $mail_msg_file >> $LOGFILE 14129e4fd900SJohn Levon 14139e4fd900SJohn Levon# Save the current proto area if we're comparing against the last build 14149e4fd900SJohn Levonif [ "$w_FLAG" = "y" -a -d "$ROOT" ]; then 14159e4fd900SJohn Levon if [ -d "$ROOT.prev" ]; then 14169e4fd900SJohn Levon rm -rf $ROOT.prev 14179e4fd900SJohn Levon fi 14189e4fd900SJohn Levon mv $ROOT $ROOT.prev 14199e4fd900SJohn Levonfi 14209e4fd900SJohn Levon 14219e4fd900SJohn Levon# Same for non-DEBUG proto area 14229e4fd900SJohn Levonif [ "$w_FLAG" = "y" -a "$MULTI_PROTO" = yes -a -d "$ROOT-nd" ]; then 14239e4fd900SJohn Levon if [ -d "$ROOT-nd.prev" ]; then 14249e4fd900SJohn Levon rm -rf $ROOT-nd.prev 14259e4fd900SJohn Levon fi 14269e4fd900SJohn Levon mv $ROOT-nd $ROOT-nd.prev 14279e4fd900SJohn Levonfi 14289e4fd900SJohn Levon 1429bf16a978SMarcel Telka# Same for tools proto area 1430bf16a978SMarcel Telkaif [ "$w_FLAG" = "y" -a "$t_FLAG" == "y" -a -d "$TOOLS_PROTO" ]; then 1431bf16a978SMarcel Telka if [ -d "$TOOLS_PROTO.prev" ]; then 1432bf16a978SMarcel Telka rm -rf $TOOLS_PROTO.prev 1433bf16a978SMarcel Telka fi 1434bf16a978SMarcel Telka mv $TOOLS_PROTO $TOOLS_PROTO.prev 1435bf16a978SMarcel Telkafi 1436bf16a978SMarcel Telka 14379e4fd900SJohn Levon# 14389e4fd900SJohn Levon# Echo the SCM type of the parent workspace, this can't just be which_scm 14399e4fd900SJohn Levon# as that does not know how to identify various network repositories. 14409e4fd900SJohn Levon# 14419e4fd900SJohn Levonfunction parent_wstype { 14429e4fd900SJohn Levon typeset scm_type junk 14439e4fd900SJohn Levon 14449e4fd900SJohn Levon CODEMGR_WS="$BRINGOVER_WS" "$WHICH_SCM" 2>/dev/null \ 14459e4fd900SJohn Levon | read scm_type junk 14469e4fd900SJohn Levon if [[ -z "$scm_type" || "$scm_type" == unknown ]]; then 14479e4fd900SJohn Levon # Probe BRINGOVER_WS to determine its type 14489e4fd900SJohn Levon if [[ $BRINGOVER_WS == ssh://* ]]; then 14499e4fd900SJohn Levon scm_type="mercurial" 14509e4fd900SJohn Levon elif [[ $BRINGOVER_WS == http://* ]] && \ 14519e4fd900SJohn Levon wget -q -O- --save-headers "$BRINGOVER_WS/?cmd=heads" | \ 14529e4fd900SJohn Levon egrep -s "application/mercurial" 2> /dev/null; then 14539e4fd900SJohn Levon scm_type="mercurial" 14549e4fd900SJohn Levon else 14559e4fd900SJohn Levon scm_type="none" 14569e4fd900SJohn Levon fi 14579e4fd900SJohn Levon fi 14589e4fd900SJohn Levon 14599e4fd900SJohn Levon # fold both unsupported and unrecognized results into "none" 14609e4fd900SJohn Levon case "$scm_type" in 14619e4fd900SJohn Levon mercurial) 14629e4fd900SJohn Levon ;; 14639e4fd900SJohn Levon *) scm_type=none 14649e4fd900SJohn Levon ;; 14659e4fd900SJohn Levon esac 14669e4fd900SJohn Levon 14679e4fd900SJohn Levon echo $scm_type 14689e4fd900SJohn Levon} 14699e4fd900SJohn Levon 14709e4fd900SJohn Levon# Echo the SCM types of $CODEMGR_WS and $BRINGOVER_WS 14719e4fd900SJohn Levonfunction child_wstype { 14729e4fd900SJohn Levon typeset scm_type junk 14739e4fd900SJohn Levon 14749e4fd900SJohn Levon # Probe CODEMGR_WS to determine its type 14759e4fd900SJohn Levon if [[ -d $CODEMGR_WS ]]; then 14769e4fd900SJohn Levon $WHICH_SCM | read scm_type junk || exit 1 14779e4fd900SJohn Levon fi 14789e4fd900SJohn Levon 14799e4fd900SJohn Levon case "$scm_type" in 14809e4fd900SJohn Levon none|git|mercurial) 14819e4fd900SJohn Levon ;; 14829e4fd900SJohn Levon *) scm_type=none 14839e4fd900SJohn Levon ;; 14849e4fd900SJohn Levon esac 14859e4fd900SJohn Levon 14869e4fd900SJohn Levon echo $scm_type 14879e4fd900SJohn Levon} 14889e4fd900SJohn Levon 14899e4fd900SJohn LevonSCM_TYPE=$(child_wstype) 14909e4fd900SJohn Levon 14919e4fd900SJohn Levon# 14929e4fd900SJohn Levon# Decide whether to clobber 14939e4fd900SJohn Levon# 14949e4fd900SJohn Levonif [ "$i_FLAG" = "n" -a -d "$SRC" ]; then 14959e4fd900SJohn Levon echo "\n==== Make clobber at `date` ====\n" >> $LOGFILE 14969e4fd900SJohn Levon 14979e4fd900SJohn Levon cd $SRC 14989e4fd900SJohn Levon # remove old clobber file 14999e4fd900SJohn Levon rm -f $SRC/clobber.out 15009e4fd900SJohn Levon rm -f $SRC/clobber-${MACH}.out 15019e4fd900SJohn Levon 15029e4fd900SJohn Levon # Remove all .make.state* files, just in case we are restarting 15039e4fd900SJohn Levon # the build after having interrupted a previous 'make clobber'. 15049e4fd900SJohn Levon find . \( -name SCCS -o -name .hg -o -name .svn -o -name .git \ 15059e4fd900SJohn Levon -o -name 'interfaces.*' \) -prune \ 15069e4fd900SJohn Levon -o -name '.make.*' -print | xargs rm -f 15079e4fd900SJohn Levon 15089e4fd900SJohn Levon $MAKE -ek clobber 2>&1 | tee -a $SRC/clobber-${MACH}.out >> $LOGFILE 15099e4fd900SJohn Levon echo "\n==== Make clobber ERRORS ====\n" >> $mail_msg_file 15109e4fd900SJohn Levon grep "$MAKE:" $SRC/clobber-${MACH}.out | 15119e4fd900SJohn Levon egrep -v "Ignoring unknown host" | \ 15129e4fd900SJohn Levon tee $TMPDIR/clobber_errs >> $mail_msg_file 15139e4fd900SJohn Levon 15149e4fd900SJohn Levon if [[ -s $TMPDIR/clobber_errs ]]; then 15159e4fd900SJohn Levon build_extras_ok=n 15169e4fd900SJohn Levon fi 15179e4fd900SJohn Levon 15189e4fd900SJohn Levon if [[ "$t_FLAG" = "y" ]]; then 15199e4fd900SJohn Levon echo "\n==== Make tools clobber at `date` ====\n" >> $LOGFILE 15209e4fd900SJohn Levon cd ${TOOLS} 15219e4fd900SJohn Levon rm -f ${TOOLS}/clobber-${MACH}.out 15229e4fd900SJohn Levon $MAKE TOOLS_PROTO=$TOOLS_PROTO -ek clobber 2>&1 | \ 15239e4fd900SJohn Levon tee -a ${TOOLS}/clobber-${MACH}.out >> $LOGFILE 15249e4fd900SJohn Levon echo "\n==== Make tools clobber ERRORS ====\n" \ 15259e4fd900SJohn Levon >> $mail_msg_file 15269e4fd900SJohn Levon grep "$MAKE:" ${TOOLS}/clobber-${MACH}.out \ 15279e4fd900SJohn Levon >> $mail_msg_file 15289e4fd900SJohn Levon if (( $? == 0 )); then 15299e4fd900SJohn Levon build_extras_ok=n 15309e4fd900SJohn Levon fi 15319e4fd900SJohn Levon rm -rf ${TOOLS_PROTO} 15329e4fd900SJohn Levon mkdir -p ${TOOLS_PROTO} 15339e4fd900SJohn Levon fi 15349e4fd900SJohn Levon 15359e4fd900SJohn Levon typeset roots=$(allprotos) 15369e4fd900SJohn Levon echo "\n\nClearing $roots" >> "$LOGFILE" 15379e4fd900SJohn Levon rm -rf $roots 15389e4fd900SJohn Levon 15399e4fd900SJohn Levon # Get back to a clean workspace as much as possible to catch 15409e4fd900SJohn Levon # problems that only occur on fresh workspaces. 15419e4fd900SJohn Levon # Remove all .make.state* files, libraries, and .o's that may 15429e4fd900SJohn Levon # have been omitted from clobber. A couple of libraries are 15439e4fd900SJohn Levon # under source code control, so leave them alone. 15449e4fd900SJohn Levon # We should probably blow away temporary directories too. 15459e4fd900SJohn Levon cd $SRC 15469e4fd900SJohn Levon find $relsrcdirs \( -name SCCS -o -name .hg -o -name .svn \ 1547*5c0be14bSMarcel Telka -o -name .git -o -name 'interfaces.*' \ 1548*5c0be14bSMarcel Telka -o -path $relsrcdirs/tools/proto \) -prune -o \ 15499e4fd900SJohn Levon \( -name '.make.*' -o -name 'lib*.a' -o -name 'lib*.so*' -o \ 15509e4fd900SJohn Levon -name '*.o' \) -print | \ 15519e4fd900SJohn Levon grep -v 'tools/ctf/dwarf/.*/libdwarf' | xargs rm -f 15529e4fd900SJohn Levonelse 15539e4fd900SJohn Levon echo "\n==== No clobber at `date` ====\n" >> $LOGFILE 15549e4fd900SJohn Levonfi 15559e4fd900SJohn Levon 15569e4fd900SJohn Levontype bringover_mercurial > /dev/null 2>&1 || function bringover_mercurial { 15579e4fd900SJohn Levon typeset -x PATH=$PATH 15589e4fd900SJohn Levon 15599e4fd900SJohn Levon # If the repository doesn't exist yet, then we want to populate it. 15609e4fd900SJohn Levon if [[ ! -d $CODEMGR_WS/.hg ]]; then 15619e4fd900SJohn Levon staffer hg init $CODEMGR_WS 15629e4fd900SJohn Levon staffer echo "[paths]" > $CODEMGR_WS/.hg/hgrc 15639e4fd900SJohn Levon staffer echo "default=$BRINGOVER_WS" >> $CODEMGR_WS/.hg/hgrc 15649e4fd900SJohn Levon touch $TMPDIR/new_repository 15659e4fd900SJohn Levon fi 15669e4fd900SJohn Levon 15679e4fd900SJohn Levon typeset -x HGMERGE="/bin/false" 15689e4fd900SJohn Levon 15699e4fd900SJohn Levon # 15709e4fd900SJohn Levon # If the user has changes, regardless of whether those changes are 15719e4fd900SJohn Levon # committed, and regardless of whether those changes conflict, then 15729e4fd900SJohn Levon # we'll attempt to merge them either implicitly (uncommitted) or 15739e4fd900SJohn Levon # explicitly (committed). 15749e4fd900SJohn Levon # 15759e4fd900SJohn Levon # These are the messages we'll use to help clarify mercurial output 15769e4fd900SJohn Levon # in those cases. 15779e4fd900SJohn Levon # 15789e4fd900SJohn Levon typeset mergefailmsg="\ 15799e4fd900SJohn Levon***\n\ 15809e4fd900SJohn Levon*** nightly was unable to automatically merge your changes. You should\n\ 15819e4fd900SJohn Levon*** redo the full merge manually, following the steps outlined by mercurial\n\ 15829e4fd900SJohn Levon*** above, then restart nightly.\n\ 15839e4fd900SJohn Levon***\n" 15849e4fd900SJohn Levon typeset mergepassmsg="\ 15859e4fd900SJohn Levon***\n\ 15869e4fd900SJohn Levon*** nightly successfully merged your changes. This means that your working\n\ 15879e4fd900SJohn Levon*** directory has been updated, but those changes are not yet committed.\n\ 15889e4fd900SJohn Levon*** After nightly completes, you should validate the results of the merge,\n\ 15899e4fd900SJohn Levon*** then use hg commit manually.\n\ 15909e4fd900SJohn Levon***\n" 15919e4fd900SJohn Levon 15929e4fd900SJohn Levon # 15939e4fd900SJohn Levon # For each repository in turn: 15949e4fd900SJohn Levon # 15959e4fd900SJohn Levon # 1. Do the pull. If this fails, dump the output and bail out. 15969e4fd900SJohn Levon # 15979e4fd900SJohn Levon # 2. If the pull resulted in an extra head, do an explicit merge. 15989e4fd900SJohn Levon # If this fails, dump the output and bail out. 15999e4fd900SJohn Levon # 16009e4fd900SJohn Levon # Because we can't rely on Mercurial to exit with a failure code 16019e4fd900SJohn Levon # when a merge fails (Mercurial issue #186), we must grep the 16029e4fd900SJohn Levon # output of pull/merge to check for attempted and/or failed merges. 16039e4fd900SJohn Levon # 16049e4fd900SJohn Levon # 3. If a merge failed, set the message and fail the bringover. 16059e4fd900SJohn Levon # 16069e4fd900SJohn Levon # 4. Otherwise, if a merge succeeded, set the message 16079e4fd900SJohn Levon # 16089e4fd900SJohn Levon # 5. Dump the output, and any message from step 3 or 4. 16099e4fd900SJohn Levon # 16109e4fd900SJohn Levon 16119e4fd900SJohn Levon typeset HG_SOURCE=$BRINGOVER_WS 16129e4fd900SJohn Levon if [ ! -f $TMPDIR/new_repository ]; then 16139e4fd900SJohn Levon HG_SOURCE=$TMPDIR/open_bundle.hg 16149e4fd900SJohn Levon staffer hg --cwd $CODEMGR_WS incoming --bundle $HG_SOURCE \ 16159e4fd900SJohn Levon -v $BRINGOVER_WS > $TMPDIR/incoming_open.out 16169e4fd900SJohn Levon 16179e4fd900SJohn Levon # 16189e4fd900SJohn Levon # If there are no incoming changesets, then incoming will 16199e4fd900SJohn Levon # fail, and there will be no bundle file. Reset the source, 16209e4fd900SJohn Levon # to allow the remaining logic to complete with no false 16219e4fd900SJohn Levon # negatives. (Unlike incoming, pull will return success 16229e4fd900SJohn Levon # for the no-change case.) 16239e4fd900SJohn Levon # 16249e4fd900SJohn Levon if (( $? != 0 )); then 16259e4fd900SJohn Levon HG_SOURCE=$BRINGOVER_WS 16269e4fd900SJohn Levon fi 16279e4fd900SJohn Levon fi 16289e4fd900SJohn Levon 16299e4fd900SJohn Levon staffer hg --cwd $CODEMGR_WS pull -u $HG_SOURCE \ 16309e4fd900SJohn Levon > $TMPDIR/pull_open.out 2>&1 16319e4fd900SJohn Levon if (( $? != 0 )); then 16329e4fd900SJohn Levon printf "%s: pull failed as follows:\n\n" "$CODEMGR_WS" 16339e4fd900SJohn Levon cat $TMPDIR/pull_open.out 16349e4fd900SJohn Levon if grep "^merging.*failed" $TMPDIR/pull_open.out > /dev/null 2>&1; then 16359e4fd900SJohn Levon printf "$mergefailmsg" 16369e4fd900SJohn Levon fi 16379e4fd900SJohn Levon touch $TMPDIR/bringover_failed 16389e4fd900SJohn Levon return 16399e4fd900SJohn Levon fi 16409e4fd900SJohn Levon 16419e4fd900SJohn Levon if grep "not updating" $TMPDIR/pull_open.out > /dev/null 2>&1; then 16429e4fd900SJohn Levon staffer hg --cwd $CODEMGR_WS merge \ 16439e4fd900SJohn Levon >> $TMPDIR/pull_open.out 2>&1 16449e4fd900SJohn Levon if (( $? != 0 )); then 16459e4fd900SJohn Levon printf "%s: merge failed as follows:\n\n" \ 16469e4fd900SJohn Levon "$CODEMGR_WS" 16479e4fd900SJohn Levon cat $TMPDIR/pull_open.out 16489e4fd900SJohn Levon if grep "^merging.*failed" $TMPDIR/pull_open.out \ 16499e4fd900SJohn Levon > /dev/null 2>&1; then 16509e4fd900SJohn Levon printf "$mergefailmsg" 16519e4fd900SJohn Levon fi 16529e4fd900SJohn Levon touch $TMPDIR/bringover_failed 16539e4fd900SJohn Levon return 16549e4fd900SJohn Levon fi 16559e4fd900SJohn Levon fi 16569e4fd900SJohn Levon 16579e4fd900SJohn Levon printf "updated %s with the following results:\n" "$CODEMGR_WS" 16589e4fd900SJohn Levon cat $TMPDIR/pull_open.out 16599e4fd900SJohn Levon if grep "^merging" $TMPDIR/pull_open.out >/dev/null 2>&1; then 16609e4fd900SJohn Levon printf "$mergepassmsg" 16619e4fd900SJohn Levon fi 16629e4fd900SJohn Levon printf "\n" 16639e4fd900SJohn Levon 16649e4fd900SJohn Levon # 16659e4fd900SJohn Levon # Per-changeset output is neither useful nor manageable for a 16669e4fd900SJohn Levon # newly-created repository. 16679e4fd900SJohn Levon # 16689e4fd900SJohn Levon if [ -f $TMPDIR/new_repository ]; then 16699e4fd900SJohn Levon return 16709e4fd900SJohn Levon fi 16719e4fd900SJohn Levon 16729e4fd900SJohn Levon printf "\nadded the following changesets to open repository:\n" 16739e4fd900SJohn Levon cat $TMPDIR/incoming_open.out 16749e4fd900SJohn Levon} 16759e4fd900SJohn Levon 16769e4fd900SJohn Levontype bringover_none > /dev/null 2>&1 || function bringover_none { 16779e4fd900SJohn Levon echo "Couldn't figure out what kind of SCM to use for $BRINGOVER_WS." 16789e4fd900SJohn Levon touch $TMPDIR/bringover_failed 16799e4fd900SJohn Levon} 16809e4fd900SJohn Levon 16819e4fd900SJohn Levon# 16829e4fd900SJohn Levon# Decide whether to bringover to the codemgr workspace 16839e4fd900SJohn Levon# 16849e4fd900SJohn Levonif [ "$n_FLAG" = "n" ]; then 16859e4fd900SJohn Levon PARENT_SCM_TYPE=$(parent_wstype) 16869e4fd900SJohn Levon 16879e4fd900SJohn Levon if [[ $SCM_TYPE != none && $SCM_TYPE != $PARENT_SCM_TYPE ]]; then 16889e4fd900SJohn Levon echo "cannot bringover from $PARENT_SCM_TYPE to $SCM_TYPE, " \ 16899e4fd900SJohn Levon "quitting at `date`." | tee -a $mail_msg_file >> $LOGFILE 16909e4fd900SJohn Levon exit 1 16919e4fd900SJohn Levon fi 16929e4fd900SJohn Levon 16939e4fd900SJohn Levon run_hook PRE_BRINGOVER 16949e4fd900SJohn Levon 16959e4fd900SJohn Levon echo "\n==== bringover to $CODEMGR_WS at `date` ====\n" >> $LOGFILE 16969e4fd900SJohn Levon echo "\n==== BRINGOVER LOG ====\n" >> $mail_msg_file 16979e4fd900SJohn Levon 16989e4fd900SJohn Levon eval "bringover_${PARENT_SCM_TYPE}" 2>&1 | 16999e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 17009e4fd900SJohn Levon 17019e4fd900SJohn Levon if [ -f $TMPDIR/bringover_failed ]; then 17029e4fd900SJohn Levon rm -f $TMPDIR/bringover_failed 17039e4fd900SJohn Levon build_ok=n 17049e4fd900SJohn Levon echo "trouble with bringover, quitting at `date`." | 17059e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 17069e4fd900SJohn Levon exit 1 17079e4fd900SJohn Levon fi 17089e4fd900SJohn Levon 17099e4fd900SJohn Levon # 17109e4fd900SJohn Levon # It's possible that we used the bringover above to create 17119e4fd900SJohn Levon # $CODEMGR_WS. If so, then SCM_TYPE was previously "none," 17129e4fd900SJohn Levon # but should now be the same as $BRINGOVER_WS. 17139e4fd900SJohn Levon # 17149e4fd900SJohn Levon [[ $SCM_TYPE = none ]] && SCM_TYPE=$PARENT_SCM_TYPE 17159e4fd900SJohn Levon 17169e4fd900SJohn Levon run_hook POST_BRINGOVER 17179e4fd900SJohn Levon 17189e4fd900SJohn Levon check_closed_bins 17199e4fd900SJohn Levon 17209e4fd900SJohn Levonelse 17219e4fd900SJohn Levon echo "\n==== No bringover to $CODEMGR_WS ====\n" >> $LOGFILE 17229e4fd900SJohn Levonfi 17239e4fd900SJohn Levon 17249e4fd900SJohn Levon# Safeguards 17259e4fd900SJohn Levon[[ -v CODEMGR_WS ]] || fatal_error "Error: Variable CODEMGR_WS not set." 17269e4fd900SJohn Levon[[ -d "${CODEMGR_WS}" ]] || fatal_error "Error: ${CODEMGR_WS} is not a directory." 17279e4fd900SJohn Levon[[ -f "${CODEMGR_WS}/usr/src/Makefile" ]] || fatal_error "Error: ${CODEMGR_WS}/usr/src/Makefile not found." 17289e4fd900SJohn Levon 17299e4fd900SJohn Levonecho "\n==== Build environment ====\n" | tee -a $build_environ_file >> $LOGFILE 17309e4fd900SJohn Levon 17319e4fd900SJohn Levon# System 17329e4fd900SJohn Levonwhence uname | tee -a $build_environ_file >> $LOGFILE 17339e4fd900SJohn Levonuname -a 2>&1 | tee -a $build_environ_file >> $LOGFILE 17349e4fd900SJohn Levonecho | tee -a $build_environ_file >> $LOGFILE 17359e4fd900SJohn Levon 17369e4fd900SJohn Levon# make 17379e4fd900SJohn Levonwhence $MAKE | tee -a $build_environ_file >> $LOGFILE 17389e4fd900SJohn Levon$MAKE -v | tee -a $build_environ_file >> $LOGFILE 17399e4fd900SJohn Levonecho "number of concurrent jobs = $DMAKE_MAX_JOBS" | 17409e4fd900SJohn Levon tee -a $build_environ_file >> $LOGFILE 17419e4fd900SJohn Levon 17429e4fd900SJohn Levon# 17439e4fd900SJohn Levon# Report the compiler versions. 17449e4fd900SJohn Levon# 17459e4fd900SJohn Levon 17469e4fd900SJohn Levonif [[ ! -f $SRC/Makefile ]]; then 17479e4fd900SJohn Levon build_ok=n 17489e4fd900SJohn Levon echo "\nUnable to find \"Makefile\" in $SRC." | \ 17499e4fd900SJohn Levon tee -a $build_environ_file >> $LOGFILE 17509e4fd900SJohn Levon exit 1 17519e4fd900SJohn Levonfi 17529e4fd900SJohn Levon 17539e4fd900SJohn Levon( cd $SRC 17549e4fd900SJohn Levon for target in cc-version cc64-version java-version; do 17559e4fd900SJohn Levon echo 17569e4fd900SJohn Levon # 17579e4fd900SJohn Levon # Put statefile somewhere we know we can write to rather than trip 17589e4fd900SJohn Levon # over a read-only $srcroot. 17599e4fd900SJohn Levon # 17609e4fd900SJohn Levon rm -f $TMPDIR/make-state 17619e4fd900SJohn Levon export SRC 17629e4fd900SJohn Levon if $MAKE -K $TMPDIR/make-state -e $target 2>/dev/null; then 17639e4fd900SJohn Levon continue 17649e4fd900SJohn Levon fi 17659e4fd900SJohn Levon touch $TMPDIR/nocompiler 17669e4fd900SJohn Levon done 17679e4fd900SJohn Levon echo 17689e4fd900SJohn Levon) | tee -a $build_environ_file >> $LOGFILE 17699e4fd900SJohn Levon 17709e4fd900SJohn Levonif [ -f $TMPDIR/nocompiler ]; then 17719e4fd900SJohn Levon rm -f $TMPDIR/nocompiler 17729e4fd900SJohn Levon build_ok=n 17739e4fd900SJohn Levon echo "Aborting due to missing compiler." | 17749e4fd900SJohn Levon tee -a $build_environ_file >> $LOGFILE 17759e4fd900SJohn Levon exit 1 17769e4fd900SJohn Levonfi 17779e4fd900SJohn Levon 17789e4fd900SJohn Levon# as 17799e4fd900SJohn Levonwhence as | tee -a $build_environ_file >> $LOGFILE 17809e4fd900SJohn Levonas -V 2>&1 | head -1 | tee -a $build_environ_file >> $LOGFILE 17819e4fd900SJohn Levonecho | tee -a $build_environ_file >> $LOGFILE 17829e4fd900SJohn Levon 17839e4fd900SJohn Levon# Check that we're running a capable link-editor 17849e4fd900SJohn Levonwhence ld | tee -a $build_environ_file >> $LOGFILE 17859e4fd900SJohn LevonLDVER=`ld -V 2>&1` 17869e4fd900SJohn Levonecho $LDVER | tee -a $build_environ_file >> $LOGFILE 17879e4fd900SJohn LevonLDVER=`echo $LDVER | sed -e "s/.*-1\.\([0-9]*\).*/\1/"` 17889e4fd900SJohn Levonif [ `expr $LDVER \< 422` -eq 1 ]; then 17899e4fd900SJohn Levon echo "The link-editor needs to be at version 422 or higher to build" | \ 17909e4fd900SJohn Levon tee -a $build_environ_file >> $LOGFILE 17919e4fd900SJohn Levon echo "the latest stuff. Hope your build works." | \ 17929e4fd900SJohn Levon tee -a $build_environ_file >> $LOGFILE 17939e4fd900SJohn Levonfi 17949e4fd900SJohn Levon 17959e4fd900SJohn Levon# 17969e4fd900SJohn Levon# Build and use the workspace's tools if requested 17979e4fd900SJohn Levon# 17989e4fd900SJohn Levonif [[ "$t_FLAG" = "y" ]]; then 17999e4fd900SJohn Levon set_non_debug_build_flags 18009e4fd900SJohn Levon 18019e4fd900SJohn Levon build_tools ${TOOLS_PROTO} 18029e4fd900SJohn Levon if (( $? != 0 )); then 18039e4fd900SJohn Levon build_ok=n 18049e4fd900SJohn Levon else 18059e4fd900SJohn Levon use_tools $TOOLS_PROTO 18069e4fd900SJohn Levon fi 18079e4fd900SJohn Levonfi 18089e4fd900SJohn Levon 18099e4fd900SJohn Levon# timestamp the start of the normal build; the findunref tool uses it. 18109e4fd900SJohn Levontouch $SRC/.build.tstamp 18119e4fd900SJohn Levon 18129e4fd900SJohn Levonnormal_build 18139e4fd900SJohn Levon 18149e4fd900SJohn LevonORIG_SRC=$SRC 18159e4fd900SJohn LevonBINARCHIVE=${CODEMGR_WS}/bin-${MACH}.cpio.Z 18169e4fd900SJohn Levon 18179e4fd900SJohn Levon 18189e4fd900SJohn Levon# 18199e4fd900SJohn Levon# There are several checks that need to look at the proto area, but 18209e4fd900SJohn Levon# they only need to look at one, and they don't care whether it's 18219e4fd900SJohn Levon# DEBUG or non-DEBUG. 18229e4fd900SJohn Levon# 18239e4fd900SJohn Levonif [[ "$MULTI_PROTO" = yes && "$D_FLAG" = n ]]; then 18249e4fd900SJohn Levon checkroot=$ROOT-nd 18259e4fd900SJohn Levonelse 18269e4fd900SJohn Levon checkroot=$ROOT 18279e4fd900SJohn Levonfi 18289e4fd900SJohn Levon 18299e4fd900SJohn Levonif [ "$build_ok" = "y" ]; then 18309e4fd900SJohn Levon echo "\n==== Creating protolist system file at `date` ====" \ 18319e4fd900SJohn Levon >> $LOGFILE 18329e4fd900SJohn Levon protolist $checkroot > $ATLOG/proto_list_${MACH} 18339e4fd900SJohn Levon echo "==== protolist system file created at `date` ====\n" \ 18349e4fd900SJohn Levon >> $LOGFILE 18359e4fd900SJohn Levon 18369e4fd900SJohn Levon if [ "$N_FLAG" != "y" ]; then 18379e4fd900SJohn Levon 18389e4fd900SJohn Levon E1= 18399e4fd900SJohn Levon f1= 18409e4fd900SJohn Levon for f in $f1; do 18419e4fd900SJohn Levon if [ -f "$f" ]; then 18429e4fd900SJohn Levon E1="$E1 -e $f" 18439e4fd900SJohn Levon fi 18449e4fd900SJohn Levon done 18459e4fd900SJohn Levon 18469e4fd900SJohn Levon E2= 18479e4fd900SJohn Levon f2= 18489e4fd900SJohn Levon if [ -d "$SRC/pkg" ]; then 18499e4fd900SJohn Levon f2="$f2 exceptions/packaging" 18509e4fd900SJohn Levon fi 18519e4fd900SJohn Levon 18529e4fd900SJohn Levon for f in $f2; do 18539e4fd900SJohn Levon if [ -f "$f" ]; then 18549e4fd900SJohn Levon E2="$E2 -e $f" 18559e4fd900SJohn Levon fi 18569e4fd900SJohn Levon done 18579e4fd900SJohn Levon fi 18589e4fd900SJohn Levon 18599e4fd900SJohn Levon if [ "$N_FLAG" != "y" -a -d $SRC/pkg ]; then 18609e4fd900SJohn Levon echo "\n==== Validating manifests against proto area ====\n" \ 18619e4fd900SJohn Levon >> $mail_msg_file 18629e4fd900SJohn Levon ( cd $SRC/pkg ; $MAKE -e protocmp ROOT="$checkroot" ) | \ 18639e4fd900SJohn Levon tee $TMPDIR/protocmp_noise >> $mail_msg_file 18649e4fd900SJohn Levon if [[ -s $TMPDIR/protocmp_noise ]]; then 18659e4fd900SJohn Levon build_extras_ok=n 18669e4fd900SJohn Levon fi 18679e4fd900SJohn Levon fi 18689e4fd900SJohn Levon 18699e4fd900SJohn Levon if [ "$N_FLAG" != "y" -a -f "$REF_PROTO_LIST" ]; then 18709e4fd900SJohn Levon echo "\n==== Impact on proto area ====\n" >> $mail_msg_file 18719e4fd900SJohn Levon if [ -n "$E2" ]; then 18729e4fd900SJohn Levon ELIST=$E2 18739e4fd900SJohn Levon else 18749e4fd900SJohn Levon ELIST=$E1 18759e4fd900SJohn Levon fi 18769e4fd900SJohn Levon $PROTOCMPTERSE \ 18779e4fd900SJohn Levon "Files in yesterday's proto area, but not today's:" \ 18789e4fd900SJohn Levon "Files in today's proto area, but not yesterday's:" \ 18799e4fd900SJohn Levon "Files that changed between yesterday and today:" \ 18809e4fd900SJohn Levon ${ELIST} \ 18819e4fd900SJohn Levon -d $REF_PROTO_LIST \ 18829e4fd900SJohn Levon $ATLOG/proto_list_${MACH} \ 18839e4fd900SJohn Levon >> $mail_msg_file 18849e4fd900SJohn Levon fi 18859e4fd900SJohn Levonfi 18869e4fd900SJohn Levon 18879e4fd900SJohn Levonif [[ "$u_FLAG" == "y" && "$build_ok" == "y" && \ 18889e4fd900SJohn Levon "$build_extras_ok" == "y" ]]; then 18899e4fd900SJohn Levon staffer cp $ATLOG/proto_list_${MACH} \ 18909e4fd900SJohn Levon $PARENT_WS/usr/src/proto_list_${MACH} 18919e4fd900SJohn Levonfi 18929e4fd900SJohn Levon 18939e4fd900SJohn Levon# Update parent proto area if necessary. This is done now 18949e4fd900SJohn Levon# so that the proto area has either DEBUG or non-DEBUG kernels. 18959e4fd900SJohn Levon# Note that this clears out the lock file, so we can dispense with 18969e4fd900SJohn Levon# the variable now. 18979e4fd900SJohn Levonif [ "$U_FLAG" = "y" -a "$build_ok" = "y" ]; then 18989e4fd900SJohn Levon echo "\n==== Copying proto area to $NIGHTLY_PARENT_ROOT ====\n" | \ 18999e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 19009e4fd900SJohn Levon rm -rf $NIGHTLY_PARENT_ROOT/* 19019e4fd900SJohn Levon unset Ulockfile 19029e4fd900SJohn Levon mkdir -p $NIGHTLY_PARENT_ROOT 19039e4fd900SJohn Levon if [[ "$MULTI_PROTO" = no || "$D_FLAG" = y ]]; then 19049e4fd900SJohn Levon ( cd $ROOT; tar cf - . | 19059e4fd900SJohn Levon ( cd $NIGHTLY_PARENT_ROOT; umask 0; tar xpf - ) ) 2>&1 | 19069e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 19079e4fd900SJohn Levon fi 19089e4fd900SJohn Levon if [[ "$MULTI_PROTO" = yes && "$F_FLAG" = n ]]; then 19099e4fd900SJohn Levon rm -rf $NIGHTLY_PARENT_ROOT-nd/* 19109e4fd900SJohn Levon mkdir -p $NIGHTLY_PARENT_ROOT-nd 19119e4fd900SJohn Levon cd $ROOT-nd 19129e4fd900SJohn Levon ( tar cf - . | 19139e4fd900SJohn Levon ( cd $NIGHTLY_PARENT_ROOT-nd; umask 0; tar xpf - ) ) 2>&1 | 19149e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 19159e4fd900SJohn Levon fi 19169e4fd900SJohn Levon if [ -n "${NIGHTLY_PARENT_TOOLS_ROOT}" ]; then 19179e4fd900SJohn Levon echo "\n==== Copying tools proto area to $NIGHTLY_PARENT_TOOLS_ROOT ====\n" | \ 19189e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 19199e4fd900SJohn Levon rm -rf $NIGHTLY_PARENT_TOOLS_ROOT/* 19209e4fd900SJohn Levon mkdir -p $NIGHTLY_PARENT_TOOLS_ROOT 19219e4fd900SJohn Levon if [[ "$MULTI_PROTO" = no || "$D_FLAG" = y ]]; then 19229e4fd900SJohn Levon ( cd $TOOLS_PROTO; tar cf - . | 19239e4fd900SJohn Levon ( cd $NIGHTLY_PARENT_TOOLS_ROOT; 19249e4fd900SJohn Levon umask 0; tar xpf - ) ) 2>&1 | 19259e4fd900SJohn Levon tee -a $mail_msg_file >> $LOGFILE 19269e4fd900SJohn Levon fi 19279e4fd900SJohn Levon fi 19289e4fd900SJohn Levonfi 19299e4fd900SJohn Levon 19309e4fd900SJohn Levon# 19319e4fd900SJohn Levon# ELF verification: ABI (-A) and runtime (-r) checks 19329e4fd900SJohn Levon# 19339e4fd900SJohn Levonif [[ ($build_ok = y) && (($A_FLAG = y) || ($r_FLAG = y)) ]]; then 19349e4fd900SJohn Levon # Directory ELF-data.$MACH holds the files produced by these tests. 19359e4fd900SJohn Levon elf_ddir=$SRC/ELF-data.$MACH 19369e4fd900SJohn Levon 19379e4fd900SJohn Levon # If there is a previous ELF-data backup directory, remove it. Then, 19389e4fd900SJohn Levon # rotate current ELF-data directory into its place and create a new 19399e4fd900SJohn Levon # empty directory 19409e4fd900SJohn Levon rm -rf $elf_ddir.ref 19419e4fd900SJohn Levon if [[ -d $elf_ddir ]]; then 19429e4fd900SJohn Levon mv $elf_ddir $elf_ddir.ref 19439e4fd900SJohn Levon fi 19449e4fd900SJohn Levon mkdir -p $elf_ddir 19459e4fd900SJohn Levon 19469e4fd900SJohn Levon # Call find_elf to produce a list of the ELF objects in the proto area. 19479e4fd900SJohn Levon # This list is passed to check_rtime and interface_check, preventing 19489e4fd900SJohn Levon # them from separately calling find_elf to do the same work twice. 19499e4fd900SJohn Levon find_elf -fr $checkroot > $elf_ddir/object_list 19509e4fd900SJohn Levon 19519e4fd900SJohn Levon if [[ $A_FLAG = y ]]; then 19529e4fd900SJohn Levon echo "\n==== Check versioning and ABI information ====\n" | \ 19539e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 19549e4fd900SJohn Levon 19559e4fd900SJohn Levon # Produce interface description for the proto. Report errors. 19569e4fd900SJohn Levon interface_check -o -w $elf_ddir -f object_list \ 19579e4fd900SJohn Levon -i interface -E interface.err 19589e4fd900SJohn Levon if [[ -s $elf_ddir/interface.err ]]; then 19599e4fd900SJohn Levon tee -a $LOGFILE < $elf_ddir/interface.err \ 19609e4fd900SJohn Levon >> $mail_msg_file 19619e4fd900SJohn Levon build_extras_ok=n 19629e4fd900SJohn Levon fi 19639e4fd900SJohn Levon 19649e4fd900SJohn Levon # If ELF_DATA_BASELINE_DIR is defined, compare the new interface 19659e4fd900SJohn Levon # description file to that from the baseline gate. Issue a 19669e4fd900SJohn Levon # warning if the baseline is not present, and keep going. 19679e4fd900SJohn Levon if [[ "$ELF_DATA_BASELINE_DIR" != '' ]]; then 19689e4fd900SJohn Levon base_ifile="$ELF_DATA_BASELINE_DIR/interface" 19699e4fd900SJohn Levon 19709e4fd900SJohn Levon echo "\n==== Compare versioning and ABI information" \ 19719e4fd900SJohn Levon "to baseline ====\n" | \ 19729e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 19739e4fd900SJohn Levon echo "Baseline: $base_ifile\n" >> $LOGFILE 19749e4fd900SJohn Levon 19759e4fd900SJohn Levon if [[ -f $base_ifile ]]; then 19769e4fd900SJohn Levon interface_cmp -d -o $base_ifile \ 19779e4fd900SJohn Levon $elf_ddir/interface > $elf_ddir/interface.cmp 19789e4fd900SJohn Levon if [[ -s $elf_ddir/interface.cmp ]]; then 19799e4fd900SJohn Levon echo | tee -a $LOGFILE >> $mail_msg_file 19809e4fd900SJohn Levon tee -a $LOGFILE < \ 19819e4fd900SJohn Levon $elf_ddir/interface.cmp \ 19829e4fd900SJohn Levon >> $mail_msg_file 19839e4fd900SJohn Levon build_extras_ok=n 19849e4fd900SJohn Levon fi 19859e4fd900SJohn Levon else 19869e4fd900SJohn Levon echo "baseline not available. comparison" \ 19879e4fd900SJohn Levon "skipped" | \ 19889e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 19899e4fd900SJohn Levon fi 19909e4fd900SJohn Levon 19919e4fd900SJohn Levon fi 19929e4fd900SJohn Levon fi 19939e4fd900SJohn Levon 19949e4fd900SJohn Levon if [[ $r_FLAG = y ]]; then 19959e4fd900SJohn Levon echo "\n==== Check ELF runtime attributes ====\n" | \ 19969e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 19979e4fd900SJohn Levon 19989e4fd900SJohn Levon # If we're doing a DEBUG build the proto area will be left 19999e4fd900SJohn Levon # with debuggable objects, thus don't assert -s. 20009e4fd900SJohn Levon if [[ $D_FLAG = y ]]; then 20019e4fd900SJohn Levon rtime_sflag="" 20029e4fd900SJohn Levon else 20039e4fd900SJohn Levon rtime_sflag="-s" 20049e4fd900SJohn Levon fi 20059e4fd900SJohn Levon check_rtime -i -m -v $rtime_sflag -o -w $elf_ddir \ 20069e4fd900SJohn Levon -D object_list -f object_list -E runtime.err \ 20079e4fd900SJohn Levon -I runtime.attr.raw 20089e4fd900SJohn Levon if (( $? != 0 )); then 20099e4fd900SJohn Levon build_extras_ok=n 20109e4fd900SJohn Levon fi 20119e4fd900SJohn Levon 20129e4fd900SJohn Levon # check_rtime -I output needs to be sorted in order to 20139e4fd900SJohn Levon # compare it to that from previous builds. 20149e4fd900SJohn Levon sort $elf_ddir/runtime.attr.raw > $elf_ddir/runtime.attr 20159e4fd900SJohn Levon rm $elf_ddir/runtime.attr.raw 20169e4fd900SJohn Levon 20179e4fd900SJohn Levon # Report errors 20189e4fd900SJohn Levon if [[ -s $elf_ddir/runtime.err ]]; then 20199e4fd900SJohn Levon tee -a $LOGFILE < $elf_ddir/runtime.err \ 20209e4fd900SJohn Levon >> $mail_msg_file 20219e4fd900SJohn Levon build_extras_ok=n 20229e4fd900SJohn Levon fi 20239e4fd900SJohn Levon 20249e4fd900SJohn Levon # If there is an ELF-data directory from a previous build, 20259e4fd900SJohn Levon # then diff the attr files. These files contain information 20269e4fd900SJohn Levon # about dependencies, versioning, and runpaths. There is some 20279e4fd900SJohn Levon # overlap with the ABI checking done above, but this also 20289e4fd900SJohn Levon # flushes out non-ABI interface differences along with the 20299e4fd900SJohn Levon # other information. 20309e4fd900SJohn Levon echo "\n==== Diff ELF runtime attributes" \ 20319e4fd900SJohn Levon "(since last build) ====\n" | \ 20329e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file >> $mail_msg_file 20339e4fd900SJohn Levon 20349e4fd900SJohn Levon if [[ -f $elf_ddir.ref/runtime.attr ]]; then 20359e4fd900SJohn Levon diff $elf_ddir.ref/runtime.attr \ 20369e4fd900SJohn Levon $elf_ddir/runtime.attr \ 20379e4fd900SJohn Levon >> $mail_msg_file 20389e4fd900SJohn Levon fi 20399e4fd900SJohn Levon fi 20409e4fd900SJohn Levon 20419e4fd900SJohn Levon # If -u set, copy contents of ELF-data.$MACH to the parent workspace. 20429e4fd900SJohn Levon if [[ "$u_FLAG" = "y" ]]; then 20439e4fd900SJohn Levon p_elf_ddir=$PARENT_WS/usr/src/ELF-data.$MACH 20449e4fd900SJohn Levon 20459e4fd900SJohn Levon # If parent lacks the ELF-data.$MACH directory, create it 20469e4fd900SJohn Levon if [[ ! -d $p_elf_ddir ]]; then 20479e4fd900SJohn Levon staffer mkdir -p $p_elf_ddir 20489e4fd900SJohn Levon fi 20499e4fd900SJohn Levon 20509e4fd900SJohn Levon # These files are used asynchronously by other builds for ABI 20519e4fd900SJohn Levon # verification, as above for the -A option. As such, we require 20529e4fd900SJohn Levon # the file replacement to be atomic. Copy the data to a temp 20539e4fd900SJohn Levon # file in the same filesystem and then rename into place. 20549e4fd900SJohn Levon ( 20559e4fd900SJohn Levon cd $elf_ddir 20569e4fd900SJohn Levon for elf_dfile in *; do 20579e4fd900SJohn Levon staffer cp $elf_dfile \ 20589e4fd900SJohn Levon ${p_elf_ddir}/${elf_dfile}.new 20599e4fd900SJohn Levon staffer mv -f ${p_elf_ddir}/${elf_dfile}.new \ 20609e4fd900SJohn Levon ${p_elf_ddir}/${elf_dfile} 20619e4fd900SJohn Levon done 20629e4fd900SJohn Levon ) 20639e4fd900SJohn Levon fi 20649e4fd900SJohn Levonfi 20659e4fd900SJohn Levon 20669e4fd900SJohn Levon# DEBUG lint of kernel begins 20679e4fd900SJohn Levon 20689e4fd900SJohn Levonif [ "$i_CMD_LINE_FLAG" = "n" -a "$l_FLAG" = "y" ]; then 20699e4fd900SJohn Levon if [ "$LINTDIRS" = "" ]; then 20709e4fd900SJohn Levon # LINTDIRS="$SRC/uts y $SRC/stand y $SRC/psm y" 20719e4fd900SJohn Levon LINTDIRS="$SRC y" 20729e4fd900SJohn Levon fi 20739e4fd900SJohn Levon set $LINTDIRS 20749e4fd900SJohn Levon while [ $# -gt 0 ]; do 20759e4fd900SJohn Levon dolint $1 $2; shift; shift 20769e4fd900SJohn Levon done 20779e4fd900SJohn Levonelse 20789e4fd900SJohn Levon echo "\n==== No '$MAKE lint' ====\n" >> $LOGFILE 20799e4fd900SJohn Levonfi 20809e4fd900SJohn Levon 20819e4fd900SJohn Levon# "make check" begins 20829e4fd900SJohn Levon 20839e4fd900SJohn Levonif [ "$i_CMD_LINE_FLAG" = "n" -a "$C_FLAG" = "y" ]; then 20849e4fd900SJohn Levon # remove old check.out 20859e4fd900SJohn Levon rm -f $SRC/check.out 20869e4fd900SJohn Levon 20879e4fd900SJohn Levon rm -f $SRC/check-${MACH}.out 20889e4fd900SJohn Levon cd $SRC 20899e4fd900SJohn Levon $MAKE -ek check ROOT="$checkroot" 2>&1 | tee -a $SRC/check-${MACH}.out \ 20909e4fd900SJohn Levon >> $LOGFILE 20919e4fd900SJohn Levon echo "\n==== cstyle/hdrchk errors ====\n" >> $mail_msg_file 20929e4fd900SJohn Levon 20939e4fd900SJohn Levon grep ":" $SRC/check-${MACH}.out | 20949e4fd900SJohn Levon egrep -v "Ignoring unknown host" | \ 20959e4fd900SJohn Levon sort | uniq | tee $TMPDIR/check_errors >> $mail_msg_file 20969e4fd900SJohn Levon 20979e4fd900SJohn Levon if [[ -s $TMPDIR/check_errors ]]; then 20989e4fd900SJohn Levon build_extras_ok=n 20999e4fd900SJohn Levon fi 21009e4fd900SJohn Levonelse 21019e4fd900SJohn Levon echo "\n==== No '$MAKE check' ====\n" >> $LOGFILE 21029e4fd900SJohn Levonfi 21039e4fd900SJohn Levon 21049e4fd900SJohn Levonecho "\n==== Find core files ====\n" | \ 21059e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 21069e4fd900SJohn Levon 21079e4fd900SJohn Levonfind $abssrcdirs -name core -a -type f -exec file {} \; | \ 21089e4fd900SJohn Levon tee -a $LOGFILE >> $mail_msg_file 21099e4fd900SJohn Levon 21109e4fd900SJohn Levonif [ "$f_FLAG" = "y" -a "$build_ok" = "y" ]; then 21119e4fd900SJohn Levon echo "\n==== Diff unreferenced files (since last build) ====\n" \ 21129e4fd900SJohn Levon | tee -a $LOGFILE >>$mail_msg_file 21139e4fd900SJohn Levon rm -f $SRC/unref-${MACH}.ref 21149e4fd900SJohn Levon if [ -f $SRC/unref-${MACH}.out ]; then 21159e4fd900SJohn Levon mv $SRC/unref-${MACH}.out $SRC/unref-${MACH}.ref 21169e4fd900SJohn Levon fi 21179e4fd900SJohn Levon 21189e4fd900SJohn Levon findunref -S $SCM_TYPE -t $SRC/.build.tstamp -s usr $CODEMGR_WS \ 21199e4fd900SJohn Levon ${TOOLS}/findunref/exception_list 2>> $mail_msg_file | \ 21209e4fd900SJohn Levon sort > $SRC/unref-${MACH}.out 21219e4fd900SJohn Levon 21229e4fd900SJohn Levon if [ ! -f $SRC/unref-${MACH}.ref ]; then 21239e4fd900SJohn Levon cp $SRC/unref-${MACH}.out $SRC/unref-${MACH}.ref 21249e4fd900SJohn Levon fi 21259e4fd900SJohn Levon 21269e4fd900SJohn Levon diff $SRC/unref-${MACH}.ref $SRC/unref-${MACH}.out >>$mail_msg_file 21279e4fd900SJohn Levonfi 21289e4fd900SJohn Levon 21299e4fd900SJohn Levon# Verify that the usual lists of files, such as exception lists, 21309e4fd900SJohn Levon# contain only valid references to files. If the build has failed, 21319e4fd900SJohn Levon# then don't check the proto area. 21329e4fd900SJohn LevonCHECK_PATHS=${CHECK_PATHS:-y} 21339e4fd900SJohn Levonif [ "$CHECK_PATHS" = y -a "$N_FLAG" != y ]; then 21349e4fd900SJohn Levon echo "\n==== Check lists of files ====\n" | tee -a $LOGFILE \ 21359e4fd900SJohn Levon >>$mail_msg_file 21369e4fd900SJohn Levon arg=-b 21379e4fd900SJohn Levon [ "$build_ok" = y ] && arg= 21389e4fd900SJohn Levon checkpaths $arg $checkroot > $SRC/check-paths.out 2>&1 21399e4fd900SJohn Levon if [[ -s $SRC/check-paths.out ]]; then 21409e4fd900SJohn Levon tee -a $LOGFILE < $SRC/check-paths.out >> $mail_msg_file 21419e4fd900SJohn Levon build_extras_ok=n 21429e4fd900SJohn Levon fi 21439e4fd900SJohn Levonfi 21449e4fd900SJohn Levon 21459e4fd900SJohn Levonabspkg= 21469e4fd900SJohn Levonfor d in $abssrcdirs; do 21479e4fd900SJohn Levon if [ -d "$d/pkg" ]; then 21489e4fd900SJohn Levon abspkg="$abspkg $d" 21499e4fd900SJohn Levon fi 21509e4fd900SJohn Levondone 21519e4fd900SJohn Levon 2152b85ab92fSAndy Fiddamanif [ "$M_FLAG" != "y" -a "$build_ok" = y ]; then 2153b85ab92fSAndy Fiddaman echo "\n==== Impact on file permissions ====\n" \ 2154b85ab92fSAndy Fiddaman >> $mail_msg_file 2155b85ab92fSAndy Fiddaman 21569e4fd900SJohn Levon if [ -n "$abspkg" ]; then 21579e4fd900SJohn Levon for d in "$abspkg"; do 21589e4fd900SJohn Levon ( cd $d/pkg ; $MAKE -e pmodes ) >> $mail_msg_file 21599e4fd900SJohn Levon done 21609e4fd900SJohn Levon fi 21619e4fd900SJohn Levonfi 21629e4fd900SJohn Levon 2163b85ab92fSAndy Fiddamanif [ "$L_FLAG" != "y" -a "$build_ok" = y ]; then 2164b85ab92fSAndy Fiddaman echo "\n==== Linting packages ====\n" | \ 2165b85ab92fSAndy Fiddaman tee -a $LOGFILE >> $mail_msg_file 2166b85ab92fSAndy Fiddaman 2167b85ab92fSAndy Fiddaman if [ -n "$abspkg" ]; then 2168b85ab92fSAndy Fiddaman for d in "$abspkg"; do 2169b85ab92fSAndy Fiddaman ( cd $d/pkg ; $MAKE -e pkglint ) | \ 2170b85ab92fSAndy Fiddaman tee -a $LOGFILE | \ 2171b85ab92fSAndy Fiddaman egrep -v 'Lint engine setup|Starting lint run' 2172b85ab92fSAndy Fiddaman done 2>&1 | tee $TMPDIR/pkglint_noise >> $mail_msg_file 2173b85ab92fSAndy Fiddaman if [[ -s $TMPDIR/pkglint_noise ]]; then 2174b85ab92fSAndy Fiddaman build_extras_ok=n 2175b85ab92fSAndy Fiddaman fi 2176b85ab92fSAndy Fiddaman fi 2177b85ab92fSAndy Fiddamanfi 2178b85ab92fSAndy Fiddaman 21799e4fd900SJohn Levonif [ "$w_FLAG" = "y" -a "$build_ok" = "y" ]; then 21809e4fd900SJohn Levon if [[ "$MULTI_PROTO" = no || "$D_FLAG" = y ]]; then 2181bf16a978SMarcel Telka do_wsdiff DEBUG $ROOT.prev $ROOT wsdiff.results 21829e4fd900SJohn Levon fi 21839e4fd900SJohn Levon 21849e4fd900SJohn Levon if [[ "$MULTI_PROTO" = yes && "$F_FLAG" = n ]]; then 2185bf16a978SMarcel Telka do_wsdiff non-DEBUG $ROOT-nd.prev $ROOT-nd wsdiff-nd.results 2186bf16a978SMarcel Telka fi 2187bf16a978SMarcel Telka 2188bf16a978SMarcel Telka if [[ "$t_FLAG" == "y" ]]; then 2189bf16a978SMarcel Telka do_wsdiff tools $TOOLS_PROTO.prev $TOOLS_PROTO wsdiff-tools.results 21909e4fd900SJohn Levon fi 21919e4fd900SJohn Levonfi 21929e4fd900SJohn Levon 21939e4fd900SJohn LevonEND_DATE=`date` 21949e4fd900SJohn Levonecho "==== Nightly $maketype build completed: $END_DATE ====" | \ 21959e4fd900SJohn Levon tee -a $LOGFILE >> $build_time_file 21969e4fd900SJohn Levon 21979e4fd900SJohn Levontypeset -i10 hours 21989e4fd900SJohn Levontypeset -Z2 minutes 21999e4fd900SJohn Levontypeset -Z2 seconds 22009e4fd900SJohn Levon 22019e4fd900SJohn Levonelapsed_time=$SECONDS 22029e4fd900SJohn Levon((hours = elapsed_time / 3600 )) 22039e4fd900SJohn Levon((minutes = elapsed_time / 60 % 60)) 22049e4fd900SJohn Levon((seconds = elapsed_time % 60)) 22059e4fd900SJohn Levon 22069e4fd900SJohn Levonecho "\n==== Total build time ====" | \ 22079e4fd900SJohn Levon tee -a $LOGFILE >> $build_time_file 22089e4fd900SJohn Levonecho "\nreal ${hours}:${minutes}:${seconds}" | \ 22099e4fd900SJohn Levon tee -a $LOGFILE >> $build_time_file 22109e4fd900SJohn Levon 22119e4fd900SJohn Levonif [ "$u_FLAG" = "y" -a "$f_FLAG" = "y" -a "$build_ok" = "y" ]; then 22129e4fd900SJohn Levon staffer cp ${SRC}/unref-${MACH}.out $PARENT_WS/usr/src/ 22139e4fd900SJohn Levon 22149e4fd900SJohn Levon # 22159e4fd900SJohn Levon # Produce a master list of unreferenced files -- ideally, we'd 22169e4fd900SJohn Levon # generate the master just once after all of the nightlies 22179e4fd900SJohn Levon # have finished, but there's no simple way to know when that 22189e4fd900SJohn Levon # will be. Instead, we assume that we're the last nightly to 22199e4fd900SJohn Levon # finish and merge all of the unref-${MACH}.out files in 22209e4fd900SJohn Levon # $PARENT_WS/usr/src/. If we are in fact the final ${MACH} to 22219e4fd900SJohn Levon # finish, then this file will be the authoritative master 22229e4fd900SJohn Levon # list. Otherwise, another ${MACH}'s nightly will eventually 22239e4fd900SJohn Levon # overwrite ours with its own master, but in the meantime our 22249e4fd900SJohn Levon # temporary "master" will be no worse than any older master 22259e4fd900SJohn Levon # which was already on the parent. 22269e4fd900SJohn Levon # 22279e4fd900SJohn Levon 22289e4fd900SJohn Levon set -- $PARENT_WS/usr/src/unref-*.out 22299e4fd900SJohn Levon cp "$1" ${TMPDIR}/unref.merge 22309e4fd900SJohn Levon shift 22319e4fd900SJohn Levon 22329e4fd900SJohn Levon for unreffile; do 22339e4fd900SJohn Levon comm -12 ${TMPDIR}/unref.merge "$unreffile" > ${TMPDIR}/unref.$$ 22349e4fd900SJohn Levon mv ${TMPDIR}/unref.$$ ${TMPDIR}/unref.merge 22359e4fd900SJohn Levon done 22369e4fd900SJohn Levon 22379e4fd900SJohn Levon staffer cp ${TMPDIR}/unref.merge $PARENT_WS/usr/src/unrefmaster.out 22389e4fd900SJohn Levonfi 22399e4fd900SJohn Levon 22409e4fd900SJohn Levon# 22419e4fd900SJohn Levon# All done save for the sweeping up. 22429e4fd900SJohn Levon# (whichever exit we hit here will trigger the "cleanup" trap which 22439e4fd900SJohn Levon# optionally sends mail on completion). 22449e4fd900SJohn Levon# 22459e4fd900SJohn Levonif [[ "$build_ok" == "y" ]]; then 22469e4fd900SJohn Levon if [[ "$W_FLAG" == "y" || "$build_extras_ok" == "y" ]]; then 22479e4fd900SJohn Levon exit 0 22489e4fd900SJohn Levon fi 22499e4fd900SJohn Levonfi 22509e4fd900SJohn Levon 22519e4fd900SJohn Levonexit 1 2252