From fda4a47cae26733e80952b70ad27a0891e20d6c5 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 10 Mar 2017 14:33:52 -0300 Subject: [PATCH] libostree: add versioning macros OSTree currently provides no way to inspect the versioning information at run time, being only available at compile time through pkg-config. This is a problem for e.g. Flatpak, that needs to check whether the 'update-frequency' option is available. Checking at compile time isn't great since it's not looking for new symbols, but only if an optional feature is present. This commit, then, adds a new header that is generated at compile time, exposing OSTree's versioning information. Closes: #728 Approved by: cgwalters --- Makefile-libostree-defines.am | 4 ++ Makefile-libostree.am | 5 +- Makefile-ostree.am | 2 +- apidoc/Makefile.am | 2 +- configure.ac | 12 ++++- src/libostree/ostree-version.h.in | 82 +++++++++++++++++++++++++++++++ src/libostree/ostree.h | 1 + 7 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 src/libostree/ostree-version.h.in diff --git a/Makefile-libostree-defines.am b/Makefile-libostree-defines.am index e3ec3950c1..1531cf8c18 100644 --- a/Makefile-libostree-defines.am +++ b/Makefile-libostree-defines.am @@ -37,3 +37,7 @@ libostree_public_headers = \ src/libostree/ostree-bootconfig-parser.h \ src/libostree/ostree-repo-deprecated.h \ $(NULL) + +# This one is generated via configure.ac, and the gtk-doc +# code hence needs to look in the builddir. +libostree_public_built_headers = src/libostree/ostree-version.h diff --git a/Makefile-libostree.am b/Makefile-libostree.am index 70452f1ae8..901208a2ab 100644 --- a/Makefile-libostree.am +++ b/Makefile-libostree.am @@ -44,7 +44,7 @@ libostree_kernel_args_la_LIBADD = $(OT_INTERNAL_GIO_UNIX_LIBS) lib_LTLIBRARIES += libostree-1.la libostreeincludedir = $(includedir)/ostree-1 -libostreeinclude_HEADERS = $(libostree_public_headers) +libostreeinclude_HEADERS = $(libostree_public_headers) $(libostree_public_built_headers) ENUM_TYPES = $(NULL) ENUM_TYPES += $(srcdir)/src/libostree/ostree-fetcher.h @@ -225,7 +225,8 @@ EXTRA_DIST += src/libostree/README-gpg src/libostree/bupsplit.h \ src/libostree/ostree-enumtypes.h.template \ src/libostree/ostree-enumtypes.c.template \ src/libostree/ostree-deployment-private.h \ - src/libostree/ostree-repo-deprecated.h + src/libostree/ostree-repo-deprecated.h \ + src/libostree/ostree-version.h install-mkdir-remotes-d-hook: mkdir -p $(DESTDIR)$(sysconfdir)/ostree/remotes.d diff --git a/Makefile-ostree.am b/Makefile-ostree.am index 0b520c68ea..4bd623d776 100644 --- a/Makefile-ostree.am +++ b/Makefile-ostree.am @@ -105,7 +105,7 @@ EXTRA_DIST += src/ostree/parse-datetime.y CLEANFILES += src/ostree/parse-datetime.c ostree_bin_shared_cflags = $(AM_CFLAGS) -I$(srcdir)/src/libotutil -I$(srcdir)/src/libostree \ - -I$(srcdir)/src/ostree -I$(srcdir)/libglnx $(OT_INTERNAL_GIO_UNIX_CFLAGS) \ + -I$(builddir)/src/libostree -I$(srcdir)/src/ostree -I$(srcdir)/libglnx $(OT_INTERNAL_GIO_UNIX_CFLAGS) \ -DPKGLIBEXECDIR=\"$(pkglibexecdir)\" ostree_bin_shared_ldadd = $(AM_LDFLAGS) libglnx.la libotutil.la libostree-1.la \ $(OT_INTERNAL_GIO_UNIX_LIBS) diff --git a/apidoc/Makefile.am b/apidoc/Makefile.am index baa7207a6b..730a4c3310 100644 --- a/apidoc/Makefile.am +++ b/apidoc/Makefile.am @@ -60,7 +60,7 @@ FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c -HFILE_GLOB=$(addprefix $(top_srcdir)/,$(libostree_public_headers)) +HFILE_GLOB=$(addprefix $(top_srcdir)/,$(libostree_public_headers)) $(addprefix $(top_builddir)/,$(libostree_public_built_headers)) CFILE_GLOB=$(top_srcdir)/src/libostree/*.c # Header files to ignore when scanning. diff --git a/configure.ac b/configure.ac index 088944806b..64f1fa4b51 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,10 @@ AC_PREREQ([2.63]) dnl If incrementing the version here, remember to update libostree.sym too -AC_INIT([libostree], [2017.3], [walters@verbum.org]) +m4_define([year_version], [2017]) +m4_define([release_version], [3]) +m4_define([package_version], [year_version.release_version]) + +AC_INIT([libostree], [package_version], [walters@verbum.org]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_MACRO_DIR([buildutil]) AC_CONFIG_AUX_DIR([build-aux]) @@ -16,6 +20,11 @@ AC_PROG_CC AM_PROG_CC_C_O AC_PROG_YACC +dnl Versioning information +AC_SUBST([YEAR_VERSION], [year_version]) +AC_SUBST([RELEASE_VERSION], [release_version]) +AC_SUBST([PACKAGE_VERSION], [package_version]) + CC_CHECK_FLAGS_APPEND([WARN_CFLAGS], [CFLAGS], [\ -pipe \ -Wall \ @@ -398,6 +407,7 @@ AC_CONFIG_FILES([ Makefile apidoc/Makefile src/libostree/ostree-1.pc +src/libostree/ostree-version.h ]) AC_OUTPUT diff --git a/src/libostree/ostree-version.h.in b/src/libostree/ostree-version.h.in new file mode 100644 index 0000000000..8a4776d88d --- /dev/null +++ b/src/libostree/ostree-version.h.in @@ -0,0 +1,82 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2017 Georges Basile Stavracas Neto + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2 of the licence or (at + * your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#pragma once + +/** + * SECTION:ostree-version + * @short_description: ostree version checking + * + * ostree provides macros to check the version of the library + * at compile-time + */ + +/** + * OSTREE_YEAR_VERSION: + * + * ostree year version component (e.g. 2017 if %OSTREE_VERSION is 2017.2) + */ +#define OSTREE_YEAR_VERSION (@YEAR_VERSION@) + +/** + * OSTREE_RELEASE_VERSION: + * + * ostree release version component (e.g. 2 if %OSTREE_VERSION is 2017.2) + */ +#define OSTREE_RELEASE_VERSION (@RELEASE_VERSION@) + +/** + * OSTREE_VERSION + * + * ostree version. + */ +#define OSTREE_VERSION (@VERSION@) + +/** + * OSTREE_VERSION_S: + * + * ostree version, encoded as a string, useful for printing and + * concatenation. + */ +#define OSTREE_VERSION_S "@VERSION@" + +#define OSTREE_ENCODE_VERSION(year,release) \ + ((year) << 16 | (release)) + +/** + * OSTREE_VERSION_HEX: + * + * ostree version, encoded as an hexadecimal number, useful for + * integer comparisons. + */ +#define OSTREE_VERSION_HEX \ + (OSTREE_ENCODE_VERSION (OSTREE_YEAR_VERSION, OSTREE_RELEASE_VERSION)) + +/** + * OSTREE_CHECK_VERSION: + * @year: required year version + * @release: required release version + * + * Compile-time version checking. Evaluates to %TRUE if the version + * of ostree is equal or greater than the required one. + */ +#define OSTREE_CHECK_VERSION(year,release) \ + (OSTREE_YEAR_VERSION >= (year) || \ + (OSTREE_YEAR_VERSION == (year) && OSTREE_RELEASE_VERSION >= (release))) diff --git a/src/libostree/ostree.h b/src/libostree/ostree.h index 9846a7e3a1..eb4ed8d3a3 100644 --- a/src/libostree/ostree.h +++ b/src/libostree/ostree.h @@ -33,3 +33,4 @@ #include #include +#include