Fix linker definition clashes between libargon2 and libsodium on Windows

This commit is contained in:
Janek Bevendorff 2018-01-14 16:54:23 +01:00 committed by Jonathan White
parent 002d374f0c
commit 21a6c0fd89
3 changed files with 50 additions and 3 deletions

View File

@ -14,7 +14,20 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
find_path(ARGON2_INCLUDE_DIR argon2.h)
find_library(ARGON2_LIBRARIES argon2)
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...")
execute_process(COMMAND objcopy
--redefine-sym argon2_hash=libargon2_argon2_hash
--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)
endif()
mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)

View File

@ -0,0 +1,34 @@
/*
* Copyright (C) 2018 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEEPASSXC_CRYPTO_ARGON2_H
#define KEEPASSXC_CRYPTO_ARGON2_H
/*
Argon2 wrapper header with redefined symbols to be used with the
patched libargon2 binary which is generated by the build system.
This is to avoid link-time definition clashes with libsodium on Windows.
*/
#ifdef Q_OS_WIN
#define argon2_hash libargon2_argon2_hash
#define argon2_error_message libargon2_argon2_error_message
#endif
#include <argon2.h>
#endif //KEEPASSXC_CRYPTO_ARGON2_H

View File

@ -18,8 +18,8 @@
#include "Argon2Kdf.h"
#include <QtConcurrent>
#include <argon2.h>
#include "crypto/argon2/argon2.h"
#include "format/KeePass2.h"
/**