meson.build 7.24 KB
Newer Older
1
project('gst-plugins-base', 'c', 'cpp',
Sebastian Dröge's avatar
Sebastian Dröge committed
2
  version : '1.10.5',
3
  meson_version : '>= 0.35.0',
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
  default_options : [ 'warning_level=1',
                      'buildtype=debugoptimized' ])

gst_version = meson.project_version()
version_arr = gst_version.split('.')
gst_version_major = version_arr[0]
gst_version_minor = version_arr[1]
gst_version_micro = version_arr[2]
if version_arr.length() == 4
  gst_version_nano = version_arr[3]
else
  gst_version_nano = 0
endif

glib_req = '>= 2.40.0'
19
orc_req = '>= 0.4.24'
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)

api_version = '1.0'
soversion = 0
# maintaining compatibility with the previous libtool versioning
# current = minor * 100 + micro
# FIXME: should be able to convert string to int somehow so we can just do maths
libversion = '@0@.@1@.0'.format(soversion, gst_version_minor.to_int() * 100 + gst_version_micro.to_int())

plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir'))

cc = meson.get_compiler('c')

if cc.get_id() == 'msvc'
  # Ignore several spurious warnings for things gstreamer does very commonly
  # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
  # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
  # NOTE: Only add warnings here if you are sure they're spurious
  add_global_arguments('/wd4018', '/wd4244', '/wd4996', language : 'c')
  # Disable SAFESEH with MSVC for plugins and libs that use external deps that
  # are built with MinGW
  noseh_link_args = ['/SAFESEH:NO']
else
  noseh_link_args = []
endif

core_conf = configuration_data()
check_headers = [
  ['HAVE_DLFCN_H', 'dlfcn.h'],
  ['HAVE_EMMINTRIN_H', 'emmintrin.h'],
  ['HAVE_INTTYPES_H', 'inttypes.h'],
  ['HAVE_MEMORY_H', 'memory.h'],
  ['HAVE_PROCESS_H', 'process.h'],
53
  ['HAVE_SMMINTRIN_H', 'smmintrin.h'],
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
  ['HAVE_STDINT_H', 'stdint.h'],
  ['HAVE_STDLIB_H', 'stdlib.h'],
  ['HAVE_STRINGS_H', 'strings.h'],
  ['HAVE_STRING_H', 'string.h'],
  ['HAVE_SYS_SOCKET_H', 'sys/socket.h'],
  ['HAVE_SYS_STAT_H', 'sys/stat.h'],
  ['HAVE_SYS_TYPES_H', 'sys/types.h'],
  ['HAVE_SYS_WAIT_H', 'sys/wait.h'],
  ['HAVE_UNISTD_H', 'unistd.h'],
  ['HAVE_WINSOCK2_H', 'winsock2.h'],
  ['HAVE_XMMINTRIN_H', 'xmmintrin.h'],
]
foreach h : check_headers
  if cc.has_header(h.get(1))
    core_conf.set(h.get(0), 1)
  endif
endforeach

check_functions = [
  ['HAVE_DCGETTEXT', 'dcgettext'],
  ['HAVE_GMTIME_R', 'gmtime_r'],
  ['HAVE_LRINTF', 'lrintf'],
  ['HAVE_MMAP', 'mmap'],
]

foreach f : check_functions
  if cc.has_function(f.get(1))
    core_conf.set(f.get(0), 1)
  endif
endforeach

core_conf.set('SIZEOF_CHAR', cc.sizeof('char'))
core_conf.set('SIZEOF_INT', cc.sizeof('int'))
core_conf.set('SIZEOF_LONG', cc.sizeof('long'))
core_conf.set('SIZEOF_SHORT', cc.sizeof('short'))
core_conf.set('SIZEOF_VOIDP', cc.sizeof('void*'))

core_conf.set('GETTEXT_PACKAGE', '"gst-plugins-base-1.0"')
core_conf.set('PACKAGE', '"gst-plugins-base"')
core_conf.set('VERSION', '"@0@"'.format(gst_version))
core_conf.set('PACKAGE_VERSION', '"@0@"'.format(gst_version))
core_conf.set('GST_PACKAGE_NAME', '"GStreamer Base Plug-ins"')
core_conf.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"')
core_conf.set('GST_API_VERSION', '"@0@"'.format(api_version))
core_conf.set('GST_INSTALL_PLUGINS_HELPER', '"/FIXME"')
core_conf.set('GST_DATADIR', '"/FIXME"')
core_conf.set('GST_LICENSE', '"LGPL"')
# FIXME: These should be configure options
core_conf.set('DEFAULT_VIDEOSINK', '"autovideosink"')
core_conf.set('DEFAULT_AUDIOSINK', '"autoaudiosink"')

# Set whether the audioresampling method should be detected at runtime
core_conf.set('AUDIORESAMPLE_FORMAT_' + get_option('audioresample_format').to_upper(), true)

gst_plugins_base_args = ['-DHAVE_CONFIG_H']
if get_option('default_library') == 'static'
  gst_plugins_base_args += ['-DGST_STATIC_COMPILATION']
endif

libm = cc.find_library('m', required : false)
# X11 checks are for sys/ and tests/
x11_dep = dependency('x11', required : false)
# GLib checks are for the entire project
giounix_dep = dependency('gio-unix-2.0', version : glib_req, required : false)
# Almost everything that uses glib also uses gobject
glib_deps = [dependency('glib-2.0', version : glib_req),
	     dependency('gobject-2.0', version : glib_req)]
gio_dep = dependency('gio-2.0', version : glib_req)

core_conf.set('HAVE_X', x11_dep.found())
core_conf.set('HAVE_GIO_UNIX_2_0', giounix_dep.found())

runcmd = run_command('pkg-config', '--variable=giomoduledir', 'gio-2.0')
if runcmd.returncode() == 0
  core_conf.set('GIO_MODULE_DIR', '"@0@"'.format(runcmd.stdout().strip()))
endif
runcmd = run_command('pkg-config', '--variable=libdir', 'gio-2.0')
if runcmd.returncode() == 0
  core_conf.set('GIO_LIBDIR', '"@0@"'.format(runcmd.stdout().strip()))
endif
runcmd = run_command('pkg-config', '--variable=prefix', 'gio-2.0')
if runcmd.returncode() == 0
  core_conf.set('GIO_PREFIX', '"@0@"'.format(runcmd.stdout().strip()))
endif

configinc = include_directories('.')
libsinc = include_directories('gst-libs')

# To use the subproject make subprojects directory
# and put gstreamer meson git there (symlinking is fine)
gst_dep = dependency('gstreamer-1.0', version : gst_req,
  fallback : ['gstreamer', 'gst_dep'])
gst_base_dep = dependency('gstreamer-base-1.0', version : gst_req,
  fallback : ['gstreamer', 'gst_base_dep'])
gst_net_dep = dependency('gstreamer-net-1.0', version : gst_req,
  fallback : ['gstreamer', 'gst_net_dep'])
150 151 152 153
if host_machine.system() != 'windows'
  gst_check_dep = dependency('gstreamer-check-1.0', version : gst_req,
    fallback : ['gstreamer', 'gst_check_dep'])
endif
154 155 156
gst_controller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
  fallback : ['gstreamer', 'gst_controller_dep'])

157
vs_module_defs_dir = meson.current_source_dir() + '/win32/common/'
158 159 160 161 162 163 164 165 166

# Used by the *_mkenum.py helper scripts
glib_mkenums = find_program('glib-mkenums')

have_orcc = false
orcc_args = []
if get_option('use_orc') != 'no'
  need_orc = get_option('use_orc') == 'yes'
  # Used by various libraries/elements that use Orc code
167
  orc_dep = dependency('orc-0.4', version : orc_req, required : need_orc)
168
  orcc = find_program('orcc', required : need_orc)
Arun Raghavan's avatar
Arun Raghavan committed
169
  if orc_dep.found() and orcc.found()
170 171
    have_orcc = true
    orcc_args = [orcc, '--include', 'glib.h']
Arun Raghavan's avatar
Arun Raghavan committed
172
    core_conf.set('HAVE_ORC', 1)
173 174
  else
    message('Orc Compiler not found, will use backup C code')
Arun Raghavan's avatar
Arun Raghavan committed
175
    core_conf.set('DISABLE_ORC', 1)
176
  endif
Arun Raghavan's avatar
Arun Raghavan committed
177 178
else
  core_conf.set('DISABLE_ORC', 1)
179 180
endif

181 182 183 184 185 186 187 188 189
# Used to build SSE* things in audio-resampler
sse_args = '-msse'
sse2_args = '-msse2'
sse41_args = '-msse4.1'

have_sse = cc.has_argument(sse_args)
have_sse2 = cc.has_argument(sse2_args)
have_sse41 = cc.has_argument(sse41_args)

190 191 192 193 194 195 196 197
# FIXME: Meson should have a way for portably adding -fPIC when needed for use
# with static libraries that are linked into shared libraries. Or, it should
# add it by default with an option to turn it off if needed.
pic_args = ['-fPIC']
if host_machine.system() == 'windows'
  pic_args = []
endif

198 199 200 201 202 203 204 205 206 207 208 209
subdir('gst-libs')
subdir('gst')
subdir('ext')
subdir('sys')
subdir('tools')
subdir('tests')
subdir('pkgconfig')

# Use core_conf after all subdirs have set values
configure_file(input : 'config.h.meson',
  output : 'config.h',
  configuration : core_conf)
210 211 212

python3 = find_program('python3')
run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')