From 919679967804f48ce8ff15cf4b172e28071a367a Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 摹曛, 01 10月 2015 17:03:03 +0800
Subject: [PATCH] Add building of shared library

---
 libscpi/Makefile |   46 +++++++++++++++++++++++++++++++++++++---------
 Makefile         |    7 +++++--
 2 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile
index 9b011c7..9acd839 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: clean all test
+.PHONY: clean all test install
 
 all:
 	$(MAKE) -C libscpi
@@ -9,4 +9,7 @@
 	$(MAKE) clean -C examples
 
 test:
-	$(MAKE) test -C libscpi
\ No newline at end of file
+	$(MAKE) test -C libscpi
+
+install:
+	$(MAKE) install -C libscpi
\ No newline at end of file
diff --git a/libscpi/Makefile b/libscpi/Makefile
index 58719cb..33c3737 100644
--- a/libscpi/Makefile
+++ b/libscpi/Makefile
@@ -1,6 +1,8 @@
+VERSION = 2.1.0
 LIBNAME = scpi
 
 CFLAGS += -Wextra -Wmissing-prototypes -Wimplicit -g -Iinc
+CFLAGS_SHARED += $(CFLAGS) -fPIC
 LDFLAGS += -Wl,--as-needed
 #TESTCFLAGS += $(CFLAGS) `pkg-config --cflags cunit`
 #TESTLDFLAGS += $(LDFLAGS) `pkg-config --libs cunit`
@@ -8,12 +10,21 @@
 TESTLDFLAGS += $(LDFLAGS) -lcunit
 
 OBJDIR=obj
+OBJDIR_STATIC=$(OBJDIR)/static
+OBJDIR_SHARED=$(OBJDIR)/shared
 DISTDIR=dist
 TESTDIR=test
 
+PREFIX := $(DESTDIR)/usr/local
+LIBDIR := $(PREFIX)/lib
+INCDIR := $(PREFIX)/include
+
 STATICLIBFLAGS = rcs
+SHAREDLIBFLAGS = $(LDFLAGS) -shared -Wl,-soname,$(SHAREDLIB)
 
 STATICLIB = lib$(LIBNAME).a
+SHAREDLIB = lib$(LIBNAME).so
+SHAREDLIBVER = $(SHAREDLIB).$(VERSION)
 
 SRCS = $(addprefix src/, \
 	error.c fifo.c ieee488.c \
@@ -21,7 +32,8 @@
 	lexer.c expression.c \
 	)
 
-OBJS = $(addprefix $(OBJDIR)/, $(notdir $(SRCS:.c=.o)))
+OBJS_STATIC = $(addprefix $(OBJDIR_STATIC)/, $(notdir $(SRCS:.c=.o)))
+OBJS_SHARED = $(addprefix $(OBJDIR_SHARED)/, $(notdir $(SRCS:.c=.o)))
 
 HDRS = $(addprefix inc/scpi/, \
 	scpi.h constants.h error.h \
@@ -41,11 +53,13 @@
 TESTS_OBJS = $(TESTS:.c=.o)
 TESTS_BINS = $(TESTS_OBJS:.o=.test)
 
-.PHONY: all clean static test
+.PHONY: all clean static shared test install
 
-all: static
+all: static shared
 
 static: $(DISTDIR)/$(STATICLIB)
+
+shared: $(DISTDIR)/$(SHAREDLIBVER)
 
 clean:
 	$(RM) -r $(OBJDIR) $(DISTDIR) $(TESTS_BINS) $(TESTS_OBJS)
@@ -53,21 +67,35 @@
 test: $(TESTS_BINS)
 	$(TESTS_BINS:.test=.test &&) true
 
-$(OBJDIR):
+install: $(DISTDIR)/$(STATICLIB) $(DISTDIR)/$(SHAREDLIBVER)
+	test -d $(PREFIX) || mkdir $(PREFIX)
+	test -d $(LIBDIR) || mkdir $(LIBDIR)
+	test -d $(INCDIR) || mkdir $(INCDIR)
+	test -d $(INCDIR)/scpi || mkdir $(INCDIR)/scpi
+	install -m 0644 $(DISTDIR)/$(STATICLIB) $(LIBDIR)
+	install -m 0644 $(DISTDIR)/$(SHAREDLIBVER) $(LIBDIR)
+	install -m 0644 inc/scpi/*.h $(INCDIR)/scpi
+
+$(OBJDIR_STATIC):
+	mkdir -p $@
+
+$(OBJDIR_SHARED):
 	mkdir -p $@
 
 $(DISTDIR):
 	mkdir -p $@
 
-$(OBJDIR)/%.o: src/%.c
+$(OBJDIR_STATIC)/%.o: src/%.c $(HDRS) $(OBJDIR_STATIC)
 	$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
 
-$(DISTDIR)/$(STATICLIB): $(OBJS)
-	$(AR) $(STATICLIBFLAGS) $(DISTDIR)/$(STATICLIB) $(OBJS)
+$(OBJDIR_SHARED)/%.o: src/%.c $(HDRS) $(OBJDIR_SHARED)
+	$(CC) -c $(CFLAGS_SHARED) $(CPPFLAGS) -o $@ $<
 
+$(DISTDIR)/$(STATICLIB): $(DISTDIR) $(OBJS_STATIC)
+	$(AR) $(STATICLIBFLAGS) $(DISTDIR)/$(STATICLIB) $(OBJS_STATIC)
 
-$(OBJS): $(HDRS) $(DISTDIR) $(OBJDIR) $(SRCS)
-
+$(DISTDIR)/$(SHAREDLIBVER): $(DISTDIR) $(OBJS_SHARED)
+	$(CC) $(SHAREDLIBFLAGS) -o $(DISTDIR)/$(SHAREDLIBVER) $(OBJS_SHARED)
 
 $(TESTDIR)/%.o: $(TESTDIR)/%.c
 	$(CC) -c $(TESTCFLAGS) $(CPPFLAGS) -o $@ $<

--
Gitblit v1.9.1