# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

message(STATUS "Using vcpkg to find dependencies")

# ----------------------------------------------------------------------
# Define macros

# macro to list subdirectirectories (non-recursive)
macro(list_subdirs SUBDIRS DIR)
  file(GLOB children_ RELATIVE ${DIR} ${DIR}/*)
  set(subdirs_ "")
  foreach(child_ ${children_})
    if(IS_DIRECTORY "${DIR}/${child_}")
      list(APPEND subdirs_ ${child_})
    endif()
  endforeach()
  set("${SUBDIRS}" ${subdirs_})
  unset(children_)
  unset(subdirs_)
endmacro()

# ----------------------------------------------------------------------
# Get VCPKG_ROOT

if(DEFINED CMAKE_TOOLCHAIN_FILE)
  # Get it from the CMake variable CMAKE_TOOLCHAIN_FILE
  get_filename_component(_VCPKG_DOT_CMAKE "${CMAKE_TOOLCHAIN_FILE}" NAME)
  if(EXISTS "${CMAKE_TOOLCHAIN_FILE}" AND _VCPKG_DOT_CMAKE STREQUAL "vcpkg.cmake")
    get_filename_component(_VCPKG_BUILDSYSTEMS_DIR "${CMAKE_TOOLCHAIN_FILE}" DIRECTORY)
    get_filename_component(VCPKG_ROOT "${_VCPKG_BUILDSYSTEMS_DIR}/../.." ABSOLUTE)
  else()
    message(
      FATAL_ERROR
        "vcpkg toolchain file not found at path specified in -DCMAKE_TOOLCHAIN_FILE")
  endif()
else()
  if(DEFINED VCPKG_ROOT)
    # Get it from the CMake variable VCPKG_ROOT
    find_program(_VCPKG_BIN vcpkg PATHS "${VCPKG_ROOT}" NO_DEFAULT_PATH)
    if(NOT _VCPKG_BIN)
      message(FATAL_ERROR "vcpkg not found in directory specified in -DVCPKG_ROOT")
    endif()
  elseif(DEFINED ENV{VCPKG_ROOT})
    # Get it from the environment variable VCPKG_ROOT
    set(VCPKG_ROOT ENV{VCPKG_ROOT})
    find_program(_VCPKG_BIN vcpkg PATHS "${VCPKG_ROOT}" NO_DEFAULT_PATH)
    if(NOT _VCPKG_BIN)
      message(
        FATAL_ERROR "vcpkg not found in directory in environment variable VCPKG_ROOT")
    endif()
  else()
    # Get it from the file vcpkg.path.txt
    find_program(_VCPKG_BIN vcpkg)
    if(_VCPKG_BIN)
      get_filename_component(_VCPKG_REAL_BIN "${_VCPKG_BIN}" REALPATH)
      get_filename_component(VCPKG_ROOT "${_VCPKG_REAL_BIN}" DIRECTORY)
    else()
      if(CMAKE_HOST_WIN32)
        set(_VCPKG_PATH_TXT "$ENV{LOCALAPPDATA}/vcpkg/vcpkg.path.txt")
      else()
        set(_VCPKG_PATH_TXT "$ENV{HOME}/.vcpkg/vcpkg.path.txt")
      endif()
      if(EXISTS "${_VCPKG_PATH_TXT}")
        file(READ "${_VCPKG_PATH_TXT}" VCPKG_ROOT)
      else()
        message(
          FATAL_ERROR
            "vcpkg not found. Install vcpkg if not installed, "
            "then run vcpkg integrate install or set environment variable VCPKG_ROOT.")
      endif()
      find_program(_VCPKG_BIN vcpkg PATHS "${VCPKG_ROOT}" NO_DEFAULT_PATH)
      if(NOT _VCPKG_BIN)
        message(FATAL_ERROR "vcpkg not found. Re-run vcpkg integrate install "
                            "or set environment variable VCPKG_ROOT.")
      endif()
    endif()
  endif()
  set(CMAKE_TOOLCHAIN_FILE
      "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      CACHE FILEPATH "Path to vcpkg CMake toolchain file")
endif()
message(STATUS "Using CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
message(STATUS "Using VCPKG_ROOT: ${VCPKG_ROOT}")

# ----------------------------------------------------------------------
# Get VCPKG_TARGET_TRIPLET

if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
  set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}")
endif()
# Explicitly set manifest mode on if it is not set and vcpkg.json exists
if(NOT DEFINED VCPKG_MANIFEST_MODE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg.json")
  set(VCPKG_MANIFEST_MODE ON CACHE BOOL "Use vcpkg.json manifest")
  message(STATUS "vcpkg.json manifest found. Using VCPKG_MANIFEST_MODE: ON")
endif()
# vcpkg can install packages in three different places
set(_INST_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/vcpkg_installed") # try here first
set(_INST_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg_installed") # try here second
set(_INST_VCPKG_ROOT "${VCPKG_ROOT}/installed")
# Iterate over the places
foreach(_INST_DIR
        IN
        LISTS
        _INST_BUILD_DIR
        _INST_SOURCE_DIR
        _INST_VCPKG_ROOT
        "notfound")
  if(_INST_DIR STREQUAL "notfound")
    message(FATAL_ERROR "vcpkg installed libraries directory not found. "
                        "Install packages with vcpkg before executing cmake.")
  elseif(NOT EXISTS "${_INST_DIR}")
    continue()
  elseif((_INST_DIR STREQUAL _INST_BUILD_DIR OR _INST_DIR STREQUAL _INST_SOURCE_DIR)
         AND NOT VCPKG_MANIFEST_MODE)
    # Do not look for packages in the build or source dirs if manifest mode is off
    message(STATUS "Skipped looking for installed packages in ${_INST_DIR} "
                   "because -DVCPKG_MANIFEST_MODE=OFF")
    continue()
  else()
    message(STATUS "Looking for installed packages in ${_INST_DIR}")
  endif()
  if(DEFINED VCPKG_TARGET_TRIPLET)
    # Check if a subdirectory named VCPKG_TARGET_TRIPLET
    # exists in the vcpkg installed directory
    if(EXISTS "${_INST_DIR}/${VCPKG_TARGET_TRIPLET}")
      set(_VCPKG_INSTALLED_DIR "${_INST_DIR}")
      break()
    endif()
  else()
    # Infer VCPKG_TARGET_TRIPLET from the name of the
    # subdirectory in the vcpkg installed directory
    list_subdirs(_VCPKG_TRIPLET_SUBDIRS "${_INST_DIR}")
    list(REMOVE_ITEM _VCPKG_TRIPLET_SUBDIRS "vcpkg")
    list(LENGTH _VCPKG_TRIPLET_SUBDIRS _NUM_VCPKG_TRIPLET_SUBDIRS)
    if(_NUM_VCPKG_TRIPLET_SUBDIRS EQUAL 1)
      list(GET _VCPKG_TRIPLET_SUBDIRS 0 VCPKG_TARGET_TRIPLET)
      set(_VCPKG_INSTALLED_DIR "${_INST_DIR}")
      break()
    endif()
  endif()
endforeach()
if(NOT DEFINED VCPKG_TARGET_TRIPLET)
  message(FATAL_ERROR "Could not infer VCPKG_TARGET_TRIPLET. "
                      "Specify triplet with -DVCPKG_TARGET_TRIPLET.")
elseif(NOT DEFINED _VCPKG_INSTALLED_DIR)
  message(
    FATAL_ERROR
      "Could not find installed vcpkg packages for triplet ${VCPKG_TARGET_TRIPLET}. "
      "Install packages with vcpkg before executing cmake.")
endif()

set(VCPKG_TARGET_TRIPLET
    "${VCPKG_TARGET_TRIPLET}"
    CACHE STRING "vcpkg triplet for the target environment")

if(NOT DEFINED VCPKG_BUILD_TYPE)
  set(VCPKG_BUILD_TYPE
      "${LOWERCASE_BUILD_TYPE}"
      CACHE STRING "vcpkg build type (release|debug)")
endif()

if(NOT DEFINED VCPKG_LIBRARY_LINKAGE)
  if(ARROW_DEPENDENCY_USE_SHARED)
    set(VCPKG_LIBRARY_LINKAGE "dynamic")
  else()
    set(VCPKG_LIBRARY_LINKAGE "static")
  endif()
  set(VCPKG_LIBRARY_LINKAGE
      "${VCPKG_LIBRARY_LINKAGE}"
      CACHE STRING "vcpkg preferred library linkage (static|dynamic)")
endif()

message(STATUS "Using vcpkg installed libraries directory: ${_VCPKG_INSTALLED_DIR}")
message(STATUS "Using VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
message(STATUS "Using VCPKG_BUILD_TYPE: ${VCPKG_BUILD_TYPE}")
message(STATUS "Using VCPKG_LIBRARY_LINKAGE: ${VCPKG_LIBRARY_LINKAGE}")

set(ARROW_VCPKG_PREFIX
    "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}"
    CACHE PATH "Path to target triplet subdirectory in vcpkg installed directory")

set(ARROW_VCPKG ON CACHE BOOL "Use vcpkg for dependencies")

set(ARROW_DEPENDENCY_SOURCE
    "SYSTEM"
    CACHE STRING "The specified value VCPKG is implemented internally as SYSTEM" FORCE)

set(BOOST_ROOT "${ARROW_VCPKG_PREFIX}" CACHE STRING "")
set(BOOST_INCLUDEDIR "${ARROW_VCPKG_PREFIX}/include/boost" CACHE STRING "")
set(BOOST_LIBRARYDIR "${ARROW_VCPKG_PREFIX}/lib" CACHE STRING "")
set(OPENSSL_INCLUDE_DIR "${ARROW_VCPKG_PREFIX}/include" CACHE STRING "")
set(OPENSSL_LIBRARIES "${ARROW_VCPKG_PREFIX}/lib" CACHE STRING "")
set(OPENSSL_ROOT_DIR "${ARROW_VCPKG_PREFIX}" CACHE STRING "")
set(Thrift_ROOT "${ARROW_VCPKG_PREFIX}/lib" CACHE STRING "")
set(ZSTD_INCLUDE_DIR "${ARROW_VCPKG_PREFIX}/include" CACHE STRING "")
set(ZSTD_ROOT "${ARROW_VCPKG_PREFIX}" CACHE STRING "")

if(CMAKE_HOST_WIN32)
  set(LZ4_MSVC_LIB_PREFIX "" CACHE STRING "")
  set(LZ4_MSVC_STATIC_LIB_SUFFIX "" CACHE STRING "")
  set(ZSTD_MSVC_LIB_PREFIX "" CACHE STRING "")
endif()
