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