cmake_minimum_required( VERSION 3.3 )

project( cprime )

set( PROJECT_VERSION 5.0.0 )
set( PROJECT_VERSION_MAJOR 5 )
set( PROJECT_VERSION_MINOR 0 )
set( PROJECT_VERSION_PATCH 0 )

set( PROJECT_VERSION_MAJOR_MINOR ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} )
add_compile_definitions(PROJECT_VERSION="${PROJECT_VERSION}")

set( CMAKE_CXX_STANDARD 17 )
set( CMAKE_INCLUDE_CURRENT_DIR ON )
set( CMAKE_BUILD_TYPE Release )

set( CMAKE_AUTOMOC ON )
set( CMAKE_AUTOUIC ON )
set( CMAKE_AUTORCC ON )

add_definitions ( -Wall )
if ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
    set( CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Location for installing the project" FORCE )
endif()

find_package ( Qt6Widgets REQUIRED )
find_package ( Qt6Core REQUIRED )
find_package ( Qt6Gui REQUIRED )
find_package ( Qt6Network REQUIRED )
find_package ( Qt6DBus REQUIRED )

include_directories(
    cprime
)

###### CPrime Core

set ( cprime-core_HDRS
    cprime/activitesmanage.h
	cprime/ccoreapplication.h
    cprime/cenums.h
    cprime/desktopfile.h
    cprime/filefunc.h
    cprime/sortfunc.h
    cprime/systemxdg.h
	cprime/messageengine.h
	cprime/variables.h
)

set ( cprime-core_SRCS
	cprime/activitesmanage.cpp
	cprime/capplicationimpl.cpp
	cprime/ccoreapplication.cpp
	cprime/desktopfile.cpp
	cprime/filefunc.cpp
	cprime/sortfunc.cpp
	cprime/systemxdg.cpp
	cprime/messageengine.cpp
	cprime/variables.cpp
)

add_library ( cprime-core-qt6 SHARED ${cprime-core_SRCS} ${cprime-core_HDRS} )
set_target_properties( cprime-core-qt6 PROPERTIES VERSION ${PROJECT_VERSION} )
set_target_properties( cprime-core-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION} )
set_target_properties( cprime-core-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR_MINOR} )
set_target_properties( cprime-core-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} )
target_link_libraries ( cprime-core-qt6  Qt6::Core Qt6::Network Qt6::DBus )

###### CPrime Gui

set ( cprime-gui_SRCS
	cprime/cguiapplication.cpp
)

set ( cprime-gui_MOCS
	cprime/cguiapplication.h
)

add_library ( cprime-gui-qt6 SHARED ${cprime-gui_SRCS} ${cprime-gui_MOCS} )
set_target_properties( cprime-gui-qt6 PROPERTIES VERSION ${PROJECT_VERSION} )
set_target_properties( cprime-gui-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION} )
set_target_properties( cprime-gui-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR_MINOR} )
set_target_properties( cprime-gui-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} )
target_link_libraries ( cprime-gui-qt6  Qt6::Core Qt6::Gui cprime-core-qt6 )

###### CPrime Widgets

set ( cprime-widgets_HDRS
	cprime/appopenfunc.h
	cprime/cprime.h
	cprime/pinmanage.h
	cprime/themefunc.h
	cprime/trashmanager.h
    cprime/capplication.h
	cprime/applicationdialog.h
	cprime/cplugininterface.h
	cprime/ioprocesses.h
	cprime/pinit.h
	cprime/shareit.h
)

set ( cprime-widgets_SRCS
	cprime/capplication.cpp
	cprime/applicationdialog.cpp
	cprime/appopenfunc.cpp
	cprime/ioprocesses.cpp
	cprime/pinit.cpp
	cprime/pinmanage.cpp
	cprime/shareit.cpp
	cprime/themefunc.cpp
	cprime/trashmanager.cpp
	cprime/cplugininterface.cpp
)

set ( cprime-widgets_UIS
	cprime/pinit.ui
	cprime/shareit.ui
)

add_library ( cprime-widgets-qt6 SHARED ${cprime-widgets_SRCS} ${cprime-widgets_UIS} ${cprime-widgets_HDRS} )
set_target_properties( cprime-widgets-qt6 PROPERTIES VERSION ${PROJECT_VERSION} )
set_target_properties( cprime-widgets-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION} )
set_target_properties( cprime-widgets-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR_MINOR} )
set_target_properties( cprime-widgets-qt6 PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} )
target_link_libraries ( cprime-widgets-qt6  Qt6::Core Qt6::Gui Qt6::Widgets cprime-core-qt6 )

set( CPRIME_HEADERS
	cprime/activitesmanage.h
	cprime/capplication.h
	cprime/ccoreapplication.h
	cprime/cguiapplication.h
	cprime/applicationdialog.h
	cprime/appopenfunc.h
	cprime/cenums.h
	cprime/cplugininterface.h
	cprime/cprime.h
	cprime/desktopfile.h
	cprime/filefunc.h
	cprime/ioprocesses.h
	cprime/messageengine.h
	cprime/pinit.h
	cprime/pinmanage.h
	cprime/shareit.h
	cprime/sortfunc.h
	cprime/systemxdg.h
	cprime/themefunc.h
	cprime/trashmanager.h
	cprime/variables.h
	cprime/libcprime_global.h
)

configure_file( pkgconfig/cprime-core.pc.in cprime-core-qt6.pc @ONLY )
configure_file( pkgconfig/cprime-gui.pc.in cprime-gui-qt6.pc @ONLY )
configure_file( pkgconfig/cprime-widgets.pc.in cprime-widgets-qt6.pc @ONLY )

install( TARGETS cprime-core-qt6 cprime-gui-qt6 cprime-widgets-qt6 EXPORT LIBRARY )
install( FILES ${CPRIME_HEADERS} DESTINATION include/cprime/ )

install(
	FILES
		${CMAKE_CURRENT_BINARY_DIR}/cprime-core-qt6.pc
		${CMAKE_CURRENT_BINARY_DIR}/cprime-gui-qt6.pc
		${CMAKE_CURRENT_BINARY_DIR}/cprime-widgets-qt6.pc
	DESTINATION
		share/pkgconfig
)