# Set project name
PROJECT(Profdist)

SET(PROFDIST_VERSION_NUMBER			000908)
SET(PROFDIST_VERSION_STRING			"0.9.8")
SET(PROFDIST_APPLICATION_NAME		"ProfDistS")
SET(PROFDIST_ORGANIZATION_NAME		"Biozentrum")
SET(PROFDIST_ORGANIZATION_DOMAIN	"biozentrum.uni.wuerzburg.de")
SET(PROFDIST_SUPPORT_EMAIL			"ProfDist@biozentrum.uni-wuerzburg.de")
SET(PROFDIST_ONLINE_HELP_ADDRESS	"http://profdist.bioapps.biozentrum.uni-wuerzburg.de/")

SET(PROFDIST_DATA_DIR				"${CMAKE_INSTALL_PREFIX}/share/profdist")
SET(PROFDIST_PLUGINS_DIR			"${PROFDIST_DATA_DIR}/plugins")

# if we want debug output set this to 1
OPTION(PROFDIST_DEBUG_OUTPUT "Specifies if profdist is built in debug mode")

# We require a minimum cmake version
CMAKE_MINIMUM_REQUIRED(VERSION 2.4 FATAL_ERROR)

# Search for Qt 4 installation and set it up
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})

# Search for the Boost installation
FIND_PACKAGE(Boost REQUIRED)

# Support for checking include files, symbols, etc.
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckSymbolExists)
INCLUDE(CheckFunctionExists)

# Set the variables for the config.h expansion
CHECK_INCLUDE_FILES("dlfcn.h"		HAVE_DLFCN_H)
CHECK_INCLUDE_FILES("inttypes.h"	HAVE_INTTYPES_H)
CHECK_INCLUDE_FILES("memory.h"		HAVE_MEMORY_H)
CHECK_INCLUDE_FILES("stdint.h"		HAVE_STDINT_H)
CHECK_INCLUDE_FILES("stdlib.h"		HAVE_STDLIB_H)
CHECK_INCLUDE_FILES("strings.h"		HAVE_STRINGS_H)
CHECK_INCLUDE_FILES("string.h"		HAVE_STRING_H)
CHECK_INCLUDE_FILES("sys/stat.h"	HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILES("sys/types.h"	HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILES("unistd.h"		HAVE_UNISTD_H)
CHECK_INCLUDE_FILES("math.h"		HAVE_MATH_H)
CHECK_INCLUDE_FILES("stdbool.h"		HAVE_STDBOOL_H)

# Test on which system we are and set the needed vars
IF(APPLE)
	IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
		SET(DARWIN_SYSTEM 1)
	ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
ELSEIF(WIN32)
	SET(WINDOWS_SYSTEM)
ELSEIF(MINGW)
	SET(WINDOWS_SYSTEM)
ELSEIF(MSYS)
	SET(WINDOWS_SYSTEM)
ELSEIF(CYGWIN)
	SET(WINDOWS_SYSTEM)
ENDIF(APPLE)

# set HAVE_BOOST if the boost include files and libraries were found
# on this system
IF(Boost_FOUND)
	SET(HAVE_BOOST)
ENDIF(Boost_FOUND)

# Check if boost_program_options library is available
#FIND_LIBRARY(HAVE_BOOST_PROGRAM_OPTIONS boost_program_options ${Boost_LIBRARY_DIRS})

#IF(WIN32)
#	IF(${Boost_LIBRARY_DIRS})
#		FILE(GLOB possible_po_libs ${Boost_LIBRARY_DIRS} "boost_program_options-vc[0-9][0-9]-mt-*.dll")
#		LIST(LENGTH ${possible_po_libs} possible_po_libs_length)
#		MATH(EXPR possible_po_libs_length "${possible_po_libs_length} - 1")
#		LIST(GET ${possible_po_libs} ${possible_po_libs_length} ${BOOST_PROGRAM_OPTIONS_LIB})
#	ENDIF(${Boost_LIBRARY_DIRS})
#ELSEIF(LINUX)
#	SET(BOOST_PROGRAM_OPTIONS_LIB boost_program_options)
#ENDIF(WIN32)

# Check for some existing symbols
CHECK_SYMBOL_EXISTS(floor		math.h		HAVE_FLOOR)
CHECK_SYMBOL_EXISTS(pow			math.h		HAVE_POW)
CHECK_SYMBOL_EXISTS(sqrt		math.h		HAVE_SQRT)
CHECK_SYMBOL_EXISTS(memset		string.h	HAVE_MEMSET)
CHECK_SYMBOL_EXISTS(realloc		stdlib.h	HAVE_REALLOC)

# This sets up the config.h file similar to the autoconf config.h file
CONFIGURE_FILE(${Profdist_SOURCE_DIR}/config.h.in ${Profdist_BINARY_DIR}/config.h)
CONFIGURE_FILE(${Profdist_SOURCE_DIR}/profdist.desktop.in ${Profdist_BINARY_DIR}/profdist.desktop)
INCLUDE_DIRECTORIES(${Profdist_BINARY_DIR})

# Set optimization flag
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -g")

# Set optimization flag
ADD_DEFINITIONS(-O2)

# Set debug options flag
ADD_DEFINITIONS(-g)

# Enable debug mode
IF(PROFDIST_DEBUG_OUTPUT)
	ADD_DEFINITIONS(-DDEBUG_GUI)
ENDIF(PROFDIST_DEBUG_OUTPUT)

# On windows disable the console in non debug realease
IF(NOT PROFDIST_DEBUG_OUTPUT)
	IF(WIN32)
		SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
		SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-subsystem,windows")
		SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-subsystem,windows")
	ENDIF(WIN32)
ENDIF(NOT PROFDIST_DEBUG_OUTPUT)

# Adding subdirectories to perform building
ADD_SUBDIRECTORY(src)

# Install instructions
INSTALL(
	DIRECTORY "${Profdist_SOURCE_DIR}/data"
	DESTINATION "${PROFDIST_DATA_DIR}"
	FILE_PERMISSIONS
		OWNER_WRITE
		OWNER_READ
		OWNER_EXECUTE
		GROUP_WRITE
		GROUP_READ
		GROUP_EXECUTE
		WORLD_READ
	DIRECTORY_PERMISSIONS
		OWNER_WRITE
		OWNER_READ
		OWNER_EXECUTE
		GROUP_WRITE
		GROUP_READ
		GROUP_EXECUTE
		WORLD_READ
		WORLD_EXECUTE
)

IF(UNIX)
	INSTALL(
		FILES "${Profdist_SOURCE_DIR}/src/gui/images/profdist.svg"
		DESTINATION share/icons/profdist
		PERMISSIONS WORLD_READ
	)
	INSTALL(
		FILES "${Profdist_BINARY_DIR}/profdist.desktop"
		DESTINATION /usr/share/applications
		PERMISSIONS WORLD_READ
	)
	INSTALL(
		DIRECTORY "${Profdist_SOURCE_DIR}/src/gui/plugins"
		DESTINATION "${PROFDIST_PLUGINS_DIR}"
		FILE_PERMISSIONS WORLD_READ
		DIRECTORY_PERMISSIONS WORLD_READ
		PATTERN "${Profdist_SOURCE_DIR}/src/gui/plugins/*.so"
	)
ENDIF(UNIX)
