[virt-tools-list] [PATCH 41/47] Add proper ELF versioning
Daniel P. Berrange
berrange at redhat.com
Wed Aug 25 19:37:36 UTC 2010
Rename library to libosinfo-1.0.la to allow parallel install if
we need to break ABI in the future. Add per-symbol version tagging
to allow fine grained automatic RPM dependancies. Make version
script portable to Win32
* configure.ac: Detect args for linker symbol file / format
* osinfo/Makefile.am: Rename library and use symbol versioning
* osinfo/libosinfo.syms: Symbol version script
---
configure.ac | 42 +++++++++++++++++++++++-
osinfo/Makefile.am | 37 ++++++++++++++++----
osinfo/libosinfo.syms | 86 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 156 insertions(+), 9 deletions(-)
create mode 100644 osinfo/libosinfo.syms
diff --git a/configure.ac b/configure.ac
index 692328c..a088ae7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([libosinfo], [0.2], [virt-tools-list at redhat.com])
+AC_INIT([libosinfo], [0.2.0], [virt-tools-list at redhat.com])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([1.11.1 foreign color-tests])
@@ -20,6 +20,46 @@ LIBXML_REQUIRED=2.6.0
#PKG_CHECK_MODULES([GLIB], [glib-2.0], [GLIB_FOUND=yes], [GLIB_FOUND=no])
PKG_CHECK_MODULES([GOBJECT], [gobject-2.0], [GOBJECT_FOUND=yes], [GOBJECT_FOUND=no])
+LIBOSINFO_MAJOR_VERSION=`echo $VERSION | awk -F. '{print $1}'`
+LIBOSINFO_MINOR_VERSION=`echo $VERSION | awk -F. '{print $2}'`
+LIBOSINFO_MICRO_VERSION=`echo $VERSION | awk -F. '{print $3}'`
+LIBOSINFO_VERSION=$LIBOSINFO_MAJOR_VERSION.$LIBOSINFO_MINOR_VERSION.$LIBOSINFO_MICRO_VERSION$LIBOSINFO_MICRO_VERSION_SUFFIX
+LIBOSINFO_VERSION_INFO=`expr $LIBOSINFO_MAJOR_VERSION + $LIBOSINFO_MINOR_VERSION`:$LIBOSINFO_MICRO_VERSION:$LIBOSINFO_MINOR_VERSION
+LIBOSINFO_VERSION_NUMBER=`expr $LIBOSINFO_MAJOR_VERSION \* 1000000 + $LIBOSINFO_MINOR_VERSION \* 1000 + $LIBOSINFO_MICRO_VERSION`
+
+AC_SUBST([LIBOSINFO_MAJOR_VERSION])
+AC_SUBST([LIBOSINFO_MINOR_VERSION])
+AC_SUBST([LIBOSINFO_MICRO_VERSION])
+AC_SUBST([LIBOSINFO_VERSION])
+AC_SUBST([LIBOSINFO_VERSION_INFO])
+AC_SUBST([LIBOSINFO_VERSION_NUMBER])
+
+NO_UNDEFINED_LDFLAGS=
+VERSION_SCRIPT_FLAGS=
+USE_VERSION_DEFS=0
+case "$host" in
+ *-*-mingw*)
+ VERSION_SCRIPT_FLAGS="-Wl,"
+ USE_VERSION_DEFS=1
+ NO_UNDEFINED_FLAGS="-no-undefined"
+ ;;
+
+ *-*-cygwin*)
+ NO_UNDEFINED_LDFLAGS="-no-undefined"
+ ;;
+
+ *)
+ NO_UNDEFINED_FLAGS="-Wl,--no-undefined"
+ VERSION_SCRIPT_FLAGS=-Wl,--version-script=
+ `ld --help 2>&1 | grep -- --version-script >/dev/null` || \
+ VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
+ ;;
+esac
+AC_SUBST([NO_UNDEFINED_FLAGS])
+AC_SUBST([VERSION_SCRIPT_FLAGS])
+AM_CONDITIONAL([USE_VERSION_DEFS], [test "$USE_VERSION_DEFS" = "1"])
+
+
dnl ==========================================================================
dnl find libxml2 library, borrowed from xmlsec
dnl ==========================================================================
diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
index cbe56d7..89ee4f9 100644
--- a/osinfo/Makefile.am
+++ b/osinfo/Makefile.am
@@ -1,18 +1,39 @@
-AM_CPPFLAGS = \
+EXTRA_DIST = libosinfo.syms
+
+if USE_VERSION_DEFS
+LIBOSINFO_VERSION_FILE = $(builddir)/libosinfo.def
+BUILT_SOURCES = $(LIBOSINFO_VERSION_FILE)
+
+%.def: %.syms
+ $(AM_V_GEN)rm -f -- $@-tmp $@ ; \
+ printf 'EXPORTS\n' > $@-tmp && \
+ sed -e '/^$$/d; /#/d; /:/d; /\}/d; /\*/d; /LIBVIRT_/d; s/[ \t]*\(.*\)\;/ \1/g' $^ >> $@-tmp && \
+ chmod a-w $@-tmp && \
+ mv $@-tmp $@
+
+else
+LIBOSINFO_VERSION_FILE = libosinfo.syms
+endif
+
+lib_LTLIBRARIES = libosinfo-1.0.la
+
+libosinfo_1_0_la_CFLAGS = \
$(WARN_CFLAGS) \
-I$(top_srcdir) \
$(LIBXML_CFLAGS) \
$(GOBJECT_CFLAGS)
-libosinfo_la_LDFLAGS = \
- $(LIBXML_LIBS) \
- $(GOBJECT_LIBS) -Wl,-no-undefined
-lib_LTLIBRARIES = libosinfo.la
+libosinfo_1_0_la_LDFLAGS = \
+ $(LIBXML_LIBS) \
+ $(GOBJECT_LIBS) \
+ $(VERSION_SCRIPT_FLAGS)$(LIBOSINFO_VERSION_FILE) \
+ -version-info $(LIBOSINFO_VERSION_INFO) \
+ $(NO_UNDEFINED_FLAGS)
-libosinfo_includedir = $(includedir)/osinfo-1.0/osinfo
+libosinfo_1_0_includedir = $(includedir)/osinfo-1.0/osinfo
-libosinfo_include_HEADERS = \
+libosinfo_1_0_include_HEADERS = \
osinfo_db.h \
osinfo_device.h \
osinfo_devicelist.h \
@@ -25,7 +46,7 @@ libosinfo_include_HEADERS = \
osinfo_osfilter.h \
osinfo_oslist.h
-libosinfo_la_SOURCES = \
+libosinfo_1_0_la_SOURCES = \
osinfo_entity.c \
osinfo_filter.c \
osinfo_list.c \
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
new file mode 100644
index 0000000..e407d47
--- /dev/null
+++ b/osinfo/libosinfo.syms
@@ -0,0 +1,86 @@
+LIBOSINFO_0.0.1 {
+ global:
+ osinfo_db_get_type;
+ osinfo_db_new;
+ osinfo_db_initialize;
+ osinfo_db_get_hypervisor;
+ osinfo_db_get_device;
+ osinfo_db_get_os;
+ osinfo_db_get_os_list;
+ osinfo_db_get_hypervisor_list;
+ osinfo_db_get_device_list;
+ osinfo_db_unique_values_for_property_in_os;
+ osinfo_db_unique_values_for_property_in_hv;
+ osinfo_db_unique_values_for_property_in_dev;
+ osinfo_db_unique_values_for_os_relationship;
+ osinfo_device_get_type;
+ osinfo_device_new;
+ osinfo_devicelist_get_type;
+ osinfo_devicelist_new;
+ osinfo_devicelist_new_filtered;
+ osinfo_devicelist_new_intersection;
+ osinfo_devicelist_new_union;
+ osinfo_entity_get_type;
+ osinfo_entity_get_id;
+ osinfo_entity_get_param_keys;
+ osinfo_entity_get_param_value;
+ osinfo_entity_get_param_value_list;
+ osinfo_entity_add_param;
+ osinfo_entity_clear_param;
+ osinfo_filter_get_type;
+ osinfo_filter_new;
+ osinfo_filter_add_constraint;
+ osinfo_filter_clear_constraint;
+ osinfo_filter_clear_constraints;
+ osinfo_filter_get_constraint_keys;
+ osinfo_filter_get_constraint_values;
+ osinfo_filter_matches;
+ osinfo_hypervisor_get_type;
+ osinfo_hypervisor_new;
+ osinfo_hypervisor_get_devices;
+ osinfo_hypervisor_add_device;
+ osinfo_hypervisorlist_get_type;
+ osinfo_hypervisorlist_new;
+ osinfo_hypervisorlist_new_filtered;
+ osinfo_hypervisorlist_new_intersection;
+ osinfo_hypervisorlist_new_union;
+ osinfo_list_get_type;
+ osinfo_list_get_length;
+ osinfo_list_get_nth;
+ osinfo_list_find_by_id;
+ osinfo_list_add;
+ osinfo_list_add_filtered;
+ osinfo_list_add_intersection;
+ osinfo_list_add_union;
+ osinfo_list_foreach;
+ osinfo_osfilter_get_type;
+ osinfo_osfilter_new;
+ osinfo_osfilter_add_os_constraint;
+ osinfo_osfilter_clear_os_constraint;
+ osinfo_osfilter_clear_os_constraints;
+ osinfo_osfilter_get_os_constraint_values;
+ osinfo_os_get_type;
+ osinfo_os_new;
+ osinfo_os_get_preferred_device;
+ osinfo_os_get_related;
+ osinfo_os_get_devices;
+ osinfo_os_add_device;
+ osinfo_os_add_related_os;
+ osinfo_oslist_get_type;
+ osinfo_oslist_new;
+ osinfo_oslist_new_filtered;
+ osinfo_oslist_new_intersection;
+ osinfo_oslist_new_union;
+
+ local:
+ *;
+};
+
+/* Symbols in next release...
+
+ LIBOSINFO_0.0.2 {
+ global:
+ ...
+ } LIBOSINFO_0.0.1;
+
+*/
--
1.7.2.1
More information about the virt-tools-list
mailing list