bsd.prog.mk revision 255431
1153816Sdougb# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 2153816Sdougb# $FreeBSD: head/share/mk/bsd.prog.mk 255431 2013-09-09 21:18:16Z des $ 3153816Sdougb 4153816Sdougb.include <bsd.init.mk> 5153816Sdougb 6153816Sdougb.SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .ln .s .S .asm 7153816Sdougb 8153816Sdougb# XXX The use of COPTS in modern makefiles is discouraged. 9153816Sdougb.if defined(COPTS) 10153816SdougbCFLAGS+=${COPTS} 11153816Sdougb.endif 12153816Sdougb 13153816Sdougb.if ${MK_ASSERT_DEBUG} == "no" 14153816SdougbCFLAGS+= -DNDEBUG 15153816SdougbNO_WERROR= 16153816Sdougb.endif 17153816Sdougb 18153816Sdougb.if defined(DEBUG_FLAGS) 19153816SdougbCFLAGS+=${DEBUG_FLAGS} 20153816SdougbCXXFLAGS+=${DEBUG_FLAGS} 21153816Sdougb 22153816Sdougb.if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != "" 23153816SdougbCTFFLAGS+= -g 24153816Sdougb.endif 25153816Sdougb.endif 26153816Sdougb 27153816Sdougb.if defined(PROG_CXX) 28153816SdougbPROG= ${PROG_CXX} 29153816Sdougb.endif 30153816Sdougb 31153816Sdougb.if defined(PROG) && target(${PROG}) 32153816SdougbMK_DEBUG_FILES= no 33153816Sdougb.elif !empty(LDFLAGS:M-Wl,*--oformat,*) || !empty(LDFLAGS:M-static) 34153816SdougbMK_DEBUG_FILES= no 35153816Sdougb.endif 36153816Sdougb 37153816Sdougb.if defined(CRUNCH_CFLAGS) 38153816SdougbCFLAGS+=${CRUNCH_CFLAGS} 39153816Sdougb.else 40153816Sdougb.if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \ 41153816Sdougb empty(DEBUG_FLAGS:M-gdwarf-*) 42153816SdougbCFLAGS+= -g 43153816SdougbCTFFLAGS+= -g 44153816Sdougb.endif 45153816Sdougb.endif 46153816Sdougb 47153816Sdougb.if !defined(DEBUG_FLAGS) 48153816SdougbSTRIP?= -s 49153816Sdougb.endif 50153816Sdougb 51153816Sdougb.if defined(NO_SHARED) && (${NO_SHARED} != "no" && ${NO_SHARED} != "NO") 52153816SdougbLDFLAGS+= -static 53153816Sdougb.endif 54153816Sdougb 55153816Sdougb.if defined(USEPRIVATELIB) 56153816SdougbLDFLAGS+= -L${_SHLIBDIRPREFIX}${LIBPRIVATEDIR} -rpath ${LIBPRIVATEDIR} 57153816Sdougb.endif 58153816Sdougb 59153816Sdougb.if ${MK_DEBUG_FILES} != "no" 60153816SdougbPROG_FULL=${PROG}.full 61153816Sdougb# Use ${DEBUGDIR} for base system debug files, else .debug subdirectory 62153816Sdougb.if defined(BINDIR) && (\ 63153816Sdougb ${BINDIR} == "/bin" ||\ 64153816Sdougb ${BINDIR} == "/libexec" ||\ 65153816Sdougb ${BINDIR} == "/sbin" ||\ 66153816Sdougb ${BINDIR:C%/usr/(bin|bsdinstall|games|libexec|lpr|sendmail|sm.bin|sbin)(/.*)?%/usr/bin%} == "/usr/bin"\ 67153816Sdougb ) 68153816SdougbDEBUGFILEDIR= ${DEBUGDIR}${BINDIR} 69153816Sdougb.else 70153816SdougbDEBUGFILEDIR?= ${BINDIR}/.debug 71153816SdougbDEBUGMKDIR= 72153816Sdougb.endif 73153816Sdougb.else 74153816SdougbPROG_FULL= ${PROG} 75153816Sdougb.endif 76153816Sdougb 77153816Sdougb.if defined(PROG) 78153816SdougbPROGNAME?= ${PROG} 79153816Sdougb 80153816Sdougb.if defined(SRCS) 81135446Strhodes 82153816SdougbOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 83135446Strhodes 84153816Sdougb.if target(beforelinking) 85153816Sdougbbeforelinking: ${OBJS} 86135446Strhodes${PROG_FULL}: beforelinking 87153816Sdougb.endif 88153816Sdougb${PROG_FULL}: ${OBJS} 89153816Sdougb.if defined(PROG_CXX) 90153816Sdougb ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 91135446Strhodes.else 92153816Sdougb ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 93153816Sdougb.endif 94153816Sdougb.if ${MK_CTF} != "no" 95153816Sdougb ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 96153816Sdougb.endif 97153816Sdougb 98135446Strhodes.else # !defined(SRCS) 99135446Strhodes 100153816Sdougb.if !target(${PROG}) 101153816Sdougb.if defined(PROG_CXX) 102153816SdougbSRCS= ${PROG}.cc 103153816Sdougb.else 104153816SdougbSRCS= ${PROG}.c 105153816Sdougb.endif 106135446Strhodes 107135446Strhodes# Always make an intermediate object file because: 108135446Strhodes# - it saves time rebuilding when only the library has changed 109153816Sdougb# - the name of the object gets put into the executable symbol table instead of 110153816Sdougb# the name of a variable temporary object. 111153816Sdougb# - it's useful to keep objects around for crunching. 112153816SdougbOBJS+= ${PROG}.o 113153816Sdougb 114135446Strhodes.if target(beforelinking) 115153816Sdougbbeforelinking: ${OBJS} 116135446Strhodes${PROG_FULL}: beforelinking 117153816Sdougb.endif 118135446Strhodes${PROG_FULL}: ${OBJS} 119153816Sdougb.if defined(PROG_CXX) 120153816Sdougb ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 121135446Strhodes.else 122135446Strhodes ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 123135446Strhodes.endif 124135446Strhodes.if ${MK_CTF} != "no" 125153816Sdougb ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 126153816Sdougb.endif 127135446Strhodes.endif # !target(${PROG}) 128153816Sdougb 129153816Sdougb.endif # !defined(SRCS) 130153816Sdougb 131153816Sdougb.if ${MK_DEBUG_FILES} != "no" 132135446Strhodes${PROG}: ${PROG_FULL} ${PROGNAME}.debug 133135446Strhodes ${OBJCOPY} --strip-debug --add-gnu-debuglink=${PROGNAME}.debug \ 134135446Strhodes ${PROG_FULL} ${.TARGET} 135153816Sdougb 136153816Sdougb${PROGNAME}.debug: ${PROG_FULL} 137135446Strhodes ${OBJCOPY} --only-keep-debug ${PROG_FULL} ${.TARGET} 138135446Strhodes.endif 139153816Sdougb 140153816Sdougb.if ${MK_MAN} != "no" && !defined(MAN) && \ 141135446Strhodes !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \ 142153816Sdougb !defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \ 143153816Sdougb !defined(MAN7) && !defined(MAN8) && !defined(MAN9) 144153816SdougbMAN= ${PROG}.1 145153816SdougbMAN1= ${MAN} 146153816Sdougb.endif 147153816Sdougb.endif # defined(PROG) 148153816Sdougb 149153816Sdougball: objwarn ${PROG} ${SCRIPTS} 150135446Strhodes.if ${MK_MAN} != "no" 151135446Strhodesall: _manpages 152153816Sdougb.endif 153153816Sdougb 154135446Strhodes.if defined(PROG) 155135446StrhodesCLEANFILES+= ${PROG} 156135446Strhodes.if ${MK_DEBUG_FILES} != "no" 157135446StrhodesCLEANFILES+= ${PROG_FULL} ${PROGNAME}.debug 158135446Strhodes.endif 159135446Strhodes.endif 160153816Sdougb 161153816Sdougb.if defined(OBJS) 162153816SdougbCLEANFILES+= ${OBJS} 163153816Sdougb.endif 164135446Strhodes 165135446Strhodes.include <bsd.libnames.mk> 166153816Sdougb 167153816Sdougb.if defined(PROG) 168153816Sdougb_EXTRADEPEND: 169153816Sdougb.if defined(LDFLAGS) && !empty(LDFLAGS:M-nostdlib) 170153816Sdougb.if defined(DPADD) && !empty(DPADD) 171153816Sdougb echo ${PROG}: ${DPADD} >> ${DEPENDFILE} 172153816Sdougb.endif 173153816Sdougb.else 174153816Sdougb echo ${PROG}: ${LIBC} ${DPADD} >> ${DEPENDFILE} 175153816Sdougb.if defined(PROG_CXX) 176153816Sdougb.if ${MK_CLANG_IS_CC} != "no" && empty(CXXFLAGS:M-stdlib=libstdc++) 177135446Strhodes echo ${PROG}: ${LIBCPLUSPLUS} >> ${DEPENDFILE} 178135446Strhodes.else 179135446Strhodes echo ${PROG}: ${LIBSTDCPLUSPLUS} >> ${DEPENDFILE} 180135446Strhodes.endif 181153816Sdougb.endif 182153816Sdougb.endif 183135446Strhodes.endif 184135446Strhodes 185135446Strhodes.if !target(install) 186153816Sdougb 187153816Sdougb.if defined(PRECIOUSPROG) 188153816Sdougb.if !defined(NO_FSCHG) 189153816SdougbINSTALLFLAGS+= -fschg 190135446Strhodes.endif 191135446StrhodesINSTALLFLAGS+= -S 192153816Sdougb.endif 193153816Sdougb 194135446Strhodes_INSTALLFLAGS:= ${INSTALLFLAGS} 195135446Strhodes.for ie in ${INSTALLFLAGS_EDIT} 196135446Strhodes_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 197153816Sdougb.endfor 198153816Sdougb 199135446Strhodes.if !target(realinstall) && !defined(INTERNALPROG) 200135446Strhodesrealinstall: _proginstall 201153816Sdougb.ORDER: beforeinstall _proginstall 202153816Sdougb_proginstall: 203153816Sdougb.if defined(PROG) 204153816Sdougb ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 205135446Strhodes ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME} 206153816Sdougb.if ${MK_DEBUG_FILES} != "no" 207153816Sdougb.if defined(DEBUGMKDIR) 208153816Sdougb ${INSTALL} -T debug -d ${DESTDIR}${DEBUGFILEDIR} 209135446Strhodes.endif 210135446Strhodes ${INSTALL} -T debug -o ${BINOWN} -g ${BINGRP} -m ${DEBUGMODE} \ 211153816Sdougb ${PROGNAME}.debug ${DESTDIR}${DEBUGFILEDIR}/${PROGNAME}.debug 212153816Sdougb.endif 213153816Sdougb.endif 214135446Strhodes.endif # !target(realinstall) 215153816Sdougb 216153816Sdougb.if defined(SCRIPTS) && !empty(SCRIPTS) 217153816Sdougbrealinstall: _scriptsinstall 218135446Strhodes.ORDER: beforeinstall _scriptsinstall 219135446Strhodes 220135446StrhodesSCRIPTSDIR?= ${BINDIR} 221135446StrhodesSCRIPTSOWN?= ${BINOWN} 222135446StrhodesSCRIPTSGRP?= ${BINGRP} 223153816SdougbSCRIPTSMODE?= ${BINMODE} 224153816Sdougb 225153816Sdougb.for script in ${SCRIPTS} 226153816Sdougb.if defined(SCRIPTSNAME) 227135446StrhodesSCRIPTSNAME_${script:T}?= ${SCRIPTSNAME} 228135446Strhodes.else 229135446StrhodesSCRIPTSNAME_${script:T}?= ${script:T:R} 230153816Sdougb.endif 231153816SdougbSCRIPTSDIR_${script:T}?= ${SCRIPTSDIR} 232135446StrhodesSCRIPTSOWN_${script:T}?= ${SCRIPTSOWN} 233153816SdougbSCRIPTSGRP_${script:T}?= ${SCRIPTSGRP} 234153816SdougbSCRIPTSMODE_${script:T}?= ${SCRIPTSMODE} 235153816Sdougb_scriptsinstall: _SCRIPTSINS_${script:T} 236135446Strhodes_SCRIPTSINS_${script:T}: ${script} 237153816Sdougb ${INSTALL} -o ${SCRIPTSOWN_${.ALLSRC:T}} \ 238153816Sdougb -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \ 239153816Sdougb ${.ALLSRC} \ 240153816Sdougb ${DESTDIR}${SCRIPTSDIR_${.ALLSRC:T}}/${SCRIPTSNAME_${.ALLSRC:T}} 241153816Sdougb.endfor 242153816Sdougb.endif 243153816Sdougb 244153816SdougbNLSNAME?= ${PROG} 245153816Sdougb.include <bsd.nls.mk> 246153816Sdougb 247153816Sdougb.include <bsd.files.mk> 248153816Sdougb.include <bsd.incs.mk> 249153816Sdougb.include <bsd.links.mk> 250153816Sdougb 251153816Sdougb.if ${MK_MAN} != "no" 252153816Sdougbrealinstall: _maninstall 253153816Sdougb.ORDER: beforeinstall _maninstall 254153816Sdougb.endif 255153816Sdougb 256135446Strhodes.endif 257153816Sdougb 258153816Sdougb.if !target(lint) 259153816Sdougblint: ${SRCS:M*.c} 260153816Sdougb.if defined(PROG) 261135446Strhodes ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 262135446Strhodes.endif 263153816Sdougb.endif 264135446Strhodes 265135446Strhodes.if ${MK_MAN} != "no" 266135446Strhodes.include <bsd.man.mk> 267135446Strhodes.endif 268135446Strhodes 269135446Strhodes.include <bsd.dep.mk> 270153816Sdougb 271135446Strhodes.if defined(PROG) && !exists(${.OBJDIR}/${DEPENDFILE}) 272135446Strhodes${OBJS}: ${SRCS:M*.h} 273135446Strhodes.endif 274135446Strhodes 275135446Strhodes.include <bsd.obj.mk> 276135446Strhodes 277135446Strhodes.include <bsd.sys.mk> 278135446Strhodes 279135446Strhodes.if defined(PORTNAME) 280135446Strhodes.include <bsd.pkg.mk> 281135446Strhodes.endif 282135446Strhodes