cmake_minimum_required(VERSION 3.1)

project(Csuper C CXX)

include(CMakeToolsHelpers OPTIONAL)

#
# Add Cmake dependencies
#
set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake")

#
# Portable
#

IF(PORTABLE MATCHES "TRUE")
	add_definitions(-DPORTABLE)
ENDIF()

#
# Delete depreciated warning on GCC because of Libxml++
#
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT(LIBXMLPP MATCHES "3.0" OR WIN32))
    if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0)
    	set(CMAKE_CXX_FLAGS "-Wno-deprecated-declarations")
    endif()
endif()

#
# Glibmm, Giomm, LibXML++, Cairo, muparser, podofo
#
find_package(
	muparser
	REQUIRED
)

find_package(
	podofo
	REQUIRED
)

find_package(
	PkgConfig
	REQUIRED
)

IF(UNIX)
	pkg_check_modules(
		NCURSES
		REQUIRED ncurses
	)
ENDIF()

pkg_check_modules(
	GLIBMM
	REQUIRED glibmm-2.4
)

pkg_check_modules(
	GIOMM
	REQUIRED  giomm-2.4
)

pkg_check_modules(
	GLIB
	REQUIRED  glib-2.0
)

pkg_check_modules(
	GOBJECT
	REQUIRED  gobject-2.0
)

IF(LIBXMLPP MATCHES "3.0" OR WIN32)
pkg_check_modules(
	XMLPP
	REQUIRED libxml++-3.0
)
ELSE()
pkg_check_modules(
	XMLPP
	REQUIRED libxml++-2.6
)
ENDIF() # LIB

pkg_check_modules(
	CAIRO
	REQUIRED cairo
)

include_directories(
	${XMLPP_INCLUDE_DIRS}
	${GIOMM_INCLUDE_DIRS}
	${GLIBMM_INCLUDE_DIRS}
	${CAIRO_INCLUDE_DIRS}
	"Externals_libraries/AsynchronousExecution/include"
	"Externals_libraries/Slope/src"
	${PODOFO_INCLUDES}
	${MUPARSER_INCLUDE_DIRS}
	Sources
)

link_directories(
	${XMLPP_LIBRARY_DIRS}
	${GLIBMM_LIBRARY_DIRS}
	${GIOMM_LIBRARY_DIRS}
	${CAIRO_LIBRARY_DIRS}
	${PROJECT_BINARY_DIR}
)


add_custom_target(all_updates
	COMMAND bash  ${CMAKE_CURRENT_SOURCE_DIR}/utility.sh -a ${CMAKE_CURRENT_SOURCE_DIR}
)

add_subdirectory("Externals_libraries/AsynchronousExecution")

#
# Slope
#

IF(NOT (LIB MATCHES "FALSE"))
	set(SLOPE_HAVE_GTK 0)
	add_subdirectory("Externals_libraries/Slope/src")
ENDIF() # LIB


#
# libcsuper
#

IF(NOT (LIB MATCHES "FALSE"))
	file(
		    GLOB
		    source_files_libcsuper
		    Sources/libcsuper/*.cpp
	)

	file(
		    GLOB
		    headers_files_libcsuper
		    Sources/libcsuper/*.h
	)

	add_library(
		csuper
		SHARED
		${source_files_libcsuper}
		${headers_files_libcsuper}
	)


	target_link_libraries(
		csuper
		${GLIBMM_LIBRARIES}
		${GIOMM_LIBRARIES}
		${XMLPP_LIBRARIES}
		${CAIRO_LIBRARIES}
		${MUPARSER_LIBRARIES}
		${PODOFO_LIBRARIES}
		slope
		asynchronous_execution
	)

	target_compile_features(
		csuper
		PRIVATE cxx_range_for cxx_generic_lambdas
	)

	IF(NOT (ALL_UPDATES MATCHES "FALSE"))
		add_dependencies(csuper all_updates)
	ENDIF() #ALL_UPDATES

	install (TARGETS csuper RUNTIME DESTINATION bin LIBRARY DESTINATION lib)
	install (FILES ${headers_files_libcsuper} DESTINATION include/libcsuper)
	install (FILES Locales/fr_FR/LC_MESSAGES/libcsuper.mo DESTINATION share/csuper/Locales/fr_FR/LC_MESSAGES)
	install (DIRECTORY Images DESTINATION share/csuper)
	install (FILES Installation/Mime/csuper.xml DESTINATION share/mime/packages)
	install (FILES Installation/Mime/application-csu.png DESTINATION share/icons/hicolor/48x48/mimetypes)
ENDIF() # LIB

#
# csuper-cli
#

IF(NOT (CLI MATCHES "FALSE"))

	file(
		    GLOB
		    source_files_csuper-cli
		    Sources/csuper-cli/*.cpp
	)

	file(
		    GLOB
		    headers_files_csuper-cli
		    Sources/csuper-cli/*.h
	)

	IF(UNIX)
		add_executable(
			csuper-cli
			${source_files_csuper-cli}
			${headers_files_csuper-cli}
		)
	ELSE()
		add_executable(
				csuper-cli
				${source_files_csuper-cli}
				Sources/csuper-cli/ressources_windows.rc
			)
	ENDIF() #Unix
	
	target_link_libraries(
		csuper-cli
		csuper
		${GLIBMM_LIBRARIES}
		${GIOMM_LIBRARIES}
		${XMLPP_LIBRARIES}
		${MUPARSER_LIBRARIES}
		${PODOFO_LIBRARIES}
	)

	IF(UNIX)
		target_link_libraries(
			csuper-cli
			${NCURSES_LIBRARIES}
		)
	ENDIF() # UNIX

	target_compile_features(
		csuper-cli
		PRIVATE cxx_range_for cxx_generic_lambdas
	)

	IF(NOT (ALL_UPDATES MATCHES "FALSE"))
		add_dependencies(csuper all_updates)
	ENDIF() #ALL_UPDATES

	install (TARGETS csuper-cli DESTINATION share/csuper)
	install (FILES Locales/fr_FR/LC_MESSAGES/csuper-cli.mo DESTINATION share/csuper/Locales/fr_FR/LC_MESSAGES)
	install (FILES Installation/csuper-cli DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
	install (FILES Man/csuper-cli.1.gz DESTINATION share/man/man1)
ENDIF() # CLI


#
# csuper-gtk
#

IF(NOT (GTK MATCHES "FALSE"))

	pkg_check_modules(
		GTKMM
		REQUIRED gtkmm-3.0>=3.10
	)

	include_directories(
		${GTKMM_INCLUDE_DIRS}
	)

	link_directories(
		${GTKMM_LIBRARY_DIRS}
	)

	file(
	    GLOB
	    headers_files_csuper-gtk
	    Sources/csuper-gtk/*.h
	)

	file(
	    GLOB
	    source_files_csuper-gtk
	    Sources/csuper-gtk/*.cpp
	)

	IF(UNIX)
		add_executable(
			csuper-gtk
			${source_files_csuper-gtk}
			${headers_files_csuper-gtk}
		)
	ELSE()
			add_executable(
			csuper-gtk
			WIN32
			${source_files_csuper-gtk}
			${headers_files_csuper-gtk}
			Sources/csuper-gtk/ressources_windows.rc
		)
	ENDIF() #UNIX

	target_link_libraries(
		csuper-gtk
		csuper
		${GLIBMM_LIBRARIES}
		${XMLPP_LIBRARIES}
		${GTKMM_LIBRARIES}
		${MUPARSER_LIBRARIES}
		${PODOFO_LIBRARIES}
	)

	target_compile_features(
		csuper-gtk
		PRIVATE cxx_range_for cxx_generic_lambdas
	)

	IF(NOT (ALL_UPDATES MATCHES "FALSE"))
		add_dependencies(csuper all_updates)
	ENDIF() #ALL_UPDATES

	install (TARGETS csuper-gtk DESTINATION share/csuper)
	install (FILES Locales/fr_FR/LC_MESSAGES/csuper-gtk.mo DESTINATION share/csuper/Locales/fr_FR/LC_MESSAGES)
	install (FILES Installation/csuper-gtk DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
	install (FILES Installation/csuper-html DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
	install (FILES Installation/csuper-html-autostart DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
	install (FILES Man/csuper-gtk.1.gz DESTINATION share/man/man1)
	install (FILES Man/csuper-html.1.gz DESTINATION share/man/man1)
	install (DIRECTORY UI DESTINATION share/csuper)
	install (FILES Installation/fr.dalan.csuper-gtk.desktop DESTINATION share/applications)
	install (FILES Installation/fr.dalan.csuper-html.desktop DESTINATION share/applications)
	install (FILES Installation/csuper.service DESTINATION etc/systemd/system)
ENDIF() # GTK
