[Libva] [PATCH 1/3] API: fix versioning.

Gwenole Beauchesne gb.devel at gmail.com
Sun Oct 16 10:43:09 PDT 2011


We have to consider three distinct versions at this time: the VA-API
version, the library package version number, and the DSO version.

* VA-API version:
- increment major for any ABI change (which shall not occur!)
- increment minor for any interface change (e.g. new or modified function)
- increment micro for any other change (e.g. new flag, new codec definitions)
- reset micro version to zero when minor version is incremented
- reset minor version to zero when major version is incremented

* libva package version number:
- major version is automatically generated from VA-API major version
- minor version is automatically generated from VA-API minor version
- increment micro for any library release
- reset micro version to zero when VA-API major or minor version is incremented

* DSO version:
The SONAME shall remain to libva.so.1 for VA-API 0.x.y as long as the ABI
is not changed. Thus, the library name is generated as libva.<x>.<y>.0 where
<x> = VA-API major version + 1
<y> = 100 * VA-API minor version + VA-API micro version

For example:
VA-API 0.32.0 generates libva.so.1.3200.0 (libva 1.0.14 as of today)
VA-API 0.34.1 generates libva.so.1.3401.0 (e.g. libva 1.2.1)
VA-API 1.2.13 generates libva.so.2.213.0  (e.g. libva 2.2.13)

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
---
 configure.ac       |   67 ++++++++++++++++++++++++++++++++++++++++++---------
 va/va_version.h.in |   28 +++++++++++-----------
 2 files changed, 69 insertions(+), 26 deletions(-)

diff --git a/configure.ac b/configure.ac
index 0f50222..fe40fd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,21 +20,55 @@
 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
+# VA-API version
+# - increment major for any ABI change (which shall not occur!)
+# - increment minor for any interface change (e.g. new/modified function)
+# - increment micro for any other change (new flag, new codec definition, etc.)
+# - reset micro version to zero when minor version is incremented
+# - reset minor version to zero when major version is incremented
+m4_define([va_api_major_version], [0])
+m4_define([va_api_minor_version], [32])
+m4_define([va_api_micro_version], [0])
+
+m4_define([va_api_version],
+          [va_api_major_version.va_api_minor_version.va_api_micro_version])
+
 # libva package version number, (as distinct from shared library version)
-m4_define([libva_major_version], [0])
-m4_define([libva_minor_version], [32])
-m4_define([libva_micro_version], [0])
+# XXX: we want the package version to remain at 1.0.x for VA-API 0.32.y
+#
+# - major version is automatically generated from VA-API major version
+# - minor version is automatically generated from VA-API minor version
+# - increment micro for any library release
+# - reset micro version to zero when VA-API major or minor version is changed
+m4_define([libva_major_version], [m4_eval(va_api_major_version + 1)])
+m4_define([libva_minor_version], [m4_eval(va_api_minor_version - 32)])
+m4_define([libva_micro_version], [14])
 
 m4_define([libva_version],
           [libva_major_version.libva_minor_version.libva_micro_version])
 
-# if the library source code has changed, increment revision
-m4_define([libva_lt_revision], [14])
-# if any interface was added/removed/changed, then inc current, reset revision
-m4_define([libva_lt_current], [1])
-# if any interface was added since last public release, then increment age
-# if any interface was removed since last public release, then set age to 0
-m4_define([libva_lt_age], [0])
+# libva library version number (generated, do not change)
+# XXX: we want the SONAME to remain at libva.so.1 for VA-API major == 0
+#
+# The library name is generated libva.<x>.<y>.0 where
+# <x> = VA-API major version + 1
+# <y> = 100 * VA-API minor version + VA-API micro version
+#
+# For example:
+# VA-API 0.32.0 generates libva.so.1.3200.0
+# VA-API 0.34.1 generates libva.so.1.3401.0
+# VA-API 1.2.13 generates libva.so.2.213.0
+m4_define([libva_interface_bias], [m4_eval(va_api_major_version + 1)])
+m4_define([libva_interface_age],  [0])
+m4_define([libva_binary_age],
+          [m4_eval(100 * va_api_minor_version + va_api_micro_version - libva_interface_age)])
+
+m4_define([libva_lt_current],
+          [m4_eval(100 * va_api_minor_version + va_api_micro_version + libva_interface_bias)])
+m4_define([libva_lt_revision],
+          [m4_eval(libva_interface_age)])
+m4_define([libva_lt_age],
+          [m4_eval(libva_binary_age - libva_interface_age)])
 
 AC_PREREQ(2.57)
 AC_INIT([libva], [libva_version], [waldo.bastian at intel.com], libva)
@@ -44,6 +78,15 @@ AM_INIT_AUTOMAKE([dist-bzip2])
 AM_CONFIG_HEADER([config.h])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
+VA_API_MAJOR_VERSION=va_api_major_version
+VA_API_MINOR_VERSION=va_api_minor_version
+VA_API_MICRO_VERSION=va_api_micro_version
+VA_API_VERSION=va_api_version
+AC_SUBST(VA_API_MAJOR_VERSION)
+AC_SUBST(VA_API_MINOR_VERSION)
+AC_SUBST(VA_API_MICRO_VERSION)
+AC_SUBST(VA_API_VERSION)
+
 LIBVA_MAJOR_VERSION=libva_major_version
 LIBVA_MINOR_VERSION=libva_minor_version
 LIBVA_MICRO_VERSION=libva_micro_version
@@ -130,7 +173,7 @@ AM_CONDITIONAL(USE_EGL, test "$USE_EGL" = "yes")
 
 
 # Make sure drivers use the correctly versioned __vaDriverInit*() function name
-VA_DRIVER_INIT_FUNC="__vaDriverInit_${LIBVA_MAJOR_VERSION}_${LIBVA_MINOR_VERSION}"
+VA_DRIVER_INIT_FUNC="__vaDriverInit_${VA_API_MAJOR_VERSION}_${VA_API_MINOR_VERSION}"
 AC_DEFINE_UNQUOTED([VA_DRIVER_INIT_FUNC], [$VA_DRIVER_INIT_FUNC],
     [Defined to the versioned __vaDriverInit function name])
 AC_DEFINE_UNQUOTED([VA_DRIVER_INIT_FUNC_S], ["$VA_DRIVER_INIT_FUNC"],
@@ -175,7 +218,7 @@ AC_OUTPUT([
 # Print a small summary
 
 echo ""
-echo "libva - ${LIBVA_VERSION}"
+echo "libva - ${LIBVA_VERSION} (VA-API ${VA_API_VERSION})"
 echo ""
 
 echo " • Global :"
diff --git a/va/va_version.h.in b/va/va_version.h.in
index c9ea97a..6dd6982 100644
--- a/va/va_version.h.in
+++ b/va/va_version.h.in
@@ -28,43 +28,43 @@
 /**
  * VA_MAJOR_VERSION:
  *
- * The major version of the VA library (1, if %VA_VERSION is 1.2.3)
+ * The major version of VA-API (1, if %VA_VERSION is 1.2.3)
  */
-#define VA_MAJOR_VERSION   (@LIBVA_MAJOR_VERSION@)
+#define VA_MAJOR_VERSION   (@VA_API_MAJOR_VERSION@)
 
 /**
  * VA_MINOR_VERSION:
  *
- * The minor version of the VA library (2, if %VA_VERSION is 1.2.3)
+ * The minor version of VA-API (2, if %VA_VERSION is 1.2.3)
  */
-#define VA_MINOR_VERSION   (@LIBVA_MINOR_VERSION@)
+#define VA_MINOR_VERSION   (@VA_API_MINOR_VERSION@)
 
 /**
  * VA_MICRO_VERSION:
  *
- * The micro version of the VA library (3, if %VA_VERSION is 1.2.3)
+ * The micro version of VA-API (3, if %VA_VERSION is 1.2.3)
  */
-#define VA_MICRO_VERSION   (@LIBVA_MICRO_VERSION@)
+#define VA_MICRO_VERSION   (@VA_API_MICRO_VERSION@)
 
 /**
  * VA_VERSION:
  *
- * The full version of the VA library, like 1.2.3
+ * The full version of VA-API, like 1.2.3
  */
-#define VA_VERSION         @LIBVA_VERSION@
+#define VA_VERSION         @VA_API_VERSION@
 
 /**
  * VA_VERSION_S:
  *
- * The full version of the VA library, in string form (suited for
- * string concatenation)
+ * The full version of VA-API, in string form (suited for string
+ * concatenation)
  */
-#define VA_VERSION_S       "@LIBVA_VERSION@"
+#define VA_VERSION_S       "@VA_API_VERSION@"
 
 /**
  * VA_VERSION_HEX:
  *
- * Numerically encoded version of the VA library, like 0x010203
+ * Numerically encoded version of VA-API, like 0x010203
  */
 #define VA_VERSION_HEX     ((VA_MAJOR_VERSION << 24) | \
                             (VA_MINOR_VERSION << 16) | \
@@ -76,8 +76,8 @@
  * @minor: minor version, like 2 in 1.2.3
  * @micro: micro version, like 3 in 1.2.3
  *
- * Evaluates to %TRUE if the version of the VA library is greater
- * than @major, @minor and @micro
+ * Evaluates to %TRUE if the version of VA-API is greater than
+ * @major, @minor and @micro
  */
 #define VA_CHECK_VERSION(major,minor,micro) \
         (VA_MAJOR_VERSION > (major) || \
-- 
1.7.0.4



More information about the Libva mailing list