Merge pull request #2659 from keepassxreboot/cmake_cleanup

Cleanup CMakeFiles and revert Dockerfile changes
This commit is contained in:
Jonathan White 2019-01-30 19:45:41 -05:00 committed by GitHub
commit 8bfc539234
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 69 additions and 222 deletions

View File

@ -84,11 +84,25 @@ set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${K
set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots") set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots")
set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease) set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease)
# Retrieve git HEAD revision hash
set(GIT_HEAD_OVERRIDE "" CACHE STRING "Manually set the Git HEAD hash when missing (eg, when no .git folder exists)")
execute_process(COMMAND git rev-parse --short=7 HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_HEAD
ERROR_QUIET)
string(STRIP "${GIT_HEAD}" GIT_HEAD)
if(GIT_HEAD STREQUAL "")
string(SUBSTRING "${GIT_HEAD_OVERRIDE}" 0 7 GIT_HEAD)
endif()
message(STATUS "Found Git HEAD Revision: ${GIT_HEAD}\n")
# Check if on a tag, if so build as a release # Check if on a tag, if so build as a release
execute_process(COMMAND git tag --points-at HEAD execute_process(COMMAND git tag --points-at HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG) OUTPUT_VARIABLE GIT_TAG
ERROR_QUIET)
if(GIT_TAG) if(GIT_TAG)
string(STRIP "${GIT_TAG}" GIT_TAG)
set(OVERRIDE_VERSION ${GIT_TAG}) set(OVERRIDE_VERSION ${GIT_TAG})
elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version)
file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION)

View File

@ -24,45 +24,44 @@ ENV TERM=xterm-256color
RUN set -x \ RUN set -x \
&& apt-get update -y \ && apt-get update -y \
&& apt-get -y install software-properties-common \ && apt-get -y install software-properties-common
&& rm -rf /var/lib/apt/lists/*
RUN set -x \ RUN set -x \
&& add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \ && add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \
&& add-apt-repository ppa:phoerious/keepassxc && add-apt-repository ppa:phoerious/keepassxc
# build and runtime dependencies
RUN set -x \ RUN set -x \
&& apt-get update -y \ && apt-get update -y \
&& apt-get upgrade -y \ && apt-get upgrade -y
# build and runtime dependencies
RUN set -x \
&& apt-get install -y \ && apt-get install -y \
cmake3 \ cmake3 \
curl \ curl \
g++ \ g++ \
git \ git \
libargon2-0-dev \
libcurl-no-gcrypt-dev \
libfuse2 \
libgcrypt20-18-dev \ libgcrypt20-18-dev \
libqrencode-dev \ libargon2-0-dev \
libsodium-dev \ libsodium-dev \
libxi-dev \ libcurl-no-gcrypt-dev \
libxtst-dev \
libyubikey-dev \
libykpers-1-dev \
mesa-common-dev \
xclip \
xvfb \
zlib1g-dev \
# ubuntu:14.04 has no quazip, put here as placeholder
# libquazip5-dev
${QT5_VERSION}base \ ${QT5_VERSION}base \
${QT5_VERSION}tools \ ${QT5_VERSION}tools \
${QT5_VERSION}x11extras \ ${QT5_VERSION}x11extras \
${QT5_VERSION}translations \ ${QT5_VERSION}translations \
${QT5_VERSION}imageformats \ ${QT5_VERSION}imageformats \
${QT5_VERSION}svg \ ${QT5_VERSION}svg \
&& rm -rf /var/lib/apt/lists/* zlib1g-dev \
libxi-dev \
libxtst-dev \
# ubuntu:14.04 has no quazip (it's optional)
# libquazip5-dev \
mesa-common-dev \
libyubikey-dev \
libykpers-1-dev \
libqrencode-dev \
xclip \
xvfb
ENV PATH="/opt/${QT5_VERSION}/bin:${PATH}" ENV PATH="/opt/${QT5_VERSION}/bin:${PATH}"
ENV CMAKE_PREFIX_PATH="/opt/${QT5_VERSION}/lib/cmake" ENV CMAKE_PREFIX_PATH="/opt/${QT5_VERSION}/lib/cmake"
@ -75,6 +74,12 @@ RUN set -x \
&& echo "/opt/${QT5_VERSION}/lib" > /etc/ld.so.conf.d/${QT5_VERSION}.conf \ && echo "/opt/${QT5_VERSION}/lib" > /etc/ld.so.conf.d/${QT5_VERSION}.conf \
&& echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf && echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf
# AppImage dependencies
RUN set -x \
&& apt-get install -y \
curl \
libfuse2
RUN set -x \ RUN set -x \
&& curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > /usr/bin/linuxdeploy \ && curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > /usr/bin/linuxdeploy \
&& curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > /usr/bin/linuxdeploy-plugin-qt \ && curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > /usr/bin/linuxdeploy-plugin-qt \
@ -83,6 +88,10 @@ RUN set -x \
&& chmod +x /usr/bin/linuxdeploy-plugin-qt \ && chmod +x /usr/bin/linuxdeploy-plugin-qt \
&& chmod +x /usr/bin/appimagetool && chmod +x /usr/bin/appimagetool
RUN set -x \
&& apt-get autoremove --purge \
&& rm -rf /var/lib/apt/lists/*
VOLUME /keepassxc/src VOLUME /keepassxc/src
VOLUME /keepassxc/out VOLUME /keepassxc/out
WORKDIR /keepassxc WORKDIR /keepassxc

View File

@ -91,7 +91,7 @@ function(generate_product_version outfiles)
set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}") set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}")
endif() endif()
if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "") if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "")
set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}") set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}")
endif() endif()
if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "")
set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}")

View File

@ -1,130 +0,0 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.BOOST-1.0 or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var} "${out}" PARENT_SCOPE)
endfunction()

View File

@ -1,41 +0,0 @@
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.BOOST-1.0 or copy at
# http://www.boost.org/LICENSE_1_0.txt)
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()

View File

@ -35,7 +35,7 @@ TAG_NAME=""
DOCKER_IMAGE="" DOCKER_IMAGE=""
DOCKER_CONTAINER_NAME="keepassxc-build-container" DOCKER_CONTAINER_NAME="keepassxc-build-container"
CMAKE_OPTIONS="" CMAKE_OPTIONS=""
CPACK_GENERATORS="NSIS;ZIP" CPACK_GENERATORS="WIX;ZIP"
COMPILER="g++" COMPILER="g++"
MAKE_OPTIONS="-j8" MAKE_OPTIONS="-j8"
BUILD_PLUGINS="all" BUILD_PLUGINS="all"
@ -346,7 +346,7 @@ checkSigntoolCommandExists() {
} }
checkCodesignCommandExists() { checkCodesignCommandExists() {
if !cmdExists codesign; then if ! cmdExists codesign; then
exitError "codesign command not found on the PATH! Please check that you have correctly installed Xcode." exitError "codesign command not found on the PATH! Please check that you have correctly installed Xcode."
fi fi
} }

View File

@ -17,15 +17,7 @@
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h) configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h)
configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h)
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_HEAD)
git_describe(GIT_DESCRIBE --long)
if(NOT GIT_HEAD OR NOT GIT_DESCRIBE)
set(GIT_HEAD "")
set(GIT_DESCRIBE "")
endif()
find_library(ZXCVBN_LIBRARIES zxcvbn) find_library(ZXCVBN_LIBRARIES zxcvbn)
if(NOT ZXCVBN_LIBRARIES) if(NOT ZXCVBN_LIBRARIES)
@ -34,8 +26,6 @@ if(NOT ZXCVBN_LIBRARIES)
set(ZXCVBN_LIBRARIES zxcvbn) set(ZXCVBN_LIBRARIES zxcvbn)
endif(NOT ZXCVBN_LIBRARIES) endif(NOT ZXCVBN_LIBRARIES)
configure_file(version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY)
set(keepassx_SOURCES set(keepassx_SOURCES
core/AutoTypeAssociations.cpp core/AutoTypeAssociations.cpp
core/AutoTypeMatch.cpp core/AutoTypeMatch.cpp
@ -380,7 +370,7 @@ if(MINGW)
string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION})
set(CPACK_GENERATOR "ZIP;NSIS") set(CPACK_GENERATOR "ZIP;WIX")
set(CPACK_STRIP_FILES OFF) set(CPACK_STRIP_FILES OFF)
set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME})
@ -414,9 +404,7 @@ if(MINGW)
set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll")
include(CPack) include(CPack)
install(CODE " install(CODE "set(gp_tool \"objdump\")" COMPONENT Runtime)
set(gp_tool \"objdump\")
" COMPONENT Runtime)
include(DeployQt4) include(DeployQt4)
install_qt4_executable(${PROGNAME}.exe) install_qt4_executable(${PROGNAME}.exe)

View File

@ -20,9 +20,10 @@
#include "BrowserSettings.h" #include "BrowserSettings.h"
#include "NativeMessagingBase.h" #include "NativeMessagingBase.h"
#include "config-keepassx.h" #include "config-keepassx.h"
#include "sodium.h"
#include "sodium/crypto_box.h" #include <sodium.h>
#include "sodium/randombytes.h" #include <sodium/crypto_box.h>
#include <sodium/randombytes.h>
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonParseError> #include <QJsonParseError>

8
src/git-info.h.cmake Normal file
View File

@ -0,0 +1,8 @@
/* git-info.h. Generated by cmake from git-info.h.cmake */
#ifndef KEEPASSXC_GIT_INFO_H
#define KEEPASSXC_GIT_INFO_H
#define GIT_HEAD "@GIT_HEAD@"
#endif // KEEPASSXC_GIT_INFO_H

View File

@ -20,9 +20,9 @@
#include "ui_AboutDialog.h" #include "ui_AboutDialog.h"
#include "config-keepassx.h" #include "config-keepassx.h"
#include "git-info.h"
#include "core/FilePath.h" #include "core/FilePath.h"
#include "crypto/Crypto.h" #include "crypto/Crypto.h"
#include "version.h"
#include <QClipboard> #include <QClipboard>
#include <QSysInfo> #include <QSysInfo>
@ -47,8 +47,6 @@ AboutDialog::AboutDialog(QWidget* parent)
QString commitHash; QString commitHash;
if (!QString(GIT_HEAD).isEmpty()) { if (!QString(GIT_HEAD).isEmpty()) {
commitHash = GIT_HEAD; commitHash = GIT_HEAD;
} else if (!QString(DIST_HASH).contains("Format")) {
commitHash = DIST_HASH;
} }
QString debugInfo = "KeePassXC - "; QString debugInfo = "KeePassXC - ";

View File

@ -24,7 +24,6 @@
#include "core/FilePath.h" #include "core/FilePath.h"
#include "crypto/Crypto.h" #include "crypto/Crypto.h"
#include "gui/DatabaseWidget.h" #include "gui/DatabaseWidget.h"
#include "version.h"
CloneDialog::CloneDialog(DatabaseWidget* parent, Database* db, Entry* entry) CloneDialog::CloneDialog(DatabaseWidget* parent, Database* db, Entry* entry)
: QDialog(parent) : QDialog(parent)

View File

@ -399,13 +399,19 @@ MainWindow::MainWindow()
MessageWidget::Error); MessageWidget::Error);
} }
#if !defined(KEEPASSXC_BUILD_TYPE_RELEASE) #if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT)
m_ui->globalMessageWidget->showMessage( m_ui->globalMessageWidget->showMessage(
tr("WARNING: You are using an unstable build of KeePassXC!\n" tr("WARNING: You are using an unstable build of KeePassXC!\n"
"There is a high risk of corruption, maintain a backup of your databases.\n" "There is a high risk of corruption, maintain a backup of your databases.\n"
"This version is not meant for production use."), "This version is not meant for production use."),
MessageWidget::Warning, MessageWidget::Warning,
-1); -1);
#elif defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE)
m_ui->globalMessageWidget->showMessage(
tr("NOTE: You are using a pre-release version of KeePassXC!\n"
"Expect some bugs and minor issues, this version is not meant for production use."),
MessageWidget::Information,
15000);
#elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) #elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
if (!config()->get("QtErrorMessageShown", false).toBool()) { if (!config()->get("QtErrorMessageShown", false).toBool()) {
m_ui->globalMessageWidget->showMessage( m_ui->globalMessageWidget->showMessage(

View File

@ -1,5 +0,0 @@
#define GIT_HEAD "@GIT_HEAD@"
#define GIT_DESCRIBE "@GIT_DESCRIBE@"
#define DIST_HASH "$Format:%H$"
#define DIST_DATE "$Format:%at$"