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