build: add m4 directory
[platform/upstream/gstreamer.git] / configure.ac
1 # gstreamer-vaapi package version number
2 m4_define([gst_vaapi_major_version], [1])
3 m4_define([gst_vaapi_minor_version], [7])
4 m4_define([gst_vaapi_micro_version], [0])
5 m4_define([gst_vaapi_nano_version],  [1])
6 m4_define([gst_vaapi_version],
7           [gst_vaapi_major_version.gst_vaapi_minor_version.gst_vaapi_micro_version])
8 m4_if(gst_vaapi_nano_version, [0], [],
9   [m4_append([gst_vaapi_version], gst_vaapi_nano_version, [.])])
10
11 # Configure defaults
12 m4_define([default_glapi],              [any])
13
14 dnl - library source changed -> increment REVISION
15 dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
16 dnl - interfaces added -> increment AGE
17 dnl - interfaces removed -> AGE = 0
18 # gstreamer-vaapi library (libtool) version number
19 m4_define([gst_vaapi_lt_current],       [700])
20 m4_define([gst_vaapi_lt_revision],      [0])
21 m4_define([gst_vaapi_lt_age],           [700])
22
23 # glib version number
24 m4_define([glib_version], [2.32])
25
26 # gstreamer version number
27 m4_define([gst_version],                [1.7.1.1])
28 m4_define([gst_plugins_base_version],   [1.7.1.1])
29 m4_define([gst_plugins_bad_version],    [1.7.1.1])
30
31 # Wayland minimum version number
32 m4_define([wayland_api_version], [1.0.2])
33
34 # VA-API minimum version number
35 m4_define([va_api_version],     [0.30.4])
36 m4_define([va_api_enc_version], [0.34.0])
37 m4_define([va_api_drm_version], [0.33.0])
38 m4_define([va_api_x11_version], [0.31.0])
39 m4_define([va_api_wld_version], [0.33.0])
40
41 # gtk-doc version number
42 # XXX: introspection annotations require gtk-doc >= 1.12
43 m4_define([gtkdoc_version], [1.12])
44
45 AC_PREREQ([2.69])
46 AC_INIT([GStreamer VA-API Plug-ins], [gst_vaapi_version],
47   [http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],
48   [gstreamer-vaapi])
49
50 dnl define the output header for config
51 AC_CONFIG_HEADERS([config.h])
52 AC_CONFIG_SRCDIR([Makefile.am])
53 AC_CONFIG_MACRO_DIR([m4])
54 AC_CONFIG_AUX_DIR([build-aux])
55
56 AG_GST_INIT
57
58 dnl initialize automake
59 AM_INIT_AUTOMAKE([-Wno-portability 1.14 no-dist-gzip dist-xz tar-ustar subdir-objects])
60
61 dnl define PACKAGE_VERSION_* variables
62 AS_VERSION
63
64 dnl check if this is a release version
65 AS_NANO(GST_GIT="no", GST_GIT="yes")
66
67 dnl AM_MAINTAINER_MODE only provides the option to configure to enable it
68 AM_MAINTAINER_MODE([enable])
69
70 dnl use pretty build output by default
71 AM_SILENT_RULES([yes])
72
73 dnl our libraries and install dirs use GST_API_VERSION in the filename
74 dnl to allow side-by-side installation of different API versions
75 GST_API_VERSION=1.0
76 AC_SUBST([GST_API_VERSION])
77 AC_DEFINE_UNQUOTED([GST_API_VERSION], ["$GST_API_VERSION"],
78   [GStreamer API Version])
79
80 AG_GST_LIBTOOL_PREPARE
81
82 dnl CURRENT, REVISION, AGE
83 dnl sets GST_LT_LDFLAGS
84 AS_LIBTOOL(GST, gst_vaapi_lt_current, gst_vaapi_lt_revision, gst_vaapi_lt_age)
85
86 dnl *** required versions of GStreamer stuff ***
87 GLIB_REQ=glib_version
88 GST_REQ=gst_version
89 GST_PBREQ=gst_plugins_base_version
90 GST_PBADREQ=gst_plugins_bad_version
91 WAYLAND_REQ=wayland_api_version
92 GTKDOC_REQ=gtkdoc_version
93
94 dnl *** required versions of VA-API stuff ***
95 VAAPI_REQ=va_api_version
96 VAAPI_ENC_REQ=va_api_enc_version
97 VAAPI_DRM_REQ=va_api_drm_version
98 VAAPI_X11_REQ=va_api_x11_version
99 VAAPI_WLD_REQ=va_api_wld_version
100
101 dnl *** autotools stuff ****
102
103 dnl allow for different autotools
104 AS_AUTOTOOLS_ALTERNATE
105
106 dnl Add parameters for aclocal
107 AC_SUBST([ACLOCAL_AMFLAGS], ["-I m4 -I common/m4"])
108
109 dnl *** check for arguments to configure ***
110
111 AG_GST_ARG_DISABLE_FATAL_WARNINGS
112 AG_GST_ARG_ENABLE_EXTRA_CHECKS
113 AG_GST_ARG_DEBUG
114
115 AG_GST_ARG_WITH_PKG_CONFIG_PATH
116
117 AC_ARG_ENABLE([encoders],
118   AS_HELP_STRING([--enable-encoders],
119     [enable video encoders @<:@default=yes@:>@]),
120   [], [enable_encoders="yes"])
121
122 AC_ARG_ENABLE([drm],
123   AS_HELP_STRING([--enable-drm],
124     [enable DRM backend @<:@default=yes@:>@]),
125   [], [enable_drm="yes"])
126
127 AC_ARG_ENABLE([x11],
128   AS_HELP_STRING([--enable-x11],
129     [enable X11 output @<:@default=yes@:>@]),
130   [], [enable_x11="yes"])
131
132 AC_ARG_ENABLE([glx],
133   AS_HELP_STRING([--enable-glx],
134     [enable OpenGL/X11 output @<:@default=yes@:>@]),
135   [], [enable_glx="yes"])
136
137 AC_ARG_ENABLE([wayland],
138   AC_HELP_STRING([--enable-wayland],
139     [enable Wayland output @<:@default=yes@:>@]),
140   [], [enable_wayland="yes"])
141
142 AC_ARG_ENABLE([egl],
143   AS_HELP_STRING([--enable-egl],
144     [enable EGL output @<:@default=yes@:>@]),
145   [], [enable_egl="yes"])
146
147 AC_ARG_WITH([glapi],
148   AS_HELP_STRING([--with-glapi=APIs],
149     [build with the specified OpenGL APIs @<:@default=default_glapi@:>@]),
150   [GLAPI="$with_glapi"], [GLAPI=default_glapi])
151
152 dnl *** checks for platform ***
153
154 dnl * hardware/architecture *
155
156 dnl check CPU type
157 AG_GST_ARCH
158
159 dnl *** checks for programs ***
160
161 dnl find a compiler
162 AC_PROG_CC
163 AC_PROG_CC_STDC
164
165 dnl check if the compiler supports '-c' and '-o' options
166 AM_PROG_CC_C_O
167
168 dnl check for git command for version generation in libgstvaapi
169 AC_PATH_PROG([GIT], [git])
170 AM_CONDITIONAL([HAVE_GIT], [test -n "$GIT"])
171
172 dnl check for documentation tools
173 GTK_DOC_CHECK([$GTKDOC_REQ])
174 AG_GST_PLUGIN_DOCS([$GTKDOC_REQ])
175
176 dnl *** checks for libraries ***
177 dnl check for libm, for sin() etc.
178 AC_CHECK_LIB([m], [tan])
179
180 dnl Check to see if dlopen is in default libraries (like Solaris, which
181 dnl has it in libc), or if libdl is needed to get it.
182 AC_CHECK_FUNC([dlopen], [], [
183   AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
184 AC_SUBST([DLOPEN_LIBS])
185
186 dnl define LIBDIR so we can inform people where we live
187 AS_AC_EXPAND([LIBDIR], [$libdir])
188 AC_DEFINE_UNQUOTED([LIBDIR], ["$LIBDIR"], [library dir])
189
190 dnl set location of plugin directory
191 AG_GST_SET_PLUGINDIR
192
193 dnl *** checks for header files ***
194
195 dnl *** checks for types/defines ***
196
197 dnl *** checks for structures ***
198
199 dnl *** checks for compiler characteristics ***
200
201 dnl *** checks for library functions ***
202
203 dnl *** checks for headers ***
204
205 dnl *** checks for dependency libraries ***
206
207 dnl ---------------------------------------------------------------------------
208 dnl -- GStreamer                                                             --
209 dnl ---------------------------------------------------------------------------
210 dnl GLib is required
211 AG_GST_GLIB_CHECK([$GLIB_REQ])
212
213 dnl checks for gstreamer
214 dnl uninstalled is selected preferentially -- see pkg-config(1)
215 AG_GST_CHECK_GST([$GST_API_VERSION], [$GST_REQ], [yes])
216
217 dnl back compatibility
218 AC_MSG_CHECKING([for GStreamer API version])
219 gst_api_version=`$PKG_CONFIG --modversion "gstreamer-$GST_API_VERSION"`
220 gst_major_version=`echo "$gst_api_version" | cut -d'.' -f1`
221 gst_minor_version=`echo "$gst_api_version" | cut -d'.' -f2`
222 GST_VERSION="${gst_major_version}.${gst_minor_version}"
223 AC_MSG_RESULT([$GST_VERSION])
224 AC_DEFINE_UNQUOTED([GST_API_VERSION_S], ["$GST_VERSION"],
225   [Defined to the string representation of GStreamer version])
226
227 AG_GST_CHECK_GST_BASE([$GST_API_VERSION], [$GST_REQ], [yes])
228 AG_GST_CHECK_GST_PLUGINS_BASE([$GST_API_VERSION], [$GST_PBREQ], [yes])
229
230 dnl gst_dmabuf_memory_get_fd (gstreamer-allocators)
231 AG_GST_CHECK_MODULES([GST_ALLOCATORS],
232   [gstreamer-allocators-$GST_API_VERSION], [$GST_PBREQ], [yes])
233
234 dnl GstVideoOverlayComposition (gstreamer-video)
235 AG_GST_CHECK_MODULES([GST_VIDEO],
236   [gstreamer-video-$GST_API_VERSION], [$GST_PBREQ], [yes])
237
238 dnl ... GStreamer base utils (gstreamer-pbutils)
239 AG_GST_CHECK_MODULES([GST_PBUTILS],
240   [gstreamer-pbutils-$GST_API_VERSION], [$GST_PBREQ], [yes])
241
242 dnl bitstream parsers (gstreamer-codecparsers)
243 AG_GST_CHECK_MODULES([GST_CODEC_PARSERS],
244   [gstreamer-codecparsers-$GST_API_VERSION], [$GST_PBADREQ], [yes])
245
246 AS_IF([test "x$enable_glx" = "xyes" -o "x$enable_egl" = "xyes"],
247   [enable_opengl="yes"], [enable_opengl="no"])
248
249 dnl ... opengl helper libraries
250 HAVE_GSTGL=0
251 if test "x$enable_opengl" = "xyes"; then
252   PKG_CHECK_MODULES([GST_GL],
253     [gstreamer-gl-$GST_API_VERSION >= $GST_PBADREQ],
254     [
255       HAVE_GSTGL=1
256       AC_CACHE_CHECK([for GStreamer OpenGL helper libraries],
257         [ac_cv_have_gst_gl_helpers],
258         [
259           saved_CPPFLAGS="$CPPFLAGS"
260           CPPFLAGS="$CPPFLAGS $GST_GL_CFLAGS $GST_VIDEO_CFLAGS"
261           saved_LIBS="$LIBS"
262           LIBS="$saved_LIBS"
263           AC_CHECK_HEADERS([gst/gl/gl.h], [], [HAVE_GSTGL=0])
264           AC_COMPILE_IFELSE(
265             [
266               AC_LANG_PROGRAM(
267                 [[
268 #include <gst/gl/gl.h>
269                 ]],
270                 [[
271 GstGLContext gl_context;
272                 ]])
273             ],
274             [ac_cv_have_gst_gl_helpers="yes"],
275             [ac_cv_have_gst_gl_helpers="no"])
276           CPPFLAGS="$saved_CPPFLAGS"
277           LIBS="$saved_LIBS"
278         ])
279     ], [])
280 fi
281 AS_IF([test "x$ac_cv_have_gst_gl_helpers" = "xno"], [HAVE_GSTGL=0])
282 AM_CONDITIONAL([USE_GST_GL_HELPERS], [test $HAVE_GSTGL -eq 1])
283 AC_DEFINE_UNQUOTED([USE_GST_GL_HELPERS], [$HAVE_GSTGL],
284   [Defined to 1 if GStreamer OpenGL helper libraries are available])
285
286 if test "x$enable_egl" = "xyes" -a $HAVE_GSTGL -ne 1; then
287   AC_MSG_WARN([GStreamer/GL helper libraries not found, disabling EGL support])
288   enable_egl="no"
289 fi
290
291 dnl ---------------------------------------------------------------------------
292 dnl -- Renderers                                                             --
293 dnl ---------------------------------------------------------------------------
294
295 dnl Check for DRM/libudev
296 USE_DRM=0
297 if test "x$enable_drm" = "xyes"; then
298   PKG_CHECK_MODULES([DRM], [libdrm libudev],
299     [
300       USE_DRM=1
301       saved_CPPFLAGS="$CPPFLAGS"
302       CPPFLAGS="$CPPFLAGS $DRM_CFLAGS"
303       AC_CHECK_HEADERS([drm_fourcc.h], [], [USE_DRM=0])
304       CPPFLAGS="$saved_CPPFLAGS"
305     ], [])
306 fi
307
308 dnl Check for X11
309 USE_X11=0
310 if test "x$enable_x11" = "xyes"; then
311   PKG_CHECK_MODULES([X11], [x11],
312     [
313       USE_X11=1
314       saved_CPPFLAGS="$CPPFLAGS"
315       CPPFLAGS="$CPPFLAGS $X11_CFLAGS"
316       AC_CHECK_HEADERS([X11/Xlib.h X11/Xutil.h X11/Xatom.h], [], [USE_X11=0])
317       CPPFLAGS="$saved_CPPFLAGS"
318     ], [])
319 fi
320
321 HAVE_XKBLIB=0
322 HAVE_XRANDR=0
323 HAVE_XRENDER=0
324 if test $USE_X11 -eq 1; then
325   dnl Check for XKB library
326   HAVE_XKBLIB=1
327   AC_CHECK_HEADERS([X11/XKBlib.h], [], [HAVE_XKBLIB=0])
328
329   dnl Check for XRandR
330   PKG_CHECK_MODULES([XRANDR], [xrandr],
331     [
332       HAVE_XRANDR=1
333       saved_CPPFLAGS="$CPPFLAGS"
334       CPPFLAGS="$CPPFLAGS $XRANDR_CFLAGS"
335       AC_CHECK_HEADERS([X11/extensions/Xrandr.h], [], [HAVE_XRANDR=0])
336       CPPFLAGS="$saved_CPPFLAGS"
337     ], [])
338
339   dnl Check for XRender
340   PKG_CHECK_MODULES([XRENDER], [xrender],
341     [
342       HAVE_XRENDER=1
343       saved_CPPFLAGS="$CPPFLAGS"
344       CPPFLAGS="$CPPFLAGS $XRENDER_CFLAGS"
345       AC_CHECK_HEADERS([X11/extensions/Xrender.h], [], [HAVE_XRENDER=0])
346       CPPFLAGS="$saved_CPPFLAGS"
347     ], [])
348 fi
349
350 AC_DEFINE_UNQUOTED([HAVE_XKBLIB], [$HAVE_XKBLIB],
351   [Defined to 1 if the XKB extension exists.])
352 AC_DEFINE_UNQUOTED([HAVE_XRANDR], [$HAVE_XRANDR],
353   [Defined to 1 if the XRandR extension exists.])
354 AC_DEFINE_UNQUOTED([HAVE_XRENDER], [$HAVE_XRENDER],
355   [Defined to 1 if the XRender extension exists.])
356
357 dnl OpenGL
358 GLES_VERSION_MASK=0
359
360 HAVE_GL=0
361 HAVE_GLESv2=0
362 HAVE_GLESv3=0
363 if test "x$enable_opengl" = "xyes"; then
364   dnl OpenGL
365   case ",$GLAPI," in
366     (*,any,*|*,gl,*)
367       HAVE_GL=1
368       PKG_CHECK_MODULES([GL], [gl],
369         [
370           saved_CPPFLAGS="$CPPFLAGS"
371           CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
372           AC_CHECK_HEADERS([GL/gl.h GL/glext.h], [], [HAVE_GL=0],
373             [
374 #ifdef HAVE_GL_GL_H
375 # include <GL/gl.h>
376 #endif
377             ])
378           CPPFLAGS="$saved_CPPFLAGS"
379         ], [HAVE_GL=0])
380       GLES_VERSION_MASK=`expr $GLES_VERSION_MASK "+" $HAVE_GL "*" 1`
381     ;;
382   esac
383
384   dnl OpenGL|ESv2
385   case ",$GLAPI," in
386     (*,any,*|*,gles2,*)
387       HAVE_GLESv2=1
388       PKG_CHECK_MODULES([GLES2], [glesv2],
389         [
390           saved_CPPFLAGS="$CPPFLAGS"
391           CPPFLAGS="$CPPFLAGS $GLES2_CFLAGS"
392           AC_CHECK_HEADERS([GLES2/gl2.h GLES2/gl2ext.h], [], [HAVE_GLESv2=0],
393             [
394 #ifdef HAVE_GLES2_GL2_H
395 # include <GLES2/gl2.h>
396 #endif
397             ])
398           CPPFLAGS="$saved_CPPFLAGS"
399         ], [HAVE_GLESv2=0])
400       GLES_VERSION_MASK=`expr $GLES_VERSION_MASK "+" $HAVE_GLESv2 "*" 4`
401     ;;
402   esac
403
404   dnl OpenGL|ESv3
405   case ",$GLAPI," in
406     (*,any,*|*,gles3,*)
407       HAVE_GLESv3=1
408       PKG_CHECK_MODULES([GLES3], [glesv2],
409         [
410           saved_CPPFLAGS="$CPPFLAGS"
411           CPPFLAGS="$CPPFLAGS $GLES3_CFLAGS"
412           AC_CHECK_HEADERS([GLES3/gl3.h GLES3/gl3ext.h GLES2/gl2ext.h], [],
413             [HAVE_GLESv3=0],
414             [
415 #ifdef HAVE_GLES3_GL3_H
416 # include <GLES3/gl3.h>
417 #endif
418             ])
419           CPPFLAGS="$saved_CPPFLAGS"
420         ], [HAVE_GLESv3=0])
421       GLES_VERSION_MASK=`expr $GLES_VERSION_MASK "+" $HAVE_GLESv3 "*" 8`
422     ;;
423   esac
424 fi
425
426 dnl ... GLX
427 USE_GLX=0
428 if test "x$enable_glx" = "xyes" -a $HAVE_GL -eq 1 -a $USE_X11 -eq 1; then
429   USE_GLX=1
430
431   saved_CPPFLAGS="$CPPFLAGS"
432   saved_LIBS="$LIBS"
433   CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
434   LIBS="$LIBS $GL_LIBS"
435   AC_CHECK_HEADERS([GL/glx.h], [], [USE_GLX=0],
436     [
437 #ifdef HAVE_GL_GL_H
438 # include <GL/gl.h>
439 #endif
440     ])
441   AC_CHECK_LIB([GL], [glXCreateContext], [], [USE_GLX=0])
442   CPPFLAGS="$saved_CPPFLAGS"
443   LIBS="$saved_LIBS"
444 fi
445
446 dnl ... EGL
447 USE_EGL=0
448 if test "x$enable_egl" = "xyes" -a $GLES_VERSION_MASK -ne 0; then
449   PKG_CHECK_MODULES([EGL], [egl],
450     [
451       USE_EGL=1
452
453       saved_CPPFLAGS="$CPPFLAGS"
454       saved_LIBS="$LIBS"
455       AC_CHECK_HEADERS([EGL/egl.h], [], [USE_EGL=0])
456       AC_CHECK_LIB([EGL], [eglGetDisplay], [], [USE_EGL=0])
457       CPPFLAGS="$saved_CPPFLAGS"
458       LIBS="$saved_LIBS"
459
460       dnl Check for GMODULE
461       PKG_CHECK_MODULES([GMODULE], [gmodule-2.0 >= $GLIB_REQ])
462     ], [])
463 fi
464
465 dnl Check for Wayland
466 USE_WAYLAND=0
467 if test "x$enable_wayland" = "xyes"; then
468   PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQ],
469     [
470       USE_WAYLAND=1
471       saved_CPPFLAGS="$CPPFLAGS"
472       CPPFLAGS="$CPPFLAGS $WAYLAND_CFLAGS"
473       AC_CHECK_HEADERS([wayland-client.h], [], [USE_WAYLAND=0])
474       CPPFLAGS="$saved_CPPFLAGS"
475     ], [])
476 fi
477
478 dnl ---------------------------------------------------------------------------
479 dnl -- VA-API                                                                --
480 dnl ---------------------------------------------------------------------------
481
482 dnl Core API
483 PKG_CHECK_MODULES([LIBVA], [libva >= $VAAPI_REQ])
484 VA_VERSION_STR=`$PKG_CONFIG --modversion libva`
485
486 dnl VA/DRM API
487 if test $USE_DRM -eq 1; then
488   PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm >= $VAAPI_DRM_REQ],
489     [
490       saved_CPPFLAGS="$CPPFLAGS"
491       CPPFLAGS="$LIBVA_DRM_CFLAGS"
492       AC_CHECK_HEADERS([va/va_drm.h], [], [USE_DRM=0])
493       CPPFLAGS="$saved_CPPFLAGS"
494     ], [USE_DRM=0])
495 fi
496
497 dnl VA/X11 API
498 if test $USE_X11 -eq 1; then
499   PKG_CHECK_MODULES(LIBVA_X11, [libva-x11 >= $VAAPI_X11_REQ],
500     [], [USE_X11=0])
501 fi
502
503 dnl Check for va_dec_jpeg.h header
504 saved_CPPFLAGS="$CPPFLAGS"
505 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
506 AC_CHECK_HEADERS([va/va_dec_jpeg.h], [], [],
507   [
508 #include <va/va.h>
509   ])
510 CPPFLAGS="$saved_CPPFLAGS"
511
512 dnl Check for JPEG decoding API (0.32.1+)
513 USE_JPEG_DECODER=0
514 AC_CACHE_CHECK([for JPEG decoding API],
515   [ac_cv_have_jpeg_decoding_api],
516   [
517     saved_CPPFLAGS="$CPPFLAGS"
518     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
519     saved_LIBS="$LIBS"
520     LIBS="$LIBS $LIBVA_LIBS"
521     AC_COMPILE_IFELSE(
522       [
523         AC_LANG_PROGRAM(
524           [[
525 #include <va/va.h>
526 #ifdef HAVE_VA_VA_DEC_JPEG_H
527 # include <va/va_dec_jpeg.h>
528 #endif
529           ]],
530           [[
531 VAPictureParameterBufferJPEGBaseline pic_param;
532 VASliceParameterBufferJPEGBaseline slice_param;
533 VAHuffmanTableBufferJPEGBaseline huffman_table;
534 VAIQMatrixBufferJPEGBaseline iq_matrix;
535           ]])
536       ],
537       [ac_cv_have_jpeg_decoding_api="yes"],
538       [ac_cv_have_jpeg_decoding_api="no"])
539     CPPFLAGS="$saved_CPPFLAGS"
540     LIBS="$saved_LIBS"
541   ])
542 AS_IF([test "x$ac_cv_have_jpeg_decoding_api" = "xyes"], [USE_JPEG_DECODER=1])
543
544 dnl Check for va_dec_vp8.h header
545 saved_CPPFLAGS="$CPPFLAGS"
546 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
547 AC_CHECK_HEADERS([va/va_dec_vp8.h], [], [],
548   [
549 #include <va/va.h>
550   ])
551 CPPFLAGS="$saved_CPPFLAGS"
552
553 dnl Check for VP8 decoding API (0.34+)
554 USE_VP8_DECODER=0
555 AC_CACHE_CHECK([for VP8 decoding API],
556   [ac_cv_have_vp8_decoding_api],
557   [
558     saved_CPPFLAGS="$CPPFLAGS"
559     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
560     saved_LIBS="$LIBS"
561     LIBS="$LIBS $LIBVA_LIBS"
562     AC_COMPILE_IFELSE(
563       [
564         AC_LANG_PROGRAM(
565           [[
566 #include <va/va.h>
567 #ifdef HAVE_VA_VA_DEC_VP8_H
568 # include <va/va_dec_vp8.h>
569 #endif
570           ]],
571           [[
572 VAPictureParameterBufferVP8 pic_param;
573 VASliceParameterBufferVP8 slice_param;
574 VAProbabilityDataBufferVP8 prob_data;
575 VAIQMatrixBufferVP8 iq_matrix;
576 slice_param.slice_data_offset = 0;
577 slice_param.slice_data_flag = 0;
578           ]])
579       ],
580       [ac_cv_have_vp8_decoding_api="yes"],
581       [ac_cv_have_vp8_decoding_api="no"])
582     CPPFLAGS="$saved_CPPFLAGS"
583     LIBS="$saved_LIBS"
584   ])
585 AS_IF([test "x$ac_cv_have_vp8_decoding_api" = "xyes"], [USE_VP8_DECODER=1])
586
587 dnl Check for va_dec_vp9.h header
588 saved_CPPFLAGS="$CPPFLAGS"
589 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
590 AC_CHECK_HEADERS([va/va_dec_vp9.h], [], [],
591   [
592 #include <va/va.h>
593   ])
594 CPPFLAGS="$saved_CPPFLAGS"
595
596 dnl Check for VP9 decoding API (0.37+)
597 USE_VP9_DECODER=0
598 AC_CACHE_CHECK([for VP9 decoding API],
599   [ac_cv_have_vp9_decoding_api],
600   [
601     saved_CPPFLAGS="$CPPFLAGS"
602     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
603     saved_LIBS="$LIBS"
604     LIBS="$LIBS $LIBVA_LIBS"
605     AC_COMPILE_IFELSE(
606       [
607         AC_LANG_PROGRAM(
608           [[
609 #include <va/va.h>
610 #ifdef HAVE_VA_VA_DEC_VP9_H
611 # include <va/va_dec_vp9.h>
612 #endif
613           ]],
614           [[
615 VADecPictureParameterBufferVP9 pic_param;
616 VASliceParameterBufferVP9 slice_param;
617 VASegmentParameterVP9 seg_param;
618 slice_param.slice_data_offset = 0;
619 slice_param.slice_data_flag = 0;
620           ]])
621       ],
622       [ac_cv_have_vp9_decoding_api="yes"],
623       [ac_cv_have_vp9_decoding_api="no"])
624     CPPFLAGS="$saved_CPPFLAGS"
625     LIBS="$saved_LIBS"
626   ])
627 AS_IF([test "x$ac_cv_have_vp9_decoding_api" = "xyes"], [USE_VP9_DECODER=1])
628
629 dnl Check for va_dec_hevc.h header
630 saved_CPPFLAGS="$CPPFLAGS"
631 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
632 AC_CHECK_HEADERS([va/va_dec_hevc.h], [], [],
633   [
634 #include <va/va.h>
635   ])
636 CPPFLAGS="$saved_CPPFLAGS"
637
638 dnl Check for HEVC decoding API (0.38+)
639 USE_HEVC_DECODER=0
640 AC_CACHE_CHECK([for HEVC decoding API],
641   [ac_cv_have_hevc_decoding_api],
642   [
643     saved_CPPFLAGS="$CPPFLAGS"
644     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
645     saved_LIBS="$LIBS"
646     LIBS="$LIBS $LIBVA_LIBS"
647     AC_COMPILE_IFELSE(
648       [
649         AC_LANG_PROGRAM(
650           [[
651 #include <va/va.h>
652 #ifdef HAVE_VA_VA_DEC_HEVC_H
653 # include <va/va_dec_hevc.h>
654 #endif
655           ]],
656           [[
657 VAPictureParameterBufferHEVC pic_param;
658 VASliceParameterBufferHEVC slice_param;
659 VAIQMatrixBufferHEVC iq_matrix;
660 slice_param.slice_data_offset = 0;
661 slice_param.slice_data_flag = 0;
662           ]])
663       ],
664       [ac_cv_have_hevc_decoding_api="yes"],
665       [ac_cv_have_hevc_decoding_api="no"])
666     CPPFLAGS="$saved_CPPFLAGS"
667     LIBS="$saved_LIBS"
668   ])
669 AS_IF([test "x$ac_cv_have_hevc_decoding_api" = "xyes"], [USE_HEVC_DECODER=1])
670
671 dnl Check for vpp (video post-processing) support
672 USE_VA_VPP=0
673 AC_CACHE_CHECK([for video post-postprocessing API],
674   [ac_cv_have_va_vpp_api],
675   [
676     saved_CPPFLAGS="$CPPFLAGS"
677     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
678     saved_LIBS="$LIBS"
679     LIBS="$LIBS $LIBVA_LIBS"
680     AC_COMPILE_IFELSE(
681       [
682         AC_LANG_PROGRAM(
683           [[
684 #include <va/va.h>
685 #include <va/va_vpp.h>
686           ]],
687           [[
688 VADisplay va_dpy;
689 VAContextID vpp_ctx;
690 VAProcFilterType filters[VAProcFilterCount];
691 unsigned int num_filters = VAProcFilterCount;
692 vaQueryVideoProcFilters(va_dpy, vpp_ctx, filters, &num_filters);
693           ]])
694       ],
695       [ac_cv_have_va_vpp_api="yes"],
696       [ac_cv_have_va_vpp_api="no"])
697     CPPFLAGS="$saved_CPPFLAGS"
698     LIBS="$saved_LIBS"
699   ])
700 AS_IF([test "x$ac_cv_have_va_vpp_api" = "xyes"], [USE_VA_VPP=1])
701
702 dnl Check for encoding support
703 USE_ENCODERS=0
704 if test "x$enable_encoders" = "xyes"; then
705   PKG_CHECK_MODULES([LIBVA], [libva >= $VAAPI_ENC_REQ],
706     [
707       USE_ENCODERS=1
708       saved_CPPFLAGS="$CPPFLAGS"
709       CPPFLAGS="$LIBVA_CFLAGS"
710       AC_CHECK_HEADERS([va/va_enc_mpeg2.h va/va_enc_h264.h], [],
711         [USE_ENCODERS=0],
712         [
713 #include <va/va.h>
714         ])
715       CPPFLAGS="$saved_CPPFLAGS"
716     ], [])
717 fi
718
719 USE_JPEG_ENCODER=0
720 USE_VP8_ENCODER=0
721 USE_H265_ENCODER=0
722 if test $USE_ENCODERS -eq 1; then
723   dnl Check for JPEG Encoding API (0.37.0+)
724   AC_CHECK_HEADERS([va/va_enc_jpeg.h], [], [],
725     [
726 #include <va/va.h>
727     ])
728   AC_CACHE_CHECK([for JPEG encoding API],
729     [ac_cv_have_jpeg_encoding_api],
730     [
731       saved_CPPFLAGS="$CPPFLAGS"
732       CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
733       saved_LIBS="$LIBS"
734       LIBS="$LIBS $LIBVA_LIBS"
735       AC_COMPILE_IFELSE(
736         [
737           AC_LANG_PROGRAM(
738             [[
739 #include <va/va.h>
740 #ifdef HAVE_VA_VA_ENC_JPEG_H
741 # include <va/va_enc_jpeg.h>
742 #endif
743             ]],
744             [[
745 VAEncPictureParameterBufferJPEG pic_param;
746 VAEncSliceParameterBufferJPEG slice_param;
747 VAQMatrixBufferJPEG q_matrix;
748             ]])
749         ],
750         [ac_cv_have_jpeg_encoding_api="yes"],
751         [ac_cv_have_jpeg_encoding_api="no"])
752       CPPFLAGS="$saved_CPPFLAGS"
753       LIBS="$saved_LIBS"
754     ])
755   AS_IF([test "x$ac_cv_have_jpeg_encoding_api" = "xyes"], [USE_JPEG_ENCODER=1])
756
757   dnl Check for VP8 Encoding API
758   AC_CHECK_HEADERS([va/va_enc_vp8.h], [], [],
759     [
760 #include <va/va.h>
761     ])
762   AC_CACHE_CHECK([for VP8 encoding API],
763     [ac_cv_have_vp8_encoding_api],
764     [
765       saved_CPPFLAGS="$CPPFLAGS"
766       CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
767       saved_LIBS="$LIBS"
768       LIBS="$LIBS $LIBVA_LIBS"
769       AC_COMPILE_IFELSE(
770         [
771           AC_LANG_PROGRAM(
772             [[
773 #include <va/va.h>
774 #ifdef HAVE_VA_VA_ENC_VP8_H
775 # include <va/va_enc_vp8.h>
776 #endif
777             ]],
778             [[
779 VAEncSequenceParameterBufferVP8 seq_param;
780 VAEncPictureParameterBufferVP8 pic_param;
781 VAQMatrixBufferVP8 q_matrix;
782             ]])
783         ],
784         [ac_cv_have_vp8_encoding_api="yes"],
785         [ac_cv_have_vp8_encoding_api="no"])
786       CPPFLAGS="$saved_CPPFLAGS"
787       LIBS="$saved_LIBS"
788     ])
789   AS_IF([test "x$ac_cv_have_vp8_encoding_api" = "xyes"], [USE_VP8_ENCODER=1])
790
791   dnl Check for H265/HEVC Encoding API
792   AC_CHECK_HEADERS([va/va_enc_hevc.h], [], [],
793     [
794 #include <va/va.h>
795     ])
796   AC_CACHE_CHECK([for HEVC encoding API],
797     [ac_cv_have_hevc_encoding_api],
798     [
799       saved_CPPFLAGS="$CPPFLAGS"
800       CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
801       saved_LIBS="$LIBS"
802       LIBS="$LIBS $LIBVA_LIBS"
803       AC_COMPILE_IFELSE(
804         [
805           AC_LANG_PROGRAM(
806             [[
807 #include <va/va.h>
808 #ifdef HAVE_VA_VA_ENC_HEVC_H
809 # include <va/va_enc_hevc.h>
810 #endif
811             ]],
812             [[
813 VAEncSequenceParameterBufferHEVC seq_param;
814 VAEncPictureParameterBufferHEVC pic_param;
815 VAEncSliceParameterBufferHEVC buf_param;
816 VAQMatrixBufferHEVC q_matrix;
817             ]])
818         ],
819         [ac_cv_have_hevc_encoding_api="yes"],
820         [ac_cv_have_hevc_encoding_api="no"])
821       CPPFLAGS="$saved_CPPFLAGS"
822       LIBS="$saved_LIBS"
823     ])
824   AS_IF([test "x$ac_cv_have_hevc_encoding_api" = "xyes"], [USE_H265_ENCODER=1])
825 fi
826
827 dnl VA/Wayland API
828 if test $USE_WAYLAND -eq 1; then
829   PKG_CHECK_MODULES([LIBVA_WAYLAND], [libva-wayland >= $VAAPI_WLD_REQ],
830     [], [USE_WAYLAND=0])
831 fi
832
833 dnl *** finalize CFLAGS, LDFLAGS, LIBS
834
835 # set by AG_GST_PARSE_SUBSYSTEM_DISABLES above
836 dnl make sure it doesn't complain about unused variables if debugging is disabled
837 AG_GST_CHECK_GST_DEBUG_DISABLED([NO_WARNINGS="-Wno-unused"], [NO_WARNINGS=""])
838
839 dnl define an ERROR_CFLAGS Makefile variable
840 dnl FIXME Add -Wredundant-decls again if considered useful and warnings are fixed
841 AG_GST_SET_ERROR_CFLAGS([$FATAL_WARNINGS], [-Wmissing-declarations -Wmissing-prototypes -Wwrite-strings -Wformat-security -Wold-style-definition -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar -Wnested-externs $NO_WARNINGS])
842
843 dnl define correct level for debugging messages
844 AG_GST_SET_LEVEL_DEFAULT([$GST_GIT])
845
846 dnl Overview:
847 dnl GST_OPTION_CFLAGS:  common flags for profiling, debugging, errors, ...
848 dnl GST_*:              flags shared by built objects to link against GStreamer
849 dnl GST_ALL_LDFLAGS:    linker flags shared by all
850 dnl GST_LIB_LDFLAGS:    additional linker flags for all libaries
851 dnl GST_LT_LDFLAGS:     library versioning of our libraries
852 dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins
853
854 dnl GST_OPTION_CFLAGS
855 if test "x$USE_DEBUG" = xyes; then
856    PROFILE_CFLAGS="-g"
857 fi
858 AC_SUBST([PROFILE_CFLAGS])
859
860 if test "x$GST_GIT" = "xyes"; then
861   DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED"
862 else
863   DEPRECATED_CFLAGS=""
864 fi
865 AC_SUBST([DEPRECATED_CFLAGS])
866
867 dnl every flag in GST_OPTION_CFLAGS and GST_OPTION_CXXFLAGS can be overridden
868 dnl at make time with e.g. make ERROR_CFLAGS=""
869 GST_OPTION_CFLAGS="\$(WARNING_CFLAGS) \$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(DEPRECATED_CFLAGS)"
870 AC_SUBST([GST_OPTION_CFLAGS])
871
872 dnl FIXME: do we want to rename to GST_ALL_* ?
873 dnl prefer internal headers to already installed ones
874 dnl also add builddir include for enumtypes and marshal
875 dnl add GST_OPTION_CFLAGS, but overridable
876 GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
877 GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
878 AC_SUBST([GST_CFLAGS])
879
880 dnl LDFLAGS really should only contain flags, not libs - they get added before
881 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
882 GST_ALL_LDFLAGS="-no-undefined"
883 if test "x${enable_Bsymbolic}" = "xyes"; then
884   GST_ALL_LDFLAGS="$GST_ALL_LDFLAGS -Wl,-Bsymbolic-functions"
885 fi
886 AC_SUBST([GST_ALL_LDFLAGS])
887
888 dnl GST_LIB_LDFLAGS
889 dnl linker flags shared by all libraries
890 dnl LDFLAGS modifier defining exported symbols from built libraries
891 dnl (export _gst_foo but not __gst_foo)
892 GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*"
893 AC_SUBST([GST_LIB_LDFLAGS])
894
895 dnl this really should only contain flags, not libs - they get added before
896 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
897 GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_.*' $GST_ALL_LDFLAGS"
898 AC_SUBST([GST_PLUGIN_LDFLAGS])
899
900 dnl ---------------------------------------------------------------------------
901 dnl -- Generate files and summary                                            --
902 dnl ---------------------------------------------------------------------------
903
904 case ":$USE_X11:$USE_GLX:$USE_EGL:$USE_WAYLAND:$USE_DRM:" in
905 *:1:*) ;;
906 *) AC_MSG_ERROR([No renderer is enabled]) ;;
907 esac
908
909 AC_DEFINE_UNQUOTED([USE_ENCODERS], [$USE_ENCODERS],
910   [Defined to 1 if video encoders are used])
911 AM_CONDITIONAL([USE_ENCODERS], [test $USE_ENCODERS -eq 1])
912
913 AC_DEFINE_UNQUOTED([USE_JPEG_ENCODER], [$USE_JPEG_ENCODER],
914   [Defined to 1 if JPEG encoder is used])
915 AM_CONDITIONAL([USE_JPEG_ENCODER], [test $USE_JPEG_ENCODER -eq 1])
916
917 AC_DEFINE_UNQUOTED([USE_VP8_ENCODER], [$USE_VP8_ENCODER],
918   [Defined to 1 if VP8 encoder is used])
919 AM_CONDITIONAL([USE_VP8_ENCODER], [test $USE_VP8_ENCODER -eq 1])
920
921 AC_DEFINE_UNQUOTED([USE_H265_ENCODER], [$USE_H265_ENCODER],
922   [Defined to 1 if H265 encoder is used])
923 AM_CONDITIONAL([USE_H265_ENCODER], [test $USE_H265_ENCODER -eq 1])
924
925 AC_DEFINE_UNQUOTED([USE_VA_VPP], [$USE_VA_VPP],
926   [Defined to 1 if video post-processing is used])
927 AM_CONDITIONAL([USE_VA_VPP], [test $USE_VA_VPP -eq 1])
928
929 AC_DEFINE_UNQUOTED([USE_JPEG_DECODER], [$USE_JPEG_DECODER],
930   [Defined to 1 if JPEG decoder is used])
931 AM_CONDITIONAL([USE_JPEG_DECODER], [test $USE_JPEG_DECODER -eq 1])
932
933 AC_DEFINE_UNQUOTED([USE_VP8_DECODER], [$USE_VP8_DECODER],
934   [Defined to 1 if VP8 decoder is used])
935 AM_CONDITIONAL([USE_VP8_DECODER], [test $USE_VP8_DECODER -eq 1])
936
937 AC_DEFINE_UNQUOTED([USE_VP9_DECODER], [$USE_VP9_DECODER],
938   [Defined to 1 if VP9 decoder is used])
939 AM_CONDITIONAL([USE_VP9_DECODER], [test $USE_VP9_DECODER -eq 1])
940
941 AC_DEFINE_UNQUOTED([USE_HEVC_DECODER], [$USE_HEVC_DECODER],
942   [Defined to 1 if HEVC decoder is used])
943 AM_CONDITIONAL([USE_HEVC_DECODER], [test $USE_HEVC_DECODER -eq 1])
944
945 AC_DEFINE_UNQUOTED([USE_DRM], [$USE_DRM],
946   [Defined to 1 if DRM is enabled])
947 AM_CONDITIONAL([USE_DRM], [test $USE_DRM -eq 1])
948
949 AC_DEFINE_UNQUOTED([USE_X11], [$USE_X11],
950   [Defined to 1 if X11 is enabled])
951 AM_CONDITIONAL([USE_X11], [test $USE_X11 -eq 1])
952
953 AC_DEFINE_UNQUOTED([USE_GLX], [$USE_GLX],
954   [Defined to 1 if GLX is enabled])
955 AM_CONDITIONAL([USE_GLX], [test $USE_GLX -eq 1])
956
957 AC_DEFINE_UNQUOTED([USE_EGL], [$USE_EGL],
958   [Defined to 1 if EGL is enabled])
959 AM_CONDITIONAL([USE_EGL], [test $USE_EGL -eq 1])
960
961 AC_DEFINE_UNQUOTED([USE_GLES_VERSION_MASK], [$GLES_VERSION_MASK],
962   [Defined to the set of enabled OpenGL ES APIs])
963
964 AC_DEFINE_UNQUOTED([USE_WAYLAND], [$USE_WAYLAND],
965   [Defined to 1 if WAYLAND is enabled])
966 AM_CONDITIONAL([USE_WAYLAND], [test $USE_WAYLAND -eq 1])
967
968 dnl @TODO hack for egl's dynamic module loading. remove it!
969 AC_DEFINE_UNQUOTED([GST_VAAPI_MAJOR_VERSION_S], ["0"],
970   [Defined to the string representation of gstreamer-vaapi major version])
971
972 AC_CONFIG_FILES([
973     Makefile
974     common/Makefile
975     common/m4/Makefile
976     m4/Makefile
977     docs/Makefile
978     docs/version.entities
979     docs/plugins/Makefile
980     docs/plugins/gstreamer-vaapi-plugins-docs.xml
981     gst-libs/Makefile
982     gst-libs/gst/Makefile
983     gst-libs/gst/base/Makefile
984     gst-libs/gst/vaapi/Makefile
985     gst/Makefile
986     gst/vaapi/Makefile
987     tests/Makefile
988 ])
989 AC_OUTPUT
990
991 dnl Print summary
992 yesno() {
993   test $1 -eq 1 && echo yes || echo no
994 }
995
996 VIDEO_OUTPUTS=""
997 AS_IF([test $USE_DRM -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS drm"])
998 AS_IF([test $USE_X11 -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS x11"])
999 AS_IF([test $USE_GLX -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS glx"])
1000 AS_IF([test $USE_EGL -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS egl"])
1001 AS_IF([test $USE_WAYLAND -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS wayland"])
1002
1003 echo
1004 echo $PACKAGE configuration summary:
1005 echo
1006 echo Installation Prefix .............. : ${prefix}
1007 echo GStreamer API version ............ : $GST_VERSION
1008 echo VA-API version ................... : $VA_VERSION_STR
1009 echo Video encoding ................... : $(yesno $USE_ENCODERS)
1010 echo Video outputs .................... : $VIDEO_OUTPUTS
1011 echo