
# Tell find_package(Qt5) where to find Qt.
if(QT_QMAKE_EXECUTABLE)
  get_filename_component(Qt_BIN_DIR "${QT_QMAKE_EXECUTABLE}" PATH)
  get_filename_component(Qt_PREFIX_DIR "${Qt_BIN_DIR}" PATH)
  list(APPEND CMAKE_PREFIX_PATH ${Qt_PREFIX_DIR})
endif()

if (QT_TEST_VERSION EQUAL 4)

  find_package(Qt4 REQUIRED)
  include(UseQt4)

  set(QT_QTCORE_TARGET Qt4::QtCore)

  # Qt macros
  macro(qtx_wrap_cpp)
    qt4_wrap_cpp(${ARGN})
  endmacro()
  macro(qtx_generate_moc)
    qt4_generate_moc(${ARGN})
  endmacro()

elseif(QT_TEST_VERSION GREATER_EQUAL 5)

  find_package(Qt${QT_TEST_VERSION}Widgets REQUIRED)

  set(QT_QTCORE_TARGET Qt${QT_TEST_VERSION}::Core)
  set(QT_LIBRARIES Qt${QT_TEST_VERSION}::Widgets)

  # Include directories
  include_directories(${Qt${QT_TEST_VERSION}Widgets_INCLUDE_DIRS})

  # Definitions
  if(Qt${QT_TEST_VERSION}_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
    add_definitions(${CMAKE_CXX_COMPILE_OPTIONS_PIC})
  endif()

  # Qt macros
  macro(qtx_wrap_cpp)
    cmake_language(CALL qt${QT_TEST_VERSION}_wrap_cpp ${ARGN})
  endmacro()
  macro(qtx_generate_moc)
    cmake_language(CALL qt${QT_TEST_VERSION}_generate_moc ${ARGN})
  endmacro()

else()
  message(SEND_ERROR "Invalid Qt version specified: ${QT_TEST_VERSION}")
endif()

# Get Qt compile features
get_property(QT_COMPILE_FEATURES
  TARGET ${QT_QTCORE_TARGET}
  PROPERTY INTERFACE_COMPILE_FEATURES
)
