summaryrefslogtreecommitdiffstats
path: root/src/input/CMakeLists.txt
blob: 20fd531c62cad3599279195e233e0010be066c12 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
include(${QT_USE_FILE})

set(pvsinput_SRCS
    inputEvent.cpp
    )
   
if(UNIX)
	find_file(XINPUT2_HDR X11/extensions/XInput2.h)
	if(XINPUT2_HDR)
		set_property(SOURCE x11FakeKeyboardHandler.cpp
			APPEND
			PROPERTY COMPILE_DEFINITIONS HAVE_XINPUT2_H
		)
	endif() 

	set(pvsprivinputd_SRCS
		pvsprivinputd.cpp
		pvsPrivInputHandler.cpp
		pvsCheckPrivileges.cpp
		pvsSyslog.cpp
		pvsPrivInputSignalHandler.cpp
		rebootSystemHandler.cpp
		killX11Handler.cpp
		magicSysRqHandler.cpp
		sayHelloHandler.cpp
		inputEventHandler.cpp
	)
	
	set(pvsprivinputd_MOC_HDRS
		pvsPrivInputHandler.h
		pvsCheckPrivileges.h
		pvsSyslog.h
		pvsPrivInputSignalHandler.h
	)

	qt4_wrap_cpp(pvsprivinputd_MOC_SRCS
		${pvsprivinputd_MOC_HDRS}
	)

	add_executable(pvsprivinputd
		${pvsprivinputd_SRCS}
		${pvsprivinputd_MOC_SRCS}
	)
	
	set_property(SOURCE ${pvsprivinputd_SRCS} ${pvsprivinputd_MOC_SRCS}
		APPEND
		PROPERTY COMPILE_FLAGS " -I${QT_QTCORE_INCLUDE_DIR} -I${QT_QTDBUS_INCLUDE_DIR} -I${QT_QTNETWORK_INCLUDE_DIR}")
	
	target_link_libraries(pvsprivinputd
		pvsinput
		${QT_QTCORE_LIBRARY}
		${QT_QTDBUS_LIBRARY}
		${QT_QTNETWORK_LIBRARY}
	)	
	
	list(APPEND pvsinput_SRCS
	    pvsPrivInputSocket.cpp
	    x11InputUtils.cpp 
        x11FakeKeyboardHandler.cpp
        x11FakeMouseHandler.cpp
        privilegedHandlerForwarder.cpp
    )

    # we need pkg-config to find out where to install the action file:
    find_package(PkgConfig)
    if(NOT PKG_CONFIG_FOUND)
        # we will try to make a best effort and put our policy file into
        # ${PREFIX}/share/polkit-1, but only if we can find
        # the pkexec executable.
        find_program(PKEXEC_LOCATION pkexec)
        if(PKEXEC_LOCATION OR ENABLE_POLKIT)
            set(POLKIT_FOUND ON)
            set(POLKIT_PREFIX ${CMAKE_INSTALL_PREFIX})
            set(POLKIT_POLICY_DIR ${POLKIT_PREFIX}/share/polkit-1/actions)
        endif()
    else()
        pkg_check_modules(POLKIT "polkit-gobject-1")
        if(POLKIT_FOUND)
            execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} polkit-gobject-1 --variable=policydir
                OUTPUT_VARIABLE POLKIT_POLICY_DIR
                OUTPUT_STRIP_TRAILING_WHITESPACE)
            if(NOT POLKIT_POLICY_DIR)
                set(POLKIT_FOUND OFF)
            endif()
        endif()
    endif()
    
    # now, arrange for policykit integration:
    if(POLKIT_FOUND OR ENABLE_POLKIT)
        if(NOT POLKIT_POLICY_DIR)
            message(SEND_ERROR "PolicyKit integration is enabled, but cannot find PolicyKit's actions directory. Please set POLKIT_POLICY_DIR to the right value")
        endif()
        
        install(FILES org.openslx.pvs.input.policy
            DESTINATION ${POLKIT_POLICY_DIR})
        set_property(SOURCE ${pvsprivinputd_SRCS}
            APPEND
            PROPERTY COMPILE_DEFINITIONS HAVE_POLKIT)
        message(STATUS "PolicyKit integration: enabled")
    else()
        message(STATUS "PolicyKit integration: disabled")
    endif()
        
    # Install a pvsprivinputd.conf template
    install(FILES pvsprivinputd.conf 
        DESTINATION /etc
        PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
endif()

add_library(
    pvsinput
    STATIC
    ${pvsinput_SRCS}
)