bsd.prog.mk revision 255431
1193326Sed# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 2193326Sed# $FreeBSD: head/share/mk/bsd.prog.mk 255431 2013-09-09 21:18:16Z des $ 3193326Sed 4193326Sed.include <bsd.init.mk> 5193326Sed 6193326Sed.SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .ln .s .S .asm 7193326Sed 8193326Sed# XXX The use of COPTS in modern makefiles is discouraged. 9193326Sed.if defined(COPTS) 10193326SedCFLAGS+=${COPTS} 11193326Sed.endif 12193326Sed 13193326Sed.if ${MK_ASSERT_DEBUG} == "no" 14193326SedCFLAGS+= -DNDEBUG 15193326SedNO_WERROR= 16193326Sed.endif 17193326Sed 18193326Sed.if defined(DEBUG_FLAGS) 19193326SedCFLAGS+=${DEBUG_FLAGS} 20193326SedCXXFLAGS+=${DEBUG_FLAGS} 21193326Sed 22193326Sed.if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != "" 23193326SedCTFFLAGS+= -g 24193326Sed.endif 25193326Sed.endif 26193326Sed 27193326Sed.if defined(PROG_CXX) 28198092SrdivackyPROG= ${PROG_CXX} 29198092Srdivacky.endif 30193326Sed 31193326Sed.if defined(PROG) && target(${PROG}) 32193326SedMK_DEBUG_FILES= no 33193326Sed.elif !empty(LDFLAGS:M-Wl,*--oformat,*) || !empty(LDFLAGS:M-static) 34193326SedMK_DEBUG_FILES= no 35193326Sed.endif 36193326Sed 37193326Sed.if defined(CRUNCH_CFLAGS) 38193326SedCFLAGS+=${CRUNCH_CFLAGS} 39193326Sed.else 40193326Sed.if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \ 41193326Sed empty(DEBUG_FLAGS:M-gdwarf-*) 42193326SedCFLAGS+= -g 43193326SedCTFFLAGS+= -g 44193326Sed.endif 45193326Sed.endif 46198398Srdivacky 47198092Srdivacky.if !defined(DEBUG_FLAGS) 48198092SrdivackySTRIP?= -s 49195341Sed.endif 50193326Sed 51193326Sed.if defined(NO_SHARED) && (${NO_SHARED} != "no" && ${NO_SHARED} != "NO") 52193326SedLDFLAGS+= -static 53193326Sed.endif 54193326Sed 55193326Sed.if defined(USEPRIVATELIB) 56193326SedLDFLAGS+= -L${_SHLIBDIRPREFIX}${LIBPRIVATEDIR} -rpath ${LIBPRIVATEDIR} 57193326Sed.endif 58193326Sed 59193326Sed.if ${MK_DEBUG_FILES} != "no" 60193326SedPROG_FULL=${PROG}.full 61193326Sed# Use ${DEBUGDIR} for base system debug files, else .debug subdirectory 62193326Sed.if defined(BINDIR) && (\ 63193326Sed ${BINDIR} == "/bin" ||\ 64193326Sed ${BINDIR} == "/libexec" ||\ 65193326Sed ${BINDIR} == "/sbin" ||\ 66193326Sed ${BINDIR:C%/usr/(bin|bsdinstall|games|libexec|lpr|sendmail|sm.bin|sbin)(/.*)?%/usr/bin%} == "/usr/bin"\ 67193326Sed ) 68193326SedDEBUGFILEDIR= ${DEBUGDIR}${BINDIR} 69193326Sed.else 70193326SedDEBUGFILEDIR?= ${BINDIR}/.debug 71193326SedDEBUGMKDIR= 72193326Sed.endif 73193326Sed.else 74193326SedPROG_FULL= ${PROG} 75193326Sed.endif 76193326Sed 77198398Srdivacky.if defined(PROG) 78198398SrdivackyPROGNAME?= ${PROG} 79198398Srdivacky 80198398Srdivacky.if defined(SRCS) 81198398Srdivacky 82198398SrdivackyOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 83198398Srdivacky 84198398Srdivacky.if target(beforelinking) 85198398Srdivackybeforelinking: ${OBJS} 86198398Srdivacky${PROG_FULL}: beforelinking 87198398Srdivacky.endif 88198398Srdivacky${PROG_FULL}: ${OBJS} 89198398Srdivacky.if defined(PROG_CXX) 90198398Srdivacky ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 91198398Srdivacky.else 92198398Srdivacky ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 93198398Srdivacky.endif 94198398Srdivacky.if ${MK_CTF} != "no" 95198398Srdivacky ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 96198398Srdivacky.endif 97198398Srdivacky 98198398Srdivacky.else # !defined(SRCS) 99198398Srdivacky 100198398Srdivacky.if !target(${PROG}) 101198398Srdivacky.if defined(PROG_CXX) 102198398SrdivackySRCS= ${PROG}.cc 103198398Srdivacky.else 104198398SrdivackySRCS= ${PROG}.c 105198398Srdivacky.endif 106198398Srdivacky 107198398Srdivacky# Always make an intermediate object file because: 108198398Srdivacky# - it saves time rebuilding when only the library has changed 109198398Srdivacky# - the name of the object gets put into the executable symbol table instead of 110198398Srdivacky# the name of a variable temporary object. 111198398Srdivacky# - it's useful to keep objects around for crunching. 112198398SrdivackyOBJS+= ${PROG}.o 113198398Srdivacky 114198398Srdivacky.if target(beforelinking) 115198398Srdivackybeforelinking: ${OBJS} 116198398Srdivacky${PROG_FULL}: beforelinking 117198398Srdivacky.endif 118198398Srdivacky${PROG_FULL}: ${OBJS} 119198398Srdivacky.if defined(PROG_CXX) 120198398Srdivacky ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 121198398Srdivacky.else 122198398Srdivacky ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} 123198398Srdivacky.endif 124198398Srdivacky.if ${MK_CTF} != "no" 125198398Srdivacky ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 126198398Srdivacky.endif 127198398Srdivacky.endif # !target(${PROG}) 128193326Sed 129193326Sed.endif # !defined(SRCS) 130193326Sed 131193326Sed.if ${MK_DEBUG_FILES} != "no" 132193326Sed${PROG}: ${PROG_FULL} ${PROGNAME}.debug 133193326Sed ${OBJCOPY} --strip-debug --add-gnu-debuglink=${PROGNAME}.debug \ 134193326Sed ${PROG_FULL} ${.TARGET} 135193326Sed 136193326Sed${PROGNAME}.debug: ${PROG_FULL} 137193326Sed ${OBJCOPY} --only-keep-debug ${PROG_FULL} ${.TARGET} 138193326Sed.endif 139193326Sed 140193326Sed.if ${MK_MAN} != "no" && !defined(MAN) && \ 141193326Sed !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \ 142198092Srdivacky !defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \ 143193326Sed !defined(MAN7) && !defined(MAN8) && !defined(MAN9) 144193326SedMAN= ${PROG}.1 145193326SedMAN1= ${MAN} 146198092Srdivacky.endif 147193326Sed.endif # defined(PROG) 148193326Sed 149193326Sedall: objwarn ${PROG} ${SCRIPTS} 150198092Srdivacky.if ${MK_MAN} != "no" 151193326Sedall: _manpages 152198092Srdivacky.endif 153193326Sed 154193326Sed.if defined(PROG) 155193326SedCLEANFILES+= ${PROG} 156193326Sed.if ${MK_DEBUG_FILES} != "no" 157193326SedCLEANFILES+= ${PROG_FULL} ${PROGNAME}.debug 158193326Sed.endif 159193326Sed.endif 160193326Sed 161193326Sed.if defined(OBJS) 162193326SedCLEANFILES+= ${OBJS} 163193326Sed.endif 164193326Sed 165193326Sed.include <bsd.libnames.mk> 166198092Srdivacky 167193326Sed.if defined(PROG) 168193326Sed_EXTRADEPEND: 169193326Sed.if defined(LDFLAGS) && !empty(LDFLAGS:M-nostdlib) 170198092Srdivacky.if defined(DPADD) && !empty(DPADD) 171193326Sed echo ${PROG}: ${DPADD} >> ${DEPENDFILE} 172193326Sed.endif 173193326Sed.else 174193326Sed echo ${PROG}: ${LIBC} ${DPADD} >> ${DEPENDFILE} 175193326Sed.if defined(PROG_CXX) 176193326Sed.if ${MK_CLANG_IS_CC} != "no" && empty(CXXFLAGS:M-stdlib=libstdc++) 177193326Sed echo ${PROG}: ${LIBCPLUSPLUS} >> ${DEPENDFILE} 178193326Sed.else 179193326Sed echo ${PROG}: ${LIBSTDCPLUSPLUS} >> ${DEPENDFILE} 180198092Srdivacky.endif 181193326Sed.endif 182193326Sed.endif 183193326Sed.endif 184193326Sed 185193326Sed.if !target(install) 186198092Srdivacky 187193326Sed.if defined(PRECIOUSPROG) 188198092Srdivacky.if !defined(NO_FSCHG) 189193326SedINSTALLFLAGS+= -fschg 190193326Sed.endif 191193326SedINSTALLFLAGS+= -S 192193326Sed.endif 193193326Sed 194193326Sed_INSTALLFLAGS:= ${INSTALLFLAGS} 195193326Sed.for ie in ${INSTALLFLAGS_EDIT} 196193326Sed_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 197193326Sed.endfor 198193326Sed 199198092Srdivacky.if !target(realinstall) && !defined(INTERNALPROG) 200193326Sedrealinstall: _proginstall 201193326Sed.ORDER: beforeinstall _proginstall 202193326Sed_proginstall: 203193326Sed.if defined(PROG) 204198092Srdivacky ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 205193326Sed ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME} 206193326Sed.if ${MK_DEBUG_FILES} != "no" 207193326Sed.if defined(DEBUGMKDIR) 208198092Srdivacky ${INSTALL} -T debug -d ${DESTDIR}${DEBUGFILEDIR} 209193326Sed.endif 210193326Sed ${INSTALL} -T debug -o ${BINOWN} -g ${BINGRP} -m ${DEBUGMODE} \ 211193326Sed ${PROGNAME}.debug ${DESTDIR}${DEBUGFILEDIR}/${PROGNAME}.debug 212193326Sed.endif 213193326Sed.endif 214193326Sed.endif # !target(realinstall) 215193326Sed 216193326Sed.if defined(SCRIPTS) && !empty(SCRIPTS) 217193326Sedrealinstall: _scriptsinstall 218198092Srdivacky.ORDER: beforeinstall _scriptsinstall 219193326Sed 220193326SedSCRIPTSDIR?= ${BINDIR} 221193326SedSCRIPTSOWN?= ${BINOWN} 222193326SedSCRIPTSGRP?= ${BINGRP} 223193326SedSCRIPTSMODE?= ${BINMODE} 224193326Sed 225193326Sed.for script in ${SCRIPTS} 226193326Sed.if defined(SCRIPTSNAME) 227193326SedSCRIPTSNAME_${script:T}?= ${SCRIPTSNAME} 228193326Sed.else 229193326SedSCRIPTSNAME_${script:T}?= ${script:T:R} 230193326Sed.endif 231193326SedSCRIPTSDIR_${script:T}?= ${SCRIPTSDIR} 232193326SedSCRIPTSOWN_${script:T}?= ${SCRIPTSOWN} 233193326SedSCRIPTSGRP_${script:T}?= ${SCRIPTSGRP} 234193326SedSCRIPTSMODE_${script:T}?= ${SCRIPTSMODE} 235193326Sed_scriptsinstall: _SCRIPTSINS_${script:T} 236193326Sed_SCRIPTSINS_${script:T}: ${script} 237193326Sed ${INSTALL} -o ${SCRIPTSOWN_${.ALLSRC:T}} \ 238193326Sed -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \ 239193326Sed ${.ALLSRC} \ 240193326Sed ${DESTDIR}${SCRIPTSDIR_${.ALLSRC:T}}/${SCRIPTSNAME_${.ALLSRC:T}} 241193326Sed.endfor 242193326Sed.endif 243198092Srdivacky 244198092SrdivackyNLSNAME?= ${PROG} 245198092Srdivacky.include <bsd.nls.mk> 246193326Sed 247193326Sed.include <bsd.files.mk> 248193326Sed.include <bsd.incs.mk> 249193326Sed.include <bsd.links.mk> 250193326Sed 251193326Sed.if ${MK_MAN} != "no" 252193326Sedrealinstall: _maninstall 253193326Sed.ORDER: beforeinstall _maninstall 254193326Sed.endif 255193326Sed 256193326Sed.endif 257193326Sed 258198092Srdivacky.if !target(lint) 259193326Sedlint: ${SRCS:M*.c} 260193326Sed.if defined(PROG) 261198092Srdivacky ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 262193326Sed.endif 263193326Sed.endif 264193326Sed 265193326Sed.if ${MK_MAN} != "no" 266193326Sed.include <bsd.man.mk> 267193326Sed.endif 268193326Sed 269193326Sed.include <bsd.dep.mk> 270193326Sed 271193326Sed.if defined(PROG) && !exists(${.OBJDIR}/${DEPENDFILE}) 272193326Sed${OBJS}: ${SRCS:M*.h} 273193326Sed.endif 274198092Srdivacky 275193326Sed.include <bsd.obj.mk> 276193326Sed 277193326Sed.include <bsd.sys.mk> 278193326Sed 279198092Srdivacky.if defined(PORTNAME) 280193326Sed.include <bsd.pkg.mk> 281198092Srdivacky.endif 282193326Sed