/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2014-2022, Regents of the University of California
 *
 * NAC library 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 3 of the License, or (at your option) any later version.
 *
 * NAC 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 copies of the GNU General Public License and GNU Lesser
 * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * See AUTHORS.md for complete list of NAC library authors and contributors.
 */

#ifndef NDN_NAC_VERSION_HPP
#define NDN_NAC_VERSION_HPP

// ndn-nac version follows Semantic Versioning 2.0.0
// https://semver.org/spec/v2.0.0.html

/**
 * \brief ndn-nac version represented as an integer.
 *
 * Equivalent to: #NDN_NAC_VERSION_MAJOR*1000000 + #NDN_NAC_VERSION_MINOR*1000 + #NDN_NAC_VERSION_PATCH
 */
#define NDN_NAC_VERSION @VERSION@

/// The major version of ndn-nac
#define NDN_NAC_VERSION_MAJOR @VERSION_MAJOR@
/// The minor version of ndn-nac
#define NDN_NAC_VERSION_MINOR @VERSION_MINOR@
/// The patch version of ndn-nac
#define NDN_NAC_VERSION_PATCH @VERSION_PATCH@

/**
 * \brief ndn-nac version represented as a string.
 *
 * Format:
 * @code
 * MAJOR.MINOR.PATCH
 * @endcode
 */
#define NDN_NAC_VERSION_STRING "@VERSION_STRING@"

/**
 * \brief ndn-nac version string, including git commit information if ndn-nac is built from a
 *        specific git commit.
 *
 * #NDN_NAC_VERSION_BUILD_STRING is obtained using the following command (`ndn-nac-` prefix is
 * afterwards removed): ``git describe --match 'ndn-nac-*'``
 *
 * When ndn-nac is not built from git, #NDN_NAC_VERSION_BUILD_STRING equals #NDN_NAC_VERSION_STRING.
 *
 * Format:
 * @code
 * MAJOR.MINOR.PATCH(-release-candidate-tag)(-(number-of-commits-since-tag)-COMMIT-HASH)
 * @endcode
 *
 * Example: 0.1.0-rc1-1-g5c86570
 */
#define NDN_NAC_VERSION_BUILD_STRING "@VERSION_BUILD@"

#endif // NDN_NAC_VERSION_HPP
