Blob


1 LIB= opensmtpd
3 LOCALBASE?= /usr
5 SRCS= opensmtpd.c iobuf.c ioev.c
6 HDRS= opensmtpd.h
7 MAN= osmtpd_run.3
8 LIBDIR?= ${LOCALBASE}/lib/
9 MANDIR?= ${LOCALBASE}/share/man/man3
10 LDLIBS+= -levent
12 mkfile_path := ${abspath ${lastword ${MAKEFILE_LIST}}}
13 CURDIR := ${dir ${mkfile_path}}
15 CFLAGS+= -I${CURDIR} -I${CURDIR}/openbsd-compat/
16 CFLAGS+= -Wall
17 CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
18 CFLAGS+= -Wmissing-declarations
19 CFLAGS+= -Wshadow -Wpointer-arith -Wcast-qual
20 CFLAGS+= -Wsign-compare
22 CLEANFILES= ${VERSION_SCRIPT}
24 VERSION_SCRIPT= Symbols.map
25 SYMBOL_LIST= ${CURDIR}/Symbols.list
27 includes:
28 @cd ${CURDIR}; for i in ${HDRS}; do \
29 j="cmp -s $$i ${DESTDIR}${LOCALBASE}/include/$$i || \
30 ${INSTALL} -D -o ${BINOWN} -g ${BINGRP} -m 444 $$i\
31 ${DESTDIR}${LOCALBASE}/include/$$i"; \
32 echo $$j; \
33 eval "$$j"; \
34 done;
36 ${VERSION_SCRIPT}: ${SYMBOL_LIST}
37 { printf '{\n\tglobal:\n'; \
38 sed '/^[._a-zA-Z]/s/$$/;/; s/^/ /' ${SYMBOL_LIST}; \
39 printf '\n\tlocal:\n\t\t*;\n};\n'; } >$@.tmp && mv $@.tmp $@
41 # Defines for OpenBSD-specific interfaces
42 # Add a OS-specific defines here.
43 NEED_EXPLICIT_BZERO?= 0
44 NEED_RECALLOCARRAY?= 1
45 NEED_REALLOCARRAY?= 0
46 NEED_STRLCAT?= 1
47 NEED_STRLCPY?= 1
48 NEED_STRTONUM?= 1
50 MANFORMAT?= mangz
52 INSTALL?= install
53 LINK?= ln
55 BINOWN?= root
56 BINGRP?= root
57 LIBPERM?= 755
58 MANOWN?= root
59 MANGRP?= root
60 MANPERM?= 644
62 include ${CURDIR}/shlib_version
63 BASE_LIB=lib${LIB}.so
64 TARGET_LIB=lib${LIB}.so.${major}.${minor}.0
65 SONAME_LIB=lib${LIB}.so.${major}
67 CFLAGS+= -fPIC
68 LDFLAGS+= -shared -Wl,-soname=${SONAME_LIB}
70 ifeq (${MANFORMAT}, mangz)
71 TARGET_MAN= ${MAN}.gz
72 CLEANFILES+= ${TARGET_MAN}
73 ${TARGET_MAN}: ${MAN}
74 mandoc -Tman ${MAN} | gzip > $@
75 else
76 TARGET_MAN= ${MAN}
77 endif
79 ${SRCS:.c=.d}:%.d:%.c
80 ${CC} ${CFLAGS} -MM $< >$@
82 ifeq (${NEED_EXPLICIT_BZERO}, 1)
83 SRCS+= ${CURDIR}/openbsd-compat/explicit_bzero.c
84 CFLAGS+= -DNEED_EXPLICIT_BZERO=1
86 explicit_bzero.o: ${CURDIR}/openbsd-compat/explicit_bzero.c
87 ${CC} ${CFLAGS} -c -o explicit_bzero.o ${CURDIR}/openbsd-compat/explicit_bzero.c
88 endif
89 ifeq (${NEED_RECALLOCARRAY}, 1)
90 SRCS+= ${CURDIR}/openbsd-compat/recallocarray.c
91 CFLAGS+= -DNEED_RECALLOCARRAY=1
93 recallocarray.o: ${CURDIR}/openbsd-compat/recallocarray.c
94 ${CC} ${CFLAGS} -c -o recallocarray.o ${CURDIR}/openbsd-compat/recallocarray.c
95 endif
96 ifeq (${NEED_REALLOCARRAY}, 1)
97 SRCS+= ${CURDIR}/openbsd-compat/reallocarray.c
98 CFLAGS+= -DNEED_REALLOCARRAY=1
100 reallocarray.o: ${CURDIR}/openbsd-compat/reallocarray.c
101 ${CC} ${CFLAGS} -c -o reallocarray.o ${CURDIR}/openbsd-compat/reallocarray.c
102 endif
103 ifeq (${NEED_STRLCAT}, 1)
104 SRCS+= ${CURDIR}/openbsd-compat/strlcat.c
105 CFLAGS+= -DNEED_STRLCAT=1
107 strlcat.o: ${CURDIR}/openbsd-compat/strlcat.c
108 ${CC} ${CFLAGS} -c -o strlcat.o ${CURDIR}/openbsd-compat/strlcat.c
109 endif
110 ifeq (${NEED_STRLCPY}, 1)
111 SRCS+= ${CURDIR}/openbsd-compat/strlcpy.c
112 CFLAGS+= -DNEED_STRLCPY=1
114 strlcpy.o: ${CURDIR}/openbsd-compat/strlcpy.c
115 ${CC} ${CFLAGS} -c -o strlcpy.o ${CURDIR}/openbsd-compat/strlcpy.c
116 endif
117 ifeq (${NEED_STRTONUM}, 1)
118 SRCS+= ${CURDIR}/openbsd-compat/strtonum.c
119 CFLAGS+= -DNEED_STRTONUM=1
121 strtonum.o: ${CURDIR}/openbsd-compat/strtonum.c
122 ${CC} ${CFLAGS} -c -o strtonum.o ${CURDIR}/openbsd-compat/strtonum.c
123 endif
125 OBJS= ${notdir ${SRCS:.c=.o}}
127 ifdef VERSION_SCRIPT
128 ${TARGET_LIB}: ${VERSION_SCRIPT}
129 LDFLAGS+= -Wl,--version-script=${VERSION_SCRIPT}
130 endif
132 ${TARGET_LIB}: ${OBJS}
133 ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDLIBS}
135 .DEFAULT_GOAL= all
136 .PHONY: all
137 all: ${TARGET_LIB} ${TARGET_MAN}
139 .PHONY: install
140 install: includes ${TARGET_LIB} ${TARGET_MAN}
141 ${INSTALL} -D -o ${BINOWN} -g ${BINGRP} -m ${LIBPERM} ${TARGET_LIB} ${DESTDIR}${LIBDIR}/${TARGET_LIB}
142 ${LINK} -s ${TARGET_LIB} ${DESTDIR}${LIBDIR}/${SONAME_LIB}
143 ${LINK} -s ${TARGET_LIB} ${DESTDIR}${LIBDIR}/${BASE_LIB}
144 ${INSTALL} -D -o ${MANOWN} -g ${MANGRP} -m ${MANPERM} ${TARGET_MAN} ${DESTDIR}${MANDIR}/${TARGET_MAN}
146 CLEANFILES+= *.o ${TARGET_LIB}
148 .PHONY: clean
149 clean:
150 rm -f ${CLEANFILES}