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