13585b293SGarrett Wollman# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 27f3dea24SPeter Wemm# $FreeBSD$ 3afe61c15SRodney W. Grimes 42bdaf7e8SRuslan Ermilov.include <bsd.init.mk> 5afe61c15SRodney W. Grimes 65741a42fSMark Murray.SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .ln .s .S .asm 7afe61c15SRodney W. Grimes 848aea4daSRuslan Ermilov# XXX The use of COPTS in modern makefiles is discouraged. 941f89315SRuslan Ermilov.if defined(COPTS) 1041f89315SRuslan ErmilovCFLAGS+=${COPTS} 1141f89315SRuslan Ermilov.endif 1241f89315SRuslan Ermilov 134df1f59eSWarner Losh.if ${MK_ASSERT_DEBUG} == "no" 144df1f59eSWarner LoshCFLAGS+= -DNDEBUG 15e2e1ab1cSDavid E. O'BrienNO_WERROR= 164df1f59eSWarner Losh.endif 174df1f59eSWarner Losh 1841f89315SRuslan Ermilov.if defined(DEBUG_FLAGS) 1941f89315SRuslan ErmilovCFLAGS+=${DEBUG_FLAGS} 208eba8cd8SMarcel MoolenaarCXXFLAGS+=${DEBUG_FLAGS} 21770ac3b2SJohn Birrell 2283cb5baeSMax Khon.if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != "" 23770ac3b2SJohn BirrellCTFFLAGS+= -g 24770ac3b2SJohn Birrell.endif 2541f89315SRuslan Ermilov.endif 2641f89315SRuslan Ermilov 2741f89315SRuslan Ermilov.if defined(CRUNCH_CFLAGS) 283c9b8563SGordon TetlowCFLAGS+=${CRUNCH_CFLAGS} 2941f89315SRuslan Ermilov.endif 30afe61c15SRodney W. Grimes 31e82b0b99SJordan K. Hubbard.if !defined(DEBUG_FLAGS) 32afe61c15SRodney W. GrimesSTRIP?= -s 33e82b0b99SJordan K. Hubbard.endif 34afe61c15SRodney W. Grimes 3583c7ade9SRuslan Ermilov.if defined(NO_SHARED) && (${NO_SHARED} != "no" && ${NO_SHARED} != "NO") 363585b293SGarrett WollmanLDFLAGS+= -static 373585b293SGarrett Wollman.endif 38afe61c15SRodney W. Grimes 3947bf8a5cSRuslan Ermilov.if defined(PROG_CXX) 4047bf8a5cSRuslan ErmilovPROG= ${PROG_CXX} 4147bf8a5cSRuslan Ermilov.endif 4247bf8a5cSRuslan Ermilov 43afe61c15SRodney W. Grimes.if defined(PROG) 44afe61c15SRodney W. Grimes.if defined(SRCS) 45afe61c15SRodney W. Grimes 463585b293SGarrett WollmanOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 47afe61c15SRodney W. Grimes 48c2c48445SRui Paulo.if target(beforelinking) 49c2c48445SRui Paulo${PROG}: ${OBJS} beforelinking 50c2c48445SRui Paulo.else 519feea9c1SRui Paulo${PROG}: ${OBJS} 52c2c48445SRui Paulo.endif 535d68012aSRuslan Ermilov.if defined(PROG_CXX) 545d68012aSRuslan Ermilov ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 555d68012aSRuslan Ermilov.else 565d68012aSRuslan Ermilov ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 575d68012aSRuslan Ermilov.endif 5883cb5baeSMax Khon.if ${MK_CTF} != "no" 59cd49c2e8SMax Khon ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 60cd49c2e8SMax Khon.endif 615d68012aSRuslan Ermilov 6284aac273SHartmut Brandt.else # !defined(SRCS) 63afe61c15SRodney W. Grimes 645d68012aSRuslan Ermilov.if !target(${PROG}) 6547bf8a5cSRuslan Ermilov.if defined(PROG_CXX) 6647bf8a5cSRuslan ErmilovSRCS= ${PROG}.cc 6747bf8a5cSRuslan Ermilov.else 68afe61c15SRodney W. GrimesSRCS= ${PROG}.c 6947bf8a5cSRuslan Ermilov.endif 70afe61c15SRodney W. Grimes 71a4c39c7aSBruce Evans# Always make an intermediate object file because: 72a4c39c7aSBruce Evans# - it saves time rebuilding when only the library has changed 73a4c39c7aSBruce Evans# - the name of the object gets put into the executable symbol table instead of 74a4c39c7aSBruce Evans# the name of a variable temporary object. 75a4c39c7aSBruce Evans# - it's useful to keep objects around for crunching. 76a4c39c7aSBruce EvansOBJS= ${PROG}.o 77f5c75051SEivind Eklund 78c2c48445SRui Paulo.if target(beforelinking) 79c2c48445SRui Paulo${PROG}: ${OBJS} beforelinking 80c2c48445SRui Paulo.else 81987afe2aSBruce Evans${PROG}: ${OBJS} 82c2c48445SRui Paulo.endif 83f8ba1555SRuslan Ermilov.if defined(PROG_CXX) 84f8ba1555SRuslan Ermilov ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 85f8ba1555SRuslan Ermilov.else 86de0d6977SRuslan Ermilov ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 87afe61c15SRodney W. Grimes.endif 8883cb5baeSMax Khon.if ${MK_CTF} != "no" 89cd49c2e8SMax Khon ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 90cd49c2e8SMax Khon.endif 915d68012aSRuslan Ermilov.endif 92f5c75051SEivind Eklund 936fe6af9fSEivind Eklund.endif 94afe61c15SRodney W. Grimes 95e1fe3dbaSRuslan Ermilov.if ${MK_MAN} != "no" && !defined(MAN) && \ 96862d3deaSRuslan Ermilov !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \ 97afe61c15SRodney W. Grimes !defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \ 98500d8265SRuslan Ermilov !defined(MAN7) && !defined(MAN8) && !defined(MAN9) && \ 99862d3deaSRuslan Ermilov !defined(MAN1aout) 10019ea15a1SRuslan ErmilovMAN= ${PROG}.1 10119ea15a1SRuslan ErmilovMAN1= ${MAN} 102afe61c15SRodney W. Grimes.endif 103afe61c15SRodney W. Grimes.endif 104afe61c15SRodney W. Grimes 1057750ad47SMarcel Moolenaar.if defined(_SKIP_BUILD) 1067750ad47SMarcel Moolenaarall: 1077750ad47SMarcel Moolenaar.else 108af2dc868SRuslan Ermilovall: objwarn ${PROG} ${SCRIPTS} 109e1fe3dbaSRuslan Ermilov.if ${MK_MAN} != "no" 110afeaaa84SRuslan Ermilovall: _manpages 111862d3deaSRuslan Ermilov.endif 1127750ad47SMarcel Moolenaar.endif 113afe61c15SRodney W. Grimes 11441f89315SRuslan Ermilov.if defined(PROG) 11541f89315SRuslan ErmilovCLEANFILES+= ${PROG} 11641f89315SRuslan Ermilov.endif 11741f89315SRuslan Ermilov 11841f89315SRuslan Ermilov.if defined(OBJS) 11941f89315SRuslan ErmilovCLEANFILES+= ${OBJS} 12041f89315SRuslan Ermilov.endif 121afe61c15SRodney W. Grimes 12251fa76c4SRuslan Ermilov.include <bsd.libnames.mk> 12351fa76c4SRuslan Ermilov 124218a2cd2SBruce Evans.if defined(PROG) 125663e9677SBruce Evans_EXTRADEPEND: 12651fa76c4SRuslan Ermilov.if defined(LDFLAGS) && !empty(LDFLAGS:M-nostdlib) 12751fa76c4SRuslan Ermilov.if defined(DPADD) && !empty(DPADD) 12851fa76c4SRuslan Ermilov echo ${PROG}: ${DPADD} >> ${DEPENDFILE} 12951fa76c4SRuslan Ermilov.endif 13051fa76c4SRuslan Ermilov.else 1316e19760bSBruce Evans echo ${PROG}: ${LIBC} ${DPADD} >> ${DEPENDFILE} 132f8ba1555SRuslan Ermilov.if defined(PROG_CXX) 133d515c63dSDimitry Andric.if !empty(CXXFLAGS:M-stdlib=libc++) 134d515c63dSDimitry Andric echo ${PROG}: ${LIBCPLUSPLUS} >> ${DEPENDFILE} 135d515c63dSDimitry Andric.else 136f8ba1555SRuslan Ermilov echo ${PROG}: ${LIBSTDCPLUSPLUS} >> ${DEPENDFILE} 137f8ba1555SRuslan Ermilov.endif 1388c05a446SPeter Wemm.endif 13951fa76c4SRuslan Ermilov.endif 140d515c63dSDimitry Andric.endif 141663e9677SBruce Evans 142afe61c15SRodney W. Grimes.if !target(install) 143afe61c15SRodney W. Grimes 144212acbefSRuslan Ermilov.if defined(PRECIOUSPROG) 14500fbd407SRuslan Ermilov.if !defined(NO_FSCHG) 146dee651ebSRuslan ErmilovINSTALLFLAGS+= -fschg 147dee651ebSRuslan Ermilov.endif 148212acbefSRuslan ErmilovINSTALLFLAGS+= -S 149212acbefSRuslan Ermilov.endif 150dee651ebSRuslan Ermilov 151e902c1bbSTim Vanderhoek_INSTALLFLAGS:= ${INSTALLFLAGS} 152e902c1bbSTim Vanderhoek.for ie in ${INSTALLFLAGS_EDIT} 153e902c1bbSTim Vanderhoek_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 154e902c1bbSTim Vanderhoek.endfor 155e902c1bbSTim Vanderhoek 15651fa76c4SRuslan Ermilov.if !target(realinstall) && !defined(INTERNALPROG) 15787829387SRuslan Ermilovrealinstall: _proginstall 158badb7c1cSRuslan Ermilov.ORDER: beforeinstall _proginstall 15987829387SRuslan Ermilov_proginstall: 160afe61c15SRodney W. Grimes.if defined(PROG) 16195f8c826SRuslan Ermilov.if defined(PROGNAME) 162d2893b16SRuslan Ermilov ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 16395f8c826SRuslan Ermilov ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME} 16495f8c826SRuslan Ermilov.else 165d2893b16SRuslan Ermilov ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 166e902c1bbSTim Vanderhoek ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR} 167afe61c15SRodney W. Grimes.endif 16895f8c826SRuslan Ermilov.endif 16984aac273SHartmut Brandt.endif # !target(realinstall) 170afe61c15SRodney W. Grimes 171f7ee8cfeSRuslan Ermilov.if defined(SCRIPTS) && !empty(SCRIPTS) 172f7ee8cfeSRuslan Ermilovrealinstall: _scriptsinstall 173badb7c1cSRuslan Ermilov.ORDER: beforeinstall _scriptsinstall 174f7ee8cfeSRuslan Ermilov 175f7ee8cfeSRuslan ErmilovSCRIPTSDIR?= ${BINDIR} 176f7ee8cfeSRuslan ErmilovSCRIPTSOWN?= ${BINOWN} 177f7ee8cfeSRuslan ErmilovSCRIPTSGRP?= ${BINGRP} 178f7ee8cfeSRuslan ErmilovSCRIPTSMODE?= ${BINMODE} 179f7ee8cfeSRuslan Ermilov 180*116d4508SSimon J. GerratySTAGE_AS_SETS+= scripts 181*116d4508SSimon J. Gerratystage_as.scripts: ${SCRIPTS} 182*116d4508SSimon J. GerratyFLAGS.stage_as.scripts= -m ${SCRIPTSMODE} 183*116d4508SSimon J. GerratySTAGE_FILES_DIR.scripts= ${STAGE_OBJTOP} 184f7ee8cfeSRuslan Ermilov.for script in ${SCRIPTS} 185f7ee8cfeSRuslan Ermilov.if defined(SCRIPTSNAME) 186f7ee8cfeSRuslan ErmilovSCRIPTSNAME_${script:T}?= ${SCRIPTSNAME} 187f7ee8cfeSRuslan Ermilov.else 188f7ee8cfeSRuslan ErmilovSCRIPTSNAME_${script:T}?= ${script:T:R} 189f7ee8cfeSRuslan Ermilov.endif 190f7ee8cfeSRuslan ErmilovSCRIPTSDIR_${script:T}?= ${SCRIPTSDIR} 191f7ee8cfeSRuslan ErmilovSCRIPTSOWN_${script:T}?= ${SCRIPTSOWN} 192f7ee8cfeSRuslan ErmilovSCRIPTSGRP_${script:T}?= ${SCRIPTSGRP} 193f7ee8cfeSRuslan ErmilovSCRIPTSMODE_${script:T}?= ${SCRIPTSMODE} 194*116d4508SSimon J. GerratySTAGE_AS_${script:T}= ${SCRIPTSDIR_${script:T}}/${SCRIPTSNAME_${script:T}} 195a7aaf57eSRuslan Ermilov_scriptsinstall: _SCRIPTSINS_${script:T} 196a7aaf57eSRuslan Ermilov_SCRIPTSINS_${script:T}: ${script} 197d2893b16SRuslan Ermilov ${INSTALL} -o ${SCRIPTSOWN_${.ALLSRC:T}} \ 198f7ee8cfeSRuslan Ermilov -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \ 1994367bda6SRuslan Ermilov ${.ALLSRC} \ 200f7ee8cfeSRuslan Ermilov ${DESTDIR}${SCRIPTSDIR_${.ALLSRC:T}}/${SCRIPTSNAME_${.ALLSRC:T}} 201f7ee8cfeSRuslan Ermilov.endfor 202f7ee8cfeSRuslan Ermilov.endif 203f7ee8cfeSRuslan Ermilov 2048479adc1SRuslan ErmilovNLSNAME?= ${PROG} 2058479adc1SRuslan Ermilov.include <bsd.nls.mk> 2068479adc1SRuslan Ermilov 207af2dc868SRuslan Ermilov.include <bsd.files.mk> 2085d862037SRuslan Ermilov.include <bsd.incs.mk> 20984f94a79SRuslan Ermilov.include <bsd.links.mk> 210c7b111cbSRuslan Ermilov 211e1fe3dbaSRuslan Ermilov.if ${MK_MAN} != "no" 212afeaaa84SRuslan Ermilovrealinstall: _maninstall 213badb7c1cSRuslan Ermilov.ORDER: beforeinstall _maninstall 21487829387SRuslan Ermilov.endif 21587829387SRuslan Ermilov 216afe61c15SRodney W. Grimes.endif 217afe61c15SRodney W. Grimes 218afe61c15SRodney W. Grimes.if !target(lint) 2195741a42fSMark Murraylint: ${SRCS:M*.c} 220afe61c15SRodney W. Grimes.if defined(PROG) 2215741a42fSMark Murray ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 222afe61c15SRodney W. Grimes.endif 223afe61c15SRodney W. Grimes.endif 224afe61c15SRodney W. Grimes 225e1fe3dbaSRuslan Ermilov.if ${MK_MAN} != "no" 226afe61c15SRodney W. Grimes.include <bsd.man.mk> 22769b87d3eSEivind Eklund.endif 22869b87d3eSEivind Eklund 2293585b293SGarrett Wollman.include <bsd.dep.mk> 230987afe2aSBruce Evans 23188505e11SRuslan Ermilov.if defined(PROG) && !exists(${.OBJDIR}/${DEPENDFILE}) 232589d9341SBruce Evans${OBJS}: ${SRCS:M*.h} 233987afe2aSBruce Evans.endif 234987afe2aSBruce Evans 235cd9a2f5cSJordan K. Hubbard.include <bsd.obj.mk> 236d510ecb4SKris Kennaway 237d510ecb4SKris Kennaway.include <bsd.sys.mk> 23857e3ff64SPaul Richards 23957e3ff64SPaul Richards.if defined(PORTNAME) 24057e3ff64SPaul Richards.include <bsd.pkg.mk> 24157e3ff64SPaul Richards.endif 2427750ad47SMarcel Moolenaar 2437750ad47SMarcel Moolenaar.if ${MK_STAGING} != "no" 2447750ad47SMarcel Moolenaar.if defined(_SKIP_BUILD) 2457750ad47SMarcel Moolenaarstage_files stage_as: 2467750ad47SMarcel Moolenaar.else 2477750ad47SMarcel Moolenaar# normally only libs and includes are staged 2487750ad47SMarcel Moolenaar.if ${MK_STAGING_PROG:Uno} != "no" 2497750ad47SMarcel MoolenaarSTAGE_DIR.prog= ${STAGE_OBJTOP}${BINDIR} 2500dfb7ef6SSimon J. Gerraty 2510dfb7ef6SSimon J. Gerraty.if defined(PROGNAME) 2520dfb7ef6SSimon J. GerratySTAGE_AS_SETS+= prog 2530dfb7ef6SSimon J. GerratySTAGE_AS_${PROG}= ${PROGNAME} 2540dfb7ef6SSimon J. Gerratystage_as.prog: ${PROG} 2550dfb7ef6SSimon J. Gerraty.else 2560dfb7ef6SSimon J. GerratySTAGE_SETS+= prog 2570dfb7ef6SSimon J. Gerratystage_files.prog: ${PROG} 2580dfb7ef6SSimon J. Gerraty.endif 2590dfb7ef6SSimon J. Gerraty 260*116d4508SSimon J. Gerraty.if !empty(LINKS) 261*116d4508SSimon J. Gerratyall: stage_links 262*116d4508SSimon J. GerratySTAGE_LINKS.prog= ${LINKS} 263*116d4508SSimon J. Gerraty.endif 2647750ad47SMarcel Moolenaar.if !empty(SYMLINKS) 2657750ad47SMarcel Moolenaarall: stage_symlinks 26623090366SSimon J. GerratySTAGE_SYMLINKS.prog= ${SYMLINKS} 2677750ad47SMarcel Moolenaar.endif 2687750ad47SMarcel Moolenaar 269*116d4508SSimon J. Gerraty.if !empty(STAGE_AS_SETS) 270*116d4508SSimon J. Gerratyall: stage_as 271*116d4508SSimon J. Gerraty.endif 272*116d4508SSimon J. Gerraty.if !empty(STAGE_SETS) 273*116d4508SSimon J. Gerratyall: stage_files 274*116d4508SSimon J. Gerraty.endif 275*116d4508SSimon J. Gerraty 2767750ad47SMarcel Moolenaar.endif 2777750ad47SMarcel Moolenaar.include <meta.stage.mk> 2787750ad47SMarcel Moolenaar.endif 2797750ad47SMarcel Moolenaar.endif 280