commit 48b3e268488a53bc560b785fa3906c4f9caf97be from: Martijn van Duren date: Tue Jun 01 12:40:40 2021 UTC Major overhaul from Makefile.gnu. Lots of help from: Ryan Kavanagh 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}