################################################################################ # General ################################################################################ # set project's name PROJECT( pvs ) # cmake min version CMAKE_MINIMUM_REQUIRED( VERSION 2.6.2 ) # set compiler optimizations for debug and release SET(CMAKE_BUILD_TYPE Debug) SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall") SET(CMAKE_C_FLAGS_RELEASE "-O3 -march=native") SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall") SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -DQT_NO_DEBUG_OUTPUT" ) # local cmake modules SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) # 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) IF(WIN32) SET(sysdep_suffix _Win32) INCLUDE_DIRECTORIES( /c/KDE4/tmp/LibVNCServer-0.9.7/ ) ELSEIF(UNIX) SET(sysdep_suffix _X11) ENDIF(WIN32) ################################################################################ # Build third-party libraries ################################################################################ ADD_SUBDIRECTORY(3rdparty/qtsingleapplication) ################################################################################ # Build third-party libraries ################################################################################ ADD_SUBDIRECTORY(3rdparty) ################################################################################ # Common multicast transfer module ################################################################################ ADD_SUBDIRECTORY(src/net/mcast) ################################################################################ # Variables ################################################################################ # with SET() command you can change variables or define new ones. # we define PVSMGR_SRCS variable that contains a list of all .cpp files 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 ################################################################################ # some .ui files (Qt) 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 ) # resource file (Qt) 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 (Qt) 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 (Qt) 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 ) # by default only QtCore and QtGui modules are enabled # other modules must be enabled like this: SET( QT_USE_QTDBUS TRUE ) SET( QT_USE_QTNETWORK 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 command will generate rules that will run rcc on all files from # PVSCLIENTGUI_RCS. in result PVSCLIENTGUI_RC_SRCS variable will contain paths # to files produced by rcc 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 ################################################################################ ## here we instruct CMake to build our executable from all of the source files if(UNIX) 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} ) ENDIF(UNIX) 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} ) # last thing we have to do is to tell CMake what libraries our executable needs, # luckily FIND_PACKAGE prepared variables for us: IF(WIN32) TARGET_LINK_LIBRARIES( pvsmgr ) ELSEIF(UNIX) TARGET_LINK_LIBRARIES( pvsmgr ${QT_LIBRARIES} ${VNC_LIBRARIES} ${X11_LIBRARIES} pvsmcast pvsinput ) ENDIF(WIN32) IF(WIN32) TARGET_LINK_LIBRARIES( pvsmgrtouch ) ELSEIF(UNIX) TARGET_LINK_LIBRARIES( pvsmgrtouch ${QT_LIBRARIES} ${VNC_LIBRARIES} ${X11_LIBRARIES} pvsmcast pvsinput ) ENDIF(WIN32) IF(WIN32) TARGET_LINK_LIBRARIES( pvs ${QT_LIBRARIES} ${VNC_LIBRARIES} advapi32 ws2_32 ) ELSEIF(UNIX) TARGET_LINK_LIBRARIES( pvs ${QT_LIBRARIES} ${VNC_LIBRARIES} ${X11_LIBRARIES} ${X11_XTest_LIB} ${X11_Xinput_LIB} pvsmcast pvsinput ) ENDIF(WIN32) IF(WIN32) TARGET_LINK_LIBRARIES( pvsgui ${QT_LIBRARIES} ${VNC_LIBRARIES} #advapi32 ws2_32 ) ELSEIF(UNIX) TARGET_LINK_LIBRARIES( pvsgui ${QT_LIBRARIES} ${VNC_LIBRARIES} ) ENDIF(WIN32) IF(UNIX) SET_PROPERTY(TARGET pvsmgrtouch PROPERTY COMPILE_DEFINITIONS MAINWINDOW_USE_TOUCHGUI) SET_PROPERTY(TARGET pvsmgr PROPERTY COMPILE_DEFINITIONS MAINWINDOW_USE_NORMALGUI) ENDIF(UNIX) # add install target to our makefile IF(WIN32) INSTALL( TARGETS pvs pvsgui RUNTIME DESTINATION bin ) ELSEIF(UNIX) 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/openslx ) INSTALL( FILES misc/pvsgui.desktop DESTINATION /etc/xdg/autostart ) ENDIF(WIN32) # add uninstall target to our makefile CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/Uninstall.cmake" "${CMAKE_CURRENT_BINARY_DIR}/Uninstall.cmake" IMMEDIATE @ONLY ) ADD_CUSTOM_TARGET( uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/Uninstall.cmake" ) # add package target to our makefile SET( CPACK_GENERATOR "DEB;RPM" ) SET( CPACK_SET_DESTDIR "ON" ) SET( CPACK_PACKAGE_NAME "pvs" ) SET( CPACK_PACKAGE_VERSION_MAJOR "2" ) SET( CPACK_PACKAGE_VERSION_MINOR "8" ) SET( CPACK_PACKAGE_VERSION_PATCH "0" ) SET( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Pool Video Switch" ) SET( CPACK_PACKAGE_DESCRIPTION "") SET( CPACK_PACKAGE_CONTACT "Simon Wittenberg " ) 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 ) # must be last!