-# @(#)Makefile 4.9 (Berkeley) %G%
#
-DESTDIR=
-CFLAGS= -O
+# Copyright (c) 1986 Regents of the University of California.
+# All rights reserved. The Berkeley software License Agreement
+# specifies the terms and conditions for redistribution.
+#
+# @(#)Makefile 4.17 (Berkeley) %G%
+#
+# This makefile is designed to be run in one of three ways:
+#
+# make clean
+# make depend
+# make build
+# make installsrc
+# This is the most rigorous way to rebuild the source tree.
+# The first two steps will clean the source tree and remake the dependencies.
+# The `make build' will compile and install the libraries and the compiler
+# twice before building the rest of the sources. The `make installsrc' will
+# then install the remaining binaries.
+#
+# make libthenall
+# make installsrc
+# The `make libthenall' will compile and install the libraries, compile
+# and install the compiler and then compile everything else. Note,
+# however, that the libraries will have been built with the old compiler.
+# The `make installsrc' will then install the remaining binaries.
+#
+# make all
+# make install
+# The `make all' (the default) will compile everything, and install
+# nothing. The `make install' will then install everything.
+#
+# C library options: passed to libc makefile.
+# See lib/libc/Makefile for explanation.
+#
+# HOSTLOOKUP must be either named or hosttable.
+# DFLMON must be either mon.o or gmon.o.
+# DEFS may include -DLIBC_SCCS, -DSYSLIBC_SCCS, both, or neither.
+#
+DEFS= -DLIBC_SCCS
+DFLMON= mon.o
+HOSTLOOKUP= named
+LIBCDEFS= HOSTLOOKUP=${HOSTLOOKUP} DFLMON=${DFLMON} DEFS="${DEFS}"
-# Programs that live in subdirectories, and have makefiles of their own.
+# global flags
+# SRC_MFLAGS are used on makes in command source directories,
+# but not in library or compiler directories that will be installed
+# for use in compiling everything else.
#
-LIBDIR= lib usr.lib
-SRCDIR= bin usr.bin etc ucb new games local
+DESTDIR=
+CFLAGS= -O
+SRC_MFLAGS= -k
-all: ${LIBDIR} ${SRCDIR}
+LIBDIR= lib usr.lib
+# order is important, old and man must be #1 and #2
+SRCDIR= old man bin usr.bin etc ucb new games local
-${LIBDIR} ${SRCDIR}: FRC
- cd $@; make ${MFLAGS}
+all: ${LIBDIR} ${SRCDIR}
-build: FRC
- echo installing /usr/include
- cd include; make ${MFLAGS} install
- cd lib; make ${MFLAGS}
- echo installing /lib
- cd lib; make ${MFLAGS} install
- cd usr.lib; make ${MFLAGS}
- echo installing /usr/lib
- cd usr.lib; make ${MFLAGS} install
- -for i in ${SRCDIR}; do (cd $$i; make ${MFLAGS}); done
+libthenall: buildlib1 buildlib3 src
-FRC:
+build: buildlib1 buildlib2 buildlib3 src
+
+src: ${SRCDIR}
-install:
- -for i in ${SUBDIR}; do \
- (cd $$i; make ${MFLAGS} DESTDIR=${DESTDIR} install); done
+lib: FRC
+ cd lib/libc; make ${MFLAGS} ${LIBCDEFS}
+ cd lib; make ${MFLAGS} pcc cpp c2
-installsrc:
+usr.lib ${SRCDIR}: FRC
+ @echo
+ @echo === compiling $@
+ cd $@; make ${MFLAGS} ${SRC_MFLAGS}
+
+buildlib1: FRC
+ @echo === installing /usr/include
+ cd include; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ @echo
+ @echo === compiling libc.a
+ cd lib/libc; make ${MFLAGS} ${LIBCDEFS}
+ @echo === installing /lib/libc.a
+ cd lib/libc; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ @echo
+ @echo === compiling C compiler
+ cd lib; make ${MFLAGS} pcc cpp c2
+ @echo
+ @echo === installing C compiler
+ cd lib/pcc; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ cd lib/cpp; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ cd lib/c2; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ @echo
+
+buildlib2: FRC
+ @echo === cleaning lib
+ cd lib; make ${MFLAGS} clean
+ @echo === re-compiling libc.a
+ cd lib/libc; make ${MFLAGS} ${LIBCDEFS}
+ @echo === re-installing /lib/libc.a
+ cd lib/libc; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ @echo
+ @echo === re-compiling C compiler
+ cd lib; make ${MFLAGS} pcc cpp c2
+ @echo === re-installing C compiler
+ cd lib/pcc; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ cd lib/cpp; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ cd lib/c2; make ${MFLAGS} DESTDIR=${DESTDIR} install
+ @echo
+
+buildlib3: FRC
+ @echo === compiling usr.lib
+ cd usr.lib; make ${MFLAGS} ${SRC_MFLAGS}
+ @echo === installing /usr/lib
+ cd usr.lib; make ${MFLAGS} ${SRC_MFLAGS} DESTDIR=${DESTDIR} install
+ @echo === done with libraries
+ @echo
+
+install: FRC
+ -for i in ${LIBDIR} ${SRCDIR}; do \
+ echo; \
+ echo === installing $$i; \
+ (cd $$i; \
+ make ${MFLAGS} ${SRC_MFLAGS} DESTDIR=${DESTDIR} install); \
+ done
+
+installsrc: FRC
-for i in ${SRCDIR}; do \
- (cd $$i; make ${MFLAGS} DESTDIR=${DESTDIR} install); done
+ echo; \
+ echo === installing $$i; \
+ (cd $$i; \
+ make ${MFLAGS} ${SRC_MFLAGS} DESTDIR=${DESTDIR} install); \
+ done
+
+depend: FRC
+ for i in ${LIBDIR} ${SRCDIR}; do \
+ echo; \
+ echo === doing dependencies for $$i; \
+ (cd $$i; make ${MFLAGS} depend); \
+ done
-tags:
+tags: FRC
for i in include lib usr.lib; do \
+ echo; \
+ echo === making tags for $$i; \
(cd $$i; make ${MFLAGS} TAGSFILE=../tags tags); \
done
sort -u +0 -1 -o tags tags
-clean:
- rm -f a.out core *.s *.o
- for i in ${LIBDIR} ${SRCDIR}; do (cd $$i; make ${MFLAGS} clean); done
+clean: FRC
+ for i in ${LIBDIR} ${SRCDIR}; do \
+ echo; \
+ echo === cleaning $$i; \
+ (cd $$i; make -k ${MFLAGS} clean); \
+ done
+
+FRC: