include (LibAddPlugin)

if (DEPENDENCY_PHASE)

	# Plugin variant: crypto_openssl
	set (plugin crypto_openssl)
	find_package (LibOpenSSL)
	if (NOT OPENSSL_FOUND)
		remove_plugin (${plugin} "OpenSSL development files not found")
	endif ()

	# Plugin variant: crypto_gcrypt
	set (plugin crypto_gcrypt)
	find_package (Libgcrypt QUIET)
	if (NOT LIBGCRYPT_FOUND)
		remove_plugin (${plugin} "libgcrypt development files not found")
	endif ()

	# Plugin variant: crypto_botan
	set (plugin crypto_botan)
	find_package (LibBotan)
	if (NOT Botan_FOUND)
		remove_plugin (${plugin} "botan development files not found")
	endif ()
	if (ENABLE_ASAN AND (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
		remove_plugin (${plugin} "ENABLE_ASAN + GNU not supported by botan")
	endif ()

	# clean up for dependency phase
	unset (plugin)
endif ()

set (CRYPTO_COMMON_FILES helper.h helper.c gpg.h gpg.c crypto.h crypto.c)

#
# Compile Variant: libgcrypt
#
add_plugin (
	crypto_gcrypt
	SOURCES gcrypt_operations.h gcrypt_operations.c ${CRYPTO_COMMON_FILES}
	INCLUDE_DIRECTORIES ${Libgcrypt_INCLUDE_DIRS}
	LINK_LIBRARIES ${Libgcrypt_LIBRARIES}
	LINK_ELEKTRA elektra-invoke
	COMPILE_DEFINITIONS ELEKTRA_VARIANT=gcrypt ELEKTRA_CRYPTO_API_GCRYPT)

#
# Compile Variant: OpenSSL
#
add_plugin (
	crypto_openssl
	SOURCES openssl_operations.h openssl_operations.c ${CRYPTO_COMMON_FILES}
	INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIR}
	LINK_LIBRARIES ${OPENSSL_LIBRARIES}
	LINK_ELEKTRA elektra-invoke
	COMPILE_DEFINITIONS ELEKTRA_VARIANT=openssl ELEKTRA_CRYPTO_API_OPENSSL)

#
# Compile Variant: Botan
#
add_plugin (
	crypto_botan
	SOURCES botan_operations.h botan_operations.cpp ${CRYPTO_COMMON_FILES}
	INCLUDE_DIRECTORIES ${Botan_INCLUDE_DIRS}
	LINK_LIBRARIES ${Botan_LIBRARIES}
	LINK_ELEKTRA elektra-invoke
	COMPILE_DEFINITIONS ELEKTRA_VARIANT=botan ELEKTRA_CRYPTO_API_BOTAN)

if (ADDTESTING_PHASE)
	if (HAS_OPENSSL_4SURE)
		add_plugintest (crypto_openssl LINK_PLUGIN "crypto_openssl")
	endif ()

	if (HAS_GCRYPT_4SURE)
		add_plugintest (crypto_gcrypt MEMLEAK LINK_PLUGIN "crypto_gcrypt")
	endif ()

	if (HAS_BOTAN_4SURE)
		add_plugintest (crypto_botan LINK_PLUGIN "crypto_botan")
	endif ()
endif ()

unset (CRYPTO_COMMON_FILES)
