
INCLUDE(TribitsLibraryMacros)

ADD_SUBDIRECTORY(function)
ADD_SUBDIRECTORY(fixtures)
ADD_SUBDIRECTORY(math)
ADD_SUBDIRECTORY(mesh)
ADD_SUBDIRECTORY(norm)
ADD_SUBDIRECTORY(structured)
ADD_SUBDIRECTORY(util)
ADD_SUBDIRECTORY(xfer)
ADD_SUBDIRECTORY(eigen_verify)

TRIBITS_CONFIGURE_FILE(${PACKAGE_NAME}_config.h)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../stk_search)

SET(HEADERS "")
SET(SOURCES "")

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR})
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/fixtures)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/function)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/function/internal)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/math)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/mesh/gen)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

IF( STK_PERCEPT_HAS_GEOMETRY )

  SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/mesh/geometry/kernel)
  APPEND_GLOB(HEADERS ${DIR}/*.hpp)
  APPEND_GLOB(SOURCES ${DIR}/*.cpp)

  SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/mesh/mod/smoother)
  APPEND_GLOB(HEADERS ${DIR}/*.hpp)
  APPEND_GLOB(SOURCES ${DIR}/*.cpp)

ELSE()

  SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/mesh/mod/smoother)

  APPEND_SET(HEADERS
    ${DIR}/JacobianUtil.hpp
    ${DIR}/SpacingFieldUtil.hpp
    ${DIR}/MeshSmoother.hpp
  )

  APPEND_SET(SOURCES
    ${DIR}/JacobianUtil.cpp
    ${DIR}/SpacingFieldUtil.cpp
    ${DIR}/MeshSmoother.cpp
  )

ENDIF()


SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/norm)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/structured)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_GLOB(SOURCES ${DIR}/*.cpp)

SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/util)
APPEND_GLOB(HEADERS ${DIR}/*.hpp)

#SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/verifier/mesh)
#APPEND_GLOB(HEADERS ${DIR}/*.hpp)
#APPEND_GLOB(SOURCES ${DIR}/*.cpp)

# Must glob the binary dir last to get all of the auto-generated headers
SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_BINARY_DIR})
APPEND_GLOB(HEADERS ${DIR}/*.hpp)
APPEND_SET(HEADERS ${DIR}/${PACKAGE_NAME}_config.h )


SET_AND_INC_DIRS(DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)

TRIBITS_ADD_LIBRARY(
	percept
	HEADERS	${HEADERS}
  DEPLIBS  stk_io_util stk_util_diag stk_search stk_expreval
	SOURCES ${SOURCES}
)

INSTALL(FILES ${HEADERS} DESTINATION
${CMAKE_INSTALL_PREFIX}/include/percept/)

