Revamp version tagging, remove ugly suffix on git hash. Refs #571

* Tacking -official onto the git hash was a hack only needed on windows,
  and since we want more information it doesn't scale.
* Instead we track anything we need to know about the version in
  separate variables, like whether it's a stable build or a nightly/
  local build. Or if it's built by a downstream distribution then the
  version number for the downstream build.
This commit is contained in:
baldurk
2017-04-27 19:47:50 +01:00
parent 4199a857f5
commit ae50fa99ee
17 changed files with 213 additions and 106 deletions
+28 -1
View File
@@ -29,7 +29,29 @@ if(CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "In-source builds not allowed")
endif()
set(BUILD_VERSION_HASH "" CACHE STRING "The current git commit hash, possibly with suffixes to indicate build type")
# version setting variables. See renderdoc/api/replay/version.h
set(BUILD_VERSION_HASH "" CACHE STRING "The current git commit hash. See GIT_COMMIT_HASH in renderdoc/api/replay/version.h")
option(BUILD_VERSION_STABLE "If this is a stable build. See RENDERDOC_STABLE_BUILD in renderdoc/api/replay/version.h" OFF)
set(BUILD_VERSION_DIST_NAME "" CACHE STRING "The name of the distribution. See DISTRIBUTION_NAME in renderdoc/api/replay/version.h")
set(BUILD_VERSION_DIST_VER "" CACHE STRING "The distribution-specific version number. See DISTRIBUTION_VERSION in renderdoc/api/replay/version.h")
set(BUILD_VERSION_DIST_CONTACT "" CACHE STRING "The URL or email to contact with issues. See DISTRIBUTION_CONTACT in renderdoc/api/replay/version.h")
if(BUILD_VERSION_STABLE)
add_definitions(-DRENDERDOC_STABLE_BUILD=1)
endif()
if(NOT BUILD_VERSION_DIST_NAME STREQUAL "")
add_definitions(-DDISTRIBUTION_NAME="${BUILD_VERSION_DIST_NAME}")
endif()
if(NOT BUILD_VERSION_DIST_VER STREQUAL "")
add_definitions(-DDISTRIBUTION_VERSION="${BUILD_VERSION_DIST_VER}")
endif()
if(NOT BUILD_VERSION_DIST_CONTACT STREQUAL "")
add_definitions(-DDISTRIBUTION_CONTACT="${BUILD_VERSION_DIST_CONTACT}")
endif()
function(get_git_hash _git_hash)
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
@@ -49,6 +71,11 @@ function(get_git_hash _git_hash)
set(${_git_hash} "${GIT_HASH}" PARENT_SCOPE)
endfunction(get_git_hash)
# get git commit hash
get_git_hash(GIT_COMMIT_HASH)
string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH)
add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
project(RenderDoc CXX C)
option(ENABLE_GL "Enable GL driver" ON)
+30 -4
View File
@@ -1,6 +1,3 @@
get_git_hash(GIT_COMMIT_HASH)
string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH)
option(STATIC_QRENDERDOC "Compile qrenderdoc as static" OFF)
option(QRENDERDOC_NO_CXX11_REGEX "Disable C++11 regex in scintilla" OFF)
@@ -104,7 +101,6 @@ file(WRITE
"\n"
# search for -lrenderdoc here
"LIBS+=-L${CMAKE_RUNTIME_OUTPUT_DIRECTORY}\n"
"DEFINES+=GIT_COMMIT_HASH_LITERAL=${GIT_COMMIT_HASH}\n"
"\n"
# include and link against python
"INCLUDEPATH+=${PYTHON_INCLUDE_DIR}\n"
@@ -114,6 +110,36 @@ file(WRITE
"\n"
"OSX_ICONFILE=${CMAKE_CURRENT_BINARY_DIR}/RenderDoc.icns\n")
# propagate build version info. Lots of escaping needed here to pass ""s into the define value
file(APPEND
${CMAKE_BINARY_DIR}/qrenderdoc/qrenderdoc_cmake.pri
"DEFINES+=GIT_COMMIT_HASH='\\\\\"${GIT_COMMIT_HASH}\\\\\"'\n")
if(BUILD_VERSION_STABLE)
file(APPEND
${CMAKE_BINARY_DIR}/qrenderdoc/qrenderdoc_cmake.pri
"DEFINES+=RENDERDOC_STABLE_BUILD=1\n")
endif()
if(NOT BUILD_VERSION_DIST_NAME STREQUAL "")
file(APPEND
${CMAKE_BINARY_DIR}/qrenderdoc/qrenderdoc_cmake.pri
"DEFINES+=DISTRIBUTION_NAME='\\\\\"${BUILD_VERSION_DIST_NAME}\\\\\"'\n")
endif()
if(NOT BUILD_VERSION_DIST_VER STREQUAL "")
file(APPEND
${CMAKE_BINARY_DIR}/qrenderdoc/qrenderdoc_cmake.pri
"DEFINES+=DISTRIBUTION_VERSION='\\\\\"${BUILD_VERSION_DIST_VER}\\\\\"'\n")
endif()
if(NOT BUILD_VERSION_DIST_CONTACT STREQUAL "")
file(APPEND
${CMAKE_BINARY_DIR}/qrenderdoc/qrenderdoc_cmake.pri
"DEFINES+=DISTRIBUTION_CONTACT='\\\\\"${BUILD_VERSION_DIST_CONTACT}\\\\\"'\n")
endif()
if(PYSIDE2_FOUND)
# Add configuration for PySide2
file(APPEND
+2 -2
View File
@@ -85,12 +85,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Baldur Karlsson"
VALUE "FileDescription", "QRenderDoc - https://renderdoc.org/"
VALUE "FileVersion", RENDERDOC_VERSION_STRING ".0.0"
VALUE "FileVersion", MAJOR_MINOR_VERSION_STRING ".0.0"
VALUE "InternalName", "qrenderdoc.exe"
VALUE "LegalCopyright", "Copyright © 2016 Baldur Karlsson"
VALUE "OriginalFilename", "qrenderdoc.exe"
VALUE "ProductName", "RenderDoc"
VALUE "ProductVersion", RENDERDOC_VERSION_STRING "-" GIT_COMMIT_HASH
VALUE "ProductVersion", FULL_VERSION_STRING
END
END
BLOCK "VarFileInfo"
+20 -1
View File
@@ -27,11 +27,30 @@
#include <QLabel>
#include <QString>
#include "ui_AboutDialog.h"
#include "version.h"
AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDialog)
{
ui->setupUi(this);
ui->version->setText("Version v" + qApp->applicationVersion());
QString hash(GIT_COMMIT_HASH);
if(hash[0] == QChar('N') && hash[1] == QChar('O'))
{
ui->version->setText(QString("Version %1 (built from unknown source)").arg(FULL_VERSION_STRING));
}
else
{
ui->version->setText(QString("Version %1 (built from <a href='%2'>%3</a>)")
.arg(FULL_VERSION_STRING)
.arg("https://github.com/baldurk/renderdoc/commit/" GIT_COMMIT_HASH)
.arg(QString(GIT_COMMIT_HASH).left(8)));
}
#if defined(DISTRIBUTION_VERSION)
ui->owner->setText(QString("Baldur Karlsson - Packaged for %1").arg(DISTRIBUTION_NAME));
ui->contact->setText(QString("<a href='%1'>%1</a>").arg(DISTRIBUTION_CONTACT));
#endif
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
}
+19 -23
View File
@@ -112,7 +112,13 @@
</font>
</property>
<property name="text">
<string>Version v0.00</string>
<string>Version v0.00 (built from abcdef01)</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
@@ -129,32 +135,16 @@
</widget>
</item>
<item>
<widget class="QLabel" name="email">
<widget class="QLabel" name="contact">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>&lt;a href='mailto:baldurk@baldurk.org'&gt;baldurk@baldurk.org&lt;/a&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="website">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>&lt;a href='https://github.com/baldurk/renderdoc'&gt;https://renderdoc.org/&lt;/a&gt;</string>
<string>&lt;a href='mailto:baldurk@baldurk.org'&gt;baldurk@baldurk.org&lt;/a&gt;
&amp;bull;
&lt;a href='https://renderdoc.org/'&gt;https://renderdoc.org&lt;/a&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
@@ -172,7 +162,10 @@
</font>
</property>
<property name="text">
<string>Copyright Baldur Karlsson 2017</string>
<string>Copyright &amp;copy; Baldur Karlsson 2017</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
</widget>
</item>
@@ -182,7 +175,10 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
+6 -26
View File
@@ -49,25 +49,6 @@
#define JSON_ID "rdocLayoutData"
#define JSON_VER 1
struct Version
{
static bool isOfficialVersion() { return QString(GIT_COMMIT_HASH).indexOf("-official") > 0; }
static bool isBetaVersion() { return QString(GIT_COMMIT_HASH).indexOf("-beta") > 0; }
static QString bareString() { return RENDERDOC_VERSION_STRING; }
static QString string() { return "v" RENDERDOC_VERSION_STRING; }
static QString gitCommitHash()
{
QString hash(GIT_COMMIT_HASH);
int dash = hash.indexOf(QChar('-'));
if(dash < 0)
return hash;
else
return hash.left(dash);
}
static bool isMismatched() { return RENDERDOC_GetVersionString() != bareString(); }
};
#if defined(Q_OS_WIN32)
extern "C" void *__stdcall GetModuleHandleA(const char *);
#endif
@@ -740,14 +721,12 @@ void MainWindow::SetTitle(const QString &filename)
QString text = prefix + "RenderDoc ";
if(Version::isOfficialVersion())
text += Version::string();
else if(Version::isBetaVersion())
text += tr("%1-beta - %2").arg(Version::string()).arg(Version::gitCommitHash());
if(RENDERDOC_STABLE_BUILD)
text += FULL_VERSION_STRING;
else
text += tr("Unofficial release (%1 - %2)").arg(Version::string()).arg(Version::gitCommitHash());
text += tr("Unstable release (%1 - %2)").arg(FULL_VERSION_STRING).arg(GIT_COMMIT_HASH);
if(Version::isMismatched())
if(QString::fromUtf8(RENDERDOC_GetVersionString()) != QString(MAJOR_MINOR_VERSION_STRING))
text += " - !! VERSION MISMATCH DETECTED !!";
setWindowTitle(text);
@@ -1184,7 +1163,8 @@ void MainWindow::switchContext()
}
else if(host->VersionMismatch)
{
statusText->setText(tr("Remote server is not running RenderDoc %1").arg(Version::string()));
statusText->setText(
tr("Remote server is not running RenderDoc %1").arg(FULL_VERSION_STRING));
}
else if(host->Busy)
{
-6
View File
@@ -7,12 +7,6 @@ set(RDOC_INCLUDES
PRIVATE ${RDOC_SOURCE_DIR}/3rdparty)
set(RDOC_LIBRARIES)
# get git commit hash
get_git_hash(GIT_COMMIT_HASH)
string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH)
list(APPEND RDOC_DEFINITIONS
PRIVATE -DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
if(ANDROID)
list(APPEND RDOC_LIBRARIES
PRIVATE m
-11
View File
@@ -1403,17 +1403,6 @@ This will be in the form "MAJOR.MINOR"
)");
extern "C" RENDERDOC_API const char *RENDERDOC_CC RENDERDOC_GetVersionString();
DOCUMENT(R"(Retrieves the git commit hash string.
This will be in the form ``61262f...fa-versionstring`` where the ``-versionstring`` suffix is
specific to the particular build and may take many values. A common one is ``-official`` for binary
releases generated upstream.
:return: The commit string.
:rtype: ``str``
)");
extern "C" RENDERDOC_API const char *RENDERDOC_CC RENDERDOC_GetCommitHash();
DOCUMENT("Internal function for retrieving a config setting.");
extern "C" RENDERDOC_API const char *RENDERDOC_CC RENDERDOC_GetConfigSetting(const char *name);
+83 -10
View File
@@ -24,16 +24,89 @@
#pragma once
#define VER_STR2(a) #a
#define VER_STR(a) VER_STR2(a)
///////////////////////////////////////////////////////////////////////////////////////
//
// Build configuration variables.
//
// When distributing RenderDoc builds please check these variables before building and
// set them appropriately. If you're building locally, the defaults are all fine.
//
// For windows builds, some of these variables are irrelevant and can be ignored.
//
// For non-windows builds, these variables have cmake settings that you can use to set
// them, and are designed to be set that way. See BUILD_VERSION_*.
//
// However if you want to you can locally modify this file (e.g. copy a file with some fixed values
// set, then just update the version numbers in the build process).
//
#define RENDERDOC_VERSION_MAJOR 0
#define RENDERDOC_VERSION_MINOR 34
#define RENDERDOC_VERSION_STRING \
VER_STR(RENDERDOC_VERSION_MAJOR) "." VER_STR(RENDERDOC_VERSION_MINOR)
#if defined(GIT_COMMIT_HASH_LITERAL)
#define GIT_COMMIT_HASH VER_STR(GIT_COMMIT_HASH_LITERAL)
#elif !defined(GIT_COMMIT_HASH)
// This should be set to the last upstream git commit where the build comes from. If any later
// commits are cherry-picked or local patches are applied, this should still point to the hash of
// the tree that the build was based on.
//
// Windows users can run ./scripts/hash_version.sh from the root of the checkout to set this, anyone
// else should set BUILD_VERSION_HASH in the cmake build command.
#if !defined(GIT_COMMIT_HASH)
#define GIT_COMMIT_HASH "NO_GIT_COMMIT_HASH_DEFINED"
#endif
// If this variable is set to 1, then this build is considered a stable version - based on a tagged
// version number upstream, possibly with some patches applied as necessary.
// Any other build whether it's including experimental local changes or just from the tip of the
// latest code at some other point should be considered unstable and leave this as 0.
#if !defined(RENDERDOC_STABLE_BUILD)
#define RENDERDOC_STABLE_BUILD 0
#endif
///////////////////////////////////////////////////////////////////////////////////////
//
// If you are distributing to the public, you should set values for these variables below.
//
// The friendly name of the distribution that packaged this build
#if !defined(DISTRIBUTION_NAME)
//#define DISTRIBUTION_NAME "DistributionName"
#endif
// An arbitrary distribution version string. If set, this should include the major and minor
// version numbers in it.
#if !defined(DISTRIBUTION_VERSION)
//#define DISTRIBUTION_VERSION "MAJ.MIN-foo.4b"
#endif
// Set to an URL or email of who produced this build and should be the first point of contact for
// any issues.
// If you're distributing builds for the public then do update this to point to your bugtracker or
// similar.
#if !defined(DISTRIBUTION_CONTACT)
//#define DISTRIBUTION_CONTACT "https://distribution.example/packages/renderdoc"
#endif
///////////////////////////////////////////////////////////////////////////////////////
//
// Internal or derived variables
// You should NOT enable this variable. This is used by upstream builds to determine whether
// this is an official build e.g. that should send crash reports.
#define RENDERDOC_OFFICIAL_BUILD 0
// The major and minor version that describe this build. These numbers are modified linearly
// upstream and should not be modified downstream. You can set DISTRIBUTION_VERSION to include any
// arbitrary release marker or package version you wish.
#define RENDERDOC_VERSION_MAJOR 0
#define RENDERDOC_VERSION_MINOR 34
#define RDOC_INTERNAL_VERSION_STRINGIZE2(a) #a
#define RDOC_INTERNAL_VERSION_STRINGIZE(a) RDOC_INTERNAL_VERSION_STRINGIZE2(a)
// string that's just "major.minor"
#define MAJOR_MINOR_VERSION_STRING \
RDOC_INTERNAL_VERSION_STRINGIZE(RENDERDOC_VERSION_MAJOR) \
"." RDOC_INTERNAL_VERSION_STRINGIZE(RENDERDOC_VERSION_MINOR)
// string that's the actual version number, either from the distribution or just vX.Y
#if defined(DISTRIBUTION_VERSION)
#define FULL_VERSION_STRING "v" DISTRIBUTION_VERSION
#else
#define FULL_VERSION_STRING "v" MAJOR_MINOR_VERSION_STRING
#endif
+8 -6
View File
@@ -307,12 +307,14 @@ void RenderDoc::Initialise()
RDCLOGFILE(m_LoggingFilename.c_str());
}
if(IsReplayApp())
RDCLOG("RenderDoc v%s %s (%s) loaded in replay application", RENDERDOC_VERSION_STRING,
sizeof(uintptr_t) == sizeof(uint64_t) ? "x64" : "x86", GIT_COMMIT_HASH);
else
RDCLOG("RenderDoc v%s %s (%s) capturing application", RENDERDOC_VERSION_STRING,
sizeof(uintptr_t) == sizeof(uint64_t) ? "x64" : "x86", GIT_COMMIT_HASH);
RDCLOG("RenderDoc v%s %s %s (%s) %s", MAJOR_MINOR_VERSION_STRING,
sizeof(uintptr_t) == sizeof(uint64_t) ? "x64" : "x86",
ENABLED(RDOC_RELEASE) ? "Release" : "Development", GIT_COMMIT_HASH,
IsReplayApp() ? "loaded in replay application" : "capturing application");
#if defined(DISTRIBUTION_VERSION)
RDCLOG("Packaged for %s (%s) - %s", DISTRIBUTION_NAME, DISTRIBUTION_VERSION, DISTRIBUTION_CONTACT);
#endif
Keyboard::Init();
+2 -2
View File
@@ -23,7 +23,7 @@
* THE SOFTWARE.
******************************************************************************/
#if USE_BREAKPAD && defined(RENDERDOC_OFFICIAL_BUILD)
#if USE_BREAKPAD && RENDERDOC_OFFICIAL_BUILD
#define RDOC_CRASH_HANDLER OPTION_ON
@@ -108,7 +108,7 @@ public:
google_breakpad::CustomInfoEntry(L"gitcommit", L""),
};
wstring wideStr = StringFormat::UTF82Wide(string(RENDERDOC_VERSION_STRING));
wstring wideStr = StringFormat::UTF82Wide(string(MAJOR_MINOR_VERSION_STRING));
breakpadCustomInfo[0].set_value(wideStr.c_str());
wideStr = StringFormat::UTF82Wide(string(RDCGETLOGFILE()));
breakpadCustomInfo[1].set_value(wideStr.c_str());
+2 -2
View File
@@ -85,12 +85,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Baldur Karlsson"
VALUE "FileDescription", "Core DLL for RenderDoc - https://renderdoc.org/"
VALUE "FileVersion", RENDERDOC_VERSION_STRING ".0.0"
VALUE "FileVersion", MAJOR_MINOR_VERSION_STRING ".0.0"
VALUE "InternalName", "renderdoc.dll"
VALUE "LegalCopyright", "Copyright © 2016 Baldur Karlsson"
VALUE "OriginalFilename", "renderdoc.dll"
VALUE "ProductName", "RenderDoc"
VALUE "ProductVersion", RENDERDOC_VERSION_STRING "-" GIT_COMMIT_HASH
VALUE "ProductVersion", FULL_VERSION_STRING
END
END
BLOCK "VarFileInfo"
-2
View File
@@ -41,8 +41,6 @@
#define RESOURCE_glsl_depthms2arr_frag 427
#define RESOURCE_glsl_gles_texsample_h 428
//#define RENDERDOC_OFFICIAL_BUILD // used to determine whether to submit auto crash reports
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
+1 -6
View File
@@ -234,12 +234,7 @@ extern "C" RENDERDOC_API void RENDERDOC_CC Camera_GetBasis(Camera *c, FloatVecto
extern "C" RENDERDOC_API const char *RENDERDOC_CC RENDERDOC_GetVersionString()
{
return RENDERDOC_VERSION_STRING;
}
extern "C" RENDERDOC_API const char *RENDERDOC_CC RENDERDOC_GetCommitHash()
{
return GIT_COMMIT_HASH;
return MAJOR_MINOR_VERSION_STRING;
}
extern "C" RENDERDOC_API const char *RENDERDOC_CC RENDERDOC_GetConfigSetting(const char *name)
+10 -2
View File
@@ -26,6 +26,7 @@
#include "renderdoccmd.h"
#include <app/renderdoc_app.h>
#include <replay/renderdoc_replay.h>
#include <replay/version.h>
#include <string>
using std::string;
@@ -162,12 +163,19 @@ struct VersionCommand : public Command
virtual bool IsCaptureCommand() { return false; }
virtual int Execute(cmdline::parser &parser, const CaptureOptions &)
{
std::cout << "renderdoccmd " << (sizeof(uintptr_t) == sizeof(uint64_t) ? "x64 " : "x86 ")
<< RENDERDOC_GetVersionString() << "-" << RENDERDOC_GetCommitHash() << std::endl;
std::cout << "renderdoccmd " << (sizeof(uintptr_t) == sizeof(uint64_t) ? "x64" : "x86")
<< " v" MAJOR_MINOR_VERSION_STRING << " built from " << GIT_COMMIT_HASH << std::endl;
#if defined(DISTRIBUTION_VERSION)
std::cout << "Packaged for " << DISTRIBUTION_NAME << " (" << DISTRIBUTION_VERSION << ") - "
<< DISTRIBUTION_CONTACT << std::endl;
#endif
for(size_t i = 0; i < version_lines.size(); i++)
std::cout << version_lines[i] << std::endl;
std::cout << std::endl;
return 0;
}
};
Binary file not shown.
+2 -2
View File
@@ -9,6 +9,6 @@ fi
GIT_HASH=`git status > /dev/null 2>&1 && git rev-parse HEAD || echo NO_GIT_COMMIT_HASH_DEFINED`;
rm -f ver
sed "s/NO_GIT_COMMIT_HASH_DEFINED/$GIT_HASH$1/" renderdoc/api/replay/version.h > ver && mv ver renderdoc/api/replay/version.h
sed -b "s/NO_GIT_COMMIT_HASH_DEFINED/$GIT_HASH$1/" renderdocui/Properties/AssemblyInfo.cs > ver && mv ver renderdocui/Properties/AssemblyInfo.cs
sed "s/NO_GIT_COMMIT_HASH_DEFINED/$GIT_HASH/" renderdoc/api/replay/version.h > ver && mv ver renderdoc/api/replay/version.h
sed -b "s/NO_GIT_COMMIT_HASH_DEFINED/$GIT_HASH/" renderdocui/Properties/AssemblyInfo.cs > ver && mv ver renderdocui/Properties/AssemblyInfo.cs
rm -f ver