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