tizen 2.3 release
[framework/multimedia/gstreamer0.10-ffmpeg.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,
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.22
49 ORC_REQ=0.4.5
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
79 # FIXME: are these two lines needed ?
80 AM_PROG_CC_STDC
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       [ffmpeg-extra-configure="$withval"],
306       with_ffmpeg_extra_configure=no)
307
308   # basic arguments
309   embffmpeg_configure_args="--prefix=$prefix"
310
311   # Enable pic and static so that we get .a files, but with PIC code.
312 #  embffmpeg_configure_args="$embffmpeg_configure_args --disable-ffserver --disable-ffplay\
313 #       --disable-ffmpeg --disable-ffprobe --enable-postproc --enable-gpl --enable-static --enable-pic \
314 #       --disable-encoder=flac --disable-decoder=cavs --disable-protocols --disable-devices\
315 #       --disable-network --disable-hwaccels --disable-filters --disable-doc\
316 #       --enable-optimizations"
317 # ffmpeg cannot support msmpeg4v1 encoder properly.
318 #       --enable-encoder=msmpeg4v1
319
320   embffmpeg_configure_args="$embffmpeg_configure_args \
321                             --enable-static --enable-pic --enable-optimizations \
322                             --disable-doc \
323                             --disable-gpl  --disable-postproc --disable-swscale  \
324                             --disable-mmx --enable-neon \
325                             --disable-ffmpeg --disable-ffprobe --disable-ffserver --disable-ffplay   \
326                             --disable-decoders --disable-encoders \
327                             --disable-muxers --disable-demuxers \
328                             --disable-parsers  \
329                             --disable-protocols --disable-network --disable-bsfs --disable-devices --disable-filters  \
330                             --disable-libvorbis --disable-libtheora \
331                             --disable-encoder=aac  \
332                             --disable-encoder=h263  \
333                             --disable-encoder=h263p \
334                             --disable-encoder=mpeg4 \
335                             --disable-encoder=msmpeg4v2 \
336                             --disable-encoder=msmpeg4v3 \
337                             --disable-decoder=aac   \
338                             --disable-decoder=ac3   \
339                             --disable-decoder=h263  \
340                             --disable-decoder=h264  \
341                             --disable-decoder=mp3   \
342                             --disable-decoder=mp3adu    \
343                             --disable-decoder=mpeg4 \
344                             --disable-decoder=rv10 \
345                             --disable-decoder=rv20 \
346                             --disable-decoder=rv30 \
347                             --disable-decoder=rv40 \
348                             --disable-decoder=cook \
349                             --disable-decoder=sipr \
350                             --disable-decoder=ra_144 \
351                             --disable-decoder=ra_288 \
352                             --disable-decoder=mpegvideo \
353                             --disable-decoder=msmpeg4v1  \
354                             --disable-decoder=msmpeg4v2  \
355                             --disable-decoder=msmpeg4v3  \
356                             --disable-decoder=wmv3   \
357                             --disable-decoder=vc1   \
358                             --disable-decoder=wmav1     \
359                             --disable-decoder=wmav2     \
360                             --disable-decoder=theora     \
361                             --enable-decoder=vorbis     \
362                             --enable-muxer=amr \
363                             --enable-muxer=tgp \
364                             --enable-muxer=mp4 \
365                             --enable-muxer=adts \
366                             --enable-demuxer=aac   \
367                             --enable-demuxer=ac3   \
368                             --enable-demuxer=avi   \
369                             --enable-demuxer=amr   \
370                             --enable-demuxer=h263    \
371                             --enable-demuxer=h264  \
372                             --enable-demuxer=m4v   \
373                             --enable-demuxer=mov   \
374                             --enable-demuxer=mp3   \
375                             --enable-demuxer=mpegts    \
376                             --enable-demuxer=mpegps    \
377                             --enable-demuxer=mpegtsraw \
378                             --enable-demuxer=mpegvideo \
379                             --enable-parser=aac    \
380                             --enable-parser=ac3    \
381                             --enable-parser=h263   \
382                             --enable-parser=h264   \
383                             --enable-parser=mpeg4video \
384                             --enable-parser=mpegaudio  \
385                             --enable-parser=mpegvideo \
386                             $(ffmpeg-extra-configure)"
387
388
389   # if we are cross-compiling, tell ffmpeg so
390   if test "x$cross_compiling" = xyes; then
391     embffmpeg_configure_args="$embffmpeg_configure_args --enable-cross-compile \
392         --target-os=$host_os --arch=$host_cpu --cross-prefix=$host_alias-"
393   fi
394
395   case $host_os in
396     # Unfortunately, in Mac OS 10.5 the current rev of ffmpeg builds
397     # some non-PIC code into the .a file. See
398     # http://trac.macosforge.org/projects/macports/ticket/13725 for more
399     # info.
400     darwin*) 
401       embffmpeg_configure_args="$embffmpeg_configure_args --disable-mmx --disable-altivec"
402       ;;
403     mingw32*)
404       embffmpeg_configure_args="$embffmpeg_configure_args --enable-memalign-hack"
405       WIN32_LIBS="-lws2_32"
406       ;;
407     *)
408       WIN32_LIBS=
409       ;;
410   esac
411
412   dnl checks for extra enable/disable flags
413   FFMPEG_OPTS="(cd $srcdir/gst-libs/ext/ffmpeg && ./configure --help)"
414   # Let's check if we can disable the building of the ffmpeg binary
415   can_disable=`echo "$FFMPEG_OPTS" | grep 'disable-ffmpeg'`
416   if test "$can_disable" != ""; then
417     embffmpeg_configure_args="$embffmpeg_configure_args --disable-ffmpeg"
418   fi
419   dnl check if libswscale needs enabling explicitly
420   can_enable=`echo "$FFMPEG_OPTS" | grep 'enable-swscale'`
421   if test "$can_enable" != ""; then
422     embffmpeg_configure_args="$embffmpeg_configure_args --enable-swscale"
423   fi
424
425   # append extra configure options to embffmpeg_configure_args if needed
426   if test "x$with_ffmpeg_extra_configure" != "xno"; then
427     embffmpeg_configure_args="$embffmpeg_configure_args $with_ffmpeg_extra_configure"
428   fi
429
430   AC_SUBST(FFMPEG_CO_DIR)
431   AC_SUBST(FFMPEG_SVN)
432   AC_SUBST(FFMPEG_REVISION)
433   AC_SUBST(FFMPEG_EXTERNALS_REVISION)
434   AC_CONFIG_COMMANDS([configure-embedded-ffmpeg],
435     [echo "Configuring included FFmpeg instance with args $embffmpeg_configure_args"
436      origdir=`pwd`
437      dnl Don't put path on the configure call when not needed, as FFmpeg's configure relies on it
438      dnl to detect out-of-tree builds
439      if test -z "$srcdir" -o "$srcdir" = .; then
440        confcmd=./configure
441      else
442        confcmd="$origdir"/"$ac_top_srcdir"/gst-libs/ext/ffmpeg/configure
443      fi
444
445      AS_MKDIR_P(["$ac_top_build_prefix"gst-libs/ext/ffmpeg])
446      cd "$ac_top_build_prefix"gst-libs/ext/ffmpeg &&
447          $confcmd $embffmpeg_configure_args ||
448          AC_MSG_ERROR([Failed to configure embedded FFmpeg tree])
449      cd "$origdir"
450     ],
451     [embffmpeg_configure_args="$embffmpeg_configure_args"])
452   AC_MSG_NOTICE([Using included FFMpeg code])
453 fi
454
455 AC_SUBST(FFMPEG_CFLAGS)
456 AC_SUBST(FFMPEG_LIBS)
457 AC_SUBST(FFMPEG_SUBDIRS)
458 AC_SUBST(POSTPROC_CFLAGS)
459 AC_SUBST(POSTPROC_LIBS)
460 AC_SUBST(SWSCALE_CFLAGS)
461 AC_SUBST(SWSCALE_LIBS)
462 AC_SUBST(WIN32_LIBS)
463  
464 if test x$HAVE_FFMPEG_UNINSTALLED = x1; then
465   AC_DEFINE(HAVE_FFMPEG_UNINSTALLED, [], [Defined if building against uninstalled FFmpeg source])
466 fi
467 AM_CONDITIONAL(HAVE_FFMPEG_UNINSTALLED, test x$HAVE_FFMPEG_UNINSTALLED = x1)
468
469 AC_CONFIG_FILES(
470 Makefile
471 common/Makefile
472 common/m4/Makefile
473 gst-ffmpeg.spec
474 ext/Makefile
475 ext/ffmpeg/Makefile
476 ext/libpostproc/Makefile
477 ext/libswscale/Makefile
478 gst-libs/Makefile
479 gst-libs/ext/Makefile
480 docs/Makefile
481 docs/version.entities
482 tests/Makefile
483 tests/check/Makefile
484 tests/files/Makefile
485 )
486 AC_OUTPUT
487
488 ORC_OUTPUT