bsd.prog.mk revision 50476
1169689Skan#	from: @(#)bsd.prog.mk	5.26 (Berkeley) 6/25/91
2169689Skan# $FreeBSD: head/share/mk/bsd.prog.mk 50476 1999-08-28 00:22:10Z peter $
3169689Skan
4169689Skan.if !target(__initialized__)
5169689Skan__initialized__:
6169689Skan.if exists(${.CURDIR}/../Makefile.inc)
7169689Skan.include "${.CURDIR}/../Makefile.inc"
8169689Skan.endif
9169689Skan.endif
10169689Skan
11169689Skan.SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .s .S
12169689Skan
13169689SkanCFLAGS+=${COPTS} ${DEBUG_FLAGS}
14169689Skan.if defined(DESTDIR)
15169689SkanCFLAGS+= -I${DESTDIR}/usr/include
16169689SkanCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
17169689Skan.endif
18169689Skan
19169689Skan.if !defined(DEBUG_FLAGS)
20169689SkanSTRIP?=	-s
21169689Skan.endif
22169689Skan
23169689Skan.if defined(NOSHARED) && ( ${NOSHARED} != "no" && ${NOSHARED} != "NO" )
24169689SkanLDFLAGS+= -static
25169689Skan.endif
26169689Skan
27169689Skan.if defined(PROG)
28169689Skan.if defined(SRCS)
29169689Skan
30169689Skan# If there are Objective C sources, link with Objective C libraries.
31169689Skan.if ${SRCS:M*.m} != ""
32169689SkanOBJCLIBS?= -lobjc
33169689SkanLDADD+=	${OBJCLIBS}
34169689Skan.endif
35169689Skan
36169689SkanOBJS+=  ${SRCS:N*.h:R:S/$/.o/g}
37169689Skan
38169689Skan${PROG}: ${OBJS}
39169689Skan	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDDESTDIR} ${LDADD}
40169689Skan
41169689Skan.else !defined(SRCS)
42169689Skan
43169689Skan.if !target(${PROG})
44169689SkanSRCS=	${PROG}.c
45169689Skan
46169689Skan# Always make an intermediate object file because:
47169689Skan# - it saves time rebuilding when only the library has changed
48169689Skan# - the name of the object gets put into the executable symbol table instead of
49169689Skan#   the name of a variable temporary object.
50169689Skan# - it's useful to keep objects around for crunching.
51169689SkanOBJS=	${PROG}.o
52169689Skan
53169689Skan${PROG}: ${OBJS}
54169689Skan	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDDESTDIR} ${LDADD}
55169689Skan.endif
56169689Skan
57169689Skan.endif
58169689Skan
59169689Skan.if	!defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
60169689Skan	!defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
61169689Skan	!defined(MAN7) && !defined(MAN8) && !defined(NOMAN) && \
62169689Skan	!defined(MAN1aout)
63169689SkanMAN1=	${PROG}.1
64169689Skan.endif
65169689Skan.endif
66169689Skan
67169689Skan.MAIN: all
68169689Skanall: objwarn ${PROG} all-man _SUBDIR
69169689Skan
70169689SkanCLEANFILES+= ${PROG} ${OBJS}
71169689Skan
72169689Skan.if defined(PROG) && !defined(NOEXTRADEPEND)
73169689Skan_EXTRADEPEND:
74169689Skan.if ${OBJFORMAT} == aout
75169689Skan	echo ${PROG}: `${CC} -Wl,-f ${CFLAGS} ${LDFLAGS} ${LDDESTDIR} \
76169689Skan	    ${LDADD:S/^/-Wl,/}` >> ${DEPENDFILE}
77169689Skan.else
78169689Skan	echo ${PROG}: ${LIBC} ${DPADD} >> ${DEPENDFILE}
79169689Skan.endif
80169689Skan.endif
81169689Skan
82169689Skan.if !target(install)
83169689Skan.if !target(beforeinstall)
84169689Skanbeforeinstall:
85169689Skan.endif
86169689Skan
87169689Skan_INSTALLFLAGS:=	${INSTALLFLAGS}
88169689Skan.for ie in ${INSTALLFLAGS_EDIT}
89169689Skan_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
90169689Skan.endfor
91169689Skan
92169689Skanrealinstall: beforeinstall
93169689Skan.if defined(PROG)
94169689Skan	${INSTALL} ${COPY} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
95169689Skan	    ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}
96169689Skan.endif
97169689Skan.if defined(HIDEGAME)
98169689Skan	(cd ${DESTDIR}/${GBINDIR}; rm -f ${PROG}; ln -s dm ${PROG}; \
99169689Skan	    chown games:bin ${PROG})
100169689Skan.endif
101169689Skan.if defined(LINKS) && !empty(LINKS)
102169689Skan	@set ${LINKS}; \
103	while test $$# -ge 2; do \
104		l=${DESTDIR}$$1; \
105		shift; \
106		t=${DESTDIR}$$1; \
107		shift; \
108		${ECHO} $$t -\> $$l; \
109		ln -f $$l $$t; \
110	done; true
111.endif
112.if defined(SYMLINKS) && !empty(SYMLINKS)
113	@set ${SYMLINKS}; \
114	while test $$# -ge 2; do \
115		l=$$1; \
116		shift; \
117		t=${DESTDIR}$$1; \
118		shift; \
119		${ECHO} $$t -\> $$l; \
120		ln -fs $$l $$t; \
121	done; true
122.endif
123
124install: afterinstall _SUBDIR
125.if !defined(NOMAN)
126afterinstall: realinstall maninstall
127.else
128afterinstall: realinstall
129.endif
130.endif
131
132DISTRIBUTION?=	bin
133.if !target(distribute)
134distribute: _SUBDIR
135.for dist in ${DISTRIBUTION}
136	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
137.endfor
138.endif
139
140.if !target(lint)
141lint: ${SRCS} _SUBDIR
142.if defined(PROG)
143	@${LINT} ${LINTFLAGS} ${CFLAGS} ${.ALLSRC} | more 2>&1
144.endif
145.endif
146
147.if defined(NOTAGS)
148tags:
149.endif
150
151.if !target(tags)
152tags: ${SRCS} _SUBDIR
153.if defined(PROG)
154	@cd ${.CURDIR} && gtags ${GTAGSFLAGS} ${.OBJDIR}
155.if defined(HTML)
156	@cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR}
157.endif
158.endif
159.endif
160
161.if !defined(NOMAN)
162.include <bsd.man.mk>
163.elif !target(maninstall)
164maninstall:
165all-man:
166.endif
167
168.if !target(regress)
169regress:
170.endif
171
172.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
173.include <bsd.libnames.mk>
174.endif
175
176.include <bsd.dep.mk>
177
178.if defined(PROG) && !exists(${DEPENDFILE})
179${OBJS}: ${SRCS:M*.h}
180.endif
181
182.include <bsd.obj.mk>
183