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