configure: Set the assembler used for libav to $CC
[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.0.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, 2, 0, 2)
46
47 dnl *** required versions of GStreamer stuff ***
48 GST_REQ=1.1.0
49 GST_PBREQ=1.1.0
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 define an ERROR_CFLAGS Makefile variable
136 AG_GST_SET_ERROR_CFLAGS($FATAL_WARNINGS, [
137     -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
138     -Wwrite-strings -Wformat-nonliteral -Wformat-security -Wold-style-definition
139     -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="$GST_CFLAGS"
178 GST_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CFLAGS $GLIB_EXTRA_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 AC_ARG_ENABLE(lgpl,
210               [AC_HELP_STRING([--enable-lgpl], [build a LGPL licensed gst-libav])])
211 AM_CONDITIONAL(GST_LIBAV_ENABLE_LGPL, test "x$enable_lgpl" = "xyes")
212 if test "x$enable_lgpl" = "xyes"; then
213   AC_DEFINE([GST_LIBAV_ENABLE_LGPL], [], [Defined if building a LGPL-only version of gst-libav])
214 fi
215
216 dnl *** configure external libs ***
217
218 HAVE_LIBAV_UNINSTALLED=1
219
220 AC_ARG_WITH(system-libav,
221             [AC_HELP_STRING([--with-system-libav], [use system Libav libraries])])
222
223 if test "x$with_system_libav" = "xyes"; then
224   PKG_CHECK_MODULES(LIBAV, libavformat libavcodec libavutil) 
225   PKG_CHECK_MODULES(SWSCALE, libswscale libavutil)
226   saved_CPPFLAGS="$CPPFLAGS"
227   CPPFLAGS="$CPPFLAGS $LIBAV_CFLAGS"
228   AC_CHECK_HEADERS([avi.h])
229   CPPFLAGS="$saved_CPPFLAGS"
230   AC_DEFINE([LIBAV_SOURCE], ["system install"], [Describes where the Libav libraries come from.])
231   HAVE_LIBAV_UNINSTALLED=0
232   AC_MSG_NOTICE([Using system-installed libav code])
233   AC_MSG_WARN([
234   ======================================================================
235    WARNING: you have chosen to build gst-libav against a random
236    external version of Libav instead of building it against the tested
237    internal Libav snapshot that is included with gst-libav.
238    
239    This is a very bad idea.  So bad in fact that words cannot express
240    just how bad it is.  Suffice to say that it is BAD.
241    
242    The GStreamer developers cannot and will not support a gst-libav
243    built this way.  Any bug reports that indicate there is an external
244    version of Libav involved will be closed immediately without further
245    investigation.
246    
247    The reason such a setup can't be supported is that the Libav API
248    and ABI is in constant flux, yet there aren't any official releases
249    of the Libav library to develop against.  This makes it impossible
250    to guarantee that gst-libav will work reliably, or even compile,
251    with a randomly picked version Libav.  Even if gst-libav compiles
252    and superficially appears to work fine against your chosen external
253    Libav version, that might just not be the case on other systems, or
254    even the same system at a later time, or when using decoders,
255    encoders, demuxers or muxers that have not been tested.
256    
257    Please do not create or distribute binary packages of gst-Libav
258    that link against an external libav. Thank you!
259   ======================================================================
260   ])
261
262   dnl No, this is not too extreme, we want people to see and read the above
263   sleep 15
264 else
265
266   AC_MSG_NOTICE([Using local Libav snapshot])
267   
268   dnl libgstlibav.la: include dirs
269   LIBAV_CFLAGS="-I \$(top_srcdir)/gst-libs/ext/libav \
270                 -I \$(top_builddir)/gst-libs/ext/libav \
271                  -Wno-deprecated-declarations"
272
273   dnl libgstlibav.la: libs to statically link to        
274   LIBAV_LIBS="\$(top_builddir)/gst-libs/ext/libav/libavformat/libavformat.a \
275                \$(top_builddir)/gst-libs/ext/libav/libavcodec/libavcodec.a \
276                \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
277
278   dnl
279   SWSCALE_CFLAGS="-I \$(top_srcdir)/gst-libs/ext/libav \
280                   -I \$(top_builddir)/gst-libs/ext/libav \
281                   -Wno-deprecated-declarations"
282
283   dnl libgstswscale.la: libs to statically link to
284   SWSCALE_LIBS="\$(top_builddir)/gst-libs/ext/libav/libswscale/libswscale.a \
285                 \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
286
287   LIBAV_SUBDIRS=gst-libs
288   AC_DEFINE(HAVE_AVI_H)
289   AC_DEFINE([LIBAV_SOURCE], ["local snapshot"], [Describes where the Libav libraries come from.])
290
291   AC_ARG_WITH(libav-extra-configure, 
292       AC_HELP_STRING([--with-libav-extra-configure="xxx"],
293       [extra configure options for internal libav ./configure script]),,
294       with_libav=no)
295
296   # basic arguments
297   emblibav_configure_args="--prefix=$prefix"
298
299   # Enable pic and static so that we get .a files, but with PIC code.
300   emblibav_configure_args="$emblibav_configure_args --disable-avserver --disable-avplay\
301         --disable-avconv --disable-avprobe --enable-static --enable-pic \
302         --disable-encoder=flac --disable-decoder=cavs --disable-protocols --disable-devices\
303         --disable-network --disable-hwaccels --disable-filters --disable-doc\
304         --enable-optimizations"
305
306   if test "x$enable_lgpl" != "xyes"; then
307     emblibav_configure_args="$emblibav_configure_args --enable-gpl"
308   fi
309
310   # if we are cross-compiling, tell libav so
311   case $host in
312       *android*)
313         target_os=linux
314       ;;
315       *)
316         target_os=`echo $host_os | sed 's/-gnu//'`
317       ;;
318   esac
319
320   if test "x$cross_compiling" = xyes; then
321     emblibav_configure_args="$emblibav_configure_args --enable-cross-compile \
322         --target-os=$target_os --arch=$host_cpu --cross-prefix=$host_alias-"
323   fi
324
325   case $host_os in
326     # Unfortunately, in Mac OS 10.5 the current rev of libav builds
327     # some non-PIC code into the .a file. See
328     # http://trac.macosforge.org/projects/macports/ticket/13725 for more
329     # info.
330     darwin*) 
331       emblibav_configure_args="$emblibav_configure_args --disable-mmx --disable-altivec"
332       ;;
333     mingw32*)
334       emblibav_configure_args="$emblibav_configure_args --enable-memalign-hack"
335       WIN32_LIBS="-lws2_32"
336       ;;
337     *)
338       WIN32_LIBS=
339       ;;
340   esac
341
342   if test x"$AR" != x; then
343     emblibav_configure_args="$emblibav_configure_args --ar=\\\"\\\$AR\\\""
344   fi
345
346   if test x"$AS" != x; then
347     emblibav_configure_args="$emblibav_configure_args --as=\\\"\\\$CC\\\""
348   fi
349
350   if test x"$CC" != x; then
351     emblibav_configure_args="$emblibav_configure_args --cc=\\\"\\\$CC\\\""
352   fi
353
354   if test x"$LD" != x; then
355     emblibav_configure_args="$emblibav_configure_args --ld=\\\"\\\$CC\\\""
356   fi
357
358   if test x"$NM" != x; then
359     emblibav_configure_args="$emblibav_configure_args --nm=\\\"\\\$NM\\\""
360   fi
361
362   dnl checks for extra enable/disable flags
363   LIBAV_OPTS=`cd $srcdir/gst-libs/ext/libav && ./configure --help`
364   # Let's check if we can disable the building of the libav binary
365   can_disable=`echo "$LIBAV_OPTS" | grep 'disable-ffmpeg'`
366   if test "$can_disable" != ""; then
367     emblibav_configure_args="$emblibav_configure_args --disable-ffmpeg"
368   fi
369   dnl check if libswscale needs enabling explicitly
370   can_enable=`echo "$LIBAV_OPTS" | grep 'enable-swscale'`
371   if test "$can_enable" != ""; then
372     emblibav_configure_args="$emblibav_configure_args --enable-swscale"
373   fi
374
375   # append extra configure options to emblibav_configure_args if needed
376   if test "x$with_libav_extra_configure" != "xno"; then
377     emblibav_configure_args="$emblibav_configure_args $with_libav_extra_configure"
378   fi
379
380   AC_SUBST(LIBAV_CO_DIR)
381   AC_SUBST(LIBAV_SVN)
382   AC_SUBST(LIBAV_REVISION)
383   AC_SUBST(LIBAV_EXTERNALS_REVISION)
384   AC_CONFIG_COMMANDS([configure-embedded-libav],
385     [echo "Configuring included Libav instance with args $emblibav_configure_args"
386      origdir=`pwd`
387      dnl Don't put path on the configure call when not needed, as FFmpeg's configure relies on it
388      dnl to detect out-of-tree builds
389      if test -z "$srcdir" -o "$srcdir" = .; then
390        confcmd=./configure
391      else
392        confcmd="$ac_abs_top_srcdir"/gst-libs/ext/libav/configure
393      fi
394
395      AS_MKDIR_P(["$ac_top_build_prefix"gst-libs/ext/libav])
396      cd "$ac_top_build_prefix"gst-libs/ext/libav &&
397          eval "$confcmd $emblibav_configure_args" ||
398          AC_MSG_ERROR([Failed to configure embedded Libav tree])
399      cd "$origdir"
400     ],
401     [emblibav_configure_args="$emblibav_configure_args"])
402   AC_MSG_NOTICE([Using included Libav code])
403 fi
404
405 AC_SUBST(LIBAV_CFLAGS)
406 AC_SUBST(LIBAV_LIBS)
407 AC_SUBST(LIBAV_SUBDIRS)
408 AC_SUBST(SWSCALE_CFLAGS)
409 AC_SUBST(SWSCALE_LIBS)
410 AC_SUBST(WIN32_LIBS)
411  
412 if test x$HAVE_LIBAV_UNINSTALLED = x1; then
413   AC_DEFINE(HAVE_LIBAV_UNINSTALLED, [], [Defined if building against uninstalled Libav source])
414 fi
415 AM_CONDITIONAL(HAVE_LIBAV_UNINSTALLED, test x$HAVE_LIBAV_UNINSTALLED = x1)
416
417 AC_CONFIG_FILES(
418 Makefile
419 common/Makefile
420 common/m4/Makefile
421 gst-libav.spec
422 ext/Makefile
423 ext/libav/Makefile
424 ext/libswscale/Makefile
425 gst-libs/Makefile
426 gst-libs/ext/Makefile
427 docs/Makefile
428 docs/version.entities
429 tests/Makefile
430 tests/check/Makefile
431 tests/files/Makefile
432 pkgconfig/Makefile
433 pkgconfig/gstreamer-plugins-libav-uninstalled.pc
434 )
435 AC_OUTPUT
436
437 ORC_OUTPUT