# Module that tries to find the Kipi library
#
# Input values :
#
# KIPI_LOCAL_DIR    - If you have put a local version of libkipi into your source tree,
#                     set this variable to the relative path from the local directory.
#
# Output values :
#
#  KIPI_FOUND       - System has libkipi
#  KIPI_INCLUDE_DIR - The libkipi include directory
#  KIPI_LIBRARIES   - Link these to use libkipi
#  KIPI_DEFINITIONS - Compiler switches required for using libkipi
#  KIPI_VERSION     - The release version of the Kipi library
#  KIPI_SO_VERSION  - The binary SO version of the Kipi library
#

# Copyright (c) 2012, Victor Dodon <dodonvictor at gmail dot com>
# Copyright (c) 2012-2014, Gilles Caulier <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

IF("${Kipi_FIND_VERSION}" STREQUAL "")
    SET(Kipi_FIND_VERSION "1.2.0")
    MESSAGE(STATUS "No Kipi library version required. Check default version : ${Kipi_FIND_VERSION}")
ELSE()
    MESSAGE(STATUS "Kipi library version required : ${Kipi_FIND_VERSION}")
ENDIF()

IF(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)

  IF(NOT Kipi_FIND_QUIETLY)
    MESSAGE(STATUS "Found kipi library in cache ${KIPI_LIBRARIES}")
  ENDIF(NOT Kipi_FIND_QUIETLY)
  # Already in cache
  SET(KIPI_FOUND TRUE)

ELSE(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)

  IF(NOT Kipi_FIND_QUIETLY)
    MESSAGE(STATUS "Check Kipi library in local sub-folder...")
  ENDIF(NOT Kipi_FIND_QUIETLY)

  IF(KIPI_LOCAL_DIR)
    FIND_FILE(KIPI_LOCAL_FOUND libkipi/libkipi_export.h ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR} NO_DEFAULT_PATH)
    IF(NOT KIPI_LOCAL_FOUND)
      MESSAGE(WARNING "KIPI_LOCAL_DIR specified as \"${KIPI_LOCAL_DIR}\" but libkipi could not be found there.")
    ENDIF(NOT KIPI_LOCAL_FOUND)
  ELSE(KIPI_LOCAL_DIR)
    FIND_FILE(KIPI_LOCAL_FOUND libkipi/libkipi_export.h ${CMAKE_SOURCE_DIR}/libkipi NO_DEFAULT_PATH)
    IF(KIPI_LOCAL_FOUND)
      SET(KIPI_LOCAL_DIR libkipi)
    ENDIF(KIPI_LOCAL_FOUND)

    FIND_FILE(KIPI_LOCAL_FOUND libkipi/libkipi_export.h ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
    IF(KIPI_LOCAL_FOUND)
      SET(KIPI_LOCAL_DIR libs/libkipi)
    ENDIF(KIPI_LOCAL_FOUND)
  ENDIF(KIPI_LOCAL_DIR)

  IF(KIPI_LOCAL_FOUND)

    SET(KIPI_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
    SET(KIPI_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
    SET(KIPI_LIBRARIES kipi)
    IF(NOT Kipi_FIND_QUIETLY)
      MESSAGE(STATUS "Found Kipi library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}")
    ENDIF(NOT Kipi_FIND_QUIETLY)
    SET(KIPI_FOUND TRUE)
    SET(KIPI_VERSION_H_FILENAME "${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}/libkipi/version.h")

  ELSE(KIPI_LOCAL_FOUND)

    IF(NOT WIN32)
      IF(NOT Kipi_FIND_QUIETLY)
        MESSAGE(STATUS "Check Kipi library using pkg-config...")
      ENDIF(NOT Kipi_FIND_QUIETLY)

      INCLUDE(FindPkgConfig)
      PKG_CHECK_MODULES(PC_KIPI libkipi>=${Kipi_FIND_VERSION})
    ENDIF(NOT WIN32)

    FIND_LIBRARY(KIPI_LIBRARIES NAMES kipi HINTS ${PC_KIPI_LIBRARY_DIRS} ${LIB_INSTALL_DIR} ${KDE4_LIB_DIR})
    FIND_PATH(KIPI_INCLUDE_DIR NAMES libkipi/version.h HINTS ${PC_KIPI_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} ${KDE4_INCLUDE_DIR})
    SET(KIPI_VERSION_H_FILENAME "${KIPI_INCLUDE_DIR}/libkipi/version.h")
    SET(KIPI_DEFINITIONS ${PC_KIPI_CFLAGS} CACHE STRING "Kipi defintions")

    INCLUDE(FindPackageHandleStandardArgs)
    FIND_PACKAGE_HANDLE_STANDARD_ARGS(KIPI DEFAULT_MSG KIPI_LIBRARIES KIPI_INCLUDE_DIR)

  ENDIF(KIPI_LOCAL_FOUND)

  IF(KIPI_FOUND)

    IF(NOT KIPI_VERSION)
      FILE(READ "${KIPI_VERSION_H_FILENAME}" KIPI_VERSION_H_CONTENT)
      STRING(REGEX REPLACE ".*static +const +char +kipi_version\\[\\] += +\"([^\"]+)\".*" "\\1" KIPI_VERSION "${KIPI_VERSION_H_CONTENT}")
      MESSAGE(STATUS "Kipi library version: ${KIPI_VERSION}")
    ENDIF(NOT KIPI_VERSION)

    IF(NOT KIPI_SO_VERSION)
      FILE(READ "${KIPI_VERSION_H_FILENAME}" KIPI_VERSION_H_CONTENT)
      STRING(REGEX REPLACE
             ".*static +const +int +kipi_binary_version +=  ([^ ;]+).*"
             "\\1"
             KIPI_SO_VERSION_FOUND
             "${KIPI_VERSION_H_CONTENT}"
            )
      SET(KIPI_SO_VERSION ${KIPI_SO_VERSION_FOUND} CACHE STRING "libkipi so version")
      MESSAGE(STATUS "Kipi library SO binary version: ${KIPI_SO_VERSION}")
    ENDIF(NOT KIPI_SO_VERSION)

    UNSET(KIPI_VERSION_H_CONTENT)
    UNSET(KIPI_VERSION_H_FILENAME)
  ENDIF(KIPI_FOUND)

  IF(KIPI_FOUND)
    MESSAGE(STATUS "libkipi: Found version ${KIPI_VERSION} (required: ${Kipi_FIND_VERSION})")
    IF(${KIPI_VERSION} VERSION_LESS ${Kipi_FIND_VERSION})
        SET(KIPI_FOUND FALSE)
    ELSE()
        MARK_AS_ADVANCED(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS KIPI_VERSION KIPI_SO_VERSION)
    ENDIF()
  ELSE(KIPI_FOUND)
    UNSET(KIPI_INCLUDE_DIR)
    UNSET(KIPI_LIBRARIES)
    UNSET(KIPI_DEFINITIONS)
    UNSET(KIPI_VERSION)
    UNSET(KIPI_SO_VERSION)
  ENDIF(KIPI_FOUND)

ENDIF(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)
