commit - e5f09156d317ad71aad9e90b4ad3457dff87ebb0
commit + 48b3e268488a53bc560b785fa3906c4f9caf97be
blob - 2cd59c3ff1640600891a8580929da2b7aed7b65c
blob + 2e7e3b1d8ddb2406b0de1a01c8f9c99404d5feb1
--- Makefile.gnu
+++ Makefile.gnu
LOCALBASE?= /usr
+LIB= opensmtpd
+
SRCS= opensmtpd.c iobuf.c ioev.c
HDRS= opensmtpd.h
MAN= osmtpd_run.3
LIBDIR?= ${LOCALBASE}/lib/
-MANDIR?= ${LOCALBASE}/man/man
+MANDIR?= ${LOCALBASE}/share/man/man3
BINOWN?= root
BINGRP?= root
LIBPERM?= 755
+MANOWN?= root
+MANGRP?= root
+MANPERM?= 644
mkfile_path := ${abspath ${lastword ${MAKEFILE_LIST}}}
CURDIR := ${dir ${mkfile_path}}
CFLAGS+= -Wshadow -Wpointer-arith -Wcast-qual
CFLAGS+= -Wsign-compare
-LDFLAGS+= -shared
LDLIBS+= -levent
INSTALL?= install
+LINK?= ln
CLEANFILES= ${VERSION_SCRIPT}
VERSION_SCRIPT= Symbols.map
SYMBOL_LIST= ${CURDIR}/Symbols.list
-TARGET_LIB= libopensmtpd.so
-
# Defines for OpenBSD-specific interfaces
# Add a OS-specific defines here.
NEED_EXPLICIT_BZERO?= 0
NEED_STRLCPY?= 1
NEED_STRTONUM?= 1
-.PHONY: all
-all: ${TARGET_LIB}
+MANFORMAT?= mangz
+include ${CURDIR}/shlib_version
+BASE_LIB=lib${LIB}.so
+TARGET_LIB=lib${LIB}.so.${major}.${minor}.0
+SONAME_LIB=lib${LIB}.so.${major}
+
+LDFLAGS+= -shared -Wl,-soname=${SONAME_LIB}
+
includes:
@cd ${CURDIR}; for i in ${HDRS}; do \
j="cmp -s $$i ${DESTDIR}${LOCALBASE}/include/$$i || \
- ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 $$i\
+ ${INSTALL} -D -o ${BINOWN} -g ${BINGRP} -m 444 $$i\
${DESTDIR}${LOCALBASE}/include/"; \
echo $$j; \
eval "$$j"; \
done;
+ifeq (${MANFORMAT}, mangz)
+TARGET_MAN= ${MAN}.gz
+CLEANFILES+= ${TARGET_MAN}
+${TARGET_MAN}: ${MAN}
+ mandoc -Tman ${MAN} | gzip > $@
+else
+TARGET_MAN= ${MAN}
+endif
+
${SRCS:.c=.d}:%.d:%.c
${CC} ${CFLAGS} -MM $< >$@
OBJS= ${notdir ${SRCS:.c=.o}}
+${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 $@
+ifdef VERSION_SCRIPT
+${TARGET_LIB}: ${VERSION_SCRIPT}
+LDFLAGS+= -Wl,--version-script=${VERSION_SCRIPT}
+endif
+
${TARGET_LIB}: ${OBJS}
- ${CC} ${LDFLAGS} -o $@ $^ ${LDLIBS}
+ ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDLIBS}
+.DEFAULT_GOAL= all
+.PHONY: all
+all: ${TARGET_LIB} ${TARGET_MAN}
+
.PHONY: install
-install: ${TARGET_LIB}
- ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${LIBPERM} ${TARGET_LIB} ${LIBDIR}
+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 *.o *.so
+ rm -f ${CLEANFILES}