# Build the test programs...

# Use fftw for AreaEst?  Because CMake support for installed fftw
# package is broken, using FFTW required building local copies of the
# library (a separate cmake configure and build for each precision).  So
# default to not using fftw and fall back on kissfftw.  For these
# reasons + the overall complexity of adding a dependency to
# GeographicLib, the DST class uses kissfft (despite it being somewhat
# slower that fftw).
set (USE_FFTW OFF)
if (USE_FFTW)
  if (GEOGRAPHICLIB_PRECISION EQUAL 1)
    set (FFTW_PACKAGE FFTW3f)
  elseif (GEOGRAPHICLIB_PRECISION EQUAL 2)
    set (FFTW_PACKAGE FFTW3)
  elseif (GEOGRAPHICLIB_PRECISION EQUAL 3)
    set (FFTW_PACKAGE FFTW3l)
  elseif (GEOGRAPHICLIB_PRECISION EQUAL 4)
    set (FFTW_PACKAGE FFTW3q)
  else () # GEOGRAPHICLIB_PRECISION EQUAL 5
    set (FFTW_PACKAGE OFF)
  endif ()
  if (FFTW_PACKAGE)
    find_package (${FFTW_PACKAGE})
    if (${FFTW_PACKAGE}_FOUND)
      set (FFTW_FOUND ON)
      set (FFTW_LIBRARIES ${${FFTW_PACKAGE}_LIBRARIES})
      set (FFTW_LIBRARY_DIRS ${${FFTW_PACKAGE}_LIBRARY_DIRS})
      set (FFTW_INCLUDE_DIRS ${${FFTW_PACKAGE}_INCLUDE_DIRS})
    endif ()
  endif ()
endif ()

set (DEVELPROGRAMS
  ProjTest TMTest GeodTest ConicTest NaNTester HarmTest EllipticTest intersect
  ClosestApproach M12zero GeodShort NormalTest GeoidHeightTable promote
  IntersectTest GeodConv JacobiTest Geod3Test)

if (Boost_FOUND)
  include_directories ("${Boost_INCLUDE_DIRS}")
  add_definitions(-DHAVE_BOOST=1)
  # Potential problem with Boost and  quad precision because of compiler errors
  # with boost 1.69 and g++ 9.2.1 (Fedora 30).  Problem reported as
  # https://github.com/boostorg/odeint/issues/40.
  # This problem is resolved see https://github.com/boostorg/odeint/pull/63
  # and will be included in boost 1.85.
  # HOWEVER, my patch given in https://github.com/boostorg/odeint/issues/75
  # fixes this problem too.
  set (DEVELPROGRAMS ${DEVELPROGRAMS} LevelEllipsoid)
  if (APPLE)
    # Suppress warnings from Boost library
    # warnings with Mac OS X and boost 1.63
    # no warnings with Linux and boost 1.60
    set (CMAKE_CXX_FLAGS
      "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-unused-variable -Wno-unused-local-typedef")
  endif ()
endif ()

# Loop over all the tools, specifying the source and library.
add_custom_target (develprograms)
foreach (DEVELPROGRAM ${DEVELPROGRAMS})
  set (DEVELSOURCE ${DEVELPROGRAM}.cpp)
  if (DEVELPROGRAM STREQUAL "Geod3Test")
    set (DEVELSOURCE ${DEVELSOURCE}
      ../experimental/TriaxialGeodesicODE.cpp
      ../experimental/TriaxialGeodesicODE.hpp)
  endif ()
  add_executable (${DEVELPROGRAM} EXCLUDE_FROM_ALL ${DEVELSOURCE})
  add_dependencies (develprograms ${DEVELPROGRAM})
  target_link_libraries (${DEVELPROGRAM} ${PROJECT_LIBRARIES}
    ${HIGHPREC_LIBRARIES})
endforeach ()

add_executable (GeodExact EXCLUDE_FROM_ALL GeodExact.cpp
  Geodesic30.cpp GeodesicLine30.cpp
  Geodesic30.hpp GeodesicLine30.hpp)
add_dependencies (develprograms GeodExact)
target_link_libraries (GeodExact ${PROJECT_LIBRARIES} ${HIGHPREC_LIBRARIES})
set (DEVELPROGRAMS ${DEVELPROGRAMS} GeodExact)

add_executable (AreaEst EXCLUDE_FROM_ALL AreaEst.cpp)
add_dependencies (develprograms AreaEst)
target_link_libraries (AreaEst ${PROJECT_LIBRARIES} ${FFTW_LIBRARIES}
  ${HIGHPREC_LIBRARIES})
if (FFTW_FOUND)
  target_compile_definitions (AreaEst PUBLIC HAVE_FFTW=1)
  target_include_directories (AreaEst PUBLIC ${FFTW_INCLUDE_DIRS})
endif ()

set (DEVELPROGRAMS ${DEVELPROGRAMS} AreaEst)

add_executable (reformat EXCLUDE_FROM_ALL reformat.cpp)
add_dependencies (develprograms reformat)
set (DEVELPROGRAMS ${DEVELPROGRAMS} reformat)

find_package (OpenMP QUIET)
if (OPENMP_FOUND OR OpenMP_FOUND)
  set_target_properties (GeoidHeightTable PROPERTIES
    COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
  if (OpenMP_CXX_INCLUDE_DIRS)
    set_target_properties (GeoidHeightTable PROPERTIES
      INCLUDE_DIRECTORIES ${OpenMP_CXX_INCLUDE_DIRS})
  endif ()
  if (NOT WIN32)
    set_target_properties (GeoidHeightTable PROPERTIES
      LINK_FLAGS ${OpenMP_CXX_FLAGS})
  endif ()
  target_link_libraries (GeoidHeightTable ${OpenMP_CXX_LIBRARIES})
endif ()

if (MSVC OR CMAKE_CONFIGURATION_TYPES)
  # Add _d suffix for your debug versions of the tools
  set_target_properties (${DEVELPROGRAMS} PROPERTIES
    DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
endif ()

# Put all the programs into a folder in the IDE
set_property (TARGET develprograms ${DEVELPROGRAMS} PROPERTY FOLDER develop)

# Don't install develop programs
