cmake_minimum_required(VERSION 3.16) project(deltachat LANGUAGES C) include(GNUInstallDirs) option(WITH_JSONRPC_BINDINGS "Generate jsonrpc bindings" OFF) find_program(CARGO cargo) if(APPLE) set(DYNAMIC_EXT "dylib") elseif(UNIX) set(DYNAMIC_EXT "so") else() set(DYNAMIC_EXT "dll") endif() if(DEFINED ENV{CARGO_BUILD_TARGET}) set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/$ENV{CARGO_BUILD_TARGET}/release") else() set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/release") endif() if(WITH_JSONRPC_BINDINGS) set(JSONRPC_ARGS --package deltachat-jsonrpc-bindings) endif() add_custom_target( lib_deltachat ALL COMMAND ${CMAKE_COMMAND} -E env CARGO_TARGET_DIR="${CMAKE_BINARY_DIR}/target" PREFIX="${CMAKE_INSTALL_PREFIX}" LIBDIR="${CMAKE_INSTALL_FULL_LIBDIR}" INCLUDEDIR="${CMAKE_INSTALL_FULL_INCLUDEDIR}" ${CARGO} build --release --package deltachat_ffi ${JSONRPC_ARGS} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) install(FILES "deltachat-ffi/deltachat.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") install(FILES "${CARGO_OUT_DIR}/libdeltachat.a" DESTINATION "${CMAKE_INSTALL_LIBDIR}") install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAKE_INSTALL_LIBDIR}") install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") if(WITH_JSONRPC_BINDINGS) install( FILES "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc/generated" ) install( FILES "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc" ) endif()