Merge pull request #1336 from G10h4ck/rs_version

Clean up the mess with RetroShare version
This commit is contained in:
G10h4ck 2018-09-14 13:24:14 +02:00 committed by GitHub
commit d1804b480d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 199 additions and 189 deletions

View File

@ -1,3 +1,6 @@
git:
depth: 2000
language: cpp
matrix:

View File

@ -58,7 +58,7 @@ clone_folder: C:\projects\RetroShare
#shallow_clone: true # default is "false"
# set clone depth
clone_depth: 1 # clone entire repository history if not defined
clone_depth: 2000 # clone entire repository history if not defined
environment:
global:

View File

@ -31,19 +31,7 @@ registerHandler("$%apiPath%$",
const std::shared_ptr<rb::Session> session,
const rb::Bytes& body )
{
RsGenericSerializer::SerializeContext cReq(
nullptr, 0,
RsGenericSerializer::SERIALIZATION_FLAG_YIELDING );
RsJson& jReq(cReq.mJson);
jReq.Parse(reinterpret_cast<const char*>(body.data()), body.size());
RsGenericSerializer::SerializeContext cAns;
RsJson& jAns(cAns.mJson);
// if caller specified caller_data put it back in the answhere
const char kcd[] = "caller_data";
if(jReq.HasMember(kcd))
jAns.AddMember(kcd, jReq[kcd], jAns.GetAllocator());
INITIALIZE_API_CALL_JSON_CONTEXT;
if( !checkRsServicePtrReady(
$%instanceName%$, "$%instanceName%$", cAns, session ) )

View File

@ -24,19 +24,7 @@ registerHandler("$%apiPath%$",
const std::shared_ptr<rb::Session> session,
const rb::Bytes& body )
{
RsGenericSerializer::SerializeContext cReq(
nullptr, 0,
RsGenericSerializer::SERIALIZATION_FLAG_YIELDING );
RsJson& jReq(cReq.mJson);
jReq.Parse(reinterpret_cast<const char*>(body.data()), body.size());
RsGenericSerializer::SerializeContext cAns;
RsJson& jAns(cAns.mJson);
// if caller specified caller_data put it back in the answhere
const char kcd[] = "caller_data";
if(jReq.HasMember(kcd))
jAns.AddMember(kcd, jReq[kcd], jAns.GetAllocator());
INITIALIZE_API_CALL_JSON_CONTEXT;
if( !checkRsServicePtrReady(
$%instanceName%$, "$%instanceName%$", cAns, session ) )
@ -54,15 +42,7 @@ $%functionCall%$
$%outputParamsSerialization%$
// return them to the API caller
std::stringstream ss;
ss << jAns;
std::string&& ans(ss.str());
const std::multimap<std::string, std::string> headers
{
{ "Content-Type", "text/json" },
{ "Content-Length", std::to_string(ans.length()) }
};
session->close(rb::OK, ans, headers);
DEFAULT_API_CALL_JSON_RETURN(rb::OK);
} );
});

View File

@ -26,10 +26,38 @@
#include "util/rsjson.h"
#include "retroshare/rsfiles.h"
#include "util/radix64.h"
#include "retroshare/rsversion.h"
// Generated at compile time
#include "jsonapi-includes.inl"
#define INITIALIZE_API_CALL_JSON_CONTEXT \
RsGenericSerializer::SerializeContext cReq( \
nullptr, 0, \
RsGenericSerializer::SERIALIZATION_FLAG_YIELDING ); \
RsJson& jReq(cReq.mJson); \
jReq.Parse(reinterpret_cast<const char*>(body.data()), body.size()); \
\
RsGenericSerializer::SerializeContext cAns; \
RsJson& jAns(cAns.mJson); \
\
/* if caller specified caller_data put it back in the answhere */ \
const char kcd[] = "caller_data"; \
if(jReq.HasMember(kcd)) \
jAns.AddMember(kcd, jReq[kcd], jAns.GetAllocator())
#define DEFAULT_API_CALL_JSON_RETURN(RET_CODE) \
std::stringstream ss; \
ss << jAns; \
std::string&& ans(ss.str()); \
const std::multimap<std::string, std::string> headers \
{ \
{ "Content-Type", "text/json" }, \
{ "Content-Length", std::to_string(ans.length()) } \
}; \
session->close(RET_CODE, ans, headers)
static bool checkRsServicePtrReady(
void* serviceInstance, const std::string& serviceName,
RsGenericSerializer::SerializeContext& ctx,
@ -45,18 +73,12 @@ static bool checkRsServicePtrReady(
RsGenericSerializer::SerializeJob j(RsGenericSerializer::TO_JSON);
RS_SERIAL_PROCESS(jsonApiError);
std::stringstream ss;
ss << ctx.mJson;
std::string&& ans(ss.str());
const std::multimap<std::string, std::string> headers
{
{ "Content-Type", "text/json" },
{ "Content-Length", std::to_string(ans.length()) }
};
session->close(rb::CONFLICT, ans, headers);
RsJson& jAns(ctx.mJson);
DEFAULT_API_CALL_JSON_RETURN(rb::CONFLICT);
return false;
}
JsonApiServer::JsonApiServer(
uint16_t port, const std::string& bindAddress,
const std::function<void(int)> shutdownCallback ) :
@ -69,6 +91,32 @@ JsonApiServer::JsonApiServer(
shutdown();
});
registerHandler("/jsonApiServer/version",
[](const std::shared_ptr<rb::Session> session)
{
size_t reqSize = session->get_request()->get_header("Content-Length", 0);
session->fetch( reqSize, [](
const std::shared_ptr<rb::Session> session,
const rb::Bytes& body )
{
INITIALIZE_API_CALL_JSON_CONTEXT;
uint32_t major = RS_MAJOR_VERSION;
uint32_t minor = RS_MINOR_VERSION;
uint32_t mini = RS_MINI_VERSION;
std::string human = RS_HUMAN_READABLE_VERSION;
RsGenericSerializer::SerializeContext& ctx(cAns);
RsGenericSerializer::SerializeJob j(RsGenericSerializer::TO_JSON);
RS_SERIAL_PROCESS(major);
RS_SERIAL_PROCESS(minor);
RS_SERIAL_PROCESS(mini);
RS_SERIAL_PROCESS(human);
DEFAULT_API_CALL_JSON_RETURN(rb::OK);
} );
});
registerHandler("/rsFiles/getFileData",
[](const std::shared_ptr<rb::Session> session)
{
@ -77,19 +125,7 @@ JsonApiServer::JsonApiServer(
const std::shared_ptr<rb::Session> session,
const rb::Bytes& body )
{
RsGenericSerializer::SerializeContext cReq(
nullptr, 0,
RsGenericSerializer::SERIALIZATION_FLAG_YIELDING );
RsJson& jReq(cReq.mJson);
jReq.Parse(reinterpret_cast<const char*>(body.data()), body.size());
RsGenericSerializer::SerializeContext cAns;
RsJson& jAns(cAns.mJson);
// if caller specified caller_data put it back in the answhere
const char kcd[] = "caller_data";
if(jReq.HasMember(kcd))
jAns.AddMember(kcd, jReq[kcd], jAns.GetAllocator());
INITIALIZE_API_CALL_JSON_CONTEXT;
if(!checkRsServicePtrReady(rsFiles, "rsFiles", cAns, session))
return;
@ -133,16 +169,7 @@ JsonApiServer::JsonApiServer(
if(!errorMessage.empty()) RS_SERIAL_PROCESS(errorMessage);
}
// return them to the API caller
std::stringstream ss;
ss << jAns;
std::string&& ans(ss.str());
const std::multimap<std::string, std::string> headers
{
{ "Content-Type", "text/json" },
{ "Content-Length", std::to_string(ans.length()) }
};
session->close(rb::OK, ans, headers);
DEFAULT_API_CALL_JSON_RETURN(rb::OK);
} );
});

View File

@ -515,7 +515,6 @@ HEADERS += util/folderiterator.h \
util/rsstring.h \
util/rsstd.h \
util/rsthreads.h \
util/rsversioninfo.h \
util/rswin.h \
util/rsrandom.h \
util/rsmemcache.h \
@ -666,7 +665,6 @@ SOURCES += util/folderiterator.cc \
util/rsprint.cc \
util/rsstring.cc \
util/rsthreads.cc \
util/rsversioninfo.cc \
util/rsrandom.cc \
util/rstickevent.cc \
util/rsrecogn.cc \

View File

@ -34,7 +34,7 @@
#include <rsserver/p3face.h>
#include <util/rsdir.h>
#include <util/rsversioninfo.h>
#include <retroshare/rsversion.h>
#include <util/folderiterator.h>
#include <ft/ftserver.h>
#include <retroshare/rsplugin.h>
@ -351,7 +351,6 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name,bool first_time)
std::cerr << " -> plugin revision number: " << pinfo.svn_revision << std::endl;
std::cerr << " plugin API number : " << std::hex << pinfo.API_version << std::dec << std::endl;
std::cerr << " retroshare svn number: " << RsUtil::retroshareRevision() << std::endl;
// Check that the plugin provides a svn revision number and a API number
//

View File

@ -284,12 +284,6 @@ struct RsLoginHelper
* @return true if already logged in, false otherwise
*/
bool isLoggedIn();
/**
* @brief Close RetroShare session
* @jsonapi{development}
*/
void closeSession();
};
#endif

View File

@ -205,7 +205,7 @@ class RsPlugin
//
// All these items appear in the config->plugins tab, as a description of the plugin.
//
uint32_t getSvnRevision() const { return RS_REVISION_NUMBER ; } // This is read from libretroshare/retroshare/rsversion.h
uint32_t getSvnRevision() const { return 0; } // This is read from libretroshare/retroshare/rsversion.h
virtual std::string getShortPluginDescription() const = 0 ;
virtual std::string getPluginName() const = 0 ;

View File

@ -141,7 +141,7 @@ public:
/**
* @brief getServiceName lookup the name of a service.
* @jsonapi{development}
* @param[in] service_id service to look up
* @param[in] serviceId service to look up
* @return name of service
*/
virtual std::string getServiceName(uint32_t serviceId) = 0;
@ -149,7 +149,7 @@ public:
/**
* @brief getServiceItemNames return a map of service item names.
* @jsonapi{development}
* @param[in] service_id service to look up
* @param[in] serviceId service to look up
* @param[out] names names of items
* @return true on success false otherwise
*/

View File

@ -19,14 +19,63 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
* *
*******************************************************************************/
#define RS_MAJOR_VERSION 0
#define RS_MINOR_VERSION 6
#define RS_BUILD_NUMBER 4
#define RS_BUILD_NUMBER_ADD "" // <-- do we need this?
// The revision number should be the 4 first bytes of the git revision hash, which is obtained using:
// git log --pretty="%H" | head -1 | cut -c1-8
//
// Do not forget the 0x, since the RS_REVISION_NUMBER should be an integer.
//
#define RS_REVISION_STRING "01234567"
#define RS_REVISION_NUMBER 0x01234567
#pragma once
/**
* @def RS_MINI_VERSION
* First number of RetroShare versioning scheme
* Customize it trough qmake command line @see retroshare.pri
*/
#ifndef RS_MAJOR_VERSION
# define RS_MAJOR_VERSION 0
#endif
/**
* @def RS_MINI_VERSION
* Second number of RetroShare versioning scheme
* Customize it trough qmake command line @see retroshare.pri
*/
#ifndef RS_MINOR_VERSION
# define RS_MINOR_VERSION 0
#endif
/**
* @def RS_MINI_VERSION
* Third number of RetroShare versioning scheme
* Customize it trough qmake command line @see retroshare.pri
*/
#ifndef RS_MINI_VERSION
# define RS_MINI_VERSION 0
#endif
/**
* @def RS_EXTRA_VERSION
* An extra string to append to the version to make it more descriptive.
* Customize it trough qmake command line @see retroshare.pri
*/
#ifndef RS_EXTRA_VERSION
# define RS_EXTRA_VERSION "unknown"
#endif
/**
* Use this macro to check in your code if version of RetroShare is at least the
* specified.
*/
#define RS_VERSION_AT_LEAST(A,B,C) (RS_MAJOR_VERSION > (A) || \
(RS_MAJOR_VERSION == (A) && \
(RS_MINOR_VERSION > (B) || \
(RS_MINOR_VERSION == (B) && RS_MINI_VERSION >= (C)))))
#define __RS_PRIVATE_STRINGIFY2(X) #X
#define __RS_PRIVATE_STRINGIFY(X) __RS_PRIVATE_STRINGIFY2(X)
/**
* Human readable string describing RetroShare version
*/
constexpr auto RS_HUMAN_READABLE_VERSION =
__RS_PRIVATE_STRINGIFY(RS_MAJOR_VERSION) "." \
__RS_PRIVATE_STRINGIFY(RS_MINOR_VERSION) "." \
__RS_PRIVATE_STRINGIFY(RS_MINI_VERSION) RS_EXTRA_VERSION;

View File

@ -2014,11 +2014,6 @@ bool RsLoginHelper::isLoggedIn()
return RsControl::instance()->isReady();
}
void RsLoginHelper::closeSession()
{
RsControl::instance()->rsGlobalShutDown();
}
void RsLoginHelper::Location::serial_process(
RsGenericSerializer::SerializeJob j,
RsGenericSerializer::SerializeContext& ctx )

View File

@ -22,7 +22,7 @@
*******************************************************************************/
#include "services/p3discovery2.h"
#include "pqi/p3peermgr.h"
#include "util/rsversioninfo.h"
#include "retroshare/rsversion.h"
#include "retroshare/rsiface.h"
#include "rsserver/p3face.h"
@ -349,7 +349,7 @@ void p3discovery2::sendOwnContactInfo(const SSLID &sslid)
* revert an hardcoded policy. */
//populateContactInfo(detail, pkt, true);
pkt->version = RsUtil::retroshareVersion();
pkt->version = RS_HUMAN_READABLE_VERSION;
pkt->PeerId(sslid);
#ifdef P3DISC_DEBUG
@ -408,7 +408,7 @@ void p3discovery2::recvOwnContactInfo(const SSLID &fromId, const RsDiscContactIt
sendPGPList(fromId);
// Update mDiscStatus.
RsStackMutex stack(mDiscMtx); /********** STACK LOCKED MTX ******/
RS_STACK_MUTEX(mDiscMtx);
PGPID pgpId = getPGPId(fromId);
std::map<PGPID, DiscPgpInfo>::iterator it = mFriendList.find(pgpId);

View File

@ -1,37 +0,0 @@
/*******************************************************************************
* libretroshare/src/util: rsversioninfo.cc *
* *
* libretroshare: retroshare core library *
* *
* Copyright 2013-2013 by Alexandrut *
* *
* This program 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. *
* *
* This program 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 a copy of the GNU Lesser General Public License *
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
* *
*******************************************************************************/
#include "rsversioninfo.h"
#include "retroshare/rsversion.h"
#include "rsstring.h"
std::string RsUtil::retroshareVersion()
{
std::string version;
rs_sprintf(version, "%d.%d.%d%s Revision %08x", RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_BUILD_NUMBER, RS_BUILD_NUMBER_ADD, RS_REVISION_NUMBER);
return version;
}
uint32_t RsUtil::retroshareRevision()
{
return RS_REVISION_NUMBER;
}

View File

@ -1,30 +0,0 @@
/*******************************************************************************
* libretroshare/src/util: rsversioninfo.h *
* *
* libretroshare: retroshare core library *
* *
* Copyright 2013-2013 by Alexandrut *
* *
* This program 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. *
* *
* This program 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 a copy of the GNU Lesser General Public License *
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
* *
*******************************************************************************/
#include <string>
#include <inttypes.h>
namespace RsUtil {
uint32_t retroshareRevision();
std::string retroshareVersion();
}

View File

@ -56,7 +56,7 @@ extern "C" {
#ifdef WIN32
__declspec(dllexport)
#endif
uint32_t RETROSHARE_PLUGIN_revision = RS_REVISION_NUMBER ;
uint32_t RETROSHARE_PLUGIN_revision = 0;
// This symbol contains the svn revision number grabbed from the executable.
// It will be tested by RS to load the plugin automatically, since it is safe to load plugins
@ -72,8 +72,8 @@ void FeedReaderPlugin::getPluginVersion(int& major, int& minor, int &build, int&
{
major = RS_MAJOR_VERSION;
minor = RS_MINOR_VERSION;
build = RS_BUILD_NUMBER;
svn_rev = RS_REVISION_NUMBER;
build = RS_MINI_VERSION;
svn_rev = 0;
}
FeedReaderPlugin::FeedReaderPlugin()

View File

@ -61,7 +61,7 @@ extern "C" {
// It will be tested by RS to load the plugin automatically, since it is safe to load plugins
// with same revision numbers, assuming that the revision numbers are up-to-date.
//
uint32_t RETROSHARE_PLUGIN_revision = RS_REVISION_NUMBER ;
uint32_t RETROSHARE_PLUGIN_revision = 0;
// This symbol contains the svn revision number grabbed from the executable.
// It will be tested by RS to load the plugin automatically, since it is safe to load plugins
@ -74,8 +74,8 @@ void VOIPPlugin::getPluginVersion(int& major, int& minor, int& build, int& svn_r
{
major = RS_MAJOR_VERSION ;
minor = RS_MINOR_VERSION ;
build = RS_BUILD_NUMBER ;
svn_rev = RS_REVISION_NUMBER ;
build = RS_MINI_VERSION ;
svn_rev = 0;
}
VOIPPlugin::VOIPPlugin()

View File

@ -5,11 +5,11 @@
IDI_ICON1 ICON "logo/logo_64.ico"
#define STRINGIZER(version) #version
#define VERSION_STRING(major,minor,build,buildadd,revision) STRINGIZER(major) "." STRINGIZER(minor) "." STRINGIZER(build) buildadd "." revision
#define VERSION_STRING(major,minor,mini,extra) STRINGIZER(major) "." STRINGIZER(minor) "." STRINGIZER(mini) STRINGIZER(extra)
VS_VERSION_INFO VERSIONINFO
FILEVERSION RS_MAJOR_VERSION,RS_MINOR_VERSION,RS_BUILD_NUMBER,0
PRODUCTVERSION RS_MAJOR_VERSION,RS_MINOR_VERSION,RS_BUILD_NUMBER,0
FILEVERSION RS_MAJOR_VERSION,RS_MINOR_VERSION,RS_MINI_VERSION,0
PRODUCTVERSION RS_MAJOR_VERSION,RS_MINOR_VERSION,RS_MINI_VERSION,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_NT_WINDOWS32
@ -22,11 +22,11 @@ BEGIN
BEGIN
VALUE "CompanyName", ""
VALUE "FileDescription", "RetroShare"
VALUE "FileVersion", VERSION_STRING(RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_BUILD_NUMBER, RS_BUILD_NUMBER_ADD, RS_REVISION_STRING)
VALUE "FileVersion", VERSION_STRING(RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_MINI_VERSION, RS_EXTRA_VERSION)
VALUE "InternalName", "RetroShare"
VALUE "OriginalFilename", "RetroShare.exe"
VALUE "ProductName", "RetroShare"
VALUE "ProductVersion", VERSION_STRING(RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_BUILD_NUMBER, RS_BUILD_NUMBER_ADD, RS_REVISION_STRING)
VALUE "ProductVersion", VERSION_STRING(RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_MINI_VERSION, RS_EXTRA_VERSION)
VALUE "LegalCopyright", ""
END
END

View File

@ -356,15 +356,7 @@ void Rshare::slotConnectionEstablished()
}
}
QString Rshare::retroshareVersion(bool withRevision)
{
QString version = QString("%1.%2.%3%4").arg(RS_MAJOR_VERSION).arg(RS_MINOR_VERSION).arg(RS_BUILD_NUMBER).arg(RS_BUILD_NUMBER_ADD);
if (withRevision) {
version += QString(" %1 %2").arg(tr("Revision")).arg(RS_REVISION_NUMBER,8,16,QChar('0'));
}
return version;
}
QString Rshare::retroshareVersion(bool) { return RS_HUMAN_READABLE_VERSION; }
/** Enters the main event loop and waits until exit() is called. The signal
* running() will be emitted when the event loop has started. */

View File

@ -61,7 +61,7 @@ public:
~Rshare();
/** Return the version info */
static QString retroshareVersion(bool withRevision);
static QString retroshareVersion(bool=true);
/** Return the map of command-line arguments and values. */
static QMap<QString, QString> arguments() { return _args; }

View File

@ -144,6 +144,23 @@ CONFIG+=no_rs_deep_search
CONFIG *= rs_deep_search
no_rs_deep_search:CONFIG -= rs_deep_search
# Specify RetroShare major version appending the following assignation to qmake
# command line 'RS_MAJOR_VERSION=0'
#RS_MAJOR_VERSION=0
# Specify RetroShare major version appending the following assignation to qmake
# command line 'RS_MINOR_VERSION=6'
#RS_MINOR_VERSION=6
# Specify RetroShare major version appending the following assignation to qmake
# command line 'RS_MINI_VERSION=4'
#RS_MINI_VERSION=4
# Specify RetroShare major version appending the following assignation to qmake
# command line 'RS_EXTRA_VERSION=""'
#RS_EXTRA_VERSION=git
###########################################################################################################################################################
#
# V07_NON_BACKWARD_COMPATIBLE_CHANGE_001:
@ -259,7 +276,6 @@ defineReplace(linkDynamicLibs) {
return($$retDlib)
}
################################################################################
## Statements and variables that depends on build options (CONFIG) goes here ###
################################################################################
@ -283,6 +299,42 @@ defineReplace(linkDynamicLibs) {
## RS_THREAD_LIB String viariable containing the name of the multi threading
## library to use (pthread, "") it usually depend on platform.
defined(RS_MAJOR_VERSION,var):\
defined(RS_MINOR_VERSION,var):\
defined(RS_MINI_VERSION,var):\
defined(RS_EXTRA_VERSION,var) {
message("RetroShare version $${RS_MAJOR_VERSION}.$${RS_MINOR_VERSION}.$${RS_MINI_VERSION}$${RS_EXTRA_VERSION} defined in command line")
DEFINES += RS_MAJOR_VERSION=$${RS_MAJOR_VERSION}
DEFINES += RS_MINOR_VERSION=$${RS_MINOR_VERSION}
DEFINES += RS_MINI_VERSION=$${RS_MINI_VERSION}
DEFINES += RS_EXTRA_VERSION=\\\"$${RS_EXTRA_VERSION}\\\"
} else {
RS_GIT_DESCRIBE = $$system(git describe)
isEmpty(RS_GIT_DESCRIBE) {
warning("Determining RetroShare version via git failed plese specify it trough qmake command line arguments!")
} else {
RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE,v)
RS_GIT_DESCRIBE_SPLIT = $$take_first(RS_GIT_DESCRIBE_SPLIT)
RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE_SPLIT,.)
RS_MAJOR_VERSION = $$take_first(RS_GIT_DESCRIBE_SPLIT)
RS_MINOR_VERSION = $$take_first(RS_GIT_DESCRIBE_SPLIT)
RS_GIT_DESCRIBE_SPLIT = $$take_first(RS_GIT_DESCRIBE_SPLIT)
RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE_SPLIT,-)
RS_MINI_VERSION = $$take_first(RS_GIT_DESCRIBE_SPLIT)
RS_EXTRA_VERSION = $$join(RS_GIT_DESCRIBE_SPLIT,-,-)
message("RetroShare version $${RS_MAJOR_VERSION}.$${RS_MINOR_VERSION}.$${RS_MINI_VERSION}$${RS_EXTRA_VERSION} determined via git")
DEFINES += RS_MAJOR_VERSION=$${RS_MAJOR_VERSION}
DEFINES += RS_MINOR_VERSION=$${RS_MINOR_VERSION}
DEFINES += RS_MINI_VERSION=$${RS_MINI_VERSION}
DEFINES += RS_EXTRA_VERSION=\\\"$${RS_EXTRA_VERSION}\\\"
}
}
gxsdistsync:DEFINES *= RS_USE_GXS_DISTANT_SYNC
wikipoos:DEFINES *= RS_USE_WIKI
rs_gxs:DEFINES *= RS_ENABLE_GXS