
set_property(GLOBAL PROPERTY EIGEN_CURRENT_SUBPROJECT "Unsupported")
add_custom_target(BuildUnsupported)

include_directories(../../test ../../unsupported ../../Eigen 
                    ${CMAKE_CURRENT_BINARY_DIR}/../../test)

find_package (Threads)
                    
find_package(GoogleHash)
if(GOOGLEHASH_FOUND)
  add_definitions("-DEIGEN_GOOGLEHASH_SUPPORT")
  include_directories(${GOOGLEHASH_INCLUDES})
  ei_add_property(EIGEN_TESTED_BACKENDS  "GoogleHash, ")
else(GOOGLEHASH_FOUND)
  ei_add_property(EIGEN_MISSING_BACKENDS  "GoogleHash, ")
endif(GOOGLEHASH_FOUND)

find_package(Adolc)
if(ADOLC_FOUND)
  include_directories(${ADOLC_INCLUDES})
  ei_add_property(EIGEN_TESTED_BACKENDS "Adolc, ")
  ei_add_test(forward_adolc "" ${ADOLC_LIBRARIES})
else(ADOLC_FOUND)
  ei_add_property(EIGEN_MISSING_BACKENDS "Adolc, ")
endif(ADOLC_FOUND)

# this test seems to never have been successful on x87, so is considered to contain a FP-related bug.
# see thread: "non-linear optimization test summary"
ei_add_test(NonLinearOptimization)

ei_add_test(NumericalDiff)
ei_add_test(autodiff_scalar)
ei_add_test(autodiff)

if (NOT CMAKE_CXX_COMPILER MATCHES "clang\\+\\+$")
ei_add_test(BVH)
endif()

ei_add_test(matrix_exponential)
ei_add_test(matrix_function)
ei_add_test(matrix_power)
ei_add_test(matrix_square_root)
ei_add_test(alignedvector3)

ei_add_test(FFT)

find_package(MPFR 2.3.0)
find_package(GMP)
if(MPFR_FOUND AND EIGEN_COMPILER_SUPPORT_CXX11)
  include_directories(${MPFR_INCLUDES} ./mpreal)
  ei_add_property(EIGEN_TESTED_BACKENDS "MPFR C++, ")
  set(EIGEN_MPFR_TEST_LIBRARIES ${MPFR_LIBRARIES} ${GMP_LIBRARIES})
 ei_add_test(mpreal_support "-std=c++11" "${EIGEN_MPFR_TEST_LIBRARIES}" )
else()
  ei_add_property(EIGEN_MISSING_BACKENDS "MPFR C++, ")
endif()

ei_add_test(sparse_extra   "" "")

find_package(FFTW)
if(FFTW_FOUND)
  ei_add_property(EIGEN_TESTED_BACKENDS "fftw, ")
  include_directories( ${FFTW_INCLUDES} )
  if(FFTWL_LIB)
    ei_add_test(FFTW  "-DEIGEN_FFTW_DEFAULT -DEIGEN_HAS_FFTWL" "${FFTW_LIBRARIES}" )
  else()
    ei_add_test(FFTW  "-DEIGEN_FFTW_DEFAULT" "${FFTW_LIBRARIES}" )
  endif()
else()
  ei_add_property(EIGEN_MISSING_BACKENDS "fftw, ")
endif()

option(EIGEN_TEST_NO_OPENGL "Disable OpenGL support in unit tests" OFF)
if(NOT EIGEN_TEST_NO_OPENGL)
  find_package(OpenGL)
  find_package(GLUT)
  find_package(GLEW)
  if(OPENGL_FOUND AND GLUT_FOUND AND GLEW_FOUND)
    include_directories(${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
    ei_add_property(EIGEN_TESTED_BACKENDS "OpenGL, ")
    set(EIGEN_GL_LIB ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES})
    ei_add_test(openglsupport  "" "${EIGEN_GL_LIB}" )
  else()
    ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ")
  endif()
else()
    ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ")
endif()

ei_add_test(polynomialsolver)
ei_add_test(polynomialutils)
ei_add_test(splines)
ei_add_test(gmres)
ei_add_test(minres)
ei_add_test(levenberg_marquardt)
ei_add_test(kronecker_product)

if(EIGEN_TEST_CXX11)
  # It should be safe to always run these tests as there is some fallback code for
  # older compiler that don't support cxx11.
  ei_add_test(cxx11_meta "-std=c++0x")
  ei_add_test(cxx11_tensor_simple "-std=c++0x")
#  ei_add_test(cxx11_tensor_symmetry "-std=c++0x")
  ei_add_test(cxx11_tensor_assign "-std=c++0x")
  ei_add_test(cxx11_tensor_dimension "-std=c++0x")
  ei_add_test(cxx11_tensor_index_list "-std=c++0x")
  ei_add_test(cxx11_tensor_mixed_indices "-std=c++0x")
  ei_add_test(cxx11_tensor_comparisons "-std=c++0x")
  ei_add_test(cxx11_tensor_contraction "-std=c++0x")
  ei_add_test(cxx11_tensor_convolution "-std=c++0x")
  ei_add_test(cxx11_tensor_expr "-std=c++0x")
  ei_add_test(cxx11_tensor_math "-std=c++0x")
  ei_add_test(cxx11_tensor_forced_eval "-std=c++0x")
  ei_add_test(cxx11_tensor_fixed_size "-std=c++0x")
  ei_add_test(cxx11_tensor_const "-std=c++0x")
  ei_add_test(cxx11_tensor_of_const_values "-std=c++0x")
  ei_add_test(cxx11_tensor_of_complex "-std=c++0x")
  ei_add_test(cxx11_tensor_of_strings "-std=c++0x")
  ei_add_test(cxx11_tensor_uint128 "-std=c++0x")
  ei_add_test(cxx11_tensor_intdiv "-std=c++0x")
  ei_add_test(cxx11_tensor_lvalue "-std=c++0x")
  ei_add_test(cxx11_tensor_map "-std=c++0x")
  ei_add_test(cxx11_tensor_broadcasting "-std=c++0x")
  ei_add_test(cxx11_tensor_chipping "-std=c++0x")
  ei_add_test(cxx11_tensor_concatenation "-std=c++0x")
  ei_add_test(cxx11_tensor_inflation "-std=c++0x")
  ei_add_test(cxx11_tensor_morphing "-std=c++0x")
  ei_add_test(cxx11_tensor_padding "-std=c++0x")
  ei_add_test(cxx11_tensor_patch "-std=c++0x")
  ei_add_test(cxx11_tensor_image_patch "-std=c++0x")
  ei_add_test(cxx11_tensor_volume_patch "-std=c++0x")
  ei_add_test(cxx11_tensor_reduction "-std=c++0x")
  ei_add_test(cxx11_tensor_argmax "-std=c++0x")
  ei_add_test(cxx11_tensor_shuffling "-std=c++0x")
  ei_add_test(cxx11_tensor_striding "-std=c++0x")
  ei_add_test(cxx11_tensor_thread_pool "-pthread" "${CMAKE_THREAD_LIBS_INIT}")
  ei_add_test(cxx11_tensor_ref "-std=c++0x")
  ei_add_test(cxx11_tensor_random "-std=c++0x")
  ei_add_test(cxx11_tensor_casts "-std=c++0x")
  ei_add_test(cxx11_tensor_reverse "-std=c++0x")
  ei_add_test(cxx11_tensor_layout_swap "-std=c++0x")
  ei_add_test(cxx11_tensor_io "-std=c++0x")
  ei_add_test(cxx11_tensor_generator "-std=c++0x")
  ei_add_test(cxx11_tensor_custom_op "-std=c++0x")
  ei_add_test(cxx11_tensor_custom_index "-std=c++0x")
  ei_add_test(cxx11_tensor_sugar "-std=c++0x")
  ei_add_test(cxx11_tensor_fft "-std=c++0x")
  ei_add_test(cxx11_tensor_ifft "-std=c++0x")
  ei_add_test(cxx11_tensor_empty "-std=c++0x")

endif()

# These tests needs nvcc
find_package(CUDA 7.0)
if(CUDA_FOUND)
  set(CUDA_PROPAGATE_HOST_FLAGS OFF)
  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    set(CUDA_NVCC_FLAGS "-ccbin /usr/bin/clang" CACHE STRING "nvcc flags" FORCE)
  endif()
  set(CUDA_NVCC_FLAGS "-std=c++11 -arch compute_30")
  cuda_include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}/include")
  set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu")

  ei_add_test(cxx11_tensor_device)
  ei_add_test(cxx11_tensor_cuda)
  ei_add_test(cxx11_tensor_contract_cuda)
  ei_add_test(cxx11_tensor_reduction_cuda)
  ei_add_test(cxx11_tensor_random_cuda)
  ei_add_test(cxx11_tensor_argmax_cuda)

  unset(EIGEN_ADD_TEST_FILENAME_EXTENSION)
endif()
