Description: Build a shared library in addition to the static one
 Compile the objects as position-independent code and link them into
 libgcsa2.so.1.4 with SONAME libgcsa2.so.1.
Author: Andreas Tille <tille@debian.org>
Last-Update: 2026-10-22
Assisted-By: deepseek-v4.1-flash-free

--- a/Makefile
+++ b/Makefile
@@ -50,12 +50,13 @@
 HEADERS=$(wildcard include/gcsa/*.h)
 LIBOBJS=$(addprefix $(BUILD_OBJ)/,algorithms.o dbg.o files.o gcsa.o internal.o lcp.o path_graph.o support.o utils.o)
 LIBRARY=$(BUILD_LIB)/libgcsa2.a
+SHARED_LIBRARY=$(BUILD_LIB)/libgcsa2.so.1.4
 
 PROGRAMS=$(addprefix $(BUILD_BIN)/,build_gcsa convert_graph gcsa_format try_extend)
 OBSOLETE=build_gcsa convert_graph gcsa_format try_extend
 
 .PHONY: all clean directories test
-all: directories $(LIBRARY) $(PROGRAMS)
+all: directories $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAMS)
 
 directories: $(BUILD_BIN) $(BUILD_LIB) $(BUILD_OBJ)
 
@@ -69,11 +70,14 @@
 	mkdir -p $@
 
 $(BUILD_OBJ)/%.o:$(SOURCE_DIR)/%.cpp $(HEADERS)
-	$(MY_CXX) $(CPPFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -c -o $@ $<
+	$(MY_CXX) $(CPPFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -fPIC -c -o $@ $<
 
 $(LIBRARY):$(LIBOBJS)
 	ar rcs $@ $(LIBOBJS)
 
+$(SHARED_LIBRARY):$(LIBOBJS)
+	$(MY_CXX) -shared $(LDFLAGS) $(CXX_FLAGS) -Wl,-soname,libgcsa2.so.1 -o $@ $(LIBOBJS) $(LIBS)
+
 $(BUILD_BIN)/%:$(BUILD_OBJ)/%.o $(LIBRARY)
 	$(MY_CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -o $@ $< $(LIBRARY) $(LIBS)
 
