Makefile revision 17401
1#
2#	$Id: Makefile,v 1.91 1996/07/27 21:47:42 peter Exp $
3#
4# Make command line options:
5#	-DCLOBBER will remove /usr/include
6#	-DMAKE_LOCAL to add ./local to the SUBDIR list
7#	-DMAKE_PORTS to add ./ports to the SUBDIR list
8#	-DMAKE_EBONES to build eBones (KerberosIV)
9#
10#	-DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
11#	-DNOCLEAN do not clean at all
12#	-DNOCRYPT will prevent building of crypt versions
13#	-DNOLKM do not build loadable kernel modules
14#	-DNOOBJDIR do not run ``${MAKE} obj''
15#	-DNOPROFILE do not build profiled libraries
16#	-DNOSECURE do not go into secure subdir
17#	-DNOGAMES do not go into games subdir
18
19#
20# The intended user-driven targets are:
21# world       - rebuild *everything*, including glue to help do upgrades.
22# reinstall   - use an existing (eg: NFS mounted) build to do an update.
23# update      - convenient way to update your source tree (eg: sup/cvs)
24# most        - build user commands, no libraries or include files
25# installmost - install user commands, no libraries or include files
26# all         - run through SUBDIR and build everything.  This is an implicit
27#               rule, not particularly useful for everybody.  Use 'world'.
28
29
30# Put initial settings here.
31SUBDIR=
32
33# We must do include and lib first so that the perl *.ph generation
34# works correctly as it uses the header files installed by this.
35.if exists(include)
36SUBDIR+= include
37.endif
38.if exists(lib)
39SUBDIR+= lib
40.endif
41
42.if exists(bin)
43SUBDIR+= bin
44.endif
45.if exists(games) && !defined(NOGAMES)
46SUBDIR+= games
47.endif
48.if exists(gnu)
49SUBDIR+= gnu
50.endif
51.if exists(eBones) && !defined(NOCRYPT) && defined(MAKE_EBONES)
52SUBDIR+= eBones
53.endif
54.if exists(libexec)
55SUBDIR+= libexec
56.endif
57.if exists(sbin)
58SUBDIR+= sbin
59.endif
60.if exists(share)
61SUBDIR+= share
62.endif
63.if exists(sys)
64SUBDIR+= sys
65.endif
66.if exists(usr.bin)
67SUBDIR+= usr.bin
68.endif
69.if exists(usr.sbin)
70SUBDIR+= usr.sbin
71.endif
72.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
73SUBDIR+= secure
74.endif
75.if exists(lkm) && !defined(NOLKM)
76SUBDIR+= lkm
77.endif
78
79# etc must be last for "distribute" to work
80.if exists(etc) && make(distribute)
81SUBDIR+= etc
82.endif
83
84# These are last, since it is nice to at least get the base system
85# rebuilt before you do them.
86.if defined(MAKE_LOCAL) & exists(local) & exists(local/Makefile)
87SUBDIR+= local
88.endif
89.if defined(MAKE_PORTS) & exists(ports) & exists(ports/Makefile)
90SUBDIR+= ports
91.endif
92
93# Handle -DNOOBJDIR, -DNOCLEAN and -DNOCLEANDIR
94.if defined(NOOBJDIR)
95OBJDIR=
96.else
97OBJDIR=		obj
98.endif
99
100.if defined(NOCLEAN)
101CLEANDIR=
102.else
103.if defined(NOCLEANDIR)
104CLEANDIR=	clean
105.else
106CLEANDIR=	cleandir
107.endif
108.endif
109
110#
111# While building tools for bootstrapping, we dont need to waste time on
112# profiled libraries or man pages.  This speeds things up somewhat.
113#
114MK_FLAGS=	-DNOMAN -DNOPROFILE
115
116#
117# world
118#
119# Attempt to rebuild and reinstall *everything*, with reasonable chance of
120# success, regardless of how old your existing system is.
121#
122# >> Beware, it overwrites the local build environment! <<
123#
124world:
125.if target(pre-world)
126	@echo "--------------------------------------------------------------"
127	@echo " Making 'pre-world' target"
128	@echo "--------------------------------------------------------------"
129	cd ${.CURDIR} && ${MAKE} pre-world
130	@echo
131.endif
132	@echo "--------------------------------------------------------------"
133	@echo " Making hierarchy"
134	@echo "--------------------------------------------------------------"
135	cd ${.CURDIR} && ${MAKE} hierarchy
136	@echo
137	@echo "--------------------------------------------------------------"
138	@echo " Rebuilding /usr/share/mk"
139	@echo "--------------------------------------------------------------"
140	cd ${.CURDIR} && ${MAKE} mk
141	@echo
142	@echo "--------------------------------------------------------------"
143	@echo " Cleaning up the source tree"
144	@echo "--------------------------------------------------------------"
145.if defined(NOCLEAN)
146	@echo "Not cleaning anything! I sure hope you know what you are doing!"
147.else
148.if defined(NOCLEANDIR)
149	cd ${.CURDIR} && ${MAKE} clean
150.else
151	cd ${.CURDIR} && ${MAKE} cleandir
152.endif
153.endif
154	@echo
155.if !defined(NOOBJ)
156	@echo "--------------------------------------------------------------"
157	@echo " Rebuilding the obj tree"
158	@echo "--------------------------------------------------------------"
159	cd ${.CURDIR} && ${MAKE} obj
160.endif
161	@echo
162	@echo "--------------------------------------------------------------"
163	@echo " Rebuilding bootstrap tools"
164	@echo "--------------------------------------------------------------"
165	cd ${.CURDIR} && ${MAKE} bootstrap
166	@echo
167	@echo "--------------------------------------------------------------"
168	@echo " Rebuilding tools necessary to build the include files"
169	@echo "--------------------------------------------------------------"
170	cd ${.CURDIR} && ${MAKE} include-tools
171	@echo
172	@echo "--------------------------------------------------------------"
173	@echo " Rebuilding /usr/include"
174	@echo "--------------------------------------------------------------"
175	cd ${.CURDIR} && ${MAKE} includes
176	@echo
177	@echo "--------------------------------------------------------------"
178	@echo " Rebuilding tools needed to build the libraries"
179	@echo "--------------------------------------------------------------"
180	cd ${.CURDIR} && ${MAKE} lib-tools
181	@echo
182	@echo "--------------------------------------------------------------"
183	@echo " Rebuilding /usr/lib"
184	@echo "--------------------------------------------------------------"
185	cd ${.CURDIR} && ${MAKE} libraries
186	@echo
187	@echo "--------------------------------------------------------------"
188	@echo " Rebuilding C compiler, make, symorder, sgmlfmt and zic(8)"
189	@echo "--------------------------------------------------------------"
190	cd ${.CURDIR} && ${MAKE} build-tools
191	@echo
192	@echo "--------------------------------------------------------------"
193	@echo " Rebuilding.. The whole thing"
194	@echo "--------------------------------------------------------------"
195	cd ${.CURDIR} && ${MAKE} depend && ${MAKE} all install
196	cd ${.CURDIR}/share/man && ${MAKE} makedb
197.if target(post-world)
198	@echo
199	@echo "--------------------------------------------------------------"
200	@echo " Making 'post-world' target"
201	@echo "--------------------------------------------------------------"
202	cd ${.CURDIR} && ${MAKE} post-world
203.endif
204	@echo
205	@echo "--------------------------------------------------------------"
206	@echo "make world completed on `date`"
207
208#
209# reinstall
210#
211# If you have a build server, you can NFS mount the source and obj directories
212# and do a 'make reinstall' on the *client* to install new binaries from the
213# most recent server build.
214#
215reinstall:
216	@echo "--------------------------------------------------------------"
217	@echo " Making hierarchy"
218	@echo "--------------------------------------------------------------"
219	cd ${.CURDIR} && ${MAKE} hierarchy
220	@echo
221	@echo "--------------------------------------------------------------"
222	@echo " Rebuilding /usr/share/mk"
223	@echo "--------------------------------------------------------------"
224	cd ${.CURDIR} && ${MAKE} mk
225	@echo
226	@echo "--------------------------------------------------------------"
227	@echo " Rebuilding /usr/include"
228	@echo "--------------------------------------------------------------"
229	cd ${.CURDIR} && ${MAKE} includes
230	@echo
231	@echo "--------------------------------------------------------------"
232	@echo " Reinstalling..  The whole thing"
233	@echo "--------------------------------------------------------------"
234	@echo
235	cd ${.CURDIR} && ${MAKE} install
236	cd ${.CURDIR}/share/man && ${MAKE} makedb
237
238
239#
240# update
241#
242# Update the source tree, by running sup and/or running cvs to update to the
243# latest copy.
244#
245update:
246.if defined(SUP_UPDATE)
247	@echo "--------------------------------------------------------------"
248	@echo "Running sup"
249	@echo "--------------------------------------------------------------"
250	@sup -v ${SUPFILE}
251.if defined(SUPFILE1)
252	@sup -v ${SUPFILE1}
253.endif
254.if defined(SUPFILE2)
255	@sup -v ${SUPFILE2}
256.endif
257.endif
258.if defined(CVS_UPDATE)
259	@echo "--------------------------------------------------------------"
260	@echo "Updating /usr/src from cvs repository" ${CVSROOT}
261	@echo "--------------------------------------------------------------"
262	cd ${.CURDIR} &&  cvs -q update -P -d
263.endif
264
265
266#
267# most
268#
269# Build most of the user binaries on the existing system libs and includes.
270#
271most:
272	@echo "--------------------------------------------------------------"
273	@echo " Building programs only"
274	@echo "--------------------------------------------------------------"
275	cd ${.CURDIR}/bin	&&	${MAKE} ${.MAKEFLAGS} all
276	cd ${.CURDIR}/sbin	&&	${MAKE} ${.MAKEFLAGS} all
277	cd ${.CURDIR}/libexec	&&	${MAKE} ${.MAKEFLAGS} all
278	cd ${.CURDIR}/usr.bin	&&	${MAKE} ${.MAKEFLAGS} all
279	cd ${.CURDIR}/usr.sbin	&&	${MAKE} ${.MAKEFLAGS} all
280	cd ${.CURDIR}/gnu/libexec &&	${MAKE} ${.MAKEFLAGS} all
281	cd ${.CURDIR}/gnu/usr.bin &&	${MAKE} ${.MAKEFLAGS} all
282	cd ${.CURDIR}/gnu/usr.sbin &&	${MAKE} ${.MAKEFLAGS} all
283#.if defined(MAKE_EBONES) && !defined(NOCRYPT)
284#	cd ${.CURDIR}/eBones	&&	${MAKE} ${.MAKEFLAGS} most
285#.endif
286#.if !defined(NOSECURE) && !defined(NOCRYPT)
287#	cd ${.CURDIR}/secure	&&	${MAKE} ${.MAKEFLAGS} most
288#.endif
289
290#
291# installmost
292#
293# Install the binaries built by the 'most' target.  This does not include
294# libraries or include files.
295#
296installmost:
297	@echo "--------------------------------------------------------------"
298	@echo " Installing programs only"
299	@echo "--------------------------------------------------------------"
300	cd ${.CURDIR}/bin	&&	${MAKE} ${.MAKEFLAGS} install
301	cd ${.CURDIR}/sbin	&&	${MAKE} ${.MAKEFLAGS} install
302	cd ${.CURDIR}/libexec	&&	${MAKE} ${.MAKEFLAGS} install
303	cd ${.CURDIR}/usr.bin	&&	${MAKE} ${.MAKEFLAGS} install
304	cd ${.CURDIR}/usr.sbin	&&	${MAKE} ${.MAKEFLAGS} install
305	cd ${.CURDIR}/gnu/libexec &&	${MAKE} ${.MAKEFLAGS} install
306	cd ${.CURDIR}/gnu/usr.bin &&	${MAKE} ${.MAKEFLAGS} install
307	cd ${.CURDIR}/gnu/usr.sbin &&	${MAKE} ${.MAKEFLAGS} install
308#.if defined(MAKE_EBONES) && !defined(NOCRYPT)
309#	cd ${.CURDIR}/eBones	&&	${MAKE} ${.MAKEFLAGS} installmost
310#.endif
311#.if !defined(NOSECURE) && !defined(NOCRYPT)
312#	cd ${.CURDIR}/secure	&&	${MAKE} ${.MAKEFLAGS} installmost
313#.endif
314
315#
316# ------------------------------------------------------------------------
317#
318# From here onwards are utility targets used by the 'make world' and
319# related targets.  If your 'world' breaks, you may like to try to fix
320# the problem and manually run the following targets to attempt to
321# complete the build.  Beware, this is *not* guaranteed to work, you
322# need to have a pretty good grip on the current state of the system
323# to attempt to manually finish it.  If in doubt, 'make world' again.
324#
325
326#
327# heirarchy - ensure that all the needed directories are present
328#
329hierarchy:
330	cd ${.CURDIR}/etc &&		${MAKE} distrib-dirs
331
332#
333# mk - update the /usr/share/mk makefiles.
334#
335mk:
336	cd ${.CURDIR}/share/mk &&	${MAKE} install
337
338#
339# bootstrap - [re]build tools needed to run the actual build, this includes
340# tools needed by 'make depend', as some tools are needed to generate source
341# for the dependency information to be gathered from.
342#
343bootstrap:
344	cd ${.CURDIR}/usr.bin/make && ${MAKE} depend && \
345		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
346	cd ${.CURDIR}/usr.bin/xinstall && ${MAKE} depend && \
347		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
348	cd ${.CURDIR}/usr.bin/lex && ${MAKE} bootstrap && ${MAKE} depend && \
349		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
350	cd ${.CURDIR}/usr.bin/tsort && ${MAKE} depend && \
351		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
352
353#
354# include-tools - generally the same as 'bootstrap', except that it's for
355# things that are specifically needed to generate include files.
356#
357# XXX should be merged with bootstrap, it's not worth keeeping them seperate
358#
359include-tools:
360	cd ${.CURDIR}/usr.bin/rpcgen && ${MAKE} depend && \
361		${MAKE} ${MK_FLAGS} depend all install ${CLEANDIR} ${OBJDIR}
362
363#
364# includes - possibly generate and install the include files.
365#
366includes:
367.if defined(CLOBBER)
368	rm -rf ${DESTDIR}/usr/include/*
369	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
370		-p ${DESTDIR}/usr/include
371.endif
372	cd ${.CURDIR}/include &&		${MAKE} install
373	cd ${.CURDIR}/gnu/include &&		${MAKE} install
374	cd ${.CURDIR}/gnu/lib/libreadline &&	${MAKE} beforeinstall
375	cd ${.CURDIR}/gnu/lib/libregex &&	${MAKE} beforeinstall
376	cd ${.CURDIR}/gnu/lib/libg++ &&         ${MAKE} beforeinstall
377	cd ${.CURDIR}/gnu/lib/libdialog &&      ${MAKE} beforeinstall
378.if exists(eBones) && !defined(NOCRYPT) && defined(MAKE_EBONES)
379	cd ${.CURDIR}/eBones/include &&		${MAKE} beforeinstall
380	cd ${.CURDIR}/eBones/lib/libkrb &&	${MAKE} beforeinstall
381	cd ${.CURDIR}/eBones/lib/libkadm &&	${MAKE} beforeinstall
382.endif
383	cd ${.CURDIR}/lib/libc &&		${MAKE} beforeinstall
384	cd ${.CURDIR}/lib/libcurses &&		${MAKE} beforeinstall
385	cd ${.CURDIR}/lib/libedit &&		${MAKE} beforeinstall
386	cd ${.CURDIR}/lib/libftpio &&		${MAKE} beforeinstall
387	cd ${.CURDIR}/lib/libmd &&		${MAKE} beforeinstall
388	cd ${.CURDIR}/lib/libmytinfo &&         ${MAKE} beforeinstall
389	cd ${.CURDIR}/lib/libncurses &&		${MAKE} beforeinstall
390.if !defined(WANT_CSRG_LIBM)
391	cd ${.CURDIR}/lib/msun &&		${MAKE} beforeinstall
392.endif
393	cd ${.CURDIR}/lib/libpcap &&		${MAKE} beforeinstall
394	cd ${.CURDIR}/lib/librpcsvc &&		${MAKE} beforeinstall
395	cd ${.CURDIR}/lib/libskey &&		${MAKE} beforeinstall
396	cd ${.CURDIR}/lib/libtcl &&		${MAKE} beforeinstall
397	cd ${.CURDIR}/lib/libtermcap &&		${MAKE} beforeinstall
398	cd ${.CURDIR}/lib/libcom_err &&		${MAKE} beforeinstall
399	cd ${.CURDIR}/lib/libss &&		${MAKE} beforeinstall
400	cd ${.CURDIR}/lib/libscsi &&		${MAKE} beforeinstall
401	cd ${.CURDIR}/lib/libutil &&		${MAKE} beforeinstall
402
403#
404# lib-tools - build tools to compile and install the libraries.
405#
406lib-tools:
407	cd ${.CURDIR}/gnu/usr.bin/ld && ${MAKE} depend && \
408		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
409	cd ${.CURDIR}/usr.bin/ar && ${MAKE} depend && \
410		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
411	cd ${.CURDIR}/usr.bin/ranlib && ${MAKE} depend && \
412		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
413	cd ${.CURDIR}/usr.bin/nm && ${MAKE} depend && \
414		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
415	cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \
416		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
417	cd ${.CURDIR}/usr.bin/compile_et && ${MAKE} depend && \
418		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR} && \
419		rm -f /usr/sbin/compile_et
420	cd ${.CURDIR}/usr.bin/mk_cmds && ${MAKE} depend && \
421		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
422
423#
424# libraries - build and install the libraries
425#
426libraries:
427.if exists(lib/libcompat)
428	cd ${.CURDIR}/lib/libcompat && ${MAKE} depend && \
429		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
430.endif
431.if exists(lib/libncurses)
432	cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \
433		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
434.endif
435.if exists(lib/libtermcap)
436	cd ${.CURDIR}/lib/libtermcap && ${MAKE} depend && \
437		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
438.endif
439.if exists(lib)
440	cd ${.CURDIR}/lib/csu/i386 && ${MAKE} depend && \
441		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
442.endif
443.if exists(gnu)
444	cd ${.CURDIR}/gnu/lib && ${MAKE} depend && \
445		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
446	cd ${.CURDIR}/gnu/usr.bin/cc/libgcc && ${MAKE} depend && \
447		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
448.endif
449.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
450	cd ${.CURDIR}/secure/lib && ${MAKE} depend && \
451		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
452.endif
453.if exists(lib)
454	cd ${.CURDIR}/lib && ${MAKE} depend && \
455		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
456.endif
457.if exists(usr.bin/lex/lib)
458	cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \
459		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
460.endif
461.if exists(eBones) && !defined(NOCRYPT) && defined(MAKE_EBONES)
462	cd ${.CURDIR}/eBones/lib && ${MAKE} depend && \
463		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
464.endif
465.if exists(usr.sbin/pcvt/keycap)
466	cd ${.CURDIR}/usr.sbin/pcvt/keycap && ${MAKE} depend && \
467		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
468.endif
469
470#
471# build-tools - build and install any other tools needed to complete the
472# compile and install.
473#
474build-tools:
475	cd ${.CURDIR}/gnu/usr.bin/cc && ${MAKE} depend && \
476		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
477	cd ${.CURDIR}/usr.bin/symorder && ${MAKE} depend && \
478		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
479	cd ${.CURDIR}/usr.bin/sgmlfmt && ${MAKE} depend && \
480		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR} 
481	cd ${.CURDIR}/share/sgml && ${MAKE} depend && \
482		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR} 
483	cd ${.CURDIR}/usr.sbin/zic && ${MAKE} depend && \
484		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
485
486.include <bsd.subdir.mk>
487