diff --git a/CMakeLists.txt b/CMakeLists.txt index 686db736..3fb00a02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,27 +73,49 @@ set(KEEPASSXC_VERSION_MINOR "3") set(KEEPASSXC_VERSION_PATCH "0") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") -set(KEEPASSXC_RELEASE_BUILD OFF CACHE BOOLEAN "Remove stability warnings") +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) + # 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) if(GIT_TAG) - set(KEEPASSXC_RELEASE_BUILD ON) -elseif(NOT KEEPASSXC_RELEASE_BUILD) + string(REGEX REPLACE "\r?\n$" "" GIT_TAG "${GIT_TAG}") + + if(GIT_TAG MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") + set(KEEPASSXC_BUILD_TYPE PreRelease) + set(KEEPASSXC_VERSION ${GIT_TAG}) + elseif(GIT_TAG MATCHES "^[\\.0-9]+$") + set(KEEPASSXC_BUILD_TYPE Release) + set(KEEPASSXC_VERSION ${GIT_TAG}) + endif() +endif() + +if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease" AND NOT GIT_TAG) + set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") +elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") endif() +if(KEEPASSXC_BUILD_TYPE STREQUAL "Release") + set(KEEPASSXC_BUILD_TYPE_RELEASE ON) +elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") + set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) +else() + set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) +endif() + message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") # Distribution info -set(KEEPASSXC_DIST True) -set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution type") +set(KEEPASSXC_DIST ON) +set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution Type") set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other) if(KEEPASSXC_DIST_TYPE STREQUAL "Snap") - set(KEEPASSXC_DIST_SNAP True) + set(KEEPASSXC_DIST_SNAP ON) elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage") - set(KEEPASSXC_DIST_APPIMAGE True) + set(KEEPASSXC_DIST_APPIMAGE ON) elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other") unset(KEEPASSXC_DIST) endif() diff --git a/release-tool b/release-tool index 10e25522..08e788e1 100755 --- a/release-tool +++ b/release-tool @@ -246,7 +246,7 @@ checkVersionInCMake() { local app_name_upper="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')" local major_num="$(echo ${RELEASE_NAME} | cut -f1 -d.)" local minor_num="$(echo ${RELEASE_NAME} | cut -f2 -d.)" - local patch_num="$(echo ${RELEASE_NAME} | cut -f3 -d.)" + local patch_num="$(echo ${RELEASE_NAME} | cut -f3 -d. | cut -f1 -d-)" grep -q "${app_name_upper}_VERSION_MAJOR \"${major_num}\"" CMakeLists.txt if [ $? -ne 0 ]; then @@ -582,19 +582,26 @@ build() { done init - checkWorkingTreeClean OUTPUT_DIR="$(realpath "$OUTPUT_DIR")" - if $BUILD_SNAPSHOT; then + if ${BUILD_SNAPSHOT}; then TAG_NAME="HEAD" local branch=`git rev-parse --abbrev-ref HEAD` logInfo "Using current branch ${branch} to build..." RELEASE_NAME="${RELEASE_NAME}-snapshot" + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Snapshot" else - logInfo "Checking out release tag '${TAG_NAME}'..." + checkWorkingTreeClean + + if $(echo "$TAG_NAME" | grep -qP "\-(alpha|beta)\\d+\$"); then + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=PreRelease" + logInfo "Checking out pre-release tag '${TAG_NAME}'..." + else + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Release" + logInfo "Checking out release tag '${TAG_NAME}'..." + fi git checkout "$TAG_NAME" - CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_RELEASE_BUILD=ON" fi logInfo "Creating output directory..." @@ -604,20 +611,28 @@ build() { exitError "Failed to create output directory!" fi - if $BUILD_SOURCE_TARBALL; then + if ${BUILD_SOURCE_TARBALL}; then logInfo "Creating source tarball..." local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')" TARBALL_NAME="${app_name_lower}-${RELEASE_NAME}-src.tar.xz" git archive --format=tar "$TAG_NAME" --prefix="${app_name_lower}-${RELEASE_NAME}/" \ - | xz -6 > "${OUTPUT_DIR}/${TARBALL_NAME}" + | xz -6 > "${OUTPUT_DIR}/${TARBALL_NAME}" fi - + + if [ -e "${OUTPUT_DIR}/build-release" ]; then + logInfo "Cleaning existing build directory..." + rm -r "${OUTPUT_DIR}/build-release" 2> /dev/null + if [ $? -ne 0 ]; then + exitError "Failed to clean existing build directory, please do it manually." + fi + fi + logInfo "Creating build directory..." mkdir -p "${OUTPUT_DIR}/build-release" cd "${OUTPUT_DIR}/build-release" logInfo "Configuring sources..." - for p in $BUILD_PLUGINS; do + for p in ${BUILD_PLUGINS}; do CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On" done @@ -654,13 +669,13 @@ build() { -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" $CMAKE_OPTIONS "$SRC_DIR" logInfo "Compiling and packaging sources..." - make $MAKE_OPTIONS preinstall + mingw32-make $MAKE_OPTIONS preinstall # Call cpack directly instead of calling make package. # This is important because we want to build the MSI when making a # release. - cpack -G "NSIS;WIX;ZIP" + cpack -G "NSIS;ZIP;${CPACK_GENERATORS}" - mv "./${APP_NAME}-${RELEASE_NAME}-"*.{exe,msi,zip} ../ + mv "./${APP_NAME}-${RELEASE_NAME}-"*.* ../ else mkdir -p "${OUTPUT_DIR}/bin-release" diff --git a/src/config-keepassx.h.cmake b/src/config-keepassx.h.cmake index 805438b1..9f3952b0 100644 --- a/src/config-keepassx.h.cmake +++ b/src/config-keepassx.h.cmake @@ -3,14 +3,14 @@ #ifndef KEEPASSX_CONFIG_KEEPASSX_H #define KEEPASSX_CONFIG_KEEPASSX_H -#define KEEPASSX_VERSION "${KEEPASSXC_VERSION}" +#define KEEPASSX_VERSION "@KEEPASSXC_VERSION@" -#define KEEPASSX_SOURCE_DIR "${CMAKE_SOURCE_DIR}" -#define KEEPASSX_BINARY_DIR "${CMAKE_BINARY_DIR}" +#define KEEPASSX_SOURCE_DIR "@CMAKE_SOURCE_DIR@" +#define KEEPASSX_BINARY_DIR "@CMAKE_BINARY_DIR@" -#define KEEPASSX_PREFIX_DIR "${CMAKE_INSTALL_PREFIX}" -#define KEEPASSX_PLUGIN_DIR "${PLUGIN_INSTALL_DIR}" -#define KEEPASSX_DATA_DIR "${DATA_INSTALL_DIR}" +#define KEEPASSX_PREFIX_DIR "@CMAKE_INSTALL_PREFIX@" +#define KEEPASSX_PLUGIN_DIR "@PLUGIN_INSTALL_DIR@" +#define KEEPASSX_DATA_DIR "@DATA_INSTALL_DIR@" #cmakedefine WITH_XC_AUTOTYPE #cmakedefine WITH_XC_NETWORKING @@ -19,13 +19,16 @@ #cmakedefine WITH_XC_YUBIKEY #cmakedefine WITH_XC_SSHAGENT +#cmakedefine KEEPASSXC_BUILD_TYPE "@KEEPASSXC_BUILD_TYPE@" +#cmakedefine KEEPASSXC_BUILD_TYPE_RELEASE +#cmakedefine KEEPASSXC_BUILD_TYPE_PRE_RELEASE +#cmakedefine KEEPASSXC_BUILD_TYPE_SNAPSHOT + #cmakedefine KEEPASSXC_DIST #cmakedefine KEEPASSXC_DIST_TYPE "@KEEPASSXC_DIST_TYPE@" #cmakedefine KEEPASSXC_DIST_SNAP #cmakedefine KEEPASSXC_DIST_APPIMAGE -#cmakedefine KEEPASSXC_RELEASE_BUILD - #cmakedefine HAVE_PR_SET_DUMPABLE 1 #cmakedefine HAVE_RLIMIT_CORE 1 #cmakedefine HAVE_PT_DENY_ATTACH 1 diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 4481dd82..adfdea0a 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -54,8 +54,8 @@ AboutDialog::AboutDialog(QWidget* parent) QString debugInfo = "KeePassXC - "; debugInfo.append(tr("Version %1\n").arg(KEEPASSX_VERSION)); -#ifndef KEEPASSXC_RELEASE_BUILD - debugInfo.append(tr("Build Type: Snapshot\n")); +#ifndef KEEPASSXC_BUILD_TYPE_RELEASE + debugInfo.append(tr("Build Type: %1\n").arg(KEEPASSXC_BUILD_TYPE)); #endif if (!commitHash.isEmpty()) { debugInfo.append(tr("Revision: %1").arg(commitHash.left(7)).append("\n")); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 6fad6585..76f1ffb6 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -425,7 +425,7 @@ MainWindow::MainWindow() } #endif -#ifndef KEEPASSXC_RELEASE_BUILD +#ifndef KEEPASSXC_BUILD_TYPE_RELEASE 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."),