display: make cache maintenance really MT-safe.
[platform/upstream/gstreamer-vaapi.git] / configure.ac
1 # gstreamer-vaapi package version number
2 m4_define([gst_vaapi_major_version], [0])
3 m4_define([gst_vaapi_minor_version], [5])
4 m4_define([gst_vaapi_micro_version], [9])
5 m4_define([gst_vaapi_pre_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_pre_version, [0], [], [
9 m4_append([gst_vaapi_version], gst_vaapi_pre_version, [.pre])
10 ])
11
12 # gstreamer-vaapi library (libtool) version number
13 m4_define([gst_vaapi_lt_current],       [5])
14 m4_define([gst0_vaapi_lt_current_bias], [0])
15 m4_define([gst1_vaapi_lt_current_bias], [2])
16 m4_define([gst2_vaapi_lt_current_bias], [4])
17 m4_define([gst4_vaapi_lt_current_bias], [5])
18 m4_define([gst_vaapi_lt_revision],      [0])
19 m4_define([gst_vaapi_lt_age],           [0])
20
21 # glib version number
22 m4_define([glib_version], [2.28])
23
24 # gstreamer version number
25 m4_define([gst_api_version],            [autodetect])
26 m4_define([gst0_version],               [0.10.36])
27 m4_define([gst0_plugins_base_version],  [0.10.31])
28 m4_define([gst0_plugins_bad_version],   [0.10.22])
29 m4_define([gst1_version],               [1.0.0])
30 m4_define([gst1_plugins_base_version],  [1.0.0])
31 m4_define([gst1_plugins_bad_version],   [1.0.0])
32 m4_define([gst12_version],              [1.1.90])
33 m4_define([gst12_plugins_base_version], [1.1.0])
34 m4_define([gst12_plugins_bad_version],  [1.1.0])
35 m4_define([gst14_version],              [1.2.90])
36 m4_define([gst14_plugins_base_version], [1.3.0])
37 m4_define([gst14_plugins_bad_version],  [1.3.0])
38
39 # Wayland minimum version number
40 m4_define([wayland_api_version], [1.0.0])
41
42 # VA-API minimum version number
43 m4_define([va_api_version],     [0.30.4])
44 m4_define([va_api_enc_version], [0.34.0])
45 m4_define([va_api_drm_version], [0.33.0])
46 m4_define([va_api_x11_version], [0.31.0])
47 m4_define([va_api_glx_version], [0.32.0])
48 m4_define([va_api_wld_version], [0.33.0])
49
50 # libva package version number
51 m4_define([libva_enc_package_version], [1.2.0])
52 m4_define([libva_drm_package_version], [1.1.0])
53 m4_define([libva_x11_package_version], [1.0.3])
54 m4_define([libva_glx_package_version], [1.0.9])
55 m4_define([libva_wld_package_version], [1.1.0])
56
57 # gtk-doc version number
58 # XXX: introspection annotations require gtk-doc >= 1.12
59 m4_define([gtkdoc_version], [1.9])
60
61 AC_PREREQ([2.66])
62 AC_INIT([gst_vaapi], [gst_vaapi_version],
63     [gwenole.beauchesne@intel.com],
64     [gstreamer-vaapi])
65
66 AC_CONFIG_HEADERS([config.h])
67 AC_CONFIG_SRCDIR([Makefile.am])
68 AC_CONFIG_MACRO_DIR([m4])
69 AC_CONFIG_AUX_DIR([build-aux])
70
71 AC_CANONICAL_TARGET
72
73 AM_INIT_AUTOMAKE([1.11 tar-ustar no-dist-gzip dist-bzip2])
74
75 TODAY="`LC_ALL=C date +'%a, %d %b %Y %X %z'`"
76 AC_SUBST(TODAY)
77
78 LIBVA_PACKAGE_VERSION=libva_x11_package_version
79 AC_SUBST(LIBVA_PACKAGE_VERSION)
80
81 WAYLAND_API_VERSION=wayland_api_version
82 AC_SUBST(WAYLAND_API_VERSION)
83
84 dnl Use pretty build output with automake >= 1.11
85 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [
86   AM_DEFAULT_VERBOSITY=1
87   AC_SUBST(AM_DEFAULT_VERBOSITY)
88 ])
89
90 dnl Check for tools
91 AC_PROG_CC
92 AM_PROG_CC_C_O
93
94 AC_ARG_VAR([GIT], [Path to git program, if any])
95 AC_PATH_PROG([GIT], [git])
96 AM_CONDITIONAL([HAVE_GIT], [test -n "$GIT"])
97
98 AC_ARG_VAR([YASM], [Path to yasm program, if any])
99 AC_PATH_PROG([YASM], [yasm])
100 if test -z "$YASM" -a "$enable_builtin_libvpx" = "yes"; then
101     AC_MSG_ERROR([yasm is needed to build libvpx sources])
102 fi
103
104 dnl Initialize libtool
105 LT_PREREQ([2.2])
106 LT_INIT
107
108 AC_ARG_ENABLE(builtin_codecparsers,
109     AS_HELP_STRING([--enable-builtin-codecparsers],
110                    [enable built-in codecparsers @<:@default=yes@:>@]),
111     [], [enable_builtin_codecparsers="yes"])
112
113 AC_ARG_ENABLE(builtin_libvpx,
114     AS_HELP_STRING([--enable-builtin-libvpx],
115                    [enable built-in libvpx @<:@default=yes@:>@]),
116     [], [enable_builtin_libvpx="yes"])
117
118 AC_ARG_ENABLE([encoders],
119     AS_HELP_STRING([--enable-encoders],
120                    [enable video encoders @<:@default=yes@:>@]),
121     [], [enable_encoders="yes"])
122
123 AC_ARG_ENABLE(drm,
124     AS_HELP_STRING([--enable-drm],
125                    [enable DRM backend @<:@default=yes@:>@]),
126     [], [enable_drm="yes"])
127
128 AC_ARG_ENABLE(x11,
129     AS_HELP_STRING([--enable-x11],
130                    [enable X11 output @<:@default=yes@:>@]),
131     [], [enable_x11="yes"])
132
133 AC_ARG_ENABLE(glx,
134     AS_HELP_STRING([--enable-glx],
135                    [enable OpenGL/X11 output @<:@default=yes@:>@]),
136     [], [enable_glx="yes"])
137
138 AC_ARG_ENABLE(wayland,
139     AC_HELP_STRING([--enable-wayland],
140                    [enable Wayland output @<:@default=yes@:>@]),
141     [], [enable_wayland="yes"])
142
143 AC_ARG_WITH([gstreamer-api],
144     AC_HELP_STRING([--with-gstreamer-api=VERSION],
145                    [build against the specified GStreamer API version
146                     @<:@default=gst_api_version@:>@]),
147     [GST_API_VERSION="$with_gstreamer_api"], [GST_API_VERSION=gst_api_version])
148
149 dnl Check for basic libraries
150 AC_CHECK_LIB(m, tan)
151
152 dnl Check for Gtk doc
153 GTKDOC_VERSION=gtkdoc_version
154 # gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
155 m4_ifdef([GTK_DOC_CHECK], [
156 GTK_DOC_CHECK([$GTKDOC_VERSION], [--flavour no-tmpl])], [
157 AM_CONDITIONAL([ENABLE_GTK_DOC], [false])])
158 AC_SUBST(GTKDOC_VERSION)
159
160 dnl Check for GLib
161 GLIB_VERSION_REQUIRED=glib_version
162 PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $GLIB_VERSION_REQUIRED])
163 AC_SUBST(GLIB_VERSION_REQUIRED)
164
165 dnl Check to see if dlopen is in default libraries (like Solaris, which
166 dnl has it in libc), or if libdl is needed to get it.
167 AC_CHECK_FUNC([dlopen], [], [
168     AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
169 AC_SUBST([DLOPEN_LIBS])
170
171 dnl ---------------------------------------------------------------------------
172 dnl -- GStreamer                                                             --
173 dnl ---------------------------------------------------------------------------
174
175 dnl If GStreamer API version is to be autodetected, then always try
176 dnl with the latest version first
177 AC_MSG_CHECKING([for GStreamer API version])
178 if test "$GST_API_VERSION" = "autodetect"; then
179     gst_pkg_versions="1.0 0.10"
180 else
181     AS_VERSION_COMPARE([$GST_API_VERSION], [1.0],
182         [gst_pkg_versions="0.10"], [gst_pkg_versions="1.0"],
183         dnl GStreamer 1.2.x APIs don't have their own namespace
184         [gst_pkg_versions="1.0"])
185 fi
186 for gst_pkg_version in ${gst_pkg_versions}; do
187     if $PKG_CONFIG --exists "gstreamer-$gst_pkg_version"; then
188         gst_version=`$PKG_CONFIG --modversion "gstreamer-$gst_pkg_version"`
189         gst_major_version=`echo "$gst_version" | cut -d'.' -f1`
190         gst_minor_version=`echo "$gst_version" | cut -d'.' -f2`
191         GST_API_VERSION="${gst_major_version}.${gst_minor_version}"
192         GST_PKG_VERSION="$gst_pkg_version"
193         break
194     fi
195 done
196 if test -z "$GST_PKG_VERSION"; then
197     AC_MSG_ERROR([version $GST_API_VERSION not found])
198 fi
199 AC_MSG_RESULT([$GST_API_VERSION])
200
201 dnl Versions for GStreamer and plugins-base
202 case $GST_API_VERSION in
203 0.10)
204     GST_VERSION_REQUIRED=gst0_version
205     GST_PLUGINS_BASE_VERSION_REQUIRED=gst0_plugins_base_version
206     GST_PLUGINS_BAD_VERSION_REQUIRED=gst0_plugins_bad_version
207     ;;
208 1.0)
209     GST_VERSION_REQUIRED=gst1_version
210     GST_PLUGINS_BASE_VERSION_REQUIRED=gst1_plugins_base_version
211     GST_PLUGINS_BAD_VERSION_REQUIRED=gst1_plugins_bad_version
212     ;;
213 1.2)
214     GST_VERSION_REQUIRED=gst12_version
215     GST_PLUGINS_BASE_VERSION_REQUIRED=gst12_plugins_base_version
216     GST_PLUGINS_BAD_VERSION_REQUIRED=gst12_plugins_bad_version
217     ;;
218 1.3)
219     GST_VERSION_REQUIRED=gst14_version
220     GST_PLUGINS_BASE_VERSION_REQUIRED=gst14_plugins_base_version
221     GST_PLUGINS_BAD_VERSION_REQUIRED=gst14_plugins_bad_version
222     ;;
223 *)
224     AC_MSG_ERROR([unsupported GStreamer API version $GST_API_VERSION])
225     ;;
226 esac
227 AC_SUBST(GST_API_VERSION)
228 AC_SUBST(GST_VERSION_REQUIRED)
229 AC_SUBST(GST_PLUGINS_BASE_VERSION_REQUIRED)
230 AC_SUBST(GST_PLUGINS_BAD_VERSION_REQUIRED)
231
232 USE_GST_API_0_10="no"
233 USE_GST_API_1_0p="no"
234 USE_GST_API_1_2p="no"
235 AS_VERSION_COMPARE([$GST_API_VERSION], [0.10],
236     [], [USE_GST_API_0_10="yes"], [])
237 AS_VERSION_COMPARE([$GST_API_VERSION], [1.0],
238     [], [USE_GST_API_1_0p="yes"], [USE_GST_API_1_0p="yes"])
239 AS_VERSION_COMPARE([$GST_API_VERSION], [1.2],
240     [], [USE_GST_API_1_2p="yes"], [USE_GST_API_1_2p="yes"])
241 AM_CONDITIONAL([USE_GST_API_0_10], [test "$USE_GST_API_0_10" = "yes"])
242 AM_CONDITIONAL([USE_GST_API_1_0p], [test "$USE_GST_API_1_0p" = "yes"])
243 AM_CONDITIONAL([USE_GST_API_1_2p], [test "$USE_GST_API_1_2p" = "yes"])
244
245 dnl GStreamer 1.2.x APIs don't have their own namespace
246 GST_PKG_VERSION="$GST_API_VERSION"
247 if test "$USE_GST_API_1_2p" = "yes"; then
248     GST_PKG_VERSION="1.0"
249 fi
250 AC_SUBST([GST_PKG_VERSION])
251
252 dnl GStreamer Core
253 PKG_CHECK_MODULES([GST],
254     [gstreamer-$GST_PKG_VERSION >= $GST_VERSION_REQUIRED])
255 PKG_CHECK_MODULES([GST_BASE],
256     [gstreamer-base-$GST_PKG_VERSION >= $GST_VERSION_REQUIRED])
257
258 AC_CACHE_CHECK([for GstBaseSink::query hook], ac_cv_have_gst_base_sink_query, [
259     saved_CPPFLAGS="$CPPFLAGS"
260     CPPFLAGS="$CPPFLAGS $GST_BASE_CFLAGS"
261     saved_LIBS="$LIBS"
262     LIBS="$LIBS $GST_BASE_LIBS"
263     AC_COMPILE_IFELSE(
264         [AC_LANG_PROGRAM(
265             [[#include <gst/base/gstbasesink.h>]],
266             [[GstBaseSinkClass klass; klass.query = NULL;]])],
267         [ac_cv_have_gst_base_sink_query="yes"],
268         [ac_cv_have_gst_base_sink_query="no"]
269     )
270     CPPFLAGS="$saved_CPPFLAGS"
271     LIBS="$saved_LIBS"
272 ])
273 if test "$ac_cv_have_gst_base_sink_query" != "yes"; then
274     AC_MSG_ERROR([GstBaseSink does not contain the 'query' vfunc])
275 fi
276
277 dnl GStreamer -base plugins
278 PKG_CHECK_MODULES([GST_PLUGINS_BASE],
279     [gstreamer-plugins-base-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
280 if test "$GST_API_VERSION" = "0.10"; then
281 PKG_CHECK_MODULES([GST_INTERFACES],
282     [gstreamer-interfaces-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
283 fi
284
285 dnl ... GstVideoOverlayComposition (gstreamer-video)
286 PKG_CHECK_MODULES([GST_VIDEO],
287     [gstreamer-video-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
288
289 AC_CACHE_CHECK([for GstVideoOverlayComposition],
290     ac_cv_have_gst_video_overlay_composition, [
291     saved_CPPFLAGS="$CPPFLAGS"
292     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_VIDEO_CFLAGS"
293     saved_LIBS="$LIBS"
294     LIBS="$LIBS $GST_LIBS $GST_VIDEO_LIBS"
295     AC_COMPILE_IFELSE(
296         [AC_LANG_PROGRAM(
297             [[#include <gst/video/video-overlay-composition.h>]],
298             [[GstVideoOverlayComposition *c;
299               c = gst_video_overlay_composition_new(0);]])],
300         [ac_cv_have_gst_video_overlay_composition="yes"],
301         [ac_cv_have_gst_video_overlay_composition="no"]
302     )
303     CPPFLAGS="$saved_CPPFLAGS"
304     LIBS="$saved_LIBS"
305 ])
306 if test "$ac_cv_have_gst_video_overlay_composition" != "yes"; then
307     AC_MSG_ERROR([GstVideoOverlayComposition is not available])
308 fi
309
310 AC_CACHE_CHECK([... with advanced format flags],
311     ac_cv_have_gst_video_overlay_hwcaps, [
312     saved_CPPFLAGS="$CPPFLAGS"
313     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_VIDEO_CFLAGS"
314     saved_LIBS="$LIBS"
315     LIBS="$LIBS $GST_LIBS $GST_VIDEO_LIBS"
316     AC_COMPILE_IFELSE(
317         [AC_LANG_PROGRAM(
318             [[#include <gst/video/video-overlay-composition.h>]],
319             [[GstVideoOverlayRectangle *rect;
320               const guint w = 64, h = 64;
321               guint flags = (
322                   GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA|
323                   GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA);
324               rect = gst_video_overlay_rectangle_new_argb(NULL, w, h, w * 4,
325                   0, 0, w, h, flags);
326               gst_video_overlay_rectangle_set_global_alpha(rect, 0.5f);]])],
327         [ac_cv_have_gst_video_overlay_hwcaps="yes"],
328         [ac_cv_have_gst_video_overlay_hwcaps="no"]
329     )
330     CPPFLAGS="$saved_CPPFLAGS"
331     LIBS="$saved_LIBS"
332 ])
333 if test "$ac_cv_have_gst_video_overlay_hwcaps" = "yes"; then
334     AC_DEFINE_UNQUOTED([HAVE_GST_VIDEO_OVERLAY_HWCAPS], 1,
335         [Defined to 1 if GstVideoOverlayComposition API supports HW hints.])
336 fi
337
338 dnl GStreamer -bad plugins (deprecated in GStreamer v1.2)
339 if test "$USE_GST_API_1_2p" != "yes"; then
340 PKG_CHECK_MODULES([GST_BASEVIDEO],
341     [gstreamer-basevideo-$GST_PKG_VERSION >= $GST_PLUGINS_BAD_VERSION_REQUIRED])
342 fi
343
344 dnl ... bitstream parsers
345 if test "$enable_builtin_codecparsers" = "yes"; then
346     ac_cv_have_gst_mpeg2_parser="no"
347     ac_cv_have_gst_h264_parser="no"
348     ac_cv_have_gst_jpeg_parser="no"
349     ac_cv_have_gst_vp8_parser="no"
350 else
351 PKG_CHECK_MODULES([GST_CODEC_PARSERS],
352     [gstreamer-codecparsers-$GST_PKG_VERSION >= $GST_PLUGINS_BAD_VERSION_REQUIRED])
353 fi
354
355 dnl ... MPEG-2 parser, with the required extensions
356 AC_CACHE_CHECK([for MPEG-2 parser],
357     ac_cv_have_gst_mpeg2_parser, [
358     saved_CPPFLAGS="$CPPFLAGS"
359     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
360     saved_LIBS="$LIBS"
361     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
362     AC_COMPILE_IFELSE(
363         [AC_LANG_PROGRAM(
364             [[#include <gst/codecparsers/gstmpegvideoparser.h>]],
365             [[GstMpegVideoSequenceHdr seq_hdr;
366               GstMpegVideoSequenceExt seq_ext;
367               GstMpegVideoSequenceDisplayExt seq_dpy;
368               GstMpegVideoSliceHdr slice_hdr;
369               GstMpegVideoPacket packet;
370               gst_mpeg_video_packet_parse_slice_header(&packet, &slice_hdr,
371                   &seq_hdr, NULL);
372               gst_mpeg_video_finalise_mpeg2_sequence_header(&seq_hdr,
373                   &seq_ext, &seq_dpy);]])],
374         [ac_cv_have_gst_mpeg2_parser="yes"],
375         [ac_cv_have_gst_mpeg2_parser="no"]
376     )
377     CPPFLAGS="$saved_CPPFLAGS"
378     LIBS="$saved_LIBS"
379 ])
380 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_MPEG2],
381     [test "$ac_cv_have_gst_mpeg2_parser" != "yes"])
382
383 dnl ... H.264 parser, with the required extensions
384 AC_CACHE_CHECK([for H.264 parser],
385     ac_cv_have_gst_h264_parser, [
386     saved_CPPFLAGS="$CPPFLAGS"
387     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
388     saved_LIBS="$LIBS"
389     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
390     AC_COMPILE_IFELSE(
391         [AC_LANG_PROGRAM(
392             [[#include <gst/codecparsers/gsth264parser.h>]],
393             [[GstH264SliceHdr slice_hdr;
394               GstH264VUIParams vui_params;
395               GstH264Profile profile = GST_H264_PROFILE_HIGH;
396               slice_hdr.n_emulation_prevention_bytes = 0;
397               vui_params.par_n = 0;
398               vui_params.par_d = 0;]])],
399         [ac_cv_have_gst_h264_parser="yes"],
400         [ac_cv_have_gst_h264_parser="no"]
401     )
402     CPPFLAGS="$saved_CPPFLAGS"
403     LIBS="$saved_LIBS"
404 ])
405 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_H264],
406     [test "$ac_cv_have_gst_h264_parser" != "yes"])
407
408 dnl ... JPEG parser, not upstream yet
409 AC_CACHE_CHECK([for JPEG parser],
410     ac_cv_have_gst_jpeg_parser, [
411     saved_CPPFLAGS="$CPPFLAGS"
412     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
413     saved_LIBS="$LIBS"
414     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
415     AC_COMPILE_IFELSE(
416         [AC_LANG_PROGRAM(
417             [[#include <gst/codecparsers/gstjpegparser.h>]],
418             [[GstJpegImage jpeg_image;]])],
419         [ac_cv_have_gst_jpeg_parser="yes"],
420         [ac_cv_have_gst_jpeg_parser="no"]
421     )
422     CPPFLAGS="$saved_CPPFLAGS"
423     LIBS="$saved_LIBS"
424 ])
425 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_JPEG],
426     [test "$ac_cv_have_gst_jpeg_parser" != "yes"])
427
428 dnl ... VP8 parser, not upstream yet
429 if test "$enable_builtin_libvpx" = "yes"; then
430     ac_cv_have_gst_vp8_parser="no"
431 fi
432 AC_CACHE_CHECK([for VP8 parser],
433     ac_cv_have_gst_vp8_parser, [
434     saved_CPPFLAGS="$CPPFLAGS"
435     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
436     saved_LIBS="$LIBS"
437     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
438     AC_COMPILE_IFELSE(
439         [AC_LANG_PROGRAM(
440             [[#include <gst/codecparsers/gstvp8parser.h>]],
441             [[GstVp8FrameHdr frame_hdr;]])],
442         [ac_cv_have_gst_vp8_parser="yes"],
443         [ac_cv_have_gst_vp8_parser="no"]
444     )
445     CPPFLAGS="$saved_CPPFLAGS"
446     LIBS="$saved_LIBS"
447 ])
448 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_VP8],
449     [test "$ac_cv_have_gst_vp8_parser" != "yes"])
450 AM_CONDITIONAL([USE_BUILTIN_LIBVPX], [test "$enable_builtin_libvpx" = "yes"])
451
452 case $GST_API_VERSION in
453 0.10)   lt_bias=gst0_vaapi_lt_current_bias;;
454 1.0)    lt_bias=gst1_vaapi_lt_current_bias;;
455 1.2)    lt_bias=gst2_vaapi_lt_current_bias;;
456 1.3)    lt_bias=gst4_vaapi_lt_current_bias;;
457 esac
458 GST_VAAPI_MAJOR_VERSION=`expr gst_vaapi_lt_current - "$lt_bias"`
459 AC_SUBST(GST_VAAPI_MAJOR_VERSION)
460
461 dnl GST_VAAPI_LT_LDFLAGS:
462 GST_VAAPI_LT_CURRENT="$GST_VAAPI_MAJOR_VERSION"
463 GST_VAAPI_LT_REV=gst_vaapi_lt_revision
464 GST_VAAPI_LT_AGE=gst_vaapi_lt_age
465 GST_VAAPI_LT_VERSION="$GST_VAAPI_LT_CURRENT:$GST_VAAPI_LT_REV:$GST_VAAPI_LT_AGE"
466 GST_VAAPI_LT_LDFLAGS="-version-info $GST_VAAPI_LT_VERSION"
467 AC_SUBST(GST_VAAPI_LT_VERSION)
468 AC_SUBST(GST_VAAPI_LT_LDFLAGS)
469
470 dnl GST_ALL_LDFLAGS:
471 dnl LDFLAGS really should only contain flags, not libs - they get added before
472 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
473 GST_ALL_LDFLAGS="-no-undefined"
474 AC_SUBST(GST_ALL_LDFLAGS)
475
476 dnl GST_PLUGIN_LDFLAGS:
477 dnl this really should only contain flags, not libs - they get added before
478 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
479 GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^([_]*gst_plugin_desc|gst_.*_get_type)\$\$' $GST_ALL_LDFLAGS"
480 AC_SUBST(GST_PLUGIN_LDFLAGS)
481
482 dnl Check for the GStreamer plugins directory
483 AC_ARG_VAR([GST_PLUGIN_PATH], [installation path for gstreamer-vaapi plugin elements for GStreamer 0.10])
484 AC_ARG_VAR([GST_PLUGIN_PATH_1_0], [installation path for gstreamer-vaapi plugin elements for GStreamer 1.0])
485 AC_MSG_CHECKING([for GStreamer plugins directory])
486 case $GST_PKG_VERSION in
487 0.10)   _gst_plugin_path="$GST_PLUGIN_PATH";;
488 1.0)    _gst_plugin_path="$GST_PLUGIN_PATH_1_0";;
489 esac
490 if test -d "$_gst_plugin_path"; then
491     GST_PLUGINS_DIR="$_gst_plugin_path"
492 else
493     GST_PLUGINS_DIR=`$PKG_CONFIG gstreamer-$GST_PKG_VERSION --variable pluginsdir`
494     if test -z "$GST_PLUGINS_DIR"; then
495         GST_PLUGINS_DIR="\$(libdir)/gstreamer-$GST_PKG_VERSION"
496     fi
497 fi
498 AC_MSG_RESULT([$GST_PLUGINS_DIR])
499 plugindir="$GST_PLUGINS_DIR"
500 AC_SUBST(plugindir)
501
502 dnl ---------------------------------------------------------------------------
503 dnl -- Renderers                                                             --
504 dnl ---------------------------------------------------------------------------
505
506 dnl Check for DRM/libudev
507 USE_DRM=0
508 if test "$enable_drm" = "yes"; then
509     PKG_CHECK_MODULES(DRM, [libdrm], [USE_DRM=1], [USE_DRM=0])
510     PKG_CHECK_MODULES(UDEV, [libudev], [:], [USE_DRM=0])
511
512     if test $USE_DRM -eq 1; then
513         saved_CPPFLAGS="$CPPFLAGS"
514         CPPFLAGS="$CPPFLAGS $DRM_CFLAGS"
515         AC_CHECK_HEADERS([drm_fourcc.h], [:], [USE_DRM=0])
516         CPPFLAGS="$saved_CPPFLAGS"
517     fi
518 fi
519
520 dnl Check for X11
521 USE_X11=0
522 if test "$enable_x11" = "yes"; then
523     PKG_CHECK_MODULES(X11, [x11], [USE_X11=1], [USE_X11=0])
524     if test $USE_X11 -eq 1; then
525         saved_CPPFLAGS="$CPPFLAGS"
526         CPPFLAGS="$CPPFLAGS $X11_CFLAGS"
527         AC_CHECK_HEADERS([X11/Xlib.h X11/Xutil.h X11/Xatom.h], [:], [USE_X11=0])
528         CPPFLAGS="$saved_CPPFLAGS"
529     fi
530 fi
531
532 dnl Check for XRandR
533 HAVE_XRANDR=0
534 if test $USE_X11 -eq 1; then
535     HAVE_XRANDR=1
536     PKG_CHECK_MODULES([XRANDR], [xrandr], [:], [HAVE_XRANDR=0])
537     if test $HAVE_XRANDR -eq 1; then
538         saved_CPPFLAGS="$CPPFLAGS"
539         CPPFLAGS="$CPPFLAGS $XRANDR_CFLAGS"
540         AC_CHECK_HEADERS([X11/extensions/Xrandr.h], [:], [HAVE_XRANDR=0])
541         CPPFLAGS="$saved_CPPFLAGS"
542     fi
543 fi
544 if test $HAVE_XRANDR -eq 1; then
545     AC_DEFINE_UNQUOTED(HAVE_XRANDR, 1,
546         [Defined to 1 if the XRandR extension exists.])
547 fi
548
549 dnl Check for XRender
550 HAVE_XRENDER=0
551 if test $USE_X11 -eq 1; then
552     HAVE_XRENDER=1
553     PKG_CHECK_MODULES([XRENDER], [xrender], [:], [HAVE_XRENDER=0])
554     if test $HAVE_XRENDER -eq 1; then
555         saved_CPPFLAGS="$CPPFLAGS"
556         CPPFLAGS="$CPPFLAGS $XRENDER_CFLAGS"
557         AC_CHECK_HEADERS([X11/extensions/Xrender.h], [:], [HAVE_XRENDER=0])
558         CPPFLAGS="$saved_CPPFLAGS"
559     fi
560 fi
561 if test $HAVE_XRENDER -eq 1; then
562     AC_DEFINE_UNQUOTED([HAVE_XRENDER], [1],
563         [Defined to 1 if the XRender extension exists.])
564 fi
565
566 dnl OpenGL
567 enable_opengl="no"
568 if test "$enable_glx" = "yes"; then
569     enable_opengl="yes"
570 fi
571
572 HAVE_GL=0
573 if test "$enable_opengl" = "yes"; then
574     HAVE_GL=1
575     PKG_CHECK_MODULES([GL], [gl], [:], [HAVE_GL=0])
576     saved_CPPFLAGS="$CPPFLAGS"
577     CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
578     AC_CHECK_HEADERS([GL/gl.h GL/glext.h], [:], [HAVE_GL=0], [
579 #ifdef HAVE_GL_GL_H
580 # include <GL/gl.h>
581 #endif
582     ])
583     CPPFLAGS="$saved_CPPFLAGS"
584 fi
585
586 dnl ... GLX
587 USE_GLX=0
588 if test "$enable_glx" = "yes" -a $HAVE_GL -eq 1 -a $USE_X11 -eq 1; then
589     USE_GLX=1
590     saved_CPPFLAGS="$CPPFLAGS"
591     saved_LIBS="$LIBS"
592     CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
593     LIBS="$LIBS $GL_LIBS"
594     AC_CHECK_HEADERS([GL/glx.h], [:], [USE_GLX=0], [
595 #ifdef HAVE_GL_GL_H
596 # include <GL/gl.h>
597 #endif
598     ])
599     AC_CHECK_LIB([GL], [glXCreateContext], [:], [USE_GLX=0])
600     CPPFLAGS="$saved_CPPFLAGS"
601     LIBS="$saved_LIBS"
602 fi
603
604 dnl Check for Wayland
605 USE_WAYLAND=0
606 if test "$enable_wayland" = "yes"; then
607     PKG_CHECK_MODULES(WAYLAND, [wayland-client >= wayland_api_version],
608         [USE_WAYLAND=1], [USE_WAYLAND=0])
609
610     if test $USE_WAYLAND -eq 1; then
611         saved_CPPFLAGS="$CPPFLAGS"
612         CPPFLAGS="$CPPFLAGS $WAYLAND_CFLAGS"
613         AC_CHECK_HEADERS([wayland-client.h], [:], [USE_WAYLAND=0])
614         CPPFLAGS="$saved_CPPFLAGS"
615     fi
616 fi
617
618 dnl ---------------------------------------------------------------------------
619 dnl -- VA-API                                                                --
620 dnl ---------------------------------------------------------------------------
621
622 dnl Core API
623 LIBVA_PKGNAME="libva"
624 PKG_CHECK_MODULES(LIBVA, [$LIBVA_PKGNAME >= va_api_version])
625 AC_SUBST(LIBVA_PKGNAME)
626
627 VA_VERSION=`$PKG_CONFIG --modversion libva`
628 VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1`
629 VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2`
630 VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3`
631 VA_VERSION_STR="$VA_VERSION"
632
633 dnl VA/DRM API
634 HAVE_VA_DRM=0
635 if test $USE_DRM -eq 1; then
636     PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm >= va_api_drm_version],
637         [HAVE_VA_DRM=1], [USE_DRM=0])
638
639     if test $HAVE_VA_DRM -eq 1; then
640         saved_CPPFLAGS="$CPPFLAGS"
641         CPPFLAGS="$LIBVA_DRM_CFLAGS"
642         AC_CHECK_HEADERS([va/va_drm.h], [:], [HAVE_VA_DRM=0 USE_DRM=0])
643         CPPFLAGS="$saved_CPPFLAGS"
644     fi
645 fi
646
647 dnl VA/X11 API
648 HAVE_VA_X11=0
649 LIBVA_X11_PKGNAME="libva-x11"
650 if test $USE_X11 -eq 1; then
651     PKG_CHECK_MODULES(LIBVA_X11, [$LIBVA_X11_PKGNAME >= va_api_x11_version],
652         [HAVE_VA_X11=1], [USE_X11=0])
653 fi
654 AC_SUBST(LIBVA_X11_PKGNAME)
655
656 dnl VA/GLX API
657 HAVE_VA_GLX=0
658 LIBVA_GLX_PKGNAME="libva-glx"
659 if test $USE_GLX -eq 1; then
660     PKG_CHECK_MODULES(LIBVA_GLX, [$LIBVA_GLX_PKGNAME >= va_api_glx_version],
661         [HAVE_VA_GLX=1], [LIBVA_GLX_PKGNAME="$LIBVA_X11_PKGNAME"])
662
663     if test $HAVE_VA_GLX -eq 1; then
664         saved_CPPFLAGS="$CPPFLAGS"
665         CPPFLAGS="$LIBVA_GLX_CFLAGS"
666         AC_CHECK_HEADERS([va/va_glx.h], [:], [HAVE_VA_GLX=0])
667         CPPFLAGS="$saved_CPPFLAGS"
668     fi
669 fi
670 AC_SUBST(LIBVA_GLX_PKGNAME)
671
672 dnl Check for va_dec_jpeg.h header
673 saved_CPPFLAGS="$CPPFLAGS"
674 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
675 AC_CHECK_HEADERS([va/va_dec_jpeg.h], [], [], [#include <va/va.h>])
676 CPPFLAGS="$saved_CPPFLAGS"
677
678 dnl Check for JPEG decoding API (0.32.1+)
679 USE_JPEG_DECODER=0
680 AC_CACHE_CHECK([for JPEG decoding API],
681     ac_cv_have_jpeg_decoding_api, [
682     saved_CPPFLAGS="$CPPFLAGS"
683     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
684     saved_LIBS="$LIBS"
685     LIBS="$LIBS $LIBVA_LIBS"
686     AC_COMPILE_IFELSE(
687         [AC_LANG_PROGRAM(
688             [[#include <va/va.h>
689               #ifdef HAVE_VA_VA_DEC_JPEG_H
690               #include <va/va_dec_jpeg.h>
691               #endif
692             ]],
693             [[VAPictureParameterBufferJPEGBaseline pic_param;
694               VASliceParameterBufferJPEGBaseline slice_param;
695               VAHuffmanTableBufferJPEGBaseline huffman_table;
696               VAIQMatrixBufferJPEGBaseline iq_matrix;]])],
697         [ac_cv_have_jpeg_decoding_api="yes" USE_JPEG_DECODER=1],
698         [ac_cv_have_jpeg_decoding_api="no"]
699     )
700     CPPFLAGS="$saved_CPPFLAGS"
701     LIBS="$saved_LIBS"
702 ])
703
704 dnl Check for va_dec_vp8.h header
705 saved_CPPFLAGS="$CPPFLAGS"
706 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
707 AC_CHECK_HEADERS([va/va_dec_vp8.h], [], [], [#include <va/va.h>])
708 CPPFLAGS="$saved_CPPFLAGS"
709
710 dnl Check for VP8 decoding API (0.34+)
711 USE_VP8_DECODER=0
712 AC_CACHE_CHECK([for VP8 decoding API],
713     ac_cv_have_vp8_decoding_api, [
714     saved_CPPFLAGS="$CPPFLAGS"
715     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
716     saved_LIBS="$LIBS"
717     LIBS="$LIBS $LIBVA_LIBS"
718     AC_COMPILE_IFELSE(
719         [AC_LANG_PROGRAM(
720             [[#include <va/va.h>
721               #ifdef HAVE_VA_VA_DEC_VP8_H
722               #include <va/va_dec_vp8.h>
723               #endif
724             ]],
725             [[VAPictureParameterBufferVP8 pic_param;
726               VASliceParameterBufferVP8 slice_param;
727               VAProbabilityDataBufferVP8 prob_data;
728               VAIQMatrixBufferVP8 iq_matrix;
729               slice_param.slice_data_offset = 0;
730               slice_param.slice_data_flag = 0;]])],
731         [ac_cv_have_vp8_decoding_api="yes" USE_VP8_DECODER=1],
732         [ac_cv_have_vp8_decoding_api="no"]
733     )
734     CPPFLAGS="$saved_CPPFLAGS"
735     LIBS="$saved_LIBS"
736 ])
737
738
739 dnl Check for vpp (video post-processing) support
740 USE_VA_VPP=0
741 AC_CACHE_CHECK([for video post-postprocessing API],
742     ac_cv_have_va_vpp_api, [
743     saved_CPPFLAGS="$CPPFLAGS"
744     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
745     saved_LIBS="$LIBS"
746     LIBS="$LIBS $LIBVA_LIBS"
747     AC_COMPILE_IFELSE(
748         [AC_LANG_PROGRAM(
749             [[#include <va/va.h>
750               #include <va/va_vpp.h>]],
751             [[VADisplay va_dpy;
752               VAContextID vpp_ctx;
753               VAProcFilterType filters[VAProcFilterCount];
754               unsigned int num_filters = VAProcFilterCount;
755               vaQueryVideoProcFilters(va_dpy, vpp_ctx, filters, &num_filters);
756               ]])],
757         [ac_cv_have_va_vpp_api="yes" USE_VA_VPP=1],
758         [ac_cv_have_va_vpp_api="no"]
759     )
760     CPPFLAGS="$saved_CPPFLAGS"
761     LIBS="$saved_LIBS"
762 ])
763
764 dnl Check for encoding support
765 USE_ENCODERS=0
766 if test "$enable_encoders" = "yes"; then
767     PKG_CHECK_MODULES([LIBVA], [libva >= va_api_enc_version],
768         [HAVE_VA_ENC=1], [HAVE_VA_ENC=0])
769
770     if test $HAVE_VA_ENC -eq 1; then
771         saved_CPPFLAGS="$CPPFLAGS"
772         CPPFLAGS="$LIBVA_CFLAGS"
773         AC_CHECK_HEADERS([va/va_enc_mpeg2.h va/va_enc_h264.h],
774             [USE_ENCODERS=1], [HAVE_VA_ENC=0 USE_ENCODERS=0],
775             [#include <va/va.h>
776             ])
777         CPPFLAGS="$saved_CPPFLAGS"
778     fi
779 fi
780
781 dnl VA/Wayland API
782 if test "$enable_wayland" = "yes"; then
783     PKG_CHECK_MODULES([LIBVA_WAYLAND], [libva-wayland >= va_api_wld_version],
784         [:], [USE_WAYLAND=0])
785 fi
786
787 dnl ---------------------------------------------------------------------------
788 dnl -- Generate files and summary                                            --
789 dnl ---------------------------------------------------------------------------
790
791 case ":$USE_X11:$USE_GLX:$USE_WAYLAND:$USE_DRM:" in
792 *:1:*)
793     ;;
794 *)
795     AC_MSG_ERROR([No renderer is enabled])
796     ;;
797 esac
798
799 AC_DEFINE_UNQUOTED([USE_ENCODERS], $USE_ENCODERS,
800     [Defined to 1 if video encoders are used])
801 AM_CONDITIONAL([USE_ENCODERS], [test $USE_ENCODERS -eq 1])
802
803 AC_DEFINE_UNQUOTED(USE_VA_VPP, $USE_VA_VPP,
804     [Defined to 1 if video post-processing is used])
805 AM_CONDITIONAL(USE_VA_VPP, test $USE_VA_VPP -eq 1)
806
807 AC_DEFINE_UNQUOTED(USE_JPEG_DECODER, $USE_JPEG_DECODER,
808     [Defined to 1 if JPEG decoder is used])
809 AM_CONDITIONAL(USE_JPEG_DECODER, test $USE_JPEG_DECODER -eq 1)
810
811 AC_DEFINE_UNQUOTED(USE_VP8_DECODER, $USE_VP8_DECODER,
812     [Defined to 1 if VP8 decoder is used])
813 AM_CONDITIONAL(USE_VP8_DECODER, test $USE_VP8_DECODER -eq 1)
814
815 AC_DEFINE_UNQUOTED(USE_DRM, $USE_DRM,
816     [Defined to 1 if DRM is enabled])
817 AM_CONDITIONAL(USE_DRM, test $USE_DRM -eq 1)
818
819 AC_DEFINE_UNQUOTED(USE_X11, $USE_X11,
820     [Defined to 1 if X11 is enabled])
821 AM_CONDITIONAL(USE_X11, test $USE_X11 -eq 1)
822
823 AC_DEFINE_UNQUOTED(USE_GLX, $USE_GLX,
824     [Defined to 1 if GLX is enabled])
825 AM_CONDITIONAL(USE_GLX, test $USE_GLX -eq 1)
826
827 AC_DEFINE_UNQUOTED(USE_WAYLAND, $USE_WAYLAND,
828     [Defined to 1 if WAYLAND is enabled])
829 AM_CONDITIONAL(USE_WAYLAND, test $USE_WAYLAND -eq 1)
830
831 pkgconfigdir=${libdir}/pkgconfig
832 AC_SUBST(pkgconfigdir)
833
834 AC_CONFIG_FILES([
835     Makefile
836     debian.upstream/Makefile
837     debian.upstream/changelog
838     debian.upstream/control
839     debian.upstream/gstreamer$GST_API_VERSION-vaapi-doc.install:\
840 debian.upstream/gstreamer-vaapi-doc.install.in
841     debian.upstream/gstreamer$GST_API_VERSION-vaapi.install:\
842 debian.upstream/gstreamer-vaapi.install.in
843     debian.upstream/libgstvaapi$GST_API_VERSION-dev.install:\
844 debian.upstream/libgstvaapi-dev.install.in
845     debian.upstream/libgstvaapi$GST_VAAPI_MAJOR_VERSION.install:\
846 debian.upstream/libgstvaapi.install.in
847     debian.upstream/libgstvaapi-drm-$GST_VAAPI_MAJOR_VERSION.install:\
848 debian.upstream/libgstvaapi-drm.install.in
849     debian.upstream/libgstvaapi-glx-$GST_VAAPI_MAJOR_VERSION.install:\
850 debian.upstream/libgstvaapi-glx.install.in
851     debian.upstream/libgstvaapi-wayland-$GST_VAAPI_MAJOR_VERSION.install:\
852 debian.upstream/libgstvaapi-wayland.install.in
853     debian.upstream/libgstvaapi-x11-$GST_VAAPI_MAJOR_VERSION.install:\
854 debian.upstream/libgstvaapi-x11.install.in
855     docs/Makefile
856     docs/reference/Makefile
857     docs/reference/libs/Makefile
858     docs/reference/libs/libs-docs.xml
859     docs/reference/plugins/Makefile
860     docs/reference/plugins/plugins-docs.xml
861     ext/Makefile
862     ext/libvpx/Makefile
863     gst-libs/Makefile
864     gst-libs/gst/Makefile
865     gst-libs/gst/base/Makefile
866     gst-libs/gst/codecparsers/Makefile
867     gst-libs/gst/vaapi/Makefile
868     gst-libs/gst/video/Makefile
869     gst/Makefile
870     gst/vaapi/Makefile
871     pkgconfig/Makefile
872     pkgconfig/gstreamer-vaapi-$GST_PKG_VERSION.pc:\
873 pkgconfig/gstreamer-vaapi.pc.in
874     pkgconfig/gstreamer-vaapi-drm-$GST_PKG_VERSION.pc:\
875 pkgconfig/gstreamer-vaapi-drm.pc.in
876     pkgconfig/gstreamer-vaapi-glx-$GST_PKG_VERSION.pc:\
877 pkgconfig/gstreamer-vaapi-glx.pc.in
878     pkgconfig/gstreamer-vaapi-wayland-$GST_PKG_VERSION.pc:\
879 pkgconfig/gstreamer-vaapi-wayland.pc.in
880     pkgconfig/gstreamer-vaapi-x11-$GST_PKG_VERSION.pc:\
881 pkgconfig/gstreamer-vaapi-x11.pc.in
882     tests/Makefile
883 ])
884 AC_OUTPUT
885
886 dnl Print summary
887 yesno() {
888     test $1 -eq 1 && echo yes || echo no
889 }
890
891 VIDEO_OUTPUTS=""
892 AS_IF([test $USE_DRM -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS drm"])
893 AS_IF([test $USE_X11 -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS x11"])
894 AS_IF([test $USE_GLX -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS glx"])
895 AS_IF([test $USE_WAYLAND -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS wayland"])
896
897 echo
898 echo $PACKAGE configuration summary:
899 echo
900 echo GStreamer API version ............ : $GST_API_VERSION
901 echo VA-API version ................... : $VA_VERSION_STR
902 echo Video encoding ................... : $(yesno $USE_ENCODERS)
903 echo Video outputs .................... : $VIDEO_OUTPUTS
904 echo