Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Replace try_set_TOOLDIR with a new function, print_tooldir_m...
details: https://anonhg.NetBSD.org/src/rev/df4c35d6ef1d
branches: trunk
changeset: 747710:df4c35d6ef1d
user: apb <apb%NetBSD.org@localhost>
date: Sun Sep 27 22:02:41 2009 +0000
description:
Replace try_set_TOOLDIR with a new function, print_tooldir_make,
which does much of the same work but prints a result instead of
setting a global variable. Adjust the rebuildmake function to suit.
Improve the comments describing how we try to figure out whether
the existing tooldir make needs to be rebuilt.
diffstat:
build.sh | 131 +++++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 86 insertions(+), 45 deletions(-)
diffs (205 lines):
diff -r 701b17e6cbb1 -r df4c35d6ef1d build.sh
--- a/build.sh Sun Sep 27 21:50:48 2009 +0000
+++ b/build.sh Sun Sep 27 22:02:41 2009 +0000
@@ -1,5 +1,5 @@
#! /usr/bin/env sh
-# $NetBSD: build.sh,v 1.212 2009/09/27 18:08:24 apb Exp $
+# $NetBSD: build.sh,v 1.213 2009/09/27 22:02:41 apb Exp $
#
# Copyright (c) 2001-2009 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -901,19 +901,10 @@
esac
}
-# Try to set a value for TOOLDIR. This is difficult because of a cyclic
-# dependency: TOOLDIR may be affected by settings in /etc/mk.conf, so
-# we would like to use getmakevar to get the value of TOOLDIR, but we
-# can't use getmakevar before we have an up to date version of nbmake;
-# we might already have an up to date version of nbmake in TOOLDIR, but
-# we don't yet know where TOOLDIR is.
-#
-# In principle, we could break the cycle by building a copy of nbmake
-# in a temporary directory. However, people who use the default value
-# of TOOLDIR do not like to have nbmake rebuilt every time they run
-# build.sh.
-#
-# We try to please everybody as follows:
+# print_tooldir_make --
+# Try to find and print a path to an existing
+# ${TOOLDIR}/bin/${toolprefix}make, for use by rebuildmake() before a
+# new version of ${toolprefix}make has been built.
#
# * If TOOLDIR was set in the environment or on the command line, use
# that value.
@@ -925,14 +916,22 @@
# in the PATH (this might accidentally find a non-NetBSD version of
# make, which will lead to failure in the next step);
# * If a copy of make was found above, try to use it with
-# nobomb_getmakevar to find the correct value for TOOLDIR;
-# * If all else fails, leave TOOLDIR unset. Our caller is expected to
-# be able to cope with this. (For example, rebuildmake() handles it
-# by building nbmake in a temporary directory.)
+# nobomb_getmakevar to find the correct value for TOOLDIR, and believe the
+# result only if it's a directory that already exists;
+# * If a value of TOOLDIR was found above, and if
+# ${TOOLDIR}/bin/${toolprefix}make exists, print that value.
#
-try_set_TOOLDIR()
+print_tooldir_make()
{
- [ -n "${TOOLDIR}" ] && return
+ local possible_TOP_OBJ
+ local possible_TOOLDIR
+ local possible_make
+ local tooldir_make
+
+ if [ -n "${TOOLDIR}" ]; then
+ echo "${TOOLDIR}/bin/${toolprefix}make"
+ return 0
+ fi
# Set host_ostype to something like "NetBSD-4.5.6-i386". This
# is intended to match the HOST_OSTYPE variable in <bsd.own.mk>.
@@ -945,7 +944,7 @@
# Look in a few potential locations for
# ${possible_TOOLDIR}/bin/${toolprefix}make.
- # If we find it, then set guess_make.
+ # If we find it, then set possible_make.
#
# In the usual case (without interference from environment
# variables or /etc/mk.conf), <bsd.own.mk> should set TOOLDIR to
@@ -957,8 +956,6 @@
# the correct value. We also try a few other possibilities, but
# we do not replicate all the logic of <bsd.obj.mk>.
#
- local possible_TOP_OBJ
- local possible_TOOLDIR
for possible_TOP_OBJ in \
"${TOP_objdir}" \
"${MAKEOBJDIRPREFIX:+${MAKEOBJDIRPREFIX}${TOP}}" \
@@ -968,49 +965,93 @@
do
[ -n "${possible_TOP_OBJ}" ] || continue
possible_TOOLDIR="${possible_TOP_OBJ}/tooldir.${host_ostype}"
- guess_make="${possible_TOOLDIR}/bin/${toolprefix}make"
- if [ -x "${guess_make}" ]; then
+ possible_make="${possible_TOOLDIR}/bin/${toolprefix}make"
+ if [ -x "${possible_make}" ]; then
break
else
- unset guess_make
+ unset possible_make
fi
done
# If the above didn't work, search the PATH for a suitable
# ${toolprefix}make, nbmake, bmake, or make.
#
- : ${guess_make:=$(find_in_PATH ${toolprefix}make '')}
- : ${guess_make:=$(find_in_PATH nbmake '')}
- : ${guess_make:=$(find_in_PATH bmake '')}
- : ${guess_make:=$(find_in_PATH make '')}
+ : ${possible_make:=$(find_in_PATH ${toolprefix}make '')}
+ : ${possible_make:=$(find_in_PATH nbmake '')}
+ : ${possible_make:=$(find_in_PATH bmake '')}
+ : ${possible_make:=$(find_in_PATH make '')}
- # Use ${guess_make} with nobomb_getmakevar to try to find
- # the value of TOOLDIR. If this fails, unset TOOLDIR.
+ # At this point, we don't care whether possible_make is in the
+ # correct TOOLDIR or not; we simply want it to be usable by
+ # getmakevar to help us find the correct TOOLDIR.
+ #
+ # Use ${possible_make} with nobomb_getmakevar to try to find
+ # the value of TOOLDIR. Believe the result only if it's
+ # a directory that already exists and contains bin/${toolprefix}make.
#
- unset TOOLDIR
- if [ -x "${guess_make}" ]; then
- TOOLDIR=$(make="${guess_make}" nobomb_getmakevar TOOLDIR)
- [ $? -eq 0 -a -n "${TOOLDIR}" ] || unset TOOLDIR
+ if [ -x "${possible_make}" ]; then
+ possible_TOOLDIR="$(
+ make="${possible_make}" nobomb_getmakevar TOOLDIR
+ )"
+ if [ $? = 0 ] && [ -n "${possible_TOOLDIR}" ] \
+ && [ -d "${possible_TOOLDIR}" ];
+ then
+ tooldir_make="${possible_TOOLDIR}/bin/${toolprefix}make"
+ if [ -x "${tooldir_make}" ]; then
+ echo "${tooldir_make}"
+ return 0
+ fi
+ fi
fi
+ return 1
}
+# rebuildmake --
+# Rebuild nbmake in a temporary directory if necessary. Sets $make
+# to a path to the nbmake executable. Sets done_rebuildmake=true
+# if nbmake was rebuilt.
+#
+# There is a cyclic dependency between building nbmake and choosing
+# TOOLDIR: TOOLDIR may be affected by settings in /etc/mk.conf, so we
+# would like to use getmakevar to get the value of TOOLDIR; but we can't
+# use getmakevar before we have an up to date version of nbmake; we
+# might already have an up to date version of nbmake in TOOLDIR, but we
+# don't yet know where TOOLDIR is.
+#
+# The default value of TOOLDIR also depends on the location of the top
+# level object directory, so $(getmakevar TOOLDIR) invoked before or
+# after making the top level object directory may produce different
+# results.
+#
+# Strictly speaking, we should do the following:
+#
+# 1. build a new version of nbmake in a temporary directory;
+# 2. use the temporary nbmake to create the top level obj directory;
+# 3. use $(getmakevar TOOLDIR) with the temporary nbmake to
+# get the corect value of TOOLDIR;
+# 4. move the temporary nbake to ${TOOLDIR}/bin/nbmake.
+#
+# However, people don't like building nbmake unnecessarily if their
+# TOOLDIR has not changed since an earlier build. We try to avoid
+# rebuilding a temporary version of nbmake by taking some shortcuts to
+# guess a value for TOOLDIR, looking for an existing version of nbmake
+# in that TOOLDIR, and checking whether that nbmake is newer than the
+# sources used to build it.
+#
rebuildmake()
{
- # Test make source file timestamps against installed ${toolprefix}make
- # binary, if TOOLDIR is pre-set or if try_set_TOOLDIR can set it.
- #
- try_set_TOOLDIR
- make="${TOOLDIR:-\$TOOLDIR}/bin/${toolprefix}make"
- if [ -n "$TOOLDIR" ] && [ -x "${make}" ]; then
+ make="$(print_tooldir_make)"
+ if [ -n "${make}" ] && [ -x "${make}" ]; then
for f in usr.bin/make/*.[ch] usr.bin/make/lst.lib/*.[ch]; do
if [ "${f}" -nt "${make}" ]; then
- statusmsg "${make} outdated (older than ${f}), needs building."
+ statusmsg "${make} outdated" \
+ "(older than ${f}), needs building."
do_rebuildmake=true
break
fi
done
else
- statusmsg "No ${make}, needs building."
+ statusmsg "No \$TOOLDIR/bin/${toolprefix}make, needs building."
do_rebuildmake=true
fi
@@ -1244,7 +1285,7 @@
eval cat <<EOF ${makewrapout}
#! ${HOST_SH}
# Set proper variables to allow easy "make" building of a NetBSD subtree.
-# Generated from: \$NetBSD: build.sh,v 1.212 2009/09/27 18:08:24 apb Exp $
+# Generated from: \$NetBSD: build.sh,v 1.213 2009/09/27 22:02:41 apb Exp $
# with these arguments: ${_args}
#
Home |
Main Index |
Thread Index |
Old Index