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