xref: /netbsd-src/share/mk/bsd.prog.mk (revision 89c5a767f8fc7a4633b2d409966e2becbb98ff92)
1#	$NetBSD: bsd.prog.mk,v 1.110 2000/03/07 20:55:05 veego 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 cleandir distclean: 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
35LIBCOMPAT?=	${DESTDIR}/usr/lib/libcompat.a
36LIBCRYPT?=	${DESTDIR}/usr/lib/libcrypt.a
37LIBCURSES?=	${DESTDIR}/usr/lib/libcurses.a
38LIBDBM?=	${DESTDIR}/usr/lib/libdbm.a
39LIBDES?=	${DESTDIR}/usr/lib/libdes.a
40LIBEDIT?=	${DESTDIR}/usr/lib/libedit.a
41LIBGCC?=	${DESTDIR}/usr/lib/libgcc.a
42LIBGNUMALLOC?=	${DESTDIR}/usr/lib/libgnumalloc.a
43LIBIPSEC?=	${DESTDIR}/usr/lib/libipsec.a
44LIBKDB?=	${DESTDIR}/usr/lib/libkdb.a
45LIBKRB?=	${DESTDIR}/usr/lib/libkrb.a
46LIBKVM?=	${DESTDIR}/usr/lib/libkvm.a
47LIBL?=		${DESTDIR}/usr/lib/libl.a
48LIBM?=		${DESTDIR}/usr/lib/libm.a
49LIBMENU?=	${DESTDIR}/usr/lib/libmenu.a
50LIBMP?=		${DESTDIR}/usr/lib/libmp.a
51LIBNTP?=	${DESTDIR}/usr/lib/libntp.a
52LIBOBJC?=	${DESTDIR}/usr/lib/libobjc.a
53LIBPC?=		${DESTDIR}/usr/lib/libpc.a
54LIBPCAP?=	${DESTDIR}/usr/lib/libpcap.a
55LIBPLOT?=	${DESTDIR}/usr/lib/libplot.a
56LIBPOSIX?=	${DESTDIR}/usr/lib/libposix.a
57LIBRESOLV?=	${DESTDIR}/usr/lib/libresolv.a
58LIBRPCSVC?=	${DESTDIR}/usr/lib/librpcsvc.a
59LIBSKEY?=	${DESTDIR}/usr/lib/libskey.a
60LIBTERMCAP?=	${DESTDIR}/usr/lib/libtermcap.a
61LIBTELNET?=	${DESTDIR}/usr/lib/libtelnet.a
62LIBUTIL?=	${DESTDIR}/usr/lib/libutil.a
63LIBWRAP?=	${DESTDIR}/usr/lib/libwrap.a
64LIBY?=		${DESTDIR}/usr/lib/liby.a
65LIBZ?=		${DESTDIR}/usr/lib/libz.a
66
67.if defined(SHAREDSTRINGS)
68CLEANFILES+=strings
69.c.o:
70	${CC} -E ${CFLAGS} ${.IMPSRC} | xstr -c -
71	@${CC} ${CFLAGS} -c x.c -o ${.TARGET}
72	@rm -f x.c
73
74.cc.o:
75	${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
76	@mv -f x.c x.cc
77	@${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET}
78	@rm -f x.cc
79
80.C.o:
81	${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
82	@mv -f x.c x.C
83	@${CXX} ${CXXFLAGS} -c x.C -o ${.TARGET}
84	@rm -f x.C
85.endif
86
87
88.if defined(PROG)
89SRCS?=		${PROG}.c
90
91DPSRCS+=	${SRCS:M*.l:.l=.c} ${SRCS:M*.y:.y=.c}
92CLEANFILES+=	${DPSRCS}
93.if defined(YHEADER)
94CLEANFILES+=	${SRCS:M*.y:.y=.h}
95.endif
96
97.if !empty(SRCS:N*.h:N*.sh:N*.fth)
98OBJS+=		${SRCS:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
99LOBJS+=		${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
100.endif
101
102.if defined(OBJS) && !empty(OBJS)
103.NOPATH: ${OBJS}
104.if defined(DESTDIR)
105
106${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
107	${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib -L${DESTDIR}/usr/lib ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD} -lgcc -lc -lgcc ${LIBCRTEND}
108
109.else
110
111${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
112	${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD}
113
114.endif	# defined(DESTDIR)
115.endif	# defined(OBJS) && !empty(OBJS)
116
117.if !defined(MAN)
118MAN=	${PROG}.1
119.endif	# !defined(MAN)
120.endif	# defined(PROG)
121
122realall: ${PROG} ${SCRIPTS}
123
124cleanprog:
125	rm -f a.out [Ee]rrs mklog core *.core \
126	    ${PROG} ${OBJS} ${LOBJS} ${CLEANFILES}
127
128.if defined(SRCS)
129afterdepend: .depend
130	@(TMP=/tmp/_depend$$$$; \
131	    sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.ln:/' \
132	      < .depend > $$TMP; \
133	    mv $$TMP .depend)
134.endif
135
136.if defined(PROG) && !target(proginstall)
137PROGNAME?= ${PROG}
138proginstall:: ${DESTDIR}${BINDIR}/${PROGNAME}
139.if !defined(UPDATE)
140.PHONY: ${DESTDIR}${BINDIR}/${PROGNAME}
141.endif
142.if !defined(BUILD) && !make(all) && !make(${PROG})
143${DESTDIR}${BINDIR}/${PROGNAME}: .MADE
144.endif
145
146.PRECIOUS: ${DESTDIR}${BINDIR}/${PROGNAME}
147${DESTDIR}${BINDIR}/${PROGNAME}: ${PROG}
148	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${STRIPFLAG} ${INSTPRIV} \
149	    -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
150.endif
151
152.if !target(proginstall)
153proginstall::
154.endif
155
156.if defined(SCRIPTS) && !target(scriptsinstall)
157SCRIPTSDIR?=${BINDIR}
158SCRIPTSOWN?=${BINOWN}
159SCRIPTSGRP?=${BINGRP}
160SCRIPTSMODE?=${BINMODE}
161.for S in ${SCRIPTS}
162SCRIPTSDIR_${S}?=${SCRIPTSDIR}
163SCRIPTSOWN_${S}?=${SCRIPTSOWN}
164SCRIPTSGRP_${S}?=${SCRIPTSGRP}
165SCRIPTSMODE_${S}?=${SCRIPTSMODE}
166.if defined(SCRIPTSNAME)
167SCRIPTSNAME_${S} ?= ${SCRIPTSNAME}
168.else
169SCRIPTSNAME_${S} ?= ${S:T:R}
170.endif
171SCRIPTSDIR_${S} ?= ${SCRIPTSDIR}
172scriptsinstall:: ${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}
173.if !defined(UPDATE)
174.PHONY: ${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}
175.endif
176.if !defined(BUILD) && !make(all) && !make(${S})
177${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}: .MADE
178.endif
179
180.PRECIOUS: ${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}
181${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}: ${S}
182	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} \
183	    -o ${SCRIPTSOWN_${S}} -g ${SCRIPTSGRP_${S}} -m ${SCRIPTSMODE_${S}} \
184	    ${.ALLSRC} ${.TARGET}
185.endfor
186.endif
187
188.if !target(scriptsinstall)
189scriptsinstall::
190.endif
191
192lint: ${LOBJS}
193.if defined(LOBJS) && !empty(LOBJS)
194	${LINT} ${LINTFLAGS} ${LDFLAGS:M-L*} ${LOBJS} ${LDADD}
195.endif
196
197.include <bsd.man.mk>
198.include <bsd.nls.mk>
199.include <bsd.files.mk>
200.include <bsd.inc.mk>
201.include <bsd.links.mk>
202.include <bsd.dep.mk>
203.include <bsd.sys.mk>
204
205# Make sure all of the standard targets are defined, even if they do nothing.
206regress:
207