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