# Check if cmake has the required version
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.3 FATAL_ERROR)

# Set name of our project to "PAWIAN" (= PArtial Wave Interactive ANalysis)                  
project(PAWIAN)

set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")


set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules")

# Load some basic macros which are needed later on
include(WriteConfigFile)

# searches for needed packages
# REQUIRED means that cmake will stop if this packages are not found
# For example the framework can run without GEANT4, but ROOT is
# mandatory
find_package(ROOT REQUIRED)

# Configure Boost
SET (Boost_USE_MULTITHREAD ON)
SET (Boost_ADDITIONAL_VERSIONS "1.42" "1.43.0" "1.44" "1.44.0" "1.45" "1.45.0" "1.46" "1.46.0" "1.46.1")

IF(DEFINED PAWIAN_BOOSTROOT)
	MESSAGE ("Using custom Boost installation")
	SET(BOOST_ROOT ${PAWIAN_BOOSTROOT})
	SET(BOOST_INCLUDEDIR ${PAWIAN_BOOSTROOT}/include)
	SET(BOOST_LIBRARYDIR ${PAWIAN_BOOSTROOT}/lib)
	SET(Boost_NO_SYSTEM_PATHS true)
ENDIF()


FIND_PACKAGE(Boost 1.42 REQUIRED COMPONENTS
        date_time
        filesystem
        program_options
        regex
        serialization
        system
        thread
)

MESSAGE("Boost_INCLUDE_DIRS: "  ${Boost_INCLUDE_DIRS})
MESSAGE("Boost_LIBRARIES: "  ${Boost_LIBRARIES})
MESSAGE("Boost_LIBRARY_DIRS: "  ${Boost_LIBRARY_DIRS})


FIND_PACKAGE(Minuit2 REQUIRED)
MESSAGE("Minuit2_INCLUDE_DIRS: " ${Minuit2_INCLUDE_DIRS})
MESSAGE("Minuit2_LIBRARY_DIRS: " ${Minuit2_LIBRARY_DIRS})
MESSAGE("Minuit2_LIBRARY: " ${Minuit2_LIBRARY})
MESSAGE("Minuit2_LIBRARIES: " ${Minuit2_LIBRARIES})

FIND_PACKAGE(log4cpp REQUIRED)
MESSAGE("log4cpp_INCLUDE_DIRS: " ${log4cpp_INCLUDE_DIRS})
MESSAGE("log4cpp_LIBRARY_DIRS: " ${log4cpp_LIBRARY_DIRS})
MESSAGE("log4cpp_LIBRARY: " ${log4cpp_LIBRARY})
MESSAGE("log4cpp_LIBRARIES: " ${log4cpp_LIBRARIES})

FIND_PACKAGE(Geneva REQUIRED)
MESSAGE("GENEVA_INCLUDE_DIRS: " ${GENEVA_INCLUDE_DIRS})
MESSAGE("GENEVA_LIBRARY_DIRS: " ${GENEVA_LIBRARY_DIRS})
MESSAGE("GENEVA_LIBRARIES: " ${GENEVA_LIBRARIES})

# Set the library type to static by default
IF( NOT PAWIAN_STATIC )
        SET( PAWIAN_STATIC TRUE )
ENDIF()

# Set the build type to Debug by default or in case PAWIAN_BUILD_TYPE
# was not set. Set it to Release if PAWIAN_BUILD_TYPE was set
# accordingly. Complain in all other cases.
IF(NOT DEFINED PAWIAN_BUILD_TYPE OR PAWIAN_BUILD_TYPE STREQUAL "Debug")
	MESSAGE ("Setting the build type to default value Debug")
	SET(CMAKE_BUILD_TYPE Debug)
ELSEIF(PAWIAN_BUILD_TYPE STREQUAL "Release")
	MESSAGE ("Setting the build type to Release")
	SET(CMAKE_BUILD_TYPE Release)
ELSE()
	MESSAGE (FATAL_ERROR "Unknown compilation mode " ${PAWIAN_BUILD_TYPE})
ENDIF()

IF( PAWIAN_STATIC )
#        SET (CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -lpthread")
#        SET (LINK_FLAGS "-static-libgcc -lpthread")
	 SET (CMAKE_EXE_LINKER_FLAGS "-lpthread -Wall")
	 SET (LINK_FLAGS "-lpthread -Wall")
        SET (BUILD_SHARED_LIBS OFF)
        SET (Boost_USE_STATIC_LIBS ON)
        LINK_LIBRARIES (dl)
#        LINK_LIBRARIES (z)      
        LINK_LIBRARIES (pthread)
ELSE()
        SET (BUILD_SHARED_LIBS ON)
        SET (Boost_USE_STATIC_LIBS OFF)
        LINK_LIBRARIES (pthread)
ENDIF()

ADD_SUBDIRECTORY (CMakeModules)
add_subdirectory (qft++)
add_subdirectory (Utils)
add_subdirectory (ErrLogger)
add_subdirectory (Particle)
add_subdirectory (DecayTree)
add_subdirectory (Event)
add_subdirectory (Setup)
add_subdirectory (PwaUtils)
add_subdirectory (Examples)

EXECUTE_PROCESS(COMMAND ps OUTPUT_VARIABLE PSOUTPUT)

IF(${PSOUTPUT} MATCHES tcsh )
 SET(CONFIG_TCSH_FILE CONFIG_TCSH_FILE-NOTFOUND)
 FIND_FILE(CONFIG_TCSH_FILE config.csh PATHS ${CMAKE_BINARY_DIR}) 
 IF(CONFIG_TCSH_FILE MATCHES config.csh) 
  EXECUTE_PROCESS(COMMAND rm config.csh)
 ENDIF() 
 WRITE_CONFIG_FILE(config.csh)
ELSEIF(${PSOUTPUT} MATCHES bash)
 SET(CONFIG_SH_FILE CONFIG_SH_FILE-NOTFOUND)
 FIND_FILE(CONFIG_SH_FILE config.sh PATHS ${CMAKE_BINARY_DIR}) 
 IF(CONFIG_SH_FILE MATCHES config.sh) 
  EXECUTE_PROCESS(COMMAND rm config.sh)
 ENDIF() 
  WRITE_CONFIG_FILE(config.sh)
ELSE()
 MESSAGE("No config file: tcsh or bash not found !!!")
ENDIF()