/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
 * Copyright (c) 2014-2016,  The University of Memphis,
 *                           Regents of the University of California
 *
 * This file is part of NLSR (Named-data Link State Routing).
 * See AUTHORS.md for complete list of NLSR authors and contributors.
 *
 * NLSR 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.
 *
 * NLSR 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
 * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
 **/

#ifndef NLSR_VERSION_HPP
#define NLSR_VERSION_HPP

namespace nlsr {

// NLSR version version follows Calendar Versioning (https://calver.org/)
// based on the year and month of the release, followed by an optional "patch" number,
// i.e., `YY.0M[.MICRO (integer without a leading zero)]` using CalVer notation.

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

/** \brief NLSR version represented as a string in the CalVer format
 */
#define NLSR_VERSION_STRING "@VERSION_STRING@"

/** \brief NLSR version string, including git commit information, if NLSR is build from
 *         specific git commit
 *
 * NLSR_VERSION_BUILD_STRING is obtained using the following command (`NLSR-` prefix is
 * afterwards removed):
 *
 *    `git describe --match 'NLSR-*'`
 *
 * When NLSR is built not from git, NLSR_VERSION_BUILD_STRING equals NLSR_VERSION_STRING
 *
 * YY.0M[.MICRO](-release-candidate-tag)(-(number-of-commits-since-tag)-COMMIT-HASH)
 *
 * Example: 20.01.1-rc1-1-g5c86570
 */
#define NLSR_VERSION_BUILD_STRING "@VERSION_BUILD@"

} // namespace nlsr

#endif // NLSR_VERSION_HPP
