#
# Copyright (C) 2021-2022 Intel Corporation
#
# SPDX-License-Identifier: MIT
#

# DEPENDENCY DETECTION
function(dependency_detect COMPONENT_NAME DLL_NAME VAR_NAME REL_LOCATION IS_THIRD_PARTY)
  if(DEFINED ${VAR_NAME}_DIR)
    get_filename_component(LIBRARY_DIR "${${VAR_NAME}_DIR}" ABSOLUTE)
  else()
    get_filename_component(LIBRARY_DIR_tmp "${NEO_SOURCE_DIR}/${REL_LOCATION}" ABSOLUTE)
    if(IS_DIRECTORY "${LIBRARY_DIR_tmp}")
      set(LIBRARY_DIR "${LIBRARY_DIR_tmp}")
    endif()
  endif()
  if(UNIX)
    if(DEFINED LIBRARY_DIR)
      if(IS_DIRECTORY "${LIBRARY_DIR}/lib/pkgconfig/")
        set(__tmp_LIBDIR "lib")
      elseif(IS_DIRECTORY "${LIBRARY_DIR}/${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
        set(__tmp_LIBDIR ${CMAKE_INSTALL_LIBDIR})
      endif()
    endif()

    find_package(PkgConfig)
    if(DEFINED __tmp_LIBDIR)
      set(OLD_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH})
      set(ENV{PKG_CONFIG_PATH} "${LIBRARY_DIR}/${__tmp_LIBDIR}/pkgconfig/")
    endif()
    pkg_check_modules(NEO__${VAR_NAME} ${DLL_NAME})
    if(DEFINED __tmp_LIBDIR)
      set(ENV{PKG_CONFIG_PATH} ${OLD_PKG_CONFIG_PATH})
    endif()

    if(NEO__${VAR_NAME}_FOUND)
      if(DEFINED __tmp_LIBDIR)
        if(NOT NEO__${VAR_NAME}_INCLUDE_DIRS STREQUAL "")
          string(REPLACE "${NEO__${VAR_NAME}_INCLUDEDIR}" "${LIBRARY_DIR}/include" NEO__${VAR_NAME}_INCLUDE_DIRS "${NEO__${VAR_NAME}_INCLUDE_DIRS}")
        else()
          set(NEO__${VAR_NAME}_INCLUDE_DIRS "${LIBRARY_DIR}/include")
        endif()
      endif()

      set(NEO__${VAR_NAME}_INCLUDE_DIR "${NEO__${VAR_NAME}_INCLUDE_DIRS}")
      set(NEO__${VAR_NAME}_INCLUDE_DIR "${NEO__${VAR_NAME}_INCLUDE_DIRS}" PARENT_SCOPE)

      set(NEO__${VAR_NAME}_LIBRARIES ${NEO__${VAR_NAME}_LIBRARIES} PARENT_SCOPE)

      message(STATUS "${COMPONENT_NAME} include dirs: ${NEO__${VAR_NAME}_INCLUDE_DIR}")

      return()
    endif()
  else()
    # Windows
  endif()

  if(IS_THIRD_PARTY)
    string(TOLOWER ${VAR_NAME} _VAR_NAME_LOWER)
    get_filename_component(${VAR_NAME}_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party${BRANCH_DIR_SUFFIX}/${_VAR_NAME_LOWER}" ABSOLUTE)
    if(IS_DIRECTORY ${${VAR_NAME}_HEADERS_DIR})
      message(STATUS "${COMPONENT_NAME} dir: ${${VAR_NAME}_HEADERS_DIR}")
      set(NEO__${VAR_NAME}_INCLUDE_DIR "${${VAR_NAME}_HEADERS_DIR}" PARENT_SCOPE)
      return()
    endif()
  endif()

  message(FATAL_ERROR "${COMPONENT_NAME} not found!")

endfunction()

# Metrics Library Detection
dependency_detect("Metrics Library" libigdml METRICS_LIBRARY "../metrics/library" TRUE)
if(NOT NEO__METRICS_LIBRARY_INCLUDE_DIR STREQUAL "")
  include_directories("${NEO__METRICS_LIBRARY_INCLUDE_DIR}")
endif()

# Metrics Discovery Detection
dependency_detect("Metrics Discovery" libmd METRICS_DISCOVERY "../metrics/discovery" TRUE)
if(NOT NEO__METRICS_DISCOVERY_INCLUDE_DIR STREQUAL "")
  include_directories("${NEO__METRICS_DISCOVERY_INCLUDE_DIR}")
endif()

