/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
 * Copyright (c) 2014-2017, Regents of the University of California
 *
 * This file is part of NDN DeLorean, An Authentication System for Data Archives in
 * Named Data Networking.  See AUTHORS.md for complete list of NDN DeLorean authors
 * and contributors.
 *
 * NDN DeLorean is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * NDN DeLorean 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with NDN
 * DeLorean, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef NDN_DELOREAN_VERSION_HPP
#define NDN_DELOREAN_VERSION_HPP

namespace nsl {

/** NDN DeLorean version follows Semantic Versioning 2.0.0 specification
 *  http://semver.org/
 */

// To change version number, modify VERSION variable in top-level wscript.

/** \brief NDN DeLorean version represented as an integer
 *
 *  MAJOR*1000000 + MINOR*1000 + PATCH
 */
#define NDN_DELOREAN_VERSION @VERSION@

/** \brief NDN DeLorean version represented as a string
 *
 *  MAJOR.MINOR.PATCH
 */
#define NDN_DELOREAN_VERSION_STRING "@VERSION_STRING@"

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

/// MAJOR version
#define NDN_DELOREAN_VERSION_MAJOR @VERSION_MAJOR@
/// MINOR version
#define NDN_DELOREAN_VERSION_MINOR @VERSION_MINOR@
/// PATCH version
#define NDN_DELOREAN_VERSION_PATCH @VERSION_PATCH@

} // namespace nsl

#endif // NDN_DELOREAN_VERSION_HPP
