Home | History | Annotate | Download | only in mk
      1 # rules to build a program 
      2 # based on FreeBSD's bsd.prog.mk
      3 
      4 # Copyright 2008 Roy Marples <roy (a] marples.name>
      5 
      6 include ${MK}/cc.mk
      7 
      8 OBJS+=		${SRCS:.c=.o}
      9 
     10 # If building for /, ensure we use the libc in / if different from
     11 # the default one in /usr/lib
     12 LINK_RPATH?=		-Wl,-rpath
     13 _RPATH_SH=		if test "${PREFIX}" = "" -o "${PREIX}" = "/"; then \
     14 				echo "${LINK_RPATH}=${PREFIX}/${LIBNAME}"; \
     15 			else \
     16 				echo ""; \
     17 			fi
     18 _RPATH!=		${_RPATH_SH}
     19 LDFLAGS+=		${_RPATH}$(shell ${_RPATH_SH})
     20 
     21 # If building for /, ensure we use the linker in /libexec if different from
     22 # the default one in /usr/libexec
     23 _DYNLINK_SH=		if test "${PREFIX}" = "" -o "${PREFIX}" = "/" && test -e /libexec/ld.elf_so; then \
     24 				echo "-Wl,-dynamic-linker=/libexec/ld.elf_so"; \
     25 			else \
     26 				echo ""; \
     27 			fi
     28 _DYNLINK!=		${_DYNLINK_SH}
     29 LDFLAGS+=		${_DYNLINK}$(shell ${_DYNLINK_SH})
     30 
     31 all: ${PROG} ${SCRIPTS} _man
     32 
     33 .c.o:
     34 	${CC} ${CFLAGS} ${CPPFLAGS} -c $< -o $@
     35 
     36 ${PROG}: ${OBJS}
     37 	${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDADD}
     38 
     39 # We could save about 600 bytes by building it like this
     40 # instead of the more traditional method above
     41 small: ${SRCS}
     42 	echo "" > _${PROG}.c
     43 	for src in ${SRCS}; do echo "#include \"$$src\"" >> _${PROG}.c; done
     44 	${CC} ${CFLAGS} ${CPPFLAGS} -c _${PROG}.c -o _${PROG}.o
     45 	${CC} ${LDFLAGS} -o ${PROG} _${PROG}.o ${LDADD}
     46 
     47 _proginstall: ${PROG}
     48 	${INSTALL} -d ${DESTDIR}${BINDIR}
     49 	${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${BINDIR}
     50 	${INSTALL} -d ${DESTDIR}${DBDIR}
     51 
     52 include ${MK}/depend.mk
     53 include ${MK}/files.mk
     54 include ${MK}/scripts.mk
     55 include ${MK}/man.mk
     56 include ${MK}/dist.mk
     57 
     58 install: _proginstall _scriptsinstall _filesinstall _maninstall
     59 	for x in ${SUBDIRS}; do cd $$x; ${MAKE} $@; cd ..; done
     60 
     61 clean:
     62 	rm -f ${OBJS} ${PROG} _${PROG}.c _${PROG}.o ${PROG}.core ${CLEANFILES}
     63 
     64 LINTFLAGS?=	-hx
     65 LINTFLAGS+=	-X 159,247,352
     66 
     67 lint: ${SRCS:.c=.c}
     68 	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} $^ ${.ALLSRC}
     69