CMAKE_MINIMUM_REQUIRED (VERSION 2.6 FATAL_ERROR)
IF (COMMAND cmake_policy)
	cmake_policy (SET CMP0003 NEW)
ENDIF (COMMAND cmake_policy)
PROJECT( qutim )
SET(QT_MIN_VERSION "4.6.0")

ADD_DEFINITIONS ( -DLIBQUTIM_LIBRARY )

if( UNIX )
	if( BSD )
		SET( CMAKE_THREAD_LIBS -pthread )
		SET( CMAKE_USE_PTHREADS ON )
		SET( CMAKE_EXE_LINKER_FLAGS -pthread )
	endif( BSD )
endif( UNIX )

SET (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
SET (CMAKE_BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
SET (QT_USE_QTNETWORK true)
SET (QT_USE_QTXML true)
SET (QT_USE_QTSCRIPT true)

SET (QUTIM_PLUGINS_DEST "lib/qutim/")
FIND_PACKAGE (Qt4 REQUIRED)

INCLUDE(CPackOptions.cmake.in)
INCLUDE(UseQt4)
INCLUDE(MacroEnsureVersion)
INCLUDE(QutIMMacros)

#simple hack for include dirs
macro(LIST_SUBDIRECTORIES retval curdir)
	file(GLOB sub-dir RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${curdir}/*)
	set(list_of_dirs "")
	foreach(dir ${sub-dir})
		#TODO fix IS DIRECTORY macro
		if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${dir})
			message(STATUS "Found 3rdparty dir: ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${dir}")
		endif()
	endforeach()
	set(${retval} ${sub-dir})
endmacro()

LIST_SUBDIRECTORIES(3RDPARTY_INCLUDE_DIRS "3rdparty")

#Include X11, spike for freebsd
FIND_PACKAGE(X11)

INCLUDE_DIRECTORIES (${QT_QTGUI_INCLUDE_DIR}
	${QT_QTCORE_INCLUDE_DIR}
	${QT_QTXML_INCLUDE_DIR}
	${CMAKE_CURRENT_BINARY_DIR}
	${3RDPARTY_INCLUDE_DIRS}
	${X11_INCLUDE_DIR}
	.
		src
		include
	)

if( WIN32 )
	list(APPEND QUTIM_LIBS secur32 )
endif( WIN32 )

file( GLOB HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h" )
file( GLOB SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp" )
file( GLOB SOURCES_MM RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.mm" )
list( APPEND SOURCE SOURCE_MM} )
file( GLOB FORMS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.ui" )
list( APPEND SOURCES "main.cpp" )

SET (RESOURCES
	qutim.qrc
	)

#TODO fix in future
if (MINGW)
	find_program( MINGW_WINDRES NAMES "mingw32-windres" "windres" )
	execute_process( COMMAND "${MINGW_WINDRES}"
		"-i" "${CMAKE_CURRENT_SOURCE_DIR}/qutim.rc" "-o" "${CMAKE_CURRENT_BINARY_DIR}/qutim_res.o" )
	LIST (APPEND SOURCES qutim_res.o)
else(MINGW)
	LIST (APPEND SOURCES qutim.rc)
endif(MINGW)

add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/libqutim/" "${CMAKE_CURRENT_BINARY_DIR}/libqutim")

find_package( QutIM REQUIRED )
include_directories( ${QUTIM_INCLUDE_DIR} )

REMOVE_DEFINITIONS ( -DLIBQUTIM_LIBRARY )

set( QUTIM_PATH ${CMAKE_CURRENT_SOURCE_DIR} CACHE FILEPATH "Path to qutim sources")
set( QUTIM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE FILEPATH "Path to qutim build directory")
option( QUTIM_COPY_PLUGINS_TO_BINARY_DIR "Copy plugins to qutim build directory" OFF )
set( QUTIM_LIBRARIES libqutim )

QT4_WRAP_CPP (MOC_SRCS ${HEADERS})
QT4_WRAP_UI (UIS_H ${FORMS})
QT4_ADD_RESOURCES (RCC ${RESOURCES})

# For Apple set the icns file containing icons
IF(APPLE)
  # set how it shows up in the Info.plist file
  SET(MACOSX_BUNDLE_ICON_FILE qutim.icns)
  # set where in the bundle to put the icns file
  SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/qutim.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  # include the icns file in the target
  SET(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/qutim.icns)
ENDIF(APPLE)

set( QUTIM_ADDITIONAL_SOURCES "" CACHE INTERNAL "" FORCE )
set( QUTIM_ADDITIONAL_LIBRARIES "" CACHE INTERNAL "" FORCE )
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/corelayers/" "${CMAKE_CURRENT_BINARY_DIR}/src/corelayers")
foreach( additional_path ${QUTIM_ADDITIONAL_PATHS} )
    add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/../${additional_path}/" "${CMAKE_CURRENT_BINARY_DIR}/../${additional_path}" )
endforeach( additional_path ${QUTIM_ADDITIONAL_PATHS} )

#QUTIM_ADD_OPTION(QUTIM_MOBILE_UI
#	"User interface for mobile devices like Nokia 5800"
#	"qutIM will be compiled with mobile ui"
#	OFF
#)

QUTIM_ADD_OPTION(QUTIM_SINGLE_PROFILE
	"Single profil by default" 
	"qutIM will be compiled without multiply profiles by default"
	ON
)
SET( QUTIM_GUI_TYPE "" CACHE STRING "qutIM GUI TYPE" )
IF( QUTIM_GUI_TYPE )
	MESSAGE(STATUS "qutIM will be compiled with ${QUTIM_GUI_TYPE} GUI type")
ENDIF()

ADD_EXECUTABLE (qutim
	${QUTIM_GUI_TYPE}
	${SOURCES}
	${HEADERS}
	${MOC_SRCS}
	${UIS_H}
	${RCC}
	${QUTIM_ADDITIONAL_SOURCES}
	)

if(MSVC)
	set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} /W3")
	set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} /W3")
else()
	set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} -Wall -Wextra")
	set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} -Wall -Wextra")
	if(NOT WIN32)
		set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} -fvisibility=hidden")
	endif(NOT WIN32)
endif()

set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} -DQUTIM_CORE -DXDG_STATIC")
set_target_properties(qutim PROPERTIES COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS}")
set_target_properties(libqutim PROPERTIES COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS}")

qutim_target_link_libraries (qutim
	${QT_LIBRARIES}
	${QT_QTMAIN_LIBRARY}
	${QUTIM_LIBS}
	${QUTIM_ADDITIONAL_LIBRARIES}
	libqutim
	)

if( LANGUAGE )
	LANGUAGE_UPDATE( core ${LANGUAGE} "${CMAKE_CURRENT_SOURCE_DIR}" )
endif( LANGUAGE )

FILE(GLOB CMAKE_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.cmake")

FILE (GLOB DEV_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/libqutim/*.h")
FILE (GLOB DEV_HEADERS_EXCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/libqutim/*_p.h")
LIST(REMOVE_ITEM DEV_HEADERS ${DEV_HEADERS_EXCLUDE})

INSTALL(FILES ${CMAKE_MODULES}
	DESTINATION share/cmake/Modules
		COMPONENT CoreDevel
)
INSTALL(TARGETS qutim
	RUNTIME DESTINATION bin
		COMPONENT Core
	BUNDLE DESTINATION .
		COMPONENT Core
)

QUTIM_ADD_ARTWORK_DIR(share/qutim)

IF(NOT WIN32)
	INSTALL(DIRECTORY share/applications share/icons share/pixmaps
		DESTINATION /usr/share
			COMPONENT Core
	)
ENDIF()

CPACK_ADD_COMPONENT(Core
	DISPLAY_NAME "Core"
	DESCRIPTION "TODO"
)
CPACK_ADD_COMPONENT(CoreDevel
	DISPLAY_NAME "Core Devel"
	DESCRIPTION "Common devel files"
)

#additional artwork sources
SET(QUTIM_ADDITIONAL_ART_PATH "" CACHE PATH "Path to additional artwork")
IF(NOT QUTIM_ADDITIONAL_ART_PATH STREQUAL "")
	QUTIM_ADD_ARTWORK_DIR(${QUTIM_ADDITIONAL_ART_PATH})
ENDIF()

CPACK_ADD_COMPONENT(Core
	DISPLAY_NAME "Core"
	DESCRIPTION "TODO"
)
CPACK_ADD_COMPONENT(CoreDevel
	DISPLAY_NAME "Core Devel"
	DESCRIPTION "Common devel files"
)

#small simple hack for install Qt dlls and plugins
IF(WIN32)
	SET(QUTIM_REQUIRED_DLL_DIR "" CACHE PATH "Path to Qt dll's and plugins. Note: you must add them yourself")
	FILE(GLOB dlls ${QUTIM_REQUIRED_DLL_DIR}/*)
	FOREACH(QUTIM_DLL ${dlls})
		IF(IS_DIRECTORY ${QUTIM_DLL})
			INSTALL(DIRECTORY ${QUTIM_DLL}
				DESTINATION bin
					COMPONENT Qt
			)
		ELSEIF(${QUTIM_DLL} MATCHES ".\\.dll")
			INSTALL(FILES ${QUTIM_DLL}
				DESTINATION bin
					COMPONENT Qt
			)
		ENDIF()
	ENDFOREACH()
	LIST(APPEND CPACK_COMPONENTS_ALL Qt)
	CPACK_ADD_COMPONENT(Qt
		DISPLAY_NAME "Qt Libraries"
		DESCRIPTION ""
	)
ENDIF(WIN32)
