From: Christian Kastner <debian@kvr.at>
Date: Thu, 17 Jun 2010 15:39:15 +0200
Subject: [PATCH] Properly build shared and static libraries, programs

Modify upstream's Makefile to properly build shared and static libraries, and
link upstream's programs to the shared libraries.

Forwarded: no
Last-Update: 2010-06-17
---
 Makefile |   48 +++++++++++++++++++++++++++++++++++-------------
 1 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/Makefile b/Makefile
index 2ed4145..7ddb88e 100644
--- a/Makefile
+++ b/Makefile
@@ -3,10 +3,23 @@ MEX := mex
 MEXFLAGS := $(shell if uname -m | grep -q x86_64 ; then echo -largeArrayDims ; fi)
 MEXSUFFIX := $(shell if uname -m | grep -q x86_64 ; then echo mexa64 ; else echo mexglx ; fi)
 CC := gcc
-#CFLAGS := -g -lm -Wall -pthread
-CFLAGS := -lm -msse -O3 -fPIC -fstrict-aliasing -fomit-frame-pointer -Wall -pthread
-#CFLAGS := -lm -msse -O3 -fPIC -fstrict-aliasing -fomit-frame-pointer -Wall
-#CFLAGS := -lm -msse -O3 -fPIC -fopenmp -fstrict-aliasing -fomit-frame-pointer -Wall
+
+CFLAGS +=
+LDFLAGS +=
+LIBS += -lm
+
+LIB_CFLAGS = $(CFLAGS) -fPIC
+LIB_LDFLAGS = $(LDFLAGS)
+LIB_LIBS = $(LIBS)
+
+PROG_CFLAGS = $(CFLAGS)
+PROG_LDFLAGS = $(LDFLAGS) -L.
+PROG_LIBS = $(LIBS) -lpthread -locas
+
+# The real LVER/LSUBVER should be passed on by debian/rules
+LVER ?= 0
+LSUBVER ?= 0
+LIBFILE = libocas.so.$(LVER).$(LSUBVER)
 
 
 ifeq (yes,$(MEXDETECTED))
@@ -43,21 +56,30 @@ lbpfilter.$(MEXSUFFIX): lbpfilter_mex.c
 
 
 else 
-all: libocas.so svmocas msvmocas
+all: $(LIBFILE) svmocas msvmocas linclass libocas.a
 endif
 
-svmocas:	svmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c ocas_helper.h libocas.h sparse_mat.h libocas.c
-		$(CC) $(CFLAGS) -o $@ svmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c libocas.c libqp_splx.c
+svmocas:	svmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c ocas_helper.h libocas.h sparse_mat.h $(LIBFILE)
+		$(CC) $(PROG_CFLAGS) $(PROG_LDFLAGS) -o $@ svmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c $(PROG_LIBS)
 
-msvmocas:	msvmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c ocas_helper.h libocas.h sparse_mat.h libocas.c
-		$(CC) $(CFLAGS) -o $@ msvmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c libocas.c libqp_splx.c
+msvmocas:	msvmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c ocas_helper.h libocas.h sparse_mat.h $(LIBFILE)
+		$(CC) $(PROG_CFLAGS) $(PROG_LDFLAGS) -o $@ msvmocas.c lib_svmlight_format.c sparse_mat.c ocas_helper.c $(PROG_LIBS)
 
 linclass:	linclass.c lib_svmlight_format.c libocas.h 
-		$(CC) $(CFLAGS) -o $@ linclass.c lib_svmlight_format.c  
+		$(CC) $(CFLAGS) $(LDFLAGS) -o $@ linclass.c lib_svmlight_format.c $(LIBS)
+
 
+$(LIBFILE):	libocas.c libocas.h libqp_splx.c libqp.h
+		$(CC) $(LIB_CFLAGS) $(LIB_LDFLAGS) -shared \
+			-Wl,-soname,libocas.so.$(LVER) \
+			-o $@ libocas.c libqp_splx.c $(LIB_LIBS)
+		ln -s $@ libocas.so.$(LVER)
+		ln -s libocas.so.$(LVER) libocas.so
 
-libocas.so:	libocas.c libocas.h libqp_splx.c libqp.h 
-		$(CC) $(CFLAGS) -shared -o $@ libocas.c libqp_splx.c
+libocas.a:
+	$(CXX) $(CFLAGS) $(LDFLAGS) -c -o libocas-static.o libocas.c
+	$(CXX) $(CFLAGS) $(LDFLAGS) -c -o libqp_splx-static.o libqp_splx.c
+	ar cru libocas.a libocas-static.o libqp_splx-static.o
 
 clean: 
-		rm -f *~ svmocas.$(MEXSUFFIX) svmlight_linclass.$(MEXSUFFIX) svmocas msvmocas linclass libocas.so msvmocas.$(MEXSUFFIX) lbpfilter.$(MEXSUFFIX) lbppyr_features.$(MEXSUFFIX) svmocas_lbp.$(MEXSUFFIX) lbppyr.$(MEXSUFFIX) compute_errors.$(MEXSUFFIX)
+		rm -f *~ *.o libocas.a svmocas.$(MEXSUFFIX) svmlight_linclass.$(MEXSUFFIX) svmocas msvmocas linclass libocas.so* msvmocas.$(MEXSUFFIX) lbpfilter.$(MEXSUFFIX) lbppyr_features.$(MEXSUFFIX) svmocas_lbp.$(MEXSUFFIX) lbppyr.$(MEXSUFFIX) compute_errors.$(MEXSUFFIX)
-- 
