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