project( 'wayvnc', 'c', version: '0.8-rc0', license: 'ISC', default_options: [ 'c_std=gnu11', 'warning_level=2', ], ) buildtype = get_option('buildtype') host_system = host_machine.system() prefix = get_option('prefix') c_args = [ '-D_GNU_SOURCE', '-DAML_UNSTABLE_API=1', '-Wno-unused-parameter', '-Wno-missing-field-initializers', ] version = '"@0@"'.format(meson.project_version()) git = find_program('git', native: true, required: false) if git.found() git_commit = run_command([git, 'rev-parse', '--short', 'HEAD']) git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD']) if git_commit.returncode() == 0 and git_branch.returncode() == 0 version = '"v@0@-@1@ (@2@)"'.format( meson.project_version(), git_commit.stdout().strip(), git_branch.stdout().strip(), ) endif endif add_project_arguments('-DPROJECT_VERSION=@0@'.format(version), language: 'c') if buildtype != 'debug' and buildtype != 'debugoptimized' c_args += '-DNDEBUG' endif add_project_arguments(c_args, language: 'c') cc = meson.get_compiler('c') libm = cc.find_library('m', required: false) librt = cc.find_library('rt', required: false) libpam = cc.find_library('pam', required: get_option('pam')) pixman = dependency('pixman-1') gbm = dependency('gbm', required: get_option('screencopy-dmabuf')) drm = dependency('libdrm') xkbcommon = dependency('xkbcommon', version: '>=1.0.0') wayland_client = dependency('wayland-client') jansson = dependency('jansson') aml_version = ['>=0.3.0', '<0.4.0'] neatvnc_version = ['>=0.7.0', '<0.9.0'] neatvnc_project = subproject( 'neatvnc', required: false, version: neatvnc_version, ) aml_project = subproject('aml', required: false, version: aml_version) if aml_project.found() aml = aml_project.get_variable('aml_dep') else aml = dependency('aml', version: aml_version) endif if neatvnc_project.found() neatvnc = neatvnc_project.get_variable('neatvnc_dep') else neatvnc = dependency('neatvnc', version: neatvnc_version) endif inc = include_directories('include') subdir('protocols') sources = [ 'src/main.c', 'src/strlcpy.c', 'src/shm.c', 'src/screencopy.c', 'src/data-control.c', 'src/output.c', 'src/output-management.c', 'src/pointer.c', 'src/keyboard.c', 'src/seat.c', 'src/smooth.c', 'src/cfg.c', 'src/intset.c', 'src/buffer.c', 'src/pixels.c', 'src/transform-util.c', 'src/util.c', 'src/json-ipc.c', 'src/ctl-server.c', 'src/ctl-commands.c', 'src/option-parser.c', 'src/table-printer.c', ] dependencies = [ libm, librt, pixman, aml, gbm, drm, wayland_client, neatvnc, xkbcommon, client_protos, jansson, ] ctlsources = [ 'src/wayvncctl.c', 'src/util.c', 'src/json-ipc.c', 'src/ctl-client.c', 'src/ctl-commands.c', 'src/strlcpy.c', 'src/option-parser.c', 'src/table-printer.c', ] ctldependencies = [ jansson, ] config = configuration_data() config.set('PREFIX', '"' + prefix + '"') if host_system == 'linux' and get_option('systemtap') and cc.has_header('sys/sdt.h') config.set('HAVE_USDT', true) endif if cc.has_function('memfd_create') config.set('HAVE_MEMFD', true) config.set('HAVE_MEMFD_CREATE', true) elif cc.has_function('SYS_memfd_create', prefix : '#include ') config.set('HAVE_MEMFD', true) endif if gbm.found() and not get_option('screencopy-dmabuf').disabled() config.set('ENABLE_SCREENCOPY_DMABUF', true) endif if libpam.found() dependencies += libpam sources += 'src/pam_auth.c' config.set('ENABLE_PAM', true) endif configure_file( output: 'config.h', configuration: config, ) executable( 'wayvnc', sources, dependencies: dependencies, include_directories: inc, install: true, ) executable( 'wayvncctl', ctlsources, dependencies: ctldependencies, include_directories: inc, install: true, ) scdoc = dependency('scdoc', native: true, required: get_option('man-pages')) if scdoc.found() scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true) sh = find_program('sh', native: true) mandir = get_option('mandir') manpages = { 'wayvnc.scd': 'wayvnc.1', 'wayvncctl.scd': 'wayvncctl.1', } foreach input, output : manpages custom_target( output, input: input, output: output, command: [ sh, '-c', '@0@ <@INPUT@ >@1@'.format(scdoc_prog.path(), output) ], install: true, install_dir: '@0@/man1'.format(mandir) ) endforeach endif if get_option('tests') subdir('test') endif