1# $NetBSD: bsd.prog.mk,v 1.282 2013/02/14 03:02:47 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# 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.if defined(RESCUEDIR) 273CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\" 274.endif 275 276_PROGLDOPTS= 277.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves 278_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} 279.endif 280.if ${SHLIBDIR} != "/usr/lib" 281_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \ 282 -L=${SHLIBDIR} 283.elif ${SHLIBINSTALLDIR} != "/usr/lib" 284_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \ 285 -L=${SHLIBINSTALLDIR} 286.endif 287 288__proginstall: .USE 289 ${_MKTARGET_INSTALL} 290 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 291 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 292 293__progrumpinstall: .USE 294 ${_MKTARGET_INSTALL} 295 ${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \ 296 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 297 298__progdebuginstall: .USE 299 ${_MKTARGET_INSTALL} 300 ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \ 301 ${.ALLSRC} ${.TARGET} 302 303 304 305# 306# Backwards compatibility with Makefiles that assume that bsd.prog.mk 307# can only build a single binary. 308# 309 310_APPEND_MANS=yes 311_APPEND_SRCS=yes 312 313_CCLINKFLAGS= 314 315.if defined(PROG_CXX) 316PROG= ${PROG_CXX} 317_CCLINK= ${CXX} ${_CCLINKFLAGS} 318.endif 319 320.if defined(RUMPPRG) 321PROG= ${RUMPPRG} 322. ifndef CRUNCHEDPROG 323. if (${MKRUMP} != "no") 324PROGS= ${RUMPPRG} rump.${RUMPPRG} 325. else 326PROGS= ${RUMPPRG} 327. endif 328. if defined(SRCS) 329. if (${MKRUMP} != "no") 330SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS} 331. endif 332SRCS+= ${PROG}_hostops.c 333. else 334SRCS= ${PROG}.c ${PROG}_hostops.c 335. if (${MKRUMP} != "no") 336SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS} 337. endif 338. endif 339. if (${MKRUMP} != "no") 340DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS} 341LDADD.rump.${PROG}+= -lrumpclient 342DPADD.rump.${PROG}+= ${LIBRUMPCLIENT} 343MAN.rump.${PROG}= # defined but feeling empty 344_RUMPINSTALL.rump.${PROG}=# defined 345. endif 346. else # CRUNCHEDPROG 347PROGS= ${PROG} 348CPPFLAGS+= -DCRUNCHOPS 349. endif 350.endif 351 352.if defined(PROG) 353_CCLINK?= ${CC} ${_CCLINKFLAGS} 354. if defined(MAN) 355MAN.${PROG}= ${MAN} 356_APPEND_MANS= no 357. endif 358. if !defined(OBJS) 359OBJS= ${OBJS.${PROG}} 360. endif 361. if defined(PROGNAME) 362PROGNAME.${PROG}= ${PROGNAME} 363. endif 364. if defined(SRCS) 365SRCS.${PROG}= ${SRCS} 366_APPEND_SRCS= no 367. endif 368.endif 369 370# Turn the single-program PROG and PROG_CXX variables into their multi-word 371# counterparts, PROGS and PROGS_CXX. 372.if !defined(RUMPPRG) 373. if defined(PROG_CXX) && !defined(PROGS_CXX) 374PROGS_CXX= ${PROG_CXX} 375. elif defined(PROG) && !defined(PROGS) 376PROGS= ${PROG} 377. endif 378.endif 379 380##### Libraries that this may depend upon. 381.if defined(PROGDPLIBS) # { 382.for _lib _dir in ${PROGDPLIBS} 383.if !defined(BINDO.${_lib}) 384PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR} 385.MAKEOVERRIDES+=PROGDO.${_lib} 386.endif 387LDADD+= -L${PROGDO.${_lib}} -l${_lib} 388.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a) 389DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a 390.elif exists(${PROGDO.${_lib}}/lib${_lib}.so) 391DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so 392.else 393DPADD+= ${PROGDO.${_lib}}/lib${_lib}.a 394.endif 395.endfor 396.endif # } 397# 398# Per-program definitions and targets. 399# 400 401_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS} 402# Definitions specific to C programs. 403.for _P in ${PROGS} 404SRCS.${_P}?= ${_P}.c 405_CCLINK.${_P}= ${CC} ${_CCLINKFLAGS} 406_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS} 407_CPPFLAGS.${_P}= ${CPPFLAGS} 408_COPTS.${_P}= ${COPTS} 409.endfor 410 411_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS} 412# Definitions specific to C++ programs. 413.for _P in ${PROGS_CXX} 414SRCS.${_P}?= ${_P}.cc 415_CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS} 416.endfor 417 418# Language-independent definitions. 419.for _P in ${PROGS} ${PROGS_CXX} # { 420 421BINDIR.${_P}?= ${BINDIR} 422PROGNAME.${_P}?= ${_P} 423 424.if ${MKDEBUG} != "no" && !commands(${_P}) 425_PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug 426.endif 427 428.if defined(PAXCTL_FLAGS) 429PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS} 430.endif 431 432##### PROG specific flags. 433 434_DPADD.${_P}= ${DPADD} ${DPADD.${_P}} 435_LDADD.${_P}= ${LDADD} ${LDADD.${_P}} 436_LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}} 437_LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}} 438 439##### Build and install rules 440.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss]) 441SRCS+= ${SRCS.${_P}} # For bsd.dep.mk 442.endif 443 444_YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}} 445 446DPSRCS+= ${_YPSRCS.${_P}} 447CLEANFILES+= ${_YPSRCS.${_P}} 448 449.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth) 450OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 451LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln} 452.endif 453 454.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # { 455.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}} 456 457.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \ 458 && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \ 459 || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \ 460 && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE)) 461.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g} 462#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \ 463# ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5} 464.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \ 465 || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \ 466 || ${CXXFLAGS.$f:D5} == "5") \ 467 || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/})) 468XOBJS.${_P}+= ${f:R:S/$/.o/} 469.else 470XSRCS.${_P}+= ${f} 471NODPSRCS+= ${f} 472.endif 473.endfor 474 475${_P}: .gdbinit ${LIBCRT0} ${XOBJS.${_P}} ${SRCS.${_P}} ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}} 476 ${_MKTARGET_LINK} 477.if defined(DESTDIR) 478 ${_CCLINK.${_P}} -Wl,-nostdlib \ 479 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 480 -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ 481 -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \ 482 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 483 ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib 484.else 485 ${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \ 486 -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}} 487 ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \ 488 ${_LDADD.${_P}} 489.endif # defined(DESTDIR) 490.if defined(CTFMERGE) 491 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 492.endif 493.if defined(PAXCTL_FLAGS.${_P}) 494 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 495.endif 496.if ${MKSTRIPIDENT} != "no" 497 ${OBJCOPY} -R .ident ${.TARGET} 498.endif 499 500CLEANFILES+= ${_P}.d 501.if exists(${_P}.d) 502.include "${_P}.d" # include -MD depend for program. 503.endif 504.else # USE_COMBINE 505 506${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS} 507 508${_P}: .gdbinit ${LIBCRT0} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}} 509.if !commands(${_P}) 510 ${_MKTARGET_LINK} 511 ${_CCLINK.${_P}} \ 512 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \ 513 ${OBJS.${_P}} ${_LDADD.${_P}} \ 514 ${_PROGLDOPTS} 515.if defined(CTFMERGE) 516 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}} 517.endif 518.if defined(PAXCTL_FLAGS.${_P}) 519 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET} 520.endif 521.if ${MKSTRIPIDENT} != "no" 522 ${OBJCOPY} -R .ident ${.TARGET} 523.endif 524.endif # !commands(${_P}) 525.endif # USE_COMBINE 526 527${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}} 528 ${_MKTARGET_LINK} 529 ${CC} ${LDFLAGS} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}} 530 531.if defined(_PROGDEBUG.${_P}) 532${_PROGDEBUG.${_P}}: ${_P} 533 ${_MKTARGET_CREATE} 534 ( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \ 535 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 536 --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \ 537 ) || (rm -f ${_PROGDEBUG.${_P}}; false) 538.endif 539 540.endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # } 541 542.if !defined(MAN.${_P}) 543MAN.${_P}= ${_P}.1 544.endif # !defined(MAN.${_P}) 545.if !empty(_APPEND_MANS:M[Yy][Ee][Ss]) 546MAN+= ${MAN.${_P}} 547.endif 548 549realall: ${_P} ${_PROGDEBUG.${_P}} 550 551CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}} 552 553.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) 554CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}} 555.endif 556 557_PROG_INSTALL+= proginstall-${_P} 558 559.if !target(proginstall-${_P}) # { 560proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 561 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 562.PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \ 563 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}} 564 565.if ${MKUPDATE} == "no" 566.if defined(_RUMPINSTALL.${_P}) 567${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall 568.else 569${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall 570.endif 571.if !defined(BUILD) && !make(all) && !make(${_P}) 572${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE 573.endif 574.if defined(_PROGDEBUG.${_P}) 575${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall 576.if !defined(BUILD) && !make(all) && !make(${_P}) 577${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE 578.endif 579.endif # define(_PROGDEBUG.${_P}) 580.else # MKUPDATE != no 581.if defined(_RUMPINSTALL.${_P}) 582${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall 583.else 584${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall 585.endif 586.if !defined(BUILD) && !make(all) && !make(${_P}) 587${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE 588.endif 589.if defined(_PROGDEBUG.${_P}) 590${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall 591.if !defined(BUILD) && !make(all) && !make(${_P}) 592${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE 593.endif 594.endif # defined(_PROGDEBUG.${_P}) 595.endif # MKUPDATE != no 596 597.endif # !target(proginstall-${_P}) # } 598 599lint: lint-${_P} 600lint-${_P}: ${LOBJS.${_P}} 601.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P}) 602 ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}} 603.endif 604 605.endfor # _P in ${PROGS} ${PROGS_CXX} # } 606 607.if defined(OBJS) && !empty(OBJS) && \ 608 (empty(PROGS) && empty(PROGS_CXX)) 609CLEANFILES+= ${OBJS} ${LOBJS} 610.endif 611 612.if !target(proginstall) 613proginstall:: ${_PROG_INSTALL} 614.endif 615.PHONY: proginstall 616 617 618 619realall: ${SCRIPTS} 620.if defined(SCRIPTS) && !target(scriptsinstall) # { 621SCRIPTSDIR?=${BINDIR} 622SCRIPTSOWN?=${BINOWN} 623SCRIPTSGRP?=${BINGRP} 624SCRIPTSMODE?=${BINMODE} 625 626scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 627.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 628 629__scriptinstall: .USE 630 ${_MKTARGET_INSTALL} 631 ${INSTALL_FILE} \ 632 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \ 633 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \ 634 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \ 635 ${.ALLSRC} ${.TARGET} 636 637.for S in ${SCRIPTS:O:u} 638.if ${MKUPDATE} == "no" 639${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall 640.if !defined(BUILD) && !make(all) && !make(${S}) 641${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE 642.endif 643.else 644${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall 645.if !defined(BUILD) && !make(all) && !make(${S}) 646${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE 647.endif 648.endif 649.endfor 650.endif # } 651 652.if !target(scriptsinstall) 653scriptsinstall:: 654.endif 655.PHONY: scriptsinstall 656 657##### Pull in related .mk logic 658LINKSOWN?= ${BINOWN} 659LINKSGRP?= ${BINGRP} 660LINKSMODE?= ${BINMODE} 661.include <bsd.man.mk> 662.include <bsd.nls.mk> 663.include <bsd.files.mk> 664.include <bsd.inc.mk> 665.include <bsd.links.mk> 666.include <bsd.sys.mk> 667.include <bsd.dep.mk> 668.include <bsd.clang-analyze.mk> 669.include <bsd.clean.mk> 670 671${TARGETS}: # ensure existence 672 673.endif # HOSTPROG 674