xref: /netbsd-src/share/mk/bsd.prog.mk (revision 8a8f936f250a330d54f8a24ed0e92aadf9743a7b)
1#	$NetBSD: bsd.prog.mk,v 1.136 2001/09/25 02:19:26 tv Exp $
2#	@(#)bsd.prog.mk	8.2 (Berkeley) 4/2/94
3
4.if !target(__initialized__)
5__initialized__:
6.if exists(${.CURDIR}/../Makefile.inc)
7.include "${.CURDIR}/../Makefile.inc"
8.endif
9.include <bsd.own.mk>
10.include <bsd.obj.mk>
11.include <bsd.depall.mk>
12.MAIN:		all
13.endif
14
15.PHONY:		cleanprog proginstall scriptsinstall
16realinstall:	proginstall scriptsinstall
17clean:		cleanprog
18
19CFLAGS+=	${COPTS}
20
21# ELF platforms depend on crtbegin.o and crtend.o
22.if ${OBJECT_FMT} == "ELF"
23LIBCRTBEGIN?=	${DESTDIR}/usr/lib/crtbegin.o
24LIBCRTEND?=	${DESTDIR}/usr/lib/crtend.o
25.else
26LIBCRTBEGIN?=
27LIBCRTEND?=
28.endif
29
30LIBCRT0?=	${DESTDIR}/usr/lib/crt0.o
31
32LIBBZ2?=	${DESTDIR}/usr/lib/libbz2.a
33LIBC?=		${DESTDIR}/usr/lib/libc.a
34LIBC_PIC?=	${DESTDIR}/usr/lib/libc_pic.a
35LIBCDK?=	${DESTDIR}/usr/lib/libcdk.a
36LIBCOM_ERR?=	${DESTDIR}/usr/lib/libcom_err.a
37LIBCOMPAT?=	${DESTDIR}/usr/lib/libcompat.a
38LIBCRYPT?=	${DESTDIR}/usr/lib/libcrypt.a
39LIBCRYPTO?=	${DESTDIR}/usr/lib/libcrypto.a
40LIBCRYPTO_RC5?=	${DESTDIR}/usr/lib/libcrypto_rc5.a
41LIBCRYPTO_IDEA?=${DESTDIR}/usr/lib/libcrypto_idea.a
42LIBCURSES?=	${DESTDIR}/usr/lib/libcurses.a
43LIBDBM?=	${DESTDIR}/usr/lib/libdbm.a
44LIBDES?=	${DESTDIR}/usr/lib/libdes.a
45LIBEDIT?=	${DESTDIR}/usr/lib/libedit.a
46LIBFORM?=	${DESTDIR}/usr/lib/libform.a
47LIBGCC?=	${DESTDIR}/usr/lib/libgcc.a
48LIBGNUMALLOC?=	${DESTDIR}/usr/lib/libgnumalloc.a
49LIBGSSAPI?=	${DESTDIR}/usr/lib/libgssapi.a
50LIBHDB?=	${DESTDIR}/usr/lib/libhdb.a
51LIBINTL?=	${DESTDIR}/usr/lib/libintl.a
52LIBIPSEC?=	${DESTDIR}/usr/lib/libipsec.a
53LIBKADM?=	${DESTDIR}/usr/lib/libkadm.a
54LIBKADM5CLNT?=	${DESTDIR}/usr/lib/libkadm5clnt.a
55LIBKADM5SRV?=	${DESTDIR}/usr/lib/libkadm5srv.a
56LIBKAFS?=	${DESTDIR}/usr/lib/libkafs.a
57LIBKDB?=	${DESTDIR}/usr/lib/libkdb.a
58LIBKRB?=	${DESTDIR}/usr/lib/libkrb.a
59LIBKRB5?=	${DESTDIR}/usr/lib/libkrb5.a
60LIBKSTREAM?=	${DESTDIR}/usr/lib/libkstream.a
61LIBKVM?=	${DESTDIR}/usr/lib/libkvm.a
62LIBL?=		${DESTDIR}/usr/lib/libl.a
63LIBM?=		${DESTDIR}/usr/lib/libm.a
64LIBMENU?=	${DESTDIR}/usr/lib/libmenu.a
65LIBOBJC?=	${DESTDIR}/usr/lib/libobjc.a
66LIBOSSAUDIO?=	${DESTDIR}/usr/lib/libossaudio.a
67LIBPCAP?=	${DESTDIR}/usr/lib/libpcap.a
68LIBPCI?=	${DESTDIR}/usr/lib/libpci.a
69LIBPOSIX?=	${DESTDIR}/usr/lib/libposix.a
70LIBRESOLV?=	${DESTDIR}/usr/lib/libresolv.a
71LIBRMT?=	${DESTDIR}/usr/lib/librmt.a
72LIBROKEN?=	${DESTDIR}/usr/lib/libroken.a
73LIBRPCSVC?=	${DESTDIR}/usr/lib/librpcsvc.a
74LIBSKEY?=	${DESTDIR}/usr/lib/libskey.a
75LIBSS?=		${DESTDIR}/usr/lib/libss.a
76LIBSSL?=	${DESTDIR}/usr/lib/libssl.a
77LIBSL?=		${DESTDIR}/usr/lib/libsl.a
78LIBTERMCAP?=	${DESTDIR}/usr/lib/libtermcap.a
79LIBTELNET?=	${DESTDIR}/usr/lib/libtelnet.a
80LIBUSB?=	${DESTDIR}/usr/lib/libusb.a
81LIBUTIL?=	${DESTDIR}/usr/lib/libutil.a
82LIBWRAP?=	${DESTDIR}/usr/lib/libwrap.a
83LIBY?=		${DESTDIR}/usr/lib/liby.a
84LIBZ?=		${DESTDIR}/usr/lib/libz.a
85
86.if defined(SHAREDSTRINGS)
87CLEANFILES+=strings
88.c.o:
89	${CC} -E ${CFLAGS} ${.IMPSRC} | xstr -c -
90	@${CC} ${CFLAGS} -c x.c -o ${.TARGET}
91	@rm -f x.c
92
93.cc.o:
94	${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
95	@mv -f x.c x.cc
96	@${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET}
97	@rm -f x.cc
98
99.C.o:
100	${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
101	@mv -f x.c x.C
102	@${CXX} ${CXXFLAGS} -c x.C -o ${.TARGET}
103	@rm -f x.C
104.endif
105
106
107.if defined(PROG)
108SRCS?=		${PROG}.c
109
110DPSRCS+=	${SRCS:M*.l:.l=.c} ${SRCS:M*.y:.y=.c}
111CLEANFILES+=	${DPSRCS}
112.if defined(YHEADER)
113CLEANFILES+=	${SRCS:M*.y:.y=.h}
114.endif
115
116.if !empty(SRCS:N*.h:N*.sh:N*.fth)
117OBJS+=		${SRCS:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
118LOBJS+=		${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
119.endif
120
121.if defined(OBJS) && !empty(OBJS)
122.NOPATH: ${OBJS} ${PROG}
123.if defined(DESTDIR)
124
125${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
126.if !commands(${PROG})
127	${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib -Wl,-rpath-link,${DESTDIR}/usr/lib ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD} -L${DESTDIR}/usr/lib -lgcc -lc -lgcc ${LIBCRTEND}
128.endif
129
130.else
131
132${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
133.if !commands(${PROG})
134	${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD}
135.endif
136
137.endif	# defined(DESTDIR)
138.endif	# defined(OBJS) && !empty(OBJS)
139
140.if !defined(MAN)
141MAN=	${PROG}.1
142.endif	# !defined(MAN)
143.endif	# defined(PROG)
144
145realall: ${PROG} ${SCRIPTS}
146
147cleanprog: cleanobjs cleanextra
148	rm -f a.out [Ee]rrs mklog core *.core ${PROG}
149
150cleanobjs:
151.if defined(OBJS) && !empty(OBJS)
152	rm -f ${OBJS} ${LOBJS}
153.endif
154
155cleanextra:
156.if defined(CLEANFILES) && !empty(CLEANFILES)
157	rm -f ${CLEANFILES}
158.endif
159
160.if defined(SRCS) && !target(afterdepend)
161afterdepend: .depend
162	@(TMP=/tmp/_depend$$$$; \
163	    sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.ln:/' \
164	      < .depend > $$TMP; \
165	    mv $$TMP .depend)
166.endif
167
168.if defined(PROG) && !target(proginstall)
169PROGNAME?=${PROG}
170
171proginstall:: ${DESTDIR}${BINDIR}/${PROGNAME}
172.PRECIOUS: ${DESTDIR}${BINDIR}/${PROGNAME}
173.if !defined(UPDATE)
174.PHONY: ${DESTDIR}${BINDIR}/${PROGNAME}
175.endif
176
177__proginstall: .USE
178	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${STRIPFLAG} ${INSTPRIV} \
179	    -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
180
181.if !defined(BUILD) && !make(all) && !make(${PROG})
182${DESTDIR}${BINDIR}/${PROGNAME}: .MADE
183.endif
184${DESTDIR}${BINDIR}/${PROGNAME}: ${PROG} __proginstall
185.endif
186
187.if !target(proginstall)
188proginstall::
189.endif
190
191.if defined(SCRIPTS) && !target(scriptsinstall)
192SCRIPTSDIR?=${BINDIR}
193SCRIPTSOWN?=${BINOWN}
194SCRIPTSGRP?=${BINGRP}
195SCRIPTSMODE?=${BINMODE}
196
197scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
198.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
199.if !defined(UPDATE)
200.PHONY: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
201.endif
202
203__scriptinstall: .USE
204	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} \
205	    -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
206	    -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
207	    -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
208	    ${.ALLSRC} ${.TARGET}
209
210.for S in ${SCRIPTS:O:u}
211.if !defined(BUILD) && !make(all) && !make(${S})
212${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
213.endif
214${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
215.endfor
216.endif
217
218.if !target(scriptsinstall)
219scriptsinstall::
220.endif
221
222lint: ${LOBJS}
223.if defined(LOBJS) && !empty(LOBJS)
224	${LINT} ${LINTFLAGS} ${LDFLAGS:M-L*} ${LOBJS} ${LDADD}
225.endif
226
227.include <bsd.man.mk>
228.include <bsd.nls.mk>
229.include <bsd.files.mk>
230.include <bsd.inc.mk>
231.include <bsd.links.mk>
232.include <bsd.dep.mk>
233.include <bsd.sys.mk>
234
235# Make sure all of the standard targets are defined, even if they do nothing.
236regress:
237