1# $NetBSD: bsd.prog.mk,v 1.316 2018/07/12 10:46:41 maxv Exp $ 2# @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94 3 4.ifndef HOSTPROG 5 6.include <bsd.init.mk> 7.include <bsd.shlib.mk> 8.include <bsd.gcc.mk> 9 10##### Sanitizer specific flags. 11 12CFLAGS+= ${SANITIZERFLAGS} 13CXXFLAGS+= ${SANITIZERFLAGS} 14LDFLAGS+= ${SANITIZERFLAGS} 15 16# Rename the local function definitions to not conflict with libc/rt/pthread/m. 17.if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_SYMBOL) 18. for _symbol in ${SANITIZER_RENAME_SYMBOL} 19CPPFLAGS+= -D${_symbol}=__mksanitizer_${_symbol} 20. endfor 21.endif 22 23# 24# Definitions and targets shared among all programs built by a single 25# Makefile. 26# 27 28##### Basic targets 29realinstall: proginstall scriptsinstall 30 31.gdbinit: 32 rm -f .gdbinit 33.if defined(DESTDIR) && !empty(DESTDIR) 34 echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit 35.else 36 touch .gdbinit 37.endif 38.for __gdbinit in ${GDBINIT} 39 echo "source ${__gdbinit}" >> .gdbinit 40.endfor 41 42CLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit 43 44.if defined(SHAREDSTRINGS) 45CLEANFILES+=strings 46.c.o: 47 ${CC} -E ${CPPFLAGS} ${CFLAGS} ${.IMPSRC} | xstr -c - 48 @${CC} ${CPPFLAGS} ${CFLAGS} -c x.c -o ${.TARGET} 49.if defined(CTFCONVERT) 50 ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 51.endif 52 @rm -f x.c 53 54.cc.o .cpp.o .cxx.o .C.o: 55 ${CXX} -E ${CPPFLAGS} ${CXXFLAGS} ${.IMPSRC} | xstr -c - 56 @mv -f x.c x.cc 57 @${CXX} ${CPPFLAGS} ${CXXFLAGS} -c x.cc -o ${.TARGET} 58.if defined(CTFCONVERT) 59 ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 60.endif 61 @rm -f x.cc 62.endif 63 64.if defined(MKPIE) && (${MKPIE} != "no") && !defined(NOPIE) 65CFLAGS+= ${PIE_CFLAGS} 66AFLAGS+= ${PIE_AFLAGS} 67LDFLAGS+= ${"${LDSTATIC.${.TARGET}}" == "-static" :? : ${PIE_LDFLAGS}} 68.endif 69 70CFLAGS+= ${COPTS} 71.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) 72CFLAGS+= -g 73.endif 74OBJCFLAGS+= ${OBJCOPTS} 75MKDEP_SUFFIXES?= .o .ln .d 76 77# CTF preserve debug symbols 78.if (${MKCTF:Uno} != "no") && (${CFLAGS:M-g} != "") 79CTFFLAGS+= -g 80CTFMFLAGS+= -g 81.if defined(HAVE_GCC) 82#CFLAGS+=-gdwarf-2 83.endif 84.endif 85 86# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o 87.ifndef LIBCRTBEGIN 88LIBCRTBEGIN= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o ${_GCC_CRTBEGIN} 89.MADE: ${LIBCRTBEGIN} 90.endif 91.ifndef LIBCRTEND 92LIBCRTEND= ${_GCC_CRTEND} ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crtn.o 93.MADE: ${LIBCRTEND} 94.endif 95_SHLINKER= ${SHLINKDIR}/ld.elf_so 96 97.ifndef LIBCRT0 98LIBCRT0= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crt0.o 99.MADE: ${LIBCRT0} 100.endif 101 102.ifndef LIBCRTI 103LIBCRTI= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o 104.MADE: ${LIBCRTI} 105.endif 106 107##### Installed system library definitions 108# 109# E.g. 110# LIBC?=${DESTDIR}/usr/lib/libc.a 111# LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a 112# etc.. 113# NB: If you are a library here, add it in bsd.README 114 115.for _lib in \ 116 archive \ 117 asn1 \ 118 atf_c \ 119 atf_cxx \ 120 bind9 \ 121 bluetooth \ 122 bsdmalloc \ 123 bz2 \ 124 c \ 125 c_pic \ 126 com_err \ 127 compat \ 128 crypt \ 129 crypto \ 130 curses \ 131 cxx \ 132 dbm \ 133 des \ 134 dns \ 135 edit \ 136 event \ 137 expat \ 138 execinfo \ 139 fetch \ 140 fl \ 141 form \ 142 g2c \ 143 gcc \ 144 gnumalloc \ 145 gssapi \ 146 hdb \ 147 heimbase \ 148 heimntlm \ 149 hx509 \ 150 intl \ 151 ipsec \ 152 isc \ 153 isccc \ 154 isccfg \ 155 kadm5clnt \ 156 kadm5srv \ 157 kafs \ 158 krb5 \ 159 kvm \ 160 l \ 161 lber \ 162 ldap \ 163 ldap_r \ 164 lua \ 165 lwres \ 166 m \ 167 magic \ 168 menu \ 169 netpgpverify \ 170 objc \ 171 ossaudio \ 172 pam \ 173 pcap \ 174 pci \ 175 posix \ 176 pthread \ 177 puffs \ 178 quota \ 179 radius \ 180 resolv \ 181 rmt \ 182 roken \ 183 rpcsvc \ 184 rt \ 185 rump \ 186 rumpfs_cd9660fs \ 187 rumpfs_efs \ 188 rumpfs_ext2fs \ 189 rumpfs_ffs \ 190 rumpfs_hfs \ 191 rumpfs_lfs \ 192 rumpfs_msdosfs \ 193 rumpfs_nfs \ 194 rumpfs_ntfs \ 195 rumpfs_syspuffs \ 196 rumpfs_tmpfs \ 197 rumpfs_udf \ 198 rumpfs_ufs \ 199 rumpuser \ 200 saslc \ 201 skey \ 202 sl \ 203 sqlite3 \ 204 ss \ 205 ssh \ 206 ssl \ 207 ssp \ 208 stdcxx \ 209 supcxx \ 210 terminfo \ 211 tre \ 212 unbound \ 213 usbhid \ 214 util \ 215 wind \ 216 wrap \ 217 y \ 218 z 219.ifndef LIB${_lib:tu} 220LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a 221.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 222.endif 223.endfor 224 225.if (${MKKERBEROS} != "no") 226LIBKRB5_LDADD+= -lkrb5 227LIBKRB5_DPADD+= ${LIBKRB5} 228# Kerberos5 applications, if linked statically, need more libraries 229LIBKRB5_STATIC_LDADD+= \ 230 -lhx509 -lcrypto -lasn1 -lcom_err -lroken \ 231 -lwind -lheimbase -lsqlite3 -lcrypt -lutil 232LIBKRB5_STATIC_DPADD+= \ 233 ${LIBHX509} ${LIBCRYPTO} ${LIBASN1} ${LIBCOM_ERR} ${LIBROKEN} \ 234 ${LIBWIND} ${LIBHEIMBASE} ${LIBSQLITE3} ${LIBCRYPT} ${LIBUTIL} 235. if (${MKPIC} == "no") 236LIBKRB5_LDADD+= ${LIBKRB5_STATIC_LDADD} 237LIBKRB5_DPADD+= ${LIBKRB5_STATIC_DPADD} 238. endif 239.endif 240 241# PAM applications, if linked statically, need more libraries 242.if (${MKPIC} == "no") 243PAM_STATIC_LDADD+= -lssh 244PAM_STATIC_DPADD+= ${LIBSSH} 245.if (${MKKERBEROS} != "no") 246PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \ 247 -lroken -lcom_err -lheimbase -lcrypto -lsqlite3 248PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \ 249 ${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO} ${LIBSQLITE3} 250.endif 251.if (${MKSKEY} != "no") 252PAM_STATIC_LDADD+= -lskey 253PAM_STATIC_DPADD+= ${LIBSKEY} 254.endif 255PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil 256PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL} 257.else 258PAM_STATIC_LDADD= 259PAM_STATIC_DPADD= 260.endif 261 262# NB: If you are a library here, add it in bsd.README 263.for _lib in \ 264 FS \ 265 GL \ 266 GLU \ 267 ICE \ 268 SM \ 269 X11 \ 270 XTrap \ 271 Xau \ 272 Xaw \ 273 Xdmcp \ 274 Xext \ 275 Xfont2 \ 276 Xfont \ 277 Xft \ 278 Xi \ 279 Xinerama \ 280 Xmu \ 281 Xmuu \ 282 Xpm \ 283 Xrandr \ 284 Xrender \ 285 Xss \ 286 Xt \ 287 Xtst \ 288 Xv \ 289 Xxf86dga \ 290 Xxf86misc \ 291 Xxf86vm \ 292 dps \ 293 fntstubs \ 294 fontcache \ 295 fontconfig \ 296 fontenc \ 297 freetype \ 298 lbxutil \ 299 xkbfile 300.ifndef LIB${_lib:tu} 301LIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a 302.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded 303.endif 304.endfor 305 306# Ugly one-offs 307LIBX11_XCB= ${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a 308LIBXCB= ${DESTDIR}${X11USRLIBDIR}/libxcb.a 309 310.if defined(RESCUEDIR) 311CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\" 312.endif 313 314_PROGLDOPTS= 315.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves 316_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} 317.endif 318.if ${SHLIBDIR} != "/usr/lib" 319_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \ 320 -L=${SHLIBDIR} 321.elif ${SHLIBINSTALLDIR} != "/usr/lib" 322_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \ 323 -L=${SHLIBINSTALLDIR} 324.endif 325 326__proginstall: .USE 327 ${_MKTARGET_INSTALL} 328 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 329 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 330 331__progrumpinstall: .USE 332 ${_MKTARGET_INSTALL} 333 ${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \ 334 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 335 336__progdebuginstall: .USE 337 ${_MKTARGET_INSTALL} 338 ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \ 339 ${.ALLSRC} ${.TARGET} 340 341 342 343# 344# Backwards compatibility with Makefiles that assume that bsd.prog.mk 345# can only build a single binary. 346# 347 348_APPEND_MANS=yes 349_APPEND_SRCS=yes 350 351_CCLINKFLAGS= 352 353.if defined(PROG_CXX) 354PROG= ${PROG_CXX} 355_CCLINK= ${CXX} ${_CCLINKFLAGS} 356.endif 357 358.if defined(RUMPPRG) 359CPPFLAGS+= -D_KERNTYPES 360PROG= ${RUMPPRG} 361. ifndef CRUNCHEDPROG 362. if (${MKRUMP} != "no") 363PROGS= ${RUMPPRG} rump.${RUMPPRG} 364. else 365PROGS= ${RUMPPRG} 366. endif 367. if defined(SRCS) 368. if (${MKRUMP} != "no") 369SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS} 370. endif 371SRCS+= ${PROG}_hostops.c 372. else 373SRCS= ${PROG}.c ${PROG}_hostops.c 374. if (${MKRUMP} != "no") 375SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS} 376. endif 377. endif 378. if (${MKRUMP} != "no") 379DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS} 380LDADD.rump.${PROG}+= ${LDADD.rump} -lrumpclient 381DPADD.rump.${PROG}+= ${DPADD.rump} ${LIBRUMPCLIENT} 382MAN.rump.${PROG}= # defined but feeling empty 383_RUMPINSTALL.rump.${PROG}=# defined 384. endif 385. else # CRUNCHEDPROG 386PROGS= ${PROG} 387CPPFLAGS+= -DCRUNCHOPS 388. endif 389.endif 390 391.if defined(PROG) 392_CCLINK?= ${CC} ${_CCLINKFLAGS} 393. if defined(MAN) 394MAN.${PROG}= ${MAN} 395_APPEND_MANS= no 396. endif 397. if !defined(OBJS) 398OBJS= ${OBJS.${PROG}} 399. endif 400. if defined(PROGNAME) 401PROGNAME.${PROG}= ${PROGNAME} 402. endif 403. if defined(SRCS) 404SRCS.${PROG}= ${SRCS} 405_APPEND_SRCS= no 406. endif 407.endif 408 409# Turn the single-program PROG and PROG_CXX variables into their multi-word 410# counterparts, PROGS and PROGS_CXX. 411.if !defined(RUMPPRG) 412. if defined(PROG_CXX) && !defined(PROGS_CXX) 413PROGS_CXX= ${PROG_CXX} 414. elif defined(PROG) && !defined(PROGS) 415PROGS= ${PROG} 416. endif 417.endif 418 419##### Libraries that this may depend upon. 420.if defined(PROGDPLIBS) # { 421.for _lib _dir in ${PROGDPLIBS} 422.if !defined(BINDO.${_lib}) 423PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR} 424.MAKEOVERRIDES+=PROGDO.${_lib} 425.endif 426LDADD+= -L${PROGDO.${_lib}} -l${_lib} 427.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a) 428DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a 429.elif exists(${PROGDO.${_lib}}/lib${_lib}.so) 430DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so 431.else 432DPADD+= ${PROGDO.${_lib}}/lib${_lib}.a 433.endif 434.endfor 435.endif # } 436# 437# Per-program definitions and targets. 438# 439 440_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS} 441# Definitions specific to C programs. 442.for _P in ${PROGS} 443SRCS.${_P}?= ${_P}.c 444_CCLINK.${_P}= ${CC} ${_CCLINKFLAGS} 445_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS} 446_CPPFLAGS.${_P}= ${CPPFLAGS} 447_COPTS.${_P}= ${COPTS} 448.endfor 449 450_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS} 451# Definitions specific to C++ programs. 452.for _P in ${PROGS_CXX} 453SRCS.${_P}?= ${_P}.cc 454_CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS} 455.endfor 456 457# Language-independent definitions. 458.for _P in ${PROGS} ${PROGS_CXX} # { 459 460BINDIR.${_P}?= ${BINDIR} 461PROGNAME.${_P}?= ${_P} 462 463.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) && !commands(${_P}) && \ 464 empty(SRCS.${_P}:M*.sh) 465_PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug 466.endif 467 468.if defined(PAXCTL_FLAGS) 469PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS} 470.endif 471 472##### PROG specific flags. 473 474_DPADD.${_P}= ${DPADD} ${DPADD.${_P}} 475_LDADD.${_P}= ${LDADD} ${LDADD.${_P}} 476_LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}} 477.if ${MKSANITIZER} != "yes" 478# Sanitizers don't support static build. 479_LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}} 480.endif 481 482##### Build and install rules 483.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss]) 484SRCS+= ${SRCS.${_P}} # For bsd.dep.mk 485.endif 486 487_YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}} 488 489DPSRCS+= ${_YPSRCS.${_P}} 490CLEANFILES+= ${_YPSRCS.${_P}} 491 492.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth) 493OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 494LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln} 495.endif 496 497.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # { 498.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}} 499 500.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \ 501 && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \ 502 || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \ 503 && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE)) 504.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g} 505#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \ 506# ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5} 507.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \ 508 || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \ 509 || ${CXXFLAGS.$f:D5} == "5") \ 510 || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/})) 511XOBJS.${_P}+= ${f:R:S/$/.o/} 512.else 513XSRCS.${_P}+= ${f} 514NODPSRCS+= ${f} 515.endif 516.endfor 517 518${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \ 519 ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}} 520 ${_MKTARGET_LINK} 521.if defined(DESTDIR) 522 ${_CCLINK.${_P}} -Wl,-nostdlib \ 523 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 524 -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ 525 -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \ 526 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 527 ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib 528.else 529 ${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 530 -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}} 531 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 532 ${_LDADD.${_P}} 533.endif # defined(DESTDIR) 534.if defined(CTFMERGE) 535 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 536.endif 537.if defined(PAXCTL_FLAGS.${_P}) 538 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 539.endif 540.if ${MKSTRIPIDENT} != "no" 541 ${OBJCOPY} -R .ident ${.TARGET} 542.endif 543 544CLEANFILES+= ${_P}.d 545.if exists(${_P}.d) 546.include "${_P}.d" # include -MD depend for program. 547.endif 548.else # USE_COMBINE 549 550${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS} 551 552${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \ 553 ${LIBCRTEND} ${_DPADD.${_P}} 554.if !commands(${_P}) 555 ${_MKTARGET_LINK} 556 ${_CCLINK.${_P}} \ 557 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \ 558 ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}} 559.if defined(CTFMERGE) 560 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 561.endif 562.if defined(PAXCTL_FLAGS.${_P}) 563 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 564.endif 565.if ${MKSTRIPIDENT} != "no" 566 ${OBJCOPY} -R .ident ${.TARGET} 567.endif 568.endif # !commands(${_P}) 569.endif # USE_COMBINE 570 571${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}} 572 ${_MKTARGET_LINK} 573 ${CC} ${LDFLAGS:N-pie} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}} 574 575.if defined(_PROGDEBUG.${_P}) 576${_PROGDEBUG.${_P}}: ${_P} 577 ${_MKTARGET_CREATE} 578 ( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \ 579 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 580 --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \ 581 ) || (rm -f ${_PROGDEBUG.${_P}}; false) 582.endif 583 584.endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # } 585 586.if !defined(MAN.${_P}) 587MAN.${_P}= ${_P}.1 588.endif # !defined(MAN.${_P}) 589.if !empty(_APPEND_MANS:M[Yy][Ee][Ss]) 590MAN+= ${MAN.${_P}} 591.endif 592 593realall: ${_P} ${_PROGDEBUG.${_P}} 594 595CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}} 596 597.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) 598CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}} 599.endif 600 601_PROG_INSTALL+= proginstall-${_P} 602 603.if !target(proginstall-${_P}) # { 604proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 605 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 606.PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 607 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 608 609.if ${MKUPDATE} == "no" 610.if defined(_RUMPINSTALL.${_P}) 611${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall 612.else 613${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall 614.endif 615.if !defined(BUILD) && !make(all) && !make(${_P}) 616${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE 617.endif 618.if defined(_PROGDEBUG.${_P}) 619${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall 620.if !defined(BUILD) && !make(all) && !make(${_P}) 621${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE 622.endif 623.endif # define(_PROGDEBUG.${_P}) 624.else # MKUPDATE != no 625.if defined(_RUMPINSTALL.${_P}) 626${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall 627.else 628${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall 629.endif 630.if !defined(BUILD) && !make(all) && !make(${_P}) 631${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE 632.endif 633.if defined(_PROGDEBUG.${_P}) 634${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall 635.if !defined(BUILD) && !make(all) && !make(${_P}) 636${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE 637.endif 638.endif # defined(_PROGDEBUG.${_P}) 639.endif # MKUPDATE != no 640 641.endif # !target(proginstall-${_P}) # } 642 643lint: lint-${_P} 644lint-${_P}: ${LOBJS.${_P}} 645.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P}) 646 ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}} 647.endif 648 649.endfor # _P in ${PROGS} ${PROGS_CXX} # } 650 651.if defined(OBJS) && !empty(OBJS) && \ 652 (empty(PROGS) && empty(PROGS_CXX)) 653CLEANFILES+= ${OBJS} ${LOBJS} 654.endif 655 656.if !target(proginstall) 657proginstall:: ${_PROG_INSTALL} 658.endif 659.PHONY: proginstall 660 661 662 663realall: ${SCRIPTS} 664.if defined(SCRIPTS) && !target(scriptsinstall) # { 665SCRIPTSDIR?=${BINDIR} 666SCRIPTSOWN?=${BINOWN} 667SCRIPTSGRP?=${BINGRP} 668SCRIPTSMODE?=${BINMODE} 669 670scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 671.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 672 673__scriptinstall: .USE 674 ${_MKTARGET_INSTALL} 675 ${INSTALL_FILE} \ 676 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \ 677 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \ 678 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \ 679 ${.ALLSRC} ${.TARGET} 680 681.for S in ${SCRIPTS:O:u} 682.if ${MKUPDATE} == "no" 683${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall 684.if !defined(BUILD) && !make(all) && !make(${S}) 685${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE 686.endif 687.else 688${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall 689.if !defined(BUILD) && !make(all) && !make(${S}) 690${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE 691.endif 692.endif 693.endfor 694.endif # } 695 696.if !target(scriptsinstall) 697scriptsinstall:: 698.endif 699.PHONY: scriptsinstall 700 701##### Pull in related .mk logic 702LINKSOWN?= ${BINOWN} 703LINKSGRP?= ${BINGRP} 704LINKSMODE?= ${BINMODE} 705.include <bsd.man.mk> 706.include <bsd.nls.mk> 707.include <bsd.files.mk> 708.include <bsd.inc.mk> 709.include <bsd.links.mk> 710.include <bsd.sys.mk> 711.include <bsd.dep.mk> 712.include <bsd.clang-analyze.mk> 713.include <bsd.clean.mk> 714 715${TARGETS}: # ensure existence 716 717.endif # HOSTPROG 718