--- gsm/Makefile +++ gsm/Makefile @@ -64,6 +64,7 @@ LD = $(CC) # LDLIB = -lgcc ######### Additional libraries needed by $(LD) +PICFLAGS = -fPIC # Where do you want to install libraries, binaries, a header file # and the manual pages? @@ -78,10 +79,11 @@ INSTALL_ROOT = # Leave GSM_INSTALL_ROOT empty to not install the GSM library outside of # this directory. -GSM_INSTALL_ROOT = $(INSTALL_ROOT) -GSM_INSTALL_LIB = $(GSM_INSTALL_ROOT)/lib -GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc -GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/man/man3 +SLIB = lib +GSM_INSTALL_ROOT = $(INSTALL_ROOT)/usr +GSM_INSTALL_LIB = $(GSM_INSTALL_ROOT)/$(SLIB) +GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include/gsm +GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/share/man/man3 # Where do you want to install the toast binaries and their manpage? @@ -89,14 +91,15 @@ GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/man/man3 # Leave TOAST_INSTALL_ROOT empty to not install the toast binaries outside # of this directory. -TOAST_INSTALL_ROOT = $(INSTALL_ROOT) +TOAST_INSTALL_ROOT = $(INSTALL_ROOT)/usr TOAST_INSTALL_BIN = $(TOAST_INSTALL_ROOT)/bin -TOAST_INSTALL_MAN = $(TOAST_INSTALL_ROOT)/man/man1 +TOAST_INSTALL_MAN = $(TOAST_INSTALL_ROOT)/share/man/man1 # Other tools +MV = mv SHELL = /bin/sh -LN = ln +LN = ln -s BASENAME = basename AR = ar ARFLAGS = cr @@ -140,6 +143,7 @@ LFLAGS = $(LDFLAGS) $(LDINC) # Targets LIBGSM = $(LIB)/libgsm.a +LIBGSMSO= $(LIB)/libgsm.so TOAST = $(BIN)/toast UNTOAST = $(BIN)/untoast @@ -222,6 +226,8 @@ GSM_OBJECTS = $(SRC)/add.o \ $(SRC)/short_term.o \ $(SRC)/table.o +GSM_SHOBJECTS = $(foreach OBJX,$(GSM_OBJECTS),$(patsubst $(SRC)/%,shared/%,$(OBJX))) + TOAST_OBJECTS = $(SRC)/toast.o \ $(SRC)/toast_lin.o \ $(SRC)/toast_ulaw.o \ @@ -257,7 +263,7 @@ STUFF = ChangeLog \ # Install targets GSM_INSTALL_TARGETS = \ - $(GSM_INSTALL_LIB)/libgsm.a \ + $(GSM_INSTALL_LIB)/libgsm.so.1.0.10 \ $(GSM_INSTALL_INC)/gsm.h \ $(GSM_INSTALL_MAN)/gsm.3 \ $(GSM_INSTALL_MAN)/gsm_explode.3 \ @@ -274,12 +280,12 @@ TOAST_INSTALL_TARGETS = \ # Default rules .c.o: - $(CC) $(CFLAGS) $? - @-mv `$(BASENAME) $@` $@ > /dev/null 2>&1 + $(CC) -c $(CFLAGS) $? -o $@ +# @-mv `$(BASENAME) $@` $@ > /dev/null 2>&1 # Target rules -all: $(LIBGSM) $(TOAST) $(TCAT) $(UNTOAST) +all: $(LIBGSMSO) $(TOAST) $(TCAT) $(UNTOAST) @-echo $(ROOT): Done. tst: $(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/test-result @@ -300,22 +306,31 @@ install: toastinstall gsminstall # The basic API: libgsm $(LIBGSM): $(LIB) $(GSM_OBJECTS) - -rm $(RMFLAGS) $(LIBGSM) $(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS) $(RANLIB) $(LIBGSM) +$(LIBGSMSO): $(LIBGSMSO).1.0.10 + $(LN) libgsm.so.1.0.10 $@ + +$(LIBGSMSO).1.0.10: $(GSM_SHOBJECTS) + mkdir -p $(LIB) + $(LD) -o $@ -shared -Wl,-soname,libgsm.so.1 $^ -lm + $(LN) libgsm.so.1.0.10 $(LIBGSMSO).1 + +shared/%.o: + mkdir -p shared + $(CC) -c $(CFLAGS) $(PICFLAGS) -o $@ $(addprefix $(SRC)/,$(patsubst %.o,%.c,$(@F))) + # 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) $(TCAT): $(BIN) $(TOAST) - -rm $(RMFLAGS) $(TCAT) $(LN) $(TOAST) $(TCAT) @@ -351,53 +366,47 @@ toastuninstall: fi $(TOAST_INSTALL_BIN)/toast: $(TOAST) - -rm $@ cp $(TOAST) $@ chmod 755 $@ $(TOAST_INSTALL_BIN)/untoast: $(TOAST_INSTALL_BIN)/toast - -rm $@ - ln $? $@ + ln -sf toast $@ $(TOAST_INSTALL_BIN)/tcat: $(TOAST_INSTALL_BIN)/toast - -rm $@ - ln $? $@ + ln -sf toast $@ $(TOAST_INSTALL_MAN)/toast.1: $(MAN)/toast.1 - -rm $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_MAN)/gsm.3: $(MAN)/gsm.3 - -rm $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_MAN)/gsm_option.3: $(MAN)/gsm_option.3 - -rm $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_MAN)/gsm_explode.3: $(MAN)/gsm_explode.3 - -rm $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_MAN)/gsm_print.3: $(MAN)/gsm_print.3 - -rm $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_INC)/gsm.h: $(INC)/gsm.h - -rm $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_LIB)/libgsm.a: $(LIBGSM) - -rm $@ cp $? $@ chmod 444 $@ +$(GSM_INSTALL_LIB)/libgsm.so.1.0.10: $(LIBGSMSO).1.0.10 + cp $? $@ + ln -sf libgsm.so.1.0.10 $(GSM_INSTALL_LIB)/libgsm.so.1 + ln -sf libgsm.so.1.0.10 $(GSM_INSTALL_LIB)/libgsm.so # Distribution @@ -473,22 +482,22 @@ $(ADDTST)/add: $(ADDTST)/add_test.o $(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)