1 nightly(1ONBLD)               illumos Build Tools              nightly(1ONBLD)
   2 
   3 
   4 
   5 NAME
   6        nightly - build an OS-Net consolidation overnight
   7 
   8 SYNOPSIS
   9        nightly [-in] [-V VERS] <env_file>
  10 
  11 DESCRIPTION
  12        nightly, the mother of all build scripts, can bringover, build,
  13        archive, package, error check, and generally do everything it takes to
  14        turn OS/Net consolidation source code into useful stuff.  It is
  15        customizable to permit you to run anything from a simple build to all
  16        of the cross-checking a gatekeeper needs.  The advantage to using
  17        nightly is that you build things correctly, consistently and
  18        automatically, with the best practices; building with nightly can mean
  19        never having to say you're sorry to your gatekeeper.
  20 
  21        More specifically, nightly performs the following tasks, in order, if
  22        all these things are desired:
  23 
  24 
  25               o      perform a "make clobber" to clean up old binaries
  26 
  27               o      bringover from the identified parent gate/clone
  28 
  29               o      perform non-DEBUG and DEBUG builds
  30 
  31               o      list proto area files and compare with previous list
  32 
  33               o      copy updated proto area to parent
  34 
  35               o      list shared lib interface and compare with previous list
  36 
  37               o      perform a "make lint" of the kernel and report errors
  38 
  39               o      perform a "make check" to report hdrchk/cstyle errors
  40 
  41               o      report the presence of any core files
  42 
  43               o      check the ELF runtime attributes of all dynamic objects
  44 
  45               o      check for unreferenced files
  46 
  47               o      report on which proto area objects have changed (since
  48                      the last build)
  49 
  50               o      report the total build time
  51 
  52               o      save a detailed log file for reference
  53 
  54               o      mail the user a summary of the completed build
  55 
  56        The actions of the script are almost completely determined by the
  57        environment variables in the env file, the only necessary argument.
  58        Ths only thing you really need to use nightly is an env file that does
  59        what you want.
  60 
  61        Like most of the other build tools in usr/src/tools, this script tends
  62        to change on a fairly regular basis; do not expect to be able to build
  63        OS/Net with a version of nightly significantly older than your source
  64        tree.  It has what is effectively a Consolidation Private relationship
  65        to other build tools and with many parts of the OS/Net makefiles,
  66        although it may also be used to build other consolidations.
  67 
  68 NIGHTLY_OPTIONS
  69        The environment variable NIGHTLY_OPTIONS controls the actions nightly
  70        will take as it proceeds.  The -i, -n, +t and -V options may also be
  71        used from the command line to control the actions without editing your
  72        environment file.  The -i and -n options complete the build more
  73        quickly by bypassing some actions. If NIGHTLY_OPTIONS is not set, then
  74        "-Bmt" build options will be used.
  75 
  76        Basic action options
  77 
  78        -D        Do a build with DEBUG on (non-DEBUG is built by default)
  79 
  80        -F        Do _not_ do a non-DEBUG build (use with -D to get just a
  81                  DEBUG build)
  82 
  83        -M        Do not run pmodes (safe file permission checker)
  84 
  85        -i        Do an incremental build, suppressing the "make clobber" that
  86                  by default removes all existing binaries and derived files.
  87                  From the command line, -i also suppresses the lint pass and
  88                  the cstyle/hdrchk pass
  89 
  90        -n        Suppress the bringover so that the build will start
  91                  immediately with current source code
  92 
  93        -p        Create packages for regular install
  94 
  95        -U        Update proto area in the parent workspace
  96 
  97        -u        Update the parent workspace with files generated by the
  98                  build, as follows.
  99 
 100               o         Copy proto_list_${MACH} and friends to usr/src in the
 101                         parent.
 102 
 103               o         When used with -f, build a usr/src/unrefmaster.out in
 104                         the parent by merging all the
 105                         usr/src/unref-${MACH}.out files in the parent.
 106 
 107               o         When used with -A or -r, copy the contents of the
 108                         resulting ELF-data.${MACH} directory to usr/src/ELF-
 109                         data.${MACH} in the parent workspace.
 110 
 111        -m        Send mail to $MAILTO at end of build
 112 
 113        -t        Build and use the tools in $SRC/tools (default setting).
 114 
 115        +t        Use the build tools in "$ONBLD_TOOLS/bin".
 116 
 117 
 118        Code checking options
 119 
 120        -A        Check for ABI discrepancies in .so files.  It is only
 121                  required for shared object developers when there is an
 122                  addition, deletion or change of interface in the .so files.
 123 
 124        -C        Check for cstyle/hdrchk errors
 125 
 126        -f        Check for unreferenced files.  Since the full workspace must
 127                  be built in order to accurately identify unreferenced files,
 128                  -f is ignored for incremental (-i) builds, or builds that do
 129                  not include -l, and -p.
 130 
 131        -r        Check the ELF runtime attributes of all dynamic objects
 132 
 133        -l        Do "make lint" in $LINTDIRS (default: $SRC n)
 134 
 135        -N        Do not run protocmp or checkpaths (note: this option is not
 136                  recommended, especially in conjunction with the -p option)
 137 
 138        -w        Report which proto area objects differ between this and the
 139                  last build.  See wsdiff(1ONBLD) for details. Note that the
 140                  proto areas used for comparison are the last ones constructed
 141                  as part of the build. As an example, if both a non-debug and
 142                  debug build are performed (in that order), then the debug
 143                  proto area will be used for comparison (which might not be
 144                  what you want).
 145 
 146        Groups of options
 147 
 148        -G        Gate keeper default group of options (-u)
 149 
 150        -I        Integration engineer default group of options (-mpu)
 151 
 152        -R        Default group of options for building a release (-mp)
 153 
 154 
 155        Miscellaneous options
 156 
 157        -V VERS   set the build version string to VERS, overriding VERSION
 158 
 159 
 160 ENVIRONMENT VARIABLES
 161        Here is a list of prominent environment variables that nightly
 162        references and the meaning of each variable.  CODEMGR_WS
 163             The root of your workspace, including whatever metadata is kept by
 164             the source code management system.  This is the workspace in which
 165             the build will be done.
 166 
 167        PARENT_WS
 168             The root of the workspace that is the parent of the one being
 169             built.  This is particularly relevant for configurations with a
 170             main workspace and build workspaces underneath it; see the -u and
 171             -U options as well as the PKGARCHIVE environment variable, for
 172             more information.
 173 
 174        BRINGOVER_WS
 175             This is the workspace from which nightly will fetch sources to
 176             either populate or update your workspace; it defaults to
 177             $CLONE_WS.
 178 
 179        CLONE_WS
 180             This is the workspace from which nightly will fetch sources by
 181             default.  This is often distinct from the parent, particularly if
 182             the parent is a gate.
 183 
 184        SRC
 185             Root of OS-Net source code, referenced by the Makefiles.  It is
 186             the starting point of build activity.  It should be expressed in
 187             terms of $CODEMGR_WS.
 188 
 189        ROOT
 190             Root of the proto area for the build.  The makefiles direct
 191             installation of build products to this area and direct references
 192             to these files by builds of commands and other targets.  It should
 193             be expressed in terms of $CODEMGR_WS.
 194 
 195             If $MULTI_PROTO is "no", $ROOT may contain a DEBUG or non-DEBUG
 196             build.  If $MULTI_PROTO is "yes", $ROOT contains the DEBUG build
 197             and $ROOT-nd contains the non-DEBUG build.
 198 
 199        TOOLS_ROOT
 200             Root of the tools proto area for the build.  The makefiles direct
 201             installation of tools build products to this area.  Unless +t is
 202             part of $NIGHTLY_OPTIONS, these tools will be used during the
 203             build.
 204 
 205             As built by nightly, this will always contain non-DEBUG objects.
 206             Therefore, this will always have a -nd suffix, regardless of
 207             $MULTI_PROTO.
 208 
 209        MACH
 210             The instruction set architecture of the build machine as given by
 211             uname -p, e.g. sparc, i386.
 212 
 213        LOCKNAME
 214             The name of the file used to lock out multiple runs of nightly.
 215             This should generally be left to the default setting.
 216 
 217        ATLOG
 218             The location of the log directory maintained by nightly.  This
 219             should generally be left to the default setting.
 220 
 221        LOGFILE
 222             The name of the log file in the $ATLOG directory maintained by
 223             nightly.  This should generally be left to the default setting.
 224 
 225        STAFFER
 226             The non-root account to use on the build machine for the bringover
 227             from the clone or parent workspace.  This may not be the same
 228             identify used by the SCM.
 229 
 230        MAILTO
 231             The address to be used to send completion e-mail at the end of the
 232             build (for the -m option).
 233 
 234        MAILFROM
 235             The address to be used for From: in the completion e-mail at the
 236             end of the build (for the -m option).
 237 
 238        REF_PROTO_LIST
 239             Name of file used with protocmp to compare proto area contents.
 240 
 241        PARENT_ROOT
 242             The parent root, which is the destination for copying the proto
 243             area(s) when using the -U option.
 244 
 245        PARENT_TOOLS_ROOT
 246             The parent tools root, which is the destination for copying the
 247             tools proto area when using the -U option.
 248 
 249        RELEASE
 250             The release version number to be used; e.g., 5.10.1 (Note: this is
 251             set in Makefile.master and should not normally be overridden).
 252 
 253        VERSION
 254             The version text string to be used; e.g., "onnv:`date
 255             '+%Y-%m-%d'`".
 256 
 257        RELEASE_DATE
 258             The release date text to be used; e.g., October 2009. If not set
 259             in your environment file, then this text defaults to the output
 260             from $(LC_ALL=C date +"%B %Y"); e.g., "October 2009".
 261 
 262        RELEASE_BUILD
 263             Define this to build a release with a non-DEBUG kernel.
 264             Generally, let nightly set this for you based on its options.
 265 
 266        PKGARCHIVE
 267             The destination for packages.  This may be relative to $CODEMGR_WS
 268             for private packages or relative to $PARENT_WS if you have
 269             different workspaces for different architectures but want one
 270             hierarchy of packages.
 271 
 272        MAKEFLAGS
 273             Set default flags to make; e.g., -k to build all targets
 274             regardless of errors.
 275 
 276        UT_NO_USAGE_TRACKING
 277             Disables usage reporting by listed Devpro tools. Otherwise it
 278             sends mail to some Devpro machine every time the tools are used.
 279 
 280        LINTDIRS
 281             Directories to lint with the -l option.
 282 
 283        BUILD_TOOLS
 284             BUILD_TOOLS is the root of all tools including the compilers;
 285             e.g., /ws/onnv-tools.  It is used by the makefile system, but not
 286             nightly.
 287 
 288        ONBLD_TOOLS
 289             ONBLD_TOOLS is the root of all the tools that are part of
 290             SUNWonbld; e.g., /ws/onnv-tools/onbld.  By default, it is derived
 291             from BUILD_TOOLS.  It is used by the makefile system, but not
 292             nightly.
 293 
 294        SPRO_ROOT
 295             The gate-defined default location for the Sun compilers, e.g.
 296             /ws/onnv-tools/SUNWspro.  By default, it is derived from
 297             BUILD_TOOLS.  It is used by the makefile system, but not nightly.
 298 
 299        JAVA_ROOT
 300             The location for the java compilers for the build, generally
 301             /usr/java.
 302 
 303        OPTHOME
 304             The gate-defined default location of things formerly in /opt;
 305             e.g., /ws/onnv-tools.  This is used by nightly, but not the
 306             makefiles.
 307 
 308        TEAMWARE
 309             The gate-defined default location for the Teamware tools; e.g.,
 310             /ws/onnv-tools/SUNWspro.  By default, it is derived from OPTHOME.
 311             This is used by nightly, but not the makefiles.  There is no
 312             corresponding variable for Mercurial or Subversion, which are
 313             assumed to be installed in the default path.
 314 
 315        ON_CLOSED_BINS
 316             OpenSolaris builds do not contain the closed source tree.
 317             Instead, the developer downloads a closed binaries tree and
 318             unpacks it.  ON_CLOSED_BINS tells nightly where to find these
 319             closed binaries, so that it can add them into the build.
 320 
 321        CHECK_PATHS
 322             Normally, nightly runs the 'checkpaths' script to check for
 323             discrepancies among the files that list paths to other files, such
 324             as exception lists and req.flg.  Set this flag to 'n' to disable
 325             this check, which appears in the nightly output as "Check lists of
 326             files."
 327 
 328        CHECK_DMAKE
 329             Nightly validates that the version of dmake encountered is known
 330             to be safe to use.  Set this flag to 'n' to disable this test,
 331             allowing any version of dmake to be used.
 332 
 333        MULTI_PROTO
 334             If "no" (the default), nightly will reuse $ROOT for both the DEBUG
 335             and non-DEBUG builds.  If "yes", the DEBUG build will go in $ROOT
 336             and the non-DEBUG build will go in $ROOT-nd.  Other values will be
 337             treated as "no".
 338 
 339 NIGHTLY HOOK ENVIRONMENT VARIABLES
 340        Several optional environment variables may specify commands to run at
 341        various points during the build.  Commands specified in the hook
 342        variable will be run in a subshell; command output will be appended to
 343        the mail message and log file.  If the hook exits with a non-zero
 344        status, the build is aborted immediately.  Environment variables
 345        defined in the environment file will be available.
 346 
 347        SYS_PRE_NIGHTLY
 348             Run just after the workspace lock is acquired.  This is reserved
 349             for per-build-machine customizations and should be set only in
 350             /etc/nightly.conf
 351 
 352        PRE_NIGHTLY
 353             Run just after SYS_PRE_NIGHTLY.
 354 
 355        PRE_BRINGOVER
 356             Run just before bringover is started; not run if no bringover is
 357             done.
 358 
 359        POST_BRINGOVER
 360             Run just after bringover completes; not run if no bringover is
 361             done.
 362 
 363        POST_NIGHTLY
 364             Run after the build completes, with the return status of nightly -
 365             one of "Completed", "Interrupted", or "Failed" - available in the
 366             environment variable NIGHTLY_STATUS.
 367 
 368        SYS_POST_NIGHTLY
 369             This is reserved for per-build-machine customizations, and runs
 370             immedately after POST_NIGHTLY.
 371 
 372 FILES
 373             /etc/nightly.conf
 374 
 375        If present, nightly executes this file just prior to executing the env
 376        file.
 377 
 378 EXAMPLES
 379        Start with the example file in usr/src/tools/env/developer.sh (or
 380        gatekeeper.sh), copy to myenv and make your changes.
 381 
 382        # grep NIGHTLY_OPTIONS myenv
 383        NIGHTLY_OPTIONS="-ACrlapDm"
 384        export NIGHTLY_OPTIONS
 385        # /opt/onbld/bin/nightly -i myenv
 386 
 387 SEE ALSO
 388        bldenv(1ONBLD)
 389 
 390 
 391 
 392                                January 28, 2014                nightly(1ONBLD)