summaryrefslogtreecommitdiff
path: root/contrib/ffmpeg-universal.sh
blob: 811aaa8685064e7c5f855a1ee751d664679dca06 (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh

function usage {
    echo "usage: $0 <action> <source path> <arch list>"
    echo "where: <action> is one of:"
    echo "       -configure    do initial configuration for each architecture"
    echo "       -avcodec      build libavcodec.a for each architecture"
    echo "       -avutil       build libavutil.a for each architecture"
    echo "       -postproc     build libpostproc.a for each architecture"
    echo ""
    echo "Configuration must be done before any library builds.  Options to be passed"
    echo "to ffmpeg's configure command-line should be passed in the environment"
    echo "using the FFMPEG_CONFIGURE_OPTIONS environment variable."
    exit 1
}

function run_configure {
    local arch=$1
    local ffmpeg_topbuilddir="$2"

    # start over from scratch
    rm -rf "$ffmpeg_topbuilddir"
    mkdir -p "$ffmpeg_topbuilddir"
    pushd "$ffmpeg_topbuilddir" > /dev/null 2>&1

    # The Makefile should be passing FFMPEG_CONFIGURE_OPTIONS without passing
    # any --extra-cflags or --extra-ldflags options.  Both CFLAGS and LDFLAGS
    # should be in the environment in addition to FFMPEG_CONFIGURE_OPTIONS.

    local CROSS_OPTIONS=
    local EXTRA_CFLAGS=
    local EXTRA_LDFLAGS=

    if test $HOST_ARCH != $arch; then
        EXTRA_CFLAGS="$CFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch $arch"
        EXTRA_LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch $arch"
        if test $arch = i386; then
            FFMPEG_ARCH=x86_32
        else
            FFMPEG_ARCH=$arch
        fi
        CROSS_OPTIONS="--cross-compile --arch=$FFMPEG_ARCH"
    fi

    echo "$SOURCE_PATH/configure" $CROSS_OPTIONS $FFMPEG_CONFIGURE_OPTIONS \
                                  --extra-cflags="$EXTRA_CFLAGS" \
                                  --extra-ldflags="$EXTRA_LDFLAGS"
    "$SOURCE_PATH/configure" $CROSS_OPTIONS $FFMPEG_CONFIGURE_OPTIONS \
                             --extra-cflags="$EXTRA_CFLAGS" \
                             --extra-ldflags="$EXTRA_LDFLAGS"
    local retval=$?

    popd > /dev/null 2>&1
    if test $retval -ne 0; then
        exit $retval
    fi
}

if test x"$*" = x""; then
    usage
fi
case "$1" in
    -configure)
        MODE=configure
        ;;
    -avcodec)
        MODE=avcodec
        ;;
    -avutil)
        MODE=avutil
        ;;
    -postproc)
        MODE=postproc
        ;;
    *)
        echo "Unrecognized mode: $1"
        usage
        ;;
esac
shift

if test x"$1" = x""; then
    echo "No source path specified!"
    usage
fi
if test ! -d "$1"; then
    echo "Source path $1 does not exist!"
    exit 1
fi
SOURCE_PATH="$1"
shift

HOST_ARCH=`arch`
UNIVERSAL_ARCHES=$*
if test x"$UNIVERSAL_ARCHES" = x""; then
    echo "No architecture(s) specified; using $HOST_ARCH only."
    UNIVERSAL_ARCHES=$HOST_ARCH
fi
CONFIG_FILES=
LIPO_CMDLINE="-create -output ffmpeg/lib$MODE/lib$MODE.a"
for arch in $UNIVERSAL_ARCHES; do
    ffmpeg_topbuilddir="ffmpeg/$arch"
    LIPO_CMDLINE="$LIPO_CMDLINE -arch $arch $ffmpeg_topbuilddir/lib$MODE/lib$MODE.a"
    case $MODE in
        configure)
            run_configure $arch "$ffmpeg_topbuilddir"
            CONFIG_FILES="$CONFIG_FILES $ffmpeg_topbuilddir/config.h"
            ;;
        avcodec)
            "$MAKE" -C "$ffmpeg_topbuilddir/libavcodec" libavcodec.a || exit $?
            ;;
        avutil)
            "$MAKE" -C "$ffmpeg_topbuilddir/libavutil" libavutil.a || exit $?
            ;;
        postproc)
            "$MAKE" -C "$ffmpeg_topbuilddir/libpostproc" libpostproc.a || exit $?
            ;;
    esac
done

if test "$MODE" != "configure"; then
    mkdir -p ffmpeg/lib$MODE
    lipo $LIPO_CMDLINE
else
    # Now that configuration is done, create config.h in the top-level ffmpeg
    # directory.  Pull out only what's needed by xine-lib, removing any possible
    # platform conflicts
    grep -h "define CONFIG_.*_DECODER" $CONFIG_FILES | uniq > ffmpeg/config.h
    touch ffmpeg/config.mak
fi