#[=======================================================================[.rst:
FindVorbis
----------

Finds the native vorbis, vorbisenc amd vorbisfile includes and libraries.

Imported Targets
^^^^^^^^^^^^^^^^

This module provides the following imported targets, if found:

``Vorbis::vorbis``
  The Vorbis library
``Vorbis::vorbisenc``
  The VorbisEnc library
``Vorbis::vorbisfile``
  The VorbisFile library

Result Variables
^^^^^^^^^^^^^^^^

This will define the following variables:

``Vorbis_Vorbis_INCLUDE_DIRS``
  List of include directories when using vorbis.
``Vorbis_Enc_INCLUDE_DIRS``
  List of include directories when using vorbisenc.
``Vorbis_File_INCLUDE_DIRS``
  List of include directories when using vorbisfile.
``Vorbis_Vorbis_LIBRARIES``
  List of libraries when using vorbis.
``Vorbis_Enc_LIBRARIES``
  List of libraries when using vorbisenc.
``Vorbis_File_LIBRARIES``
  List of libraries when using vorbisfile.
``Vorbis_FOUND``
  True if vorbis and requested components found.
``Vorbis_Vorbis_FOUND``
  True if vorbis found.
``Vorbis_Enc_FOUND``
  True if vorbisenc found.
``Vorbis_Enc_FOUND``
  True if vorbisfile found.

Cache variables
^^^^^^^^^^^^^^^

The following cache variables may also be set:

``Vorbis_Vorbis_INCLUDE_DIR``
  The directory containing ``vorbis/vorbis.h``.
``Vorbis_Enc_INCLUDE_DIR``
  The directory containing ``vorbis/vorbisenc.h``.
``Vorbis_File_INCLUDE_DIR``
  The directory containing ``vorbis/vorbisenc.h``.
``Vorbis_Vorbis_LIBRARY``
  The path to the vorbis library.
``Vorbis_Enc_LIBRARY``
  The path to the vorbisenc library.
``Vorbis_File_LIBRARY``
  The path to the vorbisfile library.

Hints
^^^^^

A user may set ``Vorbis_ROOT`` to a vorbis installation root to tell this module where to look.

#]=======================================================================]

if(Vorbis_Vorbis_INCLUDE_DIR)
  # Already in cache, be silent
  set(Vorbis_FIND_QUIETLY TRUE)
endif()

set(Vorbis_Vorbis_FIND_QUIETLY TRUE)
set(Vorbis_Enc_FIND_QUIETLY TRUE)
set(Vorbis_File_FIND_QUIETLY TRUE)

find_package(Ogg QUIET)

find_package(PkgConfig QUIET)
pkg_check_modules(PC_Vorbis_Vorbis QUIET vorbis)
pkg_check_modules(PC_Vorbis_Enc QUIET vorbisenc)
pkg_check_modules(PC_Vorbis_File QUIET vorbisfile)

set(Vorbis_VERSION ${PC_Vorbis_Vorbis_VERSION})

find_path(Vorbis_Vorbis_INCLUDE_DIR vorbis/codec.h
  HINTS
    ${PC_Vorbis_Vorbis_INCLUDEDIR}
    ${PC_Vorbis_Vorbis_INCLUDE_DIRS}
    ${Vorbis_ROOT})

find_path(Vorbis_Enc_INCLUDE_DIR vorbis/vorbisenc.h
  HINTS
    ${PC_Vorbis_Enc_INCLUDEDIR}
    ${PC_Vorbis_Enc_INCLUDE_DIRS}
    ${Vorbis_ROOT})

find_path(Vorbis_File_INCLUDE_DIR vorbis/vorbisfile.h
  HINTS
    ${PC_Vorbis_File_INCLUDEDIR}
    ${PC_Vorbis_File_INCLUDE_DIRS}
    ${Vorbis_ROOT})

find_library(Vorbis_Vorbis_LIBRARY
  NAMES
    vorbis
    vorbis_static
    libvorbis
    libvorbis_static
  HINTS
    ${PC_Vorbis_Vorbis_LIBDIR}
    ${PC_Vorbis_Vorbis_LIBRARY_DIRS}
    ${Vorbis_ROOT})

find_library(Vorbis_Enc_LIBRARY
  NAMES
    vorbisenc
    vorbisenc_static
    libvorbisenc
    libvorbisenc_static
  HINTS
    ${PC_Vorbis_Enc_LIBDIR}
    ${PC_Vorbis_Enc_LIBRARY_DIRS}
    ${Vorbis_ROOT})

find_library(Vorbis_File_LIBRARY
  NAMES
    vorbisfile
    vorbisfile_static
    libvorbisfile
    libvorbisfile_static
  HINTS
    ${PC_Vorbis_File_LIBDIR}
    ${PC_Vorbis_File_LIBRARY_DIRS}
    ${Vorbis_ROOT})

include(FindPackageHandleStandardArgs)

if(Vorbis_Vorbis_LIBRARY AND Vorbis_Vorbis_INCLUDE_DIR AND Ogg_FOUND)
  set(Vorbis_Vorbis_FOUND TRUE)
endif()

if(Vorbis_Enc_LIBRARY AND Vorbis_Enc_INCLUDE_DIR AND Vorbis_Vorbis_FOUND)
  set(Vorbis_Enc_FOUND TRUE)
endif()

if(Vorbis_Vorbis_FOUND AND Vorbis_File_LIBRARY AND Vorbis_File_INCLUDE_DIR)
  set(Vorbis_File_FOUND TRUE)
endif()

find_package_handle_standard_args(Vorbis
  REQUIRED_VARS
    Vorbis_Vorbis_LIBRARY
    Vorbis_Vorbis_INCLUDE_DIR
    Ogg_FOUND
  HANDLE_COMPONENTS
  VERSION_VAR Vorbis_VERSION)


if(Vorbis_Vorbis_FOUND)
  set(Vorbis_Vorbis_INCLUDE_DIRS ${Vorbis_Vorbis_INCLUDE_DIR} ${Ogg_INCLUDE_DIRS})
  set(Vorbis_Vorbis_LIBRARIES ${Vorbis_Vorbis_LIBRARY} ${Ogg_LIBRARIES})
  if(NOT TARGET Vorbis::vorbis)
    add_library(Vorbis::vorbis UNKNOWN IMPORTED)
    set_target_properties(Vorbis::vorbis PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_Vorbis_INCLUDE_DIR}"
      IMPORTED_LOCATION "${Vorbis_Vorbis_LIBRARY}"
      INTERFACE_LINK_LIBRARIES Ogg::ogg
    )
  endif()

  if(Vorbis_Enc_FOUND)
    set(Vorbis_Enc_INCLUDE_DIRS ${Vorbis_Enc_INCLUDE_DIR} ${Ogg_INCLUDE_DIRS})
    set(Vorbis_Enc_LIBRARIES ${Vorbis_Enc_LIBRARY} ${Vorbis_Vorbis_LIBRARIES})
    if(NOT TARGET Vorbis::vorbisenc)
      add_library(Vorbis::vorbisenc UNKNOWN IMPORTED)
      set_target_properties(Vorbis::vorbisenc PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_Enc_INCLUDE_DIR}"
        IMPORTED_LOCATION "${Vorbis_Enc_LIBRARY}"
        INTERFACE_LINK_LIBRARIES Vorbis::vorbis
      )
    endif()
  endif()

  if(Vorbis_File_FOUND)
    set(Vorbis_File_INCLUDE_DIRS ${Vorbis_File_INCLUDE_DIR} ${Ogg_INCLUDE_DIRS})
    set(Vorbis_File_LIBRARIES ${Vorbis_File_LIBRARY} ${Vorbis_Vorbis_LIBRARIES})
    if(NOT TARGET Vorbis::vorbisfile)
      add_library(Vorbis::vorbisfile UNKNOWN IMPORTED)
      set_target_properties(Vorbis::vorbisfile PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_File_INCLUDE_DIR}"
        IMPORTED_LOCATION "${Vorbis_File_LIBRARY}"
        INTERFACE_LINK_LIBRARIES Vorbis::vorbis
      )
    endif()
  endif()

endif()

mark_as_advanced(Vorbis_Vorbis_INCLUDE_DIR Vorbis_Vorbis_LIBRARY)
mark_as_advanced(Vorbis_Enc_INCLUDE_DIR Vorbis_Enc_LIBRARY)
mark_as_advanced(Vorbis_File_INCLUDE_DIR Vorbis_File_LIBRARY)
