summaryrefslogtreecommitdiffstats
path: root/m4/as-ffmpeg.m4
blob: fa0c38d7bff348e7a4ef493eb52a4f9ebba56793 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# CFLAGS and library paths for FFMPEG
# taken from Autostar Sandbox, http://autostars.sourceforge.net/

dnl Usage:
dnl AM_PATH_FFMPEG([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
dnl FIXME: version checking does not work currently
dnl
dnl Example:
dnl AM_PATH_FFMPEG(0.4.6, , AC_MSG_ERROR([*** FFMPEG >= 0.4.6 not installed)) 
dnl
dnl Defines FFMPEG_LIBS
dnl FIXME: should define FFMPEG_VERSION
dnl

AC_DEFUN([AM_PATH_FFMPEG],
[
  dnl allow for specification of a source path (for uninstalled)
  AC_ARG_WITH(ffmpeg-source,
    AC_HELP_STRING([--with-ffmpeg-source=DIR],
                   [Directory where FFmpeg source is (optional)]),
    ffmpeg_source="$withval")

  dnl save CFLAGS and LIBS here
  CFLAGS_save=$CFLAGS
  LIBS_save=$LIBS
  if test "x$ffmpeg_source" != "x"; then
    dnl uninstalled FFmpeg copy
    AC_MSG_NOTICE([Looking for FFmpeg source in $ffmpeg_source])
    CFLAGS="-I$ffmpeg_source/libav -I$ffmpeg_source/libavcodec"
    LIBS="-L$ffmpeg_source/libav -L$ffmpeg_source/libavcodec"
    AC_DEFINE_UNQUOTED(HAVE_FFMPEG_UNINSTALLED, 1,
                       [defined if we compile against uninstalled FFmpeg])
    FFMPEG_COMMON_INCLUDE="#include <common.h>"
  else
    FFMPEG_COMMON_INCLUDE="#include <ffmpeg/common.h>"
  fi
  
  dnl check for libavcodec
  AC_CHECK_LIB(avcodec, avcodec_init, HAVE_FFMPEG=yes, HAVE_FFMPEG=no)
  
  dnl check for avcodec.h and avformat.h
  if test "x$ffmpeg_source" != "x"; then
    dnl uninstalled
    AC_CHECK_HEADER(avcodec.h, , HAVE_FFMPEG=no, [/* only compile */])
    AC_CHECK_HEADER(avformat.h, , HAVE_FFMPEG=no, [/* only compile */])
  else
    AC_CHECK_HEADER(ffmpeg/avcodec.h, , HAVE_FFMPEG=no)
    AC_CHECK_HEADER(ffmpeg/avformat.h, , HAVE_FFMPEG=no)
  fi

dnl now check if it's sufficiently new

  AC_LANG_SAVE()
  AC_LANG_C()

  dnl FIXME: we use strcmp, which we know is going to break if ffmpeg ever uses
  dnl two digits for any of their version numbers.  It makes the test so much
  dnl easier though so let's ignore that
  AC_TRY_RUN([
$FFMPEG_COMMON_INCLUDE
#include <stdio.h>
#include <string.h>

int
main ()
{
  if (strcmp (FFMPEG_VERSION, "$1") == -1)
  {
    fprintf (stderr,
             "ERROR: your copy of ffmpeg is too old (%s)\n", FFMPEG_VERSION);
    return 1;
  }
  else
    return 0;
}
], , HAVE_FFMPEG=no)

dnl now do the actual "do we have it ?" test
  if test "x$HAVE_FFMPEG" = "xyes"; then
    FFMPEG_LIBS="$LIBS -lavcodec -lavformat"
    FFMPEG_CFLAGS="$CFLAGS"
    AC_MSG_NOTICE(we have ffmpeg)
    dnl execute what we have to because it's found
    ifelse([$2], , :, [$2])
  else
    FFMPEG_LIBS=""
    FFMPEG_CFLAGS=""
    dnl execute what we have to because it's not found
    ifelse([$3], , :, [$3])
  fi

dnl make variables available
  AC_SUBST(FFMPEG_LIBS)
  AC_SUBST(FFMPEG_CFLAGS)
  AC_SUBST(HAVE_FFMPEG)
  AC_LANG_RESTORE()
  CFLAGS=$CFLAGS_save
  LIBS=$LIBS_save
])