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