/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
 *
 * Copyright (C) 2017 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
 * Copyright (C) 2017 Red Hat, Inc.
 *
 * 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:rpm-ostree-version
 * @short_description: Version checking
 *
 * Macros to check the version of the library at compile-time.
 */

/**
 * RPM_OSTREE_YEAR_VERSION:
 *
 * Year version component (e.g. 2017 if %RPM_OSTREE_VERSION is 2017.9)
 *
 * Since: 2017.8
 */
#define RPM_OSTREE_YEAR_VERSION (@YEAR_VERSION@)

/**
 * RPM_OSTREE_RELEASE_VERSION:
 *
 * Release version component (e.g. 9 if %RPM_OSTREE_VERSION is 2017.9)
 *
 * Since: 2017.8
 */
#define RPM_OSTREE_RELEASE_VERSION (@RELEASE_VERSION@)

/**
 * RPM_OSTREE_VERSION
 *
 * Since: 2017.8
 */
#define RPM_OSTREE_VERSION (@VERSION@)

/**
 * RPM_OSTREE_VERSION_S:
 *
 * Version encoded as a string, useful for printing and concatenation.
 *
 * Since: 2017.8
 */
#define RPM_OSTREE_VERSION_S "@VERSION@"

#define RPM_OSTREE_ENCODE_VERSION(year,release) \
        ((year) << 16 | (release))

/**
 * RPM_OSTREE_VERSION_HEX:
 *
 * ostree version, encoded as an hexadecimal number, useful for
 * integer comparisons.
 *
 * Since: 2017.8
 */
#define RPM_OSTREE_VERSION_HEX \
        (RPM_OSTREE_ENCODE_VERSION (RPM_OSTREE_YEAR_VERSION, RPM_OSTREE_RELEASE_VERSION))

/**
 * RPM_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.
 *
 * Since: 2017.8
 */
#define RPM_OSTREE_CHECK_VERSION(year,release)   \
        (RPM_OSTREE_YEAR_VERSION > (year) || \
         (RPM_OSTREE_YEAR_VERSION == (year) && RPM_OSTREE_RELEASE_VERSION >= (release)))
