Date: Sun, 25 Oct 1998 08:47:32 -0500 (EST) From: freebsd@tomqnx.com (Tom Torrance) To: hackers@FreeBSD.ORG Subject: Broken Source Tree Message-ID: <m0zXQW5-000IAPC@TomQNX.tomqnx.com>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
I believe that I have discovered a serious problem with the source tree
for 2.2.7-RELEASE and later. Someone that really understands the make
world process should check me out on this - I don't pretend to
understand it perfectly!
Problem Summary:
Changes to the /usr/share/mk makefiles are not being made, and about 20
'leaf nodes' on the source tree are not being installed properly as
a result of the make world process. To list them:
grep afterinstall `find /usr/src -name Makefile -print` | grep -v /lkm/
ISSUE #1:
Because the 'afterinstall' target gets broken, and 'make world' etc. is forced
to operate from the /usr/share/mk set of files rather that the
/usr/src/share/mk set, new versions of the mk files never get installed.
Proposed Solution:
Remove the conditional test in /usr/src/Makefile to ensure that 'make world'
'make buildworld' and 'make installworld' use the updated mk files provided
under /usr/src/share/mk.
ISSUE #2:
the makefiles bsd.prog.mk and bsd.lib.mk presently corrupt the target
'afterinstall' if it was previously set before those files were called.
Proposed Solution:
Bracket the lines that modify the 'afterinstall' target with:
.if !target(afterinstall)
...........
.endif
in both bsd.prog.mk and bsd.lib.mk.
Please copy any responses directly to my e-mail address as I am not presently
receiving hackers.
Thank you!
Tom
[-- Attachment #2 --]
#
# $Id: Makefile,v 1.109.2.35 1998/09/07 19:05:21 jkh 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
# -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.
# -DNOPERL do not make or install perl
# 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"
# 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:= ${.MAKEFLAGS} -m ${.CURDIR}/share/mk
#.endif
# 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 first 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) && make(distribute)
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
.else
CLEANDIR= cleandir
.endif
.endif
SUP?= cvsup
SUPFLAGS?= -g -L 2 -P -
#
# While building tools for bootstrapping, we dont need to waste time on
# profiled libraries or man pages. This speeds things up somewhat.
#
MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE
#
# 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 unnecssary now
# tbat 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}/usr/lib/ \
LD_LIBRARY_PATH=${WORLDTMP}${SHLIBDIR} \
LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
BMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t
XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
CC='cc -nostdinc' # XXX -nostdlib
# used to compile and install 'make' in temporary build tree
IBMAKE= ${BMAKEENV} ${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}
#
# 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
.if !defined(NOCLEAN) || !defined(NOOBJDIR)
cd ${.CURDIR}/usr.bin/make && \
${IBMAKE} -I${.CURDIR}/share/mk ${CLEANDIR} ${OBJDIR}
.endif
cd ${.CURDIR}/usr.bin/make && \
${IBMAKE} -I${.CURDIR}/share/mk depend && \
${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \
${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install && \
${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean cleandepend
.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} par-${CLEANDIR}
.endif
.if !defined(NOOBJDIR)
@echo
@echo "--------------------------------------------------------------"
@echo " Rebuilding the obj tree"
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${BMAKE} par-obj
.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 /usr/include"
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && SHARED=symlinks ${BMAKE} includes
.if !defined(NOTOOLS)
@echo
@echo "--------------------------------------------------------------"
@echo " Rebuilding tools needed to build the libraries"
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${BMAKE} lib-tools
.endif
@echo
@echo "--------------------------------------------------------------"
@echo " Rebuilding /usr/lib"
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${BMAKE} libraries
.if !defined(NOTOOLS)
@echo
@echo "--------------------------------------------------------------"
@echo " Rebuilding all other tools needed to build the world"
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${BMAKE} build-tools
.endif
@echo
@echo "--------------------------------------------------------------"
@echo " Rebuilding dependencies"
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${XMAKE} ${.MAKEFLAGS} par-depend
@echo
@echo "--------------------------------------------------------------"
@echo " Building everything.."
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${XMAKE} all
#
# installworld
#
# Installs everything compiled by a 'buildworld'.
#
installworld:
cd ${.CURDIR} && ${IXMAKE} 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} hierarchy
@echo
@echo "--------------------------------------------------------------"
@echo " Installing everything.."
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ${MAKE} install
@echo
@echo "--------------------------------------------------------------"
@echo " Re-scanning the shared libraries.."
@echo "--------------------------------------------------------------"
cd ${.CURDIR} && ldconfig -R
@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 -r RELENG_2_2
.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} ${.MAKEFLAGS} all
cd ${.CURDIR}/sbin && ${MAKE} ${.MAKEFLAGS} all
cd ${.CURDIR}/libexec && ${MAKE} ${.MAKEFLAGS} all
cd ${.CURDIR}/usr.bin && ${MAKE} ${.MAKEFLAGS} all
cd ${.CURDIR}/usr.sbin && ${MAKE} ${.MAKEFLAGS} all
cd ${.CURDIR}/gnu/libexec && ${MAKE} ${.MAKEFLAGS} all
cd ${.CURDIR}/gnu/usr.bin && ${MAKE} ${.MAKEFLAGS} all
cd ${.CURDIR}/gnu/usr.sbin && ${MAKE} ${.MAKEFLAGS} all
#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
# cd ${.CURDIR}/kerberosIV && ${MAKE} ${.MAKEFLAGS} most
#.endif
#.if !defined(NOSECURE) && !defined(NOCRYPT)
# cd ${.CURDIR}/secure && ${MAKE} ${.MAKEFLAGS} 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} ${.MAKEFLAGS} install
cd ${.CURDIR}/sbin && ${MAKE} ${.MAKEFLAGS} install
cd ${.CURDIR}/libexec && ${MAKE} ${.MAKEFLAGS} install
cd ${.CURDIR}/usr.bin && ${MAKE} ${.MAKEFLAGS} install
cd ${.CURDIR}/usr.sbin && ${MAKE} ${.MAKEFLAGS} install
cd ${.CURDIR}/gnu/libexec && ${MAKE} ${.MAKEFLAGS} install
cd ${.CURDIR}/gnu/usr.bin && ${MAKE} ${.MAKEFLAGS} install
cd ${.CURDIR}/gnu/usr.sbin && ${MAKE} ${.MAKEFLAGS} install
#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
# cd ${.CURDIR}/kerberos4 && ${MAKE} ${.MAKEFLAGS} installmost
#.endif
#.if !defined(NOSECURE) && !defined(NOCRYPT)
# cd ${.CURDIR}/secure && ${MAKE} ${.MAKEFLAGS} 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.
#
#
# heirarchy - 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
cd ${.CURDIR}/include && make symlinks
.endif
cd ${.CURDIR}/usr.bin/make && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
cd ${.CURDIR}/usr.bin/xinstall && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
cd ${.CURDIR}/usr.bin/lex && ${MAKE} bootstrap && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} -DNOLIB all && \
${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
.if !defined(NOOBJDIR)
cd ${.CURDIR}/usr.bin/lex && ${MAKE} obj
.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:
cd ${.CURDIR}/usr.bin/rpcgen && ${MAKE} -B cleandepend depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
#
# 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/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
.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
cd ${.CURDIR}/lib/csu/i386 && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libalias && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libc && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libcurses && ${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/libpcap && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/librpcsvc && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libskey && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libtermcap && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libcom_err && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libss && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libscsi && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libutil && ${MAKE} beforeinstall
cd ${.CURDIR}/lib/libz && ${MAKE} beforeinstall
#
# 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 \
gnu/usr.bin/ld \
usr.bin/tsort \
gnu/usr.bin/as \
gnu/usr.bin/bison \
gnu/usr.bin/awk \
usr.bin/ar \
usr.bin/compile_et \
usr.bin/lex/lib \
usr.bin/mk_cmds \
usr.bin/nm \
usr.bin/ranlib \
usr.bin/uudecode \
gnu/usr.bin/cc
cd ${.CURDIR}/$d && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endfor
#
# libraries - build and install the libraries
#
libraries:
.if exists(lib/csu/i386)
cd ${.CURDIR}/lib/csu/i386 && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(lib/libcompat)
cd ${.CURDIR}/lib/libcompat && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(lib/libc)
cd ${.CURDIR}/lib/libc && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(lib/libmytinfo)
cd ${.CURDIR}/lib/libmytinfo && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(lib/libncurses)
cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(lib/libtermcap)
cd ${.CURDIR}/lib/libtermcap && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(gnu)
cd ${.CURDIR}/gnu/lib && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
cd ${.CURDIR}/secure/lib && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(lib)
cd ${.CURDIR}/lib && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(usr.bin/lex/lib)
cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(kerberosIV) && exists(crypto) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
.if exists(usr.sbin/pcvt/keycap)
cd ${.CURDIR}/usr.sbin/pcvt/keycap && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endif
# Exclude perl from the build-tools if NOPERL is defined.
.if defined(NOPERL)
_perl=
.else
_perl= gnu/usr.bin/perl/perl
.endif
#
# 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 \
usr.bin/yacc \
bin/expr \
bin/hostname \
bin/ln \
bin/ls \
bin/mkdir \
bin/mv \
bin/rm \
bin/test \
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/cpp \
usr.bin/expand \
usr.bin/file2c \
usr.bin/find \
usr.bin/gencat \
usr.bin/id \
usr.bin/lorder \
usr.bin/m4 \
usr.bin/mkdep \
usr.bin/paste \
usr.bin/sed \
usr.bin/size \
usr.bin/soelim \
usr.bin/strip \
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.sbin/chown \
usr.sbin/mtree \
usr.sbin/zic \
bin/sh
cd ${.CURDIR}/$d && ${MAKE} depend && \
${MAKE} ${MK_FLAGS} all && \
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
.endfor
.for __target in clean cleandir obj depend
.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>
[-- Attachment #3 --]
# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
# $Id: bsd.prog.mk,v 1.41.2.7 1998/06/14 16:10:49 steve Exp $
.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif
.SUFFIXES: .out .o .c .cc .cpp .cxx .C .y .l .s .S
CFLAGS+=${COPTS} ${DEBUG_FLAGS}
.if defined(DESTDIR)
CFLAGS+= -I${DESTDIR}/usr/include
CXXINCLUDES+= -I${DESTDIR}/usr/include/g++
.endif
.if !defined(DEBUG_FLAGS)
STRIP?= -s
.endif
.if defined(NOSHARED) && ( ${NOSHARED} != "no" && ${NOSHARED} != "NO" )
LDFLAGS+= -static
.endif
.include <bsd.libnames.mk>
.if defined(PROG)
.if defined(SRCS)
DPSRCS+= ${SRCS:M*.h}
.if !defined(NOOBJ)
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
.endif
.if defined(LDONLY)
${PROG}: ${LIBCRT0} ${LIBC} ${DPSRCS} ${OBJS} ${DPADD}
${LD} ${LDFLAGS} -o ${.TARGET} ${LIBCRT0} ${OBJS} ${LIBC} ${LDDESTDIR} \
${LDADD}
.else defined(LDONLY)
${PROG}: ${DPSRCS} ${OBJS} ${LIBC} ${DPADD}
${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDDESTDIR} ${LDADD}
.endif
.else !defined(SRCS)
SRCS= ${PROG}.c
.if 0
${PROG}: ${DPSRCS} ${SRCS} ${LIBC} ${DPADD}
${CC} ${LDFLAGS} ${CFLAGS} -o ${.TARGET} ${.CURDIR}/${SRCS} \
${LDDESTDIR} ${LDADD}
MKDEP= -p
.else
# Always make an intermediate object file because:
# - it saves time rebuilding when only the library has changed
# - the name of the object gets put into the executable symbol table instead of
# the name of a variable temporary object.
# - it's useful to keep objects around for crunching.
OBJS= ${PROG}.o
${PROG}: ${DPSRCS} ${OBJS} ${LIBC} ${DPADD}
${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDDESTDIR} ${LDADD}
.endif
.endif
.if !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
!defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
!defined(MAN7) && !defined(MAN8) && !defined(NOMAN)
MAN1= ${PROG}.1
.endif
.endif
# XXX I think MANDEPEND is only used for groff. It should be named more
# generally and perhaps not be in the maninstall dependencies now it is
# here (or does maninstall always work when nothing is made?),
.MAIN: all
all: objwarn ${PROG} all-man _SUBDIR
.if !target(clean)
clean: _SUBDIR
rm -f a.out Errs errs mklog ${PROG} ${OBJS} ${CLEANFILES}
.if defined(CLEANDIRS) && !empty(CLEANDIRS)
rm -rf ${CLEANDIRS}
.endif
.endif
.if !target(install)
.if !target(beforeinstall)
beforeinstall:
.endif
realinstall: beforeinstall
.if defined(PROG)
${INSTALL} ${COPY} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
${INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}
.endif
.if defined(HIDEGAME)
(cd ${DESTDIR}/usr/games; rm -f ${PROG}; ln -s dm ${PROG}; \
chown games:bin ${PROG})
.endif
.if defined(LINKS) && !empty(LINKS)
@set ${LINKS}; \
while test $$# -ge 2; do \
l=${DESTDIR}$$1; \
shift; \
t=${DESTDIR}$$1; \
shift; \
${ECHO} $$t -\> $$l; \
rm -f $$t; \
ln ${LN_FLAGS} $$l $$t; \
done; true
.endif
install: afterinstall _SUBDIR
.if !target(afterinstall)
.if !defined(NOMAN)
afterinstall: realinstall maninstall
.else
afterinstall: realinstall
.endif
.endif
.endif
DISTRIBUTION?= bin
.if !target(distribute)
distribute: _SUBDIR
.for dist in ${DISTRIBUTION}
cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
.endfor
.endif
.if !target(lint)
lint: ${SRCS} _SUBDIR
.if defined(PROG)
@${LINT} ${LINTFLAGS} ${CFLAGS} ${.ALLSRC} | more 2>&1
.endif
.endif
.if defined(NOTAGS)
tags:
.endif
.if !target(tags)
tags: ${SRCS} _SUBDIR
.if defined(PROG)
@cd ${.CURDIR} && gtags ${GTAGSFLAGS}
.if defined(HTML)
@cd ${.CURDIR} && htags ${HTAGSFLAGS}
.endif
.endif
.endif
.if !defined(NOMAN)
.include <bsd.man.mk>
.elif !target(maninstall)
maninstall:
all-man:
.endif
.include <bsd.dep.mk>
.include <bsd.obj.mk>
[-- Attachment #4 --]
# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
# $Id: bsd.lib.mk,v 1.46.2.9 1998/06/14 16:10:48 steve Exp $
#
.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif
.if exists(${.CURDIR}/shlib_version)
SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
.endif
.if defined(DESTDIR)
CFLAGS+= -I${DESTDIR}/usr/include
CXXINCLUDES+= -I${DESTDIR}/usr/include/g++
.endif
.if defined(DEBUG_FLAGS)
CFLAGS+= ${DEBUG_FLAGS}
.endif
.if !defined(DEBUG_FLAGS)
STRIP?= -s
.endif
.include <bsd.libnames.mk>
.MAIN: all
# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
# .so used for PIC object files
.SUFFIXES:
.SUFFIXES: .out .o .po .so .s .S .c .cc .cpp .cxx .m .C .f .y .l
.c.o:
${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.c.po:
${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -X -r ${.TARGET}
.c.so:
${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.cc.o .C.o .cpp.o .cxx.o:
${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.cc.po .C.po .cpp.po .cxx.po:
${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -X -r ${.TARGET}
.cc.so .C.so .cpp.so .cxx.so:
${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.f.o:
${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.f.po:
${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
@${LD} -O ${.TARGET} -X -r ${.TARGET}
.f.so:
${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.s.o:
${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.s.po:
${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -X -r ${.TARGET}
.s.so:
${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.S.o:
${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
.S.po:
${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
.S.so:
${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -x -r ${.TARGET}
.m.po:
${CC} ${CFLAGS} -fgnu-runtime -pg -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -X -r ${.TARGET}
.m.o:
${CC} ${CFLAGS} -fgnu-runtime -c ${.IMPSRC} -o ${.TARGET}
@${LD} -O ${.TARGET} -X -r ${.TARGET}
.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
.if !defined(NOPROFILE) && !defined(INTERNALLIB)
_LIBS=lib${LIB}.a lib${LIB}_p.a
.else
_LIBS=lib${LIB}.a
.endif
.endif
.if !defined(NOPIC)
.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
.if defined(INSTALL_PIC_ARCHIVE)
_LIBS+=lib${LIB}_pic.a
.endif
.endif
.if !defined(PICFLAG)
PICFLAG=-fpic
.endif
all: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
lib${LIB}.a:: ${OBJS}
@${ECHO} building standard ${LIB} library
@rm -f lib${LIB}.a
@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort -q` ${ARADD}
${RANLIB} lib${LIB}.a
.if !defined(NOPROFILE)
POBJS+= ${OBJS:.o=.po}
lib${LIB}_p.a:: ${POBJS}
@${ECHO} building profiled ${LIB} library
@rm -f lib${LIB}_p.a
@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
${RANLIB} lib${LIB}_p.a
.endif
.if defined(DESTDIR)
LDDESTDIRENV?= LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib
.endif
.if !defined(NOPIC)
SOBJS+= ${OBJS:.o=.so}
lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
-o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
`lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
lib${LIB}_pic.a:: ${SOBJS}
@${ECHO} building special pic ${LIB} library
@rm -f lib${LIB}_pic.a
@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
${RANLIB} lib${LIB}_pic.a
.endif
llib-l${LIB}.ln: ${SRCS}
${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
.if !target(clean)
clean: _SUBDIR
rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
rm -f lib${LIB}.a llib-l${LIB}.ln
rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
rm -f ${SOBJS} shared/*.o
rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
.if defined(CLEANDIRS) && !empty(CLEANDIRS)
rm -rf ${CLEANDIRS}
.endif
.endif
.if defined(SRCS)
afterdepend:
@(TMP=_depend$$$$; \
sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \
mv $$TMP .depend)
.endif
.if !target(install)
.if !target(beforeinstall)
beforeinstall:
.endif
.if defined(PRECIOUSLIB)
SHLINSTALLFLAGS+= -fschg
.endif
realinstall: beforeinstall
.if !defined(INTERNALLIB)
${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
.if !defined(NOPROFILE)
${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
.endif
.endif
.if !defined(NOPIC)
.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
${DESTDIR}${SHLIBDIR}
.endif
.if defined(INSTALL_PIC_ARCHIVE)
${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
.endif
.endif
.if defined(LINKS) && !empty(LINKS)
@set ${LINKS}; \
while test $$# -ge 2; do \
l=${DESTDIR}$$1; \
shift; \
t=${DESTDIR}$$1; \
shift; \
${ECHO} $$t -\> $$l; \
rm -f $$t; \
ln ${LN_FLAGS} $$l $$t; \
done; true
.endif
install: afterinstall _SUBDIR
.if !target(afterinstall)
.if !defined(NOMAN)
afterinstall: realinstall maninstall
.else
afterinstall: realinstall
.endif
.endif
.endif
DISTRIBUTION?= bin
.if !target(distribute)
distribute: _SUBDIR
.for dist in ${DISTRIBUTION}
cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
.endfor
.endif
.if !target(lint)
lint:
.endif
.if defined(NOTAGS)
tags:
.endif
.if !target(tags)
tags: ${SRCS} _SUBDIR
@cd ${.CURDIR} && gtags ${GTAGSFLAGS}
.if defined(HTML)
@cd ${.CURDIR} && htags ${HTAGSFLAGS}
.endif
.endif
.if !defined(NOMAN)
.include <bsd.man.mk>
.elif !target(maninstall)
maninstall:
all-man:
.endif
.include <bsd.dep.mk>
.include <bsd.obj.mk>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?m0zXQW5-000IAPC>
