retire nonsymbolic rootdev, dev2name
[minix.git] / share / mk / bsd.prog.mk
blob4926f04b30ee36d4decb2d31aa819d6efa95dfc6
1 # $NetBSD: bsd.prog.mk,v 1.244 2009/12/08 15:18:42 uebayasi Exp $
2 # @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94
4 .ifndef HOSTPROG
6 .include <bsd.init.mk>
7 .include <minix.gcov.mk>
10 # Definitions and targets shared among all programs built by a single
11 # Makefile.
14 ##### Minix rule to make the "install" target depend on
15 ##### "all" and "depend" targets
16 realinstall: realall
17 realall: depend
18 depend: ${.CURDIR}/.gitignore
20 ##### Basic targets
21 realinstall: proginstall scriptsinstall
22 clean: cleanprog
24 cleanobjs: .PHONY
26 cleanprog: .PHONY cleanobjs cleanextra
27 rm -f a.out [Ee]rrs mklog core *.core
29 ##### Default values
30 .if empty(CPPFLAGS:M-nostdinc)
31 CPPFLAGS+= ${DESTDIR:D-nostdinc ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include}
32 .endif
33 .if empty(CXXFLAGS:M-nostdinc++)
34 CXXFLAGS+= ${DESTDIR:D-nostdinc++ ${CPPFLAG_ISYSTEMXX} ${DESTDIR}/usr/include/g++}
35 .endif
36 CFLAGS+= ${COPTS}
37 OBJCFLAGS+= ${OBJCOPTS}
38 MKDEP_SUFFIXES?= .o .ln
40 ##### Installed system library definitions
42 # E.g.
43 # LIBC?=${DESTDIR}/usr/lib/libc.a
44 # LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
45 # etc..
47 # .for _lib in \
48 # archive asn1 bluetooth bsdmalloc bz2 c c_pic cdk com_err compat \
49 # crypt crypto crypto_idea crypto_mdc2 crypto_rc5 \
50 # curses dbm des edit event \
51 # fetch form fl g2c gcc gnumalloc gssapi hdb heimntlm hx509 intl ipsec \
52 # kadm5clnt kadm5srv kafs krb5 kvm l lber ldap ldap_r \
53 # m magic menu objc ossaudio pam pcap pci pmc posix pthread pthread_dbg \
54 # puffs radius resolv rmt roken rpcsvc rt rump rumpuser skey sl ss \
55 # ssh ssl termcap usbhid util wrap y z bind9 dns lwres isccfg isccc isc \
56 # \
57 # rumpfs_cd9660fs rumpfs_efs rumpfs_ext2fs rumpfs_ffs rumpfs_hfs \
58 # rumpfs_lfs rumpfs_msdosfs rumpfs_nfs rumpfs_ntfs rumpfs_syspuffs \
59 # rumpfs_tmpfs rumpfs_udf rumpfs_ufs
60 .for _lib in \
61 c curses blockdriver chardriver netdriver edit end m sys timers util \
62 bz2 l audiodriver exec ddekit devman usb elf bdev sffs hgfs vboxfs \
63 minc minlib
64 .ifndef LIB${_lib:tu}
65 LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib}.a
66 .MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded
67 .endif
68 .endfor
70 # These need + -> X transformations
71 .ifndef LIBSTDCXX
72 LIBSTDCXX= ${DESTDIR}/usr/lib/libstdc++.a
73 .MADE: ${LIBSTDCXX}
74 .endif
76 .ifndef LIBSUPCXX
77 LIBSUPCXX= ${DESTDIR}/usr/lib/libsupc++.a
78 .MADE: ${LIBSUPCXX}
79 .endif
81 .for _lib in \
82 dps expat fntstubs fontcache fontconfig fontenc freetype FS \
83 GL GLU ICE lbxutil SM X11 Xau Xaw Xdmcp Xext Xfont Xft \
84 Xi Xinerama xkbfile Xmu Xmuu Xpm Xrandr Xrender Xss Xt \
85 XTrap Xtst Xv Xxf86dga Xxf86misc Xxf86vm
86 .ifndef LIB${_lib:tu}
87 LIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a
88 .MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded
89 .endif
90 .endfor
92 .if defined(RESCUEDIR)
93 CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\"
94 .endif
96 __proginstall: .USE
97 ${_MKTARGET_INSTALL}
98 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
99 ${STRIPFLAG} ${.ALLSRC} ${.TARGET}
101 __progdebuginstall: .USE
102 ${_MKTARGET_INSTALL}
103 ${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
104 ${.ALLSRC} ${.TARGET}
109 # Backwards compatibility with Makefiles that assume that bsd.prog.mk
110 # can only build a single binary.
113 _APPEND_MANS=yes
114 _APPEND_SRCS=yes
116 _CCLINKFLAGS=
117 .if defined(DESTDIR)
118 _CCLINKFLAGS+= -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/
119 .endif
121 .if defined(PROG_CXX)
122 PROG= ${PROG_CXX}
123 _CCLINK= ${CXX} ${_CCLINKFLAGS}
124 .endif
126 .if defined(PROG)
127 _CCLINK?= ${CC} ${_CCLINKFLAGS}
128 . if defined(MAN)
129 MAN.${PROG}= ${MAN}
130 _APPEND_MANS= no
131 . endif
132 . if !defined(OBJS)
133 OBJS= ${OBJS.${PROG}}
134 . endif
135 . if defined(PROGNAME)
136 PROGNAME.${PROG}= ${PROGNAME}
137 . endif
138 . if defined(SRCS)
139 SRCS.${PROG}= ${SRCS}
140 _APPEND_SRCS= no
141 . endif
142 .endif
144 # Turn the single-program PROG and PROG_CXX variables into their multi-word
145 # counterparts, PROGS and PROGS_CXX.
146 .if defined(PROG_CXX) && !defined(PROGS_CXX)
147 PROGS_CXX= ${PROG_CXX}
148 .elif defined(PROG) && !defined(PROGS)
149 PROGS= ${PROG}
150 .endif
155 # Per-program definitions and targets.
158 # Definitions specific to C programs.
159 .for _P in ${PROGS}
160 SRCS.${_P}?= ${_P}.c
161 _CCLINK.${_P}= ${CC} ${_CCLINKFLAGS}
162 .endfor
164 # Definitions specific to C++ programs.
165 .for _P in ${PROGS_CXX}
166 SRCS.${_P}?= ${_P}.cc
167 _CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS}
168 .endfor
170 # Language-independent definitions.
171 .for _P in ${PROGS} ${PROGS_CXX} # {
173 BINDIR.${_P}?= ${BINDIR}
174 PROGNAME.${_P}?= ${_P}
176 .if ${MKDEBUG} != "no" && ${OBJECT_FMT} == "ELF" && !commands(${_P})
177 _PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug
178 .endif
180 ##### PROG specific flags.
182 _LDADD.${_P}= ${LDADD} ${LDADD.${_P}}
183 _LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}}
184 _LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}}
186 ##### Build and install rules
187 .if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
188 SRCS+= ${SRCS.${_P}} # For bsd.dep.mk
189 .endif
191 _YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
193 DPSRCS+= ${_YPSRCS.${_P}}
194 CLEANFILES+= ${_YPSRCS.${_P}}
196 .if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
197 OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
198 LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln}
199 .endif
201 .if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # {
202 .NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
204 ${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
206 ${_P}: ${LIBCRT0} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
207 .if !commands(${_P})
208 ${_MKTARGET_LINK}
209 ${_CCLINK.${_P}} \
210 ${DESTDIR:D-Wl,-nostdlib} \
211 ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
212 ${OBJS.${_P}} ${_LDADD.${_P}} \
213 ${DESTDIR:D-L${_GCC_LIBGCCDIR}} \
214 ${_PROGLDOPTS}
215 .if defined(PAXCTL_FLAGS.${_P})
216 ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
217 .endif
218 .if ${MKSTRIPIDENT} != "no"
219 ${OBJCOPY} -R .ident ${.TARGET}
220 .endif
221 .endif # !commands(${_P})
223 ${_P}.ro: ${OBJS.${_P}} ${DPADD}
224 ${_MKTARGET_LINK}
225 ${LD} -r -dc -o ${.TARGET} ${OBJS.${_P}}
227 .if defined(_PROGDEBUG.${_P})
228 ${_PROGDEBUG.${_P}}: ${_P}
229 ${_MKTARGET_CREATE}
230 ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}}
231 ${OBJCOPY} -R .gnu_debuglink --add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
232 || rm -f ${_PROGDEBUG.${_P}}
233 .endif
235 .endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # }
237 .if !defined(MAN.${_P})
238 MAN.${_P}= ${_P}.1
239 .endif # !defined(MAN.${_P})
240 .if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
241 MAN+= ${MAN.${_P}}
242 .endif
244 realall: ${_P} ${_PROGDEBUG.${_P}}
246 cleanprog: cleanprog-${_P}
247 cleanprog-${_P}:
248 rm -f ${_P} ${_PROGDEBUG.${_P}}
250 .if defined(OBJS.${_P}) && !empty(OBJS.${_P})
251 cleanobjs: cleanobjs-${_P}
252 cleanobjs-${_P}:
253 rm -f ${OBJS.${_P}} ${LOBJS.${_P}}
254 .endif
256 _PROG_INSTALL+= proginstall-${_P}
258 .if !target(proginstall-${_P}) # {
259 proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
260 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
261 .PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
262 ${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
264 .if ${MKUPDATE} == "no"
265 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
266 .if !defined(BUILD) && !make(all) && !make(${_P})
267 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
268 .endif
269 .if defined(_PROGDEBUG.${_P})
270 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
271 .if !defined(BUILD) && !make(all) && !make(${_P})
272 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
273 .endif
274 .endif # define(_PROGDEBUG.${_P})
275 .else # MKUPDATE != no
276 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
277 .if !defined(BUILD) && !make(all) && !make(${_P})
278 ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
279 .endif
280 .if defined(_PROGDEBUG.${_P})
281 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
282 .if !defined(BUILD) && !make(all) && !make(${_P})
283 ${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
284 .endif
285 .endif # defined(_PROGDEBUG.${_P})
286 .endif # MKUPDATE != no
288 .endif # !target(proginstall-${_P}) # }
290 lint: lint-${_P}
291 lint-${_P}: ${LOBJS.${_P}}
292 .if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
293 ${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
294 .endif
296 .endfor # _P in ${PROGS} ${PROGS_CXX} # }
298 .if defined(OBJS) && !empty(OBJS) && \
299 (empty(PROGS) && empty(PROGS_CXX))
300 cleanobjs: cleanobjs-plain
301 cleanobjs-plain:
302 rm -f ${OBJS} ${LOBJS}
303 .endif
305 .if !target(proginstall)
306 proginstall:: ${_PROG_INSTALL}
307 .endif
308 .PHONY: proginstall
312 realall: ${SCRIPTS}
313 .if defined(SCRIPTS) && !target(scriptsinstall) # {
314 SCRIPTSDIR?=${BINDIR}
315 SCRIPTSOWN?=${BINOWN}
316 SCRIPTSGRP?=${BINGRP}
317 SCRIPTSMODE?=${BINMODE}
319 scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
320 .PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
322 __scriptinstall: .USE
323 ${_MKTARGET_INSTALL}
324 ${INSTALL_FILE} \
325 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
326 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
327 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
328 ${.ALLSRC} ${.TARGET}
330 .for S in ${SCRIPTS:O:u}
331 .if ${MKUPDATE} == "no"
332 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
333 .if !defined(BUILD) && !make(all) && !make(${S})
334 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
335 .endif
336 .else
337 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
338 .if !defined(BUILD) && !make(all) && !make(${S})
339 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
340 .endif
341 .endif
342 .endfor
343 .endif # }
345 .if !target(scriptsinstall)
346 scriptsinstall::
347 .endif
348 .PHONY: scriptsinstall
350 ##### Pull in related .mk logic
351 LINKSOWN?= ${BINOWN}
352 LINKSGRP?= ${BINGRP}
353 LINKSMODE?= ${BINMODE}
354 .include <bsd.man.mk>
355 .include <bsd.files.mk>
356 .include <bsd.inc.mk>
357 .include <bsd.links.mk>
358 .include <bsd.sys.mk>
359 .include <bsd.dep.mk>
360 .include <minix.gcc.mk>
363 cleanextra: .PHONY
364 .if defined(CLEANFILES) && !empty(CLEANFILES)
365 rm -f ${CLEANFILES}
366 .endif
368 ${TARGETS}: # ensure existence
370 ${.CURDIR}/.gitignore: Makefile
371 echo $(CLEANFILES) $(PROGS) | tr ' ' '\n' >${.TARGET}
373 .if defined(MINIXDYNAMIC)
374 LDFLAGS += -dynamic
375 .else
376 LDFLAGS += -static
377 .endif
379 .endif # HOSTPROG