chemfiles-sys 0.10.3

Rust FFI declaration for the chemfiles library
Documentation
cmake_minimum_required(VERSION 2.8.12)

project(chemfiles-rust CXX)

# Get default C++ libraries to link
file(WRITE ${PROJECT_BINARY_DIR}/cxx_link_libs.cmake "")
foreach(lib ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES})
    file(APPEND ${PROJECT_BINARY_DIR}/cxx_link_libs.cmake "${lib}\n")
endforeach()

# Get default C++ search path for libraries
file(WRITE ${PROJECT_BINARY_DIR}/cxx_link_dirs.cmake "")
foreach(dir ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
    file(APPEND ${PROJECT_BINARY_DIR}/cxx_link_dirs.cmake "${dir}\n")
endforeach()

set(CHFL_RUST_PREBUILT_TARGET "" CACHE STRING "Pre-built target to download instead of building the code")
set(CHFL_RUST_PREBUILT_SHA256 "" CACHE STRING "SHA256 sum of the pre-built archive to download")

if (NOT ${CHFL_RUST_PREBUILT_TARGET} STREQUAL "")
    set(PREBUILT_DOWNLOAD_SUCCESS FALSE)
    set(PREBUILT_NAME "chemfiles-static.v${CHEMFILES_VERSION}.${CHFL_RUST_PREBUILT_TARGET}.tar.gz")
    set(PREBUILT_URL "https://github.com/chemfiles/chemfiles-prebuilt/releases/download/v${CHEMFILES_VERSION}/${PREBUILT_NAME}")

    set(PREBUILT_DESINATION ${CMAKE_CURRENT_BINARY_DIR}/${PREBUILT_NAME})

    message(STATUS "trying to download ${PREBUILT_URL}")
    file(DOWNLOAD
        ${PREBUILT_URL} ${PREBUILT_DESINATION}
        STATUS DOWNLOAD_STATUS
    )

    list(GET DOWNLOAD_STATUS 0 DOWNLOAD_ERROR_CODE)
    if (DOWNLOAD_ERROR_CODE)
        file(REMOVE ${PREBUILT_DESINATION})
        message(STATUS "failed to download prebuilt chemfiles, building from sources")
    else()
        set(PREBUILT_DOWNLOAD_SUCCESS TRUE)
    endif()

    if (PREBUILT_DOWNLOAD_SUCCESS)
        file(SHA256 ${PREBUILT_DESINATION} PREBUILT_SHA256)
        if (NOT ${PREBUILT_SHA256} STREQUAL ${CHFL_RUST_PREBUILT_SHA256})
            message(
                FATAL_ERROR
                "corrupted download of prebuilt chemfiles at '${PREBUILT_DESINATION}':\n"
                "Expected SHA256: ${CHFL_RUST_PREBUILT_SHA256}\n"
                "Actual SHA256: ${PREBUILT_SHA256}"
            )
        endif()

        # this could use file(ARCHIVE_EXTRACT ...), but that's only available
        # for cmake >= 3.18
        execute_process(
            COMMAND ${CMAKE_COMMAND} -E tar xf ${PREBUILT_DESINATION}
            WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}
        )

        install(CODE "message(STATUS \"nothing to install\")")
        return()
    endif()
endif()

# otherwise, try to build from sources
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
add_subdirectory(chemfiles)