Add uninstalled pkg-config file so other modules can find libav elements for unit...
[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
71 dnl *** checks for platform ***
72
73 dnl * hardware/architecture *
74
75 dnl common/m4/gst-arch.m4
76 dnl check CPU type
77 AG_GST_ARCH
78
79 dnl *** checks for programs ***
80
81 dnl find a compiler
82 AC_PROG_CC
83 AC_PROG_CC_STDC
84
85 dnl check if the compiler supports '-c' and '-o' options
86 AM_PROG_CC_C_O
87
88 AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
89 AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
90
91 dnl check for documentation tools
92 AG_GST_DOCBOOK_CHECK
93 GTK_DOC_CHECK([1.12])
94 AS_PATH_PYTHON([2.1])
95 AG_GST_PLUGIN_DOCS([1.3],[2.1])
96
97 dnl *** checks for libraries ***
98
99 dnl check for libm, for sin()
100 LT_LIB_M
101 AC_SUBST(LIBM)
102
103 dnl *** checks for header files ***
104
105 dnl check if we have ANSI C header files
106 AC_HEADER_STDC
107
108 dnl *** checks for types/defines ***
109
110 dnl *** checks for structures ***
111
112 dnl *** checks for compiler characteristics ***
113
114 dnl *** checks for library functions ***
115
116 dnl *** checks for dependancy libraries ***
117
118 dnl checks for gstreamer
119 dnl uninstalled is selected preferentially -- see pkg-config(1)
120 AG_GST_CHECK_GST($GST_API_VERSION, [$GST_REQ])
121 AG_GST_CHECK_GST_BASE($GST_API_VERSION, [$GST_REQ])
122 AG_GST_CHECK_GST_PLUGINS_BASE($GST_API_VERSION, [$GST_PBREQ])
123 AG_GST_CHECK_GST_CHECK($GST_API_VERSION, [$GST_REQ], no)
124 AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
125
126 AC_MSG_NOTICE(Using GStreamer Core Plugins in $GST_PLUGINS_DIR)
127 AC_MSG_NOTICE(Using GStreamer Base Plugins in $GSTPB_PLUGINS_DIR)
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($FATAL_WARNINGS, [
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"
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-libav])])
210 AM_CONDITIONAL(GST_LIBAV_ENABLE_LGPL, test "x$enable_lgpl" = "xyes")
211 if test "x$enable_lgpl" = "xyes"; then
212   AC_DEFINE([GST_LIBAV_ENABLE_LGPL], [], [Defined if building a LGPL-only version of gst-libav])
213 fi
214
215 dnl *** configure external libs ***
216
217 HAVE_LIBAV_UNINSTALLED=1
218
219 AC_ARG_WITH(system-libav,
220             [AC_HELP_STRING([--with-system-libav], [use system Libav libraries])])
221
222 if test "x$with_system_libav" = "xyes"; then
223   PKG_CHECK_MODULES(LIBAV, libavformat libavcodec libavutil) 
224   PKG_CHECK_MODULES(SWSCALE, libswscale libavutil)
225   saved_CPPFLAGS="$CPPFLAGS"
226   CPPFLAGS="$CPPFLAGS $LIBAV_CFLAGS"
227   AC_CHECK_HEADERS([avi.h])
228   CPPFLAGS="$saved_CPPFLAGS"
229   AC_DEFINE([LIBAV_SOURCE], ["system install"], [Describes where the Libav libraries come from.])
230   HAVE_LIBAV_UNINSTALLED=0
231   AC_MSG_NOTICE([Using system-installed libav code])
232   AC_MSG_WARN([
233   ======================================================================
234    WARNING: you have chosen to build gst-libav against a random
235    external version of Libav instead of building it against the tested
236    internal Libav snapshot that is included with gst-libav.
237    
238    This is a very bad idea.  So bad in fact that words cannot express
239    just how bad it is.  Suffice to say that it is BAD.
240    
241    The GStreamer developers cannot and will not support a gst-libav
242    built this way.  Any bug reports that indicate there is an external
243    version of Libav involved will be closed immediately without further
244    investigation.
245    
246    The reason such a setup can't be supported is that the Libav API
247    and ABI is in constant flux, yet there aren't any official releases
248    of the Libav library to develop against.  This makes it impossible
249    to guarantee that gst-libav will work reliably, or even compile,
250    with a randomly picked version Libav.  Even if gst-libav compiles
251    and superficially appears to work fine against your chosen external
252    Libav version, that might just not be the case on other systems, or
253    even the same system at a later time, or when using decoders,
254    encoders, demuxers or muxers that have not been tested.
255    
256    Please do not create or distribute binary packages of gst-Libav
257    that link against an external libav. Thank you!
258   ======================================================================
259   ])
260
261   dnl No, this is not too extreme, we want people to see and read the above
262   sleep 15
263 else
264
265   AC_MSG_NOTICE([Using local Libav snapshot])
266   
267   dnl libgstlibav.la: include dirs
268   LIBAV_CFLAGS="-I \$(top_srcdir)/gst-libs/ext/libav \
269                 -I \$(top_builddir)/gst-libs/ext/libav \
270                  -Wno-deprecated-declarations"
271
272   dnl libgstlibav.la: libs to statically link to        
273   LIBAV_LIBS="\$(top_builddir)/gst-libs/ext/libav/libavformat/libavformat.a \
274                \$(top_builddir)/gst-libs/ext/libav/libavcodec/libavcodec.a \
275                \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
276
277   dnl
278   SWSCALE_CFLAGS="-I \$(top_srcdir)/gst-libs/ext/libav \
279                   -I \$(top_builddir)/gst-libs/ext/libav \
280                   -Wno-deprecated-declarations"
281
282   dnl libgstswscale.la: libs to statically link to
283   SWSCALE_LIBS="\$(top_builddir)/gst-libs/ext/libav/libswscale/libswscale.a \
284                 \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
285
286   LIBAV_SUBDIRS=gst-libs
287   AC_DEFINE(HAVE_AVI_H)
288   AC_DEFINE([LIBAV_SOURCE], ["local snapshot"], [Describes where the Libav libraries come from.])
289
290   AC_ARG_WITH(libav-extra-configure, 
291       AC_HELP_STRING([--with-libav-extra-configure="xxx"],
292       [extra configure options for internal libav ./configure script]),,
293       with_libav=no)
294
295   # basic arguments
296   emblibav_configure_args="--prefix=$prefix"
297
298   # Enable pic and static so that we get .a files, but with PIC code.
299   emblibav_configure_args="$emblibav_configure_args --disable-avserver --disable-avplay\
300         --disable-avconv --disable-avprobe --enable-static --enable-pic \
301         --disable-encoder=flac --disable-decoder=cavs --disable-protocols --disable-devices\
302         --disable-network --disable-hwaccels --disable-filters --disable-doc\
303         --enable-optimizations"
304
305   if test "x$enable_lgpl" != "xyes"; then
306     emblibav_configure_args="$emblibav_configure_args --enable-gpl"
307   fi
308
309   # if we are cross-compiling, tell libav so
310   case $host in
311       *android*)
312         target_os=linux
313       ;;
314       *)
315         target_os=`echo $host_os | sed 's/-gnu//'`
316       ;;
317   esac
318
319   if test "x$cross_compiling" = xyes; then
320     emblibav_configure_args="$emblibav_configure_args --enable-cross-compile \
321         --target-os=$target_os --arch=$host_cpu --cross-prefix=$host_alias-"
322   fi
323
324   case $host_os in
325     # Unfortunately, in Mac OS 10.5 the current rev of libav builds
326     # some non-PIC code into the .a file. See
327     # http://trac.macosforge.org/projects/macports/ticket/13725 for more
328     # info.
329     darwin*) 
330       emblibav_configure_args="$emblibav_configure_args --disable-mmx --disable-altivec"
331       ;;
332     mingw32*)
333       emblibav_configure_args="$emblibav_configure_args --enable-memalign-hack"
334       WIN32_LIBS="-lws2_32"
335       ;;
336     *)
337       WIN32_LIBS=
338       ;;
339   esac
340
341   if test x"$AR" != x; then
342     emblibav_configure_args="$emblibav_configure_args --ar=\\\"\\\$AR\\\""
343   fi
344
345   if test x"$AS" != x; then
346     emblibav_configure_args="$emblibav_configure_args --as=\\\"\\\$AS\\\""
347   fi
348
349   if test x"$CC" != x; then
350     emblibav_configure_args="$emblibav_configure_args --cc=\\\"\\\$CC\\\""
351   fi
352
353   if test x"$LD" != x; then
354     emblibav_configure_args="$emblibav_configure_args --ld=\\\"\\\$CC\\\""
355   fi
356
357   if test x"$NM" != x; then
358     emblibav_configure_args="$emblibav_configure_args --nm=\\\"\\\$NM\\\""
359   fi
360
361   dnl checks for extra enable/disable flags
362   LIBAV_OPTS=`cd $srcdir/gst-libs/ext/libav && ./configure --help`
363   # Let's check if we can disable the building of the libav binary
364   can_disable=`echo "$LIBAV_OPTS" | grep 'disable-ffmpeg'`
365   if test "$can_disable" != ""; then
366     emblibav_configure_args="$emblibav_configure_args --disable-ffmpeg"
367   fi
368   dnl check if libswscale needs enabling explicitly
369   can_enable=`echo "$LIBAV_OPTS" | grep 'enable-swscale'`
370   if test "$can_enable" != ""; then
371     emblibav_configure_args="$emblibav_configure_args --enable-swscale"
372   fi
373
374   # append extra configure options to emblibav_configure_args if needed
375   if test "x$with_libav_extra_configure" != "xno"; then
376     emblibav_configure_args="$emblibav_configure_args $with_libav_extra_configure"
377   fi
378
379   AC_SUBST(LIBAV_CO_DIR)
380   AC_SUBST(LIBAV_SVN)
381   AC_SUBST(LIBAV_REVISION)
382   AC_SUBST(LIBAV_EXTERNALS_REVISION)
383   AC_CONFIG_COMMANDS([configure-embedded-libav],
384     [echo "Configuring included Libav instance with args $emblibav_configure_args"
385      origdir=`pwd`
386      dnl Don't put path on the configure call when not needed, as FFmpeg's configure relies on it
387      dnl to detect out-of-tree builds
388      if test -z "$srcdir" -o "$srcdir" = .; then
389        confcmd=./configure
390      else
391        confcmd="$ac_abs_top_srcdir"/gst-libs/ext/libav/configure
392      fi
393
394      AS_MKDIR_P(["$ac_top_build_prefix"gst-libs/ext/libav])
395      cd "$ac_top_build_prefix"gst-libs/ext/libav &&
396          eval "$confcmd $emblibav_configure_args" ||
397          AC_MSG_ERROR([Failed to configure embedded Libav tree])
398      cd "$origdir"
399     ],
400     [emblibav_configure_args="$emblibav_configure_args"])
401   AC_MSG_NOTICE([Using included Libav code])
402 fi
403
404 AC_SUBST(LIBAV_CFLAGS)
405 AC_SUBST(LIBAV_LIBS)
406 AC_SUBST(LIBAV_SUBDIRS)
407 AC_SUBST(SWSCALE_CFLAGS)
408 AC_SUBST(SWSCALE_LIBS)
409 AC_SUBST(WIN32_LIBS)
410  
411 if test x$HAVE_LIBAV_UNINSTALLED = x1; then
412   AC_DEFINE(HAVE_LIBAV_UNINSTALLED, [], [Defined if building against uninstalled Libav source])
413 fi
414 AM_CONDITIONAL(HAVE_LIBAV_UNINSTALLED, test x$HAVE_LIBAV_UNINSTALLED = x1)
415
416 AC_CONFIG_FILES(
417 Makefile
418 common/Makefile
419 common/m4/Makefile
420 gst-libav.spec
421 ext/Makefile
422 ext/libav/Makefile
423 ext/libswscale/Makefile
424 gst-libs/Makefile
425 gst-libs/ext/Makefile
426 docs/Makefile
427 docs/version.entities
428 tests/Makefile
429 tests/check/Makefile
430 tests/files/Makefile
431 pkgconfig/Makefile
432 pkgconfig/gstreamer-plugins-libav-uninstalled.pc
433 )
434 AC_OUTPUT
435
436 ORC_OUTPUT