 # ---------------------------------------------------------------------
 #
 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
 #                        pour la SantÈ)
 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
 #
 #  This software is governed by the CeCILL-B license under French law and
 #  abiding by the rules of distribution of free software. You can  use,
 #  modify and/ or redistribute the software under the terms of the CeCILL-B
 #  license as circulated by CEA, CNRS and INRIA at the following URL
 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
 #  or in the file LICENSE.txt.
 #
 #  As a counterpart to the access to the source code and  rights to copy,
 #  modify and redistribute granted by the license, users are provided only
 #  with a limited warranty  and the software's author,  the holder of the
 #  economic rights,  and the successive licensors  have only  limited
 #  liability.
 #
 #  The fact that you are presently reading this means that you have had
 #  knowledge of the CeCILL-B license and that you accept its terms.
 # ------------------------------------------------------------------------ */


#-----------------------------------------------------------------------------
# BUILDS AND INSTALLS THE LIBRARY BBTK
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
# Tests 
#-----------------------------------------------------------------------------

MESSAGE(STATUS "")
MESSAGE(STATUS "=======================================")
MESSAGE(STATUS "CONFIGURING bbtk LIBRARY")


#-----------------------------------------------------------------------------
# Test if compiler defines the pseudo-macro __FUNCTION__
IF("BBTK_COMPILER_HAS_FUNCTION" MATCHES "^BBTK_COMPILER_HAS_FUNCTION$")
  MESSAGE(STATUS "Checking support for __FUNCTION__ in compiler")
  TRY_COMPILE(BBTK_COMPILER_HAS_FUNCTION
              ${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/Function
              ${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkTestFUNCTION.cxx
              OUTPUT_VARIABLE OUTPUT)
  IF(BBTK_COMPILER_HAS_FUNCTION)
    MESSAGE(STATUS "Checking support for __FUNCTION__ -- yes")
    SET(BBTK_COMPILER_HAS_FUNCTION 1 CACHE INTERNAL "Support for extension C __FUNCTION__")
    WRITE_FILE(${CMAKE_CURRENT_BINARY_DIR}/CMakeOutput.log
      "Determining if the C compiler supports __FUNCTION__ "
      "passed with the following output:\n"
      "${OUTPUT}\n" APPEND)
  ELSE(BBTK_COMPILER_HAS_FUNCTION)
    MESSAGE(STATUS "Checking support for __FUNCTION__ -- no")
    SET(BBTK_COMPILER_HAS_FUNCTION 0 CACHE INTERNAL "Support for extension C __FUNCTION__")
    WRITE_FILE(${CMAKE_CURRENT_BINARY_DIR}/CMakeError.log
      "Determining if the C compiler supports __FUNCTION__ "
      "failed with the following output:\n"
      "${OUTPUT}\n" APPEND)
  ENDIF(BBTK_COMPILER_HAS_FUNCTION)
ENDIF("BBTK_COMPILER_HAS_FUNCTION" MATCHES "^BBTK_COMPILER_HAS_FUNCTION$")
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Test is compiler support istringstream
IF("BBTK_TEST_ISTRINGSTREAM" MATCHES "^BBTK_TEST_ISTRINGSTREAM$")
  MESSAGE(STATUS "Checking istringstream")
  TRY_RUN(BBTK_TEST_ISTRINGSTREAM BBTK_TEST_ISTRINGSTREAM_COMPILED
          ${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/
          ${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkTestIstringStream.cxx)
  IF(BBTK_TEST_ISTRINGSTREAM_COMPILED)
    IF(BBTK_TEST_ISTRINGSTREAM)
      MESSAGE(STATUS "Checking istringstream works -- yes")
      SET(BBTK_TEST_ISTRINGSTREAM 1 CACHE INTERNAL "Whether istringstream works.")
    ELSE(BBTK_TEST_ISTRINGSTREAM)
      MESSAGE(STATUS "Checking istringstream works -- no")
      SET(BBTK_TEST_ISTRINGSTREAM 0 CACHE INTERNAL "Whether istringstream works.")
    ENDIF(BBTK_TEST_ISTRINGSTREAM)
  ELSE(BBTK_TEST_ISTRINGSTREAM_COMPILED)
    MESSAGE(STATUS "Checking istringstream -- failed")
  ENDIF(BBTK_TEST_ISTRINGSTREAM_COMPILED)
ENDIF("BBTK_TEST_ISTRINGSTREAM" MATCHES "^BBTK_TEST_ISTRINGSTREAM$")
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
CHECK_INCLUDE_FILE("stdint.h"       CMAKE_HAVE_STDINT_H)
IF(UNIX) #Avoid polluting Win32 cmakecache
  CHECK_INCLUDE_FILE("inttypes.h"   CMAKE_HAVE_INTTYPES_H)
  # termios 
  CHECK_INCLUDE_FILE("termios.h"   CMAKE_HAVE_TERMIOS_H)
ENDIF(UNIX)
# Special Time support, two conventions: *NIX vs Win32
CHECK_INCLUDE_FILE("sys/times.h"    CMAKE_HAVE_SYS_TIMES_H)
CHECK_INCLUDE_FILE("sys/timeb.h"    CMAKE_HAVE_SYS_TIMEB_H)
#-----------------------------------------------------------------------------

  

#-----------------------------------------------------------------------------






#-----------------------------------------------------------------------------
# Generates the bbtkConfigure.h file
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkConfigure.h.in
               ${CMAKE_CURRENT_BINARY_DIR}/bbtkConfigure.h 
	       @ONLY IMMEDIATE
               )
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
IF(NOT BBTK_INSTALL_NO_DEVELOPMENT)
  INSTALL_FILES(/include/bbtk FILES bbtkConfigure.h)
ENDIF(NOT BBTK_INSTALL_NO_DEVELOPMENT)
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Add the path to current dir for apps to find bbtkConfigure.h
# LG : already done in upper dir
#INCLUDE_DIRECTORIES(
#  ${CMAKE_CURRENT_BINARY_DIR} #for bbtkConfigure.h
#)
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# EO Generates the bbtkConfigure.h file
#-----------------------------------------------------------------------------






#-----------------------------------------------------------------------------
# bbtk library creation
#-----------------------------------------------------------------------------
# Symbols must be exported (Windows)
CREA_DEFINE(BBTK_EXPORT_SYMBOLS)

#ADD_DEFINITIONS(-DCHECKBOXVIEW=1)
#-----------------------------------------------------------------------------
# Sources files 
FILE(GLOB SOURCES "." "*.cxx" "*.cpp") 
# "ThirdParty/wx/treemultictrl/*.cpp")
FILE(GLOB SOURCES_H "." "*.h" "*.txx" )

#-----------------------------------------------------------------------------
IF(BBTK_USE_KWWIDGETS)
  IF(KWWidgets_FOUND)
    include("${KWWidgets_CMAKE_DIR}/KWWidgetsWrappingMacros.cmake")
    kwwidgets_wrap_tcl(bbtk LIB_TCL_SRCS "vtkKWBlackBoxDialog.cxx" "")
    SET(SOURCES ${SOURCES} ${LIB_TCL_SRCS})
  ENDIF(KWWidgets_FOUND)
ENDIF(BBTK_USE_KWWIDGETS)
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
IF(BBTK_USE_QT)
  IF(QT_FOUND)
    #--------------------------------------------------------------------------- 
    # MOC
    SET(QT4_HEADERS_TO_WRAP
      bbtkQtBlackBoxDialog.h
      )
    QT4_WRAP_CPP(MOC_SOURCES ${QT4_HEADERS_TO_WRAP} OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED)
    #--------------------------------------------------------------------------- 
    # UI
    QT4_WRAP_UI(UI_SOURCES
      bbtkQtBlackBoxDialog.ui
      )
    SET(SOURCES ${SOURCES} ${MOC_SOURCES} ${UI_SOURCES})
  ENDIF(QT_FOUND)
ENDIF(BBTK_USE_QT)
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
# lib definition
ADD_LIBRARY(bbtk SHARED ${SOURCES} ${SOURCES_H})
#-----------------------------------------------------------------------------
TARGET_LINK_LIBRARIES(bbtk ${BBTK_LINK_LIBRARIES} ${BOOST_LIBRARIES}  ${crea_LIBRARIES})
#-----------------------------------------------------------------------------
IF(UNIX)
SET_TARGET_PROPERTIES(bbtk PROPERTIES COMPILE_FLAGS -Wall)
ENDIF(UNIX)

#IF(UNIX)
# for gnu linker : version script used to define exported symbols
#SET_TARGET_PROPERTIES(bbtk PROPERTIES 
#  LINK_FLAGS_DEBUG -Wl,--version-script=bbtk.map)
#SET_TARGET_PROPERTIES(bbtk PROPERTIES
#  LINK_FLAGS_RELEASE -Wl,--version-script=bbtk.map)
#ENDIF(UNIX)
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
# EO bbtk library creation
#-----------------------------------------------------------------------------







#=============================================================================
# bbtk library installation
#=============================================================================


#-----------------------------------------------------------------------------
FILE(GLOB BBTK_HEADERS "*.h" "*.txx")
INSTALL(FILES ${BBTK_HEADERS} DESTINATION include/bbtk)
INSTALL(TARGETS bbtk DESTINATION ${BBTK_LIB_PATH})
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Code installing the files needed to find the lib by FIND_PACKAGE
# Uses CREA_ADVANCED_INSTALL_LIBRARY_FOR_CMAKE
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
# - Set the variable LIBRARY_NAME to the name of your library
SET(LIBRARY_NAME BBTK)
SET(${LIBRARY_NAME}_INSTALL_FOLDER bbtk)
SET(${LIBRARY_NAME}_LIBRARIES bbtk)
SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS kernel/src)
#kernel/src/ThirdParty)
#IF(BBTK_USE_SHIPPED_BOOST)
#  SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS
#    ${${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS} 
#    kernel/src/ThirdParty/${BBTK_SHIPPED_BOOST}
#    )
#ENDIF(BBTK_USE_SHIPPED_BOOST)
IF(UNIX)
  SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS 
    ${EXECUTABLE_OUTPUT_REL_PATH})
ELSE(UNIX)
  SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS
    ${EXECUTABLE_OUTPUT_REL_PATH}
    .
    )
    #${EXECUTABLE_OUTPUT_REL_PATH})/Debug
    #${EXECUTABLE_OUTPUT_REL_PATH}/Release)
ENDIF(UNIX)
SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_INCLUDE_PATHS include/bbtk)
# include/bbtk/ThirdParty)
SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_LIBRARY_PATHS ${BBTK_LIB_PATH})

# OPTIONAL 
# - Set the version of your library
# SET YOUR LIB VERSION
#SET(${LIBRARY_NAME}_MAJOR_VERSION 1)
#SET(${LIBRARY_NAME}_MINOR_VERSION 0)
#SET(${LIBRARY_NAME}_BUILD_VERSION 0)
# REQUIRED BUILD FLAGS
#SET(${LIBRARY_NAME}_REQUIRED_C_FLAGS "")
#SET(${LIBRARY_NAME}_REQUIRED_CXX_FLAGS "")
#SET(${LIBRARY_NAME}_REQUIRED_LINK_FLAGS "")
# ADDITIONAL CONFIG FILE
# HERE WE USE ONE TO EXPORT testLib_EXPORTED_VALUE
# 
SET(${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE TRUE)
SET(${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE 
  ${PROJECT_SOURCE_DIR}/kernel/cmake/AdditionalBBTKConfig.cmake.in)
SET(${LIBRARY_NAME}_ADDITIONAL_USE_FILE 
  ${PROJECT_SOURCE_DIR}/kernel/cmake/AdditionalUseBBTK.cmake.in)
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
CREA_ADVANCED_INSTALL_LIBRARY_FOR_CMAKE(${LIBRARY_NAME})

#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# EO bbtk library installation
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
# Recurse in EditorGraphicBBS to build the needed libs
#EED ADD_SUBDIRECTORY(EditorGraphicBBS)
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
# Recurse in ThirdParty to build the needed libs
#ADD_SUBDIRECTORY(ThirdParty)
#-----------------------------------------------------------------------------


MESSAGE(STATUS "=======================================")
MESSAGE(STATUS "")

#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------

