#This configuration file is shipped with the great FEM-Toolbox AMDiS.
#It simplifies the configure of different amdis-version and sets some variables.
#We set the following variables:
# AMDIS_INCLUDE_DIR 	the amdis-directory only
# AMDIS_INCLUDE_DIRS	all include directories (mtl, umfpack, parmetis, metis, ...)
# AMDIS_LIBRARIES	the needed libraries
# AMDIS_LIBRARY_DIRS	the link directories
# AMDiS_COMPILEFLAGS	some compile flags for amdis
#
#
# For a fast start, you use this package in the following way
# simply look for it, possibly set the AMDiS directory
# find_package(AMDiS )
# include(${AMDIS_USE_FILE})
# add_executable(yourTarget <yourSources>)
# target_link_libraries(yourTarget ${AMDIS_LIBRARIES})
#
#
#The AMDIS_USE_FILE adds the include and link-directories for amdis to cmake.
# 
#If you use the parallel amdis-version, the AMDIS_USE_FILE also trys to detect
#the mpi and petsc configuration. If those versions don't fit your needs,
#you can change the corresponding directories, or simply do this work at your own
#and omit the AMDIS_USE_FILE. Then you also have to set the flags, include 
#and library directories.

################## ONLY WORKAROUND AND WARNING ###################
#if(NOT "$ENV{LIBRARY_PATH}" STREQUAL "")
#        message(WARNING "the environment variable LIBRARY_PATH is set. this can lead to problems during linking. \n You can unset it in your CMakeLists.txt with the command unset(ENV{LIBRARY_PATH}).\n")
#endif()
##################################################################
#try to detect the AMDiS include directory
find_file(_AMDIS_H AMDiS.h PATHS ${AMDIS_INCLUDE_DIR} ${AMDIS_DIR}/../../include/amdis/ /usr/include/amdis/)
if(_AMDIS_H)
	get_filename_component(AMDIS_INCLUDE_DIR ${_AMDIS_H} PATH CACHE)
	set(AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR})
else()
	message(ERROR "could not detect the AMDiS include directory. Please set the variable AMDIS_INCLUDE_DIR to the directory containing the AMDiS headers.")
endif()
unset(_AMDIS_H CACHE)
set(MTL_DIR ${AMDIS_INCLUDE_DIR}/mtl4 CACHE PATH "the mtl directory")
list(APPEND AMDIS_INCLUDE_DIRS ${MTL_DIR})

find_library(_AMDIS_LIB amdis PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/ /usr/include/amdis)
if(_AMDIS_LIB)
	get_filename_component(AMDIS_LIBRARY_DIR ${_AMDIS_LIB} PATH CACHE)
	set(AMDIS_LIBRARY_DIRS ${AMDIS_LIBRARY_DIR})
	set(AMDIS_LIBRARIES "${_AMDIS_LIB};${AMDIS_LIBRARY_DIR}/libcompositeFEM.so;${AMDIS_LIBRARY_DIR}/libreinit.so;${AMDIS_LIBRARY_DIR}/libmuparser.so" CACHE STRING "amdis libraries")
else()
	message(ERROR "could not detect the AMDiS library directory. Please set the variable AMDIS_LIBRARY_DIR to the directory containg the AMDiS library")
endif()
unset(_AMDIS_LIB CACHE)

find_package(Boost 1.42 REQUIRED system iostreams filesystem)
if(Boost_FOUND)
	list(APPEND AMDIS_LIBRARIES ${Boost_LIBRARIES})
	list(APPEND AMDIS_LIBRARY_DIRS ${Boost_LIBRARY_DIRS})
	list(APPEND AMDIS_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
endif(Boost_FOUND)

set(AMDIS_NEED_ZOLTAN @ENABLE_ZOLTAN@)
set(AMDIS_HAS_PARALLEL_DOMAIN @ENABLE_PARALLEL_DOMAIN@)
set(AMDIS_NEED_UMFPACK @ENABLE_UMFPACK@)
set(AMDIS_NEED_PNG @ENABLE_PNG@)
set(AMDIS_NEED_BDDCML @ENABLE_BDDCML@)
set(AMDIS_NEED_MKL @ENABLE_MKL@)
set(AMDIS_USE_FILE ${AMDIS_DIR}/AMDISUse.cmake)
set(AMDIS_COMPILEFLAGS "@COMPILEFLAGS@")
set(AMDIS_VERSION @CurrentRevision@)
set(AMDIS_MAJOR_VERSION @AMDIS_MAJOR@)
set(AMDIS_MINOR_VERSION @AMDIS_MINOR@)

if(AMDIS_NEED_UMFPACK)
	set(AMDIS_UMFPACK_PATH @UMFPACK_PATH@)
	list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_UMFPACK_PATH})
	find_library(UMFPACK_LIB umfpack
		HINTS ENV LIBRARY_PATH
		DOC "The UMFPACK library")
	if(UMFPACK_LIB)
		list(APPEND AMDIS_LIBRARIES ${UMFPACK_LIB})
	else()
		message(FATAL_ERROR "Could not find the UMFPACK library")
	endif()
	if("$ENV{BLA_VENDOR}" STREQUAL "ACML")
	  find_library(ACML_LIBRARY acml HINTS ENV ACML_LIB)
	  if(ACML_LIBRARY)
	    list(APPEND AMDIS_LIBRARIES ${ACML_LIBRARY} fortran ffio m rt) #needed on atlas..
	  else()
	    message(FATAL_ERROR "could not find the acml libraries, required by acml blas")
	  endif(ACML_LIBRARY)
	else()
	  find_library(BLAS_LIBRARY NAMES "blas" "goto" "mkl"
		HINTS ENV MKL_LIB
		DOC "The BLAS library")
	  if(BLAS_LIBRARY)
		list(APPEND AMDIS_LIBRARIES ${BLAS_LIBRARY})
		list(APPEND AMDIS_LIBRARY_DIRS ${BLAS_LIBRARY_DIR})
	  else()
		message(ERROR "Could not find the BLAS library. Please set the variable BLAS_LIBRARY to the blas library with full path")
	  endif()
	endif("$ENV{BLA_VENDOR}" STREQUAL "ACML")

	find_library(AMD_LIB amd
		HINTS ENV LIBRARY_PATH
		DOC "The AMD library")
	if(AMD_LIB)
		list(APPEND AMDIS_LIBRARIES ${AMD_LIB})
	else()
		message(FATAL_ERROR "Could not find the AMD library.")
	endif()
	#check for if we need cholmod	
	set(_CHOLMOD_TEST_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/cholmodTest/)
	file(WRITE ${_CHOLMOD_TEST_DIR}/CMakeLists.txt "project(cholmodTest)
			cmake_minimum_required(VERSION 2.8)
			include_directories(${AMDIS_INCLUDE_DIRS})
			add_executable(cholmodTest cholmodTest.cpp)
			target_link_libraries(cholmodTest ${AMDIS_LIBRARIES})")
	file(WRITE ${_CHOLMOD_TEST_DIR}/cholmodTest.cpp "#include <umfpack.h> 
			int main(int , char* argv[]) { double c[UMFPACK_CONTROL]; umfpack_dl_defaults(c); return 0;}")
	try_compile(CHOLMOD_TEST ${_CHOLMOD_TEST_DIR}/build ${_CHOLMOD_TEST_DIR} cholmodTest
			OUTPUT_VARIABLE CHOLMOD_OUT)
	if(NOT CHOLMOD_TEST)
	  find_library(CHOLMOD_LIB cholmod)
	  if(CHOLMOD_LIB)
	    list(APPEND AMDIS_LIBRARIES ${CHOLMOD_LIB})
	  else()
	    message(FATAL_ERROR "your umfpack seems to need cholmod, but cmake could not find it")
	  endif()
	  find_library(COLAMD_LIB colamd)
	  if(COLAMD_LIB)
	    list(APPEND AMDIS_LIBRARIES ${COLAMD_LIB})
	  else()
	    message(FATAL_ERROR "your umfpack seems to need colamd, but cmake could not find it")
	  endif()

	endif()
endif(AMDIS_NEED_UMFPACK)

if(AMDIS_NEED_PNG)
	set(AMDIS_PNG_PATH @PNG_PATH@)
	list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_PNG_PATH})

	find_library(PNG_LIB png
		HINTS ENV LIBRARY_PATH
		DOC "The PNG library")
	if(PNG_LIB)
		list(APPEND AMDIS_LIBRARIES ${PNG_LIB})
	else()
		message(FATAL_ERROR "Could not find the PNG library")
	endif()
endif(AMDIS_NEED_PNG)
	
if(AMDIS_NEED_BDDCML)
	set(AMDIS_BDDCML_PATH @BDDCML_PATH@)
	list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_BDDCML_PATH})

	set(AMDIS_BDDCML_LIB @BDDCML_LIB@)
	list(APPEND AMDIS_LIBRARIES ${AMDIS_BDDCML_LIB})

	set(AMDIS_BDDCML_LINK_LIST @BDDCML_LINK_LIST@)
	list(APPEND AMDIS_LIBRARIES ${AMDIS_BDDCML_LINK_LIST})
endif(AMDIS_NEED_BDDCML)


#add directories for reinit
list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/reinit)
list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/compositeFEM)
list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/muparser)

if(${AMDIS_FIND_COMPONENTS} MATCHES umfpack )
	if(NOT AMDIS_NEED_UMFPACK)
	  set(AMDIS_umfpack_FOUND FALSE)
	  message(SEND_ERROR "The selected amdis was not compiled with umfpack")
	endif()
endif()

if(AMDIS_NEED_ZOLTAN)
	find_library(ZOLTAN_LIB zoltan 
		HINTS ENV LIBRARY_PATH
		DOC "full path to the zoltan library")		

	if(ZOLTAN_LIB)
		list(APPEND AMDIS_LIBRARIES ${ZOLTAN_LIB})	
	else()
		message(FATAL_ERROR "Could not find zoltan library!")
	endif()
endif()