bsd.prog.mk revision 1.283 1 # $NetBSD: bsd.prog.mk,v 1.283 2013/04/04 21:14:36 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
16 realinstall: 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
29 CLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit
30
31 .if defined(SHAREDSTRINGS)
32 CLEANFILES+=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")
52 CFLAGS+= ${PIE_CFLAGS}
53 AFLAGS+= ${PIE_AFLAGS}
54 LDFLAGS+= ${PIE_LDFLAGS}
55 .endif
56
57 CFLAGS+= ${COPTS}
58 .if defined(MKDEBUG) && (${MKDEBUG} != "no")
59 CFLAGS+= -g
60 .endif
61 OBJCFLAGS+= ${OBJCOPTS}
62 MKDEP_SUFFIXES?= .o .ln
63
64 # CTF preserve debug symbols
65 .if defined(MKDTRACE) && (${MKDTRACE} != "no") && (${CFLAGS:M-g} != "")
66 CTFFLAGS+= -g
67 CTFMFLAGS+= -g
68 .endif
69
70 # ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o
71 .ifndef LIBCRTBEGIN
72 LIBCRTBEGIN= ${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGIN}
73 .MADE: ${LIBCRTBEGIN}
74 .endif
75 .ifndef LIBCRTEND
76 LIBCRTEND= ${_GCC_CRTEND} ${DESTDIR}/usr/lib/crtn.o
77 .MADE: ${LIBCRTEND}
78 .endif
79 _SHLINKER= ${SHLINKDIR}/ld.elf_so
80
81 .ifndef LIBCRT0
82 LIBCRT0= ${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}
201 LIB${_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")
209 PAM_STATIC_LDADD+= -lssh
210 PAM_STATIC_DPADD+= ${LIBSSH}
211 .endif
212 .if (${MKKERBEROS} != "no")
213 PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \
214 -lroken -lcom_err -lheimbase -lcrypto
215 PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \
216 ${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO}
217 .endif
218 .if (${MKSKEY} != "no")
219 PAM_STATIC_LDADD+= -lskey
220 PAM_STATIC_DPADD+= ${LIBSKEY}
221 .endif
222 PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil
223 PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL}
224 .else
225 PAM_STATIC_LDADD=
226 PAM_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}
267 LIB${_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)
273 CPPFLAGS+= -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)
316 PROG= ${PROG_CXX}
317 _CCLINK= ${CXX} ${_CCLINKFLAGS}
318 .endif
319
320 .if defined(RUMPPRG)
321 PROG= ${RUMPPRG}
322 . ifndef CRUNCHEDPROG
323 . if (${MKRUMP} != "no")
324 PROGS= ${RUMPPRG} rump.${RUMPPRG}
325 . else
326 PROGS= ${RUMPPRG}
327 . endif
328 . if defined(SRCS)
329 . if (${MKRUMP} != "no")
330 SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS}
331 . endif
332 SRCS+= ${PROG}_hostops.c
333 . else
334 SRCS= ${PROG}.c ${PROG}_hostops.c
335 . if (${MKRUMP} != "no")
336 SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS}
337 . endif
338 . endif
339 . if (${MKRUMP} != "no")
340 DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS}
341 LDADD.rump.${PROG}+= -lrumpclient
342 DPADD.rump.${PROG}+= ${LIBRUMPCLIENT}
343 MAN.rump.${PROG}= # defined but feeling empty
344 _RUMPINSTALL.rump.${PROG}=# defined
345 . endif
346 . else # CRUNCHEDPROG
347 PROGS= ${PROG}
348 CPPFLAGS+= -DCRUNCHOPS
349 . endif
350 .endif
351
352 .if defined(PROG)
353 _CCLINK?= ${CC} ${_CCLINKFLAGS}
354 . if defined(MAN)
355 MAN.${PROG}= ${MAN}
356 _APPEND_MANS= no
357 . endif
358 . if !defined(OBJS)
359 OBJS= ${OBJS.${PROG}}
360 . endif
361 . if defined(PROGNAME)
362 PROGNAME.${PROG}= ${PROGNAME}
363 . endif
364 . if defined(SRCS)
365 SRCS.${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)
374 PROGS_CXX= ${PROG_CXX}
375 . elif defined(PROG) && !defined(PROGS)
376 PROGS= ${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})
384 PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR}
385 .MAKEOVERRIDES+=PROGDO.${_lib}
386 .endif
387 LDADD+= -L${PROGDO.${_lib}} -l${_lib}
388 .if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a)
389 DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a
390 .elif exists(${PROGDO.${_lib}}/lib${_lib}.so)
391 DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so
392 .else
393 DPADD+= ${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}
404 SRCS.${_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}
414 SRCS.${_P}?= ${_P}.cc
415 _CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS}
416 .endfor
417
418 # Language-independent definitions.
419 .for _P in ${PROGS} ${PROGS_CXX} # {
420
421 BINDIR.${_P}?= ${BINDIR}
422 PROGNAME.${_P}?= ${_P}
423
424 .if ${MKDEBUG} != "no" && !commands(${_P})
425 _PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug
426 .endif
427
428 .if defined(PAXCTL_FLAGS)
429 PAXCTL_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])
441 SRCS+= ${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
446 DPSRCS+= ${_YPSRCS.${_P}}
447 CLEANFILES+= ${_YPSRCS.${_P}}
448
449 .if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
450 OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
451 LOBJS.${_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/}))
468 XOBJS.${_P}+= ${f:R:S/$/.o/}
469 .else
470 XSRCS.${_P}+= ${f}
471 NODPSRCS+= ${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
500 CLEANFILES+= ${_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}} ${_PROGLDOPTS} ${_LDADD.${_P}}
514 .if defined(CTFMERGE)
515 ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
516 .endif
517 .if defined(PAXCTL_FLAGS.${_P})
518 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
519 .endif
520 .if ${MKSTRIPIDENT} != "no"
521 ${OBJCOPY} -R .ident ${.TARGET}
522 .endif
523 .endif # !commands(${_P})
524 .endif # USE_COMBINE
525
526 ${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}}
527 ${_MKTARGET_LINK}
528 ${CC} ${LDFLAGS} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}}
529
530 .if defined(_PROGDEBUG.${_P})
531 ${_PROGDEBUG.${_P}}: ${_P}
532 ${_MKTARGET_CREATE}
533 ( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \
534 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
535 --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
536 ) || (rm -f ${_PROGDEBUG.${_P}}; false)
537 .endif
538
539 .endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # }
540
541 .if !defined(MAN.${_P})
542 MAN.${_P}= ${_P}.1
543 .endif # !defined(MAN.${_P})
544 .if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
545 MAN+= ${MAN.${_P}}
546 .endif
547
548 realall: ${_P} ${_PROGDEBUG.${_P}}
549
550 CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}}
551
552 .if defined(OBJS.${_P}) && !empty(OBJS.${_P})
553 CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}}
554 .endif
555
556 _PROG_INSTALL+= proginstall-${_P}
557
558 .if !target(proginstall-${_P}) # {
559 proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
560 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
561 .PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
562 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
563
564 .if ${MKUPDATE} == "no"
565 .if defined(_RUMPINSTALL.${_P})
566 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall
567 .else
568 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
569 .endif
570 .if !defined(BUILD) && !make(all) && !make(${_P})
571 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
572 .endif
573 .if defined(_PROGDEBUG.${_P})
574 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
575 .if !defined(BUILD) && !make(all) && !make(${_P})
576 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
577 .endif
578 .endif # define(_PROGDEBUG.${_P})
579 .else # MKUPDATE != no
580 .if defined(_RUMPINSTALL.${_P})
581 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall
582 .else
583 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
584 .endif
585 .if !defined(BUILD) && !make(all) && !make(${_P})
586 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
587 .endif
588 .if defined(_PROGDEBUG.${_P})
589 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
590 .if !defined(BUILD) && !make(all) && !make(${_P})
591 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
592 .endif
593 .endif # defined(_PROGDEBUG.${_P})
594 .endif # MKUPDATE != no
595
596 .endif # !target(proginstall-${_P}) # }
597
598 lint: lint-${_P}
599 lint-${_P}: ${LOBJS.${_P}}
600 .if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
601 ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
602 .endif
603
604 .endfor # _P in ${PROGS} ${PROGS_CXX} # }
605
606 .if defined(OBJS) && !empty(OBJS) && \
607 (empty(PROGS) && empty(PROGS_CXX))
608 CLEANFILES+= ${OBJS} ${LOBJS}
609 .endif
610
611 .if !target(proginstall)
612 proginstall:: ${_PROG_INSTALL}
613 .endif
614 .PHONY: proginstall
615
616
617
618 realall: ${SCRIPTS}
619 .if defined(SCRIPTS) && !target(scriptsinstall) # {
620 SCRIPTSDIR?=${BINDIR}
621 SCRIPTSOWN?=${BINOWN}
622 SCRIPTSGRP?=${BINGRP}
623 SCRIPTSMODE?=${BINMODE}
624
625 scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
626 .PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
627
628 __scriptinstall: .USE
629 ${_MKTARGET_INSTALL}
630 ${INSTALL_FILE} \
631 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
632 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
633 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
634 ${.ALLSRC} ${.TARGET}
635
636 .for S in ${SCRIPTS:O:u}
637 .if ${MKUPDATE} == "no"
638 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
639 .if !defined(BUILD) && !make(all) && !make(${S})
640 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
641 .endif
642 .else
643 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
644 .if !defined(BUILD) && !make(all) && !make(${S})
645 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
646 .endif
647 .endif
648 .endfor
649 .endif # }
650
651 .if !target(scriptsinstall)
652 scriptsinstall::
653 .endif
654 .PHONY: scriptsinstall
655
656 ##### Pull in related .mk logic
657 LINKSOWN?= ${BINOWN}
658 LINKSGRP?= ${BINGRP}
659 LINKSMODE?= ${BINMODE}
660 .include <bsd.man.mk>
661 .include <bsd.nls.mk>
662 .include <bsd.files.mk>
663 .include <bsd.inc.mk>
664 .include <bsd.links.mk>
665 .include <bsd.sys.mk>
666 .include <bsd.dep.mk>
667 .include <bsd.clang-analyze.mk>
668 .include <bsd.clean.mk>
669
670 ${TARGETS}: # ensure existence
671
672 .endif # HOSTPROG
673