Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Rework how build.sh functions, so that command line options ...



details:   https://anonhg.NetBSD.org/src/rev/a75eadfa8850
branches:  trunk
changeset: 542190:a75eadfa8850
user:      lukem <lukem%NetBSD.org@localhost>
date:      Thu Jan 23 16:24:08 2003 +0000

description:
Rework how build.sh functions, so that command line options set various
parameters, and a list of "operations" defines what to do.
The full usage is show below.  Notes:
        `-b' has been deprecated (it always occurs now)
        `-d' is replaced by "distribution"
        `-R rel' onlys sets RELEASEDIR; use "release" to build a release
        `-k kern' has been replaced by "kernel=kern"
        `-i idir' has been replaced by "install=idir"
        -r now occurs before nbmake is rebuilt

Add a copyright (long due!).  Rework the code to (a KNF inspired) ShellNF.
Use functions appropriately.  Allow `nb' prefix to be easily changed to
something else.  Solve world peace (just kidding)

This is part of the (never achievable) goal of attempting to make
NetBSD easier to build...


  --8<--  new usage follows  --8<--

Usage: build.sh [-EnorUu] [-a arch] [-B buildid] [-D dest] [-j njob] [-M obj]
                [-m mach] [-O obj] [-R release] [-T tools] [-V var=[value]]
                [-w wrapper]   [operation [...] ]

 System build operations (all imply "obj" and "tools"):
    build               Run "make build"
    distribution        Run "make distribution" (includes etc/ files)
    release             Run "make release" (includes kernels & distrib media)

 Other operations:
    obj                 Run "make obj" (default unless -o)
    tools               Build and install tools
    kernel=conf         Build kernel with config file `conf'
    install=idir        Run "make installworld" to `idir'
                        (useful after 'distribution' or 'release')

 Options:
    -a arch     Set MACHINE_ARCH to arch (otherwise deduced from MACHINE)
    -B buildId  Set BUILDID to buildId
    -D dest     Set DESTDIR to dest
    -E          Set "expert" mode; disables some DESTDIR checks
    -j njob     Run up to njob jobs in parallel; see make(1)
    -M obj      Set obj root directory to obj (sets MAKEOBJDIRPREFIX)
    -m mach     Set MACHINE to mach (not required if NetBSD native)
    -n          Show commands that would be executed, but do not execute them
    -O obj      Set obj root directory to obj (sets a MAKEOBJDIR pattern)
    -o          Set MKOBJDIRS=no (do not create objdirs at start of build)
    -R release  Set RELEASEDIR to release
    -r          Remove contents of TOOLDIR and DESTDIR before building
    -T tools    Set TOOLDIR to tools.  If unset, and TOOLDIR is not set in
                the environment, nbmake will be (re)built unconditionally.
    -U          Set UNPRIVED
    -u          Set UPDATE
    -V v=[val]  Set variable `v' to `val'
    -w wrapper  Create nbmake script as wrapper
                (default: ${TOOLDIR}/bin/nbmake-${MACHINE})

diffstat:

 BUILDING          |   102 ++--
 build.sh          |  1075 ++++++++++++++++++++++++++++++++--------------------
 doc/BUILDING.mdoc |   203 +++++----
 3 files changed, 823 insertions(+), 557 deletions(-)

diffs (truncated from 1730 to 300 lines):

diff -r cb239db49e5c -r a75eadfa8850 BUILDING
--- a/BUILDING  Thu Jan 23 15:59:38 2003 +0000
+++ b/BUILDING  Thu Jan 23 16:24:08 2003 +0000
@@ -30,8 +30,8 @@
      toolchain (make is not required); all other tools are created as part of
      the NetBSD build process.
 
-           Note: A couple host toolchain components are not yet available in
-           the tools directory.  Also, some tools use non-POSIX, non-ANSI C
+           Note: A couple of host toolchain components are not yet available
+           in the tools directory.  Also, some tools use non-POSIX, non-ANSI C
            extensions and need to be standardized.  As a result, cross-compil-
            ing from systems other than NetBSD is not currently supported.
 
@@ -410,7 +410,8 @@
                    the proper order.
 
      distribution  Do a ``make build'', and then install a full distribution
-                   into DESTDIR.
+                   into DESTDIR, including files in /dev, /etc, /root and
+                   /var.
 
      buildworld    As per ``make distribution'', except that it ensures that
                    DESTDIR is not the root directory.
@@ -423,9 +424,10 @@
                    Note: It is highly recommended that you upgrade your kernel
                    and reboot before performing this operation.
 
-     release       Do a ``make build'', then package the system into a stan-
-                   dard release layout as described by release(7).  This re-
-                   quires that RELEASEDIR be set (see above).
+     release       Do a ``make distribution'', build kernels, distribution me-
+                   dia, and install sets, and then package the system into a
+                   standard release layout as described by release(7).  This
+                   requires that RELEASEDIR be set (see above).
 
      regression-tests
                    Can only be run after building the regression tests in the
@@ -449,8 +451,38 @@
      of options below, variables that are automatically set by build.sh are
      noted where applicable.
 
-     The following are available command line options that may be supplied to
-     build.sh:
+     The following operations are supported by build.sh:
+
+     build         Build the system as per ``make build''.  This option im-
+                   plies the obj and tools operations.
+
+     distribution  Build a full distribution as per ``make distribution''.
+                   This option implies the build operation.
+
+     release       Build a full release as per ``make release''.  This option
+                   implies the distribution operation.
+
+     obj           Perform ``make obj''.
+
+     tools         Build and install the host tools from src/tools.
+
+     kernel=kconf  Build a new kernel.  The kconf argument is the name of a
+                   configuration file suitable for use by config(8).  If kconf
+                   does not contain any `/' characters, the configuration file
+                   is expected to be found in the KERNCONFDIR directory, which
+                   is typically sys/arch/MACHINE/conf.  The new kernel will be
+                   built in a subdirectory of KERNOBJDIR, which is typically
+                   sys/arch/MACHINE/compile or an associated object directory.
+                   In order to ensure that the kernel is built using up-to-
+                   date tools, it is strongly recommended that the tools be
+                   rebuilt (using the tools operation).
+
+     install=idir  Install the contents of DESTDIR to idir, using ``make
+                   installworld''.
+
+     The following command line options alter the behaviour of the above oper-
+     ations: The following command line options alter the behaviour of the
+     build.sh operations described above:
 
      -a arch   Set the value of MACHINE_ARCH to arch.
 
@@ -460,43 +492,16 @@
                that the resulting name is of the form ``nbmake-MACHINE-
                BUILDID''.
 
-     -b        Bootstrap ``make'' and create a nbmake-MACHINE script (see be-
-               low).
-
      -D dest   Set the value of DESTDIR to dest.
 
-     -d        Build a full distribution.  This differs from a default build
-               in that files will also be installed to /dev, /etc, /root and
-               /var.  Note this does not build a ``release''; no release sets
-               are placed in ${RELEASEDIR}.  -d is implied by -R.
-
      -E        Set `expert' mode; DESTDIR does not have to be set to a non-
                root path for builds when this is set.
 
-     -i installworlddir
-               Install the contents of DESTDIR to installworlddir after all
-               other operations have completed, using the top level
-               ``installworld'' target.
-
      -j njob   Passed through to make(1).  Makefiles should use .WAIT or have
                explicit dependancies as necessary to enforce build ordering.
                If you see build failures with -j, please save complete build
                logs so the failures can be analyzed.
 
-     -k kernel
-               Build a new kernel.  The kernel argument is the name of a con-
-               figuration file suitable for use by config(8).  If kernel does
-               not contain any `/' characters, the configuration file is ex-
-               pected to be found in the KERNCONFDIR directory, which is typi-
-               cally sys/arch/MACHINE/conf.  The new kernel will be built in a
-               subdirectory of KERNOBJDIR, which is typically
-               sys/arch/MACHINE/compile or an associated object directory.  In
-               order to ensure that the kernel is built using up-to-date
-               tools, it is strongly recommended that the tools be rebuilt
-               (using the -t option) in a separate invocation of build.sh pri-
-               or to using the -k option, or that the -t and -k options be
-               used together in a single invocation of build.sh.
-
      -M obj    Set MAKEOBJDIRPREFIX to obj.
 
      -m mach   Set the value of MACHINE to mach.  This will also override any
@@ -516,9 +521,7 @@
 
      -o        Set the value of MKOBJDIRS to ``no''.
 
-     -R rel    Set the value of RELEASEDIR to rel.  Setting this option will
-               cause build.sh to run ``make release'' instead of ``make
-               build''.
+     -R rel    Set the value of RELEASEDIR to rel.
 
      -r        Remove the contents of DESTDIR and TOOLDIR before building
                (provides a clean starting point).  This will skip deleting
@@ -528,9 +531,6 @@
                ``make'' will only be rebuilt as needed (when the source files
                for make(1) change).
 
-     -t        Build and install the host tools from src/tools only.  This op-
-               tion implies -b.
-
      -U        Set the UNPRIVED variable.
 
      -u        Set the UPDATE variable.
@@ -558,7 +558,7 @@
      with an absolute path.
 
 EXAMPLES
-     ./build.sh -t
+     ./build.sh tools
                Build a new toolchain.
 
      cd ${KERNCONFDIR} ; ${TOOLDIR}/bin/nbconfig GENERIC
@@ -568,15 +568,23 @@
      cd ${KERNOBJDIR}/GENERIC ; ${TOOLDIR}/bin/nbmake-${MACHINE} dependall
                Use the new toolchain to build a new GENERIC kernel.
 
-     ./build.sh -t -k GENERIC
+     ./build.sh tools kernel=GENERIC
                Build a new toolchain, and use the new toolchain to configure
-               and build a new GENERIC kernel.
+               and build a new GENERIC kernel.  This is a simpler way to
+               achieve what the first three examples do.
 
-     ./build.sh -U -d
+     ./build.sh -U distribution
                Using unprivileged mode, build a complete distribution in
                DESTDIR.
 
-     ./build.sh -U -R /some/dir/RELEASE
+     # ./build.sh -U installworld=/
+               As root, install the distribution that was built with unprivi-
+               leged mode from DESTDIR to /.  (Even though this is run as
+               root, -U is required so that the permissions stored in
+               DESTDIR/METALOG are correctly applied to the files as they're
+               copied to /).
+
+     ./build.sh -U -R /some/dir/RELEASE release
                Using unprivileged mode, build a complete release in the speci-
                fied release directory.
 
@@ -597,4 +605,4 @@
 BUGS
      A few platforms are not yet using this build system.
 
-NetBSD                          January 4, 2003                             10
+NetBSD                         January 24, 2003                             10
diff -r cb239db49e5c -r a75eadfa8850 build.sh
--- a/build.sh  Thu Jan 23 15:59:38 2003 +0000
+++ b/build.sh  Thu Jan 23 16:24:08 2003 +0000
@@ -1,5 +1,40 @@
 #! /usr/bin/env sh
-#  $NetBSD: build.sh,v 1.83 2003/01/22 11:26:11 lukem Exp $
+#      $NetBSD: build.sh,v 1.84 2003/01/23 16:24:08 lukem Exp $
+#
+# Copyright (c) 2001-2003 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Todd Vierling and Luke Mewburn.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#        This product includes software developed by the NetBSD
+#        Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
 #
 # Top level build wrapper, for a system containing no tools.
 #
@@ -11,8 +46,10 @@
 # to take any further action.
 #
 
+progname=${0##*/}
+toppid=$$
 trap "exit 1" 1 2 3 15
-toppid=$$
+
 bomb()
 {
        cat >&2 <<ERRORMESSAGE
@@ -24,79 +61,128 @@
        exit 1
 }
 
-cd "$(dirname $0)"
-[ -d usr.bin/make ] ||
-    bomb "build.sh must be run from the top source level"
-[ -f share/mk/bsd.own.mk ] ||
-    bomb "src/share/mk is missing; please re-fetch the source tree"
 
-uname_s=$(uname -s 2>/dev/null)
-uname_m=$(uname -m 2>/dev/null)
+initdefaults()
+{
+       cd "$(dirname $0)"
+       [ -d usr.bin/make ] ||
+           bomb "build.sh must be run from the top source level"
+       [ -f share/mk/bsd.own.mk ] ||
+           bomb "src/share/mk is missing; please re-fetch the source tree"
+
+       uname_s=$(uname -s 2>/dev/null)
+       uname_m=$(uname -m 2>/dev/null)
 
-# If $PWD is a valid name of the current directory, POSIX mandates that pwd
-# return it by default which causes problems in the presence of symlinks.
-# Unsetting PWD is simpler than changing every occurrence of pwd to use -P.
-#
-# XXX Except that doesn't work on Solaris.
-unset PWD
-if [ "${uname_s}" = "SunOS" ]; then
-       TOP=$(pwd -P)
-else
-       TOP=$(pwd)
-fi
+       # If $PWD is a valid name of the current directory, POSIX mandates
+       # that pwd return it by default which causes problems in the
+       # presence of symlinks.  Unsetting PWD is simpler than changing
+       # every occurrence of pwd to use -P.
+       #
+       # XXX Except that doesn't work on Solaris.
+       unset PWD
+       if [ "${uname_s}" = "SunOS" ]; then
+               TOP=$(pwd -P)
+       else
+               TOP=$(pwd)
+       fi
+
+       # Set defaults.
+       toolprefix=nb
+       MAKEFLAGS=
+       makeenv=
+       makewrapper=
+       runcmd=
+       operations=
+       removedirs=
+       do_expertmode=false



Home | Main Index | Thread Index | Old Index