aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorJohn Birrell <jb@FreeBSD.org>1998-08-31 01:08:08 +0000
committerJohn Birrell <jb@FreeBSD.org>1998-08-31 01:08:08 +0000
commit11fb97daa75d7b8711d69a0736a3bdfc149f7f7e (patch)
tree8f4e6834978905bc2d9194db2e15bb7a6de48382 /Makefile
parent7ceecc66458ab489687d6a19edf9d0d3fd3446e9 (diff)
downloadsrc-11fb97daa75d7b8711d69a0736a3bdfc149f7f7e.tar.gz
src-11fb97daa75d7b8711d69a0736a3bdfc149f7f7e.zip
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.
Notes
Notes: svn path=/head/; revision=38666
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile930
1 files changed, 93 insertions, 837 deletions
diff --git a/Makefile b/Makefile
index b65fe8fcaa2d..4f6f61bd18f2 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}