Author: Andreas Tille <tille@debian.org>
Last-Update: Thu, 15 Sep 2016 22:26:26 +0200
Description: Create shared lib instead of static

--- a/Makefile
+++ b/Makefile
@@ -119,11 +119,11 @@ BINS = $(addprefix bin/,$(notdir $(BIN_S
 SHORTBINS = $(notdir $(BIN_SOURCES:.cpp=))
 
 # TABIX = tabixpp/tabix.o
-SMITHWATERMAN = smithwaterman/SmithWatermanGotoh.o
-REPEATS = smithwaterman/Repeats.o
-INDELALLELE = smithwaterman/IndelAllele.o
-DISORDER = smithwaterman/disorder.o
-LEFTALIGN = smithwaterman/LeftAlign.o
+# SMITHWATERMAN = smithwaterman/SmithWatermanGotoh.o
+# REPEATS = smithwaterman/Repeats.o
+# INDELALLELE = smithwaterman/IndelAllele.o
+# DISORDER = smithwaterman/disorder.o
+# LEFTALIGN = smithwaterman/LeftAlign.o
 FSOM = fsom/fsom.o
 FILEVERCMP = filevercmp/filevercmp.o
 
@@ -143,8 +143,11 @@ CXXFLAGS = -O3 -D_FILE_OFFSET_BITS=64 -s
 
 SSW = src/ssw.o src/ssw_cpp.o
 
-ssw.o: src/ssw.hpp
-ssw_cpp.o:src/ssw_cpp.hpp
+src/ssw.o: src/ssw.h src/ssw.c
+	$(CXX) -c $(CFLAGS) -fPIC -o $@ src/$(*F).c
+
+src/ssw_cpp.o: src/ssw_cpp.cpp src/ssw_cpp.h
+	$(CXX) -c $(CFLAGS) -fPIC -o $@ src/$(*F).cpp
 
 openmp:
 	$(MAKE) CXXFLAGS="$(CXXFLAGS) -fopenmp -D HAS_OPENMP"
@@ -157,7 +160,7 @@ gprof:
 
 $(OBJECTS): $(SOURCES) $(HEADERS) $(TABIX) multichoose pre $(SMITHWATERMAN) $(FILEVERCMP)
 $(OBJECTS): $(SOURCES) $(HEADERS) multichoose pre $(SMITHWATERMAN) $(FILEVERCMP)
-	$(CXX) -c -o $@ src/$(*F).cpp $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) && cp src/*.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
+	$(CXX) -c $(CFLAGS) -fPIC -o $@ src/$(*F).cpp $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) && cp src/*.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
 
 multichoose: pre
 	echo "Source does not contain dir multichoose"
@@ -168,22 +171,6 @@ intervaltree: pre
 	# cd intervaltree && $(MAKE) && cp *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
 	mkdir -p $(VCF_LIB_LOCAL)/$(INC_DIR)/ && cp -a debian/include/* $(VCF_LIB_LOCAL)/$(INC_DIR)/
 
-$(TABIX): pre
-	echo "No need to create separately packaged tabixpp"
-	# cd tabixpp && $(MAKE) && cp *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
-
-$(SMITHWATERMAN): pre
-	echo "Source does not contain dir smithwaterman"
-	# cd smithwaterman && $(MAKE) && cp *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/ && cp *.o $(VCF_LIB_LOCAL)/$(OBJ_DIR)/
-
-$(DISORDER): $(SMITHWATERMAN)
-
-$(REPEATS): $(SMITHWATERMAN)
-
-$(LEFTALIGN): $(SMITHWATERMAN)
-
-$(INDELALLELE): $(SMITHWATERMAN)
-
 #$(FSOM):
 #	cd fsom && $(CXX) $(CXXFLAGS) -c fsom.c -lm
 
@@ -192,18 +179,20 @@ $(FILEVERCMP): pre
 	#cp /usr/share/gnulib/lib/filevercmp.* filevercmp
 	#echo 'Proper use of filevercmp would be: `gnulib-tool --import filevercmp` - but it needs ./configure.ac'
 	#We here go with quilt patches from upstream files
-	cd filevercmp && $(CXX) $(CXXFLAGS) -c filevercmp.c
+	cd filevercmp && $(CXX) $(CXXFLAGS) -fPIC -c filevercmp.c
 	ln -sf ../filevercmp/filevercmp.h $(VCF_LIB_LOCAL)/$(INC_DIR)/filevercmp.h
 
 $(SHORTBINS): pre
 	$(MAKE) bin/$@
 
-$(BINS): $(BIN_SOURCES) libvcflib.a $(OBJECTS) $(SMITHWATERMAN) $(DISORDER) $(LEFTALIGN) $(INDELALLELE) $(SSW) $(FILEVERCMP) pre intervaltree
+$(BINS): $(BIN_SOURCES) libvcflib.so $(OBJECTS) $(SMITHWATERMAN) $(DISORDER) $(LEFTALIGN) $(INDELALLELE) $(SSW) $(FILEVERCMP) pre intervaltree
 	$(CXX) src/$(notdir $@).cpp -o $@ $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) -DVERSION=\"$(GIT_VERSION)\"
 
-libvcflib.a: $(OBJECTS) $(SMITHWATERMAN) $(REPEATS) $(DISORDER) $(LEFTALIGN) $(INDELALLELE) $(SSW) $(FILEVERCMP) pre
-	ar rs libvcflib.a $(OBJECTS) $(SSW) $(FILEVERCMP)
-	cp libvcflib.a $(LIB_DIR)
+libvcflib.so: $(OBJECTS) $(SMITHWATERMAN) $(REPEATS) $(DISORDER) $(LEFTALIGN) $(INDELALLELE) $(SSW) $(FILEVERCMP) pre
+	# ar rs libvcflib.a $(OBJECTS) $(SSW) $(FILEVERCMP)
+	gcc -shared  -Wl,-soname -Wl,libvcflib.so.1 -o libvcflib.so.1 $(OBJECTS) $(SSW) $(FILEVERCMP)
+	ln -s libvcflib.so.1 libvcflib.so
+	cp -a libvcflib.so* $(LIB_DIR)
 
 
 test: $(BINS)
@@ -224,7 +213,7 @@ update: pull all
 clean:
 	rm -f $(BINS) $(OBJECTS)
 	rm -f ssw_cpp.o ssw.o
-	rm -f libvcflib.a
+	rm -f libvcflib.so
 	rm -rf $(BIN_DIR)
 	rm -rf $(LIB_DIR)
 	rm -rf $(INC_DIR)
