Back to development
[platform/upstream/gstreamer.git] / configure.ac
1 AC_PREREQ([2.69])
2
3 dnl initialize autoconf
4 dnl when going to/from release please set the nano (fourth number) right !
5 dnl releases only do Wall, git and prerelease does Werror too
6 AC_INIT([GStreamer Bad Plug-ins],[1.11.2.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
7
8 AG_GST_INIT
9
10 dnl initialize automake
11 AM_INIT_AUTOMAKE([-Wno-portability 1.14 no-dist-gzip dist-xz tar-ustar subdir-objects])
12
13 dnl define PACKAGE_VERSION_* variables
14 AS_VERSION
15
16 dnl check if this is a release version
17 AS_NANO(GST_GIT="no", GST_GIT="yes")
18
19 dnl can autoconf find the source ?
20 AC_CONFIG_SRCDIR([docs/plugins/gst-plugins-bad-plugins-docs.sgml])
21
22 dnl define the output header for config
23 AC_CONFIG_HEADERS([config.h])
24
25 dnl AM_MAINTAINER_MODE only provides the option to configure to enable it
26 AM_MAINTAINER_MODE([enable])
27
28 dnl sets host_* variables
29 AC_CANONICAL_HOST
30
31 dnl use pretty build output with automake >= 1.11
32 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],
33   [AM_DEFAULT_VERBOSITY=1
34    AC_SUBST(AM_DEFAULT_VERBOSITY)])
35
36 dnl PKG_CONFIG_SYSROOT_DIR is a valid environment variable
37 m4_pattern_allow(PKG_CONFIG_SYSROOT_DIR)
38
39 dnl our libraries and install dirs use GST_API_VERSION in the filename
40 dnl to allow side-by-side installation of different API versions
41 GST_API_VERSION=1.0
42 AC_SUBST(GST_API_VERSION)
43 AC_DEFINE_UNQUOTED(GST_API_VERSION, "$GST_API_VERSION",
44   [GStreamer API Version])
45
46 AG_GST_LIBTOOL_PREPARE
47
48 dnl CURRENT, REVISION, AGE
49 dnl - library source changed -> increment REVISION
50 dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
51 dnl - interfaces added -> increment AGE
52 dnl - interfaces removed -> AGE = 0
53 dnl sets GST_LT_LDFLAGS
54 AS_LIBTOOL(GST, 1102, 0, 1102)
55
56 dnl *** required versions of GStreamer stuff ***
57 GST_REQ=1.11.2.1
58 GSTPB_REQ=1.11.2.1
59
60 dnl *** autotools stuff ****
61
62 dnl allow for different autotools
63 AS_AUTOTOOLS_ALTERNATE
64
65 dnl Add parameters for aclocal
66 AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4")
67
68 dnl set up gettext
69 dnl the version check needs to stay here because autopoint greps for it
70 AM_GNU_GETTEXT_VERSION([0.17])
71 AM_GNU_GETTEXT([external])
72 AG_GST_GETTEXT([gst-plugins-bad-$GST_API_VERSION])
73
74 dnl *** check for arguments to configure ***
75
76 AG_GST_ARG_DISABLE_FATAL_WARNINGS
77 AG_GST_ARG_ENABLE_EXTRA_CHECKS
78
79 AG_GST_ARG_DEBUG
80 AG_GST_ARG_PROFILING
81 AG_GST_ARG_VALGRIND
82 AG_GST_ARG_GCOV
83
84 AG_GST_ARG_EXAMPLES
85
86 AG_GST_ARG_WITH_PKG_CONFIG_PATH
87 AG_GST_ARG_WITH_PACKAGE_NAME
88 AG_GST_ARG_WITH_PACKAGE_ORIGIN
89
90 AG_GST_ARG_WITH_PLUGINS
91
92 AG_GST_ARG_ENABLE_EXTERNAL
93
94 AG_GST_ARG_ENABLE_EXPERIMENTAL
95
96 AG_GST_PKG_CONFIG_PATH
97
98 dnl *** checks for platform ***
99 AG_GST_PLATFORM
100
101 dnl * hardware/architecture *
102
103 dnl common/m4/gst-arch.m4
104 dnl check CPU type
105 AG_GST_ARCH
106
107 dnl Determine endianness
108 AC_C_BIGENDIAN
109
110 dnl *** checks for programs ***
111
112 dnl find a compiler
113 AC_PROG_CC
114 AC_PROG_CC_STDC
115
116 dnl determine c++ compiler
117 AC_PROG_CXX
118 dnl determine if c++ is available on this system
119 AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
120
121 AC_PROG_OBJC
122
123 dnl check if the compiler supports '-c' and '-o' options
124 AM_PROG_CC_C_O
125
126 dnl check if the compiler supports do while(0) macros
127 AG_GST_CHECK_DOWHILE_MACROS
128
129 AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
130 AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
131
132 dnl check for gobject-introspection
133 GOBJECT_INTROSPECTION_CHECK([1.31.1])
134
135 dnl check for documentation tools
136 GTK_DOC_CHECK([1.12])
137 AG_GST_PLUGIN_DOCS([1.12])
138
139 dnl *** checks for libraries ***
140
141 dnl check for libm, for sin() etc.
142 LT_LIB_M
143 AC_SUBST(LIBM)
144
145 AC_FUNC_MMAP
146
147 dnl check for pthreads
148 AX_PTHREAD
149
150 dnl *** checks for header files ***
151
152 AC_CHECK_HEADERS([unistd.h], HAVE_UNISTD_H=yes)
153 AM_CONDITIONAL(HAVE_UNISTD_H, test "x$HAVE_UNISTD_H" = "xyes")
154
155 if test "x$HAVE_UNISTD_H" != "xyes"; then
156   GST_PLUGINS_SELECTED=`echo $GST_PLUGINS_SELECTED | $SED -e s/festival//`
157 fi
158
159 AC_CHECK_HEADERS([sys/time.h])
160
161 dnl used by ext/dts
162 AX_CREATE_STDINT_H
163
164 AC_CHECK_HEADERS([pthread.h], HAVE_PTHREAD_H=yes)
165 AM_CONDITIONAL(HAVE_PTHREAD_H, test "x$HAVE_PTHREAD_H" = "xyes")
166
167 dnl *** checks for types/defines ***
168
169 dnl *** checks for structures ***
170
171 dnl *** checks for compiler characteristics ***
172
173 dnl *** checks for library functions ***
174 AC_CHECK_FUNCS([gmtime_r])
175
176 dnl *** checks for headers ***
177 AC_CHECK_HEADERS([sys/utsname.h])
178
179 dnl *** checks for dependency libraries ***
180
181 dnl *** checks for socket and nsl libraries ***
182 AC_CHECK_FUNC(socket,,[AC_CHECK_LIB(socket,socket)])
183 AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
184
185 dnl GLib is required
186 GLIB_REQ=2.40.0
187 AG_GST_GLIB_CHECK([$GLIB_REQ])
188
189 dnl checks for gstreamer
190 dnl uninstalled is selected preferentially -- see pkg-config(1)
191 AG_GST_CHECK_GST($GST_API_VERSION, [$GST_REQ], yes)
192 AG_GST_CHECK_GST_BASE($GST_API_VERSION, [$GST_REQ], yes)
193 AG_GST_CHECK_GST_CHECK($GST_API_VERSION, [$GST_REQ], no)
194 AG_GST_CHECK_GST_CONTROLLER($GST_API_VERSION, [$GST_REQ], yes)
195 AG_GST_CHECK_GST_NET($GST_API_VERSION, [$GST_REQ], yes)
196 AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-[$GST_API_VERSION], [$GST_REQ], yes)
197 AG_GST_PKG_CHECK_MODULES(GST_AUDIO, gstreamer-audio-[$GST_API_VERSION], [$GST_REQ], yes)
198 AG_GST_PKG_CHECK_MODULES(GST_PBUTILS, gstreamer-pbutils-[$GST_API_VERSION], [$GST_REQ], yes)
199
200 AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
201
202 AG_GST_CHECK_GST_PLUGINS_BASE($GST_API_VERSION, [$GSTPB_REQ], yes)
203
204 dnl check for uninstalled plugin directories for unit tests
205 AG_GST_CHECK_UNINSTALLED_SETUP([
206   AG_GST_CHECK_GST_PLUGINS_GOOD($GST_API_VERSION, [0.11.0])
207   AG_GST_CHECK_GST_PLUGINS_UGLY($GST_API_VERSION, [0.11.0])
208   AG_GST_CHECK_GST_PLUGINS_LIBAV($GST_API_VERSION, [0.11.0])
209 ])
210
211 dnl Check for documentation xrefs
212 GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
213 GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-$GST_API_VERSION`"
214 GSTPB_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-plugins-base-$GST_API_VERSION`"
215 AC_SUBST(GLIB_PREFIX)
216 AC_SUBST(GST_PREFIX)
217 AC_SUBST(GSTPB_PREFIX)
218
219 dnl GTK is optional and used in examples
220 HAVE_GTK=NO
221 GTK2_REQ=2.14.0
222 GTK3_REQ=2.91.3
223 if test "x$BUILD_EXAMPLES" = "xyes"; then
224   AC_MSG_CHECKING([which gtk+ version to compile examples against (optional)])
225   AC_ARG_WITH([gtk],
226     AS_HELP_STRING([--with-gtk=3.0|2.0],[which gtk+ version to compile against (default: 2.0)]),
227     [case "$with_gtk" in
228         2.0) GTK_REQ=$GTK2_REQ ;;
229         3.0) GTK_REQ=$GTK3_REQ ;;
230         *) AC_MSG_ERROR([invalid gtk+ version specified]);;
231     esac],
232     [with_gtk=2.0
233      GTK_REQ=$GTK2_REQ])
234   AC_MSG_RESULT([$with_gtk (>= $GTK_REQ)])
235   PKG_CHECK_MODULES(GTK, gtk+-x11-$with_gtk >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no)
236   AC_SUBST(GTK_LIBS)
237   AC_SUBST(GTK_CFLAGS)
238 fi
239 AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
240
241 dnl Check for -Bsymbolic-functions linker flag used to avoid
242 dnl intra-library PLT jumps, if available.
243 AC_ARG_ENABLE(Bsymbolic,
244               [AS_HELP_STRING([--disable-Bsymbolic],[avoid linking with -Bsymbolic])],,
245               [SAVED_LDFLAGS="${LDFLAGS}" SAVED_LIBS="${LIBS}"
246                AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
247                LDFLAGS=-Wl,-Bsymbolic-functions
248                LIBS=
249                AC_TRY_LINK([], [return 0],
250                            AC_MSG_RESULT(yes)
251                            enable_Bsymbolic=yes,
252                            AC_MSG_RESULT(no)
253                            enable_Bsymbolic=no)
254                LDFLAGS="${SAVED_LDFLAGS}" LIBS="${SAVED_LIBS}"])
255
256 dnl *** set variables based on configure arguments ***
257
258 dnl GTK is optional and used in examples
259 HAVE_GTK3=NO
260 if test "x$BUILD_EXAMPLES" = "xyes"; then
261   PKG_CHECK_MODULES(GTK3, gtk+-3.0 >= 3.4, HAVE_GTK3=yes, HAVE_GTK3=no)
262   if test "x$HAVE_GTK3" = "xyes"; then
263     HAVE_GTK=yes
264     GTK_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0`
265     AC_SUBST(GTK_VERSION)
266     GTK_PREFIX=`$PKG_CONFIG --variable=prefix gdk-pixbuf-2.0`
267     AC_SUBST(GTK_BASE_DIR)
268   fi
269 fi
270 AC_SUBST(GTK3_LIBS)
271 AC_SUBST(GTK3_CFLAGS)
272 AC_SUBST(HAVE_GTK3)
273 AM_CONDITIONAL(HAVE_GTK3, test "x$HAVE_GTK3" = "xyes")
274
275 dnl clutter is optional and used in examples
276 HAVE_CLUTTER=no
277 HAVE_CLUTTER_X11=no
278 HAVE_CLUTTER_GLX=no
279 if test "x$BUILD_EXAMPLES" = "xyes"; then
280   PKG_CHECK_MODULES(CLUTTER, clutter-1.0 >= 1.8, HAVE_CLUTTER=yes, HAVE_CLUTTER=no)
281   AC_SUBST(CLUTTER_LIBS)
282   AC_SUBST(CLUTTER_CFLAGS)
283   AC_SUBST(HAVE_CLUTTER)
284
285   PKG_CHECK_MODULES(CLUTTER_GLX, clutter-glx-1.0 >= 1.8, HAVE_CLUTTER_GLX=yes, HAVE_CLUTTER_GLX=no)
286   AC_SUBST(CLUTTER_GLX_LIBS)
287   AC_SUBST(CLUTTER_GLX_CFLAGS)
288   AC_SUBST(HAVE_CLUTTER_GLX)
289
290   PKG_CHECK_MODULES(CLUTTER_X11, clutter-x11-1.0 >= 1.8, HAVE_CLUTTER_X11=yes, HAVE_CLUTTER_X11=no)
291   AC_SUBST(CLUTTER_X11_LIBS)
292   AC_SUBST(CLUTTER_X11_CFLAGS)
293   AC_SUBST(HAVE_CLUTTER_X11)
294 fi
295 AM_CONDITIONAL(HAVE_CLUTTER, test "x$HAVE_CLUTTER" = "xyes")
296 AM_CONDITIONAL(HAVE_CLUTTER_GLX, test "x$HAVE_CLUTTER_GLX" = "xyes")
297 AM_CONDITIONAL(HAVE_CLUTTER_X11, test "x$HAVE_CLUTTER_X11" = "xyes")
298
299 dnl used in the gl/clutteractor example
300 if test "x$BUILD_EXAMPLES" = "xyes"; then
301   PKG_CHECK_MODULES(XCOMPOSITE, xcomposite, HAVE_XCOMPOSITE=yes, HAVE_XCOMPOSITE=no)
302   AC_SUBST(XCOMPOSITE_CFLAGS)
303   AC_SUBST(XCOMPOSITE_LIBS)
304 fi
305 AM_CONDITIONAL(HAVE_XCOMPOSITE, test "x$HAVE_XCOMPOSITE" = "xyes")
306
307 dnl graphene-1.0 is optional and used in gltransformation
308 HAVE_GRAPHENE=NO
309 PKG_CHECK_MODULES(GRAPHENE, graphene-1.0 >= 1.4.0, HAVE_GRAPHENE=yes, HAVE_GRAPHENE=no)
310 if test "x$HAVE_GRAPHENE" = "xyes"; then
311   AC_DEFINE(HAVE_GRAPHENE, [1] , [Use graphene])
312 fi
313 AC_SUBST(HAVE_GRAPHENE)
314 AC_SUBST(GRAPHENE_LIBS)
315 AC_SUBST(GRAPHENE_CFLAGS)
316 AM_CONDITIONAL(HAVE_GRAPHENE, test "x$HAVE_GRAPHENE" = "xyes")
317
318
319 dnl sdl is optional and used in examples
320 HAVE_SDL=NO
321 if test "x$BUILD_EXAMPLES" = "xyes"; then
322   PKG_CHECK_MODULES(SDL, sdl >= 1.2.0, HAVE_SDL=yes, HAVE_SDL=no)
323   AC_SUBST(SDL_LIBS)
324   AC_SUBST(SDL_CFLAGS)
325   AC_SUBST(SDL_CLUTTER)
326 fi
327 AM_CONDITIONAL(HAVE_SDL, test "x$HAVE_SDL" = "xyes")
328
329
330 dnl Needed for GtkBuilder to autoconnect signals
331 PKG_CHECK_MODULES(GMODULE_EXPORT, gmodule-export-2.0, HAVE_GMODULE_EXPORT=yes, HAVE_GMODULE_EXPORT=no)
332
333 dnl Needed by plugins that use g_module_*() API
334 PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0)
335
336 dnl x11 is optional for librfb
337 HAVE_X11=NO
338 PKG_CHECK_MODULES(X11, x11, HAVE_X11=yes, HAVE_X11=no)
339 AC_SUBST(X11_LIBS)
340 AC_SUBST(X11_CFLAGS)
341 AC_SUBST(HAVE_X11)
342 AM_CONDITIONAL(HAVE_X11, test "x$HAVE_X11" = "xyes")
343 if test "x$HAVE_X11" = "xyes"; then
344   AC_DEFINE(HAVE_X11, 1, [Define if you have X11 library])
345 fi
346
347 dnl exif (used on jifmux tests) ****
348 PKG_CHECK_MODULES(EXIF, libexif >= 0.6.16, HAVE_EXIF="yes", HAVE_EXIF="no")
349 AC_SUBST(EXIF_LIBS)
350 AC_SUBST(EXIF_CFLAGS)
351 AM_CONDITIONAL(USE_EXIF, test "x$HAVE_EXIF" = "xyes")
352
353 AG_GST_CHECK_FEATURE(IQA, [iqa], iqa , [
354   PKG_CHECK_MODULES(DSSIM, dssim, [
355     HAVE_DSSIM="yes"
356     HAVE_IQA="yes"
357   ], [
358     HAVE_DSSIM="no"
359     HAVE_IQA="no"
360   ])
361
362   if test "x$HAVE_DSSIM" = "xyes"; then
363     AC_DEFINE(HAVE_DSSIM, 1, [Define if you have dssim library])
364   fi
365   AC_SUBST(DSSIM_LIBS)
366   AC_SUBST(DSSIM_CFLAGS)
367 ])
368 AM_CONDITIONAL(HAVE_DSSIM, test "x$HAVE_DSSIM" = "xyes")
369
370 dnl Orc
371 ORC_CHECK([0.4.17])
372
373 dnl set license and copyright notice
374 GST_LICENSE="LGPL"
375 AC_DEFINE_UNQUOTED(GST_LICENSE, "$GST_LICENSE", [GStreamer license])
376 AC_SUBST(GST_LICENSE)
377
378 dnl define LIBDIR so we can inform people where we live
379 AS_AC_EXPAND(LIBDIR, $libdir)
380 AC_DEFINE_UNQUOTED(LIBDIR, "$LIBDIR", [library dir])
381
382 dnl set location of plugin directory
383 AG_GST_SET_PLUGINDIR
384
385 dnl set release date/time
386 AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO([$PACKAGE_VERSION_NANO],
387   ["${srcdir}/gst-plugins-bad.doap"],
388   [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO])
389
390 dnl build static plugins or not
391 AC_MSG_CHECKING([whether to build static plugins or not])
392 AC_ARG_ENABLE(
393   static-plugins,
394   AC_HELP_STRING(
395     [--enable-static-plugins],
396     [build static plugins @<:@default=no@:>@]),
397   [AS_CASE(
398     [$enableval], [no], [], [yes], [],
399     [AC_MSG_ERROR([bad value "$enableval" for --enable-static-plugins])])],
400   [enable_static_plugins=no])
401 AC_MSG_RESULT([$enable_static_plugins])
402 if test "x$enable_static_plugins" = xyes; then
403   AC_DEFINE(GST_PLUGIN_BUILD_STATIC, 1,
404     [Define if static plugins should be built])
405   GST_PLUGIN_LIBTOOLFLAGS=""
406 else
407   GST_PLUGIN_LIBTOOLFLAGS="--tag=disable-static"
408 fi
409 AC_SUBST(GST_PLUGIN_LIBTOOLFLAGS)
410 AM_CONDITIONAL(GST_PLUGIN_BUILD_STATIC, test "x$enable_static_plugins" = "xyes")
411
412 dnl If only building static libraries, define GST_STATIC_COMPILATION. This is
413 dnl needed only on Windows, but it doesn't hurt to have it everywhere.
414 if test x$enable_static = xyes -a x$enable_shared = xno; then
415   GST_STATIC_CFLAGS="-DGST_STATIC_COMPILATION"
416 fi
417
418 AC_ARG_WITH([player-tests],
419   AS_HELP_STRING([--with-player-tests],[Enable GstPlayer tests that need network access (default: no)]))
420 if test x$with_player_tests = xyes; then
421   AC_PATH_PROG([WGET], [wget], no)
422   if test x$WGET = xno; then
423     AC_MSG_WARN([wget required for GstPlayer tests but not found - disabling])
424     with_player_tests=no
425   fi
426 fi
427 AM_CONDITIONAL(WITH_GST_PLAYER_TESTS, test "x$with_player_tests" = "xyes")
428
429 # set by AG_GST_PARSE_SUBSYSTEM_DISABLES above
430 dnl make sure it doesn't complain about unused variables if debugging is disabled
431 NO_WARNINGS=""
432 AG_GST_CHECK_GST_DEBUG_DISABLED([NO_WARNINGS="-Wno-unused"], [NO_WARNINGS=""])
433
434 dnl define an ERROR_CFLAGS Makefile variable
435 dnl -Waggregate-return - libexif returns aggregates
436 dnl -Wundef - Windows headers check _MSC_VER unconditionally
437 AG_GST_SET_ERROR_CFLAGS($FATAL_WARNINGS, [
438     -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls
439     -Wwrite-strings -Wformat-security -Wold-style-definition
440     -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar
441     -Wnested-externs $NO_WARNINGS])
442
443 dnl define an ERROR_CXXFLAGS Makefile variable
444 AG_GST_SET_ERROR_CXXFLAGS($FATAL_WARNINGS, [
445     -Wmissing-declarations -Wredundant-decls
446     -Wwrite-strings -Wformat-nonliteral -Wformat-security
447     -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar $NO_WARNINGS])
448
449 dnl define an ERROR_OBJCFLAGS Makefile variable
450 AG_GST_SET_ERROR_OBJCFLAGS($FATAL_WARNINGS, [
451     -Wmissing-declarations -Wredundant-decls
452     -Wwrite-strings -Wformat-nonliteral -Wformat-security
453     -Winit-self -Wmissing-include-dirs -Wno-multichar $NO_WARNINGS])
454
455 dnl define correct level for debugging messages
456 AG_GST_SET_LEVEL_DEFAULT($GST_GIT)
457
458 dnl used in examples
459 AG_GST_DEFAULT_ELEMENTS
460
461 dnl *** plug-ins to include ***
462
463 dnl these are all the gst plug-ins, compilable without additional libs
464 AG_GST_CHECK_PLUGIN(accurip)
465 AG_GST_CHECK_PLUGIN(adpcmdec)
466 AG_GST_CHECK_PLUGIN(adpcmenc)
467 AG_GST_CHECK_PLUGIN(aiff)
468 AG_GST_CHECK_PLUGIN(videoframe_audiolevel)
469 AG_GST_CHECK_PLUGIN(asfmux)
470 AG_GST_CHECK_PLUGIN(audiobuffersplit)
471 AG_GST_CHECK_PLUGIN(audiofxbad)
472 AG_GST_CHECK_PLUGIN(audiomixer)
473 AG_GST_CHECK_PLUGIN(audiomixmatrix)
474 AG_GST_CHECK_PLUGIN(compositor)
475 AG_GST_CHECK_PLUGIN(audiovisualizers)
476 AG_GST_CHECK_PLUGIN(autoconvert)
477 AG_GST_CHECK_PLUGIN(bayer)
478 AG_GST_CHECK_PLUGIN(camerabin2)
479 AG_GST_CHECK_PLUGIN(coloreffects)
480 AG_GST_CHECK_PLUGIN(debugutils)
481 AG_GST_CHECK_PLUGIN(dvbsuboverlay)
482 AG_GST_CHECK_PLUGIN(dvdspu)
483 AG_GST_CHECK_PLUGIN(festival)
484 AG_GST_CHECK_PLUGIN(fieldanalysis)
485 AG_GST_CHECK_PLUGIN(freeverb)
486 AG_GST_CHECK_PLUGIN(frei0r)
487 AG_GST_CHECK_PLUGIN(gaudieffects)
488 AG_GST_CHECK_PLUGIN(geometrictransform)
489 AG_GST_CHECK_PLUGIN(gdp)
490 AG_GST_CHECK_PLUGIN(id3tag)
491 AG_GST_CHECK_PLUGIN(inter)
492 AG_GST_CHECK_PLUGIN(interlace)
493 AG_GST_CHECK_PLUGIN(ivfparse)
494 AG_GST_CHECK_PLUGIN(ivtc)
495 AG_GST_CHECK_PLUGIN(jp2kdecimator)
496 AG_GST_CHECK_PLUGIN(jpegformat)
497 AG_GST_CHECK_PLUGIN(librfb)
498 AG_GST_CHECK_PLUGIN(midi)
499 AG_GST_CHECK_PLUGIN(mpegdemux)
500 AG_GST_CHECK_PLUGIN(mpegtsdemux)
501 AG_GST_CHECK_PLUGIN(mpegtsmux)
502 AG_GST_CHECK_PLUGIN(mpegpsmux)
503 AG_GST_CHECK_PLUGIN(mxf)
504 AG_GST_CHECK_PLUGIN(netsim)
505 AG_GST_CHECK_PLUGIN(onvif)
506 AG_GST_CHECK_PLUGIN(pcapparse)
507 AG_GST_CHECK_PLUGIN(pnm)
508 AG_GST_CHECK_PLUGIN(rawparse)
509 AG_GST_CHECK_PLUGIN(removesilence)
510 AG_GST_CHECK_PLUGIN(sdp)
511 AG_GST_CHECK_PLUGIN(segmentclip)
512 AG_GST_CHECK_PLUGIN(siren)
513 AG_GST_CHECK_PLUGIN(smooth)
514 AG_GST_CHECK_PLUGIN(speed)
515 AG_GST_CHECK_PLUGIN(subenc)
516 AG_GST_CHECK_PLUGIN(stereo)
517 AG_GST_CHECK_PLUGIN(timecode)
518 AG_GST_CHECK_PLUGIN(videofilters)
519 AG_GST_CHECK_PLUGIN(videoparsers)
520 AG_GST_CHECK_PLUGIN(videosignal)
521 AG_GST_CHECK_PLUGIN(vmnc)
522 AG_GST_CHECK_PLUGIN(y4m)
523 AG_GST_CHECK_PLUGIN(yadif)
524
525 dnl *** plug-ins to exclude ***
526
527 AC_CHECK_HEADER(AVFoundation/AVFoundation.h, HAVE_AVFOUNDATION="yes", HAVE_AVFOUNDATION="no", [-])
528 AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IOS="no", [-])
529 AC_CHECK_HEADER(VideoToolbox/VideoToolbox.h, HAVE_VIDEOTOOLBOX="yes", HAVE_VIDEOTOOLBOX="no", [-])
530 AC_CHECK_HEADER(QTKit/QTKit.h, HAVE_QTKIT="yes", HAVE_QTKIT="no", [-])
531
532 if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
533   old_LIBS=$LIBS
534   LIBS="$LIBS -framework VideoToolbox"
535   AC_CHECK_FUNC(VTCompressionSessionPrepareToEncodeFrames, [
536     AC_DEFINE(HAVE_VIDEOTOOLBOX_10_9_6, 1, [Define if building with VideoToolbox >= 10.9.6])
537   ], [
538   ])
539   LIBS=$old_LIBS
540 fi
541
542 AM_CONDITIONAL(HAVE_AVFOUNDATION, test "x$HAVE_AVFOUNDATION" = "xyes")
543 if test "x$HAVE_AVFOUNDATION" = "xyes"; then
544   AC_DEFINE(HAVE_AVFOUNDATION, 1, [Define if building with AVFoundation])
545 fi
546
547 AM_CONDITIONAL(HAVE_IOS, test "x$HAVE_IOS" = "xyes")
548 if test "x$HAVE_IOS" = "xyes"; then
549   AC_DEFINE(HAVE_IOS, 1, [Define if building for Apple iOS])
550 fi
551
552 AM_CONDITIONAL(HAVE_VIDEOTOOLBOX, test "x$HAVE_VIDEOTOOLBOX" = "xyes")
553 if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
554   AC_DEFINE(HAVE_VIDEOTOOLBOX, 1, [Define if building with VideoToolbox])
555 fi
556
557 AM_CONDITIONAL(HAVE_QTKIT, test "x$HAVE_QTKIT" = "xyes")
558 if test "x$HAVE_QTKIT" = "xyes"; then
559   AC_DEFINE(HAVE_QTKIT, 1, [Define if building with QTKit])
560 fi
561 dnl disable gst plugins we might not be able to build on this
562 dnl platform: (ugly but minimally invasive)
563 dnl FIXME: maybe move to sys, or make work with winsock2
564 AC_CHECK_HEADERS([sys/socket.h], HAVE_SYS_SOCKET_H=yes)
565 AC_CHECK_HEADERS([winsock2.h], HAVE_WINSOCK2_H=yes)
566
567 if test "x$HAVE_WINSOCK2_H" = "xyes"; then
568   WINSOCK2_LIBS="-lws2_32"
569   AC_SUBST(WINSOCK2_LIBS)
570 fi
571
572 dnl *** opengl ***
573 AC_ARG_ENABLE([opengl],
574      [  --enable-opengl         Enable Desktop OpenGL support @<:@default=auto@:>@],
575      [case "${enableval}" in
576        yes)  NEED_GL=yes ;;
577        no)   NEED_GL=no ;;
578        auto) NEED_GL=auto ;;
579        *) AC_MSG_ERROR([bad value ${enableval} for --enable-opengl]) ;;
580      esac],[NEED_GL=auto])
581
582 AC_ARG_WITH([opengl-module-name],
583   AS_HELP_STRING([--with-opengl-module-name],[library module name for OpenGL (default: libGL)]))
584 if test x$with_opengl_module_name != x; then
585   AC_DEFINE_UNQUOTED(GST_GL_LIBGL_MODULE_NAME, "$with_opengl_module_name", [OpenGL module name])
586 fi
587
588 AC_ARG_ENABLE([gles2],
589      [  --enable-gles2          Enable OpenGL|ES 2.0 support @<:@default=auto@:>@],
590      [case "${enableval}" in
591        yes)  NEED_GLES2=yes ;;
592        no)   NEED_GLES2=no ;;
593        auto) NEED_GLES2=auto ;;
594        *) AC_MSG_ERROR([bad value ${enableval} for --enable-gles2]) ;;
595      esac],[NEED_GLES2=auto])
596
597 AC_ARG_WITH([gles2-module-name],
598   AS_HELP_STRING([--with-gles2-module-name],[library module name for GLES2 (default: libGLESv2)]))
599 if test x$with_gles2_module_name != x; then
600   AC_DEFINE_UNQUOTED(GST_GL_LIBGLESV2_MODULE_NAME, "$with_gles2_module_name", [GLES2 module name])
601 fi
602
603 AC_ARG_ENABLE([egl],
604      [  --enable-egl            Enable EGL support @<:@default=auto@:>@],
605      [case "${enableval}" in
606        yes)  NEED_EGL=yes ;;
607        no)   NEED_EGL=no ;;
608        auto) NEED_EGL=auto ;;
609        *) AC_MSG_ERROR([bad value ${enableval} for --enable-egl]) ;;
610      esac],[NEED_EGL=auto])
611
612 AC_ARG_WITH([egl-module-name],
613   AS_HELP_STRING([--with-egl-module-name],[library module name for EGL (default: libEGL)]))
614 if test x$with_egl_module_name != x; then
615   AC_DEFINE_UNQUOTED(GST_GL_LIBEGL_MODULE_NAME, "$with_egl_module_name", [EGL module name])
616 fi
617
618 AC_ARG_ENABLE([wgl],
619      [  --enable-wgl            Enable WGL support @<:@default=auto@:>@],
620      [case "${enableval}" in
621        yes)  NEED_WGL=yes ;;
622        no)   NEED_WGL=no ;;
623        auto) NEED_WGL=auto ;;
624        *) AC_MSG_ERROR([bad value ${enableval} for --enable-wgl]) ;;
625      esac],[NEED_WGL=auto])
626
627 AC_ARG_ENABLE([glx],
628      [  --enable-glx            Enable GLX support @<:@default=auto@:>@],
629      [case "${enableval}" in
630        yes)  NEED_GLX=yes ;;
631        no)   NEED_GLX=no ;;
632        auto) NEED_GLX=auto ;;
633        *) AC_MSG_ERROR([bad value ${enableval} for --enable-glx]) ;;
634      esac],[NEED_GLX=auto])
635
636 AC_ARG_ENABLE([cocoa],
637      [  --enable-cocoa          Enable Cocoa support @<:@default=auto@:>@],
638      [case "${enableval}" in
639        yes)  NEED_COCOA=yes ;;
640        no)   NEED_COCOA=no ;;
641        auto) NEED_COCOA=auto ;;
642        *) AC_MSG_ERROR([bad value ${enableval} for --enable-cocoa]) ;;
643      esac],[NEED_COCOA=auto])
644
645 AC_ARG_ENABLE([x11],
646      [  --enable-x11            Enable x11 support @<:@default=auto@:>@],
647      [case "${enableval}" in
648        yes)  NEED_X11=yes ;;
649        no)   NEED_X11=no ;;
650        auto) NEED_X11=auto ;;
651        *) AC_MSG_ERROR([bad value ${enableval} for --enable-x11]) ;;
652      esac],[NEED_X11=auto])
653
654 AC_ARG_ENABLE([wayland],
655      [  --enable-wayland        Enable Wayland support (requires EGL) @<:@default=auto@:>@],
656      [case "${enableval}" in
657        yes)  NEED_WAYLAND_EGL=yes ;;
658        no)   NEED_WAYLAND_EGL=no ;;
659        auto) NEED_WAYLAND_EGL=auto ;;
660        *) AC_MSG_ERROR([bad value ${enableval} for --enable-wayland]) ;;
661      esac],[NEED_WAYLAND_EGL=auto])
662
663 AC_ARG_ENABLE([dispmanx],
664      [  --enable-dispmanx        Enable Dispmanx support (requires EGL) @<:@default=auto@:>@],
665      [case "${enableval}" in
666        yes)  NEED_DISPMANX=yes ;;
667        no)   NEED_DISPMANX=no ;;
668        auto) NEED_DISPMANX=auto ;;
669        *) AC_MSG_ERROR([bad value ${enableval} for --enable-dispmanx]) ;;
670      esac],[NEED_DISPMANX=auto])
671
672 AG_GST_PKG_CHECK_MODULES(X11_XCB, x11-xcb)
673 save_CPPFLAGS="$CPPFLAGS"
674 save_LIBS="$LIBS"
675
676 HAVE_GL=no
677 HAVE_GLES2=no
678 HAVE_GLES3_H=no
679 HAVE_WAYLAND_EGL=no
680
681 HAVE_EGL_RPI=no
682
683 case $host in
684   *-mingw32* )
685     LIBS="$LIBS -lgdi32"
686     AG_GST_CHECK_LIBHEADER(GL, opengl32, glTexImage2D,, GL/gl.h)
687     AC_CHECK_HEADER(GL/wglext.h, HAVE_WGLEXT="yes", HAVE_WGLEXT="no", [#include <GL/gl.h>])
688     if test "x$HAVE_WGLEXT" = "xyes"; then
689       HAVE_WGL=yes
690       HAVE_GL=yes
691     fi
692   ;;
693   *)
694     if test "x$NEED_GL" != "xno"; then
695       AG_GST_PKG_CHECK_MODULES(GL, gl)
696       if test "x$HAVE_GL" != "xyes"; then
697         AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
698       fi
699     fi
700     if test "x$NEED_GLES2" != "xno"; then
701       AG_GST_PKG_CHECK_MODULES(GLES2, glesv2)
702       if test "x$HAVE_GLES2" != "xyes"; then
703         AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
704       fi
705       AC_CHECK_HEADER([GLES3/gl3.h], [HAVE_GLES3_H=yes])
706     fi
707     if test "x$NEED_EGL" != "xno"; then
708       AG_GST_PKG_CHECK_MODULES(EGL, egl)
709       if test "x$HAVE_EGL" != "xyes"; then
710         AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
711       fi
712     fi
713
714     old_LIBS=$LIBS
715     old_CFLAGS=$CFLAGS
716
717     dnl FIXME: EGL of RPi depends on GLESv1 or GLESv2
718     dnl FIXME: GLESv2 of RPi depends on EGL... WTF!
719     LIBS="$LIBS -lvcos -lvchiq_arm"
720     AC_CHECK_LIB([bcm_host], [bcm_host_init],
721       [
722         LIBS="$LIBS -lbcm_host"
723         AC_CHECK_HEADER(bcm_host.h,
724           [
725             LIBS="$LIBS -lGLESv2"
726             AC_CHECK_LIB([EGL], [eglGetProcAddress],
727               [
728                 LIBS="$LIBS -lEGL"
729                 AC_CHECK_HEADER([EGL/egl.h],
730                   [
731                     AC_CHECK_LIB([GLESv2], [glEnable],
732                       [
733                         AC_CHECK_HEADER([GLES2/gl2.h],
734                           [
735                             HAVE_EGL=yes
736                             HAVE_GLES2=yes
737                             HAVE_EGL_RPI=yes
738                             EGL_LIBS="-lbcm_host -lvcos -lvchiq_arm"
739                             EGL_CFLAGS=""
740                             AC_DEFINE(USE_EGL_RPI, [1], [Use RPi platform])
741                           ])
742                       ])
743                   ])
744               ])
745           ])
746       ])
747
748     LIBS=$old_LIBS
749     CFLAGS=$old_CFLAGS
750
751     PKG_CHECK_MODULES(WAYLAND_EGL, wayland-client >= 1.0 wayland-cursor >= 1.0 wayland-egl >= 9.0, HAVE_WAYLAND_EGL=yes, HAVE_WAYLAND_EGL=no)
752
753     # OS X and iOS always have GL available
754     case $host in
755       *-darwin*)
756         if test "x$HAVE_IOS" = "xyes"; then
757           HAVE_GLES2=yes
758         else
759           HAVE_GL=yes
760         fi
761       ;;
762     esac
763   ;;
764 esac
765
766 CPPFLAGS="$save_CPPFLAGS"
767 LIBS="$save_LIBS"
768
769 USE_OPENGL=no
770 USE_GLES2=no
771 USE_GLX=no
772 USE_COCOA=no
773 USE_WGL=no
774 USE_X11=no
775 USE_EAGL=no
776 GL_LIBS=
777 GL_CFLAGS=
778 GL_OBJCFLAGS=
779
780 dnl Check for what the user asked for and what we could find
781 if test "x$HAVE_EGL" = "xno"; then
782   if test "x$NEED_EGL" = "xyes"; then
783     AC_MSG_ERROR([Could not find the required EGL libraries])
784   fi
785 fi
786
787 if test "x$HAVE_GL" = "xno"; then
788   if test "x$NEED_GL" = "xyes"; then
789     AC_MSG_ERROR([Could not find the required OpenGL libraries])
790   fi
791 fi
792
793 if test "x$HAVE_GLES2" = "xno"; then
794   if test "x$NEED_GLES2" = "xyes"; then
795     AC_MSG_ERROR([Could not find the required OpenGL|ES 2.0 libraries])
796   fi
797 fi
798
799 dnl X, GLX and OpenGL
800 if test "x$HAVE_X11_XCB" = "xno"; then
801   if test "x$NEED_GLX" = "xyes"; then
802     AC_MSG_ERROR([Building the GLX backend without X11 is unsupported])
803   fi
804   if test "x$NEED_X11" = "xyes"; then
805     AC_MSG_ERROR([Could not find X11 development libraries])
806   fi
807 else
808   if test "x$NEED_GL" != "xno"; then
809     if test "x$HAVE_GL" = "xno"; then
810       if test "x$NEED_GLX" = "xyes"; then
811         AC_MSG_ERROR([Building the GLX backend without the OpenGL backend is unsupported])
812       fi
813     else dnl HAVE_GL=yes
814       USE_OPENGL=yes
815       if test "x$NEED_GLX" != "xno"; then
816         USE_GLX=yes
817       fi
818     fi
819   fi
820 fi
821
822 dnl check for DMABUF support
823 HAVE_DRM_FOURCC_HEADER=no
824 AC_CHECK_HEADER(libdrm/drm_fourcc.h,
825   HAVE_DRM_FOURCC_HEADER=yes, )
826
827 HAVE_GST_ALLOCATORS=no
828 PKG_CHECK_MODULES(GST_ALLOCATORS, gstreamer-allocators-1.0,
829   HAVE_GST_ALLOCATORS=yes, )
830
831 GST_GL_HAVE_DMABUF=0
832 if test "x$HAVE_DRM_FOURCC_HEADER" = "xyes" -a \
833         "x$HAVE_GST_ALLOCATORS" = "xyes" -a \
834         "x$HAVE_EGL" = "xyes"; then
835           GST_GL_HAVE_DMABUF=1
836 fi
837
838 dnl check if we can include both GL and GLES2 at the same time
839 if test "x$HAVE_GL" = "xyes" -a "x$HAVE_GLES2" = "xyes"; then
840   GLES3_H_DEFINE=0
841   if test "x$HAVE_GLES3_H" == "xyes"; then
842     GLES3_H_DEFINE=1
843   fi
844   GL_INCLUDES="
845 #ifdef __GNUC__
846 #  pragma GCC diagnostic push
847 #  pragma GCC diagnostic ignored \"-Wredundant-decls\"
848 #endif
849 #ifndef GL_GLEXT_PROTOTYPES
850 #define GL_GLEXT_PROTOTYPES 1
851 #endif
852 # ifdef HAVE_IOS
853 #  include <OpenGLES/ES2/gl.h>
854 #  include <OpenGLES/ES2/glext.h>
855 # else
856 #  if $GLES3_H_DEFINE
857 #   include <GLES3/gl3.h>
858 #   include <GLES3/gl3ext.h>
859 #  else
860 #   include <GLES2/gl2.h>
861 #   include <GLES2/gl2ext.h>
862 #  endif
863 # endif
864 # ifdef __APPLE__
865 #  include <OpenGL/OpenGL.h>
866 #  include <OpenGL/gl.h>
867 #  if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
868 #   define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
869 #   include <OpenGL/gl3.h>
870 #  endif
871 # else
872 #  include <GL/gl.h>
873 #  if __WIN32__ || _WIN32
874 #   include <GL/glext.h>
875 #  endif
876 # endif
877 int main (int argc, char **argv) { return 0; }
878 "
879   AC_MSG_CHECKING([whether it is possible to include both GL and GLES2 headers])
880   save_CFLAGS="$CFLAGS"
881   CFLAGS="$CFLAGS $GL_CFLAGS $GLES2_CFLAGS $WARNING_CFLAGS $ERROR_CFLAGS"
882   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[$GL_INCLUDES]], [[
883     #if !defined(GL_FALSE)
884     #error Failed to include GL headers
885     #endif
886     ]])],[ AC_MSG_RESULT(yes)
887     ],[AC_MSG_RESULT(no)
888     if test "x$NEED_GLES2" = "xyes"; then
889       if test "x$NEED_GL" = "xyes"; then
890         AC_MSG_ERROR([Cannot seem to include both GL and GLES2 headers. Try disabling one API])
891       fi
892       AC_MSG_WARN([Disabling Desktop GL support])
893       HAVE_GL=no
894       USE_OPENGL=no
895     else
896       AC_MSG_WARN([Disabling GL|ES 2.0 support])
897       HAVE_GLES2=no
898       HAVE_GLES3_H=no
899     fi
900   ])
901   CFLAGS="$save_CFLAGS"
902 fi
903
904 #dnl Check for OpenGL
905 echo host is $host
906 case $host in
907   *-android*)
908     if test "x$NEED_WGL" = "xyes"; then
909       AC_MSG_ERROR([WGL is not available on Android])
910     fi
911     if test "x$NEED_GLX" = "xyes"; then
912       AC_MSG_ERROR([GLX is not available on Android])
913     fi
914     if test "x$NEED_GL" = "xyes"; then
915       AC_MSG_ERROR([GL is not available on Android])
916     fi
917     if test "x$NEED_X11" = "xyes"; then
918       AC_MSG_ERROR([X11 is not available on Android])
919     fi
920     if test "x$NEED_COCOA" = "xyes"; then
921       AC_MSG_ERROR([Cocoa is not available on Android])
922     fi
923
924     dnl OpenGL|ES 2.0
925     if test "x$HAVE_GLES2" = "xyes"; then
926       if test "x$NEED_GLES2" != "xno"; then
927         GL_LIBS="$GL_LIBS -lGLESv2"
928         USE_GLES2=yes
929       fi
930     fi
931
932     dnl EGL
933     if test "x$HAVE_EGL" = "xyes"; then
934       if test "x$NEED_EGL" != "xno"; then
935         GL_LIBS="$GL_LIBS -lEGL"
936         USE_EGL=yes
937       fi
938     fi
939
940     if test "x$USE_EGL" != "xyes"; then
941       AC_MSG_ERROR([Need EGL on Android])
942     fi
943
944     if test "x$USE_GLES2" != "xyes"; then
945       AC_MSG_ERROR([Need OpenGL|ES 2.0 on Android])
946     fi
947
948     HAVE_WINDOW_ANDROID=yes
949     ;;
950   *-linux* | *-cygwin* | *-solaris* | *-netbsd* | *-freebsd* | *-openbsd* | *-kfreebsd* | *-dragonflybsd* | *-gnu* )
951     if test "x$NEED_WGL" = "xyes"; then
952       AC_MSG_ERROR([WGL is not available on unix])
953     fi
954
955     if test "x$HAVE_X11_XCB" = "xno"; then
956       if test "x$HAVE_WAYLAND_EGL" = "xno"; then
957         AC_MSG_WARN([X or Wayland is required for OpenGL support])
958       fi
959     fi
960
961     dnl check Desktop OpenGL
962     if test "x$HAVE_GL" = "xyes"; then
963       if test "x$NEED_GL" != "xno"; then
964         GL_LIBS="$GL_LIBS -lGL"
965       fi
966     fi
967
968     dnl OpenGL|ES 2.0
969     if test "x$HAVE_GLES2" = "xyes"; then
970       if test "x$NEED_GLES2" != "xno"; then
971         GL_LIBS="$GL_LIBS -lGLESv2"
972         USE_GLES2=yes
973       fi
974     fi
975
976     if test "x$HAVE_X11_XCB" = "xyes" -a "x$HAVE_EGL_RPI" = "xno"; then
977       if test "x$NEED_X11" != "xno"; then
978         GL_LIBS="$GL_LIBS $X11_XCB_LIBS"
979         GL_CFLAGS="$GL_CFLAGS $X11_XCB_CFLAGS"
980         HAVE_WINDOW_X11=yes
981       fi
982     fi
983
984     if test "x$HAVE_WAYLAND_EGL" = "xyes"; then
985       if test "x$NEED_EGL" = "xno" -o "x$HAVE_EGL" = "xno"; then
986         AC_MSG_WARN([EGL is required by the Wayland backend for OpenGL support])
987       else
988         if test "x$NEED_WAYLAND_EGL" != "xno"; then
989           HAVE_WINDOW_WAYLAND=yes
990           GL_LIBS="$GL_LIBS $WAYLAND_EGL_LIBS"
991           GL_CFLAGS="$GL_CFLAGS $WAYLAND_EGL_CFLAGS"
992         fi
993       fi
994     fi
995
996     if test "x$HAVE_EGL_RPI" = "xyes"; then
997       if test "x$NEED_DISPMANX" != "xno"; then
998         HAVE_WINDOW_DISPMANX=yes
999         USE_EGL=yes
1000       fi
1001     fi
1002
1003     dnl EGL
1004     if test "x$HAVE_EGL" = "xno"; then
1005       if test "x$HAVE_GL" = "xno"; then
1006         AC_MSG_WARN([Building requires either EGL or GLX for OpenGL support])
1007       fi
1008     else
1009       if test "x$NEED_EGL" != "xno"; then
1010         if test "x$HAVE_WINDOW_WAYLAND" = "xyes" -o "x$HAVE_WINDOW_X11" = "xyes" -o "x$HAVE_WINDOW_DISPMANX" = "xyes"; then
1011           GL_LIBS="$GL_LIBS -lEGL $EGL_LIBS"
1012           GL_CFLAGS="$GL_CFLAGS $EGL_CFLAGS"
1013           USE_EGL=yes
1014         fi
1015       fi
1016     fi
1017     ;;
1018   *-darwin*)
1019     if test "x$HAVE_IOS" = "xyes"; then
1020       if test "x$NEED_WGL" = "xyes"; then
1021         AC_MSG_ERROR([WGL is not available on iOS])
1022       fi
1023       if test "x$NEED_GLX" = "xyes"; then
1024         AC_MSG_ERROR([GLX is not available on iOS])
1025       fi
1026       if test "x$NEED_GL" = "xyes"; then
1027         AC_MSG_ERROR([GL is not available on iOS])
1028       fi
1029       if test "x$NEED_X11" = "xyes"; then
1030         AC_MSG_ERROR([X11 is not available on iOS])
1031       fi
1032       if test "x$NEED_COCOA" = "xyes"; then
1033         AC_MSG_ERROR([Cocoa is not available on iOS])
1034       fi
1035       if test "x$NEED_EGL" = "xyes"; then
1036         AC_MSG_ERROR([EGL is not available on iOS])
1037       fi
1038
1039       GL_LIBS="$LIBS -framework OpenGLES -framework QuartzCore -framework UIKit -framework CoreGraphics -framework CoreFoundation -framework Foundation"
1040       GL_CFLAGS="$GL_CFLAGS"
1041       USE_GLES2=yes
1042       USE_EAGL=yes
1043       HAVE_WINDOW_EAGL=yes
1044
1045       ac_cv_type_GLsizeiptr=yes
1046       ac_cv_type_GLintptr=yes
1047       ac_cv_type_GLchar=yes
1048     else
1049       dnl Only osx supports cocoa.
1050       if test "x$NEED_WGL" = "xyes"; then
1051         AC_MSG_ERROR([WGL is not available on Mac OS X])
1052       fi
1053
1054       if test "x$NEED_COCOA" != "xno"; then
1055         GL_LIBS="$LIBS -framework OpenGL -framework Cocoa -framework QuartzCore -framework CoreFoundation"
1056         GL_CFLAGS="$GL_CFLAGS"
1057         USE_COCOA=yes
1058         HAVE_WINDOW_COCOA=yes
1059         USE_OPENGL=yes
1060       fi
1061
1062       if test "x$USE_GLX" = "xyes"; then
1063         if test "x$HAVE_X11_XCB" = "xyes"; then
1064           if test "x$NEED_X11" != "xno"; then
1065             GL_LIBS="$GL_LIBS $X11_XCB_LIBS"
1066             GL_CFLAGS="$GL_CFLAGS $X11_XCB_CFLAGS"
1067             HAVE_WINDOW_X11=yes
1068           fi
1069         fi
1070
1071         if test "x$HAVE_GL" = "xyes"; then
1072           if test "x$NEED_GL" != "xno"; then
1073             GL_LIBS="$GL_LIBS -lGL"
1074           fi
1075           USE_OPENGL=yes
1076         fi
1077       fi
1078
1079       if test "x$HAVE_EGL" = "xyes"; then
1080         if test "x$NEED_EGL" != "xno"; then
1081           if test "x$HAVE_WINDOW_X11" = "xyes"; then
1082             GL_LIBS="$GL_LIBS -lEGL $EGL_LIBS"
1083             GL_CFLAGS="$GL_CFLAGS $EGL_CFLAGS"
1084             USE_EGL=yes
1085           fi
1086         fi
1087       fi
1088
1089       dnl OpenGL|ES 2.0
1090       if test "x$HAVE_GLES2" = "xyes"; then
1091         if test "x$NEED_GLES2" != "xno"; then
1092           GL_LIBS="$GL_LIBS -lGLESv2"
1093           USE_GLES2=yes
1094         fi
1095       fi
1096     fi
1097     ;;
1098   *-mingw32*)
1099     if test "x$NEED_GLX" = "xyes"; then
1100       AC_MSG_ERROR([GLX is not available on Windows])
1101     fi
1102     if test "x$NEED_GLES2" = "xyes"; then
1103       AC_MSG_ERROR([OpenGL|ES 2.0 is not supported on your platform yet])
1104     fi
1105
1106     if test "x$HAVE_GL" = "xyes"; then
1107       if test "x$NEED_GL" != "xno"; then
1108         if test "x$HAVE_WGL" = "xyes"; then
1109           if test "$NEED_WGL" != "xno"; then
1110             GL_LIBS="$GL_LIBS -lgdi32 -lopengl32"
1111             HAVE_WINDOW_WIN32=yes
1112             USE_OPENGL=yes
1113             USE_WGL=yes
1114           fi
1115         fi
1116       fi
1117     fi
1118     ;;
1119   *)
1120     AC_MSG_WARN([Don't know how to check for OpenGL on your platform.])
1121     ;;
1122 esac
1123
1124 GL_PLATFORMS=
1125 GL_WINDOWS=
1126 GL_APIS=
1127 GL_CONFIG_DEFINES=
1128
1129 dnl APIs
1130
1131 GST_GL_HAVE_OPENGL=0
1132 GST_GL_HAVE_GLES2=0
1133 GST_GL_HAVE_GLES3=0
1134
1135 if test "x$USE_OPENGL" = "xyes"; then
1136   GL_APIS="gl $GL_APIS"
1137   GST_GL_HAVE_OPENGL=1
1138 fi
1139 if test "x$USE_GLES2" = "xyes"; then
1140   GL_APIS="gles2 $GL_APIS"
1141   GST_GL_HAVE_GLES2=1
1142   if test "x$HAVE_GLES3_H" = "xyes"; then
1143     GST_GL_HAVE_GLES3=1
1144   fi
1145 fi
1146
1147 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
1148 #define GST_GL_HAVE_OPENGL $GST_GL_HAVE_OPENGL
1149 #define GST_GL_HAVE_GLES2 $GST_GL_HAVE_GLES2
1150 #define GST_GL_HAVE_GLES3 $GST_GL_HAVE_GLES3
1151 "
1152
1153 dnl WINDOW's
1154
1155 GST_GL_HAVE_WINDOW_X11=0
1156 GST_GL_HAVE_WINDOW_COCOA=0
1157 GST_GL_HAVE_WINDOW_WIN32=0
1158 GST_GL_HAVE_WINDOW_WAYLAND=0
1159 GST_GL_HAVE_WINDOW_ANDROID=0
1160 GST_GL_HAVE_WINDOW_DISPMANX=0
1161 GST_GL_HAVE_WINDOW_EAGL=0
1162
1163 if test "x$HAVE_WINDOW_X11" = "xyes"; then
1164   GL_WINDOWS="x11 $GL_WINDOWS"
1165   GST_GL_HAVE_WINDOW_X11=1
1166 fi
1167 if test "x$HAVE_WINDOW_COCOA" = "xyes"; then
1168   GL_WINDOWS="cocoa $GL_WINDOWS"
1169   GST_GL_HAVE_WINDOW_COCOA=1
1170 fi
1171 if test "x$HAVE_WINDOW_WIN32" = "xyes"; then
1172   GL_WINDOWS="win32 $GL_WINDOWS"
1173   GST_GL_HAVE_WINDOW_WIN32=1
1174 fi
1175 if test "x$HAVE_WINDOW_WAYLAND" = "xyes"; then
1176   GL_WINDOWS="wayland $GL_WINDOWS"
1177   GST_GL_HAVE_WINDOW_WAYLAND=1
1178 fi
1179 if test "x$HAVE_WINDOW_ANDROID" = "xyes"; then
1180   GL_WINDOWS="android $GL_WINDOWS"
1181   GST_GL_HAVE_WINDOW_ANDROID=1
1182 fi
1183 if test "x$HAVE_WINDOW_DISPMANX" = "xyes"; then
1184   GL_WINDOWS="dispmanx $GL_WINDOWS"
1185   GST_GL_HAVE_WINDOW_DISPMANX=1
1186 fi
1187 if test "x$HAVE_WINDOW_EAGL" = "xyes"; then
1188   GL_WINDOWS="eagl $GL_WINDOWS"
1189   GST_GL_HAVE_WINDOW_EAGL=1
1190 fi
1191
1192 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
1193 #define GST_GL_HAVE_WINDOW_X11 $GST_GL_HAVE_WINDOW_X11
1194 #define GST_GL_HAVE_WINDOW_COCOA $GST_GL_HAVE_WINDOW_COCOA
1195 #define GST_GL_HAVE_WINDOW_WIN32 $GST_GL_HAVE_WINDOW_WIN32
1196 #define GST_GL_HAVE_WINDOW_WAYLAND $GST_GL_HAVE_WINDOW_WAYLAND
1197 #define GST_GL_HAVE_WINDOW_ANDROID $GST_GL_HAVE_WINDOW_ANDROID
1198 #define GST_GL_HAVE_WINDOW_DISPMANX $GST_GL_HAVE_WINDOW_DISPMANX
1199 #define GST_GL_HAVE_WINDOW_EAGL $GST_GL_HAVE_WINDOW_EAGL
1200 "
1201
1202 dnl PLATFORM's
1203
1204 GST_GL_HAVE_PLATFORM_EGL=0
1205 GST_GL_HAVE_PLATFORM_GLX=0
1206 GST_GL_HAVE_PLATFORM_WGL=0
1207 GST_GL_HAVE_PLATFORM_CGL=0
1208 GST_GL_HAVE_PLATFORM_EAGL=0
1209
1210 if test "x$USE_EGL" = "xyes"; then
1211   GL_PLATFORMS="egl $GL_PLATFORMS"
1212   GST_GL_HAVE_PLATFORM_EGL=1
1213 fi
1214 if test "x$USE_GLX" = "xyes"; then
1215   GL_PLATFORMS="glx $GL_PLATFORMS"
1216   GST_GL_HAVE_PLATFORM_GLX=1
1217 fi
1218 if test "x$USE_WGL" = "xyes"; then
1219   GL_PLATFORMS="wgl $GL_PLATFORMS"
1220   GST_GL_HAVE_PLATFORM_WGL=1
1221 fi
1222 if test "x$USE_COCOA" = "xyes"; then
1223   GL_PLATFORMS="cgl $GL_PLATFORMS"
1224   GST_GL_HAVE_PLATFORM_CGL=1
1225 fi
1226 if test "x$USE_EAGL" = "xyes"; then
1227   GL_PLATFORMS="eagl $GL_PLATFORMS"
1228   GST_GL_HAVE_PLATFORM_EAGL=1
1229 fi
1230
1231 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
1232 #define GST_GL_HAVE_PLATFORM_EGL $GST_GL_HAVE_PLATFORM_EGL
1233 #define GST_GL_HAVE_PLATFORM_GLX $GST_GL_HAVE_PLATFORM_GLX
1234 #define GST_GL_HAVE_PLATFORM_WGL $GST_GL_HAVE_PLATFORM_WGL
1235 #define GST_GL_HAVE_PLATFORM_CGL $GST_GL_HAVE_PLATFORM_CGL
1236 #define GST_GL_HAVE_PLATFORM_EAGL $GST_GL_HAVE_PLATFORM_EAGL
1237 "
1238
1239 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
1240 #define GST_GL_HAVE_DMABUF $GST_GL_HAVE_DMABUF
1241 "
1242
1243 dnl Check for no platforms/window systems
1244 if test "x$GL_APIS" = "x"; then
1245   AC_MSG_WARN([Either OpenGL or OpenGL|ES is required for OpenGL support])
1246 fi
1247 if test "x$GL_PLATFORMS" = "x"; then
1248   AC_MSG_WARN([Could not find any OpenGL platforms to use such as CGL, WGL or GLX])
1249 fi
1250 if test "x$GL_WINDOWS" = "x"; then
1251   AC_MSG_WARN([Could not find any window systems to use such as Cocoa, Win32API or X11])
1252 fi
1253
1254 if test "x$GL_APIS" = "x" -o "x$GL_PLATFORMS" = "x" -o "x$GL_WINDOWS" = "x"; then
1255   GL_LIBS=
1256   GL_CFLAGS=
1257   GL_OBJCFLAGS=
1258   USE_OPENGL=no
1259   USE_GLES2=no
1260   USE_GLX=no
1261   USE_EGL=no
1262   USE_WGL=no
1263   USE_COCOA=no
1264   USE_EGL_MALI=no
1265   USE_EGL_RPI=no
1266   USE_EAGL=no
1267
1268   HAVE_WINDOW_X11=no
1269   HAVE_WINDOW_WIN32=no
1270   HAVE_WINDOW_DISPMANX=no
1271   HAVE_WINDOW_WAYLAND=no
1272   HAVE_WINDOW_ANDROID=no
1273   HAVE_WINDOW_COCOA=no
1274   HAVE_WINDOW_EAGL=no
1275 fi
1276
1277 AC_SUBST(GL_APIS)
1278 AC_SUBST(GL_PLATFORMS)
1279 AC_SUBST(GL_WINDOWS)
1280 AC_SUBST(GL_LIBS)
1281 AC_SUBST(GL_CFLAGS)
1282 AC_SUBST(GL_OBJCFLAGS)
1283 AC_SUBST(USE_OPENGL)
1284 AC_SUBST(USE_GLES2)
1285
1286 AM_CONDITIONAL(HAVE_WINDOW_X11, test "x$HAVE_WINDOW_X11" = "xyes")
1287 AM_CONDITIONAL(HAVE_WINDOW_COCOA, test "x$HAVE_WINDOW_COCOA" = "xyes")
1288 AM_CONDITIONAL(HAVE_WINDOW_WIN32, test "x$HAVE_WINDOW_WIN32" = "xyes")
1289 AM_CONDITIONAL(HAVE_WINDOW_DISPMANX, test "x$HAVE_WINDOW_DISPMANX" = "xyes")
1290 AM_CONDITIONAL(HAVE_WINDOW_WAYLAND, test "x$HAVE_WINDOW_WAYLAND" = "xyes")
1291 AM_CONDITIONAL(HAVE_WINDOW_ANDROID, test "x$HAVE_WINDOW_ANDROID" = "xyes")
1292 AM_CONDITIONAL(HAVE_WINDOW_EAGL, test "x$HAVE_WINDOW_EAGL" = "xyes")
1293
1294 AM_CONDITIONAL(USE_OPENGL, test "x$USE_OPENGL" = "xyes")
1295 AM_CONDITIONAL(USE_GLES2, test "x$USE_GLES2" = "xyes")
1296 AM_CONDITIONAL(USE_GLX, test "x$USE_GLX" = "xyes")
1297 AM_CONDITIONAL(USE_EGL, test "x$USE_EGL" = "xyes")
1298 AM_CONDITIONAL(USE_WGL, test "x$USE_WGL" = "xyes")
1299 AM_CONDITIONAL(USE_COCOA, test "x$USE_COCOA" = "xyes")
1300 AM_CONDITIONAL(USE_EGL_MALI, test "x$USE_EGL_MALI" = "xyes")
1301 AM_CONDITIONAL(USE_EGL_RPI, test "x$USE_EGL_RPI" = "xyes")
1302 AM_CONDITIONAL(USE_EAGL, test "x$USE_EAGL" = "xyes")
1303
1304 AM_CONDITIONAL(HAVE_GST_GL, test "x$USE_OPENGL" = "xyes" -o "x$USE_GLES2" = "xyes")
1305
1306 dnl Check for some types that are not always present
1307 GL_INCLUDES=""
1308 if test "x$USE_GLES2" = "xyes"; then
1309   GL_INCLUDES="$GL_INCLUDES
1310 #ifndef GL_GLEXT_PROTOTYPES
1311 #define GL_GLEXT_PROTOTYPES 1
1312 #endif
1313 # ifdef HAVE_IOS
1314 #  include <OpenGLES/ES2/gl.h>
1315 #  include <OpenGLES/ES2/glext.h>
1316 # else
1317 #  if $GST_GL_HAVE_GLES3
1318 #   include <GLES3/gl3.h>
1319 #   include <GLES3/gl3ext.h>
1320 #  else
1321 #   include <GLES2/gl2.h>
1322 #   include <GLES2/gl2ext.h>
1323 #  endif
1324 # endif
1325 "
1326 fi
1327
1328 if test "x$USE_OPENGL" = "xyes"; then
1329   GL_INCLUDES="$GL_INCLUDES
1330 # ifdef __APPLE__
1331 #  include <OpenGL/OpenGL.h>
1332 #  include <OpenGL/gl.h>
1333 # else
1334 #  include <GL/gl.h>
1335 #  if __WIN32__ || _WIN32
1336 #   include <GL/glext.h>
1337 #  endif
1338 # endif
1339 "
1340 fi
1341
1342 GST_GL_HAVE_GLEGLIMAGEOES=0
1343 GST_GL_HAVE_GLCHAR=0
1344 GST_GL_HAVE_GLSIZEIPTR=0
1345 GST_GL_HAVE_GLINTPTR=0
1346 GST_GL_HAVE_GLSYNC=0
1347 GST_GL_HAVE_GLUINT64=0
1348 GST_GL_HAVE_GLINT64=0
1349 GST_GL_HAVE_EGLATTRIB=0
1350
1351 old_CFLAGS=$CFLAGS
1352 CFLAGS="$GL_CFLAGS $CFLAGS"
1353
1354 AC_CHECK_TYPES(GLeglImageOES, [], [], [[$GL_INCLUDES]])
1355 if test "x$ac_cv_type_GLeglImageOES" = "xyes"; then
1356   GST_GL_HAVE_GLEGLIMAGEOES=1
1357 fi
1358
1359 AC_CHECK_TYPES(GLchar, [], [], [[$GL_INCLUDES]])
1360 if test "x$ac_cv_type_GLchar" = "xyes"; then
1361   GST_GL_HAVE_GLCHAR=1
1362 fi
1363
1364 AC_CHECK_TYPES(GLsizeiptr, [], [], [[$GL_INCLUDES]])
1365 if test "x$ac_cv_type_GLsizeiptr" = "xyes"; then
1366   GST_GL_HAVE_GLSIZEIPTR=1
1367 fi
1368
1369 AC_CHECK_TYPES(GLintptr, [], [], [[$GL_INCLUDES]])
1370 if test "x$ac_cv_type_GLintptr" = "xyes"; then
1371   GST_GL_HAVE_GLINTPTR=1
1372 fi
1373
1374 AC_CHECK_TYPES(GLsync, [], [], [[$GL_INCLUDES]])
1375 if test "x$ac_cv_type_GLsync" = "xyes"; then
1376   GST_GL_HAVE_GLSYNC=1
1377 fi
1378
1379 AC_CHECK_TYPES(GLuint64, [], [], [[$GL_INCLUDES]])
1380 if test "x$ac_cv_type_GLuint64" = "xyes"; then
1381   GST_GL_HAVE_GLUINT64=1
1382 fi
1383
1384 AC_CHECK_TYPES(GLint64, [], [], [[$GL_INCLUDES]])
1385 if test "x$ac_cv_type_GLint64" = "xyes"; then
1386   GST_GL_HAVE_GLINT64=1
1387 fi
1388
1389 if test "x$USE_EGL" = "xyes"; then
1390   EGL_INCLUDES="$GL_INCLUDES
1391   #include <EGL/egl.h>
1392   #include <EGL/eglext.h>
1393   "
1394   AC_CHECK_TYPES(EGLAttrib, [], [], [[$EGL_INCLUDES]])
1395   if test "x$ac_cv_type_EGLAttrib" = "xyes"; then
1396     GST_GL_HAVE_EGLATTRIB=1
1397   fi
1398 fi
1399
1400 CFLAGS=$old_CFLAGS
1401
1402 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
1403 #define GST_GL_HAVE_GLEGLIMAGEOES $GST_GL_HAVE_GLEGLIMAGEOES
1404 #define GST_GL_HAVE_GLCHAR $GST_GL_HAVE_GLCHAR
1405 #define GST_GL_HAVE_GLSIZEIPTR $GST_GL_HAVE_GLSIZEIPTR
1406 #define GST_GL_HAVE_GLINTPTR $GST_GL_HAVE_GLINTPTR
1407 #define GST_GL_HAVE_GLSYNC $GST_GL_HAVE_GLSYNC
1408 #define GST_GL_HAVE_GLUINT64 $GST_GL_HAVE_GLUINT64
1409 #define GST_GL_HAVE_GLINT64 $GST_GL_HAVE_GLINT64
1410 #define GST_GL_HAVE_EGLATTRIB $GST_GL_HAVE_EGLATTRIB
1411 "
1412
1413 AC_CONFIG_COMMANDS([gst-libs/gst/gl/gstglconfig.h], [
1414         outfile=gstglconfig.h-tmp
1415         cat > $outfile <<\_______EOF
1416 /* gstglconfig.h
1417  *
1418  * This is a generated file.  Please modify `configure.ac'
1419  */
1420
1421 #ifndef __GST_GL_CONFIG_H__
1422 #define __GST_GL_CONFIG_H__
1423
1424 #include <gst/gst.h>
1425
1426 G_BEGIN_DECLS
1427
1428 _______EOF
1429
1430         cat >>$outfile <<_______EOF
1431 $gl_config_defines
1432 _______EOF
1433
1434         cat >>$outfile <<_______EOF
1435
1436 G_END_DECLS
1437
1438 #endif  /* __GST_GL_CONFIG_H__ */
1439 _______EOF
1440
1441
1442         if cmp -s $outfile gst-libs/gst/gl/gstglconfig.h; then
1443           AC_MSG_NOTICE([gst-libs/gst/gl/gstglconfig.h is unchanged])
1444           rm -f $outfile
1445         else
1446           mv $outfile gst-libs/gst/gl/gstglconfig.h
1447         fi
1448 ],[
1449 gl_config_defines='$GL_CONFIG_DEFINES'
1450 ])
1451
1452 dnl libpng is optional
1453 PKG_CHECK_MODULES(LIBPNG, libpng >= 1.0, HAVE_PNG=yes, HAVE_PNG=no)
1454 if test "x$HAVE_PNG" = "xyes"; then
1455   AC_DEFINE(HAVE_PNG, [1] , [Use libpng])
1456 fi
1457 AC_SUBST(HAVE_PNG)
1458 AC_SUBST(LIBPNG_LIBS)
1459 AC_SUBST(LIBPNG_CFLAGS)
1460 AM_CONDITIONAL(HAVE_PNG, test "x$HAVE_PNG" = "xyes")
1461
1462 dnl libjpeg is optional
1463 AC_ARG_WITH(jpeg-mmx, [  --with-jpeg-mmx, path to MMX'ified JPEG library])
1464 OLD_LIBS="$LIBS"
1465 if test x$with_jpeg_mmx != x; then
1466   LIBS="$LIBS -L$with_jpeg_mmx"
1467 fi
1468 AC_CHECK_LIB(jpeg-mmx, jpeg_set_defaults, HAVE_JPEG="yes", HAVE_JPEG="no")
1469 JPEG_LIBS="$LIBS -ljpeg-mmx"
1470 LIBS="$OLD_LIBS"
1471 if test x$HAVE_JPEG != xyes; then
1472   JPEG_LIBS="-ljpeg"
1473   AC_CHECK_LIB(jpeg, jpeg_set_defaults, HAVE_JPEG="yes", HAVE_JPEG="no")
1474 fi
1475
1476 if test x$HAVE_JPEG = xyes; then
1477   AC_DEFINE(HAVE_JPEG, [1], [Use libjpeg])
1478 else
1479   AC_DEFINE(HAVE_JPEG, [0], [Use libjpeg])
1480   JPEG_LIBS=
1481 fi
1482 AC_SUBST(JPEG_LIBS)
1483 AC_SUBST(HAVE_JPEG)
1484 AM_CONDITIONAL(HAVE_JPEG, test "x$HAVE_JPEG" = "xyes")
1485
1486 dnl Vulkan
1487 PKG_CHECK_MODULES(XCB, xcb >= 1.10, GST_VULKAN_HAVE_WINDOW_XCB=1, GST_VULKAN_HAVE_WINDOW_XCB=0)
1488 AM_CONDITIONAL(USE_XCB, test "x$GST_VULKAN_HAVE_WINDOW_XCB" = "x1")
1489
1490 PKG_CHECK_MODULES(VULKAN_WAYLAND, wayland-client >= 1.4, GST_VULKAN_HAVE_WINDOW_WAYLAND=1, GST_VULKAN_HAVE_WINDOW_WAYLAND=0)
1491 AM_CONDITIONAL(USE_WAYLAND, test "x$GST_VULKAN_HAVE_WINDOW_WAYLAND" = "x1")
1492 VULKAN_CONFIG_DEFINES="
1493 #define GST_VULKAN_HAVE_WINDOW_XCB $GST_VULKAN_HAVE_WINDOW_XCB
1494 #define GST_VULKAN_HAVE_WINDOW_WAYLAND $GST_VULKAN_HAVE_WINDOW_WAYLAND"
1495
1496 AC_CONFIG_COMMANDS([ext/vulkan/vkconfig.h], [
1497         outfile=vkconfig.h-tmp
1498         cat > $outfile <<\_______EOF
1499 /* vkconfig.h
1500  *
1501  * This is a generated file.  Please modify `configure.ac'
1502  */
1503
1504 #ifndef __GST_VULKAN_CONFIG_H__
1505 #define __GST_VULKAN_CONFIG_H__
1506
1507 #include <gst/gst.h>
1508
1509 G_BEGIN_DECLS
1510
1511 _______EOF
1512
1513         cat >>$outfile <<_______EOF
1514 $vulkan_config_defines
1515 _______EOF
1516
1517         cat >>$outfile <<_______EOF
1518
1519 G_END_DECLS
1520
1521 #endif  /* __GST_VULKAN_CONFIG_H__ */
1522 _______EOF
1523
1524
1525         if cmp -s $outfile ext/vulkan/vkconfig.h; then
1526           AC_MSG_NOTICE([ext/vulkan/vkconfig.h is unchanged])
1527           rm -f $outfile
1528         else
1529           mv $outfile ext/vulkan/vkconfig.h
1530         fi
1531 ],[
1532 vulkan_config_defines='$VULKAN_CONFIG_DEFINES'
1533 ])
1534
1535 dnl *** sys plug-ins ***
1536
1537 dnl DirectSound
1538 translit(dnm, m, l) AM_CONDITIONAL(USE_DIRECTSOUND, true)
1539 AG_GST_CHECK_FEATURE(DIRECTSOUND, [DirectSound], directsoundsrc, [
1540   HAVE_DIRECTSOUND="no"
1541   save_CFLAGS="$CFLAGS"
1542   save_LDFLAGS="$LDFLAGS"
1543   save_LIBS="$LIBS"
1544   CFLAGS="$CFLAGS $DIRECTX_CFLAGS"
1545   LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS"
1546   LIBS="$LIBS -lwinmm -ldsound -ldxerr9 -luser32"
1547   AC_MSG_CHECKING(for DirectSound LDFLAGS)
1548   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1549 #include <windows.h>
1550 #include <dxerr9.h>
1551 #include <dsound.h>
1552 #include <mmsystem.h>
1553 ]], [[
1554   DXGetErrorString9 (0);
1555   DirectSoundCreate(NULL, NULL, NULL);
1556 ]])],
1557     [HAVE_DIRECTSOUND="yes"],
1558     [HAVE_DIRECTSOUND="no"])
1559   AC_MSG_RESULT($HAVE_DIRECTSOUND)
1560   CFLAGS=$save_CFLAGS
1561   LDFLAGS=$save_LDFLAGS
1562   LIBS=$save_LIBS
1563
1564   if test "x$HAVE_DIRECTSOUND" = "xyes";  then
1565     dnl this is much more than we want
1566     DIRECTSOUND_LIBS="-lwinmm -ldsound -ldxerr9 -luser32"
1567     AC_SUBST(DIRECTX_CFLAGS)
1568     AC_SUBST(DIRECTX_LDFLAGS)
1569     AC_SUBST(DIRECTSOUND_LIBS)
1570   fi
1571   AC_SUBST(HAVE_DIRECTSOUND)
1572 ])
1573
1574 dnl WASAPI
1575 translit(dnm, m, l) AM_CONDITIONAL(USE_WASAPI, true)
1576 AG_GST_CHECK_FEATURE(WASAPI, [WASAPI plug-in], wasapi, [
1577   HAVE_WASAPI="no"
1578   save_CFLAGS="$CFLAGS"
1579   save_LDFLAGS="$LDFLAGS"
1580   save_LIBS="$LIBS"
1581   CFLAGS="$CFLAGS $DIRECTX_CFLAGS"
1582   LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS"
1583   LIBS="$LIBS -lole32 -lwinmm -lksuser"
1584   AC_MSG_CHECKING(for WASAPI LDFLAGS)
1585   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1586 #include <windows.h>
1587 #include <stdio.h>
1588 #include <mmsystem.h>
1589 #include <mmdeviceapi.h>
1590 ]], [[
1591 int main ()
1592 {
1593     HRESULT hr = S_OK;
1594
1595     hr = CoInitialize(NULL);
1596     if (FAILED(hr)) {
1597         printf("CoInitialize failed: hr = 0x%08x", hr);
1598         return __LINE__;
1599     }
1600
1601         int result = 0;
1602     // result = do_everything(argc, argv);
1603
1604     CoUninitialize();
1605     return result;
1606 }
1607 ]])],
1608     [HAVE_WASAPI="yes"],
1609     [HAVE_WASAPI="no"])
1610   AC_MSG_RESULT($HAVE_WASAPI)
1611   CFLAGS=$save_CFLAGS
1612   LDFLAGS=$save_LDFLAGS
1613   LIBS=$save_LIBS
1614
1615   if test "x$HAVE_WASAPI" = "xyes";  then
1616     WASAPI_LIBS="-lole32 -lwinmm -lksuser"
1617     AC_SUBST(WASAPI_LIBS)
1618   fi
1619   AC_SUBST(HAVE_WASAPI)
1620 ])
1621
1622 dnl Direct3D
1623 translit(dnm, m, l) AM_CONDITIONAL(USE_DIRECT3D, true)
1624 AG_GST_CHECK_FEATURE(DIRECT3D, [Direct3D plug-in], direct3dsink, [
1625   HAVE_DIRECT3D="no"
1626   save_CFLAGS="$CFLAGS"
1627   save_LDFLAGS="$LDFLAGS"
1628   save_LIBS="$LIBS"
1629   CFLAGS="$CFLAGS $DIRECTX_CFLAGS"
1630   LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS"
1631   LIBS="$LIBS -ld3d9 -lgdi32"
1632   AC_MSG_CHECKING(for Direct3D LDFLAGS)
1633   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1634 #include <windows.h>
1635 #include <d3d9.h>
1636 ]], [[
1637   Direct3DCreate9(D3D_SDK_VERSION);
1638 ]])],
1639     [HAVE_DIRECT3D="yes"],
1640     [HAVE_DIRECT3D="no"])
1641   AC_MSG_RESULT($HAVE_DIRECT3D)
1642   CFLAGS=$save_CFLAGS
1643   LDFLAGS=$save_LDFLAGS
1644   LIBS=$save_LIBS
1645
1646   if test "x$HAVE_DIRECT3D" = "xyes";  then
1647     DIRECT3D_LIBS="-ld3d9 -lgdi32"
1648     AC_SUBST(DIRECT3D_LIBS)
1649   fi
1650   AC_SUBST(HAVE_DIRECT3D)
1651 ])
1652
1653 dnl winscreencap
1654 translit(dnm, m, l) AM_CONDITIONAL(USE_WINSCREENCAP, true)
1655 AG_GST_CHECK_FEATURE(WINSCREENCAP, [winscreencap plug-in], winscreencap, [
1656   HAVE_WINSCREENCAP="no"
1657   save_CFLAGS="$CFLAGS"
1658   save_LDFLAGS="$LDFLAGS"
1659   save_LIBS="$LIBS"
1660   CFLAGS="$CFLAGS $DIRECTX_CFLAGS"
1661   LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS"
1662   LIBS="$LIBS -ld3d9 -lgdi32"
1663   AC_MSG_CHECKING(for Direct3D LDFLAGS)
1664   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1665 #include <windows.h>
1666 #include <d3d9.h>
1667 ]], [[
1668   Direct3DCreate9(D3D_SDK_VERSION);
1669 ]])],
1670     [HAVE_WINSCREENCAP="yes"],
1671     [HAVE_WINSCREENCAP="no"])
1672   AC_MSG_RESULT($HAVE_WINSCREENCAP)
1673   CFLAGS=$save_CFLAGS
1674   LDFLAGS=$save_LDFLAGS
1675   LIBS=$save_LIBS
1676
1677   if test "x$HAVE_WINSCREENCAP" = "xyes";  then
1678     WINSCREENCAP_LIBS="-ld3d9 -lgdi32"
1679     AC_SUBST(WINSCREENCAP_LIBS)
1680   fi
1681   AC_SUBST(HAVE_WINSCREENCAP)
1682 ])
1683
1684 dnl winks
1685 translit(dnm, m, l) AM_CONDITIONAL(USE_WINKS, true)
1686 AG_GST_CHECK_FEATURE(WINKS, [Winks plug-in], winks, [
1687   HAVE_WINKS="no"
1688   save_CFLAGS="$CFLAGS"
1689   save_LDFLAGS="$LDFLAGS"
1690   save_LIBS="$LIBS"
1691   CFLAGS="$CFLAGS $DIRECTX_CFLAGS"
1692   LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS"
1693   LIBS="$LIBS -lole32 -luuid -lstrmiids"
1694   AC_MSG_CHECKING(for Winks LDFLAGS)
1695   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1696 #include <windows.h>
1697 #include <strmif.h>
1698 #include <uuids.h>
1699 ]], [[
1700 int main () {
1701   IGraphBuilder *pGraph = NULL;
1702   HRESULT hr = CoInitialize(NULL);
1703   hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
1704                         &IID_IGraphBuilder, (void **)&pGraph);
1705
1706   return 0;
1707 }
1708 ]])],
1709     [HAVE_WINKS="yes"],
1710     [HAVE_WINKS="no"])
1711   AC_MSG_RESULT($HAVE_WINKS)
1712   CFLAGS=$save_CFLAGS
1713   LDFLAGS=$save_LDFLAGS
1714   LIBS=$save_LIBS
1715
1716   if test "x$HAVE_WINKS" = "xyes";  then
1717     dnl this is much more than we want
1718     WINKS_LIBS="-ldxguid -lole32 -luuid -lstrmiids -lksuser -lsetupapi"
1719     AC_SUBST(DIRECTX_CFLAGS)
1720     AC_SUBST(DIRECTX_LDFLAGS)
1721     AC_SUBST(WINKS_LIBS)
1722   fi
1723   AC_SUBST(HAVE_WINKS)
1724 ])
1725
1726 dnl *** Android Media ***
1727 translit(dnm, m, l) AM_CONDITIONAL(USE_ANDROID_MEDIA, true)
1728 HAVE_ANDROID_MEDIA="no"
1729 AG_GST_CHECK_FEATURE(ANDROID_MEDIA, [Android Media], androidmedia, [
1730   case "$host" in
1731     *android*)
1732       AC_CHECK_HEADER(jni.h, HAVE_ANDROID_MEDIA="yes", HAVE_ANDROID_MEDIA="no")
1733       ;;
1734     *)
1735       HAVE_ANDROID_MEDIA="no"
1736       ;;
1737   esac
1738 ])
1739
1740 dnl *** AppleMedia (OS X and iOS) ***
1741 translit(dnm, m, l) AM_CONDITIONAL(USE_APPLE_MEDIA, true)
1742 HAVE_APPLE_MEDIA="no"
1743 dnl SystemConfiguration.h is common to OS X and iOS, so we check for that
1744 AG_GST_CHECK_FEATURE(APPLE_MEDIA, [Apple video], applemedia, [
1745   AC_CHECK_HEADER(SystemConfiguration/SystemConfiguration.h, HAVE_APPLE_MEDIA="yes", HAVE_APPLE_MEDIA="no")
1746   dnl OSX 10.7 and earlier lack VideoToolbox/VideoToolbox.h
1747   if test "x$HAVE_IOS" = "xno"; then
1748     AC_CHECK_HEADER(VideoToolbox/VideoToolbox.h,, HAVE_APPLE_MEDIA="no")
1749   fi
1750 ])
1751
1752 dnl in case header SystemConfiguration/SystemConfiguration.h is found on other platforms
1753 case "$host" in
1754   *-*darwin*)
1755     ;;
1756   *)
1757     HAVE_APPLE_MEDIA="no"
1758     ;;
1759 esac
1760
1761 dnl *** bluez ***
1762 translit(dnm, m, l) AM_CONDITIONAL(USE_BLUEZ, true)
1763 AG_GST_CHECK_FEATURE(BLUEZ, [Bluez], bluez, [
1764   PKG_CHECK_MODULES([BLUEZ5], [bluez >= 5.0], [
1765     PKG_CHECK_MODULES([GIO_UNIX], gio-unix-2.0 > 2.24, [
1766       AC_CHECK_PROG([GDBUS_CODEGEN],[gdbus-codegen],[gdbus-codegen])
1767       HAVE_BLUEZ=yes
1768       AC_DEFINE(HAVE_BLUEZ5,[1],[Bluez5 detected])
1769     ], [
1770       HAVE_BLUEZ=no
1771     ])
1772   ], [
1773     HAVE_BLUEZ=no
1774   ])
1775 ])
1776
1777 dnl *** OS/X AVCVideoServices ***
1778 translit(dnm, m, l) AM_CONDITIONAL(USE_AVC, true)
1779 HAVE_AVC="no"
1780 AG_GST_CHECK_FEATURE(AVC, [AVC Video Services], avcsrc, [
1781   AC_LANG_PUSH([C++])
1782   save_CPPFLAGS="$CPPFLAGS"
1783   CPPFLAGS="$CPPFLAGS -framework AVCVideoServices -framework CoreFoundation"
1784   save_LIBS="$LIBS"
1785   LIBS="$LIBS -framework AVCVideoServices -framework CoreFoundation"
1786   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[HAVE_AVC=yes],[HAVE_AVC=no])
1787   LIBS=$save_LIBS
1788   CPPFLAGS=$save_CPPFLAGS
1789   AC_LANG_POP([C++])
1790 ])
1791 dnl in case header AVCVideoServices/AVCVideoServices.h is found on other platforms
1792 case "$host" in
1793   *-*darwin*)
1794     ;;
1795   *)
1796     HAVE_AVC="no"
1797     ;;
1798 esac
1799
1800 dnl check for shm_open (for shm plugin)
1801 translit(dnm, m, l) AM_CONDITIONAL(USE_SHM, true)
1802 AG_GST_CHECK_FEATURE(SHM, [POSIX shared memory source and sink], shm, [
1803     if test "x$HAVE_SYS_SOCKET_H" = "xyes"; then
1804         case $host in
1805         *-darwin* | *-macos10*)
1806             AC_DEFINE(HAVE_OSX,[1],[Apple Mac OS X operating system detected])
1807             HAVE_SHM=yes
1808             ;;
1809         *-*-OpenBSD*)
1810             HAVE_SHM=yes
1811             ;;
1812         *)
1813             AC_CHECK_LIB([rt], [shm_open],
1814                 AC_CHECK_DECL([MSG_NOSIGNAL], HAVE_SHM=yes, HAVE_SHM=no, [
1815                 #include <sys/socket.h>
1816                     ]),
1817                 HAVE_SHM=no)
1818             AC_SUBST(SHM_LIBS, "-lrt")
1819             ;;
1820         esac
1821     else
1822         HAVE_SHM=no
1823     fi
1824 ])
1825
1826 dnl check for Video CD
1827 translit(dnm, m, l) AM_CONDITIONAL(USE_VCD, true)
1828 AG_GST_CHECK_FEATURE(VCD, [Video CD], vcdsrc, [
1829   AC_CHECK_HEADER(linux/cdrom.h, HAVE_VCD="yes", HAVE_VCD="no")
1830 ])
1831
1832 dnl check for OpenSL ES
1833 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENSLES, true)
1834 AG_GST_CHECK_FEATURE(OPENSLES, [OpenSL ES], opensl, [
1835   AC_CHECK_HEADER(SLES/OpenSLES.h, HAVE_OPENSLES="yes", HAVE_OPENSLES="no")
1836 ])
1837
1838 dnl *** UVC H264 ***
1839 translit(dnm, m, l) AM_CONDITIONAL(USE_UVCH264, true)
1840 AG_GST_CHECK_FEATURE(UVCH264, [UVC H264], uvch264, [
1841   AC_CHECK_HEADER(linux/uvcvideo.h, HAVE_UVCVIDEO_H=yes, HAVE_UVCVIDEO_H=no)
1842   PKG_CHECK_MODULES(G_UDEV, gudev-1.0 , [
1843           AC_DEFINE([HAVE_GUDEV], 1, [Define if gudev is installed])
1844           HAVE_GUDEV="yes" ],
1845           [HAVE_GUDEV="no"])
1846   PKG_CHECK_MODULES(LIBUSB, libusb-1.0 , [
1847           AC_DEFINE([HAVE_LIBUSB], 1, [Define if libusb 1.x is installed])
1848           HAVE_LIBUSB="yes" ],
1849           [HAVE_LIBUSB="no"])
1850   if test "x$HAVE_UVCVIDEO_H" = "xyes" && \
1851      test "x$HAVE_GUDEV" = "xyes" && \
1852      test "x$HAVE_LIBUSB" = "xyes"; then
1853     HAVE_UVCH264=yes
1854   else
1855     HAVE_UVCH264=no
1856   fi
1857 ])
1858 AC_SUBST(LIBUDEV_CFLAGS)
1859 AC_SUBST(LIBUDEV_LIBS)
1860 AC_SUBST(LIBUSB_CFLAGS)
1861 AC_SUBST(LIBUSB_LIBS)
1862
1863 dnl *** NVENC ***
1864 translit(dnm, m, l) AM_CONDITIONAL(USE_NVENC, true)
1865 AG_GST_CHECK_FEATURE(NVENC, [NVIDIA Encode API], nvenc, [
1866   AC_ARG_WITH([cuda-prefix],
1867           AS_HELP_STRING([--with-cuda-prefix],
1868           [Use the provided prefix for detecting the cuda installation]),
1869           [AS_IF([test "x$with_cuda_prefix" != "x"],
1870                  [CUDA_PREFIX="$with_cuda_prefix"])],
1871           [CUDA_PREFIX=""])
1872
1873   HAVE_CUDA="yes"
1874   if test "x$CUDA_PREFIX" != "x"; then
1875     dnl only override if not already set
1876     if test "x$CUDA_CFLAGS" = "x" -a "x$CUDA_LIBS" = "x"; then
1877       dnl this is an educated guess, user can always override these
1878       CUDA_CFLAGS="-I$CUDA_PREFIX/include"
1879       CUDA_LIBS="-L$CUDA_PREFIX/lib -L$CUDA_PREFIX/lib64 -L$CUDA_PREFIX/lib/stubs -L$CUDA_PREFIX/lib64/stubs -lcuda -lcudart"
1880     fi
1881   else
1882     PKG_CHECK_MODULES([CUDA], [cuda-7.5 cudart-7.5],, [
1883       PKG_CHECK_MODULES([CUDA], [cuda-7.0 cudart-7.0],, [
1884         PKG_CHECK_MODULES([CUDA], [cuda-6.5 cudart-6.5],, [
1885           AC_MSG_WARN([Could not find cuda headers/libraries])])])])
1886   fi
1887
1888   HAVE_CUDA_H=no
1889   HAVE_CUDART_H=no
1890   save_CPPFLAGS="$CPPFLAGS"
1891   CPPFLAGS="$CUDA_CFLAGS $save_CPPFLAGS "
1892   AC_CHECK_HEADER([cuda.h], [HAVE_CUDA_H=yes],
1893       AC_MSG_WARN([Could not find cuda.h]))
1894   AC_CHECK_HEADER([cuda_runtime_api.h], [HAVE_CUDART_H=yes],
1895       AC_MSG_WARN([Could not find cuda_runtime_api.h]))
1896   CPPFLAGS=$save_CPPFLAGS
1897
1898   dnl libcuda and libcudart libraries
1899   save_LIBS="$LIBS"
1900   LIBS="$CUDA_LIBS $save_LIBS"
1901   HAVE_CUDART_LIB="no"
1902   AC_CHECK_LIB(cudart,cudaGetErrorString,[HAVE_CUDART_LIB="yes"], [
1903       AC_MSG_WARN([Could not find cudart library])])
1904   HAVE_CUDA_LIB="no"
1905   AC_CHECK_LIB(cuda,cuInit,[HAVE_CUDA_LIB="yes"], [
1906       AC_MSG_WARN([Could not find cuda library])])
1907   LIBS="$save_LIBS"
1908
1909   dnl nvEncodeAPI.h header
1910   HAVE_NVENCODEAPI_H=no
1911   AC_ARG_VAR(NVENCODE_CFLAGS, [C compiler flags for NvEncodeAPI.h])
1912   save_CPPFLAGS="$CPPFLAGS"
1913   CPPFLAGS="$NVENCODE_CFLAGS $save_CPPFLAGS"
1914   AC_CHECK_HEADER([nvEncodeAPI.h], [
1915       AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <nvEncodeAPI.h>
1916           #if NVENCAPI_MAJOR_VERSION < 5
1917           #error "Need nvEncodeAPI.h >= 5.0"
1918           #endif
1919           ]])], [
1920           HAVE_NVENCODEAPI_H=yes
1921           ], [
1922           AC_MSG_WARN([nvEncodeAPI.h must be >= 5.0])
1923           ])
1924       ],
1925       AC_MSG_WARN([Could not find nvEncodeAPI.h]))
1926   AC_SUBST(NVENCODE_CFLAGS)
1927   CPPFLAGS="$save_CPPFLAGS"
1928
1929   dnl libnvnidia-encode library
1930   HAVE_NVENCODE_LIB=no
1931   AC_ARG_VAR(NVENCODE_LIBS, [linker flags for nvidia-encode])
1932   saved_LIBS="$LIBS"
1933   LIBS="$NVENCODE_LIBS $saved_LIBS"
1934   AC_CHECK_LIB(nvidia-encode, NvEncodeAPICreateInstance, [HAVE_NVENCODE_LIB="yes"],
1935       AC_MSG_WARN([Could not find library nvidia-encode]))
1936   NVENCODE_LIBS="$NVENCODE_LIBS -lnvidia-encode"
1937   AC_SUBST(NVENCODE_LIBS)
1938   LIBS="$saved_LIBS"
1939
1940   USE_NVENC_GST_GL=no
1941   if test "x$HAVE_CUDA_H" = "xyes" \
1942       -a "x$HAVE_CUDART_H" = "xyes" \
1943       -a "x$HAVE_CUDA_LIB" = "xyes" \
1944       -a "x$HAVE_CUDART_LIB" = "xyes" \
1945       -a "x$HAVE_NVENCODEAPI_H" = "xyes" \
1946       -a "x$HAVE_NVENCODE_LIB" = "xyes"; then
1947     HAVE_NVENC="yes"
1948     if test x"$USE_OPENGL" = x"yes"; then
1949       dnl cuda-gl interop header
1950       save_CPPFLAGS="$CPPFLAGS"
1951       CPPFLAGS="$save_CPPFLAGS $CUDA_CFLAGS"
1952       AC_CHECK_HEADER([cuda_gl_interop.h], [
1953         USE_NVENC_GST_GL="yes"
1954         AC_DEFINE(HAVE_NVENC_GST_GL, [1] , [NVENC GStreamer OpenGL support available])
1955         ])
1956       CPPFLAGS="$save_CPPFLAGS"
1957     fi
1958   else
1959     HAVE_NVENC="no"
1960   fi
1961 ])
1962 AM_CONDITIONAL(USE_NVENC_GST_GL, test "x$USE_NVENC_GST_GL" = "xyes")
1963
1964 dnl check for tinyalsa
1965 translit(dnm, m, l) AM_CONDITIONAL(USE_TINYALSA, true)
1966 AG_GST_CHECK_FEATURE(TINYALSA, [tinyalsa], tinyalsa, [
1967   AC_CHECK_HEADER(tinyalsa/asoundlib.h, HAVE_TINYALSA="yes", HAVE_TINYALSA="no")
1968 ])
1969
1970 dnl check for intel mediasdk
1971 translit(dnm, m, l) AM_CONDITIONAL(USE_MSDK, true)
1972 AG_GST_CHECK_FEATURE(MSDK, [Intel MediaSDK], msdk, [
1973   AC_ARG_WITH([msdk-prefix],
1974           AS_HELP_STRING([--with-msdk-prefix],
1975           [Use the provided prefix for detecting the Intel MediaSDK]),
1976           [AS_IF([test "x$with_msdk_prefix" != "x"],
1977                  [MSDK_PREFIX="$with_msdk_prefix"])],
1978           [AS_IF([test "x$MFX_HOME" != "x"],
1979                  [MSDK_PREFIX="$MFX_HOME"],
1980                  [MSDK_PREFIX="/opt/intel/media"])])
1981   MSDK_CFLAGS="-I$MSDK_PREFIX/include"
1982   MSDK_LIBS="-L$MSDK_PREFIX/lib/lin_x64 -lmfx -ldl"
1983   AC_SUBST(MSDK_CFLAGS)
1984   AC_SUBST(MSDK_LIBS)
1985
1986   save_CPPFLAGS="$CPPFLAGS"
1987   CPPFLAGS="$MSDK_CFLAGS $save_CPPFLAGS"
1988   AC_CHECK_HEADER(mfxdefs.h, HAVE_MFXDEFS_H="yes", HAVE_MFXDEFS_H="no")
1989   CPPFLAGS="$save_CPPFLAGS"
1990
1991   save_LIBS="$LIBS"
1992   LIBS="$MSDK_LIBS $LIBS"
1993   AC_LANG_PUSH([C++])
1994   AC_CHECK_LIB(mfx,MFXInit,HAVE_MFX_LIB="yes",HAVE_MFX_LIB="no")
1995   AC_LANG_POP([C++])
1996   LIBS="$save_LIBS"
1997
1998   PKG_CHECK_MODULES(LIBVA_DRM, libva-drm, HAVE_LIBVA_DRM="yes", HAVE_LIBVA_DRM="no")
1999
2000   if test "x$HAVE_MFXDEFS_H" = "xyes" \
2001       -a "x$HAVE_MFX_LIB" = "xyes" \
2002       -a "x$HAVE_LIBVA_DRM" = "xyes"; then
2003     HAVE_MSDK="yes"
2004   else
2005     HAVE_MSDK="no"
2006   fi
2007 ])
2008 AM_CONDITIONAL(USE_MSDK_LIBVA,
2009     test "x$HAVE_MSDK" = "xyes" -a "x$HAVE_LIBVA_DRM" = "xyes")
2010
2011 dnl *** ext plug-ins ***
2012 dnl keep this list sorted alphabetically !
2013
2014 if test "x$BUILD_EXTERNAL" = "xyes"; then
2015
2016 dnl *** assrender ***
2017 translit(dnm, m, l) AM_CONDITIONAL(USE_ASSRENDER, true)
2018 AG_GST_CHECK_FEATURE(ASSRENDER, [ASS/SSA renderer], assrender, [
2019   PKG_CHECK_MODULES(ASSRENDER, libass >= 0.10.2, [
2020     HAVE_ASSRENDER="yes" ], [
2021     HAVE_ASSRENDER="no"
2022   ])
2023 ])
2024 AC_SUBST(ASSRENDER_CFLAGS)
2025 AC_SUBST(ASSRENDER_LIBS)
2026
2027 dnl *** vo-amrwbenc ***
2028 translit(dnm, m, l) AM_CONDITIONAL(USE_VOAMRWBENC, true)
2029 AG_GST_CHECK_FEATURE(VOAMRWBENC, [vo-amrwbenc library], vo-amrwbenc, [
2030   AG_GST_PKG_CHECK_MODULES(VOAMRWBENC, vo-amrwbenc >= 0.1.0)
2031 ])
2032
2033 dnl *** vo-aacenc ***
2034 translit(dnm, m, l) AM_CONDITIONAL(USE_VOAACENC, true)
2035 AG_GST_CHECK_FEATURE(VOAACENC, [vo-aacenc library], vo-aacenc, [
2036   AG_GST_PKG_CHECK_MODULES(VOAACENC, vo-aacenc >= 0.1.0)
2037 ])
2038
2039 dnl *** bs2b ***
2040 translit(dnm, m, l) AM_CONDITIONAL(USE_BS2B, true)
2041 AG_GST_CHECK_FEATURE(BS2B, [bs2b], bs2b, [
2042   PKG_CHECK_MODULES(BS2B, libbs2b >= 3.1.0, HAVE_BS2B="yes", [
2043     HAVE_BS2B="no"
2044   ])
2045   AC_SUBST(BS2B_CFLAGS)
2046   AC_SUBST(BS2B_LIBS)
2047 ])
2048
2049 dnl *** BZ2 ***
2050 translit(dnm, m, l) AM_CONDITIONAL(USE_BZ2, true)
2051 AG_GST_CHECK_FEATURE(BZ2, [bz2 library], bz2, [
2052   save_LIBS=$LIBS
2053   LIBS="$LIBS -lbz2"
2054   AC_MSG_CHECKING([for BZ2_bzlibVersion in -lbz2])
2055   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <bzlib.h>]], [[const char *version = BZ2_bzlibVersion ();]])],[HAVE_BZ2=yes],[HAVE_BZ2=no])
2056   AC_MSG_RESULT($HAVE_BZ2)
2057   LIBS=$save_LIBS
2058   if test "x$HAVE_BZ2" = "xyes"; then
2059     BZ2_LIBS="-lbz2"
2060   fi
2061   AC_SUBST(BZ2_LIBS)
2062
2063 ])
2064
2065 #dnl *** cairo ***
2066 #translit(dnm, m, l) AM_CONDITIONAL(USE_CAIRO, true)
2067 #AG_GST_CHECK_FEATURE(CAIRO, [cairo plug-in], cairo, [
2068 #  PKG_CHECK_MODULES(CAIRO, cairo >= 1.0 glitz-glx, HAVE_CAIRO=yes, [
2069 #    HAVE_CAIRO=no
2070 #  ])
2071 #  AC_SUBST(CAIRO_CFLAGS)
2072 #  AC_SUBST(CAIRO_LIBS)
2073 #])
2074
2075 dnl *** chromaprint ***
2076 translit(dnm, m, l) AM_CONDITIONAL(USE_CHROMAPRINT, true)
2077 AG_GST_CHECK_FEATURE(CHROMAPRINT, [chromaprint], chromaprint, [
2078   PKG_CHECK_MODULES(CHROMAPRINT, libchromaprint, HAVE_CHROMAPRINT="yes", [
2079     HAVE_CHROMAPRINT="no"
2080   ])
2081   AC_SUBST(CHROMAPRINT_CFLAGS)
2082   AC_SUBST(CHROMAPRINT_LIBS)
2083 ])
2084
2085 dnl *** Curl ***
2086 translit(dnm, m, l) AM_CONDITIONAL(USE_CURL, true)
2087 AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
2088   PKG_CHECK_MODULES(CURL, libcurl >= 7.35.0, [
2089     HAVE_CURL="yes"
2090     AC_CHECK_HEADERS([unistd.h sys/socket.h sys/types.h netinet/in.h netinet/tcp.h fcntl.h], [ ], [
2091       AC_CHECK_HEADERS([unistd.h sys/types.h winsock2.h ws2tcpip.h fcntl.h], [ ], [HAVE_CURL="no"])
2092     ])
2093     AC_CHECK_HEADERS([netinet/ip.h], [], [HAVE_CURL="no"],
2094     [[#ifdef HAVE_SYS_TYPES_H
2095      # include <sys/types.h>
2096      #endif
2097      #ifdef HAVE_NETINET_IN_H
2098      # include <netinet/in.h>
2099      #endif
2100     ]])
2101     AC_MSG_CHECKING([for socket support needed by curlsink])
2102     AC_MSG_RESULT($HAVE_CURL)
2103   ], [
2104     HAVE_CURL="no"
2105   ])
2106   AC_SUBST(CURL_CFLAGS)
2107   AC_SUBST(CURL_LIBS)
2108   PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
2109     HAVE_SSH2="yes"
2110     AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
2111   ], [
2112     HAVE_SSH2="no"
2113   ])
2114   AM_CONDITIONAL(USE_SSH2, test "x$HAVE_SSH2" = "xyes")
2115   AC_SUBST(SSH2_CFLAGS)
2116   AC_SUBST(SSH2_LIBS)
2117 ],,,[AM_CONDITIONAL(USE_SSH2, false)])
2118
2119 dnl **** DASH ****
2120 translit(dnm, m, l) AM_CONDITIONAL(USE_DASH, true)
2121 AG_GST_CHECK_FEATURE(DASH, [DASH plug-in], dash, [
2122   PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= 2.8, [HAVE_LIBXML2="yes"
2123     HAVE_DASH="yes"], [HAVE_LIBXML2="no"
2124     HAVE_DASH="no"])
2125   AC_SUBST(LIBXML2_CFLAGS)
2126   AC_SUBST(LIBXML2_LIBS)
2127 ])
2128
2129 dnl *** dc1394  ***
2130 translit(dnm, m, l) AM_CONDITIONAL(USE_DC1394, true)
2131 AG_GST_CHECK_FEATURE(DC1394, [libdc1394], dc1394, [
2132    PKG_CHECK_MODULES(LIBDC1394, libdc1394-2 >= 2.0.0, [
2133         if test -z "`$PKG_CONFIG --modversion libdc1394-2 | grep 2.0.0-rc`"; then
2134                 HAVE_DC1394="yes"
2135         else
2136                 HAVE_DC1394="no"
2137         fi
2138    ], [
2139         HAVE_DC1394="no"
2140         AC_MSG_RESULT(no)
2141    ])
2142    AC_SUBST(LIBDC1394_CFLAGS)
2143    AC_SUBST(LIBDC1394_LIBS)
2144 ])
2145
2146 dnl *** decklink  ***
2147 translit(dnm, m, l) AM_CONDITIONAL(USE_DECKLINK, true)
2148 AG_GST_CHECK_FEATURE(DECKLINK, [decklink], decklink, [
2149    HAVE_DECKLINK=no
2150    case "$host" in
2151      *android*)
2152        HAVE_DECKLINK=no
2153        ;;
2154      *-*linux*)
2155        if test "x$HAVE_PTHREAD_H" = "xyes"; then
2156          AC_CHECK_LIB(dl, dlopen,
2157            [
2158             HAVE_DECKLINK=yes
2159             DECKLINK_CXXFLAGS=
2160             DECKLINK_LIBS="-lpthread -ldl"
2161            ])
2162        fi
2163        ;;
2164      *-*darwin*)
2165        if test "x$HAVE_PTHREAD_H" = "xyes"; then
2166          AC_CHECK_LIB(dl, dlopen,
2167            [
2168             HAVE_DECKLINK=yes
2169             DECKLINK_CXXFLAGS=
2170             DECKLINK_LIBS="-lpthread -ldl"
2171             HAVE_DECKLINK_OSX=yes
2172            ])
2173        fi
2174        ;;
2175      *)
2176        HAVE_DECKLINK=no
2177        ;;
2178    esac
2179
2180    AC_SUBST(DECKLINK_CXXFLAGS)
2181    AC_SUBST(DECKLINK_LIBS)
2182 ])
2183 AM_CONDITIONAL(DECKLINK_OSX, test "x$HAVE_DECKLINK_OSX" = xyes)
2184
2185 dnl **** DirectFB ****
2186 translit(dnm, m, l) AM_CONDITIONAL(USE_DIRECTFB, true)
2187 AG_GST_CHECK_FEATURE(DIRECTFB, [directfb], dfbvideosink , [
2188   PKG_CHECK_MODULES(DIRECTFB, directfb >= 0.9.24, HAVE_DIRECTFB="yes", [
2189     HAVE_DIRECTFB="no"
2190   ])
2191 ])
2192
2193 dnl **** Wayland ****
2194 translit(dnm, m, l) AM_CONDITIONAL(USE_WAYLAND, true)
2195 AC_PATH_PROG([wayland_scanner], [wayland-scanner])
2196 AG_GST_CHECK_FEATURE(WAYLAND, [wayland sink], wayland , [
2197   PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.4.0 libdrm >= 2.4.55 wayland-protocols >= 1.4, [
2198     if test "x$wayland_scanner" != "x"; then
2199       HAVE_WAYLAND="yes"
2200       AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, `$PKG_CONFIG --variable=pkgdatadir wayland-protocols`)
2201     else
2202       AC_MSG_RESULT([wayland-scanner is required to build the wayland plugin])
2203       HAVE_WAYLAND="no"
2204     fi
2205     ],
2206     [ HAVE_WAYLAND="no"
2207   ])
2208 ])
2209
2210 dnl **** WebP ****
2211 translit(dnm, m, l) AM_CONDITIONAL(USE_WEBP, true)
2212 AG_GST_CHECK_FEATURE(WEBP, [WebP], webp , [
2213   PKG_CHECK_MODULES(WEBP, libwebp >= 0.2.1, [
2214     HAVE_WEBP="yes" ], [ HAVE_WEBP="no"
2215   ])
2216   AC_SUBST(WEBP_CFLAGS)
2217   AC_SUBST(WEBP_LIBS)
2218 ])
2219
2220 dnl *** Daala ***
2221 translit(dnm, m, l) AM_CONDITIONAL(USE_DAALA, true)
2222 AG_GST_CHECK_FEATURE(DAALA, [daala], daala, [
2223   if test "x$BUILD_EXPERIMENTAL" = "xyes"; then
2224     PKG_CHECK_MODULES(DAALA, daalaenc daaladec, [
2225             HAVE_DAALA="yes"
2226     ], [
2227             HAVE_DAALA="no"
2228     ])
2229     AC_SUBST(DAALA_CFLAGS)
2230     AC_SUBST(DAALA_LIBS)
2231   fi
2232 ])
2233
2234 dnl *** DTS ***
2235 translit(dnm, m, l) AM_CONDITIONAL(USE_DTS, true)
2236 AG_GST_CHECK_FEATURE(DTS, [dts library], dtsdec, [
2237   HAVE_DTS="yes"
2238   AG_GST_CHECK_LIBHEADER(DTS, dca, dca_init, $LIBM, dca.h,
2239     DTS_LIBS="-ldca $LIBM", HAVE_DTS="no")
2240   if test $HAVE_DTS = "no"; then
2241     AG_GST_CHECK_LIBHEADER(DTS, dts_pic, dts_init, $LIBM, dts.h,
2242       [ DTS_LIBS="-ldts_pic $LIBM"
2243         AC_DEFINE(DTS_OLD, 1, [Define if an old libdts is used])
2244       ])
2245   fi
2246   AC_SUBST(DTS_LIBS)
2247 ])
2248
2249 dnl *** resindvd ***
2250 translit(dnm, m, l) AM_CONDITIONAL(USE_RESINDVD, true)
2251 AG_GST_CHECK_FEATURE(RESINDVD, [resindvd plugin], resindvd, [
2252   PKG_CHECK_MODULES(DVDNAV, dvdnav >= 4.1.2 dvdread >= 4.1.2, HAVE_RESINDVD="yes", [
2253     HAVE_RESINDVD="no"
2254   ])
2255 ])
2256
2257 dnl **** Free AAC Encoder (FAAC) ****
2258 translit(dnm, m, l) AM_CONDITIONAL(USE_FAAC, true)
2259 AG_GST_CHECK_FEATURE(FAAC, [AAC encoder plug-in], faac, [
2260   AG_GST_CHECK_LIBHEADER(FAAC, faac, faacEncOpen, $LIBM, faac.h,
2261     FAAC_LIBS="-lfaac $LIBM")
2262   AC_SUBST(FAAC_LIBS)
2263 ])
2264
2265 dnl **** Free AAC Decoder (FAAD2) ****
2266 translit(dnm, m, l) AM_CONDITIONAL(USE_FAAD, true)
2267 AG_GST_CHECK_FEATURE(FAAD, [FAAD2 AAC decoder plug-in], faad, [
2268   AG_GST_CHECK_LIBHEADER(FAAD, faad, NeAACDecOpen, $LIBM, neaacdec.h, [
2269     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <faad.h>]], [[
2270       #if !defined(FAAD2_VERSION) || !defined(FAAD_FMT_DOUBLE)
2271       #error Not faad2
2272       #elif !defined(LATM)
2273       #error Not faad2 >= 2.7
2274       #endif
2275     ]])],[
2276       HAVE_FAAD="yes"
2277       FAAD_LIBS="-lfaad"
2278     ], [
2279       AC_MSG_WARN([Found libfaad, but version not recent enough. Need faad2 >= 2.7])
2280       HAVE_FAAD="no"
2281     ])
2282   ], [
2283       HAVE_FAAD="no"
2284   ])
2285   AC_SUBST(FAAD_LIBS)
2286 ])
2287
2288 dnl *** fbdev ***
2289 translit(dnm, m, l) AM_CONDITIONAL(USE_FBDEV, true)
2290 AG_GST_CHECK_FEATURE(FBDEV, [linux framebuffer], fbdevsink, [
2291   if test "x$HAVE_FBDEV" != "xyes"; then
2292     AC_CHECK_HEADER([linux/fb.h], HAVE_FBDEV=yes, HAVE_FBDEV=no)
2293   fi
2294 ])
2295
2296 dnl *** fdkaac ***
2297 translit(dnm, m, l) AM_CONDITIONAL(USE_FDK_AAC, true)
2298 AG_GST_CHECK_FEATURE(FDK_AAC, [fdkaac plugin], fdkaac, [
2299   PKG_CHECK_MODULES(FDK_AAC, fdk-aac >= 0.1.4, [
2300     HAVE_FDK_AAC="yes",
2301     HAVE_FDK_AAC_0_1_4="yes"
2302     AC_DEFINE(HAVE_FDK_AAC_0_1_4 1, [Define if we have fdk-aac >= 0.1.4])
2303   ],[
2304     PKG_CHECK_MODULES(FDK_AAC, fdk-aac, HAVE_FDK_AAC="yes", HAVE_FDK_AAC="no")
2305   ])
2306 ])
2307
2308 dnl *** flite ***
2309 translit(dnm, m, l) AM_CONDITIONAL(USE_FLITE, true)
2310 AG_GST_CHECK_FEATURE(FLITE, [Flite plugin], flite, [
2311   AG_GST_CHECK_LIBHEADER(FLITE, flite, flite_init, $LIBM, flite/flite.h,
2312     FLITE_LIBS="-lflite -lflite_cmu_us_kal -lflite_usenglish -lflite_cmulex $LIBM")
2313
2314   AC_SUBST(FLITE_CFLAGS)
2315   AC_SUBST(FLITE_LIBS)
2316 ])
2317
2318 dnl *** gsm ***
2319 translit(dnm, m, l) AM_CONDITIONAL(USE_GSM, true)
2320 AG_GST_CHECK_FEATURE(GSM, [GSM library], gsmenc gsmdec, [
2321   AG_GST_CHECK_LIBHEADER(GSM, gsm, gsm_create, , gsm.h, GSM_LIBS="-lgsm")
2322   if test $HAVE_GSM != "yes"; then
2323     AG_GST_CHECK_LIBHEADER(GSM, gsm, gsm_create, , gsm/gsm.h, GSM_LIBS="-lgsm")
2324     if test $HAVE_GSM = "yes"; then
2325       AC_DEFINE(GSM_HEADER_IN_SUBDIR, 1, [Define if GSM header in gsm/ subdir])
2326     fi
2327   fi
2328   AC_SUBST(GSM_LIBS)
2329 ])
2330
2331 dnl *** fluidSynth ***
2332 translit(dnm, m, l) AM_CONDITIONAL(USE_FLUIDSYNTH, true)
2333 AG_GST_CHECK_FEATURE(FLUIDSYNTH, [fluidsynth], fluidsynth, [
2334   PKG_CHECK_MODULES(FLUIDSYNTH, fluidsynth >= 1.0, HAVE_FLUIDSYNTH="yes", [
2335     HAVE_FLUIDSYNTH="no"
2336   ])
2337 ])
2338
2339 dnl *** kate ***
2340 translit(dnm, m, l) AM_CONDITIONAL(USE_KATE, true)
2341 AG_GST_CHECK_FEATURE(KATE, [Kate], kate, [
2342   PKG_CHECK_MODULES(KATE, kate >= 0.1.7, HAVE_KATE="yes", [
2343     HAVE_KATE="no"
2344   ])
2345   AC_SUBST(KATE_CFLAGS)
2346   AC_SUBST(KATE_LIBS)
2347   PKG_CHECK_MODULES(TIGER, tiger >= 0.3.2,
2348     [
2349       HAVE_TIGER="yes"
2350       AC_DEFINE(HAVE_TIGER, 1, [Define if libtiger is available])
2351     ],
2352     [
2353       HAVE_TIGER="no"
2354     ]
2355   )
2356   AM_CONDITIONAL(USE_TIGER, test "x$HAVE_TIGER" = "xyes")
2357   AC_SUBST(TIGER_CFLAGS)
2358   AC_SUBST(TIGER_LIBS)
2359 ],,,[AM_CONDITIONAL(USE_TIGER, false)])
2360
2361 dnl *** kms ***
2362 translit(dnm, m, l) AM_CONDITIONAL(USE_KMS, true)
2363 AG_GST_CHECK_FEATURE(KMS, [drm/kms libraries], kms, [
2364   AG_GST_PKG_CHECK_MODULES(GST_ALLOCATORS, gstreamer-allocators-1.0)
2365   PKG_CHECK_MODULES([KMS_DRM], [libdrm >= 2.4.55], HAVE_KMS=yes, HAVE_KMS=no)
2366 ])
2367
2368 dnl *** ladspa ***
2369 translit(dnm, m, l) AM_CONDITIONAL(USE_LADSPA, true)
2370 AG_GST_CHECK_FEATURE(LADSPA, [ladspa], ladspa, [
2371   AC_CHECK_HEADER(ladspa.h, HAVE_LADSPA="yes", HAVE_LADSPA="no")
2372
2373   PKG_CHECK_MODULES(LRDF, lrdf, HAVE_LRDF=yes, HAVE_LRDF=no)
2374   if test $HAVE_LRDF = "yes"; then
2375     AC_DEFINE(HAVE_LRDF, 1, [Define if we have liblrdf])
2376   fi
2377   AC_SUBST(LRDF_LIBS)
2378   AC_SUBST(LRDF_CFLAGS)
2379 ])
2380
2381 dnl *** LV2 ***
2382 translit(dnm, m, l) AM_CONDITIONAL(USE_LV2, true)
2383 AG_GST_CHECK_FEATURE(LV2, [lv2], lv2, [
2384   PKG_CHECK_MODULES(LILV, lilv-0 >= 0.22, [
2385     HAVE_LV2="yes",
2386     HAVE_LILV_0_22="yes"
2387     AC_DEFINE(HAVE_LILV_0_22, 1, [Define if we have liblilv >= 0.22])
2388   ],[
2389     PKG_CHECK_MODULES(LILV, lilv-0 >= 0.16, HAVE_LV2="yes", HAVE_LV2="no")
2390   ])
2391   AC_SUBST(LILV_CFLAGS)
2392   AC_SUBST(LILV_LIBS)
2393 ])
2394
2395 dnl *** libde265 ***
2396 translit(dnm, m, l) AM_CONDITIONAL(USE_LIBDE265, true)
2397 AG_GST_CHECK_FEATURE(LIBDE265, [libde265 HEVC/H.265 decoder], libde265, [
2398   PKG_CHECK_MODULES(LIBDE265, libde265 >= 0.9, HAVE_LIBDE265="yes", HAVE_LIBDE265="no")
2399   AC_SUBST(LIBDE265_CFLAGS)
2400   AC_SUBST(LIBDE265_LIBS)
2401 ])
2402
2403 dnl *** libmms ***
2404 translit(dnm, m, l) AM_CONDITIONAL(USE_LIBMMS, true)
2405 AG_GST_CHECK_FEATURE(LIBMMS, [mms protocol library], libmms, [
2406   dnl check with pkg-config first
2407   PKG_CHECK_MODULES(LIBMMS, libmms >= 0.4, HAVE_LIBMMS="yes", [
2408     HAVE_LIBMMS="no"
2409   ])
2410 ])
2411 AC_SUBST(LIBMMS_LIBS)
2412
2413
2414 dnl *** libsrtp ***
2415 translit(dnm, m, l) AM_CONDITIONAL(USE_SRTP, true)
2416 AG_GST_CHECK_FEATURE(SRTP, [srtp library], srtp, [
2417   PKG_CHECK_MODULES(SRTP, libsrtp, HAVE_SRTP="yes",
2418     AG_GST_CHECK_LIBHEADER(SRTP, srtp, srtp_init, , srtp/srtp.h, SRTP_LIBS="-lsrtp")
2419   )
2420   AC_SUBST(SRTP_LIBS)
2421   AC_SUBST(SRTP_CFLAGS)
2422 ])
2423
2424 dnl *** dtls ***
2425 translit(dnm, m, l) AM_CONDITIONAL(USE_DTLS, true)
2426 AG_GST_CHECK_FEATURE(DTLS, [DTLS plugin], dtls, [
2427   PKG_CHECK_MODULES(DTLS, [ openssl >= 1.0.1  libcrypto ], [
2428     HAVE_DTLS="yes"
2429     AC_SUBST(DTLS_CFLAGS)
2430     AC_SUBST(DTLS_LIBS)
2431   ], [
2432     HAVE_DTLS="no"
2433   ])
2434 ])
2435
2436 dnl *** ttml ***
2437 translit(dnm, m, l) AM_CONDITIONAL(USE_TTML, true)
2438 AG_GST_CHECK_FEATURE(TTML, [TTML plugin], ttml, [
2439   if test "x$BUILD_EXPERIMENTAL" = "xyes"; then
2440     PKG_CHECK_MODULES(TTML, [ libxml-2.0 >= 2.9.2 pango cairo pangocairo ], [
2441       HAVE_TTML="yes"
2442     ], [
2443       HAVE_TTML="no"
2444     ])
2445   fi
2446 ])
2447
2448 dnl *** modplug ***
2449 translit(dnm, m, l) AM_CONDITIONAL(USE_MODPLUG, true)
2450 AG_GST_CHECK_FEATURE(MODPLUG, modplug, modplug, [
2451   if test "x$HAVE_CXX" != "xyes"; then
2452     AC_MSG_WARN([Not compiling modplug plugin as it requires a C++ compiler])
2453     HAVE_MODPLUG="no"
2454   else
2455     PKG_CHECK_MODULES(MODPLUG, libmodplug, HAVE_MODPLUG="yes", HAVE_MODPLUG="no")
2456   fi
2457   AC_SUBST(MODPLUG_CFLAGS)
2458   AC_SUBST(MODPLUG_LIBS)
2459 ])
2460
2461 dnl *** mjpegtools version info ***
2462 dnl some may prefer older version (given quirks above)
2463 dnl hm, no version info seems available within mjpegtools headers
2464 dnl and API really moves along
2465 echo
2466 PKG_CHECK_EXISTS(mjpegtools >= 1.6.1.93 mjpegtools < 1.8.0, [
2467   mjpegtools_api=10601
2468 ], [
2469   PKG_CHECK_EXISTS(mjpegtools >= 1.8.0 mjpegtools < 1.9.0, [
2470     mjpegtools_api=10800
2471   ], [
2472     PKG_CHECK_EXISTS(mjpegtools >= 2.0.0, [
2473       mjpegtools_api=20000
2474     ], [
2475       PKG_CHECK_MODULES(MJPEG, mjpegtools >= 1.9.0 mjpegtools < 2.0.0, [
2476         dnl logging API changed in release candidates
2477         OLD_CFLAGS="$CFLAGS"
2478         OLD_LIBS="$LIBS"
2479         CFLAGS="$MJPEG_CFLAGS"
2480         LIBS="$LIBS $MJPEG_LIBS -lmjpegutils $LIBM $PTHREAD_LIBS"
2481         AC_CHECK_FUNC(mjpeg_loglev_t, [
2482           mjpegtools_api=10903
2483           ], [
2484           mjpegtools_api=10900
2485           ])
2486         CFLAGS="$OLD_CFLAGS"
2487         LIBS="$OLD_LIBS"
2488       ], [
2489         mjpegtools_api=0
2490       ])
2491     ])
2492   ])
2493 ])
2494 AC_DEFINE_UNQUOTED(GST_MJPEGTOOLS_API, $mjpegtools_api,
2495   [mjpegtools API evolution])
2496
2497 dnl *** mpeg2enc ***
2498 translit(dnm, m, l) AM_CONDITIONAL(USE_MPEG2ENC, true)
2499 AG_GST_CHECK_FEATURE(MPEG2ENC, [mpeg2enc], mpeg2enc, [
2500   HAVE_MPEG2ENC="no"
2501   dnl we require a c++ compiler for this one
2502   if [ test x$HAVE_CXX = xyes ]; then
2503     dnl libmpeg2enc was first included in mjpegtools-1.6.2-rc3 (1.6.1.92)
2504     dnl since many distros include mjpegtools specifically without mplex
2505     dnl and mpeg2enc, we check for mpeg2enc on its own, too.
2506     PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.93, [
2507       dnl HACK because mpeg2enc 1.8.0 header files have a spurious 'include config.h'
2508       touch config.h
2509       dnl switch over to c++ to test things
2510       AC_LANG([C++])
2511       OLD_CPPFLAGS="$CPPFLAGS"
2512       dnl HACK as above
2513       CPPFLAGS_GOOD="$CPPFLAGS $MPEG2ENC_CFLAGS"
2514       CPPFLAGS="$CPPFLAGS_GOOD -I."
2515       dnl check headers
2516       mpeg2enc_headers_ok=no
2517       AC_CHECK_HEADER([mpeg2encoder.hh], [
2518         MPEG2ENC_LIBS="$MPEG2ENC_LIBS -lmpeg2encpp $LIBM $PTHREAD_LIBS"
2519         OLD_LIBS="$LIBS"
2520         LIBS="$LIBS $MPEG2ENC_LIBS"
2521         AC_MSG_CHECKING([for valid mpeg2enc objects])
2522         AC_RUN_IFELSE([AC_LANG_SOURCE([[
2523           #include <mpeg2encoder.hh>
2524           #include <mpeg2encoptions.hh>
2525
2526           int
2527           main (int   argc,
2528                 char *argv[])
2529           {
2530             MPEG2EncOptions *options = new MPEG2EncOptions ();
2531             MPEG2Encoder *encoder = new MPEG2Encoder (*options);
2532             return 0;
2533           }
2534         ]])],[
2535           AC_MSG_RESULT(yes)
2536           dnl so far so good, let's check more things:
2537           dnl mjpegtools-1.8.0 does not install the required
2538           dnl mpeg2syntaxcodes.h header by default, and a new release
2539           dnl is not in sight, so check for this oversight in case
2540           dnl distros or folks have fixed this themselves
2541           if test "$mjpegtools_api" -ge "10800"; then
2542             AC_CHECK_HEADER([mpeg2syntaxcodes.h], [
2543                 mpeg2enc_headers_ok=yes
2544               ], [
2545                 mpeg2enc_headers_ok=no
2546               ])
2547           else
2548             mpeg2enc_headers_ok=yes
2549           fi
2550           if test "x$mpeg2enc_headers_ok" = "xyes"; then
2551             HAVE_MPEG2ENC="yes"
2552           fi
2553           CPPFLAGS="$CPPFLAGS_GOOD"
2554           AC_SUBST(MPEG2ENC_CFLAGS)
2555           AC_SUBST(MPEG2ENC_LIBS)
2556         ],[
2557           AC_MSG_RESULT(no)
2558         ],[])
2559         LIBS="$OLD_LIBS"
2560       ])
2561
2562       CPPFLAGS="$OLD_CPPFLAGS"
2563       AC_LANG([C])
2564     ], [
2565       HAVE_MPEG2ENC="no"
2566     ])
2567   fi
2568 ])
2569
2570 dnl *** mplex ***
2571 translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true)
2572 AG_GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [
2573   HAVE_MPLEX="no"
2574   dnl we require a c++ compiler for this one
2575   if [ test x$HAVE_CXX = xyes ]; then
2576     dnl libmplex was first included in mjpegtools-1.6.2-rc4 (1.6.1.93)
2577     dnl since many distros include mjpegtools specifically without mplex
2578     dnl and mpeg2enc, we check for mplex on its own, too.
2579     dnl libmplex < 1.9rc? has fuzzy ABI, valgrind and other problems
2580     PKG_CHECK_MODULES(MPLEX, mjpegtools >= 1.9.0, [
2581       dnl HACK because mplex 2.0.0 header files have a spurious 'include config.h'
2582       touch config.h
2583       dnl switch over to c++ to test things
2584       AC_LANG([C++])
2585       OLD_CPPFLAGS="$CPPFLAGS"
2586       dnl HACK as above
2587       CPPFLAGS_GOOD="$CPPFLAGS $MPLEX_CFLAGS"
2588       CPPFLAGS="$CPPFLAGS_GOOD -I."
2589       AC_CHECK_HEADER(interact.hpp, [
2590         MPLEX_LIBS="$MPLEX_LIBS -lmplex2 $LIBM"
2591         OLD_LIBS="$LIBS"
2592         LIBS="$LIBS $MPLEX_LIBS"
2593         OLD_LDFLAGS="$LDFLAGS"
2594         LDFLAGS="$LDFLAGS $MPLEX_LDFLAGS"
2595         dnl older libmplex uses off_t SegmentSize (), which leads to fuzzy ABI;
2596         dnl don't want this here
2597         AC_MSG_CHECKING([for valid mplex objects])
2598         AC_RUN_IFELSE([AC_LANG_SOURCE([[
2599
2600 #include <interact.hpp>
2601 #include <outputstrm.hpp>
2602 #include <multiplexor.hpp>
2603 int
2604 main (int   argc,
2605       char *argv[])
2606 {
2607   class TestOutputStream : public OutputStream {
2608   public:
2609     TestOutputStream () : OutputStream () { }
2610     void Write (uint8_t *a, unsigned int b) { }
2611     void NextSegment () { }
2612     uint64_t SegmentSize () { }
2613     void Close () { }
2614     int Open () { }
2615 };
2616   MultiplexJob *job = new MultiplexJob ();
2617   vector<IBitStream *> inputs;
2618   job->SetupInputStreams (inputs);
2619   TestOutputStream *out = new TestOutputStream ();
2620   Multiplexor *mux = new Multiplexor(*job, *out, NULL);
2621   return 0;
2622 }
2623         ]])],[
2624           HAVE_MPLEX="yes"
2625           CPPFLAGS="$CPPFLAGS_GOOD"
2626           AC_SUBST(MPLEX_CFLAGS)
2627           AC_SUBST(MPLEX_LIBS)
2628           AC_SUBST(MPLEX_LDFLAGS)
2629           AC_MSG_RESULT(yes)
2630         ],[AC_MSG_RESULT(no)],[])
2631         LIBS="$OLD_LIBS"
2632         LDFLAGS="$OLD_LDFLAGS"
2633       ])
2634       CPPFLAGS="$OLD_CPPFLAGS"
2635       AC_LANG([C])
2636     ], HAVE_MPLEX="no")
2637   fi
2638 ])
2639
2640 dnl *** musepack ***
2641 translit(dnm, m, l) AM_CONDITIONAL(USE_MUSEPACK, true)
2642 AG_GST_CHECK_FEATURE(MUSEPACK, [musepackdec], musepack, [
2643   AC_CHECK_HEADER([mpc/mpcdec.h], [
2644     HAVE_MUSEPACK="yes"
2645     MUSEPACK_LIBS="-lmpcdec"
2646     AC_SUBST(MUSEPACK_LIBS)
2647     ], [AC_CHECK_HEADER([mpcdec/mpcdec.h], [
2648       HAVE_MUSEPACK="yes"
2649       MUSEPACK_LIBS="-lmpcdec"
2650       AC_DEFINE(MPC_IS_OLD_API, 1, [Define if the old MusePack API is used])
2651       AC_SUBST(MUSEPACK_LIBS)
2652     ], [HAVE_MUSEPACK="no"])])
2653 ])
2654
2655 dnl *** neon ***
2656 translit(dnm, m, l) AM_CONDITIONAL(USE_NEON, true)
2657 AG_GST_CHECK_FEATURE(NEON, [neon http client plugins], neonhttpsrc, [
2658   PKG_CHECK_MODULES(NEON, neon >= 0.27.0  neon <= 0.30.99, HAVE_NEON="yes", [
2659     HAVE_NEON="no"
2660   ])
2661   AC_SUBST(NEON_CFLAGS)
2662   AC_SUBST(NEON_LIBS)
2663 ])
2664
2665 dnl *** ofa ***
2666 translit(dnm, m, l) AM_CONDITIONAL(USE_OFA, true)
2667 AG_GST_CHECK_FEATURE(OFA, [ofa plugins], ofa, [
2668   PKG_CHECK_MODULES(OFA, libofa >= 0.9.3, HAVE_OFA="yes", [
2669     HAVE_OFA="no"
2670   ])
2671   AC_SUBST(OFA_CFLAGS)
2672   AC_SUBST(OFA_LIBS)
2673 ])
2674
2675 dnl *** OpenAL ***
2676 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENAL, true)
2677 AG_GST_CHECK_FEATURE(OPENAL, [OpenAL plugin], openal, [
2678   PKG_CHECK_MODULES(OPENAL, openal >= 1.14, HAVE_OPENAL="yes", [
2679     HAVE_OPENAL="no"
2680   ])
2681   AC_SUBST(OPENAL_CFLAGS)
2682   AC_SUBST(OPENAL_LIBS)
2683 ])
2684
2685 dnl *** opencv ***
2686 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENCV, true)
2687 AG_GST_CHECK_FEATURE(OPENCV, [opencv plugins], opencv, [
2688   dnl we specify a max. version too because we set CV_NO_BACKWARD_COMPATIBILITY
2689   dnl and don't want the build to break when a new opencv version comes out.
2690   dnl Need to adjust this upwards once we know that our code compiles fine with
2691   dnl a new version and the no-backward-compatibility define. (There doesn't
2692   dnl seem to be a switch to suppress the warnings the cvcompat.h header
2693   dnl causes.)
2694   PKG_CHECK_MODULES(OPENCV, opencv >= 2.3.0 opencv <= 3.2.0 , [
2695     AC_PROG_CXX
2696     AC_LANG([C++])
2697     OLD_CPPFLAGS=$CPPFLAGS
2698     CPPFLAGS=$OPENCV_CFLAGS
2699     something_not_found=no
2700     AC_CHECK_HEADERS([opencv2/core/core_c.h \
2701                       opencv2/core/version.hpp \
2702                       opencv2/highgui/highgui_c.h \
2703                       opencv2/imgproc/imgproc.hpp \
2704                       opencv2/imgproc/imgproc_c.h \
2705                       opencv2/objdetect/objdetect.hpp \
2706                       opencv2/video/background_segm.hpp], [], [something_not_found=yes])
2707
2708     dnl Only required for OpenCV >= 3, we have compat code for older versions
2709     PKG_CHECK_MODULES(OPENCV_3, opencv >= 3, [
2710       dnl check opencv_contrib headers (not always present in opencv distributions)
2711       AC_CHECK_HEADERS([opencv2/bgsegm.hpp], [], [something_not_found=yes])],
2712       [NOT_A_PROBLEM=yes])
2713
2714     CPPFLAGS=$OLD_CPPFLAGS
2715     AC_LANG([C])
2716
2717     if test $something_not_found = "yes"; then
2718       AC_MSG_RESULT([not all opencv2 headers were found])
2719       HAVE_OPENCV="no"
2720     else
2721       HAVE_OPENCV="yes"
2722     fi
2723   ], [
2724     HAVE_OPENCV="no"
2725   ])
2726   OPENCV_PREFIX="`$PKG_CONFIG --variable=prefix opencv`"
2727   AC_DEFINE_UNQUOTED(OPENCV_PREFIX, "$OPENCV_PREFIX", [opencv install prefix])
2728   AC_SUBST(OPENCV_PREFIX)
2729   AC_SUBST(OPENCV_CFLAGS)
2730   AC_SUBST(OPENCV_LIBS)
2731   dnl the OpenCV prefix is used at runtime for some object properties, and also
2732   dnl used here to detect which directory is the correct one. For the second
2733   dnl case, make sure the right sysroot is used, ensuring correct behavior
2734   dnl during cross compilation.
2735   if test -d "$PKG_CONFIG_SYSROOT_DIR/$OPENCV_PREFIX/share/opencv/"; then
2736     AC_DEFINE_UNQUOTED(OPENCV_PATH_NAME, ["opencv"], [OpenCV path name])
2737   else
2738     AC_DEFINE_UNQUOTED(OPENCV_PATH_NAME, ["OpenCV"], [OpenCV path name])
2739   fi
2740 ])
2741
2742 dnl *** OpenEXR ***
2743 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENEXR, true)
2744 AG_GST_CHECK_FEATURE(OPENEXR, [openexr library], openexr, [
2745   AG_GST_PKG_CHECK_MODULES(OPENEXR, OpenEXR)
2746 ])
2747
2748 dnl *** openh264 ***
2749 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENH264, true)
2750 AG_GST_CHECK_FEATURE(OPENH264, [openh264 library], openh264, [
2751   AG_GST_PKG_CHECK_MODULES(OPENH264, openh264 >= 1.3.0)
2752 ])
2753
2754 dnl *** OpenJPEG ***
2755 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENJPEG, true)
2756 AG_GST_CHECK_FEATURE(OPENJPEG, [openjpeg library], openjpeg, [
2757   HAVE_OPENJPEG="no"
2758   AG_GST_PKG_CHECK_MODULES(OPENJPEG, libopenjp2 >= 2.0)
2759   if test x"$HAVE_OPENJPEG" = x"yes"; then
2760     dnl minor API changes in v2.1
2761     AG_GST_PKG_CHECK_MODULES(OPENJPEG_2_1, libopenjp2 >= 2.1)
2762     if test x"$HAVE_OPENJPEG" = x"yes"; then
2763       AC_DEFINE([HAVE_OPENJPEG_2_1], 1, [Define if OpenJPEG 2.1 is used])
2764     fi
2765   else
2766     # Fallback to v1.5
2767     OPENJPEG_LIBS=""
2768     PKG_CHECK_MODULES(OPENJPEG, libopenjpeg1,
2769       HAVE_OPENJPEG="yes",
2770       AG_GST_CHECK_LIBHEADER(OPENJPEG, openjpeg, opj_version, , openjpeg.h, OPENJPEG_LIBS="-lopenjpeg")
2771     )
2772     if test x"$HAVE_OPENJPEG" = x"yes"; then
2773       AC_DEFINE([HAVE_OPENJPEG_1], 1, [Define if OpenJPEG 1 is used])
2774     fi
2775   fi
2776   AC_SUBST(OPENJPEG_CFLAGS)
2777   AC_SUBST(OPENJPEG_LIBS)
2778 ])
2779
2780 dnl *** OpenNI2 ***
2781 translit(dnm, m, l) AM_CONDITIONAL(USE_OPENNI2, true)
2782 AG_GST_CHECK_FEATURE(OPENNI2, [openni2 library], openni2, [
2783   PKG_CHECK_MODULES(OPENNI2, libopenni2 >= 0.26, HAVE_OPENNI2="yes", [ HAVE_OPENNI2="no" ] )
2784   AC_SUBST(OPENNI2_CFLAGS)
2785   AC_SUBST(OPENNI2_LIBS)
2786 ])
2787
2788 dnl *** Opus ***
2789 translit(dnm, m, l) AM_CONDITIONAL(USE_OPUS, true)
2790 AG_GST_CHECK_FEATURE(OPUS, [opus], opus, [
2791   PKG_CHECK_MODULES(OPUS, opus >= 0.9.4, [
2792           AC_DEFINE([HAVE_OPUS], 1, [Define if Opus >= 0.9.4 is installed])
2793           HAVE_OPUS="yes"
2794   ], [
2795           HAVE_OPUS="no"
2796   ])
2797   AC_SUBST(OPUS_CFLAGS)
2798   AC_SUBST(OPUS_LIBS)
2799 ])
2800
2801 dnl *** rsvg ***
2802 translit(dnm, m, l) AM_CONDITIONAL(USE_RSVG, true)
2803 AG_GST_CHECK_FEATURE(RSVG, [rsvg decoder], rsvg, [
2804   AG_GST_PKG_CHECK_MODULES(RSVG, librsvg-2.0 >= 2.36.2)
2805 ])
2806
2807 dnl *** gl ***
2808 translit(dnm, m, l) AM_CONDITIONAL(USE_GL, true)
2809 AG_GST_CHECK_FEATURE(GL, [gl elements], gl, [
2810   HAVE_GL="no"
2811
2812   if test x"$USE_OPENGL" = x"yes" -o x"$USE_GLES2" = x"yes"; then
2813     HAVE_GL="yes"
2814   fi
2815 ])
2816
2817 dnl *** gtk+ ***
2818 HAVE_GTK3_GL="no"
2819 translit(dnm, m, l) AM_CONDITIONAL(USE_GTK3, true)
2820 AG_GST_CHECK_FEATURE(GTK3, [Gtk+ elements], gtk, [
2821   PKG_CHECK_MODULES(GTK3, gtk+-3.0, [
2822     AC_DEFINE([HAVE_GTK3], 1, [Define if Gtk+ 3.0 is installed])
2823     HAVE_GTK3="yes"
2824   ], [
2825     HAVE_GTK3="no"
2826   ])
2827   PKG_CHECK_MODULES(GTK3_GL, gtk+-3.0 >= 3.15.0, [
2828     GDK_WINDOWING="no"
2829     if test "x$GST_GL_HAVE_WINDOW_X11" = "x1" -a "x$GST_GL_HAVE_PLATFORM_GLX" = "x1"; then
2830       PKG_CHECK_MODULES(GTK3_X11, gtk+-x11-3.0, [
2831         GTK3_CFLAGS="$GTK3_CFLAGS $GTK3_X11_CFLAGS"
2832         GTK3_LIBS="$GTK3_LIBS $GTK3_X11_LIBS"
2833         GDK_WINDOWING="yes"
2834       ], [AC_MSG_NOTICE([Could not find Gtk X11 integration])])
2835     fi
2836     if test "x$GST_GL_HAVE_WINDOW_WAYLAND" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EGL" = "x1"; then
2837       PKG_CHECK_MODULES(GTK3_WAYLAND, gtk+-wayland-3.0, [
2838         GTK3_CFLAGS="$GTK3_CFLAGS $GTK3_WAYLAND_CFLAGS"
2839         GTK3_LIBS="$GTK3_LIBS $GTK3_WAYLAND_LIBS"
2840         GDK_WINDOWING="yes"
2841       ], [AC_MSG_NOTICE([Could not find Gtk Wayland integration])])
2842     fi
2843     if test "x$GDK_WINDOWING" = "xyes"; then
2844       AC_DEFINE([HAVE_GTK3_GL], 1, [Define if Gtk+ 3.0 GL is installed])
2845       HAVE_GTK3_GL="yes"
2846     fi
2847   ], [
2848       HAVE_GTK3_GL="no"
2849   ])
2850 ])
2851 AM_CONDITIONAL(USE_GTK3_GL, test "x$HAVE_GTK3_GL" = "xyes")
2852
2853 dnl *** Qt ***
2854 translit(dnm, m, l) AM_CONDITIONAL(USE_QT, true)
2855 AG_GST_CHECK_FEATURE(QT, [Qt elements], qt, [
2856   PKG_CHECK_MODULES(QT, Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0, [
2857       QT_PATH=`$PKG_CONFIG --variable=exec_prefix Qt5Core`
2858       QT_HOST_PATH=`$PKG_CONFIG --variable=host_bins Qt5Core`
2859       AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
2860       AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
2861       AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
2862       if test "x$MOC" = "x" || test "x$UIC" = "x" || test "x$RCC" = "x"; then
2863         AC_MSG_WARN([One of the required qt build programs was not found])
2864         HAVE_QT="no"
2865       else
2866         HAVE_QT="yes"
2867         HAVE_QT_WINDOWING="no"
2868         QT_VERSION="`$PKG_CONFIG --modversion Qt5Core`"
2869         QPA_INCLUDE_PATH=`$PKG_CONFIG --variable=includedir Qt5Core`/QtGui/${QT_VERSION}/QtGui
2870         AS_IF([test -f "$PKG_CONFIG_SYSROOT_DIR/$QPA_INCLUDE_PATH/qpa/qplatformnativeinterface.h"], [
2871           QT_CFLAGS="$QT_CFLAGS -I$QPA_INCLUDE_PATH"
2872           HAVE_QT_QPA_HEADER="yes"
2873         ], [AC_MSG_NOTICE([Cannot find QPA])])
2874         if test "x$GST_GL_HAVE_WINDOW_X11" = "x1" -a "x$GST_GL_HAVE_PLATFORM_GLX" = "x1"; then
2875           PKG_CHECK_MODULES(QT_X11, Qt5X11Extras, [
2876             AC_DEFINE([HAVE_QT_X11], [], [Define if Qt X11 integration is installed])
2877             QT_CFLAGS="$QT_CFLAGS $QT_X11_CFLAGS"
2878             QT_LIBS="$QT_LIBS $QT_X11_LIBS"
2879             HAVE_QT_WINDOWING="yes"
2880           ], [AC_MSG_NOTICE([Could not find Qt X11 integration])])
2881         fi
2882         if test "x$GST_GL_HAVE_WINDOW_WAYLAND" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EGL" = "x1" -a "x$HAVE_QT_QPA_HEADER" = "xyes"; then
2883           PKG_CHECK_MODULES(QT_WAYLAND, Qt5WaylandClient, [
2884             AC_DEFINE([HAVE_QT_WAYLAND], [],
2885                 [Define if Qt Wayland integration is installed])
2886             QT_CFLAGS="$QT_CFLAGS $QT_WAYLAND_CFLAGS"
2887             QT_LIBS="$QT_LIBS $QT_WAYLAND_LIBS"
2888             HAVE_QT_WINDOWING="yes"
2889           ], [AC_MSG_NOTICE([Could not find Qt Wayland integration])])
2890         fi
2891         if test "x$GST_GL_HAVE_PLATFORM_EGL" = "x1"; then
2892           if test "x$GST_GL_HAVE_WINDOW_ANDROID" = "x1"; then
2893             PKG_CHECK_MODULES(QT_ANDROID, Qt5AndroidExtras, [
2894               # c++ on android requires a standard library and there are multiple
2895               # choices.  cerbero provides a pkg-config file the describes a choice
2896               # so try to use that.  Outside cerbero one has to pass these flags
2897               # manually for the library one is using
2898               PKG_CHECK_MODULES(GNUSTL, gnustl, [
2899                 QT_CFLAGS="$QT_CFLAGS $GNUSTL_CFLAGS"
2900                 QT_LIBS="$QT_LIBS $GNUSTL_LIBS"
2901                 ], [
2902                 AC_MSG_NOTICE([Could not find Standard C++ library])])
2903               AC_DEFINE([HAVE_QT_EGLFS], [],
2904                 [Define if Qt eglfs integration is installed])
2905               QT_CFLAGS="$QT_CFLAGS $QT_ANDROID_CFLAGS"
2906               QT_LIBS="$QT_LIBS $QT_ANDROID_LIBS"
2907               HAVE_QT_WINDOWING="yes"
2908             ], [AC_MSG_NOTICE([Could not find Qt Android integration])])
2909           else
2910               AC_DEFINE([HAVE_QT_EGLFS], [],
2911                 [Define if Qt eglfs integration is installed])
2912               HAVE_QT_WINDOWING="yes"
2913           fi
2914         fi
2915         if test "x$GST_GL_HAVE_WINDOW_COCOA" = "x1" -a "x$GST_GL_HAVE_PLATFORM_CGL" = "x1"; then
2916           PKG_CHECK_MODULES(QT_MAC, Qt5MacExtras, [
2917             AC_DEFINE([HAVE_QT_MAC], [],
2918                 [Define if Qt Mac integration is installed])
2919             QT_LIBDIR=`$PKG_CONFIG --variable=libdir Qt5Core`
2920             QT_CFLAGS="$QT_CFLAGS $QT_MAC_CFLAGS -F$QT_LIBDIR -framework QtCore -framework QtGui -framework QtQuick -framework QtQml -framework QtMacExtras"
2921             QT_LIBS="$QT_LIBS $QT_MAC_LIBS"
2922             HAVE_QT_WINDOWING="yes"
2923           ], [AC_MSG_NOTICE([Could not find Qt Mac integration])])
2924         fi
2925         if test "x$GST_GL_HAVE_WINDOW_EAGL" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EAGL" = "x1"; then
2926           if test "x$HAVE_IOS" = "xyes"; then
2927             # iOS doesn't have its own extras package so if we have the core
2928             # modules we are good to go
2929             AC_DEFINE([HAVE_QT_IOS], [],
2930                 [Define if Qt iOS integration is installed])
2931             HAVE_QT_WINDOWING="yes"
2932           fi
2933         fi
2934         if test "x$HAVE_QT_WINDOWING" = "xno"; then
2935           AC_MSG_WARN([Could not find any Qt Windowing integration])
2936           HAVE_QT="no"
2937         fi
2938         AC_SUBST([QT_CFLAGS])
2939         AC_SUBST([QT_LIBS])
2940       fi
2941   ], [
2942       HAVE_QT="no"
2943   ])
2944 ])
2945
2946 dnl *** Vulkan ***
2947 translit(dnm, m, l) AM_CONDITIONAL(USE_VULKAN, true)
2948 AG_GST_CHECK_FEATURE(VULKAN, [Vulkan elements], vulkan, [
2949   AC_CHECK_HEADER(vulkan/vulkan.h, [
2950     AC_CHECK_LIB(vulkan, vkCreateDevice, [
2951       VULKAN_LIBS="-lvulkan"
2952       AC_SUBST(VULKAN_LIBS)
2953       if test "x$GST_VULKAN_HAVE_WINDOW_XCB" = "x1"; then
2954         HAVE_VULKAN="yes"
2955       fi
2956       if test "x$GST_VULKAN_HAVE_WINDOW_WAYLAND" = "x1"; then
2957         HAVE_VULKAN="yes"
2958       fi
2959     ], [])
2960   ], [])
2961 ])
2962
2963 dnl *** teletextdec ***
2964 translit(dnm, m, l) AM_CONDITIONAL(USE_TELETEXTDEC, true)
2965 AG_GST_CHECK_FEATURE(TELETEXTDEC, [Teletext decoder], teletextdec, [
2966   AG_GST_PKG_CHECK_MODULES(TELETEXTDEC, zvbi-0.2)
2967  ])
2968
2969 dnl *** wildmidi ***
2970 translit(dnm, m, l) AM_CONDITIONAL(USE_WILDMIDI, true)
2971 AG_GST_CHECK_FEATURE(WILDMIDI, [wildmidi midi soft synth plugin], wildmidi, [
2972   AG_GST_CHECK_LIBHEADER(WILDMIDI, WildMidi,
2973                          WildMidi_Init, ,
2974                          wildmidi_lib.h,
2975                          WILDMIDI_LIBS="-lWildMidi")
2976   AC_CHECK_LIB(WildMidi, WildMidi_LoadSamples, AC_DEFINE(HAVE_WILDMIDI_0_2_2, [1], [Have WildMidi 0.2.2 or earlier library]))
2977
2978   if test "x$HAVE_WILDMIDI" = "xyes"; then
2979          WILDMIDI_CFLAGS=
2980          WILDMIDI_LIBS=-lWildMidi
2981          AC_MSG_NOTICE(compiling gstWildMidi)
2982   else
2983          WILDMIDI_CFLAGS=
2984          WILDMIDI_LIBS=
2985          AC_MSG_WARN(no WildMidi library found (libWildMidi))
2986   fi
2987   AC_SUBST(WILDMIDI_CFLAGS)
2988   AC_SUBST(WILDMIDI_LIBS)
2989 ])
2990
2991 dnl **** Smooth Streaming ****
2992 translit(dnm, m, l) AM_CONDITIONAL(USE_SMOOTHSTREAMING, true)
2993 AG_GST_CHECK_FEATURE(SMOOTHSTREAMING, [Smooth Streaming plug-in], smoothstreaming, [
2994   PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= 2.4,
2995     [HAVE_LIBXML2="yes"
2996      HAVE_SMOOTHSTREAMING="yes"],
2997     [HAVE_LIBXML2="no"
2998      HAVE_SMOOTHSTREAMING="no"])
2999   AC_SUBST(LIBXML2_CFLAGS)
3000   AC_SUBST(LIBXML2_LIBS)
3001 ])
3002
3003 dnl *** sndfile ***
3004 translit(dnm, m, l) AM_CONDITIONAL(USE_SNDFILE, true)
3005 AG_GST_CHECK_FEATURE(SNDFILE, [sndfile plug-in], sfdec sfenc, [
3006   PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.16, HAVE_SNDFILE="yes", HAVE_SNDFILE="no")
3007   AC_SUBST(SNDFILE_CFLAGS)
3008   AC_SUBST(SNDFILE_LIBS)
3009 ])
3010
3011 dnl *** soundtouch ***
3012 translit(dnm, m, l) AM_CONDITIONAL(USE_SOUNDTOUCH, true)
3013 AG_GST_CHECK_FEATURE(SOUNDTOUCH, [soundtouch plug-in], soundtouch, [
3014   dnl We only need -lBPM on soundtouch < 1.4
3015   dnl We check for libSoundTouch since Debian used it before upstream
3016   dnl added a pkgconfig file.
3017   HAVE_SOUNDTOUCH_1_4=yes
3018   PKG_CHECK_MODULES(SOUNDTOUCH, soundtouch,
3019     [HAVE_SOUNDTOUCH=yes],
3020     [PKG_CHECK_MODULES(SOUNDTOUCH, soundtouch-1.4,
3021       [HAVE_SOUNDTOUCH=yes],
3022       [PKG_CHECK_MODULES(SOUNDTOUCH, soundtouch-1.0,
3023         [HAVE_SOUNDTOUCH=yes
3024           HAVE_SOUNDTOUCH_1_4=no
3025           SOUNDTOUCH_LIBS="$SOUNDTOUCH_LIBS -lBPM"],
3026         [PKG_CHECK_MODULES(SOUNDTOUCH, libSoundTouch >= 1.4,
3027           [HAVE_SOUNDTOUCH=yes],
3028           [PKG_CHECK_MODULES(SOUNDTOUCH, libSoundTouch,
3029             [HAVE_SOUNDTOUCH=yes
3030               HAVE_SOUNDTOUCH_1_4=no
3031               SOUNDTOUCH_LIBS="$SOUNDTOUCH_LIBS -lBPM"],
3032             HAVE_SOUNDTOUCH=no)])])])])
3033   AC_SUBST(SOUNDTOUCH_CFLAGS)
3034   AC_SUBST(SOUNDTOUCH_LIBS)
3035   if test "x$HAVE_CXX" != "xyes"; then
3036     USE_SOUNDTOUCH=false
3037     AC_MSG_NOTICE([Not building soundtouch plugin: no C++ compiler found])
3038   fi
3039   if test "x$HAVE_SOUNDTOUCH" = "xyes" -a "x$HAVE_SOUNDTOUCH_1_4" = "xyes"; then
3040      AC_DEFINE([HAVE_SOUNDTOUCH_1_4], [1],
3041          [Defined if the available libSoundTouch is >= 1.4])
3042   fi
3043 ])
3044
3045 dnl *** spc ***
3046 translit(dnm, m, l) AM_CONDITIONAL(USE_SPC, true)
3047 AG_GST_CHECK_FEATURE(SPC, [spc decoder], spc, [
3048   AC_CHECK_HEADER(openspc.h, [
3049     AC_CHECK_LIB(openspc, OSPC_Init, [
3050       SPC_LIBS="-lopenspc"
3051       AC_SUBST(SPC_LIBS)
3052       HAVE_SPC=yes
3053     ], [
3054       HAVE_SPC=no
3055     ])
3056   ], [
3057     HAVE_SPC=no
3058   ])
3059 ])
3060
3061 dnl *** gme ***
3062 translit(dnm, m, l) AM_CONDITIONAL(USE_GME, true)
3063 AG_GST_CHECK_FEATURE(GME, [gme decoder], gme, [
3064   AC_CHECK_HEADER(gme/gme.h, [
3065     AC_CHECK_LIB(gme, gme_new_emu, [
3066       GME_LIBS="-lgme"
3067       AC_SUBST(GME_LIBS)
3068       HAVE_GME=yes
3069     ], [
3070       HAVE_GME=no
3071     ])
3072   ], [
3073     HAVE_GME=no
3074   ])
3075
3076   if test "x$HAVE_GME" = "xyes"; then
3077     AC_CHECK_LIB(gme, gme_enable_accuracy, [
3078       AC_DEFINE(HAVE_LIBGME_ACCURACY, 1, [Define if gme 0.5.6 or newer is available])
3079       ])
3080   fi
3081 ])
3082
3083 dnl *** dvb ***
3084 translit(dnm, m, l) AM_CONDITIONAL(USE_DVB, true)
3085 AG_GST_CHECK_FEATURE(DVB, [DVB Source], dvb, [
3086   AC_MSG_CHECKING([Checking for up to date dvb installation])
3087   AC_CHECK_HEADER(linux/dvb/version.h, [
3088     AC_MSG_CHECKING([for up-to-date dvb API])
3089     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <linux/dvb/version.h>]], [[
3090         #if DVB_API_VERSION < 5 || (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR <= 4)
3091         #error "Incompatible dvb API"
3092         #endif
3093     ]])], [ AC_MSG_RESULT(yes)
3094       HAVE_DVB="yes"
3095     ], [ AC_MSG_RESULT(no)
3096       HAVE_DVB="no"
3097     ])
3098   ], [HAVE_DVB="no"])
3099 ])
3100
3101 dnl *** acm ***
3102 translit(dnm, m, l) AM_CONDITIONAL(USE_ACM, true)
3103 AG_GST_CHECK_FEATURE(ACM, [Windows ACM library], acm, [
3104   AC_MSG_CHECKING([Checking for ACM support])
3105   AC_CHECK_HEADERS([windows.h msacm.h],
3106       [HAVE_ACM="yes"
3107        AC_SUBST(ACMENC_CFLAGS)
3108        AC_SUBST(ACMMP3DEC_CFLAGS)
3109       ], [HAVE_ACM="no"],
3110       [AC_INCLUDES_DEFAULT
3111 #include <windows.h>])
3112 ])
3113
3114 dnl *** vdpau ***
3115 translit(dnm, m, l) AM_CONDITIONAL(USE_VDPAU, true)
3116 AG_GST_CHECK_FEATURE(VDPAU, [VDPAU], vdpau, [
3117   VDPAU_CFLAGS=
3118   VDPAU_LIBS=-lvdpau
3119   HAVE_VDPAU=no
3120
3121   PKG_CHECK_MODULES(VDPAU, vdpau, [HAVE_VDPAU="yes"],
3122   [
3123     if test "$HAVE_VDPAU" = "no"; then
3124       saved_CPPFLAGS="$CPPFLAGS"
3125       AC_CHECK_HEADER([vdpau/vdpau.h], [HAVE_VDPAU_H=yes])
3126
3127       if test -z "$HAVE_VDPAU_H"; then
3128         dnl Didn't find VDPAU header straight away.
3129         dnl Try /usr/include/nvidia. Need to clear caching vars first
3130         AC_MSG_NOTICE([VDPAU header not in standard path. Checking /usr/include/nvidia])
3131         unset ac_cv_header_vdpau_vdpau_h
3132         unset ac_cv_header_vdpau_vdpau_x11_h
3133         VDPAU_CFLAGS="-I/usr/include/nvidia"
3134         VDPAU_LIBS="-L/usr/lib/nvidia -lvdpau"
3135         CPPFLAGS="$VDPAU_CFLAGS $saved_CPPFLAGS"
3136         AC_CHECK_HEADER([vdpau/vdpau.h], [HAVE_VDPAU_H=yes])
3137       fi
3138
3139       AC_CHECK_HEADER([vdpau/vdpau_x11.h], [HAVE_VDPAU_X11_H=yes])
3140
3141       if test "x$HAVE_VDPAU_H" = "xyes" -a "x$HAVE_VDPAU_X11_H" = "xyes"; then
3142         dnl Found the headers - look for the lib
3143         AC_MSG_NOTICE([VDPAU headers found. Checking libraries])
3144         saved_LIBS="$LIBS"
3145         LIBS="$VDPAU_LIBS $saved_LIBS"
3146         AC_CHECK_LIB(vdpau,vdp_device_create_x11,[HAVE_VDPAU="yes"])
3147         LIBS="$saved_LIBS"
3148       fi
3149     fi
3150   ])
3151
3152   if test "$HAVE_VDPAU" = "yes"; then
3153     AC_MSG_NOTICE([Found up to date VDPAU installation])
3154     AC_SUBST(VDPAU_CFLAGS)
3155     AC_SUBST(VDPAU_LIBS)
3156   fi
3157 ])
3158
3159 dnl *** sbc ***
3160 translit(dnm, m, l) AM_CONDITIONAL(USE_SBC, true)
3161 AG_GST_CHECK_FEATURE(SBC, [SBC bluetooth audio codec], sbc, [
3162   AG_GST_PKG_CHECK_MODULES(SBC, [sbc >= 1.0])
3163 ])
3164
3165 dnl *** schroedinger ***
3166 translit(dnm, m, l) AM_CONDITIONAL(USE_SCHRO, true)
3167 AG_GST_CHECK_FEATURE(SCHRO, [Schroedinger video codec], schro, [
3168   AG_GST_PKG_CHECK_MODULES(SCHRO, schroedinger-1.0 >= 1.0.10)
3169 ])
3170
3171 dnl *** zbar ***
3172 translit(dnm, m, l) AM_CONDITIONAL(USE_ZBAR, true)
3173 AG_GST_CHECK_FEATURE(ZBAR, [ZBar barcode detector], zbar, [
3174   AG_GST_PKG_CHECK_MODULES(ZBAR, zbar >= 0.9)
3175 ])
3176
3177 dnl *** rtmp ***
3178 translit(dnm, m, l) AM_CONDITIONAL(USE_RTMP, true)
3179 AG_GST_CHECK_FEATURE(RTMP, [rtmp library], rtmp, [
3180   AG_GST_PKG_CHECK_MODULES(RTMP, librtmp)
3181 ])
3182
3183 dnl *** spandsp ***
3184 translit(dnm, m, l) AM_CONDITIONAL(USE_SPANDSP, true)
3185 AG_GST_CHECK_FEATURE(SPANDSP, [Spandsp], spandsp, [
3186   PKG_CHECK_MODULES(SPANDSP, spandsp >= 0.0.6, [
3187     HAVE_SPANDSP="yes" ], [
3188     HAVE_SPANDSP="no"
3189   ])
3190 ])
3191 AC_SUBST(SPANDSP_CFLAGS)
3192 AC_SUBST(SPANDSP_LIBS)
3193
3194 dnl *** hls-crypto ***
3195 AC_ARG_WITH([hls-crypto],
3196   AS_HELP_STRING([--with-hls-crypto=auto|nettle|libgcrypt|openssl], [
3197     which cryptographic library version to compile against for hls (default: auto)
3198   ]), [
3199     AS_CASE([$with_hls_crypto],
3200       [nettle],[],
3201       [libgcrypt],[],
3202       [openssl],[],
3203       [with_hls_crypto=auto]
3204     )
3205   ]
3206 )
3207
3208 dnl *** hls ***
3209 translit(dnm, m, l) AM_CONDITIONAL(USE_HLS, true)
3210 AG_GST_CHECK_FEATURE(HLS, [http live streaming plugin], hls, [
3211   AS_CASE([$with_hls_crypto],
3212     [nettle], [
3213       PKG_CHECK_MODULES(NETTLE, nettle, [
3214         AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
3215         HAVE_HLS="yes"
3216       ],[AC_MSG_ERROR([Could not find nettle library])])
3217     ],
3218     [libgcrypt], [
3219       AM_PATH_LIBGCRYPT([1.2.0], [
3220         AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
3221         HAVE_HLS="yes"
3222       ],[AC_MSG_ERROR([Could not find libgcrypt library])])
3223     ],
3224     [openssl], [
3225       PKG_CHECK_MODULES(OPENSSL, openssl, [
3226         AC_DEFINE(HAVE_OPENSSL, 1, [Define if openssl is available])
3227         HAVE_HLS="yes"
3228       ],[AC_MSG_ERROR([Could not find openssl library])])
3229     ],
3230     [
3231       dnl Try to find a valid crypto library
3232       PKG_CHECK_MODULES(NETTLE, nettle, [
3233         AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
3234         HAVE_HLS="yes"
3235       ],[
3236         AM_PATH_LIBGCRYPT([1.2.0], [
3237           AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
3238           HAVE_HLS="yes"
3239         ],[
3240           PKG_CHECK_MODULES(OPENSSL, openssl, [
3241             AC_DEFINE(HAVE_OPENSSL, 1, [Define if openssl is available])
3242             HAVE_HLS="yes"
3243           ],[
3244             HAVE_HLS="no"
3245           ])
3246         ])
3247       ])
3248     ]
3249   )
3250 ])
3251
3252 dnl *** x265 (H.265/HEVC encoder) ***
3253 translit(dnm, m, l) AM_CONDITIONAL(USE_X265, true)
3254 AG_GST_CHECK_FEATURE(X265, [x265 plug-in], x265, [
3255   AG_GST_PKG_CHECK_MODULES(X265, x265)
3256 ])
3257
3258 dnl *** WebRTC Audio Processing ***
3259 dnl Note: We test for a specific version as there is no API stability
3260 translit(dnm, m, l) AM_CONDITIONAL(USE_WEBRTCDSP, true)
3261 AG_GST_CHECK_FEATURE(WEBRTCDSP, [WebRTC Audio Processing], webrtcdsp, [
3262
3263   AG_GST_PKG_CHECK_MODULES(WEBRTCDSP, webrtc-audio-processing >= 0.2 webrtc-audio-processing < 0.4)
3264
3265   # On Android, C++ headers comes with the STL implementation
3266   AS_CASE(["${host}"],
3267     [*android*],
3268       [
3269         PKG_CHECK_MODULES(GNUSTL, gnustl, [
3270           WEBRTCDSP_CFLAGS="$WEBRTCDSP_CFLAGS $GNUSTL_CFLAGS"
3271           WEBRTCDSP_LIBS="$WEBRTCDSP_LIBS $GNUSTL_LIBS"])
3272       ])
3273   AC_SUBST([WEBRTCDSP_CFLAGS])
3274   AC_SUBST([WEBRTCDSP_LIBS])
3275
3276   AC_LANG_PUSH([C++])
3277   old_CPPFLAGS=$CPPFLAGS
3278   CPPFLAGS="-std=c++11 $CPPFLAGS $GNUSTL_CFLAGS"
3279   AC_CHECK_HEADER([vector],[],[HAVE_WEBRTCDSP=no])
3280   CPPFLAGS=$old_CPPFLAGS
3281   AC_LANG_POP([C++])
3282 ])
3283
3284 else
3285
3286 dnl not building plugins with external dependencies,
3287 dnl but we still need to set the conditionals
3288
3289 AM_CONDITIONAL(USE_ASSRENDER, false)
3290 AM_CONDITIONAL(USE_VOAMRWBENC, false)
3291 AM_CONDITIONAL(USE_VOAACENC, false)
3292 AM_CONDITIONAL(USE_BS2B, false)
3293 AM_CONDITIONAL(USE_BZ2, false)
3294 AM_CONDITIONAL(USE_CHROMAPRINT, false)
3295 AM_CONDITIONAL(USE_CURL, false)
3296 AM_CONDITIONAL(USE_SSH2, false)
3297 AM_CONDITIONAL(USE_DASH, false)
3298 AM_CONDITIONAL(USE_DC1394, false)
3299 AM_CONDITIONAL(USE_DECKLINK, false)
3300 AM_CONDITIONAL(DECKLINK_OSX, false)
3301 AM_CONDITIONAL(USE_DIRECTFB, false)
3302 AM_CONDITIONAL(USE_WAYLAND, false)
3303 AM_CONDITIONAL(USE_DAALA, false)
3304 AM_CONDITIONAL(USE_DTS, false)
3305 AM_CONDITIONAL(USE_EXIF, false)
3306 AM_CONDITIONAL(USE_RESINDVD, false)
3307 AM_CONDITIONAL(USE_FAAC, false)
3308 AM_CONDITIONAL(USE_FAAD, false)
3309 AM_CONDITIONAL(USE_FBDEV, false)
3310 AM_CONDITIONAL(USE_FDK_AAC, false)
3311 AM_CONDITIONAL(USE_FLITE, false)
3312 AM_CONDITIONAL(USE_FLUIDSYNTH, false)
3313 AM_CONDITIONAL(USE_GL, false)
3314 AM_CONDITIONAL(USE_GSM, false)
3315 AM_CONDITIONAL(USE_GTK3, false)
3316 AM_CONDITIONAL(USE_GTK3_GL, false)
3317 AM_CONDITIONAL(USE_HLS, false)
3318 AM_CONDITIONAL(USE_IQA, false)
3319 AM_CONDITIONAL(USE_KATE, false)
3320 AM_CONDITIONAL(USE_KMS, false)
3321 AM_CONDITIONAL(USE_TIGER, false)
3322 AM_CONDITIONAL(USE_LADSPA, false)
3323 AM_CONDITIONAL(USE_LV2, false)
3324 AM_CONDITIONAL(USE_LIBDE265, false)
3325 AM_CONDITIONAL(USE_LIBMMS, false)
3326 AM_CONDITIONAL(USE_MODPLUG, false)
3327 AM_CONDITIONAL(USE_MPEG2ENC, false)
3328 AM_CONDITIONAL(USE_MPLEX, false)
3329 AM_CONDITIONAL(USE_MUSEPACK, false)
3330 AM_CONDITIONAL(USE_NEON, false)
3331 AM_CONDITIONAL(USE_OFA, false)
3332 AM_CONDITIONAL(USE_OPENAL, false)
3333 AM_CONDITIONAL(USE_OPENCV, false)
3334 AM_CONDITIONAL(USE_OPENEXR, false)
3335 AM_CONDITIONAL(USE_OPENJPEG, false)
3336 AM_CONDITIONAL(USE_OPENNI2, false)
3337 AM_CONDITIONAL(USE_OPUS, false)
3338 AM_CONDITIONAL(USE_QT, false)
3339 AM_CONDITIONAL(USE_WILDMIDI, false)
3340 AM_CONDITIONAL(USE_SMOOTHSTREAMING, false)
3341 AM_CONDITIONAL(USE_SNDFILE, false)
3342 AM_CONDITIONAL(USE_SOUNDTOUCH, false)
3343 AM_CONDITIONAL(USE_SPANDSP, false)
3344 AM_CONDITIONAL(USE_SPC, false)
3345 AM_CONDITIONAL(USE_SRTP, false)
3346 AM_CONDITIONAL(USE_GME, false)
3347 AM_CONDITIONAL(USE_DVB, false)
3348 AM_CONDITIONAL(USE_ACM, false)
3349 AM_CONDITIONAL(USE_VDPAU, false)
3350 AM_CONDITIONAL(USE_SBC, false)
3351 AM_CONDITIONAL(USE_SCHRO, false)
3352 AM_CONDITIONAL(USE_ZBAR, false)
3353 AM_CONDITIONAL(USE_RSVG, false)
3354 AM_CONDITIONAL(USE_RTMP, false)
3355 AM_CONDITIONAL(USE_TELETEXTDEC, false)
3356 AM_CONDITIONAL(USE_UVCH264, false)
3357 AM_CONDITIONAL(USE_WEBP, false)
3358 AM_CONDITIONAL(USE_WEBRTCDSP, false)
3359 AM_CONDITIONAL(USE_OPENH264, false)
3360 AM_CONDITIONAL(USE_X265, false)
3361 AM_CONDITIONAL(USE_DTLS, false)
3362 AM_CONDITIONAL(USE_VULKAN, false)
3363 AM_CONDITIONAL(USE_TTML, false)
3364
3365 fi dnl of EXT plugins
3366
3367 dnl *** finalize CFLAGS, LDFLAGS, LIBS
3368
3369 dnl Overview:
3370 dnl GST_OPTION_CFLAGS:  common flags for profiling, debugging, errors, ...
3371 dnl GST_*:              flags shared by built objects to link against GStreamer
3372 dnl GST_ALL_LDFLAGS:    linker flags shared by all
3373 dnl GST_LIB_LDFLAGS:    additional linker flags for all libaries
3374 dnl GST_LT_LDFLAGS:     library versioning of our libraries
3375 dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins
3376
3377 dnl GST_OPTION_CFLAGS
3378 if test "x$USE_DEBUG" = xyes; then
3379    PROFILE_CFLAGS="-g"
3380 fi
3381 AC_SUBST(PROFILE_CFLAGS)
3382
3383 if test "x$PACKAGE_VERSION_NANO" = "x1"; then
3384   dnl Define _only_ during CVS (not pre-releases or releases)
3385   DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED"
3386 else
3387   DEPRECATED_CFLAGS=""
3388 fi
3389 AC_SUBST(DEPRECATED_CFLAGS)
3390
3391 dnl every flag in GST_OPTION_CFLAGS and GST_OPTION_CXXFLAGS can be overridden
3392 dnl at make time with e.g. make ERROR_CFLAGS=""
3393 GST_OPTION_CFLAGS="\$(WARNING_CFLAGS) \$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
3394 GST_OPTION_CXXFLAGS="\$(WARNING_CXXFLAGS) \$(ERROR_CXXFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
3395 GST_OPTION_OBJCFLAGS="\$(WARNING_OBJCFLAGS) \$(ERROR_OBJCFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
3396 AC_SUBST(GST_OPTION_CFLAGS)
3397 AC_SUBST(GST_OPTION_CXXFLAGS)
3398 AC_SUBST(GST_OPTION_OBJCFLAGS)
3399
3400 dnl FIXME: do we want to rename to GST_ALL_* ?
3401 dnl prefer internal headers to already installed ones
3402 dnl also add builddir include for enumtypes and marshal
3403 dnl add GST_OPTION_CFLAGS, but overridable
3404 GST_CFLAGS="$GST_CFLAGS $GST_STATIC_CFLAGS -DGST_USE_UNSTABLE_API"
3405 GST_CXXFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CXXFLAGS)"
3406 GST_OBJCFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_OBJCFLAGS)"
3407 GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
3408 AC_SUBST(GST_CFLAGS)
3409 AC_SUBST(GST_CXXFLAGS)
3410 AC_SUBST(GST_OBJCFLAGS)
3411 AC_SUBST(GST_LIBS)
3412 GST_PLUGINS_BAD_CXXFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs"
3413 GST_PLUGINS_BAD_OBJCFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs"
3414 GST_PLUGINS_BAD_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs"
3415 AC_SUBST(GST_PLUGINS_BAD_CFLAGS)
3416 AC_SUBST(GST_PLUGINS_BAD_CXXFLAGS)
3417 AC_SUBST(GST_PLUGINS_BAD_OBJCFLAGS)
3418
3419 dnl LDFLAGS really should only contain flags, not libs - they get added before
3420 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
3421 GST_ALL_LDFLAGS="-no-undefined"
3422 if test "x${enable_Bsymbolic}" = "xyes"; then
3423   GST_ALL_LDFLAGS="$GST_ALL_LDFLAGS -Wl,-Bsymbolic-functions"
3424 fi
3425 AC_SUBST(GST_ALL_LDFLAGS)
3426
3427 dnl GST_LIB_LDFLAGS
3428 dnl linker flags shared by all libraries
3429 dnl LDFLAGS modifier defining exported symbols from built libraries
3430 dnl (export _gst_foo but not __gst_foo)
3431 GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*"
3432 AC_SUBST(GST_LIB_LDFLAGS)
3433
3434 dnl this really should only contain flags, not libs - they get added before
3435 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
3436 GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_.*' $GST_ALL_LDFLAGS"
3437 AC_SUBST(GST_PLUGIN_LDFLAGS)
3438
3439 dnl *** output files ***
3440
3441 $MKDIR_P tests/check/orc
3442
3443 dnl po/Makefile.in
3444
3445 AC_CONFIG_FILES(
3446 Makefile
3447 common/Makefile
3448 common/m4/Makefile
3449 gst/Makefile
3450 gst/accurip/Makefile
3451 gst/adpcmdec/Makefile
3452 gst/adpcmenc/Makefile
3453 gst/aiff/Makefile
3454 gst/videoframe_audiolevel/Makefile
3455 gst/asfmux/Makefile
3456 gst/audiobuffersplit/Makefile
3457 gst/audiofxbad/Makefile
3458 gst/audiomixer/Makefile
3459 gst/audiomixmatrix/Makefile
3460 gst/audiovisualizers/Makefile
3461 gst/autoconvert/Makefile
3462 gst/bayer/Makefile
3463 gst/camerabin2/Makefile
3464 gst/coloreffects/Makefile
3465 gst/debugutils/Makefile
3466 gst/dvbsuboverlay/Makefile
3467 gst/dvdspu/Makefile
3468 gst/festival/Makefile
3469 gst/fieldanalysis/Makefile
3470 gst/freeverb/Makefile
3471 gst/frei0r/Makefile
3472 gst/gaudieffects/Makefile
3473 gst/geometrictransform/Makefile
3474 gst/gdp/Makefile
3475 gst/id3tag/Makefile
3476 gst/inter/Makefile
3477 gst/interlace/Makefile
3478 gst/ivfparse/Makefile
3479 gst/ivtc/Makefile
3480 gst/jp2kdecimator/Makefile
3481 gst/jpegformat/Makefile
3482 gst/librfb/Makefile
3483 gst/midi/Makefile
3484 gst/mpegdemux/Makefile
3485 gst/mpegtsdemux/Makefile
3486 gst/mpegtsmux/Makefile
3487 gst/mpegtsmux/tsmux/Makefile
3488 gst/mpegpsmux/Makefile
3489 gst/mxf/Makefile
3490 gst/netsim/Makefile
3491 gst/onvif/Makefile
3492 gst/pcapparse/Makefile
3493 gst/pnm/Makefile
3494 gst/rawparse/Makefile
3495 gst/removesilence/Makefile
3496 gst/sdp/Makefile
3497 gst/segmentclip/Makefile
3498 gst/siren/Makefile
3499 gst/smooth/Makefile
3500 gst/speed/Makefile
3501 gst/subenc/Makefile
3502 gst/stereo/Makefile
3503 gst/timecode/Makefile
3504 gst/videofilters/Makefile
3505 gst/videoparsers/Makefile
3506 gst/videosignal/Makefile
3507 gst/vmnc/Makefile
3508 gst/y4m/Makefile
3509 gst/yadif/Makefile
3510 gst/compositor/Makefile
3511 gst-libs/Makefile
3512 gst-libs/gst/Makefile
3513 gst-libs/gst/adaptivedemux/Makefile
3514 gst-libs/gst/basecamerabinsrc/Makefile
3515 gst-libs/gst/gl/Makefile
3516 gst-libs/gst/gl/android/Makefile
3517 gst-libs/gst/gl/cocoa/Makefile
3518 gst-libs/gst/gl/dispmanx/Makefile
3519 gst-libs/gst/gl/glprototypes/Makefile
3520 gst-libs/gst/gl/eagl/Makefile
3521 gst-libs/gst/gl/egl/Makefile
3522 gst-libs/gst/gl/wayland/Makefile
3523 gst-libs/gst/gl/win32/Makefile
3524 gst-libs/gst/gl/x11/Makefile
3525 gst-libs/gst/insertbin/Makefile
3526 gst-libs/gst/interfaces/Makefile
3527 gst-libs/gst/codecparsers/Makefile
3528 gst-libs/gst/mpegts/Makefile
3529 gst-libs/gst/uridownloader/Makefile
3530 gst-libs/gst/wayland/Makefile
3531 gst-libs/gst/base/Makefile
3532 gst-libs/gst/player/Makefile
3533 gst-libs/gst/video/Makefile
3534 gst-libs/gst/audio/Makefile
3535 gst-libs/gst/opencv/Makefile
3536 sys/Makefile
3537 sys/dshowdecwrapper/Makefile
3538 sys/acmenc/Makefile
3539 sys/acmmp3dec/Makefile
3540 sys/androidmedia/Makefile
3541 sys/applemedia/Makefile
3542 sys/bluez/Makefile
3543 sys/d3dvideosink/Makefile
3544 sys/decklink/Makefile
3545 sys/directsound/Makefile
3546 sys/dshowsrcwrapper/Makefile
3547 sys/dshowvideosink/Makefile
3548 sys/dvb/Makefile
3549 sys/fbdev/Makefile
3550 sys/kms/Makefile
3551 sys/msdk/Makefile
3552 sys/nvenc/Makefile
3553 sys/opensles/Makefile
3554 sys/shm/Makefile
3555 sys/tinyalsa/Makefile
3556 sys/uvch264/Makefile
3557 sys/vcd/Makefile
3558 sys/vdpau/Makefile
3559 sys/wasapi/Makefile
3560 sys/winks/Makefile
3561 sys/winscreencap/Makefile
3562 tests/Makefile
3563 tests/check/Makefile
3564 tests/files/Makefile
3565 tests/examples/Makefile
3566 tests/examples/avsamplesink/Makefile
3567 tests/examples/camerabin2/Makefile
3568 tests/examples/codecparsers/Makefile
3569 tests/examples/directfb/Makefile
3570 tests/examples/audiomixmatrix/Makefile
3571 tests/examples/gl/Makefile
3572 tests/examples/gl/cocoa/Makefile
3573 tests/examples/gl/clutter/Makefile
3574 tests/examples/gl/generic/Makefile
3575 tests/examples/gl/generic/cube/Makefile
3576 tests/examples/gl/generic/cubeyuv/Makefile
3577 tests/examples/gl/generic/doublecube/Makefile
3578 tests/examples/gl/generic/recordgraphic/Makefile
3579 tests/examples/gl/gtk/Makefile
3580 tests/examples/gl/gtk/3dvideo/Makefile
3581 tests/examples/gl/gtk/filternovideooverlay/Makefile
3582 tests/examples/gl/gtk/filtervideooverlay/Makefile
3583 tests/examples/gl/gtk/fxtest/Makefile
3584 tests/examples/gl/gtk/switchvideooverlay/Makefile
3585 tests/examples/gl/qt/Makefile
3586 tests/examples/gl/sdl/Makefile
3587 tests/examples/gtk/Makefile
3588 tests/examples/mpegts/Makefile
3589 tests/examples/mxf/Makefile
3590 tests/examples/opencv/Makefile
3591 tests/examples/uvch264/Makefile
3592 tests/examples/waylandsink/Makefile
3593 tests/icles/Makefile
3594 ext/voamrwbenc/Makefile
3595 ext/voaacenc/Makefile
3596 ext/assrender/Makefile
3597 ext/bs2b/Makefile
3598 ext/bz2/Makefile
3599 ext/chromaprint/Makefile
3600 ext/curl/Makefile
3601 ext/dash/Makefile
3602 ext/dc1394/Makefile
3603 ext/directfb/Makefile
3604 ext/wayland/Makefile
3605 ext/daala/Makefile
3606 ext/dts/Makefile
3607 ext/gl/Makefile
3608 ext/gtk/Makefile
3609 ext/faac/Makefile
3610 ext/faad/Makefile
3611 ext/fdkaac/Makefile
3612 ext/flite/Makefile
3613 ext/fluidsynth/Makefile
3614 ext/gsm/Makefile
3615 ext/hls/Makefile
3616 ext/iqa/Makefile
3617 ext/kate/Makefile
3618 ext/ladspa/Makefile
3619 ext/lv2/Makefile
3620 ext/libde265/Makefile
3621 ext/libmms/Makefile
3622 ext/Makefile
3623 ext/modplug/Makefile
3624 ext/mpeg2enc/Makefile
3625 ext/mplex/Makefile
3626 ext/musepack/Makefile
3627 ext/neon/Makefile
3628 ext/ofa/Makefile
3629 ext/openal/Makefile
3630 ext/opencv/Makefile
3631 ext/openexr/Makefile
3632 ext/openh264/Makefile
3633 ext/openjpeg/Makefile
3634 ext/openni2/Makefile
3635 ext/opus/Makefile
3636 ext/qt/Makefile
3637 ext/rsvg/Makefile
3638 ext/resindvd/Makefile
3639 ext/rtmp/Makefile
3640 ext/sbc/Makefile
3641 ext/schroedinger/Makefile
3642 ext/smoothstreaming/Makefile
3643 ext/sndfile/Makefile
3644 ext/soundtouch/Makefile
3645 ext/spandsp/Makefile
3646 ext/srtp/Makefile
3647 ext/teletextdec/Makefile
3648 ext/gme/Makefile
3649 ext/spc/Makefile
3650 ext/wildmidi/Makefile
3651 ext/vulkan/Makefile
3652 ext/vulkan/xcb/Makefile
3653 ext/vulkan/wayland/Makefile
3654 ext/webp/Makefile
3655 ext/x265/Makefile
3656 ext/zbar/Makefile
3657 ext/dtls/Makefile
3658 ext/webrtcdsp/Makefile
3659 ext/ttml/Makefile
3660 po/Makefile.in
3661 docs/Makefile
3662 docs/plugins/Makefile
3663 docs/libs/Makefile
3664 docs/version.entities
3665 pkgconfig/Makefile
3666 pkgconfig/gstreamer-plugins-bad.pc
3667 pkgconfig/gstreamer-plugins-bad-uninstalled.pc
3668 pkgconfig/gstreamer-codecparsers.pc
3669 pkgconfig/gstreamer-codecparsers-uninstalled.pc
3670 pkgconfig/gstreamer-insertbin.pc
3671 pkgconfig/gstreamer-insertbin-uninstalled.pc
3672 pkgconfig/gstreamer-gl.pc
3673 pkgconfig/gstreamer-gl-uninstalled.pc
3674 pkgconfig/gstreamer-mpegts.pc
3675 pkgconfig/gstreamer-mpegts-uninstalled.pc
3676 pkgconfig/gstreamer-player.pc
3677 pkgconfig/gstreamer-player-uninstalled.pc
3678 pkgconfig/gstreamer-wayland.pc
3679 pkgconfig/gstreamer-wayland-uninstalled.pc
3680 pkgconfig/gstreamer-bad-base.pc
3681 pkgconfig/gstreamer-bad-base-uninstalled.pc
3682 pkgconfig/gstreamer-bad-video.pc
3683 pkgconfig/gstreamer-bad-video-uninstalled.pc
3684 pkgconfig/gstreamer-bad-audio.pc
3685 pkgconfig/gstreamer-bad-audio-uninstalled.pc
3686 tools/Makefile
3687 m4/Makefile
3688 )
3689
3690 AC_OUTPUT
3691
3692 AG_GST_OUTPUT_PLUGINS
3693 ORC_OUTPUT
3694