cmake_minimum_required(VERSION 3.16)
project(deltachat LANGUAGES C)
include(GNUInstallDirs)

find_program(CARGO cargo)

if(APPLE)
       set(DYNAMIC_EXT "dylib")
elseif(UNIX)
       set(DYNAMIC_EXT "so")
else()
       set(DYNAMIC_EXT "dll")
endif()

add_custom_command(
	OUTPUT
	"target/release/libdeltachat.a"
	"target/release/libdeltachat.${DYNAMIC_EXT}"
	"target/release/pkgconfig/deltachat.pc"
        COMMAND
        PREFIX=${CMAKE_INSTALL_PREFIX}
        LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR}
        INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR}
        ${CARGO} build --release --no-default-features --features jsonrpc

	# Build in `deltachat-ffi` directory instead of using
	# `--package deltachat_ffi` to avoid feature resolver version
	# "1" bug which makes `--no-default-features` affect only
	# `deltachat`, but not `deltachat-ffi` package.
	#
	# We can't enable version "2" resolver [1] because it is not
	# stable yet on rust 1.50.0.
	#
	# [1] https://doc.rust-lang.org/nightly/cargo/reference/features.html#resolver-version-2-command-line-flags
	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-ffi
)

add_custom_target(
	lib_deltachat
	ALL
	DEPENDS
	"target/release/libdeltachat.a"
	"target/release/libdeltachat.${DYNAMIC_EXT}"
	"target/release/pkgconfig/deltachat.pc"
)

install(FILES "deltachat-ffi/deltachat.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES "target/release/libdeltachat.a" DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES "target/release/libdeltachat.${DYNAMIC_EXT}" DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES "target/release/pkgconfig/deltachat.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
