Update libfmap naming and install rule

This updates the libfmap .so filename to better match GNU convention
and also updates the soname (seen when running objdump -x). It also
updates the installation so that the package installs symbolic links.

(Note: There was also some disambiguation between the lib directory
 belonging to the system and the lib directory belonging to the source)

BUG=chrome-os-partner:6600
TEST=locally built for arm-generic and amd64-generic targets

Change-Id: Ib1002f20a1a324bd9583f617f59cf3804e06659c
diff --git a/Makefile b/Makefile
index 9fc5c59..cc794fe 100644
--- a/Makefile
+++ b/Makefile
@@ -46,9 +46,15 @@
 INSTALL_DIR	:= $(INSTALL) -m 755 -d
 INSTALL_PROGRAM	:= $(INSTALL) -m 755
 
+LN		= ln
+SYMLINK		= $(LN) -sf
+
+# OS package manager may set LIBDIR with respect to 32-bit/64-bit environment
+LIBDIR		?= lib
+
 prefix		= /usr/local
 sbindir		= $(prefix)/sbin
-libdir		= $(prefix)/lib
+libdir		= $(prefix)/$(LIBDIR)
 includedir	= $(prefix)/include
 
 pkgconfig_dir	= /usr/lib/pkgconfig
@@ -61,18 +67,20 @@
 
 PROGRAMS	= fmap_decode fmap_encode fmap_csum libfmap_example
 TEST_PROGRAM	= fmap_test
-SHARED_OBJ	= libfmap.so
-SHARED_OBJ_FILE	= libfmap-$(VERSION_MAJOR).$(VERSION_MINOR).so
-LIB		= lib
+SRC_LIBDIR	= lib
 GENHTML_OUTPUT	?= html
 
+SHARED_OBJ		= libfmap
+SHARED_OBJ_FILE		= $(SHARED_OBJ).so.0.0.0
+SHARED_OBJ_SONAME	= $(SHARED_OBJ).so.0
+
 SVNVERSION := $(shell LC_ALL=C svnversion -cn . 2>/dev/null | sed -e "s/.*://" -e "s/\([0-9]*\).*/\1/" | grep "[0-9]" || LC_ALL=C svn info . 2>/dev/null | awk '/^Revision:/ {print $$2 }' | grep "[0-9]" || LC_ALL=C git svn info . 2>/dev/null | awk '/^Revision:/ {print $$2 }' | grep "[0-9]" || echo unknown)
 
 RELEASENAME := $(PACKAGE_NAME)-$(VERSION_MAJOR).$(VERSION_MINOR)-r$(SVNVERSION)
 
 export CFLAGS
 
-all: $(PROGRAMS) $(SHARED_OBJ)
+all: $(PROGRAMS) $(SHARED_OBJ_FILE)
 
 help:
 	@echo "flashmap build targets:"
@@ -84,21 +92,21 @@
 	@echo ""
 
 
-$(LIB)/libfmap.a:
-	@$(MAKE) -C $(LIB)
-	ar rcs $@ $(LIB)/*.o
+$(SRC_LIBDIR)/libfmap.a:
+	@$(MAKE) -C $(SRC_LIBDIR)
+	ar rcs $@ $(SRC_LIBDIR)/*.o
 
-$(SHARED_OBJ): $(LIB)/libfmap.a
-	$(CC) -fpic -shared -Wl,-soname,$@ -o $(SHARED_OBJ_FILE) -Wl,-whole-archive $^ -Wl,-no-whole-archive
+$(SHARED_OBJ_FILE): $(SRC_LIBDIR)/libfmap.a
+	$(CC) -fpic -shared -Wl,-soname,$(SHARED_OBJ_SONAME) -o $@ -Wl,-whole-archive $^ -Wl,-no-whole-archive
 
-$(PROGRAMS): $(LIB)/libfmap.a
+$(PROGRAMS): $(SRC_LIBDIR)/libfmap.a
 	$(CC) $(CFLAGS) $(LINKOPTS) -I. -o $@ $@.c $^
 
 # Add shared object filename to gcc command in case it's not installed already
-$(LIBFMAP_EXAMPLE): $(SHARED_OBJ)
+$(LIBFMAP_EXAMPLE): $(SHARED_OBJ_FILE)
 	$(CC) $(CFLAGS) $(LINKOPTS) -o $@ $@.c $(SHARED_OBJ_FILE)
 
-$(TEST_PROGRAM): $(LIB)/libfmap.a
+$(TEST_PROGRAM): $(SRC_LIBDIR)/libfmap.a
 	$(CC) $(CFLAGS) $(LINKOPTS) -I. -o $@ $@.c $^
 
 test: CFLAGS += $(CFLAGS_GCOV)
@@ -170,7 +178,9 @@
 	$(INSTALL_DATA) lib/fmap.h $(DESTDIR)$(includedir)
 	$(INSTALL_DATA) lib/valstr.h $(DESTDIR)$(includedir)
 	$(INSTALL_DATA) $(SHARED_OBJ_FILE) $(DESTDIR)$(libdir)
-	@echo Installed shared library, please run ldconfig to set up symlinks.
+	$(SYMLINK) $(SHARED_OBJ_FILE) $(DESTDIR)$(libdir)/$(SHARED_OBJ).so
+	$(SYMLINK) $(SHARED_OBJ_FILE) $(DESTDIR)$(libdir)/$(SHARED_OBJ).so.0
+	@echo Installed shared library, please run ldconfig.
 
 ifeq ($(USE_PKG_CONFIG),1)
 pkgconfig_uninstall:
@@ -186,8 +196,9 @@
 	$(RM) $(DESTDIR)$(sbindir)/fmap_csum
 	$(RM) $(DESTDIR)$(includedir)/fmap.h
 	$(RM) $(DESTDIR)$(includedir)/valstr.h
-	$(RM) $(DESTDIR)$(libdir)/$(SHARED_OBJ)
 	$(RM) $(DESTDIR)$(libdir)/$(SHARED_OBJ_FILE)
+	$(RM) $(DESTDIR)$(libdir)/$(SHARED_OBJ).so
+	$(RM) $(DESTDIR)$(libdir)/$(SHARED_OBJ).so.0
 
 .PHONY: clean
 RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o
@@ -202,7 +213,7 @@
 
 clean: lcov-clean
 	rm -f *.o *.a $(PROGRAMS) $(TEST_PROGRAM) $(LIBFMAP_EXAMPLE) $(SHARED_OBJ_FILE)
-	@$(MAKE) -C $(LIB) clean
+	@$(MAKE) -C $(SRC_LIBDIR) clean
 
 %.o: %.c
 	$(CC) $(CFLAGS) -c $^ -I. -o $@