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