# 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.

if (MSVC AND NOT DEFINED ZSTD_MSVC_STATIC_LIB_SUFFIX)
  set(ZSTD_MSVC_STATIC_LIB_SUFFIX "_static")
endif ()

set(ZSTD_STATIC_LIB_SUFFIX
    "${ZSTD_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(ZSTD_STATIC_LIB_NAME
    ${CMAKE_STATIC_LIBRARY_PREFIX}zstd${ZSTD_STATIC_LIB_SUFFIX})

# First, find via if specified ZTD_ROOT
if (NOT ZSTD_ROOT)
  # We look for an environment variable of the same name too, because
  # that can be provided by a tool like nix-shell or docker. Wo do this
  # so the user doesn't have to remember to add "-DZSTD_ROOT=..." to their
  # cmake invocations.
  set(ZSTD_ROOT "$ENV{ZSTD_ROOT}")
endif ()
if (ZSTD_ROOT)
  message(STATUS "Using ZSTD_ROOT: ${ZSTD_ROOT}")
  find_library(
    ZSTD_LIB
    NAMES zstd "${ZSTD_STATIC_LIB_NAME}" "lib${ZSTD_STATIC_LIB_NAME}"
          "${CMAKE_SHARED_LIBRARY_PREFIX}zstd${CMAKE_SHARED_LIBRARY_SUFFIX}"
    PATHS "${ZSTD_ROOT}/lib"
    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
    NO_DEFAULT_PATH)
  find_path(
    ZSTD_INCLUDE_DIR
    NAMES zstd.h
    PATHS "${ZSTD_ROOT}/include"
    NO_DEFAULT_PATH
    PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})

else ()
  # Second, find via pkg_check_modules
  if (PKG_CONFIG_FOUND)
    pkg_check_modules(ZSTD_PC libzstd)
  endif ()
  if (ZSTD_PC_FOUND)
    set(ZSTD_INCLUDE_DIR "${ZSTD_PC_INCLUDEDIR}")

    list(APPEND ZSTD_PC_LIBRARY_DIRS "${ZSTD_PC_LIBDIR}")
    find_library(
      ZSTD_LIB zstd
      PATHS ${ZSTD_PC_LIBRARY_DIRS}
      NO_DEFAULT_PATH
      PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
    # Third, check all other CMake paths
  else ()
    find_library(
      ZSTD_LIB
      NAMES zstd "${ZSTD_STATIC_LIB_NAME}" "lib${ZSTD_STATIC_LIB_NAME}"
            "${CMAKE_SHARED_LIBRARY_PREFIX}zstd${CMAKE_SHARED_LIBRARY_SUFFIX}"
      PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
    find_path(
      ZSTD_INCLUDE_DIR
      NAMES zstd.h
      PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
  endif ()
endif ()

find_package_handle_standard_args(ZSTD REQUIRED_VARS ZSTD_LIB ZSTD_INCLUDE_DIR)

if (ZSTD_FOUND)
  add_library(ZSTD::zstd UNKNOWN IMPORTED)
  set_target_properties(
    ZSTD::zstd PROPERTIES IMPORTED_LOCATION "${ZSTD_LIB}"
                          INTERFACE_INCLUDE_DIRECTORIES "${ZSTD_INCLUDE_DIR}")
endif ()
