mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-04 11:55:51 +00:00
move version specifier to Build.h
This commit is contained in:
committed by
Michael Legleux
parent
af575b1bcf
commit
458fac776c
@@ -6,3 +6,4 @@
|
||||
|
||||
# clang-format
|
||||
e41150248a97e4bdc1cf21b54650c4bb7c63928e
|
||||
2e542e7b0d94451a933c88778461cc8d3d7e6417
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
*clio*.log
|
||||
build/
|
||||
.python-version
|
||||
|
||||
15
CMake/ClioVersion.cmake
Normal file
15
CMake/ClioVersion.cmake
Normal file
@@ -0,0 +1,15 @@
|
||||
#[===================================================================[
|
||||
read version from source
|
||||
#]===================================================================]
|
||||
|
||||
file (STRINGS src/main/impl/Build.cpp BUILD_INFO)
|
||||
foreach (line_ ${BUILD_INFO})
|
||||
if (line_ MATCHES "versionString[ ]*=[ ]*\"(.+)\"")
|
||||
set (clio_version ${CMAKE_MATCH_1})
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (clio_version)
|
||||
message (STATUS "clio version: ${clio_version}")
|
||||
else ()
|
||||
message (FATAL_ERROR "unable to determine clio version")
|
||||
endif ()
|
||||
@@ -1 +0,0 @@
|
||||
#define VERSION "@PROJECT_VERSION@"
|
||||
@@ -1,6 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.16.3)
|
||||
|
||||
project(clio VERSION 0.2.0)
|
||||
project(clio)
|
||||
|
||||
option(BUILD_TESTS "Build tests" TRUE)
|
||||
|
||||
@@ -10,6 +10,22 @@ if(VERBOSE)
|
||||
set(FETCHCONTENT_QUIET FALSE CACHE STRING "Verbose FetchContent()")
|
||||
endif()
|
||||
|
||||
if(NOT GIT_COMMIT_HASH)
|
||||
if(VERBOSE)
|
||||
message(WARNING "GIT_COMMIT_HASH not provided...looking for git")
|
||||
endif()
|
||||
find_package(Git)
|
||||
if(Git_FOUND)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=8
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gch)
|
||||
if(gch)
|
||||
set(GIT_COMMIT_HASH "${gch}")
|
||||
message(STATUS "Git commit: ${GIT_COMMIT_HASH}")
|
||||
add_definitions(-DCLIO_GIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
|
||||
endif()
|
||||
endif()
|
||||
endif() #git
|
||||
|
||||
add_library(clio)
|
||||
target_compile_features(clio PUBLIC cxx_std_20)
|
||||
target_include_directories(clio PUBLIC src)
|
||||
@@ -17,14 +33,15 @@ target_include_directories(clio PUBLIC src)
|
||||
include(FetchContent)
|
||||
include(ExternalProject)
|
||||
include(CMake/settings.cmake)
|
||||
include(CMake/ClioVersion.cmake)
|
||||
include(CMake/deps/rippled.cmake)
|
||||
include(CMake/deps/Boost.cmake)
|
||||
include(CMake/deps/cassandra.cmake)
|
||||
include(CMake/deps/Postgres.cmake)
|
||||
|
||||
# configure_file(CMake/version-config.h include/version.h) # NOTE: Not used, but an idea how to handle versioning.
|
||||
|
||||
target_sources(clio PRIVATE
|
||||
## Main
|
||||
src/main/impl/Build.cpp
|
||||
## Backend
|
||||
src/backend/BackendInterface.cpp
|
||||
src/backend/CassandraBackend.cpp
|
||||
@@ -74,7 +91,7 @@ target_sources(clio PRIVATE
|
||||
# Utility
|
||||
src/rpc/handlers/Random.cpp)
|
||||
|
||||
add_executable(clio_server src/main.cpp)
|
||||
add_executable(clio_server src/main/main.cpp)
|
||||
target_link_libraries(clio_server PUBLIC clio)
|
||||
|
||||
if(BUILD_TESTS)
|
||||
|
||||
16
src/main/Build.h
Normal file
16
src/main/Build.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef CLIO_BUILD_INFO_H
|
||||
#define CLIO_BUILD_INFO_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace Build {
|
||||
|
||||
std::string const&
|
||||
getClioVersionString();
|
||||
|
||||
std::string const&
|
||||
getClioFullVersionString();
|
||||
|
||||
} // namespace Build
|
||||
|
||||
#endif // CLIO_BUILD_INFO_H
|
||||
57
src/main/impl/Build.cpp
Normal file
57
src/main/impl/Build.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include <ripple/beast/core/SemanticVersion.h>
|
||||
#include <boost/preprocessor/stringize.hpp>
|
||||
#include <algorithm>
|
||||
#include <main/Build.h>
|
||||
|
||||
namespace Build {
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// The build version number. You must edit this for each release
|
||||
// and follow the format described at http://semver.org/
|
||||
//------------------------------------------------------------------------------
|
||||
// clang-format off
|
||||
char const* const versionString = "0.2.0"
|
||||
// clang-format on
|
||||
|
||||
#if defined(DEBUG) || defined(SANITIZER)
|
||||
"+"
|
||||
#ifdef CLIO_GIT_COMMIT_HASH
|
||||
CLIO_GIT_COMMIT_HASH
|
||||
"."
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
"DEBUG"
|
||||
#ifdef SANITIZER
|
||||
"."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef SANITIZER
|
||||
BOOST_PP_STRINGIZE(SANITIZER)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
;
|
||||
|
||||
std::string const&
|
||||
getClioVersionString()
|
||||
{
|
||||
static std::string const value = [] {
|
||||
std::string const s = versionString;
|
||||
beast::SemanticVersion v;
|
||||
if (!v.parse(s) || v.print() != s)
|
||||
throw std::runtime_error(s + ": Bad server version string");
|
||||
return s;
|
||||
}();
|
||||
return value;
|
||||
}
|
||||
|
||||
std::string const&
|
||||
getClioFullVersionString()
|
||||
{
|
||||
static std::string const value = "clio-" + getClioVersionString();
|
||||
return value;
|
||||
}
|
||||
|
||||
} // namespace Build
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <fstream>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <main/Build.h>
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
@@ -170,6 +171,12 @@ main(int argc, char* argv[])
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (std::string{argv[1]} == "-v" || std::string{argv[1]} == "--version")
|
||||
{
|
||||
std::cout << Build::getClioFullVersionString() << std::endl;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
auto const config = parse_config(argv[1]);
|
||||
if (!config)
|
||||
{
|
||||
@@ -179,6 +186,10 @@ main(int argc, char* argv[])
|
||||
|
||||
initLogging(*config);
|
||||
|
||||
// Announce Clio version
|
||||
BOOST_LOG_TRIVIAL(info)
|
||||
<< "Clio version: " << Build::getClioFullVersionString();
|
||||
|
||||
auto ctx = parse_certs(*config);
|
||||
auto ctxRef = ctx
|
||||
? std::optional<std::reference_wrapper<ssl::context>>{ctx.value()}
|
||||
@@ -106,6 +106,14 @@ make_error(Error err)
|
||||
boost::json::object
|
||||
make_error(Status const& status)
|
||||
{
|
||||
if (status.error == ripple::rpcUNKNOWN)
|
||||
{
|
||||
return {
|
||||
{"error", status.message},
|
||||
{"type", "response"},
|
||||
{"status", "error"}};
|
||||
}
|
||||
|
||||
boost::json::object json;
|
||||
ripple::RPC::ErrorInfo const& info(
|
||||
ripple::RPC::get_error_info(status.error));
|
||||
|
||||
@@ -103,6 +103,14 @@ struct Status
|
||||
|
||||
Status(Error error_) : error(error_){};
|
||||
|
||||
// HACK. Some rippled handlers explicitly specify errors.
|
||||
// This means that we have to be able to duplicate this
|
||||
// functionality.
|
||||
Status(std::string const& message_)
|
||||
: error(ripple::rpcUNKNOWN), message(message_)
|
||||
{
|
||||
}
|
||||
|
||||
Status(Error error_, std::string message_)
|
||||
: error(error_), message(message_)
|
||||
{
|
||||
|
||||
@@ -357,7 +357,7 @@ doLedgerEntry(Context const& context)
|
||||
auto end = std::chrono::system_clock::now();
|
||||
|
||||
if (!dbResponse or dbResponse->size() == 0)
|
||||
return Status{Error::rpcOBJECT_NOT_FOUND, "entryNotFound"};
|
||||
return Status{"entryNotFound"};
|
||||
|
||||
response[JS(index)] = ripple::strHex(key);
|
||||
response[JS(ledger_hash)] = ripple::strHex(lgrInfo.hash);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <backend/BackendInterface.h>
|
||||
#include <etl/ETLSource.h>
|
||||
#include <etl/ReportingETL.h>
|
||||
#include <main/Build.h>
|
||||
#include <rpc/RPCHelpers.h>
|
||||
|
||||
namespace RPC {
|
||||
@@ -49,6 +50,7 @@ doServerInfo(Context const& context)
|
||||
{{"counters", "server_info"}}, context.clientIp, context.yield);
|
||||
|
||||
info[JS(load_factor)] = 1;
|
||||
info["clio_version"] = Build::getClioVersionString();
|
||||
if (serverInfoRippled && !serverInfoRippled->contains(JS(error)))
|
||||
{
|
||||
try
|
||||
@@ -57,6 +59,7 @@ doServerInfo(Context const& context)
|
||||
auto& rippledInfo = rippledResult.at(JS(info)).as_object();
|
||||
info[JS(load_factor)] = rippledInfo[JS(load_factor)];
|
||||
info[JS(validation_quorum)] = rippledInfo[JS(validation_quorum)];
|
||||
info["rippled_version"] = rippledInfo[JS(build_version)];
|
||||
}
|
||||
catch (std::exception const&)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user