2019-10-12 13:19:49 +00:00
|
|
|
project(
|
|
|
|
'neatvnc',
|
|
|
|
'c',
|
2024-02-02 22:42:16 +00:00
|
|
|
version: '0.7.2',
|
2019-10-12 13:19:49 +00:00
|
|
|
license: 'ISC',
|
|
|
|
default_options: [
|
|
|
|
'c_std=gnu11',
|
2022-11-26 18:19:08 +00:00
|
|
|
'warning_level=2',
|
2019-10-12 13:19:49 +00:00
|
|
|
],
|
|
|
|
)
|
|
|
|
|
2020-01-22 22:09:47 +00:00
|
|
|
buildtype = get_option('buildtype')
|
2020-04-01 22:49:58 +00:00
|
|
|
host_system = host_machine.system()
|
2020-01-22 22:09:47 +00:00
|
|
|
|
|
|
|
c_args = [
|
2020-07-26 11:43:00 +00:00
|
|
|
'-DPROJECT_VERSION="@0@"'.format(meson.project_version()),
|
2019-10-12 13:19:49 +00:00
|
|
|
'-D_GNU_SOURCE',
|
|
|
|
'-fvisibility=hidden',
|
2022-10-29 11:50:34 +00:00
|
|
|
'-DAML_UNSTABLE_API=1',
|
2022-11-26 18:19:08 +00:00
|
|
|
|
|
|
|
'-Wmissing-prototypes',
|
|
|
|
'-Wno-unused-parameter',
|
2023-04-30 13:30:47 +00:00
|
|
|
'-Wno-format-truncation',
|
2020-01-22 22:09:47 +00:00
|
|
|
]
|
|
|
|
|
2020-04-12 14:25:49 +00:00
|
|
|
if buildtype != 'debug' and buildtype != 'debugoptimized'
|
2020-01-22 22:09:47 +00:00
|
|
|
c_args += '-DNDEBUG'
|
|
|
|
endif
|
2019-10-12 13:19:49 +00:00
|
|
|
|
2020-07-26 11:43:00 +00:00
|
|
|
git = find_program('git', native: true, required: false)
|
|
|
|
if git.found()
|
2023-05-03 08:50:14 +00:00
|
|
|
git_describe = run_command([git, 'describe', '--tags', '--long'], check: false)
|
|
|
|
git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'], check: false)
|
2020-07-26 11:43:00 +00:00
|
|
|
if git_describe.returncode() == 0 and git_branch.returncode() == 0
|
|
|
|
c_args += '-DGIT_VERSION="@0@ (@1@)"'.format(
|
|
|
|
git_describe.stdout().strip(),
|
|
|
|
git_branch.stdout().strip(),
|
|
|
|
)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2022-07-09 20:52:28 +00:00
|
|
|
libdrm_inc = dependency('libdrm').partial_dependency(compile_args: true)
|
2020-12-31 02:32:33 +00:00
|
|
|
|
2020-01-22 22:09:47 +00:00
|
|
|
add_project_arguments(c_args, language: 'c')
|
2019-10-13 12:16:24 +00:00
|
|
|
|
2019-10-12 13:19:49 +00:00
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
|
|
|
|
libm = cc.find_library('m', required: false)
|
|
|
|
|
|
|
|
pixman = dependency('pixman-1')
|
2020-07-11 20:16:27 +00:00
|
|
|
libturbojpeg = dependency('libturbojpeg', required: get_option('jpeg'))
|
2020-01-25 15:31:22 +00:00
|
|
|
gnutls = dependency('gnutls', required: get_option('tls'))
|
2023-04-06 21:02:01 +00:00
|
|
|
nettle = dependency('nettle', required: get_option('nettle'))
|
2023-08-15 21:41:11 +00:00
|
|
|
hogweed = dependency('hogweed', required: get_option('nettle'))
|
2023-08-13 11:27:16 +00:00
|
|
|
gmp = dependency('gmp', required: get_option('nettle'))
|
2020-04-03 22:31:16 +00:00
|
|
|
zlib = dependency('zlib')
|
2021-09-12 18:01:58 +00:00
|
|
|
gbm = dependency('gbm', required: get_option('gbm'))
|
2021-12-25 23:46:29 +00:00
|
|
|
libdrm = dependency('libdrm', required: get_option('h264'))
|
2019-10-12 13:19:49 +00:00
|
|
|
|
2021-12-24 16:29:37 +00:00
|
|
|
libavcodec = dependency('libavcodec', required: get_option('h264'))
|
|
|
|
libavfilter = dependency('libavfilter', required: get_option('h264'))
|
|
|
|
libavutil = dependency('libavutil', required: get_option('h264'))
|
|
|
|
|
2023-01-22 13:05:33 +00:00
|
|
|
aml_version = ['>=0.3.0', '<0.4.0']
|
|
|
|
aml_project = subproject('aml', required: false, version: aml_version)
|
2020-03-16 20:09:22 +00:00
|
|
|
if aml_project.found()
|
|
|
|
aml = aml_project.get_variable('aml_dep')
|
|
|
|
else
|
2023-01-22 13:05:33 +00:00
|
|
|
aml = dependency('aml', version: aml_version)
|
2020-03-16 20:09:22 +00:00
|
|
|
endif
|
|
|
|
|
2020-04-03 22:31:16 +00:00
|
|
|
inc = include_directories('include')
|
2019-10-12 13:19:49 +00:00
|
|
|
|
|
|
|
sources = [
|
|
|
|
'src/server.c',
|
|
|
|
'src/vec.c',
|
|
|
|
'src/zrle.c',
|
|
|
|
'src/raw-encoding.c',
|
|
|
|
'src/pixels.c',
|
|
|
|
'src/fb.c',
|
2021-08-29 16:30:00 +00:00
|
|
|
'src/fb_pool.c',
|
2020-01-25 15:29:25 +00:00
|
|
|
'src/rcbuf.c',
|
2020-01-25 15:31:22 +00:00
|
|
|
'src/stream.c',
|
2023-04-06 11:50:44 +00:00
|
|
|
'src/stream-common.c',
|
|
|
|
'src/stream-tcp.c',
|
2022-11-05 12:54:58 +00:00
|
|
|
'src/desktop-layout.c',
|
2020-04-12 18:16:19 +00:00
|
|
|
'src/display.c',
|
2020-07-11 20:16:27 +00:00
|
|
|
'src/tight.c',
|
2020-09-26 16:10:25 +00:00
|
|
|
'src/enc-util.c',
|
2020-11-29 20:48:31 +00:00
|
|
|
'src/qnum-to-evdev.c',
|
2021-09-19 20:12:30 +00:00
|
|
|
'src/resampler.c',
|
|
|
|
'src/transform-util.c',
|
2021-09-20 21:15:32 +00:00
|
|
|
'src/damage-refinery.c',
|
2021-12-09 22:48:31 +00:00
|
|
|
'src/encoder.c',
|
2022-02-06 15:43:45 +00:00
|
|
|
'src/cursor.c',
|
2022-06-25 15:04:58 +00:00
|
|
|
'src/logging.c',
|
2023-09-09 23:29:48 +00:00
|
|
|
'src/base64.c',
|
2019-10-12 13:19:49 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
dependencies = [
|
|
|
|
libm,
|
|
|
|
pixman,
|
2020-03-16 20:09:22 +00:00
|
|
|
aml,
|
2020-04-03 22:31:16 +00:00
|
|
|
zlib,
|
2022-07-09 20:52:28 +00:00
|
|
|
libdrm_inc,
|
2019-10-12 13:19:49 +00:00
|
|
|
]
|
|
|
|
|
2023-04-06 21:02:01 +00:00
|
|
|
enable_websocket = false
|
|
|
|
|
2019-12-31 10:13:21 +00:00
|
|
|
config = configuration_data()
|
|
|
|
|
|
|
|
if libturbojpeg.found()
|
|
|
|
dependencies += libturbojpeg
|
2020-07-11 20:16:27 +00:00
|
|
|
config.set('HAVE_JPEG', true)
|
2019-12-31 10:13:21 +00:00
|
|
|
endif
|
|
|
|
|
2020-01-25 15:31:22 +00:00
|
|
|
if gnutls.found()
|
2023-04-06 11:50:44 +00:00
|
|
|
sources += 'src/stream-gnutls.c'
|
2020-01-25 15:31:22 +00:00
|
|
|
dependencies += gnutls
|
|
|
|
config.set('ENABLE_TLS', true)
|
|
|
|
endif
|
|
|
|
|
2023-08-15 21:41:11 +00:00
|
|
|
if nettle.found() and hogweed.found() and gmp.found()
|
|
|
|
dependencies += [ nettle, hogweed, gmp ]
|
2023-04-06 21:02:01 +00:00
|
|
|
enable_websocket = true
|
2023-08-13 11:27:16 +00:00
|
|
|
config.set('HAVE_CRYPTO', true)
|
2023-09-03 22:30:10 +00:00
|
|
|
sources += ['src/crypto-nettle.c', 'src/stream-rsa-aes.c']
|
2023-04-06 21:02:01 +00:00
|
|
|
endif
|
|
|
|
|
2020-06-27 23:21:34 +00:00
|
|
|
if host_system == 'linux' and get_option('systemtap') and cc.has_header('sys/sdt.h')
|
2020-04-01 22:49:58 +00:00
|
|
|
config.set('HAVE_USDT', true)
|
|
|
|
endif
|
|
|
|
|
2021-09-12 18:01:58 +00:00
|
|
|
if gbm.found()
|
|
|
|
dependencies += gbm
|
|
|
|
config.set('HAVE_GBM', true)
|
|
|
|
endif
|
|
|
|
|
2021-12-25 23:46:29 +00:00
|
|
|
if gbm.found() and libdrm.found() and libavcodec.found() and libavfilter.found() and libavutil.found()
|
2021-12-24 16:29:37 +00:00
|
|
|
sources += [ 'src/h264-encoder.c', 'src/open-h264.c' ]
|
2021-12-25 23:46:29 +00:00
|
|
|
dependencies += [libdrm, libavcodec, libavfilter, libavutil]
|
2021-12-24 16:29:37 +00:00
|
|
|
config.set('ENABLE_OPEN_H264', true)
|
2022-10-14 09:22:54 +00:00
|
|
|
config.set('HAVE_LIBAVUTIL', true)
|
2021-12-24 16:29:37 +00:00
|
|
|
endif
|
|
|
|
|
2023-04-06 21:02:01 +00:00
|
|
|
if enable_websocket
|
|
|
|
sources += [
|
|
|
|
'src/ws-handshake.c',
|
|
|
|
'src/ws-framing.c',
|
|
|
|
'src/http.c',
|
|
|
|
'src/stream-ws.c',
|
|
|
|
]
|
|
|
|
config.set('ENABLE_WEBSOCKET', true)
|
|
|
|
endif
|
|
|
|
|
2019-12-31 10:13:21 +00:00
|
|
|
configure_file(
|
|
|
|
output: 'config.h',
|
|
|
|
configuration: config,
|
|
|
|
)
|
|
|
|
|
2020-07-22 04:37:35 +00:00
|
|
|
neatvnc = library(
|
2019-10-12 13:19:49 +00:00
|
|
|
'neatvnc',
|
|
|
|
sources,
|
2019-10-12 14:47:07 +00:00
|
|
|
version: '0.0.0',
|
2019-10-12 13:19:49 +00:00
|
|
|
dependencies: dependencies,
|
|
|
|
include_directories: inc,
|
|
|
|
install: true,
|
|
|
|
)
|
|
|
|
|
2019-10-12 15:23:46 +00:00
|
|
|
neatvnc_dep = declare_dependency(
|
|
|
|
include_directories: inc,
|
|
|
|
link_with: neatvnc,
|
|
|
|
)
|
|
|
|
|
2020-02-09 11:41:43 +00:00
|
|
|
if get_option('examples')
|
|
|
|
subdir('examples')
|
|
|
|
endif
|
|
|
|
|
2020-05-27 21:59:34 +00:00
|
|
|
if get_option('benchmarks')
|
|
|
|
subdir('bench')
|
|
|
|
endif
|
|
|
|
|
2022-02-10 21:52:34 +00:00
|
|
|
if get_option('tests')
|
|
|
|
subdir('test')
|
|
|
|
endif
|
|
|
|
|
2019-10-12 13:19:49 +00:00
|
|
|
install_headers('include/neatvnc.h')
|
2019-10-12 14:47:07 +00:00
|
|
|
|
|
|
|
pkgconfig = import('pkgconfig')
|
|
|
|
pkgconfig.generate(
|
2019-10-12 15:23:46 +00:00
|
|
|
libraries: neatvnc,
|
2019-10-12 14:47:07 +00:00
|
|
|
version: meson.project_version(),
|
|
|
|
filebase: meson.project_name(),
|
|
|
|
name: meson.project_name(),
|
|
|
|
description: 'A Neat VNC server library'
|
|
|
|
)
|