808a36ef65
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
161 lines
3.4 KiB
Makefile
161 lines
3.4 KiB
Makefile
# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
|
|
# $FreeBSD$
|
|
|
|
.if exists(${.CURDIR}/../Makefile.inc)
|
|
.include "${.CURDIR}/../Makefile.inc"
|
|
.endif
|
|
|
|
.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S
|
|
|
|
CFLAGS+=${COPTS} ${DEBUG_FLAGS}
|
|
.if defined(DESTDIR)
|
|
CFLAGS+= -I${DESTDIR}/usr/include
|
|
CXXINCLUDES+= -I${DESTDIR}/usr/include/${CXX}
|
|
.endif
|
|
|
|
.if !defined(DEBUG_FLAGS)
|
|
STRIP?= -s
|
|
.endif
|
|
|
|
.if defined(NOSHARED)
|
|
LDFLAGS+= -static
|
|
.endif
|
|
|
|
.if defined(DESTDIR)
|
|
LDDESTDIR+= -L${DESTDIR}/usr/lib
|
|
.endif
|
|
|
|
.include <bsd.libnames.mk>
|
|
|
|
.if defined(PROG)
|
|
.if defined(SRCS)
|
|
|
|
DPSRCS+= ${SRCS:M*.h}
|
|
.if !defined(NOOBJ)
|
|
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
|
|
.endif
|
|
|
|
.if defined(LDONLY)
|
|
|
|
${PROG}: ${LIBCRT0} ${LIBC} ${DPSRCS} ${OBJS} ${DPADD}
|
|
${LD} ${LDFLAGS} -o ${.TARGET} ${LIBCRT0} ${OBJS} ${LIBC} ${LDDESTDIR} \
|
|
${LDADD}
|
|
|
|
.else defined(LDONLY)
|
|
|
|
${PROG}: ${DPSRCS} ${OBJS} ${LIBC} ${DPADD}
|
|
${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDDESTDIR} ${LDADD}
|
|
|
|
.endif
|
|
|
|
.else !defined(SRCS)
|
|
|
|
SRCS= ${PROG}.c
|
|
|
|
.if 0
|
|
${PROG}: ${DPSRCS} ${SRCS} ${LIBC} ${DPADD}
|
|
${CC} ${LDFLAGS} ${CFLAGS} -o ${.TARGET} ${.CURDIR}/${SRCS} \
|
|
${LDDESTDIR} ${LDADD}
|
|
|
|
MKDEP= -p
|
|
.else
|
|
# Always make an intermediate object file because:
|
|
# - it saves time rebuilding when only the library has changed
|
|
# - the name of the object gets put into the executable symbol table instead of
|
|
# the name of a variable temporary object.
|
|
# - it's useful to keep objects around for crunching.
|
|
OBJS= ${PROG}.o
|
|
${PROG}: ${DPSRCS} ${OBJS} ${LIBC} ${DPADD}
|
|
${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDDESTDIR} ${LDADD}
|
|
.endif
|
|
|
|
.endif
|
|
|
|
.if !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
|
|
!defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
|
|
!defined(MAN7) && !defined(MAN8) && !defined(NOMAN)
|
|
MAN1= ${PROG}.1
|
|
.endif
|
|
.endif
|
|
|
|
# XXX I think MANDEPEND is only used for groff. It should be named more
|
|
# generally and perhaps not be in the maninstall dependencies now it is
|
|
# here (or does maninstall always work when nothing is made?),
|
|
|
|
.MAIN: all
|
|
all: objwarn ${PROG} all-man _SUBDIR
|
|
|
|
.if !target(clean)
|
|
clean: _SUBDIR
|
|
rm -f a.out Errs errs mklog ${PROG} ${OBJS} ${CLEANFILES}
|
|
.if defined(CLEANDIRS) && !empty(CLEANDIRS)
|
|
rm -rf ${CLEANDIRS}
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(install)
|
|
.if !target(beforeinstall)
|
|
beforeinstall:
|
|
.endif
|
|
|
|
realinstall: beforeinstall
|
|
.if defined(PROG)
|
|
${INSTALL} ${COPY} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
|
|
${INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}
|
|
.endif
|
|
.if defined(HIDEGAME)
|
|
(cd ${DESTDIR}/usr/games; rm -f ${PROG}; ln -s dm ${PROG}; \
|
|
chown games.bin ${PROG})
|
|
.endif
|
|
.if defined(LINKS) && !empty(LINKS)
|
|
@set ${LINKS}; \
|
|
while test $$# -ge 2; do \
|
|
l=${DESTDIR}$$1; \
|
|
shift; \
|
|
t=${DESTDIR}$$1; \
|
|
shift; \
|
|
${ECHO} $$t -\> $$l; \
|
|
rm -f $$t; \
|
|
ln ${LN_FLAGS} $$l $$t; \
|
|
done; true
|
|
.endif
|
|
|
|
install: afterinstall _SUBDIR
|
|
.if !defined(NOMAN)
|
|
afterinstall: realinstall maninstall
|
|
.else
|
|
afterinstall: realinstall
|
|
.endif
|
|
.endif
|
|
|
|
DISTRIBUTION?= bin
|
|
.if !target(distribute)
|
|
distribute: _SUBDIR
|
|
cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${DISTRIBUTION} SHARED=copies
|
|
.endif
|
|
|
|
.if !target(lint)
|
|
lint: ${SRCS} _SUBDIR
|
|
.if defined(PROG)
|
|
@${LINT} ${LINTFLAGS} ${CFLAGS} ${.ALLSRC} | more 2>&1
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(tags)
|
|
tags: ${SRCS} _SUBDIR
|
|
.if defined(PROG)
|
|
-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC} | \
|
|
sed "s;\${.CURDIR}/;;" > tags
|
|
.endif
|
|
.endif
|
|
|
|
.if !defined(NOMAN)
|
|
.include <bsd.man.mk>
|
|
.elif !target(maninstall)
|
|
maninstall:
|
|
all-man:
|
|
.endif
|
|
|
|
.include <bsd.dep.mk>
|
|
.include <bsd.obj.mk>
|