summaryrefslogblamecommitdiffstats
path: root/CMakeLists.txt
blob: c31d40629d8337df60afa3e66f2711b13bbac704 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                                                

                                     


                                                  
                                                                   
                                
                                         
                                   

                     
                                                
 
                                                              


                                




                       

                             
                              

 
                       



                                                                                          



                           
                       

                                                                                


                                                                                
                                              


                                                                                




                                                                                



                                                                                

               




















                                     





                                     


                                    
                                     


     
            







                                        
                                               




                                     
                                            
                                            


        
               
                                   









                                       
                                            






                                                                                

              


                               
                                      



                                      
                                      

                                 
                                       

 
                   


                                 
                                      


                                  
                                       

 
              









                                         



                          
 

                                                           







                              
                                  









                                  
                                  

                             
                                   

 
                




                                      
                                          
                                          

 
                   
                                   








                                     
                                          

 

              






                        
           






                     
              







                        


                          
                         



                                                                         
                       
 



                                               
 



                                                   
 



                                                

                  
                                                          

                  

                                                                                        

                                 


                                                                                  




                                                                                
                      






                      
                          






                          
                  





                   
                     






                      

















                                 

                    
                   








                            

                                                                                     





                                                                                            
                                                                                           


                                                                 
               

                                                       

                   
                            
                                                                             
 
 

                            

                               

                                      
                                      

                                                            
                                                                 
                                                                                                                                                            



                                                            
                
################################################################################
# General
################################################################################

PROJECT(pvs)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)

# set compiler optimizations for debug and release
SET(CMAKE_BUILD_TYPE Debug)
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall -Wunused -Wunreachable-code")
SET(CMAKE_C_FLAGS_RELEASE "-O2")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2" )

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

# this command finds libraries and sets all required variables
FIND_PACKAGE(Qt4 4.5.0 REQUIRED)
FIND_PACKAGE(X11 REQUIRED)
FIND_PACKAGE(VNC REQUIRED)

# some includes
INCLUDE_DIRECTORIES(
    ${CMAKE_SOURCE_DIR}
    ${CMAKE_BINARY_DIR}
    ${X11_INCLUDE_DIR}
    ${X11_XTest_INCLUDE_PATH}
    ${X11_Xinput_INCLUDE_PATH}
)

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()

ADD_SUBDIRECTORY(src/input)

SET(SYSDEP_SUFFIX _X11)

################################################################################
# Build third-party libraries
################################################################################

ADD_SUBDIRECTORY(3rdparty/qtsingleapplication)
ADD_SUBDIRECTORY(3rdparty)

################################################################################
# Common multicast transfer module
################################################################################

ADD_SUBDIRECTORY(src/net/mcast)

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

# pvsmgr
SET(PVSMGR_SRCS
    src/pvsmgr.cpp
    src/core/pvsClient.cpp
    src/core/pvsConnectionManager.cpp
    src/core/vncConnection.cpp
    src/core/pvsServer.cpp
    src/gui/mainWindow.cpp
    src/gui/connectionWindow.cpp
    src/gui/frame.cpp
    src/util/vncClientThread.cpp
    src/gui/connectionFrame.cpp
    src/gui/connectionList.cpp
    src/gui/profileDialog.cpp
    src/gui/dialog.cpp
    src/gui/serverChatDialog.cpp
    src/gui/projectionDialog.cpp
    src/gui/serverFileTransfert.cpp
    src/net/pvsMsg.cpp
    src/net/pvsListenServer.cpp
    src/net/pvsClientConnection.cpp
    src/net/pvsServiceBroadcast.cpp
    src/util/consoleLogger.cpp
    src/util/util.cpp
    src/net/SslServer.cpp
    src/util/CertManager.cpp
    src/util/TextFile.cpp
    src/util/serviceDiscoveryUtil.cpp
    src/gui/aboutDialog.cpp
    src/gui/processesDialog.cpp
    src/gui/processesStartDialog.cpp
    src/gui/processWidget.cpp
    src/gui/multicastConfigDialog.cpp
)

# pvs
SET(PVS_SRCS
    src/pvsDaemon.cpp
    src/pvs.cpp
    src/net/pvsMsg.cpp
    src/core/pvsChatMsg.cpp
    src/net/pvsServerConnection.cpp
    src/net/pvsLocalhostCommunicator.cpp
    src/util/util.cpp
    src/util/consoleLogger.cpp
    src/util/clientGUIUtils${SYSDEP_SUFFIX}.cpp
    src/core/pvsChatClient.cpp
    src/net/pvsServiceDiscovery.cpp
    src/net/pvsDiscoveredServer.cpp
    src/util/TextFile.cpp
    src/util/serviceDiscoveryUtil.cpp
    src/net/pvsOutgoingMulticastTransfer.cpp
    src/net/pvsIncomingMulticastTransfer.cpp
)

# pvsgui
SET(PVSGUI_SRCS
	${QTSINGLEAPPLICATION_SRCS}
    src/pvsgui.cpp
    src/gui/clientConfigDialog.cpp
    src/gui/clientFileSendDialog.cpp
    src/gui/clientFileReceiveDialog.cpp
    src/gui/clientChatDialog.cpp
    src/gui/clientVNCViewer.cpp
    src/gui/clientInfoDialog.cpp
    src/util/vncClientThread.cpp
    src/util/TextFile.cpp
    src/gui/aboutDialog.cpp
    src/net/pvsNetworkInterfaceListModel.cpp
)


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

# .ui files
SET(PVSMGR_UIS
    src/gui/ui/mainwindow.ui
    src/gui/ui/profileDialog.ui
    src/gui/ui/dialog.ui
    src/gui/ui/processesStartDialog.ui
    src/gui/ui/projectionDialog.ui
    src/gui/ui/aboutDialog.ui
    src/gui/ui/serverChatDialog.ui
    src/gui/ui/clientFileSendDialog.ui
    src/gui/ui/processesStartDialog.ui
    src/gui/ui/processesDialog.ui
    src/gui/ui/processWidget.ui
    src/gui/ui/multicastConfigDialog.ui
)

SET(PVSMGRTOUCH_UIS
    src/gui/ui/mainwindowtouch.ui
    src/gui/ui/profileDialog.ui
    src/gui/ui/dialog.ui
    src/gui/ui/processesStartDialog.ui
    src/gui/ui/projectionDialog.ui
    src/gui/ui/aboutDialog.ui
    src/gui/ui/serverChatDialog.ui
    src/gui/ui/multicastConfigDialog.ui
)

SET(PVSGUI_UIS
    src/gui/ui/clientConfigDialog.ui
    src/gui/ui/clientFileSendDialog.ui
    src/gui/ui/clientFileReceiveDialog.ui
    src/gui/ui/clientChatDialog.ui
    src/gui/ui/clientInfoDialog.ui
    src/gui/ui/aboutDialog.ui
    src/gui/ui/clientToolbar.ui
    src/gui/ui/clientNicklistDialog.ui
)

# .qrc files
SET(PVSMGR_RCS pvsmgr.qrc)
SET(PVS_RCS pvs.qrc)
SET(PVSGUI_RCS pvsgui.qrc)

# includes all header files that should be treated with moc
SET(PVSMGR_MOC_HDRS
    src/gui/mainWindow.h
    src/gui/connectionWindow.h
    src/gui/frame.h
    src/util/vncClientThread.h
    src/gui/connectionList.h
    src/gui/connectionFrame.h
    src/gui/profileDialog.h
    src/gui/dialog.h
    src/gui/processesStartDialog.h
    src/gui/projectionDialog.h    
    src/gui/serverChatDialog.h
    src/gui/serverFileTransfert.h
    src/net/pvsClientConnection.h
    src/net/pvsListenServer.h
    src/core/pvsClient.h
    src/core/vncConnection.h
    src/net/pvsServiceBroadcast.h
    src/net/SslServer.h
    src/gui/aboutDialog.h
    src/gui/processesStartDialog.h
    src/gui/processesDialog.h
    src/gui/processWidget.h
    src/gui/multicastConfigDialog.h
)

SET(PVS_MOC_HDRS
    src/pvs.h
    src/net/pvsLocalhostCommunicator.h
    src/net/pvsServerConnection.h
    src/net/pvsServiceDiscovery.h
    src/net/pvsDiscoveredServer.h
    src/net/pvsOutgoingMulticastTransfer.h
    src/net/pvsIncomingMulticastTransfer.h
)

SET(PVSGUI_MOC_HDRS
    ${QTSINGLEAPPLICATION_MOC_HDRS}
    src/pvsgui.h
    src/gui/clientConfigDialog.h
    src/gui/clientFileSendDialog.h
    src/gui/clientFileReceiveDialog.h
    src/gui/clientChatDialog.h
    src/gui/clientVNCViewer.h
    src/gui/clientInfoDialog.h
    src/util/vncClientThread.h
    src/gui/aboutDialog.h
    src/net/pvsNetworkInterfaceListModel.h
)

# i18n
SET(PVSMGR_TSS
    i18n/pvsmgr_de_DE.ts
    i18n/pvsmgr_fr_FR.ts
    i18n/pvsmgr_es_MX.ts
    i18n/pvsmgr_ar_JO.ts
    i18n/pvsmgr_pl_PL.ts
)

SET(PVS_TSS
    i18n/pvs_de_DE.ts
    i18n/pvs_fr_FR.ts
    i18n/pvs_es_MX.ts
    i18n/pvs_ar_JO.ts
    i18n/pvs_pl_PL.ts
)

SET(PVSGUI_TSS
    i18n/pvsgui_de_DE.ts
    i18n/pvsgui_fr_FR.ts
    i18n/pvsgui_es_MX.ts
    i18n/pvsgui_ar_JO.ts
    i18n/pvsgui_pl_PL.ts
)


# include Qt modules
SET(QT_USE_QTDBUS TRUE)
SET(QT_USE_QTNETWORK TRUE)
SET(QT_USE_QTWEBKIT TRUE)

# add some useful macros and variables
# (QT_USE_FILE is a variable defined by FIND_PACKAGE( Qt4 ) that contains
# a path to CMake script)
INCLUDE(${QT_USE_FILE})

# this will run rcc on .qrc files
QT4_ADD_RESOURCES(PVSMGR_RC_SRCS ${PVSMGR_RCS})
QT4_ADD_RESOURCES(PVS_RC_SRCS ${PVS_RCS})
QT4_ADD_RESOURCES(PVSGUI_RC_SRCS ${PVSGUI_RCS})

# this will run uic on .ui files
QT4_WRAP_UI(PVSMGR_UI_HDRS ${PVSMGR_UIS})
QT4_WRAP_UI(PVSMGRTOUCH_UI_HDRS ${PVSMGRTOUCH_UIS})
QT4_WRAP_UI(PVSGUI_UI_HDRS ${PVSGUI_UIS})

# this will run moc
QT4_WRAP_CPP(PVSMGR_MOC_SRCS ${PVSMGR_MOC_HDRS})
QT4_WRAP_CPP(PVS_MOC_SRCS ${PVS_MOC_HDRS})
QT4_WRAP_CPP(PVSGUI_MOC_SRCS ${PVSGUI_MOC_HDRS})

# run qdbuscpp2xml
QT4_GENERATE_DBUS_INTERFACE(src/pvs.h org.openslx.pvs.xml)

# run qdbusxml2cpp
QT4_ADD_DBUS_ADAPTOR(PVS_SRCS ${CMAKE_BINARY_DIR}/org.openslx.pvs.xml src/pvs.h PVS)
QT4_ADD_DBUS_INTERFACE(PVSGUI_SRCS ${CMAKE_BINARY_DIR}/org.openslx.pvs.xml pvsinterface)

# i18n, run lupdate and lrelease)
#QT4_CREATE_TRANSLATION(PVSMGR_QMS ${PVSMGR_SRCS} ${PVSMGR_UI_HDRS} ${PVSMGR_TSS})
#QT4_CREATE_TRANSLATION(PVS_QMS ${PVS_SRCS} ${PVS_TSS})
#QT4_CREATE_TRANSLATION(PVSGUI_QMS ${PVSGUI_SRCS} ${PVSGUI_UI_HDRS} ${PVSGUI_TSS})

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

ADD_EXECUTABLE(pvsmgr 
    ${PVSMGR_SRCS}
    ${PVSMGR_MOC_SRCS}
    ${PVSMGR_UI_HDRS}
    ${PVSMGR_RC_SRCS}
    ${PVSMGR_QMS}
)

ADD_EXECUTABLE(pvsmgrtouch
    ${PVSMGR_SRCS}
    ${PVSMGR_MOC_SRCS}
    ${PVSMGRTOUCH_UI_HDRS}
    ${PVSMGR_RC_SRCS}
    ${PVSMGR_QMS}
)

ADD_EXECUTABLE(pvs
    ${PVS_SRCS}
    ${PVS_MOC_SRCS}
    ${PVS_RC_SRCS}
    ${PVS_QMS}
)

ADD_EXECUTABLE(pvsgui
    ${PVSGUI_SRCS}
    ${PVSGUI_MOC_SRCS}
    ${PVSGUI_UI_HDRS}
    ${PVSGUI_RC_SRCS}
    ${PVSGUI_QMS}
)

# link
TARGET_LINK_LIBRARIES(pvsmgr
    ${QT_LIBRARIES}
    ${VNC_LIBRARIES}
    ${X11_LIBRARIES}
    pvsmcast
    pvsinput
)

TARGET_LINK_LIBRARIES(pvsmgrtouch
    ${QT_LIBRARIES}
    ${VNC_LIBRARIES}
    ${X11_LIBRARIES}
    pvsmcast
    pvsinput
)

TARGET_LINK_LIBRARIES(pvs
    ${VNC_LIBRARIES}
    ${X11_LIBRARIES}
    ${QT_LIBRARIES}
    pvsmcast
    pvsinput
)

TARGET_LINK_LIBRARIES(pvsgui
    ${QT_LIBRARIES}
    ${VNC_LIBRARIES}
)

SET_PROPERTY(TARGET pvsmgrtouch PROPERTY COMPILE_DEFINITIONS MAINWINDOW_USE_TOUCHGUI)
SET_PROPERTY(TARGET pvsmgr PROPERTY COMPILE_DEFINITIONS MAINWINDOW_USE_NORMALGUI)  

# install
CONFIGURE_FILE(org.openslx.pvs.service ${CMAKE_BINARY_DIR}/org.openslx.pvs.service)
INSTALL(TARGETS pvsmgr pvs pvsgui pvsmgrtouch RUNTIME DESTINATION bin)
INSTALL(PROGRAMS misc/pvs-vncsrv DESTINATION bin)
INSTALL(FILES ${CMAKE_BINARY_DIR}/org.openslx.pvs.service DESTINATION share/dbus-1/services)
INSTALL(FILES misc/pvs.conf misc/pvsgui.conf misc/pvsmgr.conf DESTINATION /etc/xdg/openslx)
INSTALL(FILES misc/pvsgui.desktop DESTINATION /etc/xdg/autostart)

# uninstall
CONFIGURE_FILE(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake"
    IMMEDIATE @ONLY
)
ADD_CUSTOM_TARGET(uninstall 
    "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake"
)

# package
SET( CPACK_GENERATOR "DEB" )
SET( CPACK_SET_DESTDIR "ON" )
SET( CPACK_PACKAGE_NAME "pvs" )
SET( CPACK_PACKAGE_VERSION_MAJOR "3" )
SET( CPACK_PACKAGE_VERSION_MINOR "1" )
SET( CPACK_PACKAGE_VERSION_PATCH "2" )
SET( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Pool Video Switch" )
SET( CPACK_PACKAGE_DESCRIPTION "")
SET( CPACK_PACKAGE_CONTACT "Johann Latocha <johann@latocha.de>" )
SET( CPACK_DEBIAN_PACKAGE_DEPENDS "libvncserver0 (>= 0.9.3.dfsg.1-2), libqtgui4 (>= 4:4.5.3-4), libqt4-dbus (>= 4:4.5.3-4), libqt4-network (>= 4:4.5.3-4)" )
SET( CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386" )
SET( CPACK_DEBIAN_PACKAGE_SECTION "Network" )
SET( CPACK_DEBIAN_PACKAGE_PRIORITY "optional" )
SET( CPACK_DEBIAN_PACKAGE_RECOMMENDS "x11vnc (>= 0.9.9-1)" )
INCLUDE( CPack )