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
7 .
include <minix.gcov.mk
>
10 # Definitions and targets shared among all programs built by a single
14 ##### Minix rule to make the "install" target depend on
15 ##### "all" and "depend" targets
18 depend
: ${.CURDIR
}/.gitignore
21 realinstall
: proginstall scriptsinstall
26 cleanprog
: .PHONY cleanobjs cleanextra
27 rm -f a.out
[Ee
]rrs mklog core
*.core
30 .if empty
(CPPFLAGS
:M-nostdinc
)
31 CPPFLAGS
+= ${DESTDIR
:D-nostdinc
${CPPFLAG_ISYSTEM} ${DESTDIR}/usr
/include}
33 .if empty
(CXXFLAGS
:M-nostdinc
++)
34 CXXFLAGS
+= ${DESTDIR
:D-nostdinc
++ ${CPPFLAG_ISYSTEMXX} ${DESTDIR}/usr
/include/g
++}
37 OBJCFLAGS
+= ${OBJCOPTS}
38 MKDEP_SUFFIXES?
= .o .ln
40 ##### Installed system library definitions
43 # LIBC?=${DESTDIR}/usr/lib/libc.a
44 # LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
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 \
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
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 \
65 LIB
${_lib
:tu
}= ${DESTDIR}/usr
/lib
/lib
${_lib}.a
66 .MADE
: ${LIB
${_lib
:tu
}} # Note: ${DESTDIR} will be expanded
70 # These need + -> X transformations
72 LIBSTDCXX
= ${DESTDIR}/usr
/lib
/libstdc
++.a
77 LIBSUPCXX
= ${DESTDIR}/usr
/lib
/libsupc
++.a
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
87 LIB
${_lib
:tu
}= ${DESTDIR}${X11USRLIBDIR}/lib
${_lib}.a
88 .MADE
: ${LIB
${_lib
:tu
}} # Note: ${DESTDIR} will be expanded
92 .if defined
(RESCUEDIR
)
93 CPPFLAGS
+= -DRESCUEDIR
=\"${RESCUEDIR}\"
98 ${INSTALL_FILE} -o
${BINOWN} -g
${BINGRP} -m
${BINMODE} \
99 ${STRIPFLAG} ${.ALLSRC
} ${.TARGET
}
101 __progdebuginstall
: .USE
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.
118 _CCLINKFLAGS
+= -B
${_GCC_CRTDIR}/ -B
${DESTDIR}/usr
/lib
/
121 .if defined
(PROG_CXX
)
123 _CCLINK
= ${CXX} ${_CCLINKFLAGS}
127 _CCLINK?
= ${CC} ${_CCLINKFLAGS}
133 OBJS
= ${OBJS.
${PROG}}
135 . if defined
(PROGNAME
)
136 PROGNAME.
${PROG}= ${PROGNAME}
139 SRCS.
${PROG}= ${SRCS}
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
)
155 # Per-program definitions and targets.
158 # Definitions specific to C programs.
161 _CCLINK.
${_P}= ${CC} ${_CCLINKFLAGS}
164 # Definitions specific to C++ programs.
165 .for _P in
${PROGS_CXX}
166 SRCS.
${_P}?
= ${_P}.
cc
167 _CCLINK.
${_P}= ${CXX} ${_CCLINKFLAGS}
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
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
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
}
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}
210 ${DESTDIR
:D-Wl
,-nostdlib
} \
211 ${_LDFLAGS.
${_P}} ${_LDSTATIC.
${_P}} -o
${.TARGET
} \
212 ${OBJS.
${_P}} ${_LDADD.
${_P}} \
213 ${DESTDIR
:D-L
${_GCC_LIBGCCDIR}} \
215 .if defined
(PAXCTL_FLAGS.
${_P})
216 ${PAXCTL} ${PAXCTL_FLAGS.
${_P}} ${.TARGET
}
218 .if
${MKSTRIPIDENT} != "no"
219 ${OBJCOPY} -R .ident
${.TARGET
}
221 .
endif # !commands(${_P})
223 ${_P}.ro
: ${OBJS.
${_P}} ${DPADD}
225 ${LD} -r
-dc
-o
${.TARGET
} ${OBJS.
${_P}}
227 .if defined
(_PROGDEBUG.
${_P})
228 ${_PROGDEBUG.
${_P}}: ${_P}
230 ${OBJCOPY} --only-keep-debug
${_P} ${_PROGDEBUG.
${_P}}
231 ${OBJCOPY} -R .gnu_debuglink
--add-gnu-debuglink
=${_PROGDEBUG.
${_P}} ${_P} \
232 ||
rm -f
${_PROGDEBUG.
${_P}}
235 .
endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # }
237 .if
!defined
(MAN.
${_P})
239 .
endif # !defined(MAN.${_P})
240 .if
!empty
(_APPEND_MANS
:M
[Yy
][Ee
][Ss
])
244 realall
: ${_P} ${_PROGDEBUG.
${_P}}
246 cleanprog
: cleanprog-
${_P}
248 rm -f
${_P} ${_PROGDEBUG.
${_P}}
250 .if defined
(OBJS.
${_P}) && !empty
(OBJS.
${_P})
251 cleanobjs
: cleanobjs-
${_P}
253 rm -f
${OBJS.
${_P}} ${LOBJS.
${_P}}
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
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
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
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
285 .
endif # defined(_PROGDEBUG.${_P})
286 .
endif # MKUPDATE != no
288 .
endif # !target(proginstall-${_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}}
296 .endfor
# _P in ${PROGS} ${PROGS_CXX} # }
298 .if defined
(OBJS
) && !empty
(OBJS
) && \
299 (empty
(PROGS
) && empty
(PROGS_CXX
))
300 cleanobjs
: cleanobjs-plain
302 rm -f
${OBJS} ${LOBJS}
305 .if
!target
(proginstall
)
306 proginstall
:: ${_PROG_INSTALL}
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
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
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
345 .if
!target
(scriptsinstall
)
348 .PHONY
: scriptsinstall
350 ##### Pull in related .mk logic
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
>
364 .if defined
(CLEANFILES
) && !empty
(CLEANFILES
)
368 ${TARGETS}: # ensure existence
370 ${.CURDIR
}/.gitignore
: Makefile
371 echo
$(CLEANFILES
) $(PROGS
) | tr
' ' '\n' >${.TARGET
}
373 .if defined
(MINIXDYNAMIC
)