INCLUDE(TribitsPackageMacros)
INCLUDE(TribitsAddOptionAndDefine)

# Path to test and example data directory
#KDD NOT WORKING IN NIGHTLY TEST SYSTEM
#KDD BETTER SOLUTION:  COPY THE NEEDED INPUT FILES AND USE FROM RUN DIRECTORY
#KDD SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DZ2_DATA_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/test/data/\"")

# Path to Zoltan1 test directory
#KDD WILL NEED TO FIX THIS CASE AS WELL, BUT IT IS NOT USED IN NIGHTLY TESTING
#KDD SINCE NIGHTLY TESTS DO NOT ENABLE Experimental TESTS.
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DZ1_TEST_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/../../packages/zoltan/test/\"")

#
# A) Define the package
#

TRIBITS_PACKAGE(Zoltan2 ENABLE_SHADOWING_WARNINGS)

#
# B) Set up package-specific options
#

IF (${PROJECT_NAME}_ENABLE_Zoltan)
 GLOBAL_SET(HAVE_${PACKAGE_NAME_UC}_ZOLTAN ON)
ENDIF ()

TRIBITS_ADD_OPTION_AND_DEFINE(
   ${PACKAGE_NAME}_ENABLE_Experimental
   INCLUDE_${PACKAGE_NAME_UC}_EXPERIMENTAL
   "Enable experimental code."
   OFF)

IF (HAVE_TPETRA_EXPLICIT_INSTANTIATION)

IF (HAVE_TPETRA_INST_INT_LONG)

IF (HAVE_TPETRA_INST_FLOAT)
 GLOBAL_SET(HAVE_${PACKAGE_NAME_UC}_INST_FLOAT_INT_LONG ON)
ELSE()
 GLOBAL_SET(HAVE_${PACKAGE_NAME_UC}_INST_DOUBLE_INT_LONG ON)
ENDIF()

ELSE()

IF (HAVE_TPETRA_INST_FLOAT)
 GLOBAL_SET(HAVE_${PACKAGE_NAME_UC}_INST_FLOAT_INT_INT ON)
ELSE()
 GLOBAL_SET(HAVE_${PACKAGE_NAME_UC}_INST_DOUBLE_INT_INT ON)
ENDIF()

ENDIF()

ENDIF()

SET(HAVE_${PACKAGE_NAME_UC}_LONG_LONG ${Teuchos_ENABLE_LONG_LONG_INT})

SET(HAVE_${PACKAGE_NAME_UC}_MPI ${TPL_ENABLE_MPI})

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_METIS
  HAVE_${PACKAGE_NAME_UC}_METIS
  "Metis is present"
  OFF )

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_PaToH
  HAVE_${PACKAGE_NAME_UC}_PATOH
  "PaToH is present"
  OFF )

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_ParMETIS
  HAVE_${PACKAGE_NAME_UC}_PARMETIS
  "ParMetis is present"
  OFF )

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_Scotch
  HAVE_${PACKAGE_NAME_UC}_SCOTCH
  "Scotch is present"
  OFF )

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_OVIS
  HAVE_${PACKAGE_NAME_UC}_OVIS
  "Ovis is present"
  OFF )

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_AMD
  HAVE_${PACKAGE_NAME_UC}_AMD
  "AMD is present"
  OFF )

TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_ANASAZI
  HAVE_${PACKAGE_NAME_UC}_ANASAZI
  "Anasazi is present"
  OFF )

#
# See the comment in Zoltan2_AlgScotch.hpp to learn how to
# modify the scotch library to return the maximum memory used.
#
TRIBITS_ADD_OPTION_AND_DEFINE(${PACKAGE_NAME}_ENABLE_SCOTCH_MEMORY_REPORT
  SHOW_${PACKAGE_NAME_UC}_SCOTCH_MEMORY
  "turn on runtime display maximum memory used by scotch"
  OFF )


#INCLUDE(CheckTypeSize)
#CHECK_TYPE_SIZE("long long" HAVE_${PACKAGE_NAME_UC}_LONG_LONG)

#
# C) Add the libraries, tests, and examples
#

ADD_SUBDIRECTORY(src)

TRIBITS_ADD_TEST_DIRECTORIES(test)

TRIBITS_ADD_EXAMPLE_DIRECTORIES(example)

#
# Exclude files for source package.
#
#TRIBITS_EXCLUDE_FILES()


#
# D) Do standard postprocessing
#

TRIBITS_PACKAGE_POSTPROCESS()
