update library build procedure
authorNathan Lynch <ntl@pobox.com>
Thu, 16 Oct 2008 09:05:57 +0000 (04:05 -0500)
committerNathan Lynch <ntl@pobox.com>
Thu, 16 Oct 2008 18:58:45 +0000 (13:58 -0500)
This sets the soname properly, and creates the (I think?) appropriate
links:

libtopology.so -> libtopology.so.MAJOR
libtopology.so.MAJOR -> libtopology.so.MAJOR.MINOR

libtopology.so.MAJOR.MINOR is now the output file.

Makefile
lib/module.mk

index d3bc8b8758ae9cf3d462f9db59ce832758580c41..bfd8e2f39bb80fb78c795e73b446045bb96af651 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -10,14 +10,23 @@ subdirectory = $(patsubst %/module.mk,%,                    \
                 $(word                                         \
                   $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
 
-# $(call make-library-shared, library-name, source-file-list)
-define make-library-shared
-  libraries-shared += $1
+# $(call shared-lib-template, libfoo.so, sources, major, minor)
+define shared-lib-template
   sources += $2
-  soname := $3
-
-  $1: $(call source-to-object,$2)
-       $(CC) $(LDFLAGS) -shared -Wl,-soname,$(soname) -o $$@ $$^
+  major := $3
+  minor := $4
+  soname := $$(notdir $1).$$(major)
+  target := $1
+  targetm := $$(target).$$(major)
+  targetmm := $$(targetm).$$(minor)
+  inst_libs += $$(targetmm) $$(targetm) $$(target)
+  libraries-shared += $$(targetmm) $$(targetm) $$(target)
+  $$(targetmm): $(call source-to-object,$2)
+       $(CC) $(CFLAGS) -shared -Wl,-soname,$$(soname) -o $$@ $$^
+  $$(targetm): $$(targetmm)
+       $(LN) $$(notdir $$<) $$@
+  $$(target): $$(targetm)
+       $(LN) $$(notdir $$<) $$@
 endef
 
 # fixme: need dependencies generated for tests
@@ -52,6 +61,8 @@ GCC := gcc
 CC := $(GCC)
 CC_MAKEDEP := $(GCC)
 ARFLAGS := r
+LN := ln -s
+CP := cp -a
 
 modules   := lib programs tests
 programs  :=
@@ -73,7 +84,7 @@ inst_libdir = $(inst_prefix)/lib
 inst_includedir = $(inst_prefix)/include
 
 # fixme: these should be updated by submodules...
-inst_libs := lib/libtopology.so
+inst_libs :=
 inst_headers := include/topology.h
 
 # allow user to run valgrind on tests with VALGRIND=1 on cmdline
@@ -118,7 +129,7 @@ clean:
 install: $(inst_libs) $(inst_headers)
        @echo Installing to $(inst_prefix)
        @$(MKDIR) $(inst_libdir) && \
-       $(INSTALL) $(inst_libs) $(inst_libdir)
+       $(CP) $(inst_libs) $(inst_libdir)
        @$(MKDIR) $(inst_includedir) && \
        $(INSTALL) -m 644 $(inst_headers) $(inst_includedir)
 
index 59e83093bb2b2d3470e9b09c65a82a9b3dea6617..03134fbe967a8c4a7fcfa5b2a262d169dbcfa581 100644 (file)
@@ -1,5 +1,4 @@
 local_src := $(wildcard $(subdirectory)/*.c)
-libtopology_soname := libtopology.so.0
 
-$(eval $(call make-library-shared, $(subdirectory)/libtopology.so, \
-       $(local_src), $(libtopology_soname)))
+$(eval $(call shared-lib-template, $(subdirectory)/libtopology.so, \
+       $(local_src), 0, 0))
\ No newline at end of file