# Copyright 2019, 2020, Collabora, Ltd.
# Copyright 2019, 2020, Visual Computing Lab, ISTI - Italian National Research Council
# SPDX-License-Identifier: BSL-1.0

option(
	MESHLAB_ALLOW_OPTIONAL_EXTERNAL_LIBRARIES
	"Allow to use/build optional external libraries"
	ON)

option(
	MESHLAB_BUILD_EXTERNAL_SOURCES_WITHOUT_WARNINGS
	"Should warnings be disabled on external libraries code?"
	ON)

set(MESHLAB_EXTERNAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads")
set(MESHLAB_EXTERNAL_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(MESHLAB_EXTERNAL_DOWNLOAD_DIR "${MESHLAB_EXTERNAL_DIR}/downloads")

add_library(external-disable-warnings INTERFACE)
if(MESHLAB_BUILD_EXTERNAL_SOURCES_WITHOUT_WARNINGS)
	if(MSVC)
		# TODO
	elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
		target_compile_options(external-disable-warnings INTERFACE -w)
	endif()
endif()

## REQUIRED EXTERNAL LIBS ##

# GLEW - required
include(${CMAKE_CURRENT_SOURCE_DIR}/glew.cmake)

# EasyExif - required
include(${CMAKE_CURRENT_SOURCE_DIR}/easyexif.cmake)


## OPTIONAL EXTERNAL LIBS ##

if ((NOT MESHLAB_BUILD_MINI) AND MESHLAB_ALLOW_OPTIONAL_EXTERNAL_LIBRARIES)

	message(STATUS "Searching for optional components")

	# boost - optional for filter_mesh_booleans
	include(${CMAKE_CURRENT_SOURCE_DIR}/boost.cmake)

	# cgal - optional for filter_mesh_booleans
	include(${CMAKE_CURRENT_SOURCE_DIR}/cgal.cmake)

	# embree - optional for filter_embree
	include(${CMAKE_CURRENT_SOURCE_DIR}/embree.cmake)

	# levmar - optional, for several plugins
	include(${CMAKE_CURRENT_SOURCE_DIR}/levmar.cmake)

	# lib3ds - optional, for io_3ds
	include(${CMAKE_CURRENT_SOURCE_DIR}/lib3ds.cmake)

	# lib3mf - optional, for io_3mf
	include(${CMAKE_CURRENT_SOURCE_DIR}/lib3mf.cmake)

	# libigl - optional for filter_mesh_booleans
	include(${CMAKE_CURRENT_SOURCE_DIR}/libigl.cmake)

	# muparser - optional, for filter_func
	include(${CMAKE_CURRENT_SOURCE_DIR}/muparser.cmake)

	# nexus - optional. for io_nxs
	include(${CMAKE_CURRENT_SOURCE_DIR}/nexus.cmake)

	# newuoa - optional and header-only, for several plugins including all that use levmar
	include(${CMAKE_CURRENT_SOURCE_DIR}/newuoa.cmake)

	# OpenCTM - optional, for io_ctm
	include(${CMAKE_CURRENT_SOURCE_DIR}/openctm.cmake)

	# qhull - optional, for filter_qhull
	include(${CMAKE_CURRENT_SOURCE_DIR}/qhull.cmake)

	# structure-synth - optional, for filter_ssynth
	include(${CMAKE_CURRENT_SOURCE_DIR}/ssynth.cmake)

	# tiny glTF - optional, for io_gltf
	include(${CMAKE_CURRENT_SOURCE_DIR}/tinygltf.cmake)

	# u3d - optional, for io_u3d
	include(${CMAKE_CURRENT_SOURCE_DIR}/u3d.cmake)

	# xerces library - optional, needed by libe57
	include(${CMAKE_CURRENT_SOURCE_DIR}/xerces.cmake)

	# libe57Format - optional, for io_e57
	include(${CMAKE_CURRENT_SOURCE_DIR}/e57.cmake)
endif()
