Release 1.1.1
[platform/upstream/gst-libav.git] / configure.ac
1 AC_PREREQ(2.62)
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, cvs and prerelease does Werror too
6 AC_INIT(GStreamer libav, 1.1.1,
7     http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
8     gst-libav)
9
10 AG_GST_INIT
11
12 dnl initialize automake
13 AM_INIT_AUTOMAKE([-Wno-portability 1.11 no-dist-gzip dist-xz tar-ustar])
14
15 dnl define PACKAGE_VERSION_* variables
16 AS_VERSION
17
18 dnl check if this is a release version
19 AS_NANO(GST_GIT="no", GST_GIT="yes")
20
21 dnl can autoconf find the source ?
22 AC_CONFIG_SRCDIR([ext/libav/gstav.c])
23
24 dnl define the output header for config
25 AC_CONFIG_HEADERS([config.h])
26
27 dnl AM_MAINTAINER_MODE only provides the option to configure to enable it
28 AM_MAINTAINER_MODE([enable])
29
30 dnl sets host_* variables
31 AC_CANONICAL_HOST
32
33 dnl use pretty build output with automake >= 1.11
34 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],
35   [AM_DEFAULT_VERBOSITY=1
36    AC_SUBST(AM_DEFAULT_VERBOSITY)])
37
38 dnl our libraries and install dirs use major.minor as a version
39 GST_API_VERSION=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR
40 dnl we override it here if we need to for the release candidate of new series
41 GST_API_VERSION=1.0
42 AC_SUBST(GST_API_VERSION)
43
44 AG_GST_LIBTOOL_PREPARE
45 AS_LIBTOOL(GST, 101, 0, 101)
46
47 dnl *** required versions of GStreamer stuff ***
48 GST_REQ=1.1.1
49 GST_PBREQ=1.1.1
50
51 ORC_REQ=0.4.16
52 ORC_CHECK([$ORC_REQ])
53
54 dnl *** autotools stuff ****
55
56 dnl allow for different autotools
57 AS_AUTOTOOLS_ALTERNATE
58
59 dnl Add parameters for aclocal
60 AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4")
61
62 dnl *** check for arguments to configure ***
63
64 AG_GST_ARG_DISABLE_FATAL_WARNINGS
65
66 AG_GST_ARG_WITH_PKG_CONFIG_PATH
67 AG_GST_ARG_WITH_PACKAGE_NAME
68 AG_GST_ARG_WITH_PACKAGE_ORIGIN
69 AG_GST_ARG_VALGRIND
70 AG_GST_ARG_GCOV
71
72 dnl *** checks for platform ***
73
74 dnl * hardware/architecture *
75
76 dnl common/m4/gst-arch.m4
77 dnl check CPU type
78 AG_GST_ARCH
79
80 dnl *** checks for programs ***
81
82 dnl find a compiler
83 AC_PROG_CC
84 AC_PROG_CC_STDC
85
86 dnl check if the compiler supports '-c' and '-o' options
87 AM_PROG_CC_C_O
88
89 AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
90 AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
91
92 dnl check for documentation tools
93 AG_GST_DOCBOOK_CHECK
94 GTK_DOC_CHECK([1.12])
95 AS_PATH_PYTHON([2.1])
96 AG_GST_PLUGIN_DOCS([1.3],[2.1])
97
98 dnl *** checks for libraries ***
99
100 dnl check for libm, for sin()
101 LT_LIB_M
102 AC_SUBST(LIBM)
103
104 dnl *** checks for header files ***
105
106 dnl check if we have ANSI C header files
107 AC_HEADER_STDC
108
109 dnl *** checks for types/defines ***
110
111 dnl *** checks for structures ***
112
113 dnl *** checks for compiler characteristics ***
114
115 dnl *** checks for library functions ***
116
117 dnl *** checks for dependancy libraries ***
118
119 dnl checks for gstreamer
120 dnl uninstalled is selected preferentially -- see pkg-config(1)
121 AG_GST_CHECK_GST($GST_API_VERSION, [$GST_REQ])
122 AG_GST_CHECK_GST_BASE($GST_API_VERSION, [$GST_REQ])
123 AG_GST_CHECK_GST_PLUGINS_BASE($GST_API_VERSION, [$GST_PBREQ])
124 AG_GST_CHECK_GST_CHECK($GST_API_VERSION, [$GST_REQ], no)
125 AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
126
127 AC_MSG_NOTICE(Using GStreamer Core Plugins in $GST_PLUGINS_DIR)
128 AC_MSG_NOTICE(Using GStreamer Base Plugins in $GSTPB_PLUGINS_DIR)
129
130 dnl *** set variables based on configure arguments ***
131
132 dnl set location of plugin directory
133 AG_GST_SET_PLUGINDIR
134
135 dnl build static plugins or not
136 AC_MSG_CHECKING([whether to build static plugins or not])
137 AC_ARG_ENABLE(
138   static-plugins,
139   AC_HELP_STRING(
140     [--enable-static-plugins],
141     [build static plugins @<:@default=no@:>@]),
142   [AS_CASE(
143     [$enableval], [no], [], [yes], [],
144     [AC_MSG_ERROR([bad value "$enableval" for --enable-static-plugins])])],
145   [enable_static_plugins=no])
146 AC_MSG_RESULT([$enable_static_plugins])
147 if test "x$enable_static_plugins" = xyes; then
148   AC_DEFINE(GST_PLUGIN_BUILD_STATIC, 1,
149     [Define if static plugins should be built])
150   GST_PLUGIN_LIBTOOLFLAGS=""
151 else
152   GST_PLUGIN_LIBTOOLFLAGS="--tag=disable-static"
153 fi
154 AC_SUBST(GST_PLUGIN_LIBTOOLFLAGS)
155 AM_CONDITIONAL(GST_PLUGIN_BUILD_STATIC, test "x$enable_static_plugins" = "xyes")
156
157 dnl define an ERROR_CFLAGS Makefile variable
158 AG_GST_SET_ERROR_CFLAGS($FATAL_WARNINGS, [
159     -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
160     -Wwrite-strings -Wformat-nonliteral -Wformat-security -Wold-style-definition
161     -Winit-self -Wmissing-include-dirs -Waddress
162     -Waggregate-return -Wno-multichar -Wnested-externs ])
163
164 dnl define correct level for debugging messages
165 AG_GST_SET_LEVEL_DEFAULT($GST_GIT)
166
167 dnl *** finalize CFLAGS, LDFLAGS, LIBS ***
168
169 dnl Overview:
170 dnl GST_OPTION_CFLAGS:  common flags for profiling, debugging, errors, ...
171 dnl GST_*:              flags shared by built objects to link against GStreamer
172 dnl GST_ALL_LDFLAGS:    linker flags shared by all
173 dnl GST_LIB_LDFLAGS:    additional linker flags for all libaries
174 dnl GST_LT_LDFLAGS:     library versioning of our libraries
175 dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins
176
177 dnl GST_OPTION_CFLAGS
178 if test "x$USE_DEBUG" = xyes; then
179    PROFILE_CFLAGS="-g"
180 fi
181 AC_SUBST(PROFILE_CFLAGS)
182
183 if test "x$GST_GIT" = "xyes"; then
184   DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED"
185 else
186   DEPRECATED_CFLAGS=""
187 fi
188 AC_SUBST(DEPRECATED_CFLAGS)
189
190 dnl every flag in GST_OPTION_CFLAGS can be overridden at make time
191 GST_OPTION_CFLAGS="\$(WARNING_CFLAGS) \$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
192
193 AC_SUBST(GST_OPTION_CFLAGS)
194
195 dnl FIXME: do we want to rename to GST_ALL_* ?
196 dnl prefer internal headers to already installed ones
197 dnl also add builddir include for enumtypes and marshal
198 dnl add GST_OPTION_CFLAGS, but overridable
199 GST_CFLAGS="$GST_CFLAGS"
200 GST_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
201 AC_SUBST(GST_CFLAGS)
202 AC_SUBST(GST_LIBS)
203
204 GST_ALL_LDFLAGS="-no-undefined"
205 AC_SUBST(GST_ALL_LDFLAGS)
206
207 dnl this really should only contain flags, not libs - they get added before
208 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
209 GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_.*' $GST_ALL_LDFLAGS"
210 AC_SUBST(GST_PLUGIN_LDFLAGS)
211
212 dnl Add MacOSX specific flags
213 AC_CANONICAL_HOST
214 case $host_os in
215      darwin*)
216         DARWIN_LDFLAGS="-Wl,-read_only_relocs,suppress"
217         ;;
218      *)
219         DARWIN_LDFLAGS=""
220         ;;
221 esac
222 AC_SUBST(DARWIN_LDFLAGS)
223
224 dnl *** Check for bz2
225 AG_GST_CHECK_LIBHEADER(BZ2, bz2, BZ2_bzlibVersion, , bzlib.h, have_bz2=yes, have_bz2=no)
226 AM_CONDITIONAL(HAVE_BZ2, test "x$have_bz2" = "xyes")
227 if test "x$have_bz2" = "xno"; then
228   AC_WARN([libbz2 not found, matroska demuxer will not be able to read bz2 tracks])
229 fi
230
231 AC_ARG_ENABLE(lgpl,
232               [AC_HELP_STRING([--enable-lgpl], [build a LGPL licensed gst-libav])])
233 AM_CONDITIONAL(GST_LIBAV_ENABLE_LGPL, test "x$enable_lgpl" = "xyes")
234 if test "x$enable_lgpl" = "xyes"; then
235   AC_DEFINE([GST_LIBAV_ENABLE_LGPL], [], [Defined if building a LGPL-only version of gst-libav])
236 fi
237
238 dnl *** configure external libs ***
239
240 HAVE_LIBAV_UNINSTALLED=1
241
242 AC_ARG_WITH(system-libav,
243             [AC_HELP_STRING([--with-system-libav], [use system Libav libraries])])
244
245 if test "x$with_system_libav" = "xyes"; then
246   PKG_CHECK_MODULES(LIBAV, libavformat libavcodec libavutil) 
247   PKG_CHECK_MODULES(SWSCALE, libswscale libavutil)
248   saved_CPPFLAGS="$CPPFLAGS"
249   CPPFLAGS="$CPPFLAGS $LIBAV_CFLAGS"
250   AC_CHECK_HEADERS([avi.h])
251   CPPFLAGS="$saved_CPPFLAGS"
252   AC_DEFINE([LIBAV_SOURCE], ["system install"], [Describes where the Libav libraries come from.])
253   HAVE_LIBAV_UNINSTALLED=0
254   AC_MSG_NOTICE([Using system-installed libav code])
255   AC_MSG_WARN([
256   ======================================================================
257    WARNING: you have chosen to build gst-libav against a random
258    external version of Libav instead of building it against the tested
259    internal Libav snapshot that is included with gst-libav.
260    
261    This is a very bad idea.  So bad in fact that words cannot express
262    just how bad it is.  Suffice to say that it is BAD.
263    
264    The GStreamer developers cannot and will not support a gst-libav
265    built this way.  Any bug reports that indicate there is an external
266    version of Libav involved will be closed immediately without further
267    investigation.
268    
269    The reason such a setup can't be supported is that the Libav API
270    and ABI is in constant flux, yet there aren't any official releases
271    of the Libav library to develop against.  This makes it impossible
272    to guarantee that gst-libav will work reliably, or even compile,
273    with a randomly picked version Libav.  Even if gst-libav compiles
274    and superficially appears to work fine against your chosen external
275    Libav version, that might just not be the case on other systems, or
276    even the same system at a later time, or when using decoders,
277    encoders, demuxers or muxers that have not been tested.
278    
279    Please do not create or distribute binary packages of gst-Libav
280    that link against an external libav. Thank you!
281   ======================================================================
282   ])
283
284   dnl No, this is not too extreme, we want people to see and read the above
285   sleep 15
286 else
287
288   AC_MSG_NOTICE([Using local Libav snapshot])
289   
290   dnl libgstlibav.la: include dirs
291   LIBAV_CFLAGS="-I \$(top_srcdir)/gst-libs/ext/libav \
292                 -I \$(top_builddir)/gst-libs/ext/libav \
293                  -Wno-deprecated-declarations"
294
295   LIBAV_DEPS="\$(top_builddir)/gst-libs/ext/libav/libavformat/libavformat.a \
296               \$(top_builddir)/gst-libs/ext/libav/libavcodec/libavcodec.a \
297               \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
298   if test "x$enable_static_plugins" = xyes; then
299       dnl with static linking we can't use the .a archive directly as they would
300       dnl be included in the final libgstlibav.a as a file and won't be usable.
301       dnl libav*.a must be copied to the final destination too
302       LIBAV_LIBS="-lavformat -lavcodec -lavutil"
303   else
304       dnl libgstlibav.la: libs to statically link to
305       LIBAV_LIBS="$LIBAV_DEPS"
306   fi
307
308   dnl
309   SWSCALE_CFLAGS="-I \$(top_srcdir)/gst-libs/ext/libav \
310                   -I \$(top_builddir)/gst-libs/ext/libav \
311                   -Wno-deprecated-declarations"
312
313   SWSCALE_DEPS="\$(top_builddir)/gst-libs/ext/libav/libswscale/libswscale.a \
314                 \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
315   if test "x$enable_static_plugins" = xyes; then
316       dnl with static linking we can't use the .a archive directly as they would
317       dnl be included in the final libgstswscale.a as a file and won't be usable.
318       dnl libav*.a must be copied to the final destination too
319       SWSCALE_LIBS="-lswscale -lavutil"
320   else
321       dnl libgstswscale.la: libs to statically link to
322       SWSCALE_LIBS="$SWSCALE_DEPS"
323   fi
324
325   LIBAV_SUBDIRS=gst-libs
326   AC_DEFINE(HAVE_AVI_H)
327   AC_DEFINE([LIBAV_SOURCE], ["local snapshot"], [Describes where the Libav libraries come from.])
328
329   AC_ARG_WITH(libav-extra-configure, 
330       AC_HELP_STRING([--with-libav-extra-configure="xxx"],
331       [extra configure options for internal libav ./configure script]),,
332       with_libav=no)
333
334   # basic arguments
335   emblibav_configure_args="--prefix=$prefix"
336
337   # Enable pic and static so that we get .a files, but with PIC code.
338   emblibav_configure_args="$emblibav_configure_args --disable-avserver --disable-avplay\
339         --disable-avconv --disable-avprobe --enable-static --enable-pic \
340         --disable-encoder=flac --disable-decoder=cavs --disable-protocols --disable-devices\
341         --disable-network --disable-hwaccels --disable-filters --disable-doc\
342         --enable-optimizations"
343
344   if test "x$enable_lgpl" != "xyes"; then
345     emblibav_configure_args="$emblibav_configure_args --enable-gpl"
346   fi
347
348   # if we are cross-compiling, tell libav so
349   case $host in
350       *android*)
351         target_os=linux
352       ;;
353       *)
354         target_os=`echo $host_os | sed 's/-gnu//'`
355       ;;
356   esac
357
358   if test "x$cross_compiling" = xyes; then
359     emblibav_configure_args="$emblibav_configure_args --enable-cross-compile \
360         --target-os=$target_os --arch=$host_cpu --cross-prefix=$host_alias-"
361   fi
362
363   case $host_os in
364     # Unfortunately, in Mac OS 10.5 the current rev of libav builds
365     # some non-PIC code into the .a file. See
366     # http://trac.macosforge.org/projects/macports/ticket/13725 for more
367     # info.
368     darwin*) 
369       emblibav_configure_args="$emblibav_configure_args --disable-mmx --disable-altivec"
370       ;;
371     mingw32*)
372       emblibav_configure_args="$emblibav_configure_args --enable-memalign-hack"
373       WIN32_LIBS="-lws2_32"
374       ;;
375     *)
376       WIN32_LIBS=
377       ;;
378   esac
379
380   if test x"$AR" != x; then
381     emblibav_configure_args="$emblibav_configure_args --ar=\\\"\\\$AR\\\""
382   fi
383
384   if test x"$AS" != x; then
385     emblibav_configure_args="$emblibav_configure_args --as=\\\"\\\$CC\\\""
386   fi
387
388   if test x"$CC" != x; then
389     emblibav_configure_args="$emblibav_configure_args --cc=\\\"\\\$CC\\\""
390   fi
391
392   if test x"$LD" != x; then
393     emblibav_configure_args="$emblibav_configure_args --ld=\\\"\\\$CC\\\""
394   fi
395
396   if test x"$NM" != x; then
397     emblibav_configure_args="$emblibav_configure_args --nm=\\\"\\\$NM\\\""
398   fi
399
400   dnl checks for extra enable/disable flags
401   LIBAV_OPTS=`cd $srcdir/gst-libs/ext/libav && ./configure --help`
402   # Let's check if we can disable the building of the libav binary
403   can_disable=`echo "$LIBAV_OPTS" | grep 'disable-ffmpeg'`
404   if test "$can_disable" != ""; then
405     emblibav_configure_args="$emblibav_configure_args --disable-ffmpeg"
406   fi
407   dnl check if libswscale needs enabling explicitly
408   can_enable=`echo "$LIBAV_OPTS" | grep 'enable-swscale'`
409   if test "$can_enable" != ""; then
410     emblibav_configure_args="$emblibav_configure_args --enable-swscale"
411   fi
412
413   # append extra configure options to emblibav_configure_args if needed
414   if test "x$with_libav_extra_configure" != "xno"; then
415     emblibav_configure_args="$emblibav_configure_args $with_libav_extra_configure"
416   fi
417
418   AC_SUBST(LIBAV_CO_DIR)
419   AC_SUBST(LIBAV_SVN)
420   AC_SUBST(LIBAV_REVISION)
421   AC_SUBST(LIBAV_EXTERNALS_REVISION)
422   AC_CONFIG_COMMANDS([configure-embedded-libav],
423     [echo "Configuring included Libav instance with args $emblibav_configure_args"
424      origdir=`pwd`
425      dnl Don't put path on the configure call when not needed, as FFmpeg's configure relies on it
426      dnl to detect out-of-tree builds
427      if test -z "$srcdir" -o "$srcdir" = .; then
428        confcmd=./configure
429      else
430        confcmd="$ac_abs_top_srcdir"/gst-libs/ext/libav/configure
431      fi
432
433      AS_MKDIR_P(["$ac_top_build_prefix"gst-libs/ext/libav])
434      cd "$ac_top_build_prefix"gst-libs/ext/libav &&
435          eval "$confcmd $emblibav_configure_args" ||
436          AC_MSG_ERROR([Failed to configure embedded Libav tree])
437      cd "$origdir"
438     ],
439     [emblibav_configure_args="$emblibav_configure_args"])
440   AC_MSG_NOTICE([Using included Libav code])
441 fi
442
443 AC_SUBST(LIBAV_CFLAGS)
444 AC_SUBST(LIBAV_DEPS)
445 AC_SUBST(LIBAV_LIBS)
446 AC_SUBST(LIBAV_SUBDIRS)
447 AC_SUBST(SWSCALE_CFLAGS)
448 AC_SUBST(SWSCALE_DEPS)
449 AC_SUBST(SWSCALE_LIBS)
450 AC_SUBST(WIN32_LIBS)
451  
452 if test x$HAVE_LIBAV_UNINSTALLED = x1; then
453   AC_DEFINE(HAVE_LIBAV_UNINSTALLED, [], [Defined if building against uninstalled Libav source])
454 fi
455 AM_CONDITIONAL(HAVE_LIBAV_UNINSTALLED, test x$HAVE_LIBAV_UNINSTALLED = x1)
456
457 AC_CONFIG_FILES(
458 Makefile
459 common/Makefile
460 common/m4/Makefile
461 gst-libav.spec
462 ext/Makefile
463 ext/libav/Makefile
464 ext/libswscale/Makefile
465 gst-libs/Makefile
466 gst-libs/ext/Makefile
467 docs/Makefile
468 docs/version.entities
469 tests/Makefile
470 tests/check/Makefile
471 tests/files/Makefile
472 pkgconfig/Makefile
473 pkgconfig/gstreamer-plugins-libav-uninstalled.pc
474 )
475 AC_OUTPUT
476
477 ORC_OUTPUT