--- Makefile	2006-04-26 15:14:26.000000000 -0400
+++ Makefile	2010-06-19 16:53:25.000000000 -0400
@@ -44,7 +44,7 @@
 # CCFLAGS 	= -c -O
 
 CC		= gcc -ansi -pedantic
-CCFLAGS 	= -c -O2 -DNeedFunctionPrototypes=1
+CCFLAGS 	= -c -O2 -fPIC -DNeedFunctionPrototypes=1
 
 LD 		= $(CC)
 
@@ -96,11 +96,11 @@
 #  Other tools
 
 SHELL		= /bin/sh
-LN		= ln
+LN		= ln -s -f
 BASENAME 	= basename
 AR		= ar
 ARFLAGS		= cr
-RMFLAGS		=
+RMFLAGS		= -f
 FIND		= find
 COMPRESS 	= compress
 COMPRESSFLAGS 	= 
@@ -139,7 +139,7 @@
 
 # Targets
 
-LIBGSM	= $(LIB)/libgsm.a
+LIBGSMSO = $(LIB)/libgsm.so
 
 TOAST	= $(BIN)/toast
 UNTOAST	= $(BIN)/untoast
@@ -257,7 +257,7 @@
 # Install targets
 
 GSM_INSTALL_TARGETS =	\
-		$(GSM_INSTALL_LIB)/libgsm.a		\
+		$(GSM_INSTALL_LIB)/libgsm.so		\
 		$(GSM_INSTALL_INC)/gsm.h		\
 		$(GSM_INSTALL_MAN)/gsm.3		\
 		$(GSM_INSTALL_MAN)/gsm_explode.3	\
@@ -279,7 +279,7 @@
 
 # Target rules
 
-all:		$(LIBGSM) $(TOAST) $(TCAT) $(UNTOAST)
+all:		$(LIBGSMSO) $(TOAST) $(TCAT) $(UNTOAST)
 		@-echo $(ROOT): Done.
 
 tst:		$(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/test-result
@@ -299,24 +299,23 @@
 
 # The basic API: libgsm
 
-$(LIBGSM):	$(LIB) $(GSM_OBJECTS)
-		-rm $(RMFLAGS) $(LIBGSM)
-		$(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS)
-		$(RANLIB) $(LIBGSM)
-
+$(LIBGSMSO): $(LIB) $(GSM_OBJECTS)
+	$(LD) -shared -Wl,-soname,libgsm.so.1 -o $@.1.0.13 $(GSM_OBJECTS)
+	$(LN) libgsm.so.1.0.13 $(LIBGSMSO).1
+	$(LN) libgsm.so.1.0.13 $(LIBGSMSO)
 
 # Toast, Untoast and Tcat -- the compress-like frontends to gsm.
 
-$(TOAST):	$(BIN) $(TOAST_OBJECTS) $(LIBGSM)
-		$(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSM) $(LDLIB)
+$(TOAST):	$(BIN) $(TOAST_OBJECTS) $(LIBGSMSO)
+		$(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSMSO) $(LDLIB)
 
 $(UNTOAST):	$(BIN) $(TOAST)
 		-rm $(RMFLAGS) $(UNTOAST)
-		$(LN) $(TOAST) $(UNTOAST)
+		$(LN) toast $(UNTOAST)
 
 $(TCAT):	$(BIN) $(TOAST)
 		-rm $(RMFLAGS) $(TCAT)
-		$(LN) $(TOAST) $(TCAT)
+		$(LN) toast $(TCAT)
 
 
 # The local bin and lib directories
@@ -351,53 +350,54 @@
 		fi
 
 $(TOAST_INSTALL_BIN)/toast:	$(TOAST)
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $(TOAST) $@
 		chmod 755 $@
 
 $(TOAST_INSTALL_BIN)/untoast:	$(TOAST_INSTALL_BIN)/toast
-		-rm $@
-		ln $? $@
+		-rm $(RMFLAGS) $@
+		$(LN) toast $@
 
 $(TOAST_INSTALL_BIN)/tcat:	$(TOAST_INSTALL_BIN)/toast
-		-rm $@
-		ln $? $@
+		-rm $(RMFLAGS) $@
+		$(LN) toast $@
 
 $(TOAST_INSTALL_MAN)/toast.1:	$(MAN)/toast.1
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $? $@
 		chmod 444 $@
 
 $(GSM_INSTALL_MAN)/gsm.3:	$(MAN)/gsm.3
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $? $@
 		chmod 444 $@
 
 $(GSM_INSTALL_MAN)/gsm_option.3:	$(MAN)/gsm_option.3
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $? $@
 		chmod 444 $@
 
 $(GSM_INSTALL_MAN)/gsm_explode.3:	$(MAN)/gsm_explode.3
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $? $@
 		chmod 444 $@
 
 $(GSM_INSTALL_MAN)/gsm_print.3:	$(MAN)/gsm_print.3
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $? $@
 		chmod 444 $@
 
 $(GSM_INSTALL_INC)/gsm.h:	$(INC)/gsm.h
-		-rm $@
-		cp $? $@
-		chmod 444 $@
-
-$(GSM_INSTALL_LIB)/libgsm.a:	$(LIBGSM)
-		-rm $@
+		-rm $(RMFLAGS) $@
 		cp $? $@
 		chmod 444 $@
 
+$(GSM_INSTALL_LIB)/libgsm.so:	$(LIBGSMSO)
+		-rm $(RMFLAGS) $@ $@.1 $@.1.0.13
+		cp $?.1.0.13 $@.1.0.13
+		chmod 755 $@.1.0.13
+		$(LN) libgsm.so.1.0.13 $@
+		$(LN) libgsm.so.1.0.13 $@.1
 
 # Distribution
 
@@ -425,7 +425,7 @@
 			-print | xargs rm $(RMFLAGS)
 
 clean:	semi-clean
-		-rm $(RMFLAGS) $(LIBGSM) $(ADDTST)/add		\
+		-rm $(RMFLAGS) $(LIBGSMSO)* $(ADDTST)/add		\
 			$(TOAST) $(TCAT) $(UNTOAST)	\
 			$(ROOT)/gsm-1.0.tar.Z
 
@@ -473,22 +473,22 @@
 $(TST)/test-result:	$(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/run
 			( cd $(TST); ./run ) 
 
-$(TST)/lin2txt:		$(TST)/lin2txt.o $(LIBGSM)
+$(TST)/lin2txt:		$(TST)/lin2txt.o $(LIBGSMSO)
 			$(LD) $(LFLAGS) -o $(TST)/lin2txt \
-				$(TST)/lin2txt.o $(LIBGSM) $(LDLIB)
+				$(TST)/lin2txt.o $(LIBGSMSO) $(LDLIB)
 
-$(TST)/lin2cod:		$(TST)/lin2cod.o $(LIBGSM)
+$(TST)/lin2cod:		$(TST)/lin2cod.o $(LIBGSMSO)
 			$(LD) $(LFLAGS) -o $(TST)/lin2cod \
-				$(TST)/lin2cod.o $(LIBGSM) $(LDLIB)
+				$(TST)/lin2cod.o $(LIBGSMSO) $(LDLIB)
 
-$(TST)/gsm2cod:		$(TST)/gsm2cod.o $(LIBGSM)
+$(TST)/gsm2cod:		$(TST)/gsm2cod.o $(LIBGSMSO)
 			$(LD) $(LFLAGS) -o $(TST)/gsm2cod \
-				$(TST)/gsm2cod.o $(LIBGSM) $(LDLIB)
+				$(TST)/gsm2cod.o $(LIBGSMSO) $(LDLIB)
 
-$(TST)/cod2txt:		$(TST)/cod2txt.o $(LIBGSM)
+$(TST)/cod2txt:		$(TST)/cod2txt.o $(LIBGSMSO)
 			$(LD) $(LFLAGS) -o $(TST)/cod2txt \
-				$(TST)/cod2txt.o $(LIBGSM) $(LDLIB)
+				$(TST)/cod2txt.o $(LIBGSMSO) $(LDLIB)
 
-$(TST)/cod2lin:		$(TST)/cod2lin.o $(LIBGSM)
+$(TST)/cod2lin:		$(TST)/cod2lin.o $(LIBGSMSO)
 			$(LD) $(LFLAGS) -o $(TST)/cod2lin \
-				$(TST)/cod2lin.o $(LIBGSM) $(LDLIB)
+				$(TST)/cod2lin.o $(LIBGSMSO) $(LDLIB)