Blame meson.build

Packit f546b1
project('gstreamer', 'c',
Packit f546b1
  version : '1.14.1',
Packit f546b1
  meson_version : '>= 0.40.1',
Packit f546b1
  default_options : [ 'warning_level=1',
Packit f546b1
                      'buildtype=debugoptimized' ])
Packit f546b1
Packit f546b1
gst_version = meson.project_version()
Packit f546b1
version_arr = gst_version.split('.')
Packit f546b1
gst_version_major = version_arr[0].to_int()
Packit f546b1
gst_version_minor = version_arr[1].to_int()
Packit f546b1
gst_version_micro = version_arr[2].to_int()
Packit f546b1
if version_arr.length() == 4
Packit f546b1
  gst_version_nano = version_arr[3].to_int()
Packit f546b1
else
Packit f546b1
  gst_version_nano = 0
Packit f546b1
endif
Packit f546b1
Packit f546b1
host_system = host_machine.system()
Packit f546b1
Packit f546b1
apiversion = '1.0'
Packit f546b1
soversion = 0
Packit f546b1
# maintaining compatibility with the previous libtool versioning
Packit f546b1
# current = minor * 100 + micro
Packit f546b1
libversion = '@0@.@1@.0'.format(soversion, gst_version_minor * 100 + gst_version_micro)
Packit f546b1
Packit f546b1
prefix = get_option('prefix')
Packit f546b1
libtype = get_option('library_format')
Packit f546b1
Packit f546b1
libexecdir = get_option('libexecdir')
Packit f546b1
helpers_install_dir = join_paths(libexecdir, 'gstreamer-1.0')
Packit f546b1
Packit f546b1
cc = meson.get_compiler('c')
Packit f546b1
Packit f546b1
# Ignore several spurious warnings for things gstreamer does very commonly
Packit f546b1
# If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
Packit f546b1
# If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
Packit f546b1
# NOTE: Only add warnings here if you are sure they're spurious
Packit f546b1
if cc.get_id() == 'msvc'
Packit f546b1
  add_project_arguments(
Packit f546b1
      '/wd4018', # implicit signed/unsigned conversion
Packit f546b1
      '/wd4146', # unary minus on unsigned (beware INT_MIN)
Packit f546b1
      '/wd4244', # lossy type conversion (e.g. double -> int)
Packit f546b1
      '/wd4305', # truncating type conversion (e.g. double -> float)
Packit f546b1
      language : 'c')
Packit f546b1
elif cc.has_argument('-Wl,-Bsymbolic-functions')
Packit f546b1
  # FIXME: Add an option for this if people ask for it
Packit f546b1
  add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
Packit f546b1
endif
Packit f546b1
Packit f546b1
# Symbol visibility
Packit f546b1
have_visibility_hidden = cc.has_argument('-fvisibility=hidden')
Packit f546b1
if have_visibility_hidden
Packit f546b1
  add_project_arguments('-fvisibility=hidden', language: 'c')
Packit f546b1
endif
Packit f546b1
Packit f546b1
# Disable strict aliasing
Packit f546b1
if cc.has_argument('-fno-strict-aliasing')
Packit f546b1
  add_project_arguments('-fno-strict-aliasing', language: 'c')
Packit f546b1
endif
Packit f546b1
Packit f546b1
cdata = configuration_data()
Packit f546b1
cdata.set_quoted('GST_API_VERSION', apiversion)
Packit f546b1
cdata.set_quoted('GST_DATADIR', join_paths(prefix, get_option('datadir')))
Packit f546b1
cdata.set_quoted('LOCALEDIR', join_paths(prefix, get_option('localedir')))
Packit f546b1
cdata.set_quoted('LIBDIR', join_paths(prefix, get_option('libdir')))
Packit f546b1
cdata.set_quoted('GST_API_VERSION', '1.0')
Packit f546b1
cdata.set_quoted('GETTEXT_PACKAGE', 'gstreamer-1.0')
Packit f546b1
cdata.set_quoted('GST_LICENSE', 'LGPL')
Packit f546b1
cdata.set_quoted('PACKAGE', 'gstreamer')
Packit f546b1
cdata.set_quoted('PACKAGE_NAME', 'GStreamer')
Packit f546b1
cdata.set_quoted('PACKAGE_STRING', 'GStreamer @0@'.format(gst_version))
Packit f546b1
cdata.set_quoted('PACKAGE_TARNAME', 'gstreamer')
Packit f546b1
cdata.set_quoted('PACKAGE_BUGREPORT', 'http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer')
Packit f546b1
cdata.set_quoted('PACKAGE_URL', '')
Packit f546b1
cdata.set_quoted('PACKAGE_VERSION', gst_version)
Packit f546b1
cdata.set_quoted('PLUGINDIR', join_paths(get_option('prefix'), get_option('libdir'), 'gstreamer-1.0'))
Packit f546b1
cdata.set_quoted('VERSION', gst_version)
Packit f546b1
# FIXME: --with-memory-alignment],[8,N,malloc,pagesize (default is 32)]) option
Packit f546b1
cdata.set('MEMORY_ALIGNMENT_MALLOC', 1)
Packit f546b1
cdata.set_quoted('GST_PLUGIN_SCANNER_INSTALLED', join_paths(prefix, helpers_install_dir, 'gst-plugin-scanner'))
Packit f546b1
cdata.set_quoted('GST_PTP_HELPER_INSTALLED', join_paths(prefix, helpers_install_dir, 'gst-ptp-helper'))
Packit f546b1
cdata.set_quoted('GST_PLUGIN_SCANNER_SUBDIR', libexecdir,
Packit f546b1
  description: 'libexecdir path component, used to find plugin-scanner on relocatable builds on windows')
Packit f546b1
Packit f546b1
if host_system == 'darwin'
Packit f546b1
  cdata.set_quoted('GST_EXTRA_MODULE_SUFFIX', '.dylib')
Packit f546b1
endif
Packit f546b1
Packit f546b1
if gst_version_nano > 0
Packit f546b1
    # Have GST_ERROR message printed when running from git
Packit f546b1
    cdata.set('GST_LEVEL_DEFAULT', 'GST_LEVEL_ERROR')
Packit f546b1
else
Packit f546b1
    cdata.set('GST_LEVEL_DEFAULT', 'GST_LEVEL_NONE')
Packit f546b1
endif
Packit f546b1
Packit f546b1
# GStreamer package name and origin url
Packit f546b1
gst_package_name = get_option('with-package-name')
Packit f546b1
if gst_package_name == ''
Packit f546b1
  if gst_version_nano == 0
Packit f546b1
    gst_package_name = 'GStreamer source release'
Packit f546b1
  elif gst_version_nano == 1
Packit f546b1
    gst_package_name = 'GStreamer git'
Packit f546b1
  else
Packit f546b1
    gst_package_name = 'GStreamer prerelease'
Packit f546b1
  endif
Packit f546b1
endif
Packit f546b1
cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name)
Packit f546b1
cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('with-package-origin'))
Packit f546b1
Packit f546b1
# These are only needed/used by the ABI tests
Packit f546b1
host_defines = [
Packit f546b1
  [ 'x86', 'HAVE_CPU_I386' ],
Packit f546b1
  [ 'x86_64', 'HAVE_CPU_X86_64' ],
Packit f546b1
  [ 'arm', 'HAVE_CPU_ARM' ],
Packit f546b1
  [ 'aarch64', 'HAVE_CPU_AARCH64' ],
Packit f546b1
  [ 'mips', 'HAVE_CPU_MIPS' ],
Packit f546b1
  [ 'powerpc', 'HAVE_CPU_PPC' ],
Packit f546b1
  [ 'powerpc64', 'HAVE_CPU_PPC64' ],
Packit f546b1
  [ 'alpha', 'HAVE_CPU_ALPHA' ],
Packit f546b1
  [ 'sparc', 'HAVE_CPU_SPARC' ],
Packit f546b1
  [ 'ia64', 'HAVE_CPU_IA64' ],
Packit f546b1
  [ 'hppa', 'HAVE_CPU_HPPA' ],
Packit f546b1
  [ 'm68k', 'HAVE_CPU_M68K' ],
Packit f546b1
  [ 's390', 'HAVE_CPU_S390' ],
Packit f546b1
]
Packit f546b1
foreach h : host_defines
Packit f546b1
  if h.get(0) == host_machine.cpu()
Packit f546b1
    cdata.set(h.get(1), 1)
Packit f546b1
  endif
Packit f546b1
endforeach
Packit f546b1
# FIXME: should really be called HOST_CPU or such
Packit f546b1
cdata.set_quoted('TARGET_CPU', host_machine.cpu())
Packit f546b1
Packit f546b1
check_headers = [
Packit f546b1
  'dlfcn.h',
Packit f546b1
  'inttypes.h',
Packit f546b1
  'memory.h',
Packit f546b1
  'poll.h',
Packit f546b1
  'stdint.h',
Packit f546b1
  'stdio_ext.h',
Packit f546b1
  'strings.h',
Packit f546b1
  'string.h',
Packit f546b1
  'sys/param.h',
Packit f546b1
  'sys/poll.h',
Packit f546b1
  'sys/prctl.h',
Packit f546b1
  'sys/socket.h',
Packit f546b1
  'sys/stat.h',
Packit f546b1
  'sys/times.h',
Packit f546b1
  'sys/time.h',
Packit f546b1
  'sys/types.h',
Packit f546b1
  'sys/utsname.h',
Packit f546b1
  'sys/wait.h',
Packit f546b1
  'ucontext.h',
Packit f546b1
  'unistd.h',
Packit f546b1
  'valgrind/valgrind.h',
Packit f546b1
  'sys/resource.h',
Packit f546b1
]
Packit f546b1
Packit f546b1
if host_machine.system() == 'windows'
Packit f546b1
  check_headers += ['winsock2.h']
Packit f546b1
endif
Packit f546b1
Packit f546b1
foreach h : check_headers
Packit f546b1
  if cc.has_header(h)
Packit f546b1
    define = 'HAVE_' + h.underscorify().to_upper()
Packit f546b1
    cdata.set(define, 1)
Packit f546b1
  endif
Packit f546b1
endforeach
Packit f546b1
Packit f546b1
if cc.has_member('struct tm', 'tm_gmtoff', prefix : '#include <time.h>')
Packit f546b1
  cdata.set('HAVE_TM_GMTOFF', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
check_functions = [
Packit f546b1
  'gmtime_r',
Packit f546b1
  'sigaction',
Packit f546b1
  'getrusage',
Packit f546b1
  'fseeko',
Packit f546b1
  'ftello',
Packit f546b1
  'poll',
Packit f546b1
  'ppoll',
Packit f546b1
  'pselect',
Packit f546b1
  'getpagesize',
Packit f546b1
  'clock_gettime',
Packit f546b1
  # These are needed by libcheck
Packit f546b1
  'getline',
Packit f546b1
  'mkstemp',
Packit f546b1
  'alarm',
Packit f546b1
  'gettimeofday',
Packit f546b1
]
Packit f546b1
Packit f546b1
foreach f : check_functions
Packit f546b1
  if cc.has_function(f)
Packit f546b1
    define = 'HAVE_' + f.underscorify().to_upper()
Packit f546b1
    cdata.set(define, 1)
Packit f546b1
  endif
Packit f546b1
endforeach
Packit f546b1
Packit f546b1
if cc.has_function('localtime_r', prefix : '#include<time.h>')
Packit f546b1
  cdata.set('HAVE_LOCALTIME_R', 1)
Packit f546b1
  # Needed by libcheck
Packit f546b1
  cdata.set('HAVE_DECL_LOCALTIME_R', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
if cc.links('''#include <pthread.h>
Packit f546b1
               int main() {
Packit f546b1
                 pthread_setname_np("example"); return 0;
Packit f546b1
               }''', name : 'pthread_setname_np(const char*)')
Packit f546b1
  cdata.set('HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
# Check for posix timers and the monotonic clock
Packit f546b1
time_prefix = '#include <time.h>\n'
Packit f546b1
if cdata.has('HAVE_UNISTD_H')
Packit f546b1
  time_prefix += '#include <unistd.h>'
Packit f546b1
endif
Packit f546b1
Packit f546b1
posix_timers_src = time_prefix + '''
Packit f546b1
#if !defined(_POSIX_TIMERS) || _POSIX_TIMERS < 0 || !defined(CLOCK_REALTIME)
Packit f546b1
#error Either _POSIX_TIMERS or CLOCK_REALTIME not defined
Packit f546b1
#endif
Packit f546b1
'''
Packit f546b1
if cc.compiles(posix_timers_src, name : 'posix timers from time.h')
Packit f546b1
  cdata.set('HAVE_POSIX_TIMERS', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
monotonic_clock_src = time_prefix + '''
Packit f546b1
#if !defined(_POSIX_MONOTONIC_CLOCK) || _POSIX_MONOTONIC_CLOCK < 0 || !defined(CLOCK_MONOTONIC)
Packit f546b1
#error Either _POSIX_MONOTONIC_CLOCK or CLOCK_MONOTONIC not defined
Packit f546b1
#endif
Packit f546b1
'''
Packit f546b1
if cc.compiles(monotonic_clock_src, name : 'monotonic clock from time.h')
Packit f546b1
  cdata.set('HAVE_MONOTONIC_CLOCK', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
# Check for __uint128_t (gcc) by checking for 128-bit division
Packit f546b1
uint128_t_src = '''int main() {
Packit f546b1
static __uint128_t v1 = 100;
Packit f546b1
static __uint128_t v2 = 10;
Packit f546b1
static __uint128_t u;
Packit f546b1
u = v1 / v2;
Packit f546b1
}'''
Packit f546b1
if cc.compiles(uint128_t_src, name : '__uint128_t available')
Packit f546b1
  cdata.set('HAVE_UINT128_T', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
# All supported platforms have long long now
Packit f546b1
cdata.set('HAVE_LONG_LONG', 1)
Packit f546b1
Packit f546b1
# We only want to use the __declspec(dllexport/import) dance in GST_EXPORT when
Packit f546b1
# building with MSVC
Packit f546b1
if cc.get_id() == 'msvc'
Packit f546b1
  cdata.set('GSTCONFIG_BUILT_WITH_MSVC', 1)
Packit f546b1
else
Packit f546b1
  cdata.set('GSTCONFIG_BUILT_WITH_MSVC', 0)
Packit f546b1
endif
Packit f546b1
Packit f546b1
# -------------------------------------------------------------------------------------
Packit f546b1
# config.h things needed by libcheck
Packit f546b1
# -------------------------------------------------------------------------------------
Packit f546b1
if cc.has_function('getpid')
Packit f546b1
  cdata.set('HAVE_GETPID', 1)
Packit f546b1
elif host_system == 'windows' and cc.has_function('_getpid')
Packit f546b1
  cdata.set('HAVE_PROCESS_H', 1) # Used by gstreamer too
Packit f546b1
  cdata.set('HAVE__GETPID', 1)
Packit f546b1
endif
Packit f546b1
if cc.has_function('strdup')
Packit f546b1
  cdata.set('HAVE_DECL_STRDUP', 1)
Packit f546b1
elif host_system == 'windows' and cc.has_function('_strdup')
Packit f546b1
  cdata.set('HAVE__STRDUP', 1) # Windows (MSVC)
Packit f546b1
endif
Packit f546b1
if host_machine.system() != 'windows'
Packit f546b1
  cdata.set('HAVE_FORK', 1)
Packit f546b1
else
Packit f546b1
  # libcheck requires HAVE_FORK to be 0 when fork() is not available
Packit f546b1
  cdata.set('HAVE_FORK', 0)
Packit f546b1
endif
Packit f546b1
if cc.has_function('strsignal')
Packit f546b1
  cdata.set('HAVE_DECL_STRSIGNAL', 1)
Packit f546b1
endif
Packit f546b1
# Check for availability of types
Packit f546b1
if not cc.has_type('clockid_t', prefix : '#include <time.h>')
Packit f546b1
  cdata.set('clockid_t', 'int')
Packit f546b1
endif
Packit f546b1
if not cc.has_type('timer_t', prefix : '#include <time.h>')
Packit f546b1
  cdata.set('timer_t', 'int')
Packit f546b1
endif
Packit f546b1
if not cc.has_members('struct timespec', 'tv_sec', 'tv_nsec',
Packit f546b1
		      prefix : '#include <time.h>')
Packit f546b1
  cdata.set('STRUCT_TIMESPEC_DEFINITION_MISSING', 1)
Packit f546b1
endif
Packit f546b1
if not cc.has_members('struct itimerspec', 'it_interval', 'it_value',
Packit f546b1
		      prefix : '#include <time.h>')
Packit f546b1
  cdata.set('STRUCT_ITIMERSPEC_DEFINITION_MISSING', 1)
Packit f546b1
endif
Packit f546b1
Packit f546b1
# Platform deps; only ws2_32 and execinfo for now
Packit f546b1
platform_deps = []
Packit f546b1
if host_machine.system() == 'windows'
Packit f546b1
  platform_deps = [cc.find_library('ws2_32')]
Packit f546b1
endif
Packit f546b1
Packit f546b1
backtrace_deps = []
Packit f546b1
if not get_option('disable_libunwind')
Packit f546b1
  unwind_dep = dependency('libunwind', required : false)
Packit f546b1
  dw_dep = dependency('libdw', required: false)
Packit f546b1
  backtrace_deps = [unwind_dep, dw_dep]
Packit f546b1
  if unwind_dep.found()
Packit f546b1
    cdata.set('HAVE_UNWIND', 1)
Packit f546b1
    if dw_dep.found()
Packit f546b1
      cdata.set('HAVE_DW', 1)
Packit f546b1
    else
Packit f546b1
      message('Support for backtraces is partial only.')
Packit f546b1
    endif
Packit f546b1
  else
Packit f546b1
    if cc.has_function('backtrace')
Packit f546b1
      cdata.set('HAVE_BACKTRACE', 1)
Packit f546b1
    else
Packit f546b1
        message('NO backtraces support.')
Packit f546b1
    endif
Packit f546b1
  endif
Packit f546b1
endif
Packit f546b1
Packit f546b1
if cc.has_header('execinfo.h')
Packit f546b1
  if cc.has_function('backtrace', prefix : '#include <execinfo.h>')
Packit f546b1
    cdata.set('HAVE_BACKTRACE', 1)
Packit f546b1
  else
Packit f546b1
    execinfo_dep = cc.find_library('execinfo', required : false)
Packit f546b1
    if execinfo_dep.found() and cc.has_function('backtrace', prefix : '#include <execinfo.h>', dependencies : execinfo_dep)
Packit f546b1
      cdata.set('HAVE_BACKTRACE', 1)
Packit f546b1
      platform_deps += execinfo_dep
Packit f546b1
    endif
Packit f546b1
  endif
Packit f546b1
endif
Packit f546b1
Packit f546b1
disable_gst_debug = get_option('disable_gst_debug')
Packit f546b1
if disable_gst_debug
Packit f546b1
  add_project_arguments(['-Wno-unused'], language: 'c')
Packit f546b1
endif
Packit f546b1
Packit f546b1
warning_flags = [
Packit f546b1
  '-Wmissing-declarations',
Packit f546b1
  '-Wmissing-prototypes',
Packit f546b1
  '-Wredundant-decls',
Packit f546b1
  '-Wundef',
Packit f546b1
  '-Wwrite-strings',
Packit f546b1
  '-Wformat',
Packit f546b1
  '-Wformat-nonliteral',
Packit f546b1
  '-Wformat-security',
Packit f546b1
  '-Wold-style-definition',
Packit f546b1
  '-Winit-self',
Packit f546b1
  '-Wmissing-include-dirs',
Packit f546b1
  '-Waddress',
Packit f546b1
  '-Waggregate-return',
Packit f546b1
  '-Wno-multichar',
Packit f546b1
  '-Wnested-externs',
Packit f546b1
  '-Wdeclaration-after-statement',
Packit f546b1
  '-Wvla',
Packit f546b1
  '-Wpointer-arith',
Packit f546b1
]
Packit f546b1
Packit f546b1
foreach extra_arg : warning_flags
Packit f546b1
  if cc.has_argument (extra_arg)
Packit f546b1
    add_project_arguments([extra_arg], language: 'c')
Packit f546b1
  endif
Packit f546b1
endforeach
Packit f546b1
Packit f546b1
# Used by the gstutils test
Packit f546b1
gmp_dep = cc.find_library('gmp', required : false)
Packit f546b1
cdata.set('HAVE_GMP', gmp_dep.found())
Packit f546b1
gsl_dep = cc.find_library('gsl', required : false)
Packit f546b1
gslcblas_dep = cc.find_library('gslcblas', required : false)
Packit f546b1
cdata.set('HAVE_GSL', gsl_dep.found() and gslcblas_dep.found())
Packit f546b1
test_deps = [gmp_dep, gsl_dep, gslcblas_dep]
Packit f546b1
Packit f546b1
# Used by gstinfo.c
Packit f546b1
dl_dep = cc.find_library('dl', required : false)
Packit f546b1
cdata.set('HAVE_DLADDR', cc.has_function('dladdr', dependencies : dl_dep))
Packit f546b1
Packit f546b1
Packit f546b1
configinc = include_directories('.')
Packit f546b1
libsinc = include_directories('libs')
Packit f546b1
privinc = include_directories('gst')
Packit f546b1
Packit f546b1
# Find dependencies
Packit f546b1
glib_dep = dependency('glib-2.0', version : '>=2.32.0',
Packit f546b1
  fallback: ['glib', 'libglib_dep'])
Packit f546b1
gobject_dep = dependency('gobject-2.0',
Packit f546b1
  fallback: ['glib', 'libgobject_dep'])
Packit f546b1
gmodule_dep = dependency('gmodule-2.0',
Packit f546b1
  fallback: ['glib', 'libgmodule_dep'])
Packit f546b1
if host_machine.system() == 'windows'
Packit f546b1
    gio_dep = dependency('gio-2.0',
Packit f546b1
        fallback: ['glib', 'libgio_dep'])
Packit f546b1
else
Packit f546b1
    gio_dep = [dependency('gio-2.0',
Packit f546b1
                  fallback: ['glib', 'libgio_dep']),
Packit f546b1
               dependency('gio-unix-2.0',
Packit f546b1
                  fallback: ['glib', 'libgio_dep'])]
Packit f546b1
endif
Packit f546b1
Packit f546b1
mathlib = cc.find_library('m', required : false)
Packit f546b1
# Needed for timer_create/settime/delete
Packit f546b1
# Also provides clock_gettime in glibc < 2.17
Packit f546b1
rt_lib = cc.find_library('rt', required : false)
Packit f546b1
Packit f546b1
gir = find_program('g-ir-scanner', required : false)
Packit f546b1
gnome = import('gnome')
Packit f546b1
Packit f546b1
# Fixme, not very elegant.
Packit f546b1
build_gir = gir.found() and not meson.is_cross_build() and not get_option('disable_introspection')
Packit f546b1
Packit f546b1
gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + \
Packit f546b1
    'g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);' + \
Packit f546b1
    'g_setenv("GST_REGISTRY_1.0", "/no/way/this/exists.reg", TRUE);' + \
Packit f546b1
    'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \
Packit f546b1
    'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \
Packit f546b1
    'gst_init(NULL,NULL);' ]
Packit f546b1
Packit f546b1
# Used by the *_mkenum.py helper scripts
Packit f546b1
glib_mkenums = find_program('glib-mkenums')
Packit f546b1
Packit f546b1
gst_c_args = ['-DHAVE_CONFIG_H']
Packit f546b1
if libtype == 'static'
Packit f546b1
  gst_c_args += ['-DGST_STATIC_COMPILATION']
Packit f546b1
endif
Packit f546b1
Packit f546b1
# Used in gst/parse/meson.build and below
Packit f546b1
python3 = import('python3').find_python()
Packit f546b1
Packit f546b1
bashcomp_dep = dependency('bash-completion', version : '>= 2.0', required : false)
Packit f546b1
Packit f546b1
bashcomp_found = bashcomp_dep.found()
Packit f546b1
bash_completions_dir = ''
Packit f546b1
bash_helpers_dir = ''
Packit f546b1
Packit f546b1
if bashcomp_found
Packit f546b1
  # get_pkgconfig_variable() won't let us set the prefix
Packit f546b1
  pkgconfig = find_program('pkg-config')
Packit f546b1
Packit f546b1
  runcmd = run_command(pkgconfig,
Packit f546b1
      '--define-variable=prefix=.',
Packit f546b1
      '--variable=completionsdir',
Packit f546b1
      'bash-completion')
Packit f546b1
Packit f546b1
  if (runcmd.returncode() == 0)
Packit f546b1
    bash_completions_dir = runcmd.stdout().strip()
Packit f546b1
  else
Packit f546b1
    message('Found bash-completion but the .pc file did not set \'completionsdir\'.')
Packit f546b1
    bashcomp_found = false
Packit f546b1
  endif
Packit f546b1
Packit f546b1
  runcmd = run_command(pkgconfig,
Packit f546b1
      '--define-variable=prefix=.',
Packit f546b1
      '--variable=helpersdir',
Packit f546b1
      'bash-completion')
Packit f546b1
Packit f546b1
  if (runcmd.returncode() == 0)
Packit f546b1
    bash_helpers_dir = runcmd.stdout().strip()
Packit f546b1
  else
Packit f546b1
    message('Found bash-completion, but the .pc file did not set \'helpersdir\'.')
Packit f546b1
    bashcomp_found = false
Packit f546b1
  endif
Packit f546b1
endif
Packit f546b1
Packit f546b1
subdir('gst')
Packit f546b1
subdir('libs')
Packit f546b1
subdir('plugins')
Packit f546b1
subdir('tools')
Packit f546b1
subdir('pkgconfig')
Packit f546b1
subdir('tests')
Packit f546b1
subdir('data')
Packit f546b1
Packit f546b1
# xgettext is optional (on Windows for instance)
Packit f546b1
if find_program('xgettext', required : false).found()
Packit f546b1
  subdir('po')
Packit f546b1
endif
Packit f546b1
Packit f546b1
configure_file(output : 'config.h', configuration : cdata)
Packit f546b1
Packit f546b1
if build_machine.system() == 'windows'
Packit f546b1
  message('Disabling gtk-doc while building on Windows')
Packit f546b1
elif get_option('disable_gtkdoc')
Packit f546b1
  message('gtk-doc is disabled via options')
Packit f546b1
else
Packit f546b1
  if find_program('gtkdoc-scan', required : false).found()
Packit f546b1
    subdir('docs')
Packit f546b1
  else
Packit f546b1
    message('Not building documentation as gtk-doc was not found')
Packit f546b1
  endif
Packit f546b1
endif
Packit f546b1
Packit f546b1
run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')
Packit f546b1
Packit f546b1
install_data('gst-element-check-1.0.m4', install_dir : join_paths(get_option('datadir'), 'aclocal'))