xref: /dragonfly/share/mk/bsd.prog.mk (revision e8364298)
1#	from: @(#)bsd.prog.mk	5.26 (Berkeley) 6/25/91
2# $FreeBSD: src/share/mk/bsd.prog.mk,v 1.86.2.17 2002/12/23 16:33:37 ru Exp $
3# $DragonFly: src/share/mk/bsd.prog.mk,v 1.4 2004/03/22 20:58:15 dillon Exp $
4
5.include <bsd.init.mk>
6
7.SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .s .S
8
9CFLAGS+=${COPTS} ${DEBUG_FLAGS}
10
11.if !defined(DEBUG_FLAGS)
12STRIP?=	-s
13.endif
14
15.if defined(NOSHARED) && ( ${NOSHARED} != "no" && ${NOSHARED} != "NO" )
16LDFLAGS+= -static
17.endif
18
19.if defined(PROG_CXX)
20PROG=	${PROG_CXX}
21.endif
22
23.if defined(PROG)
24.if defined(SRCS)
25
26# If there are Objective C sources, link with Objective C libraries.
27.if ${SRCS:M*.m} != ""
28OBJCLIBS?= -lobjc
29LDADD+=	${OBJCLIBS}
30.endif
31
32OBJS+=  ${SRCS:N*.h:N*.patch:R:S/$/.o/g}
33_PATCHES= ${SRCS:M*.patch}
34.for _PATCH in ${SRCS:T:N*.h.patch:M*.patch}
35.for _OBJ in ${_PATCH:R:R:S/$/.o/}
36OBJS:=	${OBJS:N${_OBJ}} ${_OBJ}
37.endfor
38.endfor
39.undef _PATCHES
40
41${PROG}: ${OBJS}
42.if defined(PROG_CXX)
43	${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
44.else
45	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
46.endif
47
48.else !defined(SRCS)
49
50.if !target(${PROG})
51.if defined(PROG_CXX)
52SRCS=	${PROG}.cc
53.else
54SRCS=	${PROG}.c
55.endif
56
57# Always make an intermediate object file because:
58# - it saves time rebuilding when only the library has changed
59# - the name of the object gets put into the executable symbol table instead of
60#   the name of a variable temporary object.
61# - it's useful to keep objects around for crunching.
62OBJS=	${PROG}.o
63
64${PROG}: ${OBJS}
65.if defined(PROG_CXX)
66	${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
67.else
68	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
69.endif
70.endif
71
72.endif
73
74.if	!defined(NOMAN) && !defined(MAN) && \
75	!defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
76	!defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
77	!defined(MAN7) && !defined(MAN8) && !defined(MAN9) && \
78	!defined(MAN1aout)
79MAN=	${PROG}.1
80MAN1=	${MAN}
81.endif
82.endif
83
84all: objwarn ${PROG} ${SCRIPTS}
85.if !defined(NOMAN)
86all: _manpages
87.endif
88
89CLEANFILES+= ${PROG} ${OBJS}
90
91.if defined(PROG)
92_EXTRADEPEND:
93.if ${OBJFORMAT} == aout
94	echo ${PROG}: `${CC} -Wl,-f ${CFLAGS} ${LDFLAGS} \
95	    ${LDADD:S/^/-Wl,/}` >> ${DEPENDFILE}
96.else
97	echo ${PROG}: ${LIBC} ${DPADD} >> ${DEPENDFILE}
98.if defined(PROG_CXX)
99	echo ${PROG}: ${LIBSTDCPLUSPLUS} >> ${DEPENDFILE}
100.endif
101.endif
102.endif
103
104.if !target(install)
105
106_INSTALLFLAGS:=	${INSTALLFLAGS}
107.for ie in ${INSTALLFLAGS_EDIT}
108_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
109.endfor
110
111.if !target(realinstall)
112realinstall: _proginstall
113.ORDER: beforeinstall _proginstall
114_proginstall:
115.if defined(PROG)
116.if defined(PROGNAME)
117	${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
118	    ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME}
119.else
120	${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
121	    ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}
122.endif
123.endif
124.if defined(HIDEGAME)
125	(cd ${DESTDIR}${ORIGBINDIR}; ln -fs dm ${PROG}; \
126	    chown -h ${BINOWN}:${ORIGBINGRP} ${PROG})
127.endif
128.endif !target(realinstall)
129
130.if defined(SCRIPTS) && !empty(SCRIPTS)
131realinstall: _scriptsinstall
132.ORDER: beforeinstall _scriptsinstall
133
134SCRIPTSDIR?=	${BINDIR}
135SCRIPTSOWN?=	${BINOWN}
136SCRIPTSGRP?=	${BINGRP}
137SCRIPTSMODE?=	${BINMODE}
138
139.for script in ${SCRIPTS}
140.if defined(SCRIPTSNAME)
141SCRIPTSNAME_${script:T}?=	${SCRIPTSNAME}
142.else
143SCRIPTSNAME_${script:T}?=	${script:T:R}
144.endif
145SCRIPTSDIR_${script:T}?=	${SCRIPTSDIR}
146SCRIPTSOWN_${script:T}?=	${SCRIPTSOWN}
147SCRIPTSGRP_${script:T}?=	${SCRIPTSGRP}
148SCRIPTSMODE_${script:T}?=	${SCRIPTSMODE}
149_scriptsinstall: _SCRIPTSINS_${script:T}
150_SCRIPTSINS_${script:T}: ${script}
151	${INSTALL} -o ${SCRIPTSOWN_${.ALLSRC:T}} \
152	    -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \
153	    ${.ALLSRC} \
154	    ${DESTDIR}${SCRIPTSDIR_${.ALLSRC:T}}/${SCRIPTSNAME_${.ALLSRC:T}}
155.endfor
156.endif
157
158.include <bsd.files.mk>
159.include <bsd.incs.mk>
160.include <bsd.links.mk>
161
162.if !defined(NOMAN)
163realinstall: _maninstall
164.ORDER: beforeinstall _maninstall
165.endif
166
167.endif
168
169.if !target(lint)
170lint: ${SRCS}
171.if defined(PROG)
172	@${LINT} ${LINTFLAGS} ${.ALLSRC} | more 2>&1
173.endif
174.endif
175
176.if !defined(NOMAN)
177.include <bsd.man.mk>
178.endif
179
180.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
181.include <bsd.libnames.mk>
182.endif
183
184.include <bsd.dep.mk>
185
186.if defined(PROG) && !exists(${.OBJDIR}/${DEPENDFILE})
187${OBJS}: ${SRCS:M*.h}
188.endif
189
190.include <bsd.obj.mk>
191
192.include <bsd.sys.mk>
193
194