1project( 2 'wayvnc', 3 'c', 4 version: '0.4.1', 5 license: 'ISC', 6 default_options: [ 7 'c_std=gnu11', 8 ], 9) 10 11buildtype = get_option('buildtype') 12host_system = host_machine.system() 13prefix = get_option('prefix') 14 15c_args = [ 16 '-DPROJECT_VERSION="@0@"'.format(meson.project_version()), 17 '-D_GNU_SOURCE', 18] 19 20git = find_program('git', native: true, required: false) 21if git.found() 22 git_describe = run_command([git, 'describe', '--tags', '--long']) 23 git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD']) 24 if git_describe.returncode() == 0 and git_branch.returncode() == 0 25 c_args += '-DGIT_VERSION="@0@ (@1@)"'.format( 26 git_describe.stdout().strip(), 27 git_branch.stdout().strip(), 28 ) 29 endif 30endif 31 32if buildtype != 'debug' and buildtype != 'debugoptimized' 33 c_args += '-DNDEBUG' 34endif 35 36add_project_arguments(c_args, language: 'c') 37 38cc = meson.get_compiler('c') 39 40libm = cc.find_library('m', required: false) 41librt = cc.find_library('rt', required: false) 42libpam = cc.find_library('pam', required: get_option('pam')) 43 44pixman = dependency('pixman-1') 45gbm = dependency('gbm', required: get_option('screencopy-dmabuf')) 46drm = dependency('libdrm') 47xkbcommon = dependency('xkbcommon', version: '>=1.0.0') 48wayland_client = dependency('wayland-client') 49 50neatvnc_version = '>=0.4.0' 51 52neatvnc_project = subproject( 53 'neatvnc', 54 required: false, 55 version: neatvnc_version, 56) 57 58aml_project = subproject('aml', required: false) 59if aml_project.found() 60 aml = aml_project.get_variable('aml_dep') 61else 62 aml = dependency('aml') 63endif 64 65if neatvnc_project.found() 66 neatvnc = neatvnc_project.get_variable('neatvnc_dep') 67else 68 neatvnc = dependency('neatvnc', version: neatvnc_version) 69endif 70 71inc = include_directories('include') 72 73subdir('protocols') 74 75sources = [ 76 'src/main.c', 77 'src/strlcpy.c', 78 'src/shm.c', 79 'src/screencopy.c', 80 'src/data-control.c', 81 'src/output.c', 82 'src/pointer.c', 83 'src/keyboard.c', 84 'src/seat.c', 85 'src/smooth.c', 86 'src/cfg.c', 87 'src/intset.c', 88 'src/buffer.c', 89 'src/pixels.c', 90 'src/pixman-renderer.c', 91 'src/transform-util.c', 92 'src/damage-refinery.c', 93 'src/murmurhash.c', 94] 95 96dependencies = [ 97 libm, 98 librt, 99 pixman, 100 aml, 101 gbm, 102 drm, 103 wayland_client, 104 neatvnc, 105 xkbcommon, 106 client_protos, 107] 108 109config = configuration_data() 110 111config.set('PREFIX', '"' + prefix + '"') 112 113if host_system == 'linux' and get_option('systemtap') and cc.has_header('sys/sdt.h') 114 config.set('HAVE_USDT', true) 115endif 116 117if cc.has_function('memfd_create') 118 config.set('HAVE_MEMFD', true) 119 config.set('HAVE_MEMFD_CREATE', true) 120elif cc.has_function('SYS_memfd_create', prefix : '#include <sys/syscall.h>') 121 config.set('HAVE_MEMFD', true) 122endif 123 124if gbm.found() and not get_option('screencopy-dmabuf').disabled() 125 config.set('ENABLE_SCREENCOPY_DMABUF', true) 126endif 127 128if libpam.found() 129 dependencies += libpam 130 sources += 'src/pam_auth.c' 131 config.set('ENABLE_PAM', true) 132endif 133 134configure_file( 135 output: 'config.h', 136 configuration: config, 137) 138 139executable( 140 'wayvnc', 141 sources, 142 dependencies: dependencies, 143 include_directories: inc, 144 install: true, 145) 146 147scdoc = dependency('scdoc', native: true, required: get_option('man-pages')) 148if scdoc.found() 149 scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true) 150 sh = find_program('sh', native: true) 151 mandir = get_option('mandir') 152 input = 'wayvnc.scd' 153 output = 'wayvnc.1' 154 155 custom_target( 156 output, 157 input: input, 158 output: output, 159 command: [ 160 sh, '-c', '@0@ <@INPUT@ >@1@'.format(scdoc_prog.path(), output) 161 ], 162 install: true, 163 install_dir: '@0@/man1'.format(mandir) 164 ) 165endif 166