diff --git a/CMakeLists.txt b/CMakeLists.txt index f14b363b38..0c1ca4292b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2017 KeePassXC Team +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -19,9 +19,9 @@ cmake_minimum_required(VERSION 3.1.0) project(KeePassXC) if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING - "Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel." - FORCE) + set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel." + FORCE) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) @@ -48,19 +48,19 @@ option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF option(WITH_XC_YUBIKEY "Include YubiKey support." OFF) option(WITH_XC_SSHAGENT "Include SSH agent support." OFF) if(APPLE) - option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF) + option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF) endif() if(WITH_XC_ALL) - # Enable all options - set(WITH_XC_AUTOTYPE ON) - set(WITH_XC_NETWORKING ON) - set(WITH_XC_BROWSER ON) - set(WITH_XC_YUBIKEY ON) - set(WITH_XC_SSHAGENT ON) - if(APPLE) - set(WITH_XC_TOUCHID ON) - endif() + # Enable all options + set(WITH_XC_AUTOTYPE ON) + set(WITH_XC_NETWORKING ON) + set(WITH_XC_BROWSER ON) + set(WITH_XC_YUBIKEY ON) + set(WITH_XC_SSHAGENT ON) + if(APPLE) + set(WITH_XC_TOUCHID ON) + endif() endif() set(KEEPASSXC_VERSION_MAJOR "2") @@ -76,34 +76,34 @@ execute_process(COMMAND git tag --points-at HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_TAG) if(GIT_TAG) - set(OVERRIDE_VERSION ${GIT_TAG}) + set(OVERRIDE_VERSION ${GIT_TAG}) elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) - file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) + file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) endif() string(REGEX REPLACE "(\r?\n)+" "" OVERRIDE_VERSION "${OVERRIDE_VERSION}") if(OVERRIDE_VERSION) - if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") - set(KEEPASSXC_BUILD_TYPE PreRelease) - set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) - elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") - set(KEEPASSXC_BUILD_TYPE Release) - set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) - endif() + if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") + set(KEEPASSXC_BUILD_TYPE PreRelease) + set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) + elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") + set(KEEPASSXC_BUILD_TYPE Release) + set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) + endif() endif() if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease" AND NOT OVERRIDE_VERSION) - set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") + set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot") - set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") + set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") endif() if(KEEPASSXC_BUILD_TYPE STREQUAL "Release") - set(KEEPASSXC_BUILD_TYPE_RELEASE ON) + set(KEEPASSXC_BUILD_TYPE_RELEASE ON) elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") - set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) + set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) else() - set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) + set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) endif() message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") @@ -113,46 +113,46 @@ 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 ON) + set(KEEPASSXC_DIST_SNAP ON) elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage") - set(KEEPASSXC_DIST_APPIMAGE ON) + set(KEEPASSXC_DIST_APPIMAGE ON) elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other") - unset(KEEPASSXC_DIST) + unset(KEEPASSXC_DIST) endif() if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") - set(IS_32BIT TRUE) + set(IS_32BIT TRUE) endif() if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANG 1) + set(CMAKE_COMPILER_IS_CLANG 1) endif() if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANGXX 1) + set(CMAKE_COMPILER_IS_CLANGXX 1) endif() macro(add_gcc_compiler_cxxflags FLAGS) - if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") - endif() + if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") + endif() endmacro(add_gcc_compiler_cxxflags) macro(add_gcc_compiler_cflags FLAGS) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") - endif() + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") + endif() endmacro(add_gcc_compiler_cflags) macro(add_gcc_compiler_flags FLAGS) - add_gcc_compiler_cxxflags("${FLAGS}") - add_gcc_compiler_cflags("${FLAGS}") + add_gcc_compiler_cxxflags("${FLAGS}") + add_gcc_compiler_cflags("${FLAGS}") endmacro(add_gcc_compiler_flags) add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) if(WITH_APP_BUNDLE) - add_definitions(-DWITH_APP_BUNDLE) + add_definitions(-DWITH_APP_BUNDLE) endif() add_gcc_compiler_flags("-fno-common") @@ -162,7 +162,7 @@ add_gcc_compiler_flags("-fvisibility=hidden") add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden") if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_gcc_compiler_flags("-Werror") + add_gcc_compiler_flags("-Werror") endif() if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX) @@ -176,147 +176,144 @@ add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virt add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings") if(WITH_ASAN) - if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) - message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") - endif() + if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) + message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") + endif() - add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") + add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) - add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) + add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") + endif() endif() - endif() endif() string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) -if (CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") - add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") +if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") + add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") endif() check_c_compiler_flag("-Werror=format-security -Werror=implicit-function-declaration" WERROR_C_AVAILABLE) check_cxx_compiler_flag("-Werror=format-security" WERROR_CXX_AVAILABLE) if(WERROR_C_AVAILABLE AND WERROR_CXX_AVAILABLE) - add_gcc_compiler_flags("-Werror=format-security") - add_gcc_compiler_cflags("-Werror=implicit-function-declaration") + add_gcc_compiler_flags("-Werror=format-security") + add_gcc_compiler_cflags("-Werror=implicit-function-declaration") endif() if(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align") endif() if(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - if (CMAKE_COMPILER_IS_CLANGXX) - add_gcc_compiler_flags("-Qunused-arguments") - endif() - add_gcc_compiler_flags("-pie -fPIE") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") + if(CMAKE_COMPILER_IS_CLANGXX) + add_gcc_compiler_flags("-Qunused-arguments") + endif() + add_gcc_compiler_flags("-pie -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") endif() add_gcc_compiler_cflags("-std=c99") add_gcc_compiler_cxxflags("-std=c++11") if(APPLE) - add_gcc_compiler_cxxflags("-stdlib=libc++") + add_gcc_compiler_cxxflags("-stdlib=libc++") endif() if(WITH_DEV_BUILD) - add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) + add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) endif() if(MINGW) - set(CMAKE_RC_COMPILER_INIT windres) - enable_language(RC) - set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") - if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) - # Enable DEP and ASLR - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") - # Enable high entropy ASLR for 64-bit builds - if(NOT IS_32BIT) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") + set(CMAKE_RC_COMPILER_INIT windres) + enable_language(RC) + set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") + if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) + # Enable DEP and ASLR + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") + # Enable high entropy ASLR for 64-bit builds + if(NOT IS_32BIT) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") + endif() endif() - endif() endif() if(APPLE AND WITH_APP_BUNDLE OR MINGW) - set(PROGNAME KeePassXC) + set(PROGNAME KeePassXC) else() - set(PROGNAME keepassxc) + set(PROGNAME keepassxc) endif() if(APPLE AND WITH_APP_BUNDLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") - set(CMAKE_INSTALL_PREFIX "/Applications") - set(CMAKE_INSTALL_MANDIR "/usr/local/share/man") + set(CMAKE_INSTALL_PREFIX "/Applications") + set(CMAKE_INSTALL_MANDIR "/usr/local/share/man") endif() if(MINGW) - set(CLI_INSTALL_DIR ".") - set(PROXY_INSTALL_DIR ".") - set(BIN_INSTALL_DIR ".") - set(PLUGIN_INSTALL_DIR ".") - set(DATA_INSTALL_DIR "share") + set(CLI_INSTALL_DIR ".") + set(PROXY_INSTALL_DIR ".") + set(BIN_INSTALL_DIR ".") + set(PLUGIN_INSTALL_DIR ".") + set(DATA_INSTALL_DIR "share") elseif(APPLE AND WITH_APP_BUNDLE) - set(CLI_INSTALL_DIR "/usr/local/bin") - set(PROXY_INSTALL_DIR "/usr/local/bin") - set(BIN_INSTALL_DIR ".") - set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns") - set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources") + set(CLI_INSTALL_DIR "/usr/local/bin") + set(PROXY_INSTALL_DIR "/usr/local/bin") + set(BIN_INSTALL_DIR ".") + set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns") + set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources") else() - include(GNUInstallDirs) + include(GNUInstallDirs) - set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") - set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") + set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") + set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") endif() if(WITH_TESTS) - enable_testing() + enable_testing() endif(WITH_TESTS) if(WITH_COVERAGE) - # Include code coverage, use with -DCMAKE_BUILD_TYPE=Debug - include(CodeCoverage) - set(COVERAGE_GCOVR_EXCLUDES - "\\(.+/\\)?tests/.\\*" - ".\\*/moc_\\[^/\\]+\\.cpp" - ".\\*/ui_\\[^/\\]+\\.h" - "\\(.+/\\)?zxcvbn/.\\*") - append_coverage_compiler_flags() - setup_target_for_coverage_gcovr_html( - NAME coverage - EXECUTABLE $(MAKE) && $(MAKE) test - ) + # Include code coverage, use with -DCMAKE_BUILD_TYPE=Debug + include(CodeCoverage) + set(COVERAGE_GCOVR_EXCLUDES + "\\(.+/\\)?tests/.\\*" + ".\\*/moc_\\[^/\\]+\\.cpp" + ".\\*/ui_\\[^/\\]+\\.h" + "\\(.+/\\)?zxcvbn/.\\*") + append_coverage_compiler_flags() + setup_target_for_coverage_gcovr_html( + NAME coverage + EXECUTABLE $(MAKE) && $(MAKE) test + ) endif() include(CLangFormat) +set(QT_COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools) if(UNIX AND NOT APPLE) - find_package(Qt5 COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools DBus REQUIRED) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus REQUIRED) elseif(APPLE) - find_package(Qt5 COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools REQUIRED - HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH - ) - find_package(Qt5 COMPONENTS MacExtras - HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH - ) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH) + find_package(Qt5 COMPONENTS MacExtras HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH) else() - find_package(Qt5 COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools REQUIRED) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) endif() if(Qt5Core_VERSION VERSION_LESS "5.2.0") - message(FATAL_ERROR "Qt version 5.2.0 or higher is required") + message(FATAL_ERROR "Qt version 5.2.0 or higher is required") endif() get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH) @@ -329,13 +326,13 @@ set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) if(APPLE) - set(CMAKE_MACOSX_RPATH TRUE) - find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) - if(NOT MACDEPLOYQT_EXE) - message(FATAL_ERROR "macdeployqt is required to build in macOS") - else() - message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") - endif() + set(CMAKE_MACOSX_RPATH TRUE) + find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) + if(NOT MACDEPLOYQT_EXE) + message(FATAL_ERROR "macdeployqt is required to build in macOS") + else() + message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") + endif() endif() # Debian sets the the build type to None for package builds. @@ -351,24 +348,24 @@ find_package(QREncode REQUIRED) set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR}) if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0") - message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") + message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") endif() include_directories(SYSTEM ${ARGON2_INCLUDE_DIR}) # Optional if(WITH_XC_YUBIKEY) - find_package(YubiKey REQUIRED) + find_package(YubiKey REQUIRED) - include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) + include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) endif() if(UNIX) - check_cxx_source_compiles("#include + check_cxx_source_compiles("#include int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }" - HAVE_PR_SET_DUMPABLE) + HAVE_PR_SET_DUMPABLE) - check_cxx_source_compiles("#include + check_cxx_source_compiles("#include int main() { struct rlimit limit; limit.rlim_cur = 0; @@ -377,12 +374,12 @@ if(UNIX) return 0; }" HAVE_RLIMIT_CORE) - if(APPLE) - check_cxx_source_compiles("#include + if(APPLE) + check_cxx_source_compiles("#include #include int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }" - HAVE_PT_DENY_ATTACH) - endif() + HAVE_PT_DENY_ATTACH) + endif() endif() include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) @@ -392,14 +389,14 @@ include(FeatureSummary) add_subdirectory(src) add_subdirectory(share) if(WITH_TESTS) - add_subdirectory(tests) + add_subdirectory(tests) endif(WITH_TESTS) if(PRINT_SUMMARY) - # This will print ENABLED, REQUIRED and DISABLED - feature_summary(WHAT ALL) + # This will print ENABLED, REQUIRED and DISABLED + feature_summary(WHAT ALL) else() - # This will only print ENABLED and DISABLED feature - feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") - feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") + # This will only print ENABLED and DISABLED feature + feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") + feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") endif() diff --git a/cmake/CLangFormat.cmake b/cmake/CLangFormat.cmake index 8c26db93be..481bba27b2 100644 --- a/cmake/CLangFormat.cmake +++ b/cmake/CLangFormat.cmake @@ -14,45 +14,43 @@ # along with this program. If not, see . set(EXCLUDED_DIRS - # third-party directories - zxcvbn/ - streams/QtIOCompressor - # objective-c directories - autotype/mac -) + # third-party directories + zxcvbn/ + streams/QtIOCompressor + # objective-c directories + autotype/mac) set(EXCLUDED_FILES - # third-party files - streams/qtiocompressor.cpp - streams/qtiocompressor.h - gui/KMessageWidget.h - gui/KMessageWidget.cpp - gui/MainWindowAdaptor.h - gui/MainWindowAdaptor.cpp - sshagent/bcrypt_pbkdf.cpp - sshagent/blf.h - sshagent/blowfish.c - tests/modeltest.cpp - tests/modeltest.h - # objective-c files - core/ScreenLockListenerMac.h - core/ScreenLockListenerMac.cpp -) + # third-party files + streams/qtiocompressor.cpp + streams/qtiocompressor.h + gui/KMessageWidget.h + gui/KMessageWidget.cpp + gui/MainWindowAdaptor.h + gui/MainWindowAdaptor.cpp + sshagent/bcrypt_pbkdf.cpp + sshagent/blf.h + sshagent/blowfish.c + tests/modeltest.cpp + tests/modeltest.h + # objective-c files + core/ScreenLockListenerMac.h + core/ScreenLockListenerMac.cpp) file(GLOB_RECURSE ALL_SOURCE_FILES *.cpp *.h) -foreach (SOURCE_FILE ${ALL_SOURCE_FILES}) - foreach (EXCLUDED_DIR ${EXCLUDED_DIRS}) +foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) + foreach(EXCLUDED_DIR ${EXCLUDED_DIRS}) string(FIND ${SOURCE_FILE} ${EXCLUDED_DIR} SOURCE_FILE_EXCLUDED) - if (NOT ${SOURCE_FILE_EXCLUDED} EQUAL -1) + if(NOT ${SOURCE_FILE_EXCLUDED} EQUAL -1) list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) - endif () - endforeach () - foreach (EXCLUDED_FILE ${EXCLUDED_FILES}) - if (${SOURCE_FILE} MATCHES ".*${EXCLUDED_FILE}$") + endif() + endforeach() + foreach(EXCLUDED_FILE ${EXCLUDED_FILES}) + if(${SOURCE_FILE} MATCHES ".*${EXCLUDED_FILE}$") list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) - endif () - endforeach () -endforeach () + endif() + endforeach() +endforeach() add_custom_target( format diff --git a/cmake/FindArgon2.cmake b/cmake/FindArgon2.cmake index bb2f5811d8..766e659b37 100644 --- a/cmake/FindArgon2.cmake +++ b/cmake/FindArgon2.cmake @@ -14,21 +14,21 @@ # along with this program. If not, see . find_path(ARGON2_INCLUDE_DIR argon2.h) -if (MINGW) - # find static library on Windows, and redefine used symbols to - # avoid definition name conflicts with libsodium - find_library(ARGON2_SYS_LIBRARIES libargon2.a) - message(STATUS "Patching libargon2...\n") - execute_process(COMMAND objcopy - --redefine-sym argon2_hash=libargon2_argon2_hash - --redefine-sym _argon2_hash=_libargon2_argon2_hash - --redefine-sym argon2_error_message=libargon2_argon2_error_message - --redefine-sym _argon2_error_message=_libargon2_argon2_error_message - ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) - find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) +if(MINGW) + # find static library on Windows, and redefine used symbols to + # avoid definition name conflicts with libsodium + find_library(ARGON2_SYS_LIBRARIES libargon2.a) + message(STATUS "Patching libargon2...\n") + execute_process(COMMAND objcopy + --redefine-sym argon2_hash=libargon2_argon2_hash + --redefine-sym _argon2_hash=_libargon2_argon2_hash + --redefine-sym argon2_error_message=libargon2_argon2_error_message + --redefine-sym _argon2_error_message=_libargon2_argon2_error_message + ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) else() - find_library(ARGON2_LIBRARIES argon2) + find_library(ARGON2_LIBRARIES argon2) endif() mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) diff --git a/cmake/FindGcrypt.cmake b/cmake/FindGcrypt.cmake index 0775704625..59c6f473ad 100644 --- a/cmake/FindGcrypt.cmake +++ b/cmake/FindGcrypt.cmake @@ -22,7 +22,7 @@ mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h") file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$") string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}") - string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") + string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}") set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}") endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3b41b38783..56726e43d4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2017 KeePassXC Team +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -22,193 +22,191 @@ include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC GIT_HEAD) git_describe(GIT_DESCRIBE --long) -if (NOT GIT_HEAD OR NOT GIT_DESCRIBE) +if(NOT GIT_HEAD OR NOT GIT_DESCRIBE) set(GIT_HEAD "") set(GIT_DESCRIBE "") endif() find_library(ZXCVBN_LIBRARIES zxcvbn) if(NOT ZXCVBN_LIBRARIES) - add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) - set(ZXCVBN_LIBRARIES zxcvbn) + add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) + 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/AsyncTask.h - core/AutoTypeMatch.cpp - core/Compare.cpp - core/Config.cpp - core/CsvParser.cpp - core/CustomData.cpp - core/Database.cpp - core/DatabaseIcons.cpp - core/Entry.cpp - core/EntryAttachments.cpp - core/EntryAttributes.cpp - core/EntrySearcher.cpp - core/FilePath.cpp - core/Bootstrap.cpp - core/Global.h - core/Group.cpp - core/InactivityTimer.cpp - core/ListDeleter.h - core/Merger.cpp - core/Metadata.cpp - core/PasswordGenerator.cpp - core/PassphraseGenerator.cpp - core/SignalMultiplexer.cpp - core/ScreenLockListener.cpp - core/ScreenLockListener.h - core/ScreenLockListenerPrivate.h - core/ScreenLockListenerPrivate.cpp - core/TimeDelta.cpp - core/TimeInfo.cpp - core/Clock.cpp - core/Tools.cpp - core/Translator.cpp - core/Base32.h - core/Base32.cpp - cli/Utils.cpp - cli/Utils.h - crypto/Crypto.cpp - crypto/CryptoHash.cpp - crypto/Random.cpp - crypto/SymmetricCipher.cpp - crypto/SymmetricCipherBackend.h - crypto/SymmetricCipherGcrypt.cpp - crypto/kdf/Kdf.cpp - crypto/kdf/Kdf_p.h - crypto/kdf/AesKdf.cpp - crypto/kdf/Argon2Kdf.cpp - format/CsvExporter.cpp - format/KeePass1.h - format/KeePass1Reader.cpp - format/KeePass2.cpp - format/KeePass2RandomStream.cpp - format/KdbxReader.cpp - format/KdbxWriter.cpp - format/KdbxXmlReader.cpp - format/KeePass2Reader.cpp - format/KeePass2Writer.cpp - format/Kdbx3Reader.cpp - format/Kdbx3Writer.cpp - format/Kdbx4Reader.cpp - format/Kdbx4Writer.cpp - format/KdbxXmlWriter.cpp - gui/AboutDialog.cpp - gui/Application.cpp - gui/CategoryListWidget.cpp - gui/Clipboard.cpp - gui/CloneDialog.cpp - gui/DatabaseOpenWidget.cpp - gui/DatabaseTabWidget.cpp - gui/DatabaseWidget.cpp - gui/DatabaseWidgetStateSync.cpp - gui/EntryPreviewWidget.cpp - gui/DialogyWidget.cpp - gui/DragTabBar.cpp - gui/EditWidget.cpp - gui/EditWidgetIcons.cpp - gui/EditWidgetProperties.cpp - gui/FileDialog.cpp - gui/Font.cpp - gui/IconModels.cpp - gui/KeePass1OpenWidget.cpp - gui/KMessageWidget.cpp - gui/LineEdit.cpp - gui/MainWindow.cpp - gui/MessageBox.cpp - gui/MessageWidget.cpp - gui/PasswordEdit.cpp - gui/PasswordGeneratorWidget.cpp - gui/ApplicationSettingsWidget.cpp - gui/SearchWidget.cpp - gui/SortFilterHideProxyModel.cpp - gui/SquareSvgWidget.cpp - gui/TotpSetupDialog.cpp - gui/TotpDialog.cpp - gui/TotpExportSettingsDialog.cpp - gui/UnlockDatabaseWidget.cpp - gui/UnlockDatabaseDialog.cpp - gui/WelcomeWidget.cpp - gui/widgets/ElidedLabel.cpp - gui/csvImport/CsvImportWidget.cpp - gui/csvImport/CsvImportWizard.cpp - gui/csvImport/CsvParserModel.cpp - gui/entry/AutoTypeAssociationsModel.cpp - gui/entry/AutoTypeMatchModel.cpp - gui/entry/AutoTypeMatchView.cpp - gui/entry/EditEntryWidget.cpp - gui/entry/EditEntryWidget_p.h - gui/entry/EntryAttachmentsModel.cpp - gui/entry/EntryAttachmentsWidget.cpp - gui/entry/EntryAttributesModel.cpp - gui/entry/EntryHistoryModel.cpp - gui/entry/EntryModel.cpp - gui/entry/EntryView.cpp - gui/group/EditGroupWidget.cpp - gui/group/GroupModel.cpp - gui/group/GroupView.cpp - gui/masterkey/KeyComponentWidget.cpp - gui/masterkey/PasswordEditWidget.cpp - gui/masterkey/YubiKeyEditWidget.cpp - gui/masterkey/KeyFileEditWidget.cpp - gui/dbsettings/DatabaseSettingsWidget.cpp - gui/dbsettings/DatabaseSettingsDialog.cpp - gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp - gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp - gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp - gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp - gui/settings/SettingsWidget.cpp - gui/wizard/NewDatabaseWizard.cpp - gui/wizard/NewDatabaseWizardPage.cpp - gui/wizard/NewDatabaseWizardPageMetaData.cpp - gui/wizard/NewDatabaseWizardPageEncryption.cpp - gui/wizard/NewDatabaseWizardPageMasterKey.cpp - keys/ChallengeResponseKey.h - keys/CompositeKey.cpp - keys/drivers/YubiKey.h - keys/FileKey.cpp - keys/Key.h - keys/PasswordKey.cpp - keys/YkChallengeResponseKey.cpp - streams/HashedBlockStream.cpp - streams/HmacBlockStream.cpp - streams/LayeredStream.cpp - streams/qtiocompressor.cpp - streams/StoreDataStream.cpp - streams/SymmetricCipherStream.cpp - totp/totp.h - totp/totp.cpp) + core/AutoTypeAssociations.cpp + core/AsyncTask.h + core/AutoTypeMatch.cpp + core/Compare.cpp + core/Config.cpp + core/CsvParser.cpp + core/CustomData.cpp + core/Database.cpp + core/DatabaseIcons.cpp + core/Entry.cpp + core/EntryAttachments.cpp + core/EntryAttributes.cpp + core/EntrySearcher.cpp + core/FilePath.cpp + core/Bootstrap.cpp + core/Global.h + core/Group.cpp + core/InactivityTimer.cpp + core/ListDeleter.h + core/Merger.cpp + core/Metadata.cpp + core/PasswordGenerator.cpp + core/PassphraseGenerator.cpp + core/SignalMultiplexer.cpp + core/ScreenLockListener.cpp + core/ScreenLockListener.h + core/ScreenLockListenerPrivate.h + core/ScreenLockListenerPrivate.cpp + core/TimeDelta.cpp + core/TimeInfo.cpp + core/Clock.cpp + core/Tools.cpp + core/Translator.cpp + core/Base32.h + core/Base32.cpp + cli/Utils.cpp + cli/Utils.h + crypto/Crypto.cpp + crypto/CryptoHash.cpp + crypto/Random.cpp + crypto/SymmetricCipher.cpp + crypto/SymmetricCipherBackend.h + crypto/SymmetricCipherGcrypt.cpp + crypto/kdf/Kdf.cpp + crypto/kdf/Kdf_p.h + crypto/kdf/AesKdf.cpp + crypto/kdf/Argon2Kdf.cpp + format/CsvExporter.cpp + format/KeePass1.h + format/KeePass1Reader.cpp + format/KeePass2.cpp + format/KeePass2RandomStream.cpp + format/KdbxReader.cpp + format/KdbxWriter.cpp + format/KdbxXmlReader.cpp + format/KeePass2Reader.cpp + format/KeePass2Writer.cpp + format/Kdbx3Reader.cpp + format/Kdbx3Writer.cpp + format/Kdbx4Reader.cpp + format/Kdbx4Writer.cpp + format/KdbxXmlWriter.cpp + gui/AboutDialog.cpp + gui/Application.cpp + gui/CategoryListWidget.cpp + gui/Clipboard.cpp + gui/CloneDialog.cpp + gui/DatabaseOpenWidget.cpp + gui/DatabaseTabWidget.cpp + gui/DatabaseWidget.cpp + gui/DatabaseWidgetStateSync.cpp + gui/EntryPreviewWidget.cpp + gui/DialogyWidget.cpp + gui/DragTabBar.cpp + gui/EditWidget.cpp + gui/EditWidgetIcons.cpp + gui/EditWidgetProperties.cpp + gui/FileDialog.cpp + gui/Font.cpp + gui/IconModels.cpp + gui/KeePass1OpenWidget.cpp + gui/KMessageWidget.cpp + gui/LineEdit.cpp + gui/MainWindow.cpp + gui/MessageBox.cpp + gui/MessageWidget.cpp + gui/PasswordEdit.cpp + gui/PasswordGeneratorWidget.cpp + gui/ApplicationSettingsWidget.cpp + gui/SearchWidget.cpp + gui/SortFilterHideProxyModel.cpp + gui/SquareSvgWidget.cpp + gui/TotpSetupDialog.cpp + gui/TotpDialog.cpp + gui/TotpExportSettingsDialog.cpp + gui/UnlockDatabaseWidget.cpp + gui/UnlockDatabaseDialog.cpp + gui/WelcomeWidget.cpp + gui/widgets/ElidedLabel.cpp + gui/csvImport/CsvImportWidget.cpp + gui/csvImport/CsvImportWizard.cpp + gui/csvImport/CsvParserModel.cpp + gui/entry/AutoTypeAssociationsModel.cpp + gui/entry/AutoTypeMatchModel.cpp + gui/entry/AutoTypeMatchView.cpp + gui/entry/EditEntryWidget.cpp + gui/entry/EditEntryWidget_p.h + gui/entry/EntryAttachmentsModel.cpp + gui/entry/EntryAttachmentsWidget.cpp + gui/entry/EntryAttributesModel.cpp + gui/entry/EntryHistoryModel.cpp + gui/entry/EntryModel.cpp + gui/entry/EntryView.cpp + gui/group/EditGroupWidget.cpp + gui/group/GroupModel.cpp + gui/group/GroupView.cpp + gui/masterkey/KeyComponentWidget.cpp + gui/masterkey/PasswordEditWidget.cpp + gui/masterkey/YubiKeyEditWidget.cpp + gui/masterkey/KeyFileEditWidget.cpp + gui/dbsettings/DatabaseSettingsWidget.cpp + gui/dbsettings/DatabaseSettingsDialog.cpp + gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp + gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp + gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp + gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp + gui/settings/SettingsWidget.cpp + gui/wizard/NewDatabaseWizard.cpp + gui/wizard/NewDatabaseWizardPage.cpp + gui/wizard/NewDatabaseWizardPageMetaData.cpp + gui/wizard/NewDatabaseWizardPageEncryption.cpp + gui/wizard/NewDatabaseWizardPageMasterKey.cpp + keys/ChallengeResponseKey.h + keys/CompositeKey.cpp + keys/drivers/YubiKey.h + keys/FileKey.cpp + keys/Key.h + keys/PasswordKey.cpp + keys/YkChallengeResponseKey.cpp + streams/HashedBlockStream.cpp + streams/HmacBlockStream.cpp + streams/LayeredStream.cpp + streams/qtiocompressor.cpp + streams/StoreDataStream.cpp + streams/SymmetricCipherStream.cpp + totp/totp.h + totp/totp.cpp) if(APPLE) - set(keepassx_SOURCES ${keepassx_SOURCES} - core/ScreenLockListenerMac.h - core/ScreenLockListenerMac.cpp - core/MacPasteboard.h - core/MacPasteboard.cpp - ) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/ScreenLockListenerMac.h + core/ScreenLockListenerMac.cpp + core/MacPasteboard.h + core/MacPasteboard.cpp) endif() if(UNIX AND NOT APPLE) - set(keepassx_SOURCES ${keepassx_SOURCES} - core/ScreenLockListenerDBus.h - core/ScreenLockListenerDBus.cpp - gui/MainWindowAdaptor.cpp - ) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/ScreenLockListenerDBus.h + core/ScreenLockListenerDBus.cpp + gui/MainWindowAdaptor.cpp) endif() if(MINGW) - set(keepassx_SOURCES ${keepassx_SOURCES} - core/ScreenLockListenerWin.h - core/ScreenLockListenerWin.cpp - ) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/ScreenLockListenerWin.h + core/ScreenLockListenerWin.cpp) endif() -set(keepassx_SOURCES_MAINEXE - main.cpp -) +set(keepassx_SOURCES_MAINEXE main.cpp) add_feature_info(Auto-Type WITH_XC_AUTOTYPE "Automatic password typing") add_feature_info(Networking WITH_XC_NETWORKING "Compile KeePassXC with network access code (e.g. for downloading website icons)") @@ -237,32 +235,29 @@ if(WITH_XC_SSHAGENT) endif() set(autotype_SOURCES - core/Tools.cpp - autotype/AutoType.cpp - autotype/AutoTypeAction.cpp - autotype/AutoTypePlatformPlugin.h - autotype/AutoTypeSelectDialog.cpp - autotype/AutoTypeSelectView.cpp - autotype/ShortcutWidget.cpp - autotype/WildcardMatcher.cpp - autotype/WindowSelectComboBox.cpp - autotype/test/AutoTypeTestInterface.h -) + core/Tools.cpp + autotype/AutoType.cpp + autotype/AutoTypeAction.cpp + autotype/AutoTypePlatformPlugin.h + autotype/AutoTypeSelectDialog.cpp + autotype/AutoTypeSelectView.cpp + autotype/ShortcutWidget.cpp + autotype/WildcardMatcher.cpp + autotype/WindowSelectComboBox.cpp + autotype/test/AutoTypeTestInterface.h) if(MINGW) - set(keepassx_SOURCES_MAINEXE - ${keepassx_SOURCES_MAINEXE} - ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) + set(keepassx_SOURCES_MAINEXE ${keepassx_SOURCES_MAINEXE} ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) endif() if(WITH_XC_YUBIKEY) - list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp) + list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp) else() - list(APPEND keepassx_SOURCES keys/drivers/YubiKeyStub.cpp) + list(APPEND keepassx_SOURCES keys/drivers/YubiKeyStub.cpp) endif() if(WITH_XC_TOUCHID) - list(APPEND keepassx_SOURCES touchid/TouchID.mm) + list(APPEND keepassx_SOURCES touchid/TouchID.mm) endif() add_library(autotype STATIC ${autotype_SOURCES}) @@ -272,35 +267,35 @@ add_library(keepassx_core STATIC ${keepassx_SOURCES}) set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) target_link_libraries(keepassx_core - autotype - ${keepassxcbrowser_LIB} - ${sshagent_LIB} - ${qrcode_LIB} - Qt5::Core - Qt5::Concurrent - Qt5::Network - Qt5::Widgets - ${CURL_LIBRARIES} - ${YUBIKEY_LIBRARIES} - ${ZXCVBN_LIBRARIES} - ${ARGON2_LIBRARIES} - ${GCRYPT_LIBRARIES} - ${GPGERROR_LIBRARIES} - ${YUBIKEY_LIBRARIES} - ${ZLIB_LIBRARIES} - ${ZXCVBN_LIBRARIES}) + autotype + ${keepassxcbrowser_LIB} + ${sshagent_LIB} + ${qrcode_LIB} + Qt5::Core + Qt5::Concurrent + Qt5::Network + Qt5::Widgets + ${CURL_LIBRARIES} + ${YUBIKEY_LIBRARIES} + ${ZXCVBN_LIBRARIES} + ${ARGON2_LIBRARIES} + ${GCRYPT_LIBRARIES} + ${GPGERROR_LIBRARIES} + ${YUBIKEY_LIBRARIES} + ${ZLIB_LIBRARIES} + ${ZXCVBN_LIBRARIES}) if(APPLE) target_link_libraries(keepassx_core "-framework Foundation") if(Qt5MacExtras_FOUND) - target_link_libraries(keepassx_core Qt5::MacExtras) + target_link_libraries(keepassx_core Qt5::MacExtras) endif() if(WITH_XC_TOUCHID) - target_link_libraries(keepassx_core "-framework Security") - target_link_libraries(keepassx_core "-framework LocalAuthentication") + target_link_libraries(keepassx_core "-framework Security") + target_link_libraries(keepassx_core "-framework LocalAuthentication") endif() endif() -if (UNIX AND NOT APPLE) +if(UNIX AND NOT APPLE) target_link_libraries(keepassx_core Qt5::DBus) endif() if(MINGW) @@ -308,15 +303,15 @@ if(MINGW) endif() if(MINGW) - include(GenerateProductVersion) - generate_product_version( - WIN32_ProductVersionFiles - NAME "KeePassXC" - COMPANY_NAME "KeePassXC Team" - VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} - VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} - VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} - ) + include(GenerateProductVersion) + generate_product_version( + WIN32_ProductVersionFiles + NAME "KeePassXC" + COMPANY_NAME "KeePassXC Team" + VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} + VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} + VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} + ) endif() add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles}) @@ -325,116 +320,116 @@ target_link_libraries(${PROGNAME} keepassx_core) set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON) if(APPLE AND WITH_APP_BUNDLE) - configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) - set_target_properties(${PROGNAME} PROPERTIES - MACOSX_BUNDLE ON - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) - - if(WITH_XC_TOUCHID) - set_target_properties(${PROGNAME} PROPERTIES - CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/share/macosx/keepassxc.entitlements" ) - endif() - - if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") - install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" - DESTINATION "${DATA_INSTALL_DIR}") - endif() - - set(CPACK_GENERATOR "DragNDrop") - set(CPACK_DMG_FORMAT "UDBZ") - set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") - set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") - set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") - set(CPACK_SYSTEM_NAME "OSX") - set(CPACK_STRIP_FILES ON) - set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") - include(CPack) - - add_custom_command(TARGET ${PROGNAME} - POST_BUILD - COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src - COMMENT "Deploying app bundle") + configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) + set_target_properties(${PROGNAME} PROPERTIES + MACOSX_BUNDLE ON + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) + + if(WITH_XC_TOUCHID) + set_target_properties(${PROGNAME} PROPERTIES + CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/share/macosx/keepassxc.entitlements") + endif() + + if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") + install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" + DESTINATION "${DATA_INSTALL_DIR}") + endif() + + set(CPACK_GENERATOR "DragNDrop") + set(CPACK_DMG_FORMAT "UDBZ") + set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") + set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") + set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") + set(CPACK_SYSTEM_NAME "OSX") + set(CPACK_STRIP_FILES ON) + set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") + include(CPack) + + add_custom_command(TARGET ${PROGNAME} + POST_BUILD + COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src + COMMENT "Deploying app bundle") endif() install(TARGETS ${PROGNAME} - BUNDLE DESTINATION . COMPONENT Runtime - RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) + BUNDLE DESTINATION . COMPONENT Runtime + RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) if(MINGW) - if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") - set(OUTPUT_FILE_POSTFIX "Win64") - else() - set(OUTPUT_FILE_POSTFIX "Win32") - endif() - - # We have to copy the license file in the configuration phase. - # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and - # we have to copy it because WiX needs it to have a .txt extension. - execute_process(COMMAND ${CMAKE_COMMAND} -E copy - "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" - "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") - - string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) - - set(CPACK_GENERATOR "ZIP;NSIS") - set(CPACK_STRIP_FILES OFF) - set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") - set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) - set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) - set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") - string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") - set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) - set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") - set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") - set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe") - string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp") - set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") - set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") - set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") - set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") - set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") - set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") - set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") - set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") - set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) - set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") - set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") - set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) - set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") - set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") - set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") - set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") - set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") - set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") - set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") - include(CPack) - - install(CODE " - set(gp_tool \"objdump\") - " COMPONENT Runtime) - - include(DeployQt4) - install_qt4_executable(${PROGNAME}.exe) - - # install Qt5 plugins - set(PLUGINS_DIR ${Qt5_PREFIX}/share/qt5/plugins) - install(FILES - ${PLUGINS_DIR}/platforms/qwindows$<$:d>.dll - ${PLUGINS_DIR}/platforms/qdirect2d$<$:d>.dll - DESTINATION "platforms") - install(FILES ${PLUGINS_DIR}/styles/qwindowsvistastyle$<$:d>.dll DESTINATION "styles") - install(FILES ${PLUGINS_DIR}/platforminputcontexts/qtvirtualkeyboardplugin$<$:d>.dll DESTINATION "platforminputcontexts") - install(FILES ${PLUGINS_DIR}/iconengines/qsvgicon$<$:d>.dll DESTINATION "iconengines") - install(FILES - ${PLUGINS_DIR}/imageformats/qgif$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qicns$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qico$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qjpeg$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qwebp$<$:d>.dll - DESTINATION "imageformats") - - # install CA cert chains - install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") + if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") + set(OUTPUT_FILE_POSTFIX "Win64") + else() + set(OUTPUT_FILE_POSTFIX "Win32") + endif() + + # We have to copy the license file in the configuration phase. + # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and + # we have to copy it because WiX needs it to have a .txt extension. + execute_process(COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" + "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + + string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) + + set(CPACK_GENERATOR "ZIP;NSIS") + set(CPACK_STRIP_FILES OFF) + set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") + set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) + set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) + set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") + string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") + set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") + set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe") + string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp") + set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") + set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") + set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") + set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") + set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") + set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") + set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) + set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") + set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") + set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") + set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") + set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") + set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") + set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") + set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") + set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") + include(CPack) + + install(CODE " + set(gp_tool \"objdump\") + " COMPONENT Runtime) + + include(DeployQt4) + install_qt4_executable(${PROGNAME}.exe) + + # install Qt5 plugins + set(PLUGINS_DIR ${Qt5_PREFIX}/share/qt5/plugins) + install(FILES + ${PLUGINS_DIR}/platforms/qwindows$<$:d>.dll + ${PLUGINS_DIR}/platforms/qdirect2d$<$:d>.dll + DESTINATION "platforms") + install(FILES ${PLUGINS_DIR}/styles/qwindowsvistastyle$<$:d>.dll DESTINATION "styles") + install(FILES ${PLUGINS_DIR}/platforminputcontexts/qtvirtualkeyboardplugin$<$:d>.dll DESTINATION "platforminputcontexts") + install(FILES ${PLUGINS_DIR}/iconengines/qsvgicon$<$:d>.dll DESTINATION "iconengines") + install(FILES + ${PLUGINS_DIR}/imageformats/qgif$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qicns$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qico$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qjpeg$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qwebp$<$:d>.dll + DESTINATION "imageformats") + + # install CA cert chains + install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") endif() diff --git a/src/autotype/CMakeLists.txt b/src/autotype/CMakeLists.txt index 4b36105388..df0483a08a 100644 --- a/src/autotype/CMakeLists.txt +++ b/src/autotype/CMakeLists.txt @@ -1,23 +1,23 @@ if(WITH_XC_AUTOTYPE) - if(UNIX AND NOT APPLE) - find_package(X11) - find_package(Qt5X11Extras 5.2) - if(PRINT_SUMMARY) - add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") - add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") - add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") - endif() + if(UNIX AND NOT APPLE) + find_package(X11) + find_package(Qt5X11Extras 5.2) + if(PRINT_SUMMARY) + add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") + add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") + add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") + endif() - if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) - add_subdirectory(xcb) + if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) + add_subdirectory(xcb) + endif() + elseif(APPLE) + add_subdirectory(mac) + elseif(WIN32) + add_subdirectory(windows) endif() - elseif(APPLE) - add_subdirectory(mac) - elseif(WIN32) - add_subdirectory(windows) - endif() - if(WITH_TESTS) - add_subdirectory(test) - endif() + if(WITH_TESTS) + add_subdirectory(test) + endif() endif() diff --git a/src/autotype/mac/CMakeLists.txt b/src/autotype/mac/CMakeLists.txt index 08c5327847..f2915bc0ab 100644 --- a/src/autotype/mac/CMakeLists.txt +++ b/src/autotype/mac/CMakeLists.txt @@ -1,24 +1,20 @@ -set(autotype_mac_SOURCES - AutoTypeMac.cpp -) +set(autotype_mac_SOURCES AutoTypeMac.cpp) -set(autotype_mac_mm_SOURCES - AppKitImpl.mm -) +set(autotype_mac_mm_SOURCES AppKitImpl.mm) add_library(keepassx-autotype-cocoa MODULE ${autotype_mac_SOURCES} ${autotype_mac_mm_SOURCES}) set_target_properties(keepassx-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon") target_link_libraries(keepassx-autotype-cocoa ${PROGNAME} Qt5::Core Qt5::Widgets) if(WITH_APP_BUNDLE) - add_custom_command(TARGET keepassx-autotype-cocoa - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR} - COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src - COMMENT "Deploying autotype plugin") + add_custom_command(TARGET keepassx-autotype-cocoa + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR} + COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src + COMMENT "Deploying autotype plugin") else() - install(TARGETS keepassx-autotype-cocoa - BUNDLE DESTINATION . COMPONENT Runtime - LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) + install(TARGETS keepassx-autotype-cocoa + BUNDLE DESTINATION . COMPONENT Runtime + LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) endif() diff --git a/src/autotype/test/CMakeLists.txt b/src/autotype/test/CMakeLists.txt index f41fa1b50c..a9cf998dfa 100644 --- a/src/autotype/test/CMakeLists.txt +++ b/src/autotype/test/CMakeLists.txt @@ -1,6 +1,4 @@ -set(autotype_test_SOURCES - AutoTypeTest.cpp -) +set(autotype_test_SOURCES AutoTypeTest.cpp) add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES}) target_link_libraries(keepassx-autotype-test keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) diff --git a/src/autotype/windows/CMakeLists.txt b/src/autotype/windows/CMakeLists.txt index cc3ad4b448..be74b7aa7d 100644 --- a/src/autotype/windows/CMakeLists.txt +++ b/src/autotype/windows/CMakeLists.txt @@ -1,9 +1,7 @@ -set(autotype_win_SOURCES - AutoTypeWindows.cpp -) +set(autotype_win_SOURCES AutoTypeWindows.cpp) add_library(keepassx-autotype-windows MODULE ${autotype_win_SOURCES}) target_link_libraries(keepassx-autotype-windows keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) install(TARGETS keepassx-autotype-windows BUNDLE DESTINATION . COMPONENT Runtime -LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) + LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) diff --git a/src/autotype/xcb/CMakeLists.txt b/src/autotype/xcb/CMakeLists.txt index 7e7f252d72..e41d4a0993 100644 --- a/src/autotype/xcb/CMakeLists.txt +++ b/src/autotype/xcb/CMakeLists.txt @@ -1,8 +1,6 @@ include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) -set(autotype_XCB_SOURCES - AutoTypeXCB.cpp -) +set(autotype_XCB_SOURCES AutoTypeXCB.cpp) add_library(keepassx-autotype-xcb MODULE ${autotype_XCB_SOURCES}) target_link_libraries(keepassx-autotype-xcb keepassx_core Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) diff --git a/src/browser/CMakeLists.txt b/src/browser/CMakeLists.txt index bb5a01908b..10189d931c 100755 --- a/src/browser/CMakeLists.txt +++ b/src/browser/CMakeLists.txt @@ -19,19 +19,18 @@ if(WITH_XC_BROWSER) find_package(sodium 1.0.12 REQUIRED) set(keepassxcbrowser_SOURCES - BrowserAccessControlDialog.cpp - BrowserAction.cpp - BrowserClients.cpp - BrowserEntryConfig.cpp - BrowserEntrySaveDialog.cpp - BrowserOptionDialog.cpp - BrowserService.cpp - BrowserSettings.cpp - HostInstaller.cpp - NativeMessagingBase.cpp - NativeMessagingHost.cpp - Variant.cpp - ) + BrowserAccessControlDialog.cpp + BrowserAction.cpp + BrowserClients.cpp + BrowserEntryConfig.cpp + BrowserEntrySaveDialog.cpp + BrowserOptionDialog.cpp + BrowserService.cpp + BrowserSettings.cpp + HostInstaller.cpp + NativeMessagingBase.cpp + NativeMessagingHost.cpp + Variant.cpp) add_library(keepassxcbrowser STATIC ${keepassxcbrowser_SOURCES}) target_link_libraries(keepassxcbrowser Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network sodium) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index a5126f9997..f6377aa079 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -14,46 +14,46 @@ # along with this program. If not, see . set(cli_SOURCES - Add.cpp - Add.h - Clip.cpp - Clip.h - Command.cpp - Command.h - Diceware.cpp - Diceware.h - Edit.cpp - Edit.h - Estimate.cpp - Estimate.h - Extract.cpp - Extract.h - Generate.cpp - Generate.h - List.cpp - List.h - Locate.cpp - Locate.h - Merge.cpp - Merge.h - Remove.cpp - Remove.h - Show.cpp - Show.h) + Add.cpp + Add.h + Clip.cpp + Clip.h + Command.cpp + Command.h + Diceware.cpp + Diceware.h + Edit.cpp + Edit.h + Estimate.cpp + Estimate.h + Extract.cpp + Extract.h + Generate.cpp + Generate.h + List.cpp + List.h + Locate.cpp + Locate.h + Merge.cpp + Merge.h + Remove.cpp + Remove.h + Show.cpp + Show.h) add_library(cli STATIC ${cli_SOURCES}) target_link_libraries(cli Qt5::Core Qt5::Widgets) add_executable(keepassxc-cli keepassxc-cli.cpp) target_link_libraries(keepassxc-cli - cli - keepassx_core - Qt5::Core - ${GCRYPT_LIBRARIES} - ${ARGON2_LIBRARIES} - ${GPGERROR_LIBRARIES} - ${ZLIB_LIBRARIES} - ${ZXCVBN_LIBRARIES}) + cli + keepassx_core + Qt5::Core + ${GCRYPT_LIBRARIES} + ${ARGON2_LIBRARIES} + ${GPGERROR_LIBRARIES} + ${ZLIB_LIBRARIES} + ${ZXCVBN_LIBRARIES}) install(TARGETS keepassxc-cli BUNDLE DESTINATION . COMPONENT Runtime diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 96f6841719..3839b58e42 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,3 +1,4 @@ +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -13,7 +14,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/../src) +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_CURRENT_BINARY_DIR}/../src) add_definitions(-DQT_TEST_LIB) @@ -21,99 +26,98 @@ set(KEEPASSX_TEST_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data) configure_file(config-keepassx-tests.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx-tests.h) macro(parse_arguments prefix arg_names option_names) - set(DEFAULT_ARGS) - foreach(arg_name ${arg_names}) - set(${prefix}_${arg_name}) - endforeach(arg_name) - foreach(option ${option_names}) - set(${prefix}_${option} FALSE) - endforeach(option) - - set(current_arg_name DEFAULT_ARGS) - set(current_arg_list) - foreach(arg ${ARGN}) - set(larg_names ${arg_names}) - list(FIND larg_names "${arg}" is_arg_name) - if(is_arg_name GREATER -1) - set(${prefix}_${current_arg_name} ${current_arg_list}) - set(current_arg_name ${arg}) - set(current_arg_list) - else() - set(loption_names ${option_names}) - list(FIND loption_names "${arg}" is_option) - if(is_option GREATER -1) - set(${prefix}_${arg} TRUE) - else(is_option GREATER -1) - set(current_arg_list ${current_arg_list} ${arg}) - endif() - endif() - endforeach(arg) - set(${prefix}_${current_arg_name} ${current_arg_list}) + set(DEFAULT_ARGS) + foreach(arg_name ${arg_names}) + set(${prefix}_${arg_name}) + endforeach(arg_name) + foreach(option ${option_names}) + set(${prefix}_${option} FALSE) + endforeach(option) + + set(current_arg_name DEFAULT_ARGS) + set(current_arg_list) + foreach(arg ${ARGN}) + set(larg_names ${arg_names}) + list(FIND larg_names "${arg}" is_arg_name) + if(is_arg_name GREATER -1) + set(${prefix}_${current_arg_name} ${current_arg_list}) + set(current_arg_name ${arg}) + set(current_arg_list) + else() + set(loption_names ${option_names}) + list(FIND loption_names "${arg}" is_option) + if(is_option GREATER -1) + set(${prefix}_${arg} TRUE) + else(is_option GREATER -1) + set(current_arg_list ${current_arg_list} ${arg}) + endif() + endif() + endforeach(arg) + set(${prefix}_${current_arg_name} ${current_arg_list}) endmacro(parse_arguments) macro(add_unit_test) - parse_arguments(TEST "NAME;SOURCES;LIBS" "" ${ARGN}) - set(_test_NAME ${TEST_NAME}) - set(_srcList ${TEST_SOURCES}) - add_executable(${_test_NAME} ${_srcList}) - target_link_libraries(${_test_NAME} ${TEST_LIBS}) - - if(NOT TEST_OUTPUT) - set(TEST_OUTPUT plaintext) - endif(NOT TEST_OUTPUT) - set(TEST_OUTPUT ${TEST_OUTPUT} CACHE STRING "The output to generate when running the QTest unit tests") - - if(KDE4_TEST_OUTPUT STREQUAL "xml") - add_test(${_test_NAME} ${_test_NAME} -xml -o ${_test_NAME}.tml) - else(KDE4_TEST_OUTPUT STREQUAL "xml") - add_test(${_test_NAME} ${_test_NAME}) - endif(KDE4_TEST_OUTPUT STREQUAL "xml") - - if(NOT MSVC_IDE) #not needed for the ide - # if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests - if(NOT WITH_TESTS) - get_directory_property(_buildtestsAdded BUILDTESTS_ADDED) - if(NOT _buildtestsAdded) - add_custom_target(buildtests) - set_directory_properties(PROPERTIES BUILDTESTS_ADDED TRUE) - endif() - add_dependencies(buildtests ${_test_NAME}) + parse_arguments(TEST "NAME;SOURCES;LIBS" "" ${ARGN}) + set(_test_NAME ${TEST_NAME}) + set(_srcList ${TEST_SOURCES}) + add_executable(${_test_NAME} ${_srcList}) + target_link_libraries(${_test_NAME} ${TEST_LIBS}) + + if(NOT TEST_OUTPUT) + set(TEST_OUTPUT plaintext) + endif(NOT TEST_OUTPUT) + set(TEST_OUTPUT ${TEST_OUTPUT} CACHE STRING "The output to generate when running the QTest unit tests") + + if(KDE4_TEST_OUTPUT STREQUAL "xml") + add_test(${_test_NAME} ${_test_NAME} -xml -o ${_test_NAME}.tml) + else(KDE4_TEST_OUTPUT STREQUAL "xml") + add_test(${_test_NAME} ${_test_NAME}) + endif(KDE4_TEST_OUTPUT STREQUAL "xml") + + if(NOT MSVC_IDE) #not needed for the ide + # if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests + if(NOT WITH_TESTS) + get_directory_property(_buildtestsAdded BUILDTESTS_ADDED) + if(NOT _buildtestsAdded) + add_custom_target(buildtests) + set_directory_properties(PROPERTIES BUILDTESTS_ADDED TRUE) + endif() + add_dependencies(buildtests ${_test_NAME}) + endif() endif() - endif() endmacro(add_unit_test) set(TEST_LIBRARIES - keepassx_core - ${keepasshttp_LIB} - ${autotype_LIB} - Qt5::Core - Qt5::Concurrent - Qt5::Widgets - Qt5::Test - ${GCRYPT_LIBRARIES} - ${GPGERROR_LIBRARIES} - ${ZLIB_LIBRARIES} -) + keepassx_core + ${keepasshttp_LIB} + ${autotype_LIB} + Qt5::Core + Qt5::Concurrent + Qt5::Widgets + Qt5::Test + ${GCRYPT_LIBRARIES} + ${GPGERROR_LIBRARIES} + ${ZLIB_LIBRARIES}) set(testsupport_SOURCES TestGlobal.h modeltest.cpp FailDevice.cpp mock/MockClock.cpp util/TemporaryFile.cpp) add_library(testsupport STATIC ${testsupport_SOURCES}) target_link_libraries(testsupport Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Test) if(YUBIKEY_FOUND) - set(TEST_LIBRARIES ${TEST_LIBRARIES} ${YUBIKEY_LIBRARIES}) + set(TEST_LIBRARIES ${TEST_LIBRARIES} ${YUBIKEY_LIBRARIES}) endif() add_unit_test(NAME testgroup SOURCES TestGroup.cpp - LIBS testsupport ${TEST_LIBRARIES}) + LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testkdbx2 SOURCES TestKdbx2.cpp LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testkdbx3 SOURCES TestKeePass2Format.cpp FailDevice.cpp TestKdbx3.cpp - LIBS testsupport ${TEST_LIBRARIES}) + LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testkdbx4 SOURCES TestKeePass2Format.cpp FailDevice.cpp mock/MockChallengeResponseKey.cpp TestKdbx4.cpp - LIBS testsupport ${TEST_LIBRARIES}) + LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testkeys SOURCES TestKeys.cpp mock/MockChallengeResponseKey.cpp LIBS ${TEST_LIBRARIES}) @@ -137,7 +141,7 @@ add_unit_test(NAME testkeepass2randomstream SOURCES TestKeePass2RandomStream.cpp LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testmodified SOURCES TestModified.cpp - LIBS testsupport ${TEST_LIBRARIES}) + LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testdeletedobjects SOURCES TestDeletedObjects.cpp LIBS ${TEST_LIBRARIES}) @@ -149,14 +153,14 @@ add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp LIBS ${TEST_LIBRARIES}) if(WITH_XC_AUTOTYPE) - add_unit_test(NAME testautotype SOURCES TestAutoType.cpp - LIBS ${TEST_LIBRARIES}) - set_target_properties(testautotype PROPERTIES ENABLE_EXPORTS ON) + add_unit_test(NAME testautotype SOURCES TestAutoType.cpp + LIBS ${TEST_LIBRARIES}) + set_target_properties(testautotype PROPERTIES ENABLE_EXPORTS ON) endif() if(WITH_XC_SSHAGENT) - add_unit_test(NAME testopensshkey SOURCES TestOpenSSHKey.cpp - LIBS sshagent ${TEST_LIBRARIES}) + add_unit_test(NAME testopensshkey SOURCES TestOpenSSHKey.cpp + LIBS sshagent ${TEST_LIBRARIES}) endif() add_unit_test(NAME testentry SOURCES TestEntry.cpp @@ -183,7 +187,7 @@ add_unit_test(NAME testrandom SOURCES TestRandom.cpp add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp LIBS ${TEST_LIBRARIES}) -add_unit_test(NAME testcsveporter SOURCES TestCsvExporter.cpp +add_unit_test(NAME testcsvexporter SOURCES TestCsvExporter.cpp LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testykchallengeresponsekey @@ -198,9 +202,9 @@ add_unit_test(NAME testtools SOURCES TestTools.cpp if(WITH_GUI_TESTS) - # CLI clip tests need X environment on Linux - add_unit_test(NAME testcli SOURCES TestCli.cpp - LIBS testsupport cli ${TEST_LIBRARIES}) + # CLI clip tests need X environment on Linux + add_unit_test(NAME testcli SOURCES TestCli.cpp + LIBS testsupport cli ${TEST_LIBRARIES}) - add_subdirectory(gui) + add_subdirectory(gui) endif(WITH_GUI_TESTS)