xref: /freebsd/contrib/bmake/Makefile (revision 148ee84570001f46b7b667c86573d378101c3801)
1*148ee845SSimon J. Gerraty#	$Id: Makefile,v 1.125 2023/05/17 00:15:46 sjg Exp $
23cbdda60SSimon J. Gerraty
33cbdda60SSimon J. GerratyPROG=	bmake
43cbdda60SSimon J. Gerraty
53cbdda60SSimon J. GerratySRCS= \
63cbdda60SSimon J. Gerraty	arch.c \
73cbdda60SSimon J. Gerraty	buf.c \
83cbdda60SSimon J. Gerraty	compat.c \
93cbdda60SSimon J. Gerraty	cond.c \
103cbdda60SSimon J. Gerraty	dir.c \
113cbdda60SSimon J. Gerraty	for.c \
123cbdda60SSimon J. Gerraty	hash.c \
133cbdda60SSimon J. Gerraty	job.c \
142c3632d1SSimon J. Gerraty	lst.c \
153cbdda60SSimon J. Gerraty	main.c \
163cbdda60SSimon J. Gerraty	make.c \
173cbdda60SSimon J. Gerraty	make_malloc.c \
183cbdda60SSimon J. Gerraty	meta.c \
194c620fe5SSimon J. Gerraty	metachar.c \
203cbdda60SSimon J. Gerraty	parse.c \
213cbdda60SSimon J. Gerraty	str.c \
223cbdda60SSimon J. Gerraty	suff.c \
233cbdda60SSimon J. Gerraty	targ.c \
243cbdda60SSimon J. Gerraty	trace.c \
253cbdda60SSimon J. Gerraty	util.c \
263cbdda60SSimon J. Gerraty	var.c
273cbdda60SSimon J. Gerraty
28e22fef7dSSimon J. Gerraty.-include "VERSION"
2949caa483SSimon J. Gerraty.-include "Makefile.inc"
30e22fef7dSSimon J. Gerraty
313cbdda60SSimon J. Gerraty# this file gets generated by configure
323cbdda60SSimon J. Gerraty.-include "Makefile.config"
333cbdda60SSimon J. Gerraty
343cbdda60SSimon J. Gerraty.if !empty(LIBOBJS)
353cbdda60SSimon J. GerratySRCS+= ${LIBOBJS:T:.o=.c}
363cbdda60SSimon J. Gerraty.endif
373cbdda60SSimon J. Gerraty
383cbdda60SSimon J. Gerraty# just in case
393cbdda60SSimon J. Gerratyprefix?= /usr
403cbdda60SSimon J. Gerratysrcdir?= ${.CURDIR}
413cbdda60SSimon J. Gerraty
420dede8b0SSimon J. GerratyDEFAULT_SYS_PATH?= ${prefix}/share/mk
433cbdda60SSimon J. Gerraty
443cbdda60SSimon J. GerratyCPPFLAGS+= -DUSE_META
453cbdda60SSimon J. GerratyCFLAGS+= ${CPPFLAGS}
463cbdda60SSimon J. GerratyCFLAGS+= -D_PATH_DEFSYSPATH=\"${DEFAULT_SYS_PATH}\"
473cbdda60SSimon J. GerratyCFLAGS+= -I. -I${srcdir} ${XDEFS} -DMAKE_NATIVE
483cbdda60SSimon J. GerratyCFLAGS+= ${COPTS.${.ALLSRC:M*.c:T:u}}
493bebe729SSimon J. GerratyCOPTS.main.c+= "-DMAKE_VERSION=\"${_MAKE_VERSION}\""
503cbdda60SSimon J. Gerraty
51e2eeea75SSimon J. Gerraty.for x in FORCE_MACHINE FORCE_MACHINE_ARCH
52e2eeea75SSimon J. Gerraty.ifdef $x
53e2eeea75SSimon J. GerratyCOPTS.main.c+= "-D$x=\"${$x}\""
54e2eeea75SSimon J. Gerraty.endif
55e2eeea75SSimon J. Gerraty.endfor
56e2eeea75SSimon J. Gerraty
573cbdda60SSimon J. Gerraty# meta mode can be useful even without filemon
5849caa483SSimon J. Gerraty# should be set by now
5949caa483SSimon J. GerratyUSE_FILEMON ?= no
6049caa483SSimon J. Gerraty.if ${USE_FILEMON:tl} != "no"
61ef0b2538SSimon J. Gerraty.PATH:	${srcdir}/filemon
6249caa483SSimon J. GerratySRCS+=	filemon_${USE_FILEMON}.c
6349caa483SSimon J. GerratyCOPTS.meta.c+= -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu}
6449caa483SSimon J. GerratyCOPTS.job.c+= ${COPTS.meta.c}
6549caa483SSimon J. Gerraty
6649caa483SSimon J. Gerraty.if ${USE_FILEMON} == "dev"
673cbdda60SSimon J. GerratyFILEMON_H ?= /usr/include/dev/filemon/filemon.h
683cbdda60SSimon J. Gerraty.if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h"
6949caa483SSimon J. GerratyCOPTS.filemon_dev.c += -DHAVE_FILEMON_H -I${FILEMON_H:H}
703cbdda60SSimon J. Gerraty.endif
71*148ee845SSimon J. Gerraty.elif ${USE_FILEMON} == "ktrace"
72*148ee845SSimon J. GerratyCOPTS.filemon_ktrace.c += -Wno-error=unused-parameter
73*148ee845SSimon J. Gerraty.endif
7449caa483SSimon J. Gerraty
7549caa483SSimon J. Gerraty.endif				# USE_FILEMON
763cbdda60SSimon J. Gerraty
773cbdda60SSimon J. Gerraty.PATH:	${srcdir}
783cbdda60SSimon J. Gerraty
793cbdda60SSimon J. Gerraty.if make(obj) || make(clean)
803cbdda60SSimon J. GerratySUBDIR+= unit-tests
813cbdda60SSimon J. Gerraty.endif
823cbdda60SSimon J. Gerraty
833cbdda60SSimon J. Gerraty# start-delete1 for bsd.after-import.mk
843cbdda60SSimon J. Gerraty# we skip a lot of this when building as part of FreeBSD etc.
853cbdda60SSimon J. Gerraty
863cbdda60SSimon J. Gerraty# list of OS's which are derrived from BSD4.4
8728a6bc81SSimon J. GerratyBSD44_LIST= NetBSD FreeBSD OpenBSD DragonFly MirBSD Bitrig
883cbdda60SSimon J. Gerraty# we are...
892c3632d1SSimon J. GerratyOS := ${.MAKE.OS:U${uname -s:L:sh}}
903cbdda60SSimon J. Gerraty# are we 4.4BSD ?
913cbdda60SSimon J. GerratyisBSD44:=${BSD44_LIST:M${OS}}
923cbdda60SSimon J. Gerraty
934fde40d9SSimon J. Gerraty.if ${isBSD44} == "" && ${OS:NDarwin:NLinux} != ""
943cbdda60SSimon J. GerratyMANTARGET= cat
953cbdda60SSimon J. GerratyINSTALL?=${srcdir}/install-sh
9612904384SSimon J. Gerraty.if ${MACHINE} == "sun386"
973cbdda60SSimon J. Gerraty# even I don't have one of these anymore :-)
983cbdda60SSimon J. GerratyCFLAGS+= -DPORTAR
9912904384SSimon J. Gerraty.elif ${OS} != "SunOS"
10012904384SSimon J. Gerraty# assume the worst
1013cbdda60SSimon J. GerratySRCS+= sigcompat.c
1023cbdda60SSimon J. GerratyCFLAGS+= -DSIGNAL_FLAGS=SA_RESTART
1033cbdda60SSimon J. Gerraty.endif
1043cbdda60SSimon J. Gerraty.else
1053cbdda60SSimon J. GerratyMANTARGET?= man
1063cbdda60SSimon J. Gerraty.endif
1073cbdda60SSimon J. Gerraty
1083cbdda60SSimon J. Gerraty# turn this on by default - ignored if we are root
1093cbdda60SSimon J. GerratyWITH_INSTALL_AS_USER=
1103cbdda60SSimon J. Gerraty
1115bcb7424SSimon J. Gerraty# suppress with -DWITHOUT_*
1123cbdda60SSimon J. GerratyOPTIONS_DEFAULT_YES+= \
1133cbdda60SSimon J. Gerraty	AUTOCONF_MK \
1143cbdda60SSimon J. Gerraty	INSTALL_MK \
1153cbdda60SSimon J. Gerraty	PROG_LINK
1163cbdda60SSimon J. Gerraty
1173cbdda60SSimon J. GerratyOPTIONS_DEFAULT_NO+= \
1183cbdda60SSimon J. Gerraty	PROG_VERSION
1193cbdda60SSimon J. Gerraty
1203cbdda60SSimon J. Gerraty# process options now
1213cbdda60SSimon J. Gerraty.include <own.mk>
1223cbdda60SSimon J. Gerraty
1233cbdda60SSimon J. Gerraty.if ${MK_PROG_VERSION} == "yes"
124e48f47ddSSimon J. GerratyPROG_NAME= ${PROG}-${_MAKE_VERSION}
1253cbdda60SSimon J. Gerraty.if ${MK_PROG_LINK} == "yes"
126e48f47ddSSimon J. GerratySYMLINKS+= ${PROG_NAME} ${BINDIR}/${PROG}
1273cbdda60SSimon J. Gerraty.endif
1283cbdda60SSimon J. Gerraty.endif
1293cbdda60SSimon J. Gerraty
1303cbdda60SSimon J. GerratyEXTRACT_MAN=no
1313cbdda60SSimon J. Gerraty# end-delete1
1323cbdda60SSimon J. Gerraty
1333cbdda60SSimon J. GerratyMAN= ${PROG}.1
1343cbdda60SSimon J. GerratyMAN1= ${MAN}
1353cbdda60SSimon J. Gerraty
13612904384SSimon J. Gerraty.if ${PROG} != "make"
1373cbdda60SSimon J. GerratyCLEANFILES+= my.history
1383cbdda60SSimon J. Gerraty.if make(${MAN}) || !exists(${srcdir}/${MAN})
139ef0b2538SSimon J. Gerratymy.history:
1403cbdda60SSimon J. Gerraty	@(echo ".Nm"; \
1413cbdda60SSimon J. Gerraty	echo "is derived from NetBSD"; \
1423cbdda60SSimon J. Gerraty	echo ".Xr make 1 ."; \
1433cbdda60SSimon J. Gerraty	echo "It uses autoconf to facilitate portability to other platforms."; \
1443cbdda60SSimon J. Gerraty	echo ".Pp") > $@
1453cbdda60SSimon J. Gerraty
1463cbdda60SSimon J. Gerraty.NOPATH: ${MAN}
1473cbdda60SSimon J. Gerraty${MAN}:	make.1 my.history
1483cbdda60SSimon J. Gerraty	@echo making $@
14945447996SSimon J. Gerraty	@sed \
15045447996SSimon J. Gerraty	-e '/^.Dt/s/MAKE/${PROG:tu}/' \
15145447996SSimon J. Gerraty	-e 's/^.Nx/NetBSD/' \
15245447996SSimon J. Gerraty	-e '/^.Nm/s/make/${PROG}/' \
1533cbdda60SSimon J. Gerraty	-e '/^.Sh HISTORY/rmy.history' \
1543cbdda60SSimon J. Gerraty	-e '/^.Sh HISTORY/,$$s,^.Nm,make,' ${srcdir}/make.1 > $@
1553cbdda60SSimon J. Gerraty
1563cbdda60SSimon J. Gerratyall beforeinstall: ${MAN}
1573cbdda60SSimon J. Gerraty_mfromdir=.
1583cbdda60SSimon J. Gerraty.endif
1593cbdda60SSimon J. Gerraty.endif
1603cbdda60SSimon J. Gerraty
1613cbdda60SSimon J. GerratyMANTARGET?= cat
1623cbdda60SSimon J. GerratyMANDEST?= ${MANDIR}/${MANTARGET}1
1633cbdda60SSimon J. Gerraty
1643cbdda60SSimon J. Gerraty.if ${MANTARGET} == "cat"
1653cbdda60SSimon J. Gerraty_mfromdir=${srcdir}
1663cbdda60SSimon J. Gerraty.endif
1673cbdda60SSimon J. Gerraty
1683cbdda60SSimon J. Gerraty.include <prog.mk>
1693cbdda60SSimon J. Gerraty
1703cbdda60SSimon J. GerratyCPPFLAGS+= -DMAKE_NATIVE -DHAVE_CONFIG_H
1713cbdda60SSimon J. GerratyCOPTS.var.c += -Wno-cast-qual
1723cbdda60SSimon J. GerratyCOPTS.job.c += -Wno-format-nonliteral
1733cbdda60SSimon J. GerratyCOPTS.parse.c += -Wno-format-nonliteral
1743cbdda60SSimon J. GerratyCOPTS.var.c += -Wno-format-nonliteral
1753cbdda60SSimon J. Gerraty
1763cbdda60SSimon J. Gerraty# Force these
177db29cad8SSimon J. GerratySHAREDIR= ${SHAREDIR.bmake:U${prefix}/share}
178db29cad8SSimon J. GerratyBINDIR= ${BINDIR.bmake:U${prefix}/bin}
179db29cad8SSimon J. GerratyMANDIR= ${MANDIR.bmake:U${SHAREDIR}/man}
1803cbdda60SSimon J. Gerraty
1813cbdda60SSimon J. Gerraty${OBJS}: config.h
1823cbdda60SSimon J. Gerraty
1833cbdda60SSimon J. Gerraty# start-delete2 for bsd.after-import.mk
184e22fef7dSSimon J. Gerraty
185e22fef7dSSimon J. Gerraty# make sure that MAKE_VERSION gets updated.
186ef0b2538SSimon J. Gerratymain.o: ${srcdir}/VERSION
187e22fef7dSSimon J. Gerraty
1881748de26SSimon J. Gerraty.if ${MK_AUTOCONF_MK} == "yes"
189e22fef7dSSimon J. GerratyCONFIGURE_DEPS += ${.CURDIR}/VERSION
19049caa483SSimon J. Gerraty# we do not need or want the generated makefile
19149caa483SSimon J. GerratyCONFIGURE_ARGS += --without-makefile
19212904384SSimon J. GerratyAUTOCONF_GENERATED_MAKEFILE = Makefile.config
1931748de26SSimon J. Gerraty.include <autoconf.mk>
1941748de26SSimon J. Gerraty.endif
1953cbdda60SSimon J. GerratySHARE_MK ?= ${SHAREDIR}/mk
1963cbdda60SSimon J. GerratyMKSRC = ${srcdir}/mk
1973cbdda60SSimon J. GerratyINSTALL ?= ${srcdir}/install-sh
1983cbdda60SSimon J. Gerraty
1993cbdda60SSimon J. Gerraty.if ${MK_INSTALL_MK} == "yes"
2003cbdda60SSimon J. Gerratyinstall: install-mk
2013cbdda60SSimon J. Gerraty.endif
2023cbdda60SSimon J. Gerraty
2033cbdda60SSimon J. Gerratybeforeinstall:
204dc1b8c9aSSimon J. Gerraty	test -d ${DESTDIR}${BINDIR} || ${INSTALL} -m ${DIRMODE} -d ${DESTDIR}${BINDIR}
205dc1b8c9aSSimon J. Gerraty	test -d ${DESTDIR}${MANDEST} || ${INSTALL} -m ${DIRMODE} -d ${DESTDIR}${MANDEST}
2063cbdda60SSimon J. Gerraty
2073cbdda60SSimon J. Gerratyinstall-mk:
2083cbdda60SSimon J. Gerraty.if exists(${MKSRC}/install-mk)
209dc1b8c9aSSimon J. Gerraty	test -d ${DESTDIR}${SHARE_MK} || ${INSTALL} -m ${DIRMODE} -d ${DESTDIR}${SHARE_MK}
210dc1b8c9aSSimon J. Gerraty	sh ${MKSRC}/install-mk -v -m ${NONBINMODE} ${DESTDIR}${SHARE_MK}
2113cbdda60SSimon J. Gerraty.else
2123cbdda60SSimon J. Gerraty	@echo need to unpack mk.tar.gz under ${srcdir} or set MKSRC; false
2133cbdda60SSimon J. Gerraty.endif
2143cbdda60SSimon J. Gerraty# end-delete2
2153cbdda60SSimon J. Gerraty
2163cbdda60SSimon J. Gerraty# A simple unit-test driver to help catch regressions
2172c3632d1SSimon J. GerratyTEST_MAKE ?= ${.OBJDIR}/${PROG:T}
218532d4fbfSSimon J. Gerratyaccept test: .NOMETA
2192c3632d1SSimon J. Gerraty	cd ${.CURDIR}/unit-tests && \
2202c3632d1SSimon J. Gerraty	MAKEFLAGS= ${TEST_MAKE} -r -m / ${.TARGET} ${TESTS:DTESTS=${TESTS:Q}}
2212c3632d1SSimon J. Gerraty
222532d4fbfSSimon J. Gerraty
223532d4fbfSSimon J. Gerraty.if make(test) && ${MK_AUTO_OBJ} == "yes"
224532d4fbfSSimon J. Gerraty# The test target above visits unit-tests with -r -m /
225532d4fbfSSimon J. Gerraty# which prevents MK_AUTO_OBJ doing its job
226532d4fbfSSimon J. Gerraty# so do it here
227532d4fbfSSimon J. Gerraty.if defined(MAKEOBJDIRPREFIX) || ${MAKEOBJDIR:U:M*/*} != ""
228532d4fbfSSimon J. Gerraty_utobj = ${.OBJDIR}/unit-tests
229532d4fbfSSimon J. Gerraty.else
230532d4fbfSSimon J. Gerraty_utobj = ${.CURDIR}/unit-tests/${MAKEOBJDIR:Uobj}
231532d4fbfSSimon J. Gerraty.endif
232532d4fbfSSimon J. Gerratyutobj: .NOMETA
233532d4fbfSSimon J. Gerraty	@test -d ${_utobj} && exit 0; \
234532d4fbfSSimon J. Gerraty	echo "[Creating ${_utobj}...]"; \
235532d4fbfSSimon J. Gerraty	umask ${OBJDIR_UMASK:U002}; \
236532d4fbfSSimon J. Gerraty	mkdir -p ${_utobj}
237532d4fbfSSimon J. Gerratytest: utobj
238532d4fbfSSimon J. Gerraty.endif
239