cmake_minimum_required(VERSION 3.5)
project(swipl-archive)

include("../cmake/PrologPackage.cmake")

if(POLICY CMP0074)
  cmake_policy(SET CMP0074 NEW)
endif()

# The native FindLibArchive is rather naive.  This allows overruling
# the libarchive dependencies
find_package(LibArchive)

if(LibArchive_FOUND)

if(NOT LibArchive_OS_LIBS)
if(WIN32)
  set(LibArchive_OS_LIBS nettle.lib xml2.lib iconv.lib regex.lib expat.lib lzma.lib zstd.lib lz4.lib bz2.lib z.lib bcrypt.lib ws2_32.lib)
else()
  set(LibArchive_OS_LIBS)
endif()
endif()

set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LibArchive_LIBRARIES} ${LibArchive_OS_LIBS})
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${LibArchive_INCLUDE_DIRS})

AC_CHECK_FUNCS(archive_read_support_filter_bzip2
	       archive_read_support_filter_compress
	       archive_read_support_filter_gzip
	       archive_read_support_filter_grzip
	       archive_read_support_filter_lrzip
	       archive_read_support_filter_lzip
	       archive_read_support_filter_lzma
	       archive_read_support_filter_lzop
	       archive_read_support_filter_none
	       archive_read_support_filter_rpm
	       archive_read_support_filter_uu
	       archive_read_support_filter_xz)

AC_CHECK_FUNCS(archive_read_support_format_7zip
	       archive_read_support_format_ar
	       archive_read_support_format_cab
	       archive_read_support_format_cpio
	       archive_read_support_format_empty
	       archive_read_support_format_gnutar
	       archive_read_support_format_iso9660
	       archive_read_support_format_lha
	       archive_read_support_format_mtree
	       archive_read_support_format_rar
	       archive_read_support_format_raw
	       archive_read_support_format_tar
	       archive_read_support_format_xar
	       archive_read_support_format_zip)

AC_CHECK_FUNCS(archive_read_set_seek_callback)

# TODO: The following aren't needed?
AC_CHECK_FUNCS(archive_read_free
	       archive_filter_count
	       archive_read_open1
	       archive_read_open2)

AC_CHECK_FUNCS(archive_write_free
	       archive_write_open)

configure_file(config.h.cmake config.h)

swipl_plugin(
    archive
    MODULE archive4pl
    C_SOURCES archive4pl.c
    C_LIBS ${LibArchive_LIBRARIES} ${LibArchive_OS_LIBS}
    PL_LIBS archive.pl)
target_include_directories(
    plugin_archive4pl BEFORE PRIVATE
    ${LibArchive_INCLUDE_DIRS})

install_dll(${LibArchive_LIBRARIES})

test_libs(archive)

pkg_doc(archive
	SOURCE archive.pl archive4pl.tex
	DEPENDS archive)

endif(LibArchive_FOUND)
