# Different types of sources are compiled with slightly different flags.
# Split up the sources, and filter out headers and non-applicable flags.
-${DEPENDFILE}: ${SRCS}
- rm -f ${DEPENDFILE}
-.if ${SRCS:M*.[sS]} != ""
- ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
+# Separate flag groups out of the sources and treat them differently.
+# The special "_" group is for all files not in any group.
+__FLAGS=
+__FLAGS_FILES= ${SRCS}
+.for _FG in ${FLAGS_GROUPS}
+.for _FFILE in ${${_FG}_FLAGS_FILES}
+__FLAGS_FILES:= ${__FLAGS_FILES:N${_FFILE}}
+.endfor
+.endfor
+
+_DEPENDFILES= .depend__ ${FLAGS_GROUPS:S/^/.depend_/g}
+.ORDER: ${_DEPENDFILES}
+
+${DEPENDFILE}: ${_DEPENDFILES}
+ cat ${_DEPENDFILES} > ${.TARGET}
+ -rm -f ${_DEPENDFILES}
+
+.for _FG in _ ${FLAGS_GROUPS}
+.depend_${_FG}: ${${_FG}_FLAGS_FILES}
+ -rm -f ${.TARGET}
+ -> ${.TARGET}
+.if ${${_FG}_FLAGS_FILES:M*.[sS]} != ""
+ ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
+ ${${_FG}_FLAGS} \
${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
${AINC} \
${.ALLSRC:M*.[sS]}
.endif
-.if ${SRCS:M*.c} != ""
- ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
+.if ${${_FG}_FLAGS_FILES:M*.c} != ""
+ ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
+ ${${_FG}_FLAGS} \
${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
${CFLAGS:M-std=*} \
${.ALLSRC:M*.c}
.endif
-.if ${SRCS:M*.cc} != "" || ${SRCS:M*.C} != "" || ${SRCS:M*.cpp} != "" || \
- ${SRCS:M*.cxx} != ""
- ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
+.if ${${_FG}_FLAGS_FILES:M*.cc} != "" || \
+ ${${_FG}_FLAGS_FILES:M*.C} != "" || \
+ ${${_FG}_FLAGS_FILES:M*.cpp} != "" || \
+ ${${_FG}_FLAGS_FILES:M*.cxx} != ""
+ ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
+ ${${_FG}_FLAGS} \
${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \
${CXXFLAGS:M-std=*} \
${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx}
.endif
-.if ${SRCS:M*.m} != ""
- ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
+.if ${${_FG}_FLAGS_FILES:M*.m} != ""
+ ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \
+ ${${_FG}_FLAGS} \
${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \
${OBJCFLAGS:M-Wno-import*} \
${.ALLSRC:M*.m}
.endif
+.endfor
+
.if target(_EXTRADEPEND)
_EXTRADEPEND: .USE
${DEPENDFILE}: _EXTRADEPEND
cleandepend:
.if defined(SRCS)
.if ${CTAGS:T} == "ctags"
- rm -f ${DEPENDFILE} tags
+ rm -f ${DEPENDFILE} ${_DEPENDFILES} tags
.elif ${CTAGS:T} == "gtags"
- rm -f ${DEPENDFILE} GPATH GRTAGS GSYMS GTAGS
+ rm -f ${DEPENDFILE} ${_DEPENDFILES} GPATH GRTAGS GSYMS GTAGS
.if defined(HTML)
rm -rf HTML
.endif
realinstall: installfiles
.ORDER: beforeinstall installfiles
+
+.for _FG in ${FLAGS_GROUPS}
+.for _FFILE in ${${_FG}_FLAGS_FILES}
+_${_FFILE}_FLAGS= ${${_FG}_FLAGS}
+.endfor
+.endfor
.SUFFIXES: .out .no .c .cc .cpp .cxx .C .y .l
.c.no:
- ${NXCC} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${NXCC} ${_${.IMPSRC}_FLAGS} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${NXLD} -o ${.TARGET}.tmp -x -r ${.TARGET}
@mv ${.TARGET}.tmp ${.TARGET}
.cc.no .C.no .cpp.no .cxx.no:
- ${NXCXX} ${NXCXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${NXCXX} ${_${.IMPSRC}_FLAGS} ${NXCXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${NXLD} -o ${.TARGET}.tmp -x -r ${.TARGET}
@mv ${.TARGET}.tmp ${.TARGET}
PO_FLAG=-pg
.c.o:
- ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.c.po:
- ${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.c.So:
- ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.cc.o .C.o .cpp.o .cxx.o:
- ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.cc.po .C.po .cpp.po .cxx.po:
- ${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.cc.So .C.So .cpp.So .cxx.So:
- ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.f.o:
- ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
+ ${FC} ${_${.IMPSRC:T}_FLAGS} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
.f.po:
- ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
+ ${FC} ${_${.IMPSRC:T}_FLAGS} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
.f.So:
- ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
+ ${FC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
.m.o:
- ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.m.po:
- ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
+ ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
.m.So:
- ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.s.o:
- ${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \
+ ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \
${.IMPSRC} -o ${.TARGET}
.s.po:
- ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \
+ ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \
${.IMPSRC} -o ${.TARGET}
.s.So:
- ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
+ ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
${AINC} -c ${.IMPSRC} -o ${.TARGET}
.S.o:
- ${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
.S.po:
- ${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
.S.So:
- ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \
-o ${.TARGET}
all: objwarn
chmod a+x ${.TARGET}
.c:
- ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
.c.o:
- ${CC} ${CFLAGS} -c ${.IMPSRC}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC}
.cc .cpp .cxx .C:
- ${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
+ ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
.cc.o .cpp.o .cxx.o .C.o:
- ${CXX} ${CXXFLAGS} -c ${.IMPSRC}
+ ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} -c ${.IMPSRC}
.m.o:
- ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
+ ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC}
.p.o:
- ${PC} ${PFLAGS} -c ${.IMPSRC}
+ ${PC} ${_${.IMPSRC:T}_FLAGS} ${PFLAGS} -c ${.IMPSRC}
.e .r .F .f:
- ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
- -o ${.TARGET}
+ ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} \
+ ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
.e.o .r.o .F.o .f.o:
- ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
+ ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
.S.o:
- ${CC} ${CFLAGS} -c ${.IMPSRC}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC}
.s.o:
- ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
+ ${AS} ${_${.IMPSRC:T}_FLAGS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
# XXX not -j safe
.y.o:
# .no == native object file, for helper code when cross building.
#
.c.no:
- ${NXCC} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.y.no:
${YACC} ${YFLAGS} ${.IMPSRC}
rm -f ${.TARGET}.c
.no.nx .c.nx:
- ${NXCC} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} ${NXLDLIBS} -o ${.TARGET}
+ ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} \
+ ${NXLDLIBS} -o ${.TARGET}
# XXX not -j safe
.y.c:
${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
.s.out .c.out .o.out:
- ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
+ ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
.f.out .F.out .r.out .e.out:
- ${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
- ${LDLIBS} -o ${.TARGET}
+ ${FC} ${_${.IMPSRC:T}_FLAGS} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} \
+ ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
rm -f ${.PREFIX}.o
# XXX not -j safe