changeset 40:ad4abb4e5ff0

make: add basic shared library support
author David Demelier <markand@malikania.fr>
date Tue, 23 Nov 2021 17:07:02 +0100
parents 6d1a259f2a36
children 86b259a3f272
files Makefile
diffstat 1 files changed, 39 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Tue Nov 23 14:02:18 2021 +0100
+++ b/Makefile	Tue Nov 23 17:07:02 2021 +0100
@@ -18,17 +18,30 @@
 
 .POSIX:
 
-CC=             cc
-CFLAGS=         -O3 -DNDEBUG
+PREFIX=         /usr/local
+INCDIR=         ${PREFIX}/include
+LIBDIR=         ${PREFIX}/lib
+MANDIR=         ${PREFIX}/share/man
+
+VERSION=        3.0.0
+SHLIB=          3
 
 .SUFFIXES:
 .SUFFIXES: .c .o
 
-all: test/base64
+all: libbase64.a
 
 .c.o:
 	${CC} ${CFLAGS} -Iextern/librexo -I. -c $< -o $@ ${LDFLAGS}
 
+libbase64.a: base64.o
+	${AR} -rc $@ $<
+
+libbase64.so so: base64.o
+	${CC} -o libbase64.so.${VERSION} -shared -Wl,-soname,libbase64.so.${SHLIB} $<
+	ln -sf libbase64.so.${VERSION} libbase64.so.${SHLIB}
+	ln -sf libbase64.so.${VERSION} libbase64.so
+
 test/base64.o: base64.h
 
 test/base64: test/base64.o base64.o
@@ -37,8 +50,28 @@
 tests: test/base64
 	test/base64
 
+install:
+	mkdir -p ${DESTDIR}${LIBDIR}
+	cp libbase64.a ${DESTDIR}${LIBDIR}
+	mkdir -p ${DESTDIR}${INCDIR}
+	cp base64.h ${DESTDIR}${INCDIR}
+	mkdir -p ${DESTDIR}${MANDIR}/man3
+	cp libbase64.3 ${DESTDIR}${MANDIR}/man3
+	ln -sf libbase64.3 ${DESTDIR}${MANDIR}/man3/b64_encode.3
+	ln -sf libbase64.3 ${DESTDIR}${MANDIR}/man3/b64_decode.3
+	ln -sf libbase64.3 ${DESTDIR}${MANDIR}/man3/B64_ENCODE_LENGTH.3
+	ln -sf libbase64.3 ${DESTDIR}${MANDIR}/man3/B64_DECODE_LENGTH.3
+
+install-so:
+	mkdir -p ${DESTDIR}${LIBDIR}
+	cp libbase64.so.${VERSION} ${DESTDIR}${LIBDIR}
+	ln -sf libbase64.so.${VERSION} ${DESTDIR}${LIBDIR}/libbase64.so.${SHLIB}
+	ln -sf libbase64.so.${VERSION} ${DESTDIR}${LIBDIR}/libbase64.so
+
 clean:
-	rm -f *.o test/*.o
-	rm -f test/base64
+	rm -f base64.o
+	rm -f libbase64.a
+	rm -f libbase64.so libbase64.so.${SHLIB} libbase64.so.${VERSION}
+	rm -f test/base64.o test/base64
 
-.PHONY: all clean tests
+.PHONY: all clean install install-so so tests