1# This does the same job as bsd.hostlib.mk except .c files are bult with c++
2# and it does not contain "afterdepend: all" which forces everything to be
3# built under the "depend" target
4
5.include <bsd.init.mk>
6
7.SUFFIXES:
8.SUFFIXES: .out .no .c .cc .cpp .cxx .C .y .l
9
10.c.no .cc.no .C.no .cpp.no .cxx.no:
11	${NXCXX} ${_${.IMPSRC}_FLAGS} ${NXCXXFLAGS:N-std=*:N-flto} -c ${.IMPSRC} -o ${.TARGET}
12	@${NXLD} -o ${.TARGET}.tmp -x -r ${.TARGET}
13	@mv ${.TARGET}.tmp ${.TARGET}
14
15all: objwarn
16
17.if defined(LIB) && !empty(LIB) && !empty(SRCS)
18OBJS+=  ${SRCS:N*.h:R:S/$/.no/g}
19.endif
20
21.if defined(LIB) && !empty(LIB)
22_LIBS=		lib${LIB}.na
23
24lib${LIB}.na: ${OBJS} ${STATICOBJS}
25	@${ECHO} building native static ${LIB} library
26	rm -f ${.TARGET}
27	${NXAR} ${ARFLAGS} ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
28	${NXRANLIB} ${.TARGET}
29.endif
30
31all: ${_LIBS}
32
33##
34#  HEAD: embedded equivalent bsd.dep.mk
35##
36
37CTAGS?=		gtags
38MKDEPCMD?=	CC=c++ mkdep
39DEPENDFILE?=	.depend
40GTAGSFLAGS?=	-o
41CTAGSFLAGS?=
42HTAGSFLAGS?=
43
44.if !target(tags) && defined(SRCS) && !defined(NOTAGS)
45tags: ${SRCS}
46. if ${CTAGS:T} == "ctags"
47	@${CTAGS} ${CTAGSFLAGS} -f /dev/stdout \
48	    ${.ALLSRC:N*.h} | sed "s;${.CURDIR}/;;" > ${.TARGET}
49. elif ${CTAGS:T} == "gtags"
50	@cd ${.CURDIR} && ${CTAGS} ${GTAGSFLAGS} ${.OBJDIR}
51.  if defined(HTML)
52	@cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR}
53.  endif
54. endif
55.endif
56
57.if defined(SRCS)
58
59CLEANFILES?=
60
61. for _LSRC in ${SRCS:M*.l:N*/*}
62.  for _LC in ${_LSRC:R}.c
63${_LC}: ${_LSRC}
64	${LEX} -t ${LFLAGS} ${.ALLSRC} > ${.TARGET}
65SRCS:=	${SRCS:S/${_LSRC}/${_LC}/}
66CLEANFILES+= ${_LC}
67.  endfor
68. endfor
69
70. for _YSRC in ${SRCS:M*.y:N*/*}
71.  for _YC in ${_YSRC:R}.c
72SRCS:=	${SRCS:S/${_YSRC}/${_YC}/}
73CLEANFILES+= ${_YC}
74.   if !empty(YFLAGS:M-d) && !empty(SRCS:My.tab.h)
75.ORDER: ${_YC} y.tab.h
76${_YC} y.tab.h: ${_YSRC}
77	${YACC} ${YFLAGS} ${.ALLSRC}
78	cp y.tab.c ${_YC}
79CLEANFILES+= y.tab.c y.tab.h
80.   elif !empty(YFLAGS:M-d)
81.     for _YH in ${_YC:S/.c/.h/}
82${_YH}: ${_YC}
83${_YC}: ${_YSRC}
84	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
85SRCS+= ${_YH}
86CLEANFILES+= ${_YH}
87.     endfor
88.   else
89${_YC}: ${_YSRC}
90	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
91.   endif
92.  endfor
93. endfor
94.endif
95
96.if !target(depend)
97. if defined(SRCS)
98depend: beforedepend _dependincs ${DEPENDFILE} afterdepend
99
100.NOPATH: ${DEPENDFILE}
101
102__FLAGS=
103__FLAGS_FILES=	${SRCS}
104.  for _FG in ${FLAGS_GROUPS}
105.   for _FFILE in ${${_FG}_FLAGS_FILES}
106__FLAGS_FILES:=	${__FLAGS_FILES:N${_FFILE}}
107.   endfor
108.  endfor
109
110_DEPENDFILES=	${FLAGS_GROUPS:S/^/.depend_/g}
111
112${DEPENDFILE}: ${_DEPENDFILES}
113
114_ALL_DEPENDS=${__FLAGS_FILES:N*.[sS]:N*.c:N*.cc:N*.C:N*.cpp:N*.cpp:N*.cxx:N*.m}
115
116.  for _FG in _ ${FLAGS_GROUPS}
117.depend${_FG:S/^/_/:N__}: ${${_FG}_FLAGS_FILES} ${_ALL_DEPENDS}
118	-rm -f ${.TARGET}
119	-> ${.TARGET}
120.   if ${${_FG}_FLAGS_FILES:M*.[sS]} != ""
121	${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
122	    ${${_FG}_FLAGS} \
123	    ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
124	    ${CFLAGS:M-std=*} \
125	    ${.ALLSRC:M*.[sS]}
126.   endif
127.   if ${${_FG}_FLAGS_FILES:M*.cc} != "" || \
128    ${${_FG}_FLAGS_FILES:M*.C} != "" || \
129    ${${_FG}_FLAGS_FILES:M*.c} != "" || \
130    ${${_FG}_FLAGS_FILES:M*.cpp} != "" || \
131    ${${_FG}_FLAGS_FILES:M*.cxx} != ""
132	${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
133	    ${${_FG}_FLAGS} \
134	    ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \
135	    ${.ALLSRC:M*.c} \
136	    ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx}
137.   endif
138.   if ${${_FG}_FLAGS_FILES:M*.m} != ""
139	${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
140	    ${${_FG}_FLAGS} \
141	    ${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \
142	    ${OBJCFLAGS:M-Wno-import*} \
143	    ${.ALLSRC:M*.m}
144.   endif
145.   if !empty(${_FG:M_}) && !empty(_DEPENDFILES)
146	cat ${_DEPENDFILES} >> ${.TARGET}
147.   endif
148.  endfor
149
150.  if target(_EXTRADEPEND)
151_EXTRADEPEND: .USE
152${DEPENDFILE}: _EXTRADEPEND
153.  endif
154
155. else
156depend: beforedepend _dependincs afterdepend
157. endif
158. if !target(beforedepend)
159beforedepend:
160. endif
161. if !target(afterdepend)
162afterdepend:
163. endif
164.endif
165
166.if !target(cleandepend)
167cleandepend:
168. if defined(SRCS)
169.  if ${CTAGS:T} == "ctags"
170	rm -f ${DEPENDFILE} ${_DEPENDFILES} tags
171.  elif ${CTAGS:T} == "gtags"
172	rm -f ${DEPENDFILE} ${_DEPENDFILES} GPATH GRTAGS GSYMS GTAGS
173.   if defined(HTML)
174	rm -rf HTML
175.   endif
176.  endif
177. endif
178.endif
179
180.if !target(checkdpadd) && (defined(DPADD) || defined(LDADD))
181checkdpadd:
182	@ldadd=`echo \`for lib in ${DPADD} ; do \
183		echo $$lib | sed 's;^/usr/lib/lib\(.*\)\.a;-l\1;' ; \
184	done \`` ; \
185	ldadd1=`echo ${LDADD}` ; \
186	if [ "$$ldadd" != "$$ldadd1" ] ; then \
187		echo ${.CURDIR} ; \
188		echo "DPADD -> $$ldadd" ; \
189		echo "LDADD -> $$ldadd1" ; \
190	fi
191.endif
192
193.if defined(INCS) && make(depend)
194_dependincs: buildincludes .WAIT installincludes
195.else
196_dependincs:
197.endif
198
199.ORDER: beforedepend _dependincs ${DEPENDFILE} afterdepend
200
201##
202#  TAIL: embedded equivalent bsd.dep.mk
203##
204
205.if !exists(${.OBJDIR}/${DEPENDFILE})
206. if defined(LIB) && !empty(LIB)
207${OBJS} ${STATICOBJS}: ${SRCS:M*.h}
208. endif
209.endif
210
211.if !target(clean)
212clean:
213. if defined(CLEANFILES) && !empty(CLEANFILES)
214	rm -f ${CLEANFILES}
215. endif
216. if defined(LIB) && !empty(LIB)
217	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
218. endif
219. if defined(_LIBS) && !empty(_LIBS)
220	rm -f ${_LIBS}
221. endif
222. if defined(CLEANDIRS) && !empty(CLEANDIRS)
223	rm -rf ${CLEANDIRS}
224. endif
225.endif
226
227.include <bsd.obj.mk>
228.include <bsd.sys.mk>
229