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