meson.build 7.24 KB
Newer Older
1
project('gst-editing-services', 'c',
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
2
  version : '1.15.0.1',
3
  meson_version : '>= 0.47',
4
5
6
7
8
  default_options : [ 'warning_level=1',
                      'buildtype=debugoptimized' ])

gst_version = meson.project_version()
version_arr = gst_version.split('.')
9
10
11
12
13
14
15
gst_version = meson.project_version()
version_arr = gst_version.split('.')
gst_version_major = version_arr[0].to_int()
gst_version_minor = version_arr[1].to_int()
gst_version_micro = version_arr[2].to_int()
 if version_arr.length() == 4
  gst_version_nano = version_arr[3].to_int()
16
17
18
19
20
21
22
23
else
  gst_version_nano = 0
endif

apiversion = '1.0'
soversion = 0
# maintaining compatibility with the previous libtool versioning
# current = minor * 100 + micro
24
25
26
curversion = gst_version_minor * 100 + gst_version_micro
libversion = '@0@.@1@.0'.format(soversion, curversion)
osxversion = curversion + 1
27
28
29
30
31
32
33
34
35
36

glib_req = '>= 2.40.0'
gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)

cc = meson.get_compiler('c')
# 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
if cc.get_id() == 'msvc'
Scott D Phillips's avatar
Scott D Phillips committed
37
38
39
40
41
42
  add_project_arguments(
      '/wd4018', # implicit signed/unsigned conversion
      '/wd4146', # unary minus on unsigned (beware INT_MIN)
      '/wd4244', # lossy type conversion (e.g. double -> int)
      '/wd4305', # truncating type conversion (e.g. double -> float)
      language : 'c')
43
44
endif

45
46
47
48
if cc.has_link_argument('-Wl,-Bsymbolic-functions')
  add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif

49
50
51
52
53
# Symbol visibility
if cc.has_argument('-fvisibility=hidden')
  add_project_arguments('-fvisibility=hidden', language: 'c')
endif

54
55
56
57
58
# Disable strict aliasing
if cc.has_argument('-fno-strict-aliasing')
  add_project_arguments('-fno-strict-aliasing', language: 'c')
endif

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
cdata = configuration_data()
cdata.set('VERSION', '"@0@"'.format(gst_version))
cdata.set('PACKAGE', '"gst-editing-services"')
cdata.set('PACKAGE_VERSION', '"@0@"'.format(gst_version))
cdata.set('PACKAGE_BUGREPORT', '"http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer"')
cdata.set('PACKAGE_NAME', '"GStreamer Editing Services"')
cdata.set('GST_PACKAGE_NAME', '"GStreamer Editing Services"')
cdata.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"')
cdata.set('GST_LICENSE', '"LGPL"')

# Mandatory GST deps
gst_dep = dependency('gstreamer-' + apiversion, version : gst_req,
    fallback : ['gstreamer', 'gst_dep'])
gstpbutils_dep = dependency('gstreamer-pbutils-' + apiversion, version : gst_req,
    fallback : ['gst-plugins-base', 'pbutils_dep'])
gstvideo_dep = dependency('gstreamer-video-' + apiversion, version : gst_req,
    fallback : ['gst-plugins-base', 'video_dep'])
gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
    fallback : ['gstreamer', 'gst_base_dep'])
78
79
if host_machine.system() != 'windows'
  gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req,
80
81
    required : get_option('tests'),
    fallback : ['gstreamer', 'gst_check_dep'])
82
endif
83
84
gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
  fallback : ['gstreamer', 'gst_controller_dep'])
85
86
gstvalidate_dep = dependency('gst-validate-1.0', version : gst_req, required : false,
  fallback : ['gst-devtools', 'validate_dep'])
87

88
gio_dep = dependency('gio-2.0', fallback: ['glib', 'libgio_dep'])
89
90
91
92
93
94
libxml_dep = dependency('libxml-2.0')

# TODO Properly port to Gtk 3
# gtk_dep = dependency('gtk+-3.0', required : false)

libges_deps = [gst_dep, gstbase_dep, gstvideo_dep, gstpbutils_dep,
95
               gstcontroller_dep, gio_dep, libxml_dep]
96
97
98
99
100
101

if gstvalidate_dep.found()
    libges_deps = libges_deps + [gstvalidate_dep]
    cdata.set('HAVE_GST_VALIDATE', 1)
endif

102
configure_file(output : 'config.h', configuration : cdata)
103
104


105
gir = find_program('g-ir-scanner', required : get_option('introspection'))
106
107
108
gnome = import('gnome')

# Fixme, not very elegant.
109
build_gir = gir.found() and not meson.is_cross_build()
110
111
112
113
114
115
gir_init_section = [ '--add-init-section=' + \
    'extern void gst_init(gint*,gchar**);' + \
    'extern void ges_init(void);' + \
    'g_setenv("GST_REGISTRY_1.0", "/no/way/this/exists.reg", TRUE);' + \
    'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \
    'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \
116
    'g_setenv("GST_DEBUG", "0", TRUE);' + \
117
118
    'gst_init(NULL,NULL);' + \
    'ges_init();' ]
119

Thibault Saunier's avatar
Thibault Saunier committed
120
ges_c_args = ['-DHAVE_CONFIG_H', '-DG_LOG_DOMAIN="GES"']
121
122
plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir'))

123
if gst_dep.type_name() == 'internal'
124
  gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
125
else
126
  # We can't check that in the case of subprojects as we won't
127
  # be able to build against an internal dependency (which is not built yet)
128
  gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep)
129
130
131
132
endif

if gst_debug_disabled and cc.has_argument('-Wno-unused')
  add_project_arguments('-Wno-unused', language: 'c')
133
134
endif

135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
warning_flags = [
  '-Wmissing-declarations',
  '-Wmissing-prototypes',
  '-Wredundant-decls',
  '-Wundef',
  '-Wwrite-strings',
  '-Wformat',
  '-Wformat-security',
  '-Winit-self',
  '-Wmissing-include-dirs',
  '-Waddress',
  '-Wno-multichar',
  '-Wdeclaration-after-statement',
  '-Wvla',
  '-Wpointer-arith',
]

foreach extra_arg : warning_flags
  if cc.has_argument (extra_arg)
    add_project_arguments([extra_arg], language: 'c')
  endif
endforeach

158
159
160
161
162
163
164
configinc = include_directories('.')
subdir('ges')
subdir('plugins')
subdir('tools')
subdir('pkgconfig')
subdir('tests')
subdir('examples')
165

166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
override_detector = '''
import sys
import os

prefix = sys.argv[1]
version = sys.version_info

# If we are installing in the same prefix as PyGobject
# make sure to install in the right place.
import gi.overrides

overrides_path = os.path.dirname(gi.overrides.__file__)
if os.path.commonprefix([overrides_path, prefix]) == prefix:
    print(overrides_path)
    exit(0)

# Otherwise follow python's way of install site packages inside
# the provided prefix
if os.name == 'posix':
    print(os.path.join(
        prefix, 'lib', 'python%d.%d' % (version.major, version.minor),
        'site-packages', 'gi', 'overrides'))
else:
    print(os.path.join(
        prefix, 'Lib', 'Python%d%d' % (version.major, version.minor),
        'site-packages', 'gi', 'overrides'))
'''
python3 = import('python3').find_python()
pygi_override_dir = get_option('pygi-overrides-dir')
if pygi_override_dir == ''
    cres = run_command(python3, '-c', override_detector, get_option('prefix'))
    if cres.returncode() == 0
      pygi_override_dir = cres.stdout().strip()
    endif
    if cres.stderr() != ''
        message(cres.stderr())
    endif
endif

if pygi_override_dir != ''
  message('pygobject overrides directory ' + pygi_override_dir)
  subdir('bindings/python')
endif

210
211
212
if build_machine.system() == 'windows'
  message('Disabling gtk-doc while building on Windows')
else
213
  if find_program('gtkdoc-scan', required : get_option('gtk_doc')).found()
214
215
    subdir('docs')
  else
Thibault Saunier's avatar
Thibault Saunier committed
216
    message('Not building documentation as gtk-doc was not found')
217
218
  endif
endif
219
220

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