summaryrefslogblamecommitdiffstats
path: root/CMakeLists.txt
blob: 8bbbb20d5b32d20a203e25e307d587a21bd5b1ac (plain) (tree)
1
2
3


                                                                                












                                                                                                                       

             
 

                                                                                 
                                                  

                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                  
                            
                          
                                                               
                                                                                                                            
 



                     



                                                              
                                                                                 
                          

                          
                                 
 
               




                                   
 






                                             







                                                                                          
                        








                                                                                
                                      






                          
                                      








                                                                                

                            
 
 

                               
 

            



                                                                                                        
                        


                                                 

                           

                                                    
 
 








                        
              
                                                                                                     
                 
 
                 
                                                                                                                 
                    
 



                                                     



                                                                                
                     
                  
                 

                     



                        
                    

                        



                            



                      

                           


                               

                    
                    
                    





                                                                                   
################################################################################
# General
################################################################################
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)

set(pvs2_BUILD_TYPES Release Debug)
get_property(multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(multi_config)
	set(CMAKE_CONFIGURATION_TYPES "${pvs2_BUILD_TYPES}" CACHE STRING "list of supported configuration types" FORCE)
else()
	set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type of the project.")
	set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${pvs2_BUILD_TYPES}")
	if(NOT CMAKE_BUILD_TYPE IN_LIST pvs2_BUILD_TYPES)
		message(FATAL_ERROR "Invalid build type '${CMAKE_BUILD_TYPE}'. Possible values:\n ${pvs2_BUILD_TYPES}")
	endif()
endif()

PROJECT(pvs2)

SET(EXTRA_C_FLAGS "" CACHE STRING "Additional options to pass to C compiler")
SET(EXTRA_CXX_FLAGS "" CACHE STRING "Additional options to pass to C++ compiler")
# set compiler optimizations for debug and release
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall -Wunused -Wunreachable-code -pedantic")
SET(CMAKE_C_FLAGS_RELEASE "-O2")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -Wextra -Wpedantic -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wconversion -Wdisabled-optimization -Wfloat-equal -Wformat -Wformat=2 -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winline -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wsign-compare -Wstack-protector -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
# -Wshadow spams too much :/
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${EXTRA_C_FLAGS}")
SET( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-multichar -Wno-error=deprecated-declarations ${EXTRA_CXX_FLAGS}" )

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

# local cmake modules
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

# this command finds libraries and sets all required variables
FIND_PACKAGE(Qt5 COMPONENTS Widgets Network X11Extras LinguistTools Svg REQUIRED)
FIND_PACKAGE(X11 REQUIRED)
FIND_PACKAGE(VNC REQUIRED)

SET(CMAKE_INCLUDE_CURRENT_DIR ON)

# some includes
#INCLUDE_DIRECTORIES(
#	${CMAKE_CURRENT_SOURCE_DIR}
#	${CMAKE_CURRENT_BINARY_DIR}
#	${X11_INCLUDE_DIR}
#)

IF(X11_Xscreensaver_FOUND)
    ADD_DEFINITIONS(-DX11_Xscreensaver_FOUND)
ENDIF()
IF(X11_dpms_FOUND)
    ADD_DEFINITIONS(-DX11_dpms_FOUND)
ENDIF()

#IF(NOT X11_XTest_FOUND)
#    MESSAGE(FATAL_ERROR "Could not find X11 extension XTest or its developer files.")
#ENDIF()
#IF(NOT X11_Xinput_FOUND)
#	MESSAGE(FATAL_ERROR "Could not find X11 extension Xinput or its developer files.")
#ENDIF()

# TODO: Detect this somehow
#SET(SYSDEP_SUFFIX _X11)

################################################################################
# Variables
################################################################################

# pvsmgr
FILE(GLOB PVSMGR_SRCS
	src/server/*.cpp
	src/server/*/*.cpp
	src/server/util/platform/*.cpp
	src/shared/*.cpp
)

# pvsclient
FILE(GLOB PVSCLIENT_SRCS
	src/client/*.cpp
	src/client/*/*.cpp
	src/client/util/platform/*.cpp
	src/shared/*.cpp
)


################################################################################
# Qt
################################################################################

# .ui files
FILE(GLOB_RECURSE PVSMGR_UIS
	src/server/*.ui
)

FILE(GLOB_RECURSE PVSCLIENT_UIS
	src/client/*.ui
)

# .qrc files
# Copy these to build dir since the paths inside are relative, and this is where the translations end up
configure_file(res/pvsmgr_ts.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file(res/pvsclient_ts.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)

FILE(GLOB PVSMGR_RC_SRCS
	res/pvsmgr.qrc
	${CMAKE_CURRENT_BINARY_DIR}/pvsmgr_ts.qrc

)
FILE(GLOB PVSCLIENT_RC_SRCS
	res/pvsclient.qrc
	${CMAKE_CURRENT_BINARY_DIR}/pvsclient_ts.qrc
)

# i18n
FILE(GLOB PVSMGR_TSS
	i18n/server/*.ts
)

FILE(GLOB PVSCLIENT_TSS
	i18n/client/*.ts
)

if(PVSMGR_TSS)
    QT5_CREATE_TRANSLATION(PVSMGR_QMS ${PVSMGR_UIS} ${PVSMGR_SRCS} ${PVSMGR_TSS} OPTIONS -noobsolete)
endif(PVSMGR_TSS)

if(PVSCLIENT_TSS)
    QT5_CREATE_TRANSLATION(PVSCLIENT_QMS ${PVSCLIENT_UIS} ${PVSCLIENT_SRCS} ${PVSCLIENT_TSS} OPTIONS -noobsolete)
endif(PVSCLIENT_TSS)

# this will run rcc on .qrc files
QT5_ADD_RESOURCES(PVSMGR_RCS ${PVSMGR_RC_SRCS})
QT5_ADD_RESOURCES(PVSCLIENT_RCS ${PVSCLIENT_RC_SRCS})

################################################################################
# Build
################################################################################

ADD_EXECUTABLE(pvsmgr
    ${PVSMGR_SRCS}
    ${PVSMGR_RCS}
    ${PVSMGR_RC_SRCS}
    ${PVSMGR_QMS}
)

ADD_EXECUTABLE(pvsclient
    ${PVSCLIENT_SRCS}
    ${PVSCLIENT_RCS}
    ${PVSCLIENT_RC_SRCS}
    ${PVSCLIENT_QMS}
)

# link
TARGET_LINK_LIBRARIES(pvsmgr
	Qt5::Network
	Qt5::Widgets
	Qt5::Svg
	Qt5::X11Extras
    ${X11_LIBRARIES}
    ${X11_Xscreensaver_LIB}
)

TARGET_LINK_LIBRARIES(pvsclient
	Qt5::Network
	Qt5::Widgets
    ${VNC_LIBRARIES}
    ${X11_LIBRARIES}
)

SET_PROPERTY(TARGET pvsmgr PROPERTY COMPILE_DEFINITIONS MAINWINDOW_USE_NORMALGUI)  

# install
INSTALL(TARGETS pvsmgr pvsclient RUNTIME DESTINATION bin)