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