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