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