summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjb <jb@FreeBSD.org>1998-08-31 01:08:08 +0000
committerjb <jb@FreeBSD.org>1998-08-31 01:08:08 +0000
commit06541112167221c4cd76ef7502524b9fe1d66d98 (patch)
tree37f3a150c188e9f19281dea1d96a9b74e37f4848
parent7c39d735ef60c1a0050824f6964f41d1029f4820 (diff)
downloadFreeBSD-src-06541112167221c4cd76ef7502524b9fe1d66d98.zip
FreeBSD-src-06541112167221c4cd76ef7502524b9fe1d66d98.tar.gz
E-day build system changes.
- Moved most of the guts of Makefile to Makefile.inc1 to become the backend for the build system. - The new Makefile doesn't suffer from problems including the wrong sys.mk because it doesn't use anything in there or bsd.own.mk. So, from now on, the proper build command is just `make world' (or buildworld). - The intermediate makefiles called Makefile.inc0 and Makefile.upgrade fiddle with the OBJFORMAT and MAKEOBJDIRPREFIX variables so that both aout and elf object trees can coexist. Makefile.upgrade contains the aout->elf transition build. - A cross build environment is now very close to reality. Specifying TOOLDIR, setting OBJFORMAT and MAKEOBJDIRPREFIX allow that. See the comments in Makefile for more info.
-rw-r--r--Makefile930
-rw-r--r--Makefile.inc0109
-rw-r--r--Makefile.inc1961
-rw-r--r--Makefile.upgrade230
4 files changed, 1393 insertions, 837 deletions
diff --git a/Makefile b/Makefile
index b65fe8f..4f6f61b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,875 +1,131 @@
#
-# $Id: Makefile,v 1.209 1998/08/04 17:13:38 bde Exp $
-#
-# While porting to the another architecture include the bootstrap instead
-# of the normal build.
-#
-.if exists(${.CURDIR}/Makefile.${MACHINE}) && defined(BOOTSTRAP_WORLD)
-.include "${.CURDIR}/Makefile.${MACHINE}"
-.else
-#
-# Make command line options:
-# -DCLOBBER will remove /usr/include
-# -DMAKE_KERBEROS4 to build KerberosIV
-# -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
-# -DNOCLEAN do not clean at all
-# -DNOTOOLS do not rebuild any tools first
-# -DNOCRYPT will prevent building of crypt versions
-# -DNOLKM do not build loadable kernel modules
-# -DNOOBJDIR do not run ``${MAKE} obj''
-# -DNOPROFILE do not build profiled libraries
-# -DNOSECURE do not go into secure subdir
-# -DNOGAMES do not go into games subdir
-# -DNOSHARE do not go into share subdir
-# -DNOINFO do not make or install info files
-# -DNOLIBC_R do not build libc_r.
-# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
-
+# $Id$
#
-# The intended user-driven targets are:
-# buildworld - rebuild *everything*, including glue to help do upgrades
-# installworld- install everything built by "buildworld"
-# world - buildworld + installworld
-# update - convenient way to update your source tree (eg: sup/cvs)
-# most - build user commands, no libraries or include files
-# installmost - install user commands, no libraries or include files
-#
-# Standard targets (not defined here) are documented in the makefiles in
-# /usr/share/mk. These include:
-# obj depend all install clean cleandepend cleanobj
-
-.if (!make(world)) && (!make(buildworld)) && (!make(installworld))
-.MAKEFLAGS:= -m ${.CURDIR}/share/mk ${.MAKEFLAGS}
-.endif
-
+# The user-driven targets are:
#
-# Pick up any macros that are defined in the src-relative bsd.own.mk
-# but not in the "system" bsd.own.mk. The "system" version has
-# unfortunately already been included by the "system" sys.mk, so this
-# only works for new macros. First undefine old macros that cause
-# problems.
+# buildworld - Rebuild *everything*, including glue to help do
+# upgrades.
+# installworld - Install everything built by "buildworld".
+# world - buildworld + installworld.
+# update - Convenient way to update your source tree (cvs).
+# most - Build user commands, no libraries or include files.
+# installmost - Install user commands, no libraries or include files.
+# aout-to-elf - Upgrade an system from a.out to elf format (see below).
+# aout-to-elf-build - Build everything required to upgrade a system from
+# a.out to elf format (see below).
+# aout-to-elf-install - Install everything built by aout-to-elf-build (see
+# below).
#
-.undef LIBDIR
-.include "${.CURDIR}/share/mk/bsd.own.mk"
-
-# Put initial settings here.
-SUBDIR=
-
-# We must do share/info early so that installation of info `dir'
-# entries works correctly. Do it first since it is less likely to
-# grow dependencies on include and lib than vice versa.
-.if exists(share/info)
-SUBDIR+= share/info
-.endif
-
-# We must do include and lib early so that the perl *.ph generation
-# works correctly as it uses the header files installed by this.
-.if exists(include)
-SUBDIR+= include
-.endif
-.if exists(lib)
-SUBDIR+= lib
-.endif
-
-.if exists(bin)
-SUBDIR+= bin
-.endif
-.if exists(games) && !defined(NOGAMES)
-SUBDIR+= games
-.endif
-.if exists(gnu)
-SUBDIR+= gnu
-.endif
-.if exists(kerberosIV) && exists(crypto) && !defined(NOCRYPT) && \
- defined(MAKE_KERBEROS4)
-SUBDIR+= kerberosIV
-.endif
-.if exists(libexec)
-SUBDIR+= libexec
-.endif
-.if exists(sbin)
-SUBDIR+= sbin
-.endif
-.if exists(share) && !defined(NOSHARE)
-SUBDIR+= share
-.endif
-.if exists(sys)
-SUBDIR+= sys
-.endif
-.if exists(usr.bin)
-SUBDIR+= usr.bin
-.endif
-.if exists(usr.sbin)
-SUBDIR+= usr.sbin
-.endif
-.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
-SUBDIR+= secure
-.endif
-.if exists(lkm) && !defined(NOLKM)
-SUBDIR+= lkm
-.endif
-
-# etc must be last for "distribute" to work
-.if exists(etc)
-SUBDIR+= etc
-.endif
-
-# These are last, since it is nice to at least get the base system
-# rebuilt before you do them.
-.if defined(LOCAL_DIRS)
-.for _DIR in ${LOCAL_DIRS}
-.if exists(${_DIR}) & exists(${_DIR}/Makefile)
-SUBDIR+= ${_DIR}
-.endif
-.endfor
-.endif
-
-# Handle -DNOOBJDIR, -DNOCLEAN and -DNOCLEANDIR
-.if defined(NOOBJDIR)
-OBJDIR=
-.else
-OBJDIR= obj
-.endif
-
-.if defined(NOCLEAN)
-CLEANDIR=
-.else
-.if defined(NOCLEANDIR)
-CLEANDIR= clean cleandepend
-.else
-CLEANDIR= cleandir
-.endif
-.endif
-
-.if !defined(NOCLEAN)
-_NODEPEND= true
-.endif
-.if defined(_NODEPEND)
-_DEPEND= cleandepend
-.else
-_DEPEND= depend
-.endif
-
-SUP?= cvsup
-SUPFLAGS?= -g -L 2 -P -
-
+# This makefile is simple by design. The FreeBSD make automatically reads
+# the /usr/share/mk/sys.mk unless the -m argument is specified on the
+# command line. By keeping this makefile simple, it doesn't matter too
+# much how different the installed mk files are from those in the source
+# tree. This makefile executes a child make process, forcing it to use
+# the mk files from the source tree which are supposed to DTRT.
#
-# While building tools for bootstrapping, we don't need to waste time on
-# shared or profiled libraries, shared linkage, or documentation, except
-# when the tools won't get cleaned we must use the defaults for shared
-# libraries and shared linkage (and this doesn't waste time).
-# XXX actually, we do need to waste time building shared libraries.
-#
-.if defined(NOCLEAN)
-MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE
-.else
-MK_FLAGS= -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED
-.endif
-
+# The user-driven targets (as listed above) are implemented in Makefile.inc0
+# and the private targets are in Makefile.inc1. These are kept separate
+# to help the bootstrap build from aout to elf format.
#
-# world
-#
-# Attempt to rebuild and reinstall *everything*, with reasonable chance of
-# success, regardless of how old your existing system is.
-#
-# >> Beware, it overwrites the local build environment! <<
-#
-world:
- @echo "--------------------------------------------------------------"
- @echo "make world started on `LC_TIME=C date`"
- @echo "--------------------------------------------------------------"
-.if target(pre-world)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Making 'pre-world' target"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${MAKE} pre-world
-.endif
- cd ${.CURDIR}; ${MAKE} buildworld
- cd ${.CURDIR}; ${MAKE} -B installworld
-.if target(post-world)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Making 'post-world' target"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${MAKE} post-world
-.endif
- @echo
- @echo "--------------------------------------------------------------"
- @echo "make world completed on `LC_TIME=C date`"
- @echo "--------------------------------------------------------------"
-
-.if defined(MAKEOBJDIRPREFIX)
-WORLDTMP= ${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
-.else
-WORLDTMP= /usr/obj${.CURDIR}/tmp
-.endif
-STRICTTMPPATH= ${WORLDTMP}/sbin:${WORLDTMP}/usr/sbin:${WORLDTMP}/bin:${WORLDTMP}/usr/bin
-TMPPATH= ${STRICTTMPPATH}:${PATH}
-
-# XXX COMPILER_PATH is needed for finding cc1, ld and as
-# XXX GCC_EXEC_PREFIX is for *crt.o. It is probably unnecessary now
-# that LIBRARY_PATH is set. We still can't use -nostdlib, since gcc
-# wouldn't link *crt.o or libgcc if it were used.
-# XXX LD_LIBRARY_PATH is for ld.so. It is also used by ld, although we don't
-# want that - all compile-time library paths should be resolved by gcc.
-# It fails for set[ug]id executables (are any used?).
-COMPILER_ENV= BISON_SIMPLE=${WORLDTMP}/usr/share/misc/bison.simple \
- COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \
- GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \
- LD_LIBRARY_PATH=${WORLDTMP}${SHLIBDIR} \
- LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
-
-BMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \
- OBJFORMAT_PATH=${WORLDTMP}/usr/libexec:/usr/libexec
-XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
- OBJFORMAT_PATH=${WORLDTMP}/usr/libexec \
- CFLAGS="-nostdinc ${CFLAGS}" # XXX -nostdlib
-
-# used to compile and install 'make' in temporary build tree
-MAKETMP= ${WORLDTMP}/make
-IBMAKE= ${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
-# bootstrap make
-BMAKE= ${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
-# cross make used for compilation
-XMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
-# cross make used for final installation
-IXMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make
-
+# For novices wanting to build from current sources, the simple instructions
+# are:
#
-# buildworld
-#
-# Attempt to rebuild the entire system, with reasonable chance of
-# success, regardless of how old your existing system is.
-#
-buildworld:
-.if !defined(NOCLEAN)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Cleaning up the temporary build tree"
- @echo "--------------------------------------------------------------"
- mkdir -p ${WORLDTMP}
- chflags -R noschg ${WORLDTMP}/
- rm -rf ${WORLDTMP}
-.endif
-.if !defined(NOTOOLS)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Making make"
- @echo "--------------------------------------------------------------"
- mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP}
- ( \
- cd ${.CURDIR}/usr.bin/make; \
- MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
- ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all; \
- ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \
- ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \
- )
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Making mtree"
- @echo "--------------------------------------------------------------"
- mkdir -p ${WORLDTMP}/usr/sbin ${WORLDTMP}/mtree
- ( \
- cd ${.CURDIR}/usr.sbin/mtree; \
- MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
- export MAKEOBJDIR=${WORLDTMP}/mtree; \
- ${BMAKE} ${MK_FLAGS} all; \
- ${BMAKE} ${MK_FLAGS} -B install clean \
- )
-.endif
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Making hierarchy"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} hierarchy
-.if !defined(NOCLEAN)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Cleaning up the obj tree"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} ${CLEANDIR:S/^/par-/}
-.endif
-.if !defined(NOOBJDIR)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding the obj tree"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} par-${OBJDIR}
-.endif
-.if !defined(NOTOOLS)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding bootstrap tools"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} bootstrap
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding tools necessary to build the include files"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} include-tools
-.endif
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding ${DESTDIR}/usr/include"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; SHARED=copies ${BMAKE} includes
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding bootstrap libraries"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} bootstrap-libraries
-.if !defined(NOTOOLS)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding tools needed to build libraries"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} lib-tools
-.endif
-.if !defined(NOTOOLS)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding all other tools needed to build the world"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${BMAKE} build-tools
-.endif
-.if !defined(_NODEPEND)
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding dependencies"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} par-depend
-.endif
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Building libraries"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN libraries
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Building everything.."
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} all
-
+# 1. Ensure that your /usr/obj directory has at least 165 Mb of free space.
+# 2. `cd /usr/src' (or to the directory containing your source tree).
+# 3. `make world'
#
-# installworld
+# Be warned, this will update your installed system, except for configuration
+# files in the /etc directory. You have to do those manually.
#
-# Installs everything compiled by a 'buildworld'.
+# If at first you're a little nervous about having a `make world' update
+# your system, a `make buildworld' will build everything in the /usr/obj
+# tree without touching your installed system. To be of any further use
+# though, a `make installworld' is required.
#
-installworld:
- cd ${.CURDIR}; ${IXMAKE} reinstall
-
+# The `make world' process always follows the installed object format.
+# This is set by creating /etc/objformat containing either OBJFORMAT=aout
+# or OBJFORMAT=elf. If this file does not exist, the object format defaults
+# to aout. This is expected to be changed to elf just prior to the release
+# or 3.0. If OBJFORMAT is set as an environment variable or in /etc/make.conf,
+# this overrides /etc/objformat.
#
-# reinstall
-#
-# If you have a build server, you can NFS mount the source and obj directories
-# and do a 'make reinstall' on the *client* to install new binaries from the
-# most recent server build.
-#
-reinstall:
- @echo "--------------------------------------------------------------"
- @echo " Making hierarchy"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${MAKE} hierarchy
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Installing everything.."
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${MAKE} install
-.if ${MACHINE_ARCH} == "i386"
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Re-scanning the shared libraries.."
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; /sbin/ldconfig -R
-.endif
- @echo
- @echo "--------------------------------------------------------------"
- @echo " Rebuilding man page indexes"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}/share/man; ${MAKE} makedb
-
+# Unless -DNOAOUT is specified, a `make world' with OBJFORMAT=elf will
+# update the legacy support for aout. This includes all libraries, ld.so,
+# lkms and boot objects. This part of build should be regarded as
+# deprecated and you should _not_ expect to be able to do this past the
+# release of 3.1. You have exactly one major release to move entirely
+# to elf.
#
-# update
-#
-# Update the source tree, by running sup and/or running cvs to update to the
-# latest copy.
-#
-update:
-.if defined(SUP_UPDATE)
- @echo "--------------------------------------------------------------"
- @echo "Running ${SUP}"
- @echo "--------------------------------------------------------------"
- @${SUP} ${SUPFLAGS} ${SUPFILE}
-.if defined(SUPFILE1)
- @${SUP} ${SUPFLAGS} ${SUPFILE1}
-.endif
-.if defined(SUPFILE2)
- @${SUP} ${SUPFLAGS} ${SUPFILE2}
-.endif
-.endif
-.if defined(CVS_UPDATE)
- @echo "--------------------------------------------------------------"
- @echo "Updating /usr/src from cvs repository" ${CVSROOT}
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}; cvs -q update -P -d
-.endif
-
-#
-# most
-#
-# Build most of the user binaries on the existing system libs and includes.
-#
-most:
- @echo "--------------------------------------------------------------"
- @echo " Building programs only"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}/bin; ${MAKE} all
- cd ${.CURDIR}/sbin; ${MAKE} all
- cd ${.CURDIR}/libexec; ${MAKE} all
- cd ${.CURDIR}/usr.bin; ${MAKE} all
- cd ${.CURDIR}/usr.sbin; ${MAKE} all
- cd ${.CURDIR}/gnu/libexec; ${MAKE} all
- cd ${.CURDIR}/gnu/usr.bin; ${MAKE} all
- cd ${.CURDIR}/gnu/usr.sbin; ${MAKE} all
-#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
-# cd ${.CURDIR}/kerberosIV; ${MAKE} most
-#.endif
-#.if !defined(NOSECURE) && !defined(NOCRYPT)
-# cd ${.CURDIR}/secure; ${MAKE} most
-#.endif
-
+# ----------------------------------------------------------------------------
#
-# installmost
-#
-# Install the binaries built by the 'most' target. This does not include
-# libraries or include files.
-#
-installmost:
- @echo "--------------------------------------------------------------"
- @echo " Installing programs only"
- @echo "--------------------------------------------------------------"
- cd ${.CURDIR}/bin; ${MAKE} install
- cd ${.CURDIR}/sbin; ${MAKE} install
- cd ${.CURDIR}/libexec; ${MAKE} install
- cd ${.CURDIR}/usr.bin; ${MAKE} install
- cd ${.CURDIR}/usr.sbin; ${MAKE} install
- cd ${.CURDIR}/gnu/libexec; ${MAKE} install
- cd ${.CURDIR}/gnu/usr.bin; ${MAKE} install
- cd ${.CURDIR}/gnu/usr.sbin; ${MAKE} install
-#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
-# cd ${.CURDIR}/kerberosIV; ${MAKE} installmost
-#.endif
-#.if !defined(NOSECURE) && !defined(NOCRYPT)
-# cd ${.CURDIR}/secure; ${MAKE} installmost
-#.endif
-
+# Upgrading an i386 system from a.out to elf format
#
-# ------------------------------------------------------------------------
#
-# From here onwards are utility targets used by the 'make world' and
-# related targets. If your 'world' breaks, you may like to try to fix
-# the problem and manually run the following targets to attempt to
-# complete the build. Beware, this is *not* guaranteed to work, you
-# need to have a pretty good grip on the current state of the system
-# to attempt to manually finish it. If in doubt, 'make world' again.
+# The aout->elf transition build is performed by doing a `make aout-to-elf'
+# or a `make aout-to-elf-build' followed by a `make aout-to-elf-install'.
+# You need to have at least 320 Mb of free space for the object tree.
#
-
+# The upgrade process checks the installed release. If this is 3.0-CURRENT,
+# it is assumed that your kernel contains all the syscalls required by the
+# current sources.
#
-# heirarchy - ensure that all the needed directories are present
+# For installed systems where `uname -r' reports something other than
+# 3.0-CURRENT, the upgrade process expects to build a kernel using the
+# kernel configuration file sys/i386/conf/GENERICupgrade. This file is
+# defaulted to the GENERIC kernel configuration file on the assumption that
+# it will be suitable for most systems. Before performing the upgrade,
+# replace sys/i386/conf/GENERICupgrade with your own version if your
+# hardware requires a different configuration.
#
-hierarchy:
- cd ${.CURDIR}/etc; ${MAKE} distrib-dirs
-
+# The upgrade procedure will stop and ask for confirmation to proceed
+# several times. On each occasion, you can type Ctrl-C to abort the
+# upgrade.
#
-# bootstrap - [re]build tools needed to run the actual build, this includes
-# tools needed by 'make depend', as some tools are needed to generate source
-# for the dependency information to be gathered from.
-#
-bootstrap:
-.if defined(DESTDIR)
- rm -f ${DESTDIR}/usr/src/sys
- ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src
- cd ${.CURDIR}/include; find -dx . | cpio -dump ${DESTDIR}/usr/include
-.for d in net netinet posix4 sys vm machine
- if [ -h ${DESTDIR}/usr/include/$d ]; then \
- rm -f ${DESTDIR}/usr/include/$d ; \
- fi
-.endfor
- cd ${.CURDIR}/sys; \
- find -dx net netinet posix4 sys vm -name '*.h' -o -type d | \
- cpio -dump ${DESTDIR}/usr/include
- mkdir -p ${DESTDIR}/usr/include/machine
- cd ${.CURDIR}/sys/${MACHINE_ARCH}/include; find -dx . -name '*.h' -o -type d | \
- cpio -dump ${DESTDIR}/usr/include/machine
-.endif
- cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
- cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
- cd ${.CURDIR}/usr.bin/yacc; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
- cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \
- ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} -DNOLIB all; \
- ${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
-.if !defined(NOOBJDIR)
- cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR}
-.endif
- cd ${.CURDIR}/usr.sbin/mtree; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
-.if defined(DESTDIR)
- cd ${.CURDIR}/include && ${MAKE} copies
-.endif
-
+# At the end of the upgrade procedure, /etc/objformat is created or
+# updated to contain OBJFORMAT=elf. From then on, you're elf by default.
#
-# include-tools - generally the same as 'bootstrap', except that it's for
-# things that are specifically needed to generate include files.
+# ----------------------------------------------------------------------------
#
-# XXX should be merged with bootstrap, it's not worth keeeping them separate.
-# Well, maybe it is now. We force 'cleandepend' here to avoid dependencies
-# on cleaned away headers in ${WORLDTMP}.
#
-include-tools:
-.for d in usr.bin/compile_et usr.bin/rpcgen
- cd ${.CURDIR}/$d; ${MAKE} cleandepend; \
- ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
-.endfor
-
+# Define the user-driven targets. These are listed here in alphabetical
+# order, but that's not important.
#
-# includes - possibly generate and install the include files.
-#
-includes:
-.if defined(CLOBBER)
- rm -rf ${DESTDIR}/usr/include/*
- mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
- -p ${DESTDIR}/usr/include
-.endif
- cd ${.CURDIR}/include; ${MAKE} -B all install
- cd ${.CURDIR}/gnu/include; ${MAKE} install
- cd ${.CURDIR}/gnu/lib/libmp; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libobjc; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libreadline; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libregex; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libstdc++; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libg++; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libdialog; ${MAKE} beforeinstall
- cd ${.CURDIR}/gnu/lib/libgmp; ${MAKE} beforeinstall
-.if exists(secure) && !defined(NOCRYPT)
- cd ${.CURDIR}/secure/lib/libdes; ${MAKE} beforeinstall
-.endif
-.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
- cd ${.CURDIR}/kerberosIV/lib/libacl; ${MAKE} beforeinstall
- cd ${.CURDIR}/kerberosIV/lib/libkadm; ${MAKE} beforeinstall
- cd ${.CURDIR}/kerberosIV/lib/libkafs; ${MAKE} beforeinstall
- cd ${.CURDIR}/kerberosIV/lib/libkdb; ${MAKE} beforeinstall
- cd ${.CURDIR}/kerberosIV/lib/libkrb; ${MAKE} beforeinstall
- cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall
-.else
- cd ${.CURDIR}/lib/libtelnet; ${MAKE} beforeinstall
-.endif
-.if exists(${.CURDIR}/lib/csu/${MACHINE})
- cd ${.CURDIR}/lib/csu/${MACHINE}; ${MAKE} beforeinstall
-.endif
- cd ${.CURDIR}/lib/libalias; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libc; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libcalendar; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libcurses; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libdisk; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libedit; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libftpio; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libmd; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libmytinfo; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libncurses; ${MAKE} beforeinstall
-.if !defined(WANT_CSRG_LIBM)
- cd ${.CURDIR}/lib/msun; ${MAKE} beforeinstall
-.endif
- cd ${.CURDIR}/lib/libopie; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libpcap; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/librpcsvc; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libskey; ${MAKE} beforeinstall
-.if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \
- exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl)
- cd ${.CURDIR}/lib/libtcl; ${MAKE} installhdrs
-.endif
- cd ${.CURDIR}/lib/libtermcap; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libcom_err; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libss; ${MAKE} -B hdrs beforeinstall
- cd ${.CURDIR}/lib/libscsi; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libutil; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libvgl; ${MAKE} beforeinstall
- cd ${.CURDIR}/lib/libz; ${MAKE} beforeinstall
- cd ${.CURDIR}/usr.bin/f2c; ${MAKE} beforeinstall
- cd ${.CURDIR}/usr.bin/lex; ${MAKE} beforeinstall
+TGTS = all buildworld depend everything includes installmost install \
+ installworld most obj update world
#
-# Declare tools if they are not required on all architectures.
-#
-.if ${MACHINE_ARCH} == "i386"
-# aout tools:
-_aout_ar = usr.bin/ar
-_aout_as = gnu/usr.bin/as
-_aout_ld = gnu/usr.bin/ld
-_aout_nm = usr.bin/nm
-_aout_ranlib = usr.bin/ranlib
-_aout_size = usr.bin/size
-_aout_strip = usr.bin/strip
-.endif
-
+# Handle the user-driven targets, using the source relative mk files.
#
-# lib-tools - build tools to compile and install the libraries.
-#
-# XXX gperf is required for cc
-# XXX a new ld and tsort is required for cc
-lib-tools:
-.for d in \
- gnu/usr.bin/gperf \
- ${_aout_ld} \
- usr.bin/tsort \
- ${_aout_as} \
- gnu/usr.bin/bison \
- gnu/usr.bin/cc \
- ${_aout_ar} \
- usr.bin/env \
- usr.bin/lex/lib \
- usr.bin/mk_cmds \
- ${_aout_nm} \
- ${_aout_ranlib} \
- ${_aout_strip} \
- gnu/usr.bin/binutils \
- usr.bin/uudecode \
- usr.bin/objformat
- cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install; \
- ${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
-.endfor
+${TGTS} : upgrade_checks
+ @cd ${.CURDIR}; \
+ make -f Makefile.inc0 -m ${.CURDIR}/share/mk ${.TARGET}
#
-# We have to know too much about ordering and subdirs in the lib trees:
+# Perform a few tests to determine if the installed tools are adequate
+# for building the world. These are for older systems (prior to 2.2.5).
#
-# To satisfy shared library linkage when only the libraries being built
-# are visible:
+# From 2.2.5 onwards, the installed tools will pass these upgrade tests,
+# so the normal make world is capable of doing what is required to update
+# the system to current.
#
-# libcom_err must be built before libss.
-# libcrypt and libmd must be built before libskey.
-# libm must be built before libtcl.
-# libmytinfo must be built before libdialog and libncurses.
-# libncurses must be built before libdialog.
-# libtermcap must be built before libcurses, libedit and libreadline.
+upgrade_checks :
+ @cd ${.CURDIR}; if `make -m ${.CURDIR}/share/mk test > /dev/null 2>&1`; then ok=1; else make -f Makefile.upgrade make; fi;
+
#
-# Some libraries are built conditionally and/or are in inconsistently
-# named directories:
+# A simple test target used as part of the test to see if make supports
+# the -m argument.
#
-.if exists(lib/csu/${MACHINE}.pcc)
-_csu=lib/csu/${MACHINE}.pcc
-.else
-_csu=lib/csu/${MACHINE}
-.endif
-
-.if !defined(NOSECURE) && !defined(NOCRYPT)
-_libcrypt= secure/lib/libcrypt lib/libcrypt
-.else
-_libcrypt= lib/libcrypt
-.endif
-
-.if defined(WANT_CSRG_LIBM)
-_libm= lib/libm
-.else
-_libm= lib/msun
-.endif
+test :
#
-# bootstrap-libraries - build just enough libraries for the bootstrap
-# tools, and install them under ${WORLDTMP}.
-#
-# Build csu and libgcc early so that some tools get linked to the new
-# versions (too late for the main tools, however). Then build the
-# necessary prerequisite libraries (libtermcap just needs to be before
-# libcurses, and this only matters for the NOCLEAN case when NOPIC is
-# not set).
-#
-# This is mostly wrong. The build tools must run on the host system,
-# so they should use host libraries. We depend on the target being
-# similar enough to the host for new target libraries to work on the
-# host.
-#
-bootstrap-libraries:
-.for _lib in ${_csu} gnu/usr.bin/cc/libgcc lib/libtermcap \
- gnu/lib/libregex gnu/lib/libreadline lib/libc \
- ${_libcrypt} lib/libcurses lib/libedit ${_libm} \
- lib/libmd lib/libutil lib/libz usr.bin/lex/lib
-.if exists(${.CURDIR}/${_lib})
- cd ${.CURDIR}/${_lib}; \
- ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
- ${MAKE} ${MK_FLAGS} all; \
- ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
-.endif
-.endfor
-
+# Define the upgrade targets. These are listed here in alphabetical
+# order, but that's not important.
#
-# libraries - build all libraries, and install them under ${DESTDIR}.
-#
-# The ordering is not as special as for bootstrap-libraries. Build
-# the prerequisites first, then build almost everything else in
-# alphabetical order.
-#
-libraries:
-.for _lib in lib/libcom_err ${_libcrypt} ${_libm} lib/libmytinfo \
- lib/libncurses lib/libtermcap \
- gnu/lib gnu/usr.bin/cc/libgcc lib usr.bin/lex/lib usr.sbin/pcvt/keycap
-.if exists(${.CURDIR}/${_lib})
- cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install
-.endif
-.endfor
-.if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE)
- cd ${.CURDIR}/secure/lib; ${MAKE} all; ${MAKE} -B install
-.endif
-.if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \
- defined(MAKE_KERBEROS4)
- cd ${.CURDIR}/kerberosIV/lib; ${MAKE} all; ${MAKE} -B install
-.endif
+UPGRADE = aout-to-elf aout-to-elf-build aout-to-elf-install
#
-# Exclude unused tools from build-tools.
-#
-.if !defined(NOGAMES) && exists(${.CURDIR}/games)
-_adventure= games/adventure
-_caesar= games/caesar
-_hack= games/hack
-_phantasia= games/phantasia
-_strfile= games/fortune/strfile
-.endif
-.if !defined(NOPERL)
-_perl= gnu/usr.bin/perl/perl
-.endif
-.if !defined(NOSHARE) && exists(${.CURDIR}/share)
-_scrnmaps= share/syscons/scrnmaps
-.endif
-.if !defined(NOLKM) && exists(${.CURDIR}/lkm)
-_linux= lkm/linux
-.endif
-
-BTMAKEFLAGS= ${MK_FLAGS} -D_BUILD_TOOLS
-
+# Handle the upgrade targets, using the source relative mk files.
#
-# build-tools - build and install any other tools needed to complete the
-# compile and install.
-# ifdef stale
-# bc and cpp are required to build groff. Otherwise, the order here is
-# mostly historical, i.e., bogus.
-# chmod is used to build gcc's tmpmultilib[2] at obscure times.
-# endif stale
-# XXX uname is a bug - the target should not depend on the host.
-#
-build-tools:
-.for d in \
- bin/cat \
- bin/chmod \
- bin/cp \
- bin/date \
- bin/dd \
- bin/echo \
- bin/expr \
- bin/hostname \
- bin/ln \
- bin/ls \
- bin/mkdir \
- bin/mv \
- bin/rm \
- bin/test \
- ${_caesar} \
- ${_strfile} \
- gnu/usr.bin/awk \
- gnu/usr.bin/bc \
- gnu/usr.bin/grep \
- gnu/usr.bin/groff \
- gnu/usr.bin/gzip \
- gnu/usr.bin/man/makewhatis \
- gnu/usr.bin/patch \
- ${_perl} \
- gnu/usr.bin/sort \
- gnu/usr.bin/texinfo \
- usr.bin/basename \
- usr.bin/cap_mkdb \
- usr.bin/chflags \
- usr.bin/cmp \
- usr.bin/col \
- usr.bin/colldef \
- usr.bin/cpp \
- usr.bin/expand \
- usr.bin/file2c \
- usr.bin/find \
- usr.bin/gencat \
- usr.bin/id \
- usr.bin/join \
- usr.bin/lorder \
- usr.bin/m4 \
- usr.bin/mkdep \
- usr.bin/mklocale \
- usr.bin/paste \
- usr.bin/sed \
- ${_aout_size} \
- usr.bin/soelim \
- usr.bin/symorder \
- usr.bin/touch \
- usr.bin/tr \
- usr.bin/true \
- usr.bin/uname \
- usr.bin/uuencode \
- usr.bin/vgrind \
- usr.bin/vi \
- usr.bin/wc \
- usr.bin/xargs \
- usr.bin/yacc \
- usr.sbin/chown \
- usr.sbin/mtree \
- usr.sbin/zic \
- bin/sh
- cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} ${_DEPEND}; \
- ${MAKE} ${BTMAKEFLAGS} all; \
- ${MAKE} ${BTMAKEFLAGS} -B install ${CLEANDIR} ${OBJDIR}
-.endfor
-.if !defined(NOGAMES) && exists(${.CURDIR}/games)
- cd ${DESTDIR}/usr/games; cp -p caesar strfile ${DESTDIR}/usr/bin
-.endif
-.for d in \
- bin/sh \
- ${_adventure} \
- ${_hack} \
- ${_phantasia} \
- gnu/usr.bin/cc/cc_tools \
- lib/libmytinfo \
- ${_linux} \
- ${_scrnmaps} \
- sys/i386/boot/netboot
- cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools
-.endfor
- cd ${.CURDIR}/usr.bin/tn3270/tools; ${MAKE} ${BTMAKEFLAGS} all
-
-.for __target in clean cleandepend cleandir depend obj
-.for entry in ${SUBDIR}
-${entry}.${__target}__D: .PHONY
- @if test -d ${.CURDIR}/${entry}.${MACHINE}; then \
- ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \
- edir=${entry}.${MACHINE}; \
- cd ${.CURDIR}/$${edir}; \
- else \
- ${ECHODIR} "===> ${DIRPRFX}${entry}"; \
- edir=${entry}; \
- cd ${.CURDIR}/$${edir}; \
- fi; \
- ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
-.endfor
-par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
-.endfor
-
-.endif
-
-.include <bsd.subdir.mk>
+${UPGRADE} : upgrade_checks
+ @cd ${.CURDIR}; \
+ make -f Makefile.upgrade -m ${.CURDIR}/share/mk ${.TARGET}
diff --git a/Makefile.inc0 b/Makefile.inc0
new file mode 100644
index 0000000..2be6fdf
--- /dev/null
+++ b/Makefile.inc0
@@ -0,0 +1,109 @@
+#
+# $Id$
+#
+# This makefile ensures that the object directory is set according to the
+# object format to avoid mixing aout and elf formatted files during the
+# transition period.
+#
+# >> Beware, this makefile overwrites the local build environment! <<
+#
+
+#
+# Build things relative to the user's preferred object directory,
+# defaulting to /usr/obj if not defined.
+#
+MAKEOBJDIRPREFIX?=/usr/obj
+
+#
+# Variables passed to make work better if they are set as environment
+# variables instead of command line options.
+#
+MK_ENV= MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${OBJFORMAT}
+
+#
+# We should always use the current set of mk files, not the installed ones.
+# This makefile is a wrapper for the backend makefile (Makefile.inc1).
+#
+MAKE= make -m ${.CURDIR}/share/mk -f Makefile.inc1
+
+#
+# These are the backend targets.
+#
+BKTGTS= all depend everything includes install installmost most obj update
+
+
+#
+# A generic rule for the backend targets.
+#
+${BKTGTS} :
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} ${.TARGET}
+
+#
+# Temporary path and environment for the legacy build.
+#
+ELFTMPPATH= ${MAKEOBJDIRPREFIX}/elf${.CURDIR}/tmp/sbin:${MAKEOBJDIRPREFIX}/elf${.CURDIR}/tmp/bin:${MAKEOBJDIRPREFIX}/elf${.CURDIR}/tmp/usr/sbin:${MAKEOBJDIRPREFIX}/elf${.CURDIR}/tmp/usr/bin:${MAKEOBJDIRPREFIX}/elf${.CURDIR}/tmp/usr/games
+LEGACY_ENV= MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
+ PATH=${ELFTMPPATH} OBJFORMAT=aout NOTOOLS=1 \
+ TOOLROOT=${MAKEOBJDIRPREFIX}/elf${.CURDIR}/tmp
+
+#
+# world
+#
+# Attempt to rebuild and reinstall *everything*, with reasonable chance of
+# success, regardless of how old your existing system is. If building on
+# an i386/elf system, build the aout legacy cruft too.
+#
+world:
+ @echo "--------------------------------------------------------------"
+ @echo " ${OBJFORMAT} make world started on `LC_TIME=C date`"
+ @echo "--------------------------------------------------------------"
+.if target(pre-world)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Making 'pre-world' target"
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} pre-world
+.endif
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} buildworld
+.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "elf" && !defined(NOAOUT)
+ @cd ${.CURDIR}; ${LEGACY_ENV} ${MAKE} legacy-build
+.endif
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} -B installworld
+.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "elf" && !defined(NOAOUT)
+ @cd ${.CURDIR}; ${LEGACY_ENV} ${MAKE} legacy-install
+.endif
+.if target(post-world)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Making 'post-world' target"
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} post-world
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " ${OBJFORMAT} make world completed on `LC_TIME=C date`"
+ @echo "--------------------------------------------------------------"
+
+#
+# buildworld
+#
+# Build the world in the current object format, plus the legacy aout
+# support if the current object format is elf on i386.
+#
+buildworld :
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} buildworld
+.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "elf" && !defined(NOAOUT)
+ @cd ${.CURDIR}; ${LEGACY_ENV} ${MAKE} legacy-build
+.endif
+
+#
+# installworld
+#
+# Install the world in the current object format, plus the legacy aout
+# support if the current object format is elf on i386.
+#
+installworld :
+ @cd ${.CURDIR}; ${MK_ENV} ${MAKE} installworld
+.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "elf" && !defined(NOAOUT)
+ @cd ${.CURDIR}; ${LEGACY_ENV} ${MAKE} -DNOMAN -DNOINFO legacy-install
+.endif
diff --git a/Makefile.inc1 b/Makefile.inc1
new file mode 100644
index 0000000..2d04a86
--- /dev/null
+++ b/Makefile.inc1
@@ -0,0 +1,961 @@
+#
+# $Id: Makefile,v 1.209 1998/08/04 17:13:38 bde Exp $
+#
+# Make command line options:
+# -DCLOBBER will remove /usr/include
+# -DMAKE_KERBEROS4 to build KerberosIV
+# -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
+# -DNOCLEAN do not clean at all
+# -DNOTOOLS do not rebuild any tools first
+# -DNOCRYPT will prevent building of crypt versions
+# -DNOLKM do not build loadable kernel modules
+# -DNOPROFILE do not build profiled libraries
+# -DNOSECURE do not go into secure subdir
+# -DNOGAMES do not go into games subdir
+# -DNOSHARE do not go into share subdir
+# -DNOINFO do not make or install info files
+# -DNOLIBC_R do not build libc_r.
+# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
+
+#
+# The intended user-driven targets are:
+# buildworld - rebuild *everything*, including glue to help do upgrades
+# installworld- install everything built by "buildworld"
+# update - convenient way to update your source tree (eg: sup/cvs)
+# most - build user commands, no libraries or include files
+# installmost - install user commands, no libraries or include files
+#
+# Standard targets (not defined here) are documented in the makefiles in
+# /usr/share/mk. These include:
+# obj depend all install clean cleandepend cleanobj
+
+# Put initial settings here.
+SUBDIR=
+
+# We must do share/info early so that installation of info `dir'
+# entries works correctly. Do it first since it is less likely to
+# grow dependencies on include and lib than vice versa.
+.if exists(share/info)
+SUBDIR+= share/info
+.endif
+
+# We must do include and lib early so that the perl *.ph generation
+# works correctly as it uses the header files installed by this.
+.if exists(include)
+SUBDIR+= include
+.endif
+.if exists(lib)
+SUBDIR+= lib
+.endif
+
+.if exists(bin)
+SUBDIR+= bin
+.endif
+.if exists(games) && !defined(NOGAMES)
+SUBDIR+= games
+.endif
+.if exists(gnu)
+SUBDIR+= gnu
+.endif
+.if exists(kerberosIV) && exists(crypto) && !defined(NOCRYPT) && \
+ defined(MAKE_KERBEROS4)
+SUBDIR+= kerberosIV
+.endif
+.if exists(libexec)
+SUBDIR+= libexec
+.endif
+.if exists(sbin)
+SUBDIR+= sbin
+.endif
+.if exists(share) && !defined(NOSHARE)
+SUBDIR+= share
+.endif
+.if exists(sys)
+SUBDIR+= sys
+.endif
+.if exists(usr.bin)
+SUBDIR+= usr.bin
+.endif
+.if exists(usr.sbin)
+SUBDIR+= usr.sbin
+.endif
+.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
+SUBDIR+= secure
+.endif
+.if exists(lkm) && !defined(NOLKM) && ${OBJFORMAT} == "aout"
+SUBDIR+= lkm
+.endif
+
+# etc must be last for "distribute" to work
+.if exists(etc)
+SUBDIR+= etc
+.endif
+
+# These are last, since it is nice to at least get the base system
+# rebuilt before you do them.
+.if defined(LOCAL_DIRS)
+.for _DIR in ${LOCAL_DIRS}
+.if exists(${_DIR}) & exists(${_DIR}/Makefile)
+SUBDIR+= ${_DIR}
+.endif
+.endfor
+.endif
+
+OBJDIR= obj
+
+.if defined(NOCLEAN)
+CLEANDIR=
+.else
+.if defined(NOCLEANDIR)
+CLEANDIR= clean cleandepend
+.else
+CLEANDIR= cleandir
+.endif
+.endif
+
+.if !defined(NOCLEAN)
+_NODEPEND= true
+.endif
+.if defined(_NODEPEND)
+_DEPEND= cleandepend
+.else
+_DEPEND= depend
+.endif
+
+SUP?= cvsup
+SUPFLAGS?= -g -L 2 -P -
+
+#
+# While building tools for bootstrapping, we don't need to waste time on
+# shared or profiled libraries, shared linkage, or documentation, except
+# when the tools won't get cleaned we must use the defaults for shared
+# libraries and shared linkage (and this doesn't waste time).
+# XXX actually, we do need to waste time building shared libraries.
+#
+.if defined(NOCLEAN)
+MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE
+.else
+MK_FLAGS= -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED
+.endif
+
+#
+# Define the location of the temporary installation directory. Note that
+# MAKEOBJDIRPREFIX normally isn't defined so if the current directory is
+# /usr/src, then the world temporary directory is /usr/obj/usr/src/tmp.
+#
+# During the transition from aout to elf format on i386, MAKEOBJDIRPREFIX
+# is set by the parent makefile (Makefile.inc0) to be /usr/obj/${OBJFORMAT}
+# in order to keep aout and elf format files apart.
+#
+.if defined(MAKEOBJDIRPREFIX)
+WORLDTMP= ${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
+.else
+WORLDTMP= /usr/obj${.CURDIR}/tmp
+.endif
+
+#
+# Define the PATH to the build tools.
+#
+# If not building tools, the PATH always points to the installed binaries.
+# The NOTOOLS option assumes that in installed tools are good enough and that
+# the user's PATH will locate to appropriate tools. This option is required
+# for a cross-compiled build environment.
+#
+# If building tools, then the PATH includes the world temporary directories
+# so that the bootstrapped tools are used as soon as they are built. The
+# strict path is for use after all tools are supposed to have been
+# bootstrapped. It doesn't allow any of the installed tools to be used.
+#
+.if defined(NOTOOLS)
+# Default root of the tool tree
+TOOLROOT?=
+# Choose the PATH relative to the root of the tool tree
+PATH= ${TOOLROOT}/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/sbin:${TOOLROOT}/usr/bin:${TOOLROOT}/usr/games
+.else
+TOOLROOT= ${WORLDTMP}
+.endif
+STRICTTMPPATH= ${TOOLROOT}/sbin:${TOOLROOT}/usr/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/bin
+TMPPATH= ${STRICTTMPPATH}:${PATH}
+
+# XXX COMPILER_PATH is needed for finding cc1, ld and as
+# XXX GCC_EXEC_PREFIX is for *crt.o. It is probably unnecessary now
+# that LIBRARY_PATH is set. We still can't use -nostdlib, since gcc
+# wouldn't link *crt.o or libgcc if it were used.
+# XXX LD_LIBRARY_PATH is for ld.so. It is also used by ld, although we don't
+# want that - all compile-time library paths should be resolved by gcc.
+# It fails for set[ug]id executables (are any used?).
+COMPILER_ENV= BISON_SIMPLE=${TOOLROOT}/usr/share/misc/bison.simple \
+ COMPILER_PATH=${TOOLROOT}/usr/libexec:${TOOLROOT}/usr/bin \
+ GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \
+ LD_LIBRARY_PATH=${TOOLROOT}${SHLIBDIR} \
+ LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
+
+BMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \
+ OBJFORMAT_PATH=${TOOLROOT}/usr/libexec:/usr/libexec
+XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
+ OBJFORMAT_PATH=${TOOLROOT}/usr/libexec \
+ CFLAGS="-nostdinc ${CFLAGS}" # XXX -nostdlib
+
+# used to compile and install 'make' in temporary build tree
+MAKETMP= ${WORLDTMP}/make
+IBMAKE= ${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
+
+.if defined(NOTOOLS)
+# bootstrap make
+BMAKE= ${BMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
+# cross make used for compilation
+XMAKE= ${XMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
+# cross make used for final installation
+IXMAKE= ${XMAKEENV} ${MAKE}
+.else
+# bootstrap make
+BMAKE= ${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
+# cross make used for compilation
+XMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
+# cross make used for final installation
+IXMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make
+.endif
+
+#
+# buildworld
+#
+# Attempt to rebuild the entire system, with reasonable chance of
+# success, regardless of how old your existing system is.
+#
+buildworld:
+.if !defined(NOCLEAN)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Cleaning up the temporary ${OBJFORMAT} build tree"
+ @echo "--------------------------------------------------------------"
+ mkdir -p ${WORLDTMP}
+ chflags -R noschg ${WORLDTMP}/
+ rm -rf ${WORLDTMP}
+.endif
+.if !defined(NOTOOLS)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Making make"
+ @echo "--------------------------------------------------------------"
+ mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP}
+ ( \
+ cd ${.CURDIR}/usr.bin/make; \
+ MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
+ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all; \
+ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \
+ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \
+ )
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Making mtree"
+ @echo "--------------------------------------------------------------"
+ mkdir -p ${WORLDTMP}/usr/sbin ${WORLDTMP}/mtree
+ ( \
+ cd ${.CURDIR}/usr.sbin/mtree; \
+ MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
+ export MAKEOBJDIR=${WORLDTMP}/mtree; \
+ ${BMAKE} ${MK_FLAGS} all; \
+ ${BMAKE} ${MK_FLAGS} -B install clean \
+ )
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Making hierarchy"
+ @echo "--------------------------------------------------------------"
+ mkdir -p ${WORLDTMP}
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 hierarchy
+.if !defined(NOCLEAN)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Cleaning up the ${OBJFORMAT} obj tree"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding the ${OBJFORMAT} obj tree"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 par-${OBJDIR}
+.if !defined(NOTOOLS)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding ${OBJFORMAT} bootstrap tools"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding tools necessary to build the include files"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 include-tools
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding ${DESTDIR}/usr/include"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; SHARED=copies ${BMAKE} -f Makefile.inc1 includes
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding bootstrap libraries"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap-libraries
+.if !defined(NOTOOLS)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding tools needed to build libraries"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 lib-tools
+.endif
+.if !defined(NOTOOLS)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding all other tools needed to build the ${OBJFORMAT} world"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 build-tools
+.endif
+.if !defined(_NODEPEND)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding dependencies"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-depend
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building ${OBJFORMAT} libraries"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building everything.."
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all
+
+everything:
+ @echo "--------------------------------------------------------------"
+ @echo " Building everything.."
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all
+
+#
+# installworld
+#
+# Installs everything compiled by a 'buildworld'.
+#
+installworld:
+ cd ${.CURDIR}; ${IXMAKE} -f Makefile.inc1 reinstall
+
+#
+# reinstall
+#
+# If you have a build server, you can NFS mount the source and obj directories
+# and do a 'make reinstall' on the *client* to install new binaries from the
+# most recent server build.
+#
+reinstall:
+ @echo "--------------------------------------------------------------"
+ @echo " Making hierarchy"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Installing everything.."
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
+.if ${MACHINE_ARCH} == "i386"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Re-scanning the shared libraries.."
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; /sbin/ldconfig -R
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding man page indexes"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/share/man; ${MAKE} makedb
+
+#
+# update
+#
+# Update the source tree, by running sup and/or running cvs to update to the
+# latest copy.
+#
+update:
+.if defined(SUP_UPDATE)
+ @echo "--------------------------------------------------------------"
+ @echo "Running ${SUP}"
+ @echo "--------------------------------------------------------------"
+ @${SUP} ${SUPFLAGS} ${SUPFILE}
+.if defined(SUPFILE1)
+ @${SUP} ${SUPFLAGS} ${SUPFILE1}
+.endif
+.if defined(SUPFILE2)
+ @${SUP} ${SUPFLAGS} ${SUPFILE2}
+.endif
+.endif
+.if defined(CVS_UPDATE)
+ @echo "--------------------------------------------------------------"
+ @echo "Updating /usr/src from cvs repository" ${CVSROOT}
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; cvs -q update -P -d
+.endif
+
+#
+# most
+#
+# Build most of the user binaries on the existing system libs and includes.
+#
+most:
+ @echo "--------------------------------------------------------------"
+ @echo " Building programs only"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/bin; ${MAKE} all
+ cd ${.CURDIR}/sbin; ${MAKE} all
+ cd ${.CURDIR}/libexec; ${MAKE} all
+ cd ${.CURDIR}/usr.bin; ${MAKE} all
+ cd ${.CURDIR}/usr.sbin; ${MAKE} all
+ cd ${.CURDIR}/gnu/libexec; ${MAKE} all
+ cd ${.CURDIR}/gnu/usr.bin; ${MAKE} all
+ cd ${.CURDIR}/gnu/usr.sbin; ${MAKE} all
+#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
+# cd ${.CURDIR}/kerberosIV; ${MAKE} most
+#.endif
+#.if !defined(NOSECURE) && !defined(NOCRYPT)
+# cd ${.CURDIR}/secure; ${MAKE} most
+#.endif
+
+#
+# installmost
+#
+# Install the binaries built by the 'most' target. This does not include
+# libraries or include files.
+#
+installmost:
+ @echo "--------------------------------------------------------------"
+ @echo " Installing programs only"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/bin; ${MAKE} install
+ cd ${.CURDIR}/sbin; ${MAKE} install
+ cd ${.CURDIR}/libexec; ${MAKE} install
+ cd ${.CURDIR}/usr.bin; ${MAKE} install
+ cd ${.CURDIR}/usr.sbin; ${MAKE} install
+ cd ${.CURDIR}/gnu/libexec; ${MAKE} install
+ cd ${.CURDIR}/gnu/usr.bin; ${MAKE} install
+ cd ${.CURDIR}/gnu/usr.sbin; ${MAKE} install
+#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
+# cd ${.CURDIR}/kerberosIV; ${MAKE} installmost
+#.endif
+#.if !defined(NOSECURE) && !defined(NOCRYPT)
+# cd ${.CURDIR}/secure; ${MAKE} installmost
+#.endif
+
+#
+# ------------------------------------------------------------------------
+#
+# From here onwards are utility targets used by the 'make world' and
+# related targets. If your 'world' breaks, you may like to try to fix
+# the problem and manually run the following targets to attempt to
+# complete the build. Beware, this is *not* guaranteed to work, you
+# need to have a pretty good grip on the current state of the system
+# to attempt to manually finish it. If in doubt, 'make world' again.
+#
+
+#
+# hierarchy - ensure that all the needed directories are present
+#
+hierarchy:
+ cd ${.CURDIR}/etc; ${MAKE} distrib-dirs
+
+#
+# bootstrap - [re]build tools needed to run the actual build, this includes
+# tools needed by 'make depend', as some tools are needed to generate source
+# for the dependency information to be gathered from.
+#
+bootstrap:
+.if defined(DESTDIR)
+ rm -f ${DESTDIR}/usr/src/sys
+ ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src
+ cd ${.CURDIR}/include; find -dx . | cpio -dump ${DESTDIR}/usr/include
+.for d in net netinet posix4 sys vm machine
+ if [ -h ${DESTDIR}/usr/include/$d ]; then \
+ rm -f ${DESTDIR}/usr/include/$d ; \
+ fi
+.endfor
+ cd ${.CURDIR}/sys; \
+ find -dx net netinet posix4 sys vm -name '*.h' -o -type d | \
+ cpio -dump ${DESTDIR}/usr/include
+ mkdir -p ${DESTDIR}/usr/include/machine
+ cd ${.CURDIR}/sys/${MACHINE_ARCH}/include; find -dx . -name '*.h' -o -type d | \
+ cpio -dump ${DESTDIR}/usr/include/machine
+.endif
+ cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+ cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+ cd ${.CURDIR}/usr.bin/yacc; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+ cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \
+ ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} -DNOLIB all; \
+ ${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
+ cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR}
+ cd ${.CURDIR}/usr.sbin/mtree; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+.if defined(DESTDIR)
+ cd ${.CURDIR}/include && ${MAKE} copies
+.endif
+
+#
+# include-tools - generally the same as 'bootstrap', except that it's for
+# things that are specifically needed to generate include files.
+#
+# XXX should be merged with bootstrap, it's not worth keeeping them separate.
+# Well, maybe it is now. We force 'cleandepend' here to avoid dependencies
+# on cleaned away headers in ${WORLDTMP}.
+#
+include-tools:
+.for d in usr.bin/compile_et usr.bin/rpcgen
+ cd ${.CURDIR}/$d; ${MAKE} cleandepend; \
+ ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+.endfor
+
+#
+# includes - possibly generate and install the include files.
+#
+includes:
+.if defined(CLOBBER)
+ rm -rf ${DESTDIR}/usr/include/*
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
+ -p ${DESTDIR}/usr/include
+.endif
+ cd ${.CURDIR}/include; ${MAKE} -B all install
+ cd ${.CURDIR}/gnu/include; ${MAKE} install
+ cd ${.CURDIR}/gnu/lib/libmp; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libobjc; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libreadline; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libregex; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libstdc++; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libg++; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libdialog; ${MAKE} beforeinstall
+ cd ${.CURDIR}/gnu/lib/libgmp; ${MAKE} beforeinstall
+.if exists(secure) && !defined(NOCRYPT)
+ cd ${.CURDIR}/secure/lib/libdes; ${MAKE} beforeinstall
+.endif
+.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
+ cd ${.CURDIR}/kerberosIV/lib/libacl; ${MAKE} beforeinstall
+ cd ${.CURDIR}/kerberosIV/lib/libkadm; ${MAKE} beforeinstall
+ cd ${.CURDIR}/kerberosIV/lib/libkafs; ${MAKE} beforeinstall
+ cd ${.CURDIR}/kerberosIV/lib/libkdb; ${MAKE} beforeinstall
+ cd ${.CURDIR}/kerberosIV/lib/libkrb; ${MAKE} beforeinstall
+ cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall
+.else
+ cd ${.CURDIR}/lib/libtelnet; ${MAKE} beforeinstall
+.endif
+.if exists(${.CURDIR}/lib/csu/${MACHINE})
+ cd ${.CURDIR}/lib/csu/${MACHINE}; ${MAKE} beforeinstall
+.endif
+ cd ${.CURDIR}/lib/libalias; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libc; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libcalendar; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libcurses; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libdisk; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libedit; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libftpio; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libmd; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libmytinfo; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libncurses; ${MAKE} beforeinstall
+.if !defined(WANT_CSRG_LIBM)
+ cd ${.CURDIR}/lib/msun; ${MAKE} beforeinstall
+.endif
+ cd ${.CURDIR}/lib/libopie; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libpcap; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/librpcsvc; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libskey; ${MAKE} beforeinstall
+.if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \
+ exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl)
+ cd ${.CURDIR}/lib/libtcl; ${MAKE} installhdrs
+.endif
+ cd ${.CURDIR}/lib/libtermcap; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libcom_err; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libss; ${MAKE} -B hdrs beforeinstall
+ cd ${.CURDIR}/lib/libscsi; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libutil; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libvgl; ${MAKE} beforeinstall
+ cd ${.CURDIR}/lib/libz; ${MAKE} beforeinstall
+ cd ${.CURDIR}/usr.bin/f2c; ${MAKE} beforeinstall
+ cd ${.CURDIR}/usr.bin/lex; ${MAKE} beforeinstall
+
+#
+# Declare tools if they are not required on all architectures.
+#
+.if ${MACHINE_ARCH} == "i386"
+# aout tools:
+_aout_ar = usr.bin/ar
+_aout_as = gnu/usr.bin/as
+_aout_ld = gnu/usr.bin/ld
+_aout_nm = usr.bin/nm
+_aout_ranlib = usr.bin/ranlib
+_aout_size = usr.bin/size
+_aout_strip = usr.bin/strip
+.endif
+
+#
+# lib-tools - build tools to compile and install the libraries.
+#
+# XXX gperf is required for cc
+# XXX a new ld and tsort is required for cc
+lib-tools:
+.for d in \
+ gnu/usr.bin/gperf \
+ ${_aout_ld} \
+ usr.bin/tsort \
+ ${_aout_as} \
+ gnu/usr.bin/bison \
+ gnu/usr.bin/cc \
+ ${_aout_ar} \
+ usr.bin/env \
+ usr.bin/lex/lib \
+ usr.bin/mk_cmds \
+ ${_aout_nm} \
+ ${_aout_ranlib} \
+ ${_aout_strip} \
+ gnu/usr.bin/binutils \
+ usr.bin/uudecode \
+ share/info \
+ usr.bin/objformat
+ cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install; \
+ ${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
+.endfor
+
+#
+# We have to know too much about ordering and subdirs in the lib trees:
+#
+# To satisfy shared library linkage when only the libraries being built
+# are visible:
+#
+# libcom_err must be built before libss.
+# libcrypt and libmd must be built before libskey.
+# libm must be built before libtcl.
+# libmytinfo must be built before libdialog and libncurses.
+# libncurses must be built before libdialog.
+# libtermcap must be built before libcurses, libedit and libreadline.
+#
+# Some libraries are built conditionally and/or are in inconsistently
+# named directories:
+#
+.if exists(lib/csu/${MACHINE}.pcc)
+_csu=lib/csu/${MACHINE}.pcc
+.elif ${MACHINE} == "i386" && ${OBJFORMAT} == "elf"
+_csu=lib/csu/i386-elf
+.else
+_csu=lib/csu/${MACHINE}
+.endif
+
+.if !defined(NOSECURE) && !defined(NOCRYPT)
+_libcrypt= secure/lib/libcrypt lib/libcrypt
+.else
+_libcrypt= lib/libcrypt
+.endif
+
+.if defined(WANT_CSRG_LIBM)
+_libm= lib/libm
+.else
+_libm= lib/msun
+.endif
+
+#
+# bootstrap-libraries - build just enough libraries for the bootstrap
+# tools, and install them under ${WORLDTMP}.
+#
+# Build csu and libgcc early so that some tools get linked to the new
+# versions (too late for the main tools, however). Then build the
+# necessary prerequisite libraries (libtermcap just needs to be before
+# libcurses, and this only matters for the NOCLEAN case when NOPIC is
+# not set).
+#
+# This is mostly wrong. The build tools must run on the host system,
+# so they should use host libraries. We depend on the target being
+# similar enough to the host for new target libraries to work on the
+# host.
+#
+bootstrap-libraries:
+.for _lib in ${_csu} gnu/usr.bin/cc/libgcc lib/libtermcap \
+ gnu/lib/libregex gnu/lib/libreadline lib/libc \
+ ${_libcrypt} lib/libcurses lib/libedit ${_libm} \
+ lib/libmd lib/libutil lib/libz usr.bin/lex/lib
+.if exists(${.CURDIR}/${_lib})
+ cd ${.CURDIR}/${_lib}; \
+ ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${MK_FLAGS} all; \
+ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+.endif
+.endfor
+
+#
+# bootstrap-rtld - Build the shared library loader and install it
+# under ${WORLDTMP}. This requires libc_pic which isn't normally
+# bootstrapped, so libc has to be built again. *sigh*
+#
+RTLD_MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE
+bootstrap-rtld:
+.if exists(${.CURDIR}/libexec/rtld-${OBJFORMAT})
+ cd ${.CURDIR}/lib/libc; \
+ ${MAKE} ${RTLD_MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${RTLD_MK_FLAGS} all; \
+ ${MAKE} ${RTLD_MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+ cd ${.CURDIR}/libexec/rtld-${OBJFORMAT}; \
+ ${MAKE} obj; \
+ ${MAKE} ${RTLD_MK_FLAGS} ${_DEPEND}; \
+ ${MAKE} ${RTLD_MK_FLAGS} all; \
+ ${MAKE} ${RTLD_MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+.endif
+
+#
+# libraries - build all libraries, and install them under ${DESTDIR}.
+#
+# The ordering is not as special as for bootstrap-libraries. Build
+# the prerequisites first, then build almost everything else in
+# alphabetical order.
+#
+libraries:
+.for _lib in lib/libcom_err ${_libcrypt} ${_libm} lib/libmytinfo \
+ lib/libncurses lib/libtermcap \
+ gnu/lib gnu/usr.bin/cc/libgcc lib usr.bin/lex/lib usr.sbin/pcvt/keycap
+.if exists(${.CURDIR}/${_lib})
+ cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install
+.endif
+.endfor
+.if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE)
+ cd ${.CURDIR}/secure/lib; ${MAKE} all; ${MAKE} -B install
+.endif
+.if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \
+ defined(MAKE_KERBEROS4)
+ cd ${.CURDIR}/kerberosIV/lib; ${MAKE} all; ${MAKE} -B install
+.endif
+
+#
+# Exclude unused tools from build-tools.
+#
+.if !defined(NOGAMES) && exists(${.CURDIR}/games)
+_adventure= games/adventure
+_caesar= games/caesar
+_hack= games/hack
+_phantasia= games/phantasia
+_strfile= games/fortune/strfile
+.endif
+.if !defined(NOPERL)
+_perl= gnu/usr.bin/perl/perl
+.endif
+.if !defined(NOSHARE) && exists(${.CURDIR}/share)
+_scrnmaps= share/syscons/scrnmaps
+.endif
+.if !defined(NOLKM) && exists(${.CURDIR}/lkm) && ${OBJFORMAT} == "aout"
+_linux= lkm/linux
+.endif
+.if ${OBJFORMAT} == "aout"
+_netboot= sys/i386/boot/netboot
+.endif
+
+BTMAKEFLAGS= ${MK_FLAGS} -D_BUILD_TOOLS
+
+#
+# build-tools - build and install any other tools needed to complete the
+# compile and install.
+# ifdef stale
+# bc and cpp are required to build groff. Otherwise, the order here is
+# mostly historical, i.e., bogus.
+# chmod is used to build gcc's tmpmultilib[2] at obscure times.
+# endif stale
+# XXX uname is a bug - the target should not depend on the host.
+#
+build-tools:
+.for d in \
+ bin/cat \
+ bin/chmod \
+ bin/cp \
+ bin/date \
+ bin/dd \
+ bin/echo \
+ bin/expr \
+ bin/hostname \
+ bin/ln \
+ bin/ls \
+ bin/mkdir \
+ bin/mv \
+ bin/rm \
+ bin/test \
+ ${_caesar} \
+ ${_strfile} \
+ gnu/usr.bin/awk \
+ gnu/usr.bin/bc \
+ gnu/usr.bin/grep \
+ gnu/usr.bin/groff \
+ gnu/usr.bin/gzip \
+ gnu/usr.bin/man/makewhatis \
+ gnu/usr.bin/patch \
+ ${_perl} \
+ gnu/usr.bin/sort \
+ gnu/usr.bin/texinfo \
+ usr.bin/basename \
+ usr.bin/cap_mkdb \
+ usr.bin/chflags \
+ usr.bin/cmp \
+ usr.bin/col \
+ usr.bin/colldef \
+ usr.bin/cpp \
+ usr.bin/expand \
+ usr.bin/file2c \
+ usr.bin/find \
+ usr.bin/gencat \
+ usr.bin/id \
+ usr.bin/join \
+ usr.bin/lorder \
+ usr.bin/m4 \
+ usr.bin/mkdep \
+ usr.bin/mklocale \
+ usr.bin/paste \
+ usr.bin/sed \
+ ${_aout_size} \
+ usr.bin/soelim \
+ usr.bin/symorder \
+ usr.bin/touch \
+ usr.bin/tr \
+ usr.bin/true \
+ usr.bin/uname \
+ usr.bin/uuencode \
+ usr.bin/vgrind \
+ usr.bin/vi \
+ usr.bin/wc \
+ usr.bin/xargs \
+ usr.bin/yacc \
+ usr.sbin/chown \
+ usr.sbin/mtree \
+ usr.sbin/zic \
+ bin/sh
+ cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} ${_DEPEND}; \
+ ${MAKE} ${BTMAKEFLAGS} all; \
+ ${MAKE} ${BTMAKEFLAGS} -B install ${CLEANDIR} ${OBJDIR}
+.endfor
+.if !defined(NOGAMES) && exists(${.CURDIR}/games)
+ cd ${DESTDIR}/usr/games; cp -p caesar strfile ${DESTDIR}/usr/bin
+.endif
+.for d in \
+ bin/sh \
+ ${_adventure} \
+ ${_hack} \
+ ${_phantasia} \
+ gnu/usr.bin/cc/cc_tools \
+ lib/libmytinfo \
+ ${_linux} \
+ ${_scrnmaps} \
+ ${_netboot}
+ cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools
+.endfor
+ cd ${.CURDIR}/usr.bin/tn3270/tools; ${MAKE} ${BTMAKEFLAGS} all
+
+#
+# Build aout versions of things that provide legacy support when all the
+# rest of the world is elf.
+#
+legacy-build:
+.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Making hierarchy"
+ @echo "--------------------------------------------------------------"
+ mkdir -p ${WORLDTMP}
+ cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 hierarchy
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding the ${OBJFORMAT} obj tree"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-${OBJDIR}
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebuilding ${DESTDIR}/usr/include"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; SHARED=copies ${XMAKE} -f Makefile.inc1 includes
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building legacy libraries"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; \
+ ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 bootstrap-libraries
+ cd ${.CURDIR}; \
+ ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building legacy rtld"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/libexec/rtld-aout; \
+ ${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all;
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building legacy lkms"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/lkm; \
+ ${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all;
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building legacy boot"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/sys/i386/boot; \
+ ${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all;
+.endif
+
+#
+# Install aout versions of things that provide legacy support when all the
+# rest of the world is elf.
+#
+legacy-install:
+.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Installing legacy libraries"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/lib; ${MAKE} -B install
+ cd ${.CURDIR}/gnu/lib; ${MAKE} -B install
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Installing legacy rtld"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/libexec/rtld-aout; ${MAKE} -DNOMAN install
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Installing legacy lkms"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/lkm; ${MAKE} -DNOMAN install
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Installing legacy boot"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}/sys/i386/boot; ${MAKE} -DNOMAN install
+.endif
+
+
+.for __target in clean cleandepend cleandir depend obj
+.for entry in ${SUBDIR}
+${entry}.${__target}__D: .PHONY
+ @if test -d ${.CURDIR}/${entry}.${MACHINE}; then \
+ ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \
+ edir=${entry}.${MACHINE}; \
+ cd ${.CURDIR}/$${edir}; \
+ else \
+ ${ECHODIR} "===> ${DIRPRFX}${entry}"; \
+ edir=${entry}; \
+ cd ${.CURDIR}/$${edir}; \
+ fi; \
+ ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
+.endfor
+par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
+.endfor
+
+.include <bsd.subdir.mk>
diff --git a/Makefile.upgrade b/Makefile.upgrade
new file mode 100644
index 0000000..7a61413
--- /dev/null
+++ b/Makefile.upgrade
@@ -0,0 +1,230 @@
+#
+# $Id$
+#
+# This makefile contains rules for preforming upgrades that are outside
+# the scope of the normal build world process.
+#
+
+#
+# Build things relative to the user's preferred object directory,
+# defaulting to /usr/obj if not defined.
+#
+MAKEOBJDIRPREFIX?=/usr/obj
+
+#
+# The installed operating system release gives us the hint as to whether
+# we need to build a kernel too.
+#
+INSTALLEDVERSION!=uname -r
+
+#
+# Upgrade the installed make to the current version using the installed
+# headers, libraries and build tools. This is required on installed versions
+# prior to 2.2.5 in which the installed make doesn't support the -m argument.
+#
+make :
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Upgrading the installed make"
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}/usr.bin/make; \
+ make obj && make depend && make all && make install
+
+#
+# Upgrade from aout to elf, doing an aout build first to ensure that there
+# are up-to-date tools before building the initial elf world. The aout
+# tools just built into the object directory tree and executed from there
+# during the elf build. Then install the aout tools, build an aout kernel
+# with them (in case the installed kernel is an older version), then
+# install the elf world.
+#
+aout-to-elf aout-to-elf-install : \
+ ${MAKEOBJDIRPREFIX}/do_aout_buildworld \
+ ${MAKEOBJDIRPREFIX}/do_elf_buildworld \
+ ${MAKEOBJDIRPREFIX}/do_aout_installworld \
+ ${MAKEOBJDIRPREFIX}/do_aout_kernel \
+ ${MAKEOBJDIRPREFIX}/do_elf_installworld \
+ ${MAKEOBJDIRPREFIX}/do_set_objformat \
+ ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
+
+#
+# Just do the build parts of the transition build.
+#
+aout-to-elf-build : \
+ ${MAKEOBJDIRPREFIX}/do_aout_buildworld \
+ ${MAKEOBJDIRPREFIX}/do_elf_buildworld
+
+#
+# The installed system may not have tools capable of building an elf
+# aware world, so a complete aout buildworld is required to get a known
+# set of tools.
+#
+${MAKEOBJDIRPREFIX}/do_aout_buildworld :
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Doing an aout buildworld to get an up-to-date set of tools"
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
+ OBJFORMAT=aout \
+ make -f Makefile.inc1 -m ${.CURDIR}/share/mk buildworld
+ @touch ${MAKEOBJDIRPREFIX}/do_aout_buildworld
+
+#
+# Temporary path for initial elf build.
+#
+AOUTTMPPATH= ${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/sbin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/bin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/sbin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/bin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/games
+
+#
+# Use the aout tools from the aout buildworld to do an elf buildworld.
+#
+${MAKEOBJDIRPREFIX}/do_elf_buildworld :
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Doing an elf buildworld using the aout tools in the aout"
+ @echo " obj tree."
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/elf \
+ PATH=${AOUTTMPPATH} OBJFORMAT=elf NOTOOLS=1 \
+ TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
+ make -f Makefile.inc1 -m ${.CURDIR}/share/mk buildworld
+ @touch ${MAKEOBJDIRPREFIX}/do_elf_buildworld
+
+#
+# Before installing the aout world, allow for the possibility that the
+# world about to be installed has some different syscalls to the installed
+# kernel which will make shutting the system down problematic. We set aside
+# copies of certain programs which match the running kernel.
+#
+# Install the aout world so that anything that isn't replaced by the
+# elf world will be updated.
+#
+${MAKEOBJDIRPREFIX}/do_aout_installworld :
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " You are about to update the installed system (or the system"
+ @echo " that your DESTDIR points to). You can type Ctrl-C to abort"
+ @echo " now or press return to start the first phase of the update."
+ @echo "--------------------------------------------------------------"
+ @/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
+.if ${INSTALLEDVERSION} != "3.0-CURRENT"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Saving a copy of programs required to shut the system down"
+ @echo "--------------------------------------------------------------"
+ @cp /bin/sh ${MAKEOBJDIRPREFIX}
+ @cp /sbin/reboot ${MAKEOBJDIRPREFIX}
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Doing an aout installworld using the aout tools in the aout"
+ @echo " obj tree."
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
+ PATH=${AOUTTMPPATH} OBJFORMAT=aout NOTOOLS=1 \
+ TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
+ make -f Makefile.inc1 -m ${.CURDIR}/share/mk installworld
+ @touch ${MAKEOBJDIRPREFIX}/do_aout_installworld
+
+#
+# The installed kernel may not match the world that is installed, so build
+# a generic kernel, but don't install it. The user can decide if the kernel
+# needs to be installed. Perhaps we should install it in the root
+# directory as an obscure name just in case a reboot is required?
+#
+${MAKEOBJDIRPREFIX}/do_aout_kernel :
+.if ${INSTALLEDVERSION} == "3.0-CURRENT"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " You are already running 3.0-CURRENT, so a kernel build"
+ @echo " is probably not required."
+ @echo "--------------------------------------------------------------"
+.else
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Building a generic kernel using the new aout tools"
+ @echo "--------------------------------------------------------------"
+.if exists(${.CURDIR}/sys/compile/GENERICupgrade)
+ @rm -rf ${.CURDIR}/sys/compile/GENERICupgrade
+.endif
+ @cd ${.CURDIR}/sys/i386/conf; config GENERICupgrade
+ @-cd ${.CURDIR}/sys/compile/GENERICupgrade; make depend && make all
+ @cd ${.CURDIR}/sys/compile/GENERICupgrade; make depend && make all
+.endif
+ @touch ${MAKEOBJDIRPREFIX}/do_aout_kernel
+
+#
+# Install the elf world overwriting just about all the previously installed
+# aout world. Any aout things that need to be kept have already been
+# installed in different places (typically in aout subdirectories).
+#
+${MAKEOBJDIRPREFIX}/do_elf_installworld :
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " You are about to update the installed system (or the system"
+ @echo " that your DESTDIR points to) with the elf versions of"
+ @echo " everything, replacing the aout versions. You can type Ctrl-C"
+ @echo " to abort now, leaving just the aout world installed, or"
+ @echo " press return to start the second phase of the update."
+ @echo "--------------------------------------------------------------"
+ @/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Doing an elf installworld using the aout tools in the aout"
+ @echo " obj tree."
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/elf \
+ PATH=${AOUTTMPPATH} OBJFORMAT=elf NOTOOLS=1 \
+ TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
+ make -f Makefile.inc1 -m ${.CURDIR}/share/mk installworld
+ @touch ${MAKEOBJDIRPREFIX}/do_elf_installworld
+
+#
+# Now that the elf world has been installed, we can set the default
+# object format to elf.
+#
+${MAKEOBJDIRPREFIX}/do_set_objformat :
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Setting the default object format to elf"
+ @echo "--------------------------------------------------------------"
+ @echo "OBJFORMAT=elf" > /etc/objformat
+ @touch ${MAKEOBJDIRPREFIX}/do_set_objformat
+
+#
+# If not already running a current kernel, install the GENERICupgrade kernel
+# and reboot.
+#
+${MAKEOBJDIRPREFIX}/do_install_kernel_reboot :
+.if ${INSTALLEDVERSION} == "3.0-CURRENT"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Your system has been updated to run elf by default!"
+ @echo
+ @echo " You should reboot your system now."
+ @echo "--------------------------------------------------------------"
+ @touch ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
+.else
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Your system has been updated to run elf by default!"
+ @echo
+ @echo " Since you are running ${INSTALLEDVERSION}, the kernel must"
+ @echo " be installed before the system is rebooted. You can type"
+ @echo " Ctrl-C to abort the kernel installation (at your own risk),"
+ @echo " or press return for the kernel to be installed and the"
+ @echo " system rebooted."
+ @echo "--------------------------------------------------------------"
+ @${MAKEOBJDIRPREFIX}/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Installing a new GENERICupgrade kernel"
+ @echo "--------------------------------------------------------------"
+ @cd ${.CURDIR}/sys/compile/GENERICupgrade; make install
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo " Rebooting......."
+ @echo "--------------------------------------------------------------"
+ @touch ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
+ @-${MAKEOBJDIRPREFIX}/reboot
+.endif
+
OpenPOWER on IntegriCloud