Index: Makefile
--- Makefile.orig
+++ Makefile
@@ -44,7 +44,7 @@ WAV49	= -DWAV49
 # CCFLAGS 	= -c -O
 
 CC		= gcc -ansi -pedantic
-CCFLAGS 	= -c -O2 -DNeedFunctionPrototypes=1 -Wall -Wno-comment
+CCFLAGS 	= -c -DNeedFunctionPrototypes=1 -Wall -Wno-comment
 
 LD 		= $(CC)
 
@@ -80,7 +80,7 @@ INSTALL_ROOT	=
 
 GSM_INSTALL_ROOT = $(INSTALL_ROOT)
 GSM_INSTALL_LIB = $(GSM_INSTALL_ROOT)/lib
-GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc
+GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include
 GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/man/man3
 
 
@@ -107,6 +107,8 @@ COMPRESSFLAGS 	= 
 # RANLIB 	= true
 RANLIB	 	= ranlib
 
+PICFLAG		= -fpic
+
 #
 #    You shouldn't have to configure below this line if you're porting.
 # 
@@ -136,11 +138,16 @@ CFLAGS	= $(CCFLAGS) $(SASR) $(DEBUG) $(MULHACK) $(FAST
 LFLAGS	= $(LDFLAGS) $(LDINC)
 ######### It's $(LD) $(LFLAGS)
 
+.SUFFIXES: .o .so
 
 # Targets
 
 LIBGSM	= $(LIB)/libgsm.a
+LIBgsm_VERSION=	1.0
 
+LIBGSMSO = $(LIB)/libgsm.so.${LIBgsm_VERSION}
+INSTALLED_LIBGSMSO = $(GSM_INSTALL_LIB)/libgsm.so.${LIBgsm_VERSION}
+
 TOAST	= $(BIN)/toast
 UNTOAST	= $(BIN)/untoast
 TCAT	= $(BIN)/tcat
@@ -258,6 +265,7 @@ STUFF = 	ChangeLog			\
 
 GSM_INSTALL_TARGETS =	\
 		$(GSM_INSTALL_LIB)/libgsm.a		\
+		$(INSTALLED_LIBGSMSO)			\
 		$(GSM_INSTALL_INC)/gsm.h		\
 		$(GSM_INSTALL_MAN)/gsm.3		\
 		$(GSM_INSTALL_MAN)/gsm_explode.3	\
@@ -277,9 +285,12 @@ TOAST_INSTALL_TARGETS =	\
 		$(CC) $(CFLAGS) $?
 		@-mv `$(BASENAME) $@` $@ > /dev/null 2>&1
 
+.c.so:
+		$(CC) $(CFLAGS) $(PICFLAG) -DPIC $? -o $@
+
 # Target rules
 
-all:		$(LIBGSM) $(TOAST) $(TCAT) $(UNTOAST)
+all:		$(LIBGSM) $(LIBGSMSO) $(TOAST) $(TCAT) $(UNTOAST)
 		@-echo $(ROOT): Done.
 
 tst:		$(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/test-result
@@ -299,6 +310,9 @@ install:	toastinstall gsminstall
 
 # The basic API: libgsm
 
+$(LIBGSMSO):	$(LIB) $(GSM_OBJECTS:.o=.so)
+		$(CC) -shared $(PICFLAG) -o $@ $(GSM_OBJECTS:.o=.so)
+
 $(LIBGSM):	$(LIB) $(GSM_OBJECTS)
 		-rm $(RMFLAGS) $(LIBGSM)
 		$(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS)
@@ -308,7 +322,7 @@ $(LIBGSM):	$(LIB) $(GSM_OBJECTS)
 # Toast, Untoast and Tcat -- the compress-like frontends to gsm.
 
 $(TOAST):	$(BIN) $(TOAST_OBJECTS) $(LIBGSM)
-		$(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSM) $(LDLIB)
+		$(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) -lgsm $(LDLIB)
 
 $(UNTOAST):	$(BIN) $(TOAST)
 		-rm $(RMFLAGS) $(UNTOAST)
@@ -351,9 +365,7 @@ toastuninstall:
 		fi
 
 $(TOAST_INSTALL_BIN)/toast:	$(TOAST)
-		-rm $(RMFLAGS) $@
-		cp $(TOAST) $@
-		chmod 755 $@
+		$(BSD_INSTALL_PROGRAM) $(TOAST) $@
 
 $(TOAST_INSTALL_BIN)/untoast:	$(TOAST_INSTALL_BIN)/toast
 		-rm $(RMFLAGS) $@
@@ -398,7 +410,10 @@ $(GSM_INSTALL_LIB)/libgsm.a:	$(LIBGSM)
 		cp $? $@
 		chmod 444 $@
 
+$(INSTALLED_LIBGSMSO):		$(LIBGSMSO)
+		${BSD_INSTALL_DATA} $? $@
 
+
 # Distribution
 
 dist:		gsm-1.0.tar.gz
@@ -422,7 +437,7 @@ semi-clean:
 			$(TST)/gsm2cod 			\
 			$(TST)/*.*.*
 		-$(FIND) . \( -name core -o -name foo \) \
-			-print | xargs rm $(RMFLAGS)
+			-delete
 
 clean:	semi-clean
 		-rm $(RMFLAGS) $(LIBGSM) $(ADDTST)/add		\
