##############################################################################
# FILE:        moos-ivp-pavlab/src/CMakeLists.txt
# DATE:        2020/03/22
# DESCRIPTION: CMakeLists.txt file for the moos-ivp-pavlab source directory
##############################################################################


#============================================================================
# Add the libraries in the current directory to the include path
#============================================================================
FILE(GLOB LOCAL_LIBRARY_DIRS ./lib_*)
INCLUDE_DIRECTORIES(${LOCAL_LIBRARY_DIRS})

#========================================================================
# Let users control whether or not GUI-related libraries/apps are built.
#========================================================================
SET(BUILD_BOT_CODE_ONLY OFF CACHE BOOL "Build minimal set of bot apps.")

#========================================================================
# Let users control whether or Sandbox Apps/Libraries are built
#========================================================================
SET(BUILD_SANDBOX_CODE OFF CACHE BOOL "Build sandbox apps.")

#========================================================================
# Identify if cross repository dependencies exist
#========================================================================

find_library(HELMTASK_LIBRARY NAMES helmtask PATHS ${CMAKE_SOURCE_DIR}/../moos-ivp-swarm/lib NO_DEFAULT_PATH)
if(NOT HELMTASK_LIBRARY)
  message(STATUS "helmtask library not found")
  set(SWARM_TOOLBOX_AVAIL FALSE)
else()
  message(STATUS "helmtask library found")
  set(SWARM_TOOLBOX_AVAIL TRUE)
endif()


#============================================================================
# List the subdirectories to build...
#============================================================================

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/KayakEvalEngineUtils )
  ADD_SUBDIRECTORY(KayakEvalEngineUtils)
ENDIF()

#===============================================================
#===============================================================
# Set the ROBOT Apps
#===============================================================
SET(ROBOT_APPS lib_sock_utils)

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_eval_engine )
  LIST(APPEND ROBOT_APPS lib_eval_engine)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_survey )
  LIST(APPEND ROBOT_APPS lib_survey)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_serialdev )
  LIST(APPEND ROBOT_APPS lib_serialdev)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_seatrac_tools )
  LIST(APPEND ROBOT_APPS lib_seatrac_tools)
ENDIF()

# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_anderson )
# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_anderson )
#   LIST(APPEND ROBOT_APPS lib_bhv_anderson)
# ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_pmview )
  LIST(APPEND ROBOT_APPS lib_bhv_pmview)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_navcheck )
  LIST(APPEND ROBOT_APPS lib_bhv_navcheck)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_legrunz )
#  LIST(APPEND ROBOT_APPS lib_bhv_legrunz)
#ENDIF()

#IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/lib_legrun)
#  LIST(APPEND ROBOT_APPS lib_legrun)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_convoy )
  LIST(APPEND ROBOT_APPS lib_convoy)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iM300 )
  LIST(APPEND ROBOT_APPS iM300)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iBlueBoat )
  LIST(APPEND ROBOT_APPS iBlueBoat)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iM300X )
  LIST(APPEND ROBOT_APPS iM300X)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iVehX )
  LIST(APPEND ROBOT_APPS iVehX)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/app_pickjoust )
  LIST(APPEND ROBOT_APPS app_pickjoust)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/app_pluck )
  LIST(APPEND ROBOT_APPS app_pluck)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pTestPost )
  LIST(APPEND ROBOT_APPS pTestPost)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iM300Health )
  LIST(APPEND ROBOT_APPS iM300Health)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pEvalConvoy )
  LIST(APPEND ROBOT_APPS pEvalConvoy)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pSafeRegion )
  LIST(APPEND ROBOT_APPS pSafeRegion)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pGeoSelect )
  LIST(APPEND ROBOT_APPS pGeoSelect)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pTrajectTranslate)
  LIST(APPEND ROBOT_APPS pTrajectTranslate)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pFalconRunMgr)
  LIST(APPEND ROBOT_APPS pFalconRunMgr)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_shell)
  LIST(APPEND ROBOT_APPS lib_bhv_shell)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iHydroLinkArduinoBridge)
  LIST(APPEND ROBOT_APPS iHydroLinkArduinoBridge)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iSeaTracX150V0)
  LIST(APPEND ROBOT_APPS iSeaTracX150V0)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uFldSearchDetectX )
#  LIST(APPEND ROBOT_APPS uFldSearchDetectX)
#ENDIF()


# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_SearchBHV)
#   LIST(APPEND ROBOT_APPS lib_SearchBHV)
# ENDIF()

# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_VectorBHV)
#   LIST(APPEND ROBOT_APPS lib_VectorBHV)
# ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_opinion)
  LIST(APPEND ROBOT_APPS lib_opinion)
ENDIF()

# Filip: did not build on pablos
# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pOpinionManager)
#   LIST(APPEND ROBOT_APPS pOpinionManager)
# ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pOpinionInput)
  LIST(APPEND ROBOT_APPS pOpinionInput)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pOpinionFixer)
  LIST(APPEND ROBOT_APPS pOpinionFixer)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iSerial)
  LIST(APPEND ROBOT_APPS iSerial)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uFldBloomStormSim)
  LIST(APPEND ROBOT_APPS uFldBloomStormSim)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_MoveToRegion)
#  LIST(APPEND ROBOT_APPS lib_MoveToRegion)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pBloomStormCtrl)
  LIST(APPEND ROBOT_APPS pBloomStormCtrl)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/app_test_armadillo)
  LIST(APPEND ROBOT_APPS app_test_armadillo)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uFldJoustMgr)
#  LIST(APPEND ROBOT_APPS uFldJoustMgr)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_dubin)
  LIST(APPEND ROBOT_APPS lib_dubin)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_demuster)
  LIST(APPEND ROBOT_APPS lib_bhv_demuster)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_dubin)
  LIST(APPEND ROBOT_APPS lib_bhv_dubin)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pDynamicTrafficLight)
  LIST(APPEND ROBOT_APPS pDynamicTrafficLight)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_demuster_geometry)
  LIST(APPEND ROBOT_APPS lib_demuster_geometry)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pDemusterAssign)
  LIST(APPEND ROBOT_APPS pDemusterAssign)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_hungarian_ext)
  LIST(APPEND ROBOT_APPS lib_hungarian_ext)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_random_survey)
  LIST(APPEND ROBOT_APPS lib_bhv_random_survey)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pAqctNodeCtrl)
  LIST(APPEND ROBOT_APPS pAqctNodeCtrl)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/dep_pMultiAgentColFilt)
  LIST(APPEND ROBOT_APPS dep_pMultiAgentColFilt)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pGroupComboAlloc)
  LIST(APPEND ROBOT_APPS pGroupComboAlloc)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uPopEval)
  LIST(APPEND ROBOT_APPS uPopEval)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uAdjPath)
  LIST(APPEND ROBOT_APPS uAdjPath)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_path_plan)
  LIST(APPEND ROBOT_APPS lib_path_plan)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uOptionMarker)
  LIST(APPEND ROBOT_APPS uOptionMarker)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uUtilVectorMarker)
  LIST(APPEND ROBOT_APPS uUtilVectorMarker)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uFldEvalOption)
  LIST(APPEND ROBOT_APPS uFldEvalOption)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pSumVars)
  LIST(APPEND ROBOT_APPS pSumVars)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_random_survey2)
#  LIST(APPEND ROBOT_APPS lib_bhv_random_survey2)
#ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_votetask)
#  LIST(APPEND ROBOT_APPS lib_votetask)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pVoteManager)
  LIST(APPEND ROBOT_APPS pVoteManager)
ENDIF()

# NB: NOT BUILDING ON UBUNTU
IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pTurnInPlace)
  LIST(APPEND ROBOT_APPS pTurnInPlace)
ENDIF()

#===============================================================
# Set the SANDBOX Apps
#===============================================================
SET(SANDBOX_APPS )

IF( EXISTS ${IVP_EXTEND_PARENT_DIR}/HydroMAN)
  LIST(APPEND SANDBOX_APPS iHydroMAN_IvPExtend)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uChangeMyName)
  LIST(APPEND SANDBOX_APPS uChangeMyName)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_learning)
  LIST(APPEND SANDBOX_APPS lib_learning)
ENDIF()


IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pDynamLearning)
  LIST(APPEND SANDBOX_APPS pDynamLearning)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iPingSim)
  LIST(APPEND SANDBOX_APPS iPingSim)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bathygrid)
  LIST(APPEND SANDBOX_APPS lib_bathygrid)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uFldSearchDetect)
  LIST(APPEND SANDBOX_APPS uFldSearchDetect)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pBathyGrider)
#  LIST(APPEND SANDBOX_APPS pBathyGrider)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pBathyPath)
  LIST(APPEND SANDBOX_APPS pBathyPath)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pGridSwitcher)
  LIST(APPEND SANDBOX_APPS pGridSwitcher)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pRoutePlan)
#  LIST(APPEND SANDBOX_APPS pRoutePlan)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pBathyChecker)
  LIST(APPEND SANDBOX_APPS pBathyChecker)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/iBlueRoboticsPing)
  IF( EXISTS /home/student2680/ping-cpp)
    LIST(APPEND SANDBOX_APPS iBlueRoboticsPing)
  ENDIF()
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pKalmanSolutionGen)
  LIST(APPEND SANDBOX_APPS pKalmanSolutionGen)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pSonarSimDetect)
  LIST(APPEND SANDBOX_APPS pSonarSimDetect)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pThrusterAlloc)
  LIST(APPEND SANDBOX_APPS pThrusterAlloc)
ENDIF()

#IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uDisplayLLRegion)
#  LIST(APPEND SANDBOX_APPS uDisplayLLRegion)
#ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uOpinionAnalysis)
  LIST(APPEND SANDBOX_APPS uOpinionAnalysis)
ENDIF()


#===============================================================
# Set the OTHER Apps
#===============================================================

SET(OTHER_APPS uSimHeron)

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uSockComms )
  LIST(APPEND OTHER_APPS uSockComms)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/app_alogceval )
  LIST(APPEND OTHER_APPS app_alogceval)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/app_convoy_order )
  LIST(APPEND OTHER_APPS app_convoy_order)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/uFldConvoyEval )
  LIST(APPEND OTHER_APPS uFldConvoyEval)
ENDIF()

SET(APPS_TO_BUILD ${ROBOT_APPS})

#===============================================================
# SWARM TOOLBOX DEPENDENCIES
#===============================================================

SET(SWARM_DEPENDS)
IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_convoy AND SWARM_TOOLBOX_AVAIL)
	LIST(APPEND SWARM_DEPENDS lib_bhv_convoy)
ENDIF()


IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_convoypd AND SWARM_TOOLBOX_AVAIL)
  LIST(APPEND SWARM_DEPENDS lib_bhv_convoypd)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_tasks_d2p AND SWARM_TOOLBOX_AVAIL)
  LIST(APPEND SWARM_DEPENDS lib_bhv_tasks_d2p)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_tasks_comp AND SWARM_TOOLBOX_AVAIL)
  LIST(APPEND SWARM_DEPENDS lib_bhv_tasks_comp)
ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_tasks_dubins AND SWARM_TOOLBOX_AVAIL)
  LIST(APPEND SWARM_DEPENDS lib_bhv_tasks_dubins)
ENDIF()


IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pHVUProtectAssetCtrl AND SWARM_TOOLBOX_AVAIL)
  LIST(APPEND SWARM_DEPENDS pHVUProtectAssetCtrl)
ENDIF()

# Filip: did not build on pablos
# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pHVUProtectNodeCtrl AND SWARM_TOOLBOX_AVAIL)
#   LIST(APPEND SWARM_DEPENDS pHVUProtectNodeCtrl)
# ENDIF()

# Filip: did not build on pablos
# IF( EXISTS ${CMAKE_SOURCE_DIR}/src/pProxonoiGridSearch)
#   LIST(APPEND SWARM_DEPENDS pProxonoiGridSearch)
# ENDIF()

IF( EXISTS ${CMAKE_SOURCE_DIR}/src/lib_bhv_demuster_task AND SWARM_TOOLBOX_AVAIL)
  LIST(APPEND SWARM_DEPENDS lib_bhv_demuster_task)
ENDIF()


message("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
message(" SRC: BUILD_BOT_CODE_ONLY: ${BUILD_BOT_CODE_ONLY}")
message(" SRC: BUILD_SANDBOX_CODE:  ${BUILD_SANDBOX_CODE}")
message("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")

IF("${BUILD_BOT_CODE_ONLY}" STREQUAL "OFF")
  LIST(APPEND APPS_TO_BUILD ${OTHER_APPS})
ENDIF("${BUILD_BOT_CODE_ONLY}" STREQUAL "OFF")

IF("${BUILD_SANDBOX_CODE}" STREQUAL "ON")
  LIST(APPEND APPS_TO_BUILD ${SANDBOX_APPS})
ENDIF("${BUILD_SANDBOX_CODE}" STREQUAL "ON")

IF(${SWARM_TOOLBOX_AVAIL})
  LIST(APPEND APPS_TO_BUILD ${SWARM_DEPENDS})
ENDIF(${SWARM_TOOLBOX_AVAIL})


FOREACH(A ${APPS_TO_BUILD})
  message("APP:" ${A} )
  ADD_SUBDIRECTORY(${A})
ENDFOREACH(A)

##############################################################################
#                           END of CMakeLists.txt
##############################################################################