From 21d1e981ca4f38a07d4621ef4f4168d1576c96e7 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 30 Jan 2019 15:00:47 -0500 Subject: [PATCH 1/4] Cleanup CMakeFiles prior to release * Remove Git revision finding code in favor of a simple command call: git rev-parse --short=7 HEAD * Added GIT_HEAD_OVERRIDE to explicitly define the hash for the current commit in case git is not available * Made WIX default over NSIS in release tool * Rename version.h to git-info.h --- CMakeLists.txt | 16 ++- cmake/GenerateProductVersion.cmake | 2 +- cmake/GetGitRevisionDescription.cmake | 130 ----------------------- cmake/GetGitRevisionDescription.cmake.in | 41 ------- release-tool | 2 +- src/CMakeLists.txt | 18 +--- src/browser/BrowserAction.cpp | 7 +- src/git-info.h.cmake | 8 ++ src/gui/AboutDialog.cpp | 4 +- src/gui/CloneDialog.cpp | 1 - src/version.h.cmake | 5 - 11 files changed, 33 insertions(+), 201 deletions(-) delete mode 100644 cmake/GetGitRevisionDescription.cmake delete mode 100644 cmake/GetGitRevisionDescription.cmake.in create mode 100644 src/git-info.h.cmake delete mode 100644 src/version.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 85f27b871..658548f70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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_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 execute_process(COMMAND git tag --points-at HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_TAG) + OUTPUT_VARIABLE GIT_TAG + ERROR_QUIET) if(GIT_TAG) + string(STRIP "${GIT_TAG}" GIT_TAG) set(OVERRIDE_VERSION ${GIT_TAG}) elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) diff --git a/cmake/GenerateProductVersion.cmake b/cmake/GenerateProductVersion.cmake index 2d311efaf..f66c1b33c 100644 --- a/cmake/GenerateProductVersion.cmake +++ b/cmake/GenerateProductVersion.cmake @@ -91,7 +91,7 @@ function(generate_product_version outfiles) set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}") endif() 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() if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake deleted file mode 100644 index d39671cd6..000000000 --- a/cmake/GetGitRevisionDescription.cmake +++ /dev/null @@ -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( [ ...]) -# -# Returns the refspec and sha hash of the current head revision -# -# 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( [ ...]) -# -# 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 -# 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() diff --git a/cmake/GetGitRevisionDescription.cmake.in b/cmake/GetGitRevisionDescription.cmake.in deleted file mode 100644 index 353c02521..000000000 --- a/cmake/GetGitRevisionDescription.cmake.in +++ /dev/null @@ -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 -# 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() diff --git a/release-tool b/release-tool index 885a5d2a0..a33af349e 100755 --- a/release-tool +++ b/release-tool @@ -35,7 +35,7 @@ TAG_NAME="" DOCKER_IMAGE="" DOCKER_CONTAINER_NAME="keepassxc-build-container" CMAKE_OPTIONS="" -CPACK_GENERATORS="NSIS;ZIP" +CPACK_GENERATORS="WIX;ZIP" COMPILER="g++" MAKE_OPTIONS="-j8" BUILD_PLUGINS="all" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba38746c3..5b8e74b6c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,15 +17,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.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() +configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h) find_library(ZXCVBN_LIBRARIES zxcvbn) if(NOT ZXCVBN_LIBRARIES) @@ -34,8 +26,6 @@ if(NOT ZXCVBN_LIBRARIES) set(ZXCVBN_LIBRARIES zxcvbn) endif(NOT ZXCVBN_LIBRARIES) -configure_file(version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY) - set(keepassx_SOURCES core/AutoTypeAssociations.cpp core/AutoTypeMatch.cpp @@ -380,7 +370,7 @@ if(MINGW) 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_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) @@ -414,9 +404,7 @@ if(MINGW) set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") include(CPack) - install(CODE " - set(gp_tool \"objdump\") - " COMPONENT Runtime) + install(CODE "set(gp_tool \"objdump\")" COMPONENT Runtime) include(DeployQt4) install_qt4_executable(${PROGNAME}.exe) diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp index 433bfe2c5..8c96568a7 100644 --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -20,9 +20,10 @@ #include "BrowserSettings.h" #include "NativeMessagingBase.h" #include "config-keepassx.h" -#include "sodium.h" -#include "sodium/crypto_box.h" -#include "sodium/randombytes.h" + +#include +#include +#include #include #include diff --git a/src/git-info.h.cmake b/src/git-info.h.cmake new file mode 100644 index 000000000..470b36a64 --- /dev/null +++ b/src/git-info.h.cmake @@ -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 diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 97fa135fc..86cece993 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -20,9 +20,9 @@ #include "ui_AboutDialog.h" #include "config-keepassx.h" +#include "git-info.h" #include "core/FilePath.h" #include "crypto/Crypto.h" -#include "version.h" #include #include @@ -47,8 +47,6 @@ AboutDialog::AboutDialog(QWidget* parent) QString commitHash; if (!QString(GIT_HEAD).isEmpty()) { commitHash = GIT_HEAD; - } else if (!QString(DIST_HASH).contains("Format")) { - commitHash = DIST_HASH; } QString debugInfo = "KeePassXC - "; diff --git a/src/gui/CloneDialog.cpp b/src/gui/CloneDialog.cpp index 990a590e0..e91df62c7 100644 --- a/src/gui/CloneDialog.cpp +++ b/src/gui/CloneDialog.cpp @@ -24,7 +24,6 @@ #include "core/FilePath.h" #include "crypto/Crypto.h" #include "gui/DatabaseWidget.h" -#include "version.h" CloneDialog::CloneDialog(DatabaseWidget* parent, Database* db, Entry* entry) : QDialog(parent) diff --git a/src/version.h.cmake b/src/version.h.cmake deleted file mode 100644 index 7e67ecd60..000000000 --- a/src/version.h.cmake +++ /dev/null @@ -1,5 +0,0 @@ -#define GIT_HEAD "@GIT_HEAD@" -#define GIT_DESCRIBE "@GIT_DESCRIBE@" - -#define DIST_HASH "$Format:%H$" -#define DIST_DATE "$Format:%at$" From c8a99ee3a4b9bc6c1526191a57291aa258212a69 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 30 Jan 2019 15:01:07 -0500 Subject: [PATCH 2/4] Revert commit c682b4 because it broke appimages --- Dockerfile | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6ddf80435..33bdea6a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,45 +24,44 @@ ENV TERM=xterm-256color RUN set -x \ && apt-get update -y \ - && apt-get -y install software-properties-common \ - && rm -rf /var/lib/apt/lists/* + && apt-get -y install software-properties-common RUN set -x \ && add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \ && add-apt-repository ppa:phoerious/keepassxc -# build and runtime dependencies RUN set -x \ && apt-get update -y \ - && apt-get upgrade -y \ + && apt-get upgrade -y + +# build and runtime dependencies +RUN set -x \ && apt-get install -y \ cmake3 \ curl \ g++ \ git \ - libargon2-0-dev \ - libcurl-no-gcrypt-dev \ - libfuse2 \ libgcrypt20-18-dev \ - libqrencode-dev \ + libargon2-0-dev \ libsodium-dev \ - libxi-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 + libcurl-no-gcrypt-dev \ ${QT5_VERSION}base \ ${QT5_VERSION}tools \ ${QT5_VERSION}x11extras \ ${QT5_VERSION}translations \ ${QT5_VERSION}imageformats \ ${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 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/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 \ && 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 \ @@ -83,6 +88,10 @@ RUN set -x \ && chmod +x /usr/bin/linuxdeploy-plugin-qt \ && chmod +x /usr/bin/appimagetool +RUN set -x \ + && apt-get autoremove --purge \ + && rm -rf /var/lib/apt/lists/* + VOLUME /keepassxc/src VOLUME /keepassxc/out WORKDIR /keepassxc From 37f63406c4cefc5ea6800fedc283c30d9790ff73 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 30 Jan 2019 15:17:50 -0500 Subject: [PATCH 3/4] Softer warning message for pre-release builds --- src/gui/MainWindow.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index f33341688..d7aa36e2c 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -399,13 +399,19 @@ MainWindow::MainWindow() MessageWidget::Error); } -#if !defined(KEEPASSXC_BUILD_TYPE_RELEASE) +#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) m_ui->globalMessageWidget->showMessage( 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" "This version is not meant for production use."), MessageWidget::Warning, -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)) if (!config()->get("QtErrorMessageShown", false).toBool()) { m_ui->globalMessageWidget->showMessage( From b56ef2b758997400509ba43da81390d867af284f Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 30 Jan 2019 16:25:45 -0500 Subject: [PATCH 4/4] Fix typo in release-tool --- release-tool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-tool b/release-tool index a33af349e..9d9d4fa9f 100755 --- a/release-tool +++ b/release-tool @@ -346,7 +346,7 @@ checkSigntoolCommandExists() { } 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." fi }