macro(find_qvtk)
  find_library (QVTK_LIBRARY QVTK HINTS ${VTK_DIR} ${VTK_DIR}/bin)
  find_path (QVTK_INCLUDE_DIR QVTKWidget.h HINT ${VTK_INCLUDE_DIRS})
  find_package_handle_standard_args(QVTK DEFAULT_MSG QVTK_LIBRARY QVTK_INCLUDE_DIR)

  if(QVTK_FOUND)
    get_filename_component (QVTK_LIBRARY_DIR ${QVTK_LIBRARY} PATH)
    list(APPEND VTK_LIBRARY_DIRS ${QVTK_LIBRARY_DIR})
    list(APPEND VTK_INCLUDE_DIRS ${QVTK_INCLUDE_DIR})
    set (VTK_USE_QVTK ON)
  endif()
endmacro()

macro(find_vtk)
  find_package(VTK)
  if(${VTK_MAJOR_VERSION} LESS 5)
    MESSAGE(FATAL_ERROR "VTK 5 or more required!")
  endif()
  if(VTK_FOUND)
    if (BUILD_SHARED_LIBS OR (NOT BUILD_SHARED_LIBS AND NOT VTK_BUILD_SHARED_LIBS))
      find_qvtk()
      message(STATUS "VTK found (include: ${VTK_INCLUDE_DIRS}, lib: ${VTK_LIBRARY_DIRS})")
      link_directories(${VTK_LIBRARY_DIRS})
      include_directories(SYSTEM ${VTK_INCLUDE_DIRS})
      set(HAVE_VTK ON)
    else ()
      set(HAVE_VTK OFF)
      message (FATAL_ERROR "VTK disabled. You are to build OpenCV in STATIC but VTK is SHARED!")
    endif ()
  endif()
endmacro()

if (NOT OPENCV_INITIAL_PASS AND DEFINED BUILD_opencv_viz AND BUILD_opencv_viz)
  find_vtk()
endif()

if(DEFINED HAVE_VTK AND HAVE_VTK)
  set(VTK_USE_FILE ${VTK_USE_FILE} CACHE INTERNAL "VTK_USE_FILE")
  include (${VTK_USE_FILE})
  add_definitions(-DHAVE_VTK)
endif()

set(the_description "Viz")
set(BUILD_opencv_viz_INIT OFF)
include_directories(src)
ocv_define_module(viz opencv_core)

if(DEFINED BUILD_opencv_viz AND BUILD_opencv_viz AND DEFINED HAVE_VTK AND HAVE_VTK)
  if (${VTK_VERSION_MAJOR} EQUAL 5)
    target_link_libraries(opencv_viz vtkCommon vtkWidgets vtkFiltering vtkRendering)
  else()
    target_link_libraries(opencv_viz vtkViewsCore vtkRenderingLOD vtkIOPLY vtkRenderingFreeTypeOpenGL vtkRenderingVolumeOpenGL vtkFiltersTexture)
  endif()
  if(APPLE)
    target_link_libraries(opencv_viz "-framework Cocoa")
  endif()
endif()