Commit Diff


commit - e5f09156d317ad71aad9e90b4ad3457dff87ebb0
commit + 48b3e268488a53bc560b785fa3906c4f9caf97be
blob - 2cd59c3ff1640600891a8580929da2b7aed7b65c
blob + 2e7e3b1d8ddb2406b0de1a01c8f9c99404d5feb1
--- Makefile.gnu
+++ Makefile.gnu
@@ -1,14 +1,19 @@
 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}}
@@ -21,18 +26,16 @@ CFLAGS+=	-Wmissing-declarations
 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
@@ -42,18 +45,33 @@ NEED_STRLCAT?=		1
 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 $< >$@
 
@@ -102,14 +120,32 @@ endif
 
 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}