1*6eef5f0cSAntonio Huete Jimenez# $Id: Makefile,v 1.122 2022/10/08 02:53:30 sjg Exp $ 25f1e34d9SAlexandre Perrin 35f1e34d9SAlexandre PerrinPROG= bmake 45f1e34d9SAlexandre Perrin 55f1e34d9SAlexandre PerrinSRCS= \ 65f1e34d9SAlexandre Perrin arch.c \ 75f1e34d9SAlexandre Perrin buf.c \ 85f1e34d9SAlexandre Perrin compat.c \ 95f1e34d9SAlexandre Perrin cond.c \ 105f1e34d9SAlexandre Perrin dir.c \ 115f1e34d9SAlexandre Perrin for.c \ 125f1e34d9SAlexandre Perrin hash.c \ 135f1e34d9SAlexandre Perrin job.c \ 14a34d5fb1SAntonio Huete Jimenez lst.c \ 155f1e34d9SAlexandre Perrin main.c \ 165f1e34d9SAlexandre Perrin make.c \ 175f1e34d9SAlexandre Perrin make_malloc.c \ 185f1e34d9SAlexandre Perrin meta.c \ 19f445c897SJohn Marino metachar.c \ 205f1e34d9SAlexandre Perrin parse.c \ 215f1e34d9SAlexandre Perrin str.c \ 225f1e34d9SAlexandre Perrin suff.c \ 235f1e34d9SAlexandre Perrin targ.c \ 245f1e34d9SAlexandre Perrin trace.c \ 255f1e34d9SAlexandre Perrin util.c \ 265f1e34d9SAlexandre Perrin var.c 275f1e34d9SAlexandre Perrin 28ca58f742SDaniel Fojt.-include "VERSION" 29ca58f742SDaniel Fojt.-include "Makefile.inc" 30ca58f742SDaniel Fojt 315f1e34d9SAlexandre Perrin# this file gets generated by configure 325f1e34d9SAlexandre Perrin.-include "Makefile.config" 335f1e34d9SAlexandre Perrin 345f1e34d9SAlexandre Perrin.if !empty(LIBOBJS) 355f1e34d9SAlexandre PerrinSRCS+= ${LIBOBJS:T:.o=.c} 365f1e34d9SAlexandre Perrin.endif 375f1e34d9SAlexandre Perrin 385f1e34d9SAlexandre Perrin# just in case 395f1e34d9SAlexandre Perrinprefix?= /usr 405f1e34d9SAlexandre Perrinsrcdir?= ${.CURDIR} 415f1e34d9SAlexandre Perrin 426a91b982SJohn MarinoDEFAULT_SYS_PATH?= ${prefix}/share/mk 435f1e34d9SAlexandre Perrin 445f1e34d9SAlexandre PerrinCPPFLAGS+= -DUSE_META 455f1e34d9SAlexandre PerrinCFLAGS+= ${CPPFLAGS} 465f1e34d9SAlexandre PerrinCFLAGS+= -D_PATH_DEFSYSPATH=\"${DEFAULT_SYS_PATH}\" 475f1e34d9SAlexandre PerrinCFLAGS+= -I. -I${srcdir} ${XDEFS} -DMAKE_NATIVE 485f1e34d9SAlexandre PerrinCFLAGS+= ${COPTS.${.ALLSRC:M*.c:T:u}} 49f445c897SJohn MarinoCOPTS.main.c+= "-DMAKE_VERSION=\"${_MAKE_VERSION}\"" 505f1e34d9SAlexandre Perrin 51a34d5fb1SAntonio Huete Jimenez.for x in FORCE_MACHINE FORCE_MACHINE_ARCH 52a34d5fb1SAntonio Huete Jimenez.ifdef $x 53a34d5fb1SAntonio Huete JimenezCOPTS.main.c+= "-D$x=\"${$x}\"" 54a34d5fb1SAntonio Huete Jimenez.endif 55a34d5fb1SAntonio Huete Jimenez.endfor 56a34d5fb1SAntonio Huete Jimenez 575f1e34d9SAlexandre Perrin# meta mode can be useful even without filemon 58ca58f742SDaniel Fojt# should be set by now 59ca58f742SDaniel FojtUSE_FILEMON ?= no 60ca58f742SDaniel Fojt.if ${USE_FILEMON:tl} != "no" 61ca58f742SDaniel Fojt.PATH: ${srcdir}/filemon 62ca58f742SDaniel FojtSRCS+= filemon_${USE_FILEMON}.c 63ca58f742SDaniel FojtCOPTS.meta.c+= -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu} 64ca58f742SDaniel FojtCOPTS.job.c+= ${COPTS.meta.c} 65ca58f742SDaniel Fojt 66ca58f742SDaniel Fojt.if ${USE_FILEMON} == "dev" 675f1e34d9SAlexandre PerrinFILEMON_H ?= /usr/include/dev/filemon/filemon.h 685f1e34d9SAlexandre Perrin.if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h" 69ca58f742SDaniel FojtCOPTS.filemon_dev.c += -DHAVE_FILEMON_H -I${FILEMON_H:H} 705f1e34d9SAlexandre Perrin.endif 71ca58f742SDaniel Fojt.endif # USE_FILEMON == dev 72ca58f742SDaniel Fojt 73ca58f742SDaniel Fojt.endif # USE_FILEMON 745f1e34d9SAlexandre Perrin 755f1e34d9SAlexandre Perrin.PATH: ${srcdir} 765f1e34d9SAlexandre Perrin 775f1e34d9SAlexandre Perrin.if make(obj) || make(clean) 785f1e34d9SAlexandre PerrinSUBDIR+= unit-tests 795f1e34d9SAlexandre Perrin.endif 805f1e34d9SAlexandre Perrin 815f1e34d9SAlexandre Perrin# start-delete1 for bsd.after-import.mk 825f1e34d9SAlexandre Perrin# we skip a lot of this when building as part of FreeBSD etc. 835f1e34d9SAlexandre Perrin 845f1e34d9SAlexandre Perrin# list of OS's which are derrived from BSD4.4 85f445c897SJohn MarinoBSD44_LIST= NetBSD FreeBSD OpenBSD DragonFly MirBSD Bitrig 865f1e34d9SAlexandre Perrin# we are... 87a34d5fb1SAntonio Huete JimenezOS := ${.MAKE.OS:U${uname -s:L:sh}} 885f1e34d9SAlexandre Perrin# are we 4.4BSD ? 895f1e34d9SAlexandre PerrinisBSD44:=${BSD44_LIST:M${OS}} 905f1e34d9SAlexandre Perrin 91*6eef5f0cSAntonio Huete Jimenez.if ${isBSD44} == "" && ${OS:NDarwin:NLinux} != "" 925f1e34d9SAlexandre PerrinMANTARGET= cat 935f1e34d9SAlexandre PerrinINSTALL?=${srcdir}/install-sh 94*6eef5f0cSAntonio Huete Jimenez.if ${MACHINE} == "sun386" 955f1e34d9SAlexandre Perrin# even I don't have one of these anymore :-) 965f1e34d9SAlexandre PerrinCFLAGS+= -DPORTAR 97*6eef5f0cSAntonio Huete Jimenez.elif ${OS} != "SunOS" 98*6eef5f0cSAntonio Huete Jimenez# assume the worst 995f1e34d9SAlexandre PerrinSRCS+= sigcompat.c 1005f1e34d9SAlexandre PerrinCFLAGS+= -DSIGNAL_FLAGS=SA_RESTART 1015f1e34d9SAlexandre Perrin.endif 1025f1e34d9SAlexandre Perrin.else 1035f1e34d9SAlexandre PerrinMANTARGET?= man 1045f1e34d9SAlexandre Perrin.endif 1055f1e34d9SAlexandre Perrin 1065f1e34d9SAlexandre Perrin# turn this on by default - ignored if we are root 1075f1e34d9SAlexandre PerrinWITH_INSTALL_AS_USER= 1085f1e34d9SAlexandre Perrin 1096a91b982SJohn Marino# suppress with -DWITHOUT_* 1105f1e34d9SAlexandre PerrinOPTIONS_DEFAULT_YES+= \ 1115f1e34d9SAlexandre Perrin AUTOCONF_MK \ 1125f1e34d9SAlexandre Perrin INSTALL_MK \ 1135f1e34d9SAlexandre Perrin PROG_LINK 1145f1e34d9SAlexandre Perrin 1155f1e34d9SAlexandre PerrinOPTIONS_DEFAULT_NO+= \ 1165f1e34d9SAlexandre Perrin PROG_VERSION 1175f1e34d9SAlexandre Perrin 1185f1e34d9SAlexandre Perrin# process options now 1195f1e34d9SAlexandre Perrin.include <own.mk> 1205f1e34d9SAlexandre Perrin 1215f1e34d9SAlexandre Perrin.if ${MK_PROG_VERSION} == "yes" 122f445c897SJohn MarinoPROG_NAME= ${PROG}-${_MAKE_VERSION} 1235f1e34d9SAlexandre Perrin.if ${MK_PROG_LINK} == "yes" 124f445c897SJohn MarinoSYMLINKS+= ${PROG_NAME} ${BINDIR}/${PROG} 1255f1e34d9SAlexandre Perrin.endif 1265f1e34d9SAlexandre Perrin.endif 1275f1e34d9SAlexandre Perrin 1285f1e34d9SAlexandre PerrinEXTRACT_MAN=no 1295f1e34d9SAlexandre Perrin# end-delete1 1305f1e34d9SAlexandre Perrin 1315f1e34d9SAlexandre PerrinMAN= ${PROG}.1 1325f1e34d9SAlexandre PerrinMAN1= ${MAN} 1335f1e34d9SAlexandre Perrin 134*6eef5f0cSAntonio Huete Jimenez.if ${PROG} != "make" 1355f1e34d9SAlexandre PerrinCLEANFILES+= my.history 1365f1e34d9SAlexandre Perrin.if make(${MAN}) || !exists(${srcdir}/${MAN}) 137ca58f742SDaniel Fojtmy.history: 1385f1e34d9SAlexandre Perrin @(echo ".Nm"; \ 1395f1e34d9SAlexandre Perrin echo "is derived from NetBSD"; \ 1405f1e34d9SAlexandre Perrin echo ".Xr make 1 ."; \ 1415f1e34d9SAlexandre Perrin echo "It uses autoconf to facilitate portability to other platforms."; \ 1425f1e34d9SAlexandre Perrin echo ".Pp") > $@ 1435f1e34d9SAlexandre Perrin 1445f1e34d9SAlexandre Perrin.NOPATH: ${MAN} 1455f1e34d9SAlexandre Perrin${MAN}: make.1 my.history 1465f1e34d9SAlexandre Perrin @echo making $@ 147ca58f742SDaniel Fojt @sed \ 148ca58f742SDaniel Fojt -e '/^.Dt/s/MAKE/${PROG:tu}/' \ 149ca58f742SDaniel Fojt -e 's/^.Nx/NetBSD/' \ 150ca58f742SDaniel Fojt -e '/^.Nm/s/make/${PROG}/' \ 1515f1e34d9SAlexandre Perrin -e '/^.Sh HISTORY/rmy.history' \ 1525f1e34d9SAlexandre Perrin -e '/^.Sh HISTORY/,$$s,^.Nm,make,' ${srcdir}/make.1 > $@ 1535f1e34d9SAlexandre Perrin 1545f1e34d9SAlexandre Perrinall beforeinstall: ${MAN} 1555f1e34d9SAlexandre Perrin_mfromdir=. 1565f1e34d9SAlexandre Perrin.endif 1575f1e34d9SAlexandre Perrin.endif 1585f1e34d9SAlexandre Perrin 1595f1e34d9SAlexandre PerrinMANTARGET?= cat 1605f1e34d9SAlexandre PerrinMANDEST?= ${MANDIR}/${MANTARGET}1 1615f1e34d9SAlexandre Perrin 1625f1e34d9SAlexandre Perrin.if ${MANTARGET} == "cat" 1635f1e34d9SAlexandre Perrin_mfromdir=${srcdir} 1645f1e34d9SAlexandre Perrin.endif 1655f1e34d9SAlexandre Perrin 1665f1e34d9SAlexandre Perrin.include <prog.mk> 1675f1e34d9SAlexandre Perrin 1685f1e34d9SAlexandre PerrinCPPFLAGS+= -DMAKE_NATIVE -DHAVE_CONFIG_H 1695f1e34d9SAlexandre PerrinCOPTS.var.c += -Wno-cast-qual 1705f1e34d9SAlexandre PerrinCOPTS.job.c += -Wno-format-nonliteral 1715f1e34d9SAlexandre PerrinCOPTS.parse.c += -Wno-format-nonliteral 1725f1e34d9SAlexandre PerrinCOPTS.var.c += -Wno-format-nonliteral 1735f1e34d9SAlexandre Perrin 1745f1e34d9SAlexandre Perrin# Force these 175f445c897SJohn MarinoSHAREDIR= ${SHAREDIR.bmake:U${prefix}/share} 176f445c897SJohn MarinoBINDIR= ${BINDIR.bmake:U${prefix}/bin} 177f445c897SJohn MarinoMANDIR= ${MANDIR.bmake:U${SHAREDIR}/man} 1785f1e34d9SAlexandre Perrin 1795f1e34d9SAlexandre Perrin.if !exists(.depend) 1805f1e34d9SAlexandre Perrin${OBJS}: config.h 1815f1e34d9SAlexandre Perrin.endif 1825f1e34d9SAlexandre Perrin 1835f1e34d9SAlexandre Perrin# start-delete2 for bsd.after-import.mk 184ca58f742SDaniel Fojt 185ca58f742SDaniel Fojt# make sure that MAKE_VERSION gets updated. 186ca58f742SDaniel Fojtmain.o: ${srcdir}/VERSION 187ca58f742SDaniel Fojt 1885f1e34d9SAlexandre Perrin.if ${MK_AUTOCONF_MK} == "yes" 189ca58f742SDaniel FojtCONFIGURE_DEPS += ${.CURDIR}/VERSION 190ca58f742SDaniel Fojt# we do not need or want the generated makefile 191ca58f742SDaniel FojtCONFIGURE_ARGS += --without-makefile 192*6eef5f0cSAntonio Huete JimenezAUTOCONF_GENERATED_MAKEFILE = Makefile.config 1935f1e34d9SAlexandre Perrin.include <autoconf.mk> 1945f1e34d9SAlexandre Perrin.endif 1955f1e34d9SAlexandre PerrinSHARE_MK ?= ${SHAREDIR}/mk 1965f1e34d9SAlexandre PerrinMKSRC = ${srcdir}/mk 1975f1e34d9SAlexandre PerrinINSTALL ?= ${srcdir}/install-sh 1985f1e34d9SAlexandre Perrin 1995f1e34d9SAlexandre Perrin.if ${MK_INSTALL_MK} == "yes" 2005f1e34d9SAlexandre Perrininstall: install-mk 2015f1e34d9SAlexandre Perrin.endif 2025f1e34d9SAlexandre Perrin 2035f1e34d9SAlexandre Perrinbeforeinstall: 2045f1e34d9SAlexandre Perrin test -d ${DESTDIR}${BINDIR} || ${INSTALL} -m 775 -d ${DESTDIR}${BINDIR} 2055f1e34d9SAlexandre Perrin test -d ${DESTDIR}${MANDEST} || ${INSTALL} -m 775 -d ${DESTDIR}${MANDEST} 2065f1e34d9SAlexandre Perrin 2075f1e34d9SAlexandre Perrininstall-mk: 2085f1e34d9SAlexandre Perrin.if exists(${MKSRC}/install-mk) 2095f1e34d9SAlexandre Perrin test -d ${DESTDIR}${SHARE_MK} || ${INSTALL} -m 775 -d ${DESTDIR}${SHARE_MK} 2105f1e34d9SAlexandre Perrin sh ${MKSRC}/install-mk -v -m 644 ${DESTDIR}${SHARE_MK} 2115f1e34d9SAlexandre Perrin.else 2125f1e34d9SAlexandre Perrin @echo need to unpack mk.tar.gz under ${srcdir} or set MKSRC; false 2135f1e34d9SAlexandre Perrin.endif 2145f1e34d9SAlexandre Perrin# end-delete2 2155f1e34d9SAlexandre Perrin 2165f1e34d9SAlexandre Perrin# A simple unit-test driver to help catch regressions 217a34d5fb1SAntonio Huete JimenezTEST_MAKE ?= ${.OBJDIR}/${PROG:T} 218*6eef5f0cSAntonio Huete Jimenezaccept test: .NOMETA 219a34d5fb1SAntonio Huete Jimenez cd ${.CURDIR}/unit-tests && \ 220a34d5fb1SAntonio Huete Jimenez MAKEFLAGS= ${TEST_MAKE} -r -m / ${.TARGET} ${TESTS:DTESTS=${TESTS:Q}} 221a34d5fb1SAntonio Huete Jimenez 222*6eef5f0cSAntonio Huete Jimenez 223*6eef5f0cSAntonio Huete Jimenez.if make(test) && ${MK_AUTO_OBJ} == "yes" 224*6eef5f0cSAntonio Huete Jimenez# The test target above visits unit-tests with -r -m / 225*6eef5f0cSAntonio Huete Jimenez# which prevents MK_AUTO_OBJ doing its job 226*6eef5f0cSAntonio Huete Jimenez# so do it here 227*6eef5f0cSAntonio Huete Jimenez.if defined(MAKEOBJDIRPREFIX) || ${MAKEOBJDIR:U:M*/*} != "" 228*6eef5f0cSAntonio Huete Jimenez_utobj = ${.OBJDIR}/unit-tests 229*6eef5f0cSAntonio Huete Jimenez.else 230*6eef5f0cSAntonio Huete Jimenez_utobj = ${.CURDIR}/unit-tests/${MAKEOBJDIR:Uobj} 231*6eef5f0cSAntonio Huete Jimenez.endif 232*6eef5f0cSAntonio Huete Jimenezutobj: .NOMETA 233*6eef5f0cSAntonio Huete Jimenez @test -d ${_utobj} && exit 0; \ 234*6eef5f0cSAntonio Huete Jimenez echo "[Creating ${_utobj}...]"; \ 235*6eef5f0cSAntonio Huete Jimenez umask ${OBJDIR_UMASK:U002}; \ 236*6eef5f0cSAntonio Huete Jimenez mkdir -p ${_utobj} 237*6eef5f0cSAntonio Huete Jimeneztest: utobj 238*6eef5f0cSAntonio Huete Jimenez.endif 239