HandBrake/gtk/meson.build

143 lines
3.7 KiB
Meson

# Copyright (C) 2023-2024 HandBrake Team
# SPDX-License-Identifier: GPL-2.0-or-later
project('handbrake-gtk', 'c', 'cpp',
version: run_command('data/version.py', check: true).stdout().strip(),
license: 'GPL-2.0-only',
meson_version: '>= 0.51.0',
default_options: ['warning_level=2', 'buildtype=release'])
# Minimum versions for dependencies
glib_min = '>= 2.68'
gtk_min = '>= 4.6'
cc = meson.get_compiler('c')
i18n = import('i18n')
gnome = import('gnome')
hb_dir = get_option('hb-dir')
if hb_dir == ''
hb_dir = meson.current_build_dir() / '..'
endif
hb_incdirs = include_directories(hb_dir / 'libhb', hb_dir / 'contrib/include')
# External dependencies (required)
ghb_deps = [
cc.find_library('handbrake', dirs: hb_dir / 'libhb'),
dependency('dvdnav'),
dependency('dvdread'),
dependency('SvtAv1Enc'),
dependency('glib-2.0', version: glib_min),
dependency('gio-2.0', version: glib_min),
dependency('gthread-2.0', version: glib_min),
dependency('gmodule-2.0', version: glib_min),
dependency('gtk4', version: gtk_min),
dependency('jansson'),
dependency('libass'),
dependency('libavcodec'),
dependency('libavfilter'),
dependency('libavformat'),
dependency('libavutil'),
dependency('libbluray'),
dependency('libswresample'),
dependency('libswscale'),
dependency('libturbojpeg'),
dependency('libxml-2.0'),
dependency('ogg'),
dependency('theoradec'),
dependency('theoraenc'),
dependency('threads'),
dependency('vorbis'),
dependency('vorbisenc'),
dependency('x264'),
]
if get_option('libdovi').enabled()
ghb_deps += dependency('dovi')
endif
if get_option('fdk-aac').enabled()
ghb_deps += dependency('fdk-aac')
endif
if get_option('qsv').enabled()
ghb_deps += dependency('vpl')
endif
if get_option('x265').enabled()
ghb_deps += dependency('x265')
if get_option('numa').enabled()
numa = dependency('numa', required: false)
if not numa.found()
numa = cc.find_library('numa')
endif
ghb_deps += numa
endif
endif
if get_option('mf').enabled()
ghb_deps += [cc.find_library('mfplat'), cc.find_library('strmiids')]
endif
# OS-specific dependencies
if host_machine.system() == 'windows'
add_project_link_arguments('-mwindows', language: ['c', 'cpp'])
win_dlls = ['bcrypt', 'ntdll', 'ole32', 'regex', 'userenv', 'uuid', 'ws2_32']
foreach dll: win_dlls
ghb_deps += cc.find_library(dll)
endforeach
elif not cc.has_function('dlopen')
ghb_deps += cc.find_library('dl')
endif
if not cc.has_function('iconv')
ghb_deps += cc.find_library('iconv')
add_project_arguments('-DLIBICONV_PLUG', language: ['c', 'cpp'])
endif
if not get_option('c_std').contains('gnu')
add_project_arguments('-D_DEFAULT_SOURCE', language: ['c', 'cpp'])
endif
if (cc.has_function('strerror_r'))
add_project_arguments('-DHAS_STRERROR_R', language: 'c')
endif
add_project_arguments('-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_4_6',
'-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_4_6', language: 'c')
compile_args = cc.get_supported_arguments(
'-Wno-missing-field-initializers',
'-Wno-sign-compare',
'-Wno-unused-parameter',
'-Wignored-qualifiers',
'-Wimplicit-function-declaration',
'-Wincompatible-pointer-types',
'-Wint-conversion',
'-Wint-to-pointer-cast',
'-Wlogical-op',
'-Wmissing-format-attribute',
'-Wmissing-noreturn',
'-Wmissing-include-dirs',
'-Wnested-externs',
'-Wold-style-definition',
'-Woverflow',
'-Wpointer-to-int-cast',
'-Wshadow',
'-Wstrict-prototypes',
'-Wunused',
'-Wwrite-strings')
add_project_arguments(compile_args, language: 'c')
link_args = cc.get_supported_link_arguments(
'-Wl,--export-dynamic', '-Wl,--exclude-libs,ALL')
add_project_link_arguments(link_args, language: ['c', 'cpp'])
subdir('po')
subdir('icons')
subdir('data')
subdir('src')