Statistics
| Branch: | Revision:

ffmpeg / configure @ 4f034993

History | View | Annotate | Download (68.6 KB)

1
#!/bin/sh
2
#
3
# FFmpeg configure script
4
#
5
# Copyright (c) 2000-2002 Fabrice Bellard
6
# Copyright (c) 2005-2008 Diego Biurrun
7
# Copyright (c) 2005-2008 Mans Rullgard
8
#
9

    
10
# Prevent locale nonsense from breaking basic text processing.
11
LC_ALL=C
12
export LC_ALL
13

    
14
# make sure we are running under a compatible shell
15
# try to make this part work with most shells
16

    
17
try_exec(){
18
    echo "Trying shell $1"
19
    type "$1" > /dev/null 2>&1 && exec "$@"
20
}
21

    
22
unset foo
23
(: ${foo%%bar}) 2> /dev/null
24
E1="$?"
25

    
26
(: ${foo?}) 2> /dev/null
27
E2="$?"
28

    
29
if test "$E1" != 0 || test "$E2" = 0; then
30
    echo "Broken shell detected.  Trying alternatives."
31
    export FF_CONF_EXEC
32
    if test "0$FF_CONF_EXEC" -lt 1; then
33
        FF_CONF_EXEC=1
34
        try_exec bash "$0" "$@"
35
    fi
36
    if test "0$FF_CONF_EXEC" -lt 2; then
37
        FF_CONF_EXEC=2
38
        try_exec ksh "$0" "$@"
39
    fi
40
    if test "0$FF_CONF_EXEC" -lt 3; then
41
        FF_CONF_EXEC=3
42
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43
    fi
44
    echo "No compatible shell script interpreter found."
45
    echo "This configure script requires a POSIX-compatible shell"
46
    echo "such as bash or ksh."
47
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48
    echo "Instead, install a working POSIX-compatible shell."
49
    echo "Disabling this configure test will create a broken FFmpeg."
50
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51
        echo "This bash version ($BASH_VERSION) is broken on your platform."
52
        echo "Upgrade to a later version if available."
53
    fi
54
    exit 1
55
fi
56

    
57
show_help(){
58
  echo "Usage: configure [options]"
59
  echo "Options: [defaults in brackets after descriptions]"
60
  echo
61
  echo "Standard options:"
62
  echo "  --help                   print this message"
63
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71
  echo "  --enable-static          build static libraries [default=yes]"
72
  echo "  --disable-static         do not build static libraries [default=no]"
73
  echo "  --enable-shared          build shared libraries [default=no]"
74
  echo "  --disable-shared         do not build shared libraries [default=yes]"
75
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
76
  echo "                           and ffmpeg will be under GPL [default=no]"
77
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libav*"
78
  echo "                           and ffmpeg will be unredistributable [default=no]"
79
  echo "  --enable-postproc        enable GPLed postprocessing support [default=no]"
80
  echo "  --enable-swscale         software scaler support [default=no]"
81
  echo "  --enable-avfilter        video filter support (replaces vhook) [default=no]"
82
  echo "  --enable-avfilter-lavf   video filters dependant on avformat [default=no]"
83
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
84
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
85
  echo "  --enable-pthreads        use pthreads [default=no]"
86
  echo "  --enable-w32threads      use Win32 threads [default=no]"
87
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
88
  echo
89
  echo "External library support:"
90
  echo "  --enable-mlib            use Sun medialib [default=no]"
91
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
92
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
93
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
94
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
95
  echo "                           and libraw1394 [default=no]"
96
  echo "  --enable-libdirac        enable Dirac support via libdirac [default=no]"
97
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
98
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
99
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
100
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
101
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
102
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
103
  echo "                           native demuxer exists [default=no]"
104
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
105
  echo "  --enable-libspeex        enable Speex decoding via libspeex [default=no]"
106
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
107
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
108
  echo "                           native implementation exists [default=no]"
109
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
110
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
111
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
112
  echo ""
113
  echo "Advanced options (experts only):"
114
  echo "  --source-path=PATH       path to source code [$source_path]"
115
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
116
  echo "  --enable-cross-compile   assume a cross-compiler is used"
117
  echo "  --target-os=OS           compiler targets OS [$target_os]"
118
  echo "  --cc=CC                  use C compiler CC [$cc]"
119
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
120
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
121
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
122
  echo "  --extra-version=STRING   version string suffix []"
123
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
124
  echo "  --arch=ARCH              select architecture  [$arch]"
125
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
126
  echo "                           instruction selection, may crash on older CPUs)"
127
  echo "  --enable-powerpc-perf    enable performance report on PPC"
128
  echo "                           (requires enabling PMC)"
129
  echo "  --disable-mmx            disable MMX usage"
130
  echo "  --disable-mmx2           disable MMX2 usage"
131
  echo "  --disable-ssse3          disable SSSE3 usage"
132
  echo "  --disable-armv5te        disable armv5te usage"
133
  echo "  --disable-armv6          disable armv6 usage"
134
  echo "  --disable-armvfp         disable ARM VFP usage"
135
  echo "  --disable-iwmmxt         disable iwmmxt usage"
136
  echo "  --disable-altivec        disable AltiVec usage"
137
  echo "  --disable-network        disable network support [default=no]"
138
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
139
  echo "  --disable-zlib           disable zlib [default=no]"
140
  echo "  --disable-bzlib          disable bzlib [default=no]"
141
  echo "  --disable-vhook          disable video hooking support"
142
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
143
  echo "                           MPEG audio decoding [default=no]"
144
  echo "  --enable-gray            enable full grayscale support (slower color)"
145
  echo "  --disable-ffmpeg         disable ffmpeg build"
146
  echo "  --disable-ffserver       disable ffserver build"
147
  echo "  --disable-ffplay         disable ffplay build"
148
  echo "  --enable-small           optimize for size instead of speed"
149
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
150
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
151
  echo "  --disable-encoder=NAME   disables encoder NAME"
152
  echo "  --enable-encoder=NAME    enables encoder NAME"
153
  echo "  --disable-decoder=NAME   disables decoder NAME"
154
  echo "  --enable-decoder=NAME    enables decoder NAME"
155
  echo "  --disable-encoders       disables all encoders"
156
  echo "  --disable-decoders       disables all decoders"
157
  echo "  --disable-muxer=NAME     disables muxer NAME"
158
  echo "  --enable-muxer=NAME      enables muxer NAME"
159
  echo "  --disable-muxers         disables all muxers"
160
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
161
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
162
  echo "  --disable-demuxers       disables all demuxers"
163
  echo "  --enable-parser=NAME     enables parser NAME"
164
  echo "  --disable-parser=NAME    disables parser NAME"
165
  echo "  --disable-parsers        disables all parsers"
166
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
167
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
168
  echo "  --disable-bsfs           disables all bitstream filters"
169
  echo "  --enable-protocol=NAME   enables protocol NAME"
170
  echo "  --disable-protocol=NAME  disables protocol NAME"
171
  echo "  --disable-protocols      disables all protocols"
172
  echo "  --disable-devices        disables all devices"
173
  echo "  --enable-filter=NAME     enables filter NAME"
174
  echo "  --disable-filter=NAME    disables filter NAME"
175
  echo "  --disable-filters        disables all filters"
176
  echo "  --list-decoders          show all available decoders"
177
  echo "  --list-encoders          show all available encoders"
178
  echo "  --list-muxers            show all available muxers"
179
  echo "  --list-demuxers          show all available demuxers"
180
  echo "  --list-parsers           show all available parsers"
181
  echo "  --list-protocols         show all available protocols"
182
  echo "  --list-bsfs              show all available bitstream filters"
183
  echo "  --list-indevs            show all available input devices"
184
  echo "  --list-outdevs           show all available output devices"
185
  echo "  --list-filters           show all available filters"
186
  echo
187
  echo "Developer options (useful when working on FFmpeg itself):"
188
  echo "  --disable-debug          disable debugging symbols"
189
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
190
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
191
  echo "  --disable-optimizations  disable compiler optimizations"
192
  echo "  --enable-extra-warnings  enable more compiler warnings"
193
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
194
  echo ""
195
  echo "NOTE: Object files are built at the place where configure is launched."
196
  exit 0
197
}
198

    
199
log(){
200
    echo "$@" >> $logfile
201
}
202

    
203
log_file(){
204
    log BEGIN $1
205
    pr -n -t $1 >> $logfile
206
    log END $1
207
}
208

    
209
echolog(){
210
    log "$@"
211
    echo "$@"
212
}
213

    
214
die(){
215
    echolog "$@"
216
    cat <<EOF
217
If you think configure made a mistake, make sure you are using the latest
218
version from SVN.  If the latest version fails, report the problem to the
219
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
220
EOF
221
    if disabled logging; then
222
        cat <<EOF
223
Rerun configure with logging enabled (do not use --disable-logging), and
224
include the log this produces with your report.
225
EOF
226
    else
227
cat <<EOF
228
Include the log file "$logfile" produced by configure as this will help
229
solving the problem.
230
EOF
231
    fi
232
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
233
    exit 1
234
}
235

    
236
# Avoid locale weirdness, besides we really just want to translate ASCII.
237
toupper(){
238
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
239
}
240

    
241
tolower(){
242
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
243
}
244

    
245
set_all(){
246
    value=$1
247
    shift
248
    for var in $*; do
249
        eval $var=$value
250
    done
251
}
252

    
253
set_weak(){
254
    value=$1
255
    shift
256
    for var; do
257
        eval : \${$var:=$value}
258
    done
259
}
260

    
261
pushvar(){
262
    for var in $*; do
263
        eval level=\${${var}_level:=0}
264
        eval ${var}_${level}="\$$var"
265
        eval ${var}_level=$(($level+1))
266
    done
267
}
268

    
269
popvar(){
270
    for var in $*; do
271
        eval level=\${${var}_level:-0}
272
        test $level = 0 && continue
273
        eval level=$(($level-1))
274
        eval $var="\${${var}_${level}}"
275
        eval ${var}_level=$level
276
        eval unset ${var}_${level}
277
    done
278
}
279

    
280
enable(){
281
    set_all yes $*
282
}
283

    
284
disable(){
285
    set_all no $*
286
}
287

    
288
enable_weak(){
289
    set_weak yes $*
290
}
291

    
292
disable_weak(){
293
    set_weak no $*
294
}
295

    
296
do_enable_deep(){
297
    for var; do
298
        enabled $var && continue
299
        eval sel="\$${var}_select"
300
        eval sgs="\$${var}_suggest"
301
        pushvar var sgs
302
        enable_deep $sel
303
        popvar sgs
304
        enable_deep_weak $sgs
305
        popvar var
306
    done
307
}
308

    
309
enable_deep(){
310
    do_enable_deep $*
311
    enable $*
312
}
313

    
314
enable_deep_weak(){
315
    do_enable_deep $*
316
    enable_weak $*
317
}
318

    
319
enabled(){
320
    test "${1#!}" = "$1" && op== || op=!=
321
    eval test "x\$${1#!}" $op "xyes"
322
}
323

    
324
disabled(){
325
    test "${1#!}" = "$1" && op== || op=!=
326
    eval test "x\$${1#!}" $op "xno"
327
}
328

    
329
enabled_all(){
330
    for opt; do
331
        enabled $opt || return 1
332
    done
333
}
334

    
335
disabled_all(){
336
    for opt; do
337
        disabled $opt || return 1
338
    done
339
}
340

    
341
enabled_any(){
342
    for opt; do
343
        enabled $opt && return 0
344
    done
345
}
346

    
347
disabled_any(){
348
    for opt; do
349
        disabled $opt && return 0
350
    done
351
    return 1
352
}
353

    
354
set_default(){
355
    for opt; do
356
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
357
    done
358
}
359

    
360
is_in(){
361
    value=$1
362
    shift
363
    for var in $*; do
364
        [ $var = $value ] && return 0
365
    done
366
    return 1
367
}
368

    
369
check_deps(){
370
    for cfg; do
371
        cfg="${cfg#!}"
372
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
373
        disabled ${cfg}_checking && continue
374
        enable ${cfg}_checking
375

    
376
        eval dep_all="\$${cfg}_deps"
377
        eval dep_any="\$${cfg}_deps_any"
378
        eval dep_sel="\$${cfg}_select"
379
        eval dep_sgs="\$${cfg}_suggest"
380

    
381
        pushvar cfg dep_all dep_any dep_sel dep_sgs
382
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
383
        popvar cfg dep_all dep_any dep_sel dep_sgs
384

    
385
        enabled_all  $dep_all || disable $cfg
386
        enabled_any  $dep_any || disable $cfg
387
        disabled_any $dep_sel && disable $cfg
388

    
389
        if enabled $cfg; then
390
            eval dep_extralibs="\$${cfg}_extralibs"
391
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
392
            enable_deep $dep_sel
393
            enable_deep_weak $dep_sgs
394
        fi
395

    
396
        disable ${cfg}_checking
397
    done
398
}
399

    
400
print_config(){
401
    pfx=$1
402
    header=$2
403
    makefile=$3
404
    shift 3
405
    for cfg; do
406
        ucname="`toupper $cfg`"
407
        if enabled $cfg; then
408
            echo "#define ${pfx}${ucname} 1" >> $header
409
            echo "#define ENABLE_${ucname} 1" >> $header
410
            echo "${pfx}${ucname}=yes" >> $makefile
411
        else
412
            echo "#define ENABLE_${ucname} 0" >> $header
413
        fi
414
    done
415
}
416

    
417
flags_saved(){
418
    (: ${SAVE_CFLAGS?}) 2> /dev/null
419
}
420

    
421
save_flags(){
422
    flags_saved && return
423
    SAVE_CFLAGS="$CFLAGS"
424
    SAVE_LDFLAGS="$LDFLAGS"
425
    SAVE_extralibs="$extralibs"
426
}
427

    
428
restore_flags(){
429
    flags_saved || return
430
    CFLAGS="$SAVE_CFLAGS"
431
    LDFLAGS="$SAVE_LDFLAGS"
432
    extralibs="$SAVE_extralibs"
433
    unset SAVE_CFLAGS
434
    unset SAVE_LDFLAGS
435
    unset SAVE_extralibs
436
}
437

    
438
temp_cflags(){
439
    save_flags
440
    CFLAGS="$CFLAGS $*"
441
}
442

    
443
temp_ldflags(){
444
    save_flags
445
    LDFLAGS="$LDFLAGS $*"
446
}
447

    
448
temp_extralibs(){
449
    save_flags
450
    extralibs="$extralibs $*"
451
}
452

    
453
append(){
454
    var=$1
455
    shift
456
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
457
    eval "$var=\"\$$var $*\""
458
}
459

    
460
add_cflags(){
461
    append CFLAGS "$@"
462
}
463

    
464
add_ldflags(){
465
    append LDFLAGS "$@"
466
}
467

    
468
add_extralibs(){
469
    append extralibs "$@"
470
}
471

    
472
check_cmd(){
473
    log "$@"
474
    "$@" >> $logfile 2>&1
475
}
476

    
477
check_cc(){
478
    log check_cc "$@"
479
    cat > $TMPC
480
    log_file $TMPC
481
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
482
}
483

    
484
check_cpp(){
485
    log check_cpp "$@"
486
    cat > $TMPC
487
    log_file $TMPC
488
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
489
}
490

    
491
check_asm(){
492
    log check_asm "$@"
493
    name="$1"
494
    asm="$2"
495
    shift 2
496
    check_cc "$@" <<EOF && enable $name || disable $name
497
int foo(void){ __asm__ volatile($asm); }
498
EOF
499
}
500

    
501
check_yasm(){
502
    log check_yasm "$@"
503
    echo "$1" > $TMPS
504
    log_file $TMPS
505
    shift 1
506
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
507
}
508

    
509
check_ld(){
510
    log check_ld "$@"
511
    check_cc || return
512
    flags=''
513
    libs=''
514
    for f; do
515
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
516
    done
517
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
518
}
519

    
520
check_cflags(){
521
    log check_cflags "$@"
522
    check_cc "$@" <<EOF && add_cflags "$@"
523
int x;
524
EOF
525
}
526

    
527
check_ldflags(){
528
    log check_ldflags "$@"
529
    check_ld "$@" <<EOF && add_ldflags "$@"
530
int main(void){ return 0; }
531
EOF
532
}
533

    
534
check_header(){
535
    log check_header "$@"
536
    header=$1
537
    shift
538
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
539
    disable $var
540
    check_cpp "$@" <<EOF && enable $var
541
#include <$header>
542
int x;
543
EOF
544
}
545

    
546
check_func(){
547
    log check_func "$@"
548
    func=$1
549
    shift
550
    disable $func
551
    check_ld "$@" <<EOF && enable $func
552
extern int $func();
553
int main(void){ $func(); }
554
EOF
555
}
556

    
557
check_func_headers(){
558
    log check_func_headers "$@"
559
    headers=$1
560
    func=$2
561
    shift 2
562
    disable $func
563
    incs=""
564
    for hdr in $headers; do
565
        incs="$incs
566
#include <$hdr>"
567
    done
568
    check_ld "$@" <<EOF && enable $func
569
$incs
570
int main(int argc, char **argv){
571
    (void) $func;
572
    return 0;
573
}
574
EOF
575
}
576

    
577
check_cpp_condition(){
578
    log check_cpp_condition "$@"
579
    header=$1
580
    condition=$2
581
    check_cpp <<EOF
582
#include <$header>
583
#if !($condition)
584
#error "unsatisfied condition: $condition"
585
#endif
586
EOF
587
}
588

    
589
check_lib(){
590
    log check_lib "$@"
591
    header="$1"
592
    func="$2"
593
    shift 2
594
    temp_extralibs "$@"
595
    check_header $header && check_func $func && add_extralibs "$@"
596
    err=$?
597
    restore_flags
598
    return $err
599
}
600

    
601
check_lib2(){
602
    log check_lib2 "$@"
603
    headers="$1"
604
    func="$2"
605
    shift 2
606
    temp_extralibs "$@"
607
    check_func_headers "$headers" $func && add_extralibs "$@"
608
    err=$?
609
    restore_flags
610
    return $err
611
}
612

    
613
check_exec(){
614
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
615
}
616

    
617
check_exec_crash(){
618
    code=`cat`
619

    
620
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
621
    # are safe but may not be available everywhere.  Thus we use
622
    # raise(SIGTERM) instead.  The check is run in a subshell so we
623
    # can redirect the "Terminated" message from the shell.  SIGBUS
624
    # is not defined by standard C so it is used conditionally.
625

    
626
    (check_exec "$@") >> $logfile 2>&1 <<EOF
627
#include <signal.h>
628
static void sighandler(int sig){
629
    raise(SIGTERM);
630
}
631
int main(void){
632
    signal(SIGILL, sighandler);
633
    signal(SIGFPE, sighandler);
634
    signal(SIGSEGV, sighandler);
635
#ifdef SIGBUS
636
    signal(SIGBUS, sighandler);
637
#endif
638
    { $code }
639
}
640
EOF
641
}
642

    
643
check_type(){
644
    log check_type "$@"
645
    headers=$1
646
    type=$2
647
    shift 2
648
    disable $type
649
    incs=""
650
    for hdr in $headers; do
651
        incs="$incs
652
#include <$hdr>"
653
    done
654
    check_cc "$@" <<EOF && enable $type
655
$incs
656
$type v;
657
EOF
658
}
659

    
660
require(){
661
    name="$1"
662
    header="$2"
663
    func="$3"
664
    shift 3
665
    check_lib $header $func "$@" || die "ERROR: $name not found"
666
}
667

    
668
require2(){
669
    name="$1"
670
    headers="$2"
671
    func="$3"
672
    shift 3
673
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
674
}
675

    
676
check_foo_config(){
677
    cfg=$1
678
    pkg=$2
679
    header=$3
680
    func=$4
681
    shift 4
682
    disable $cfg
683
    check_cmd ${pkg}-config --version
684
    err=$?
685
    if test "$err" = 0; then
686
        temp_cflags `${pkg}-config --cflags`
687
        temp_extralibs `${pkg}-config --libs`
688
        check_lib "$@" $header $func && enable $cfg
689
    fi
690
    return $err
691
}
692

    
693
apply(){
694
    file=$1
695
    shift
696
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
697
}
698

    
699
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
700
# system-dependent things.
701

    
702
COMPONENT_LIST="
703
    bsfs
704
    decoders
705
    demuxers
706
    encoders
707
    filters
708
    indevs
709
    muxers
710
    outdevs
711
    parsers
712
    protocols
713
"
714

    
715
CONFIG_LIST="
716
    $COMPONENT_LIST
717
    avfilter
718
    avfilter_lavf
719
    avisynth
720
    beos_netserver
721
    bzlib
722
    ffmpeg
723
    ffplay
724
    ffserver
725
    fft
726
    golomb
727
    gpl
728
    gprof
729
    gray
730
    hardcoded_tables
731
    ipv6
732
    libamr_nb
733
    libamr_wb
734
    libdc1394
735
    libdirac
736
    libfaac
737
    libfaad
738
    libfaadbin
739
    libgsm
740
    libmp3lame
741
    libnut
742
    libschroedinger
743
    libspeex
744
    libtheora
745
    libvorbis
746
    libx264
747
    libxvid
748
    mdct
749
    memalign_hack
750
    mlib
751
    mpegaudio_hp
752
    network
753
    nonfree
754
    postproc
755
    powerpc_perf
756
    small
757
    swscale
758
    vhook
759
    x11grab
760
    zlib
761
"
762

    
763
THREADS_LIST='
764
    beosthreads
765
    os2threads
766
    pthreads
767
    w32threads
768
'
769

    
770
ARCH_LIST='
771
    alpha
772
    armv4l
773
    bfin
774
    ia64
775
    m68k
776
    mips
777
    parisc
778
    powerpc
779
    s390
780
    sh4
781
    sparc
782
    sparc64
783
    x86
784
    x86_32
785
    x86_64
786
'
787

    
788
ARCH_EXT_LIST='
789
    altivec
790
    armv5te
791
    armv6
792
    armvfp
793
    iwmmxt
794
    mmi
795
    mmx
796
    mmx2
797
    neon
798
    ssse3
799
    vis
800
'
801

    
802
HAVE_LIST="
803
    $ARCH_EXT_LIST
804
    $THREADS_LIST
805
    altivec_h
806
    arpa_inet_h
807
    bswap
808
    closesocket
809
    cmov
810
    conio_h
811
    dcbzl
812
    dev_bktr_ioctl_bt848_h
813
    dev_bktr_ioctl_meteor_h
814
    dev_ic_bt8xx_h
815
    dev_video_meteor_ioctl_meteor_h
816
    dev_video_bktr_ioctl_bt848_h
817
    dlfcn_h
818
    dlopen
819
    dos_paths
820
    ebp_available
821
    ebx_available
822
    fast_64bit
823
    fast_cmov
824
    fast_unaligned
825
    fork
826
    freetype2
827
    gethrtime
828
    GetProcessTimes
829
    getrusage
830
    imlib2
831
    inet_aton
832
    inline_asm
833
    libdc1394_1
834
    libdc1394_2
835
    llrint
836
    lrint
837
    lrintf
838
    machine_ioctl_bt848_h
839
    machine_ioctl_meteor_h
840
    malloc_h
841
    memalign
842
    mkstemp
843
    pld
844
    ppc64
845
    round
846
    roundf
847
    sdl
848
    sdl_video_size
849
    socklen_t
850
    soundcard_h
851
    poll_h
852
    sys_mman_h
853
    sys_resource_h
854
    sys_select_h
855
    sys_soundcard_h
856
    sys_videoio_h
857
    termios_h
858
    threads
859
    winsock2_h
860
    yasm
861
"
862

    
863
# options emitted with CONFIG_ prefix but not available on command line
864
CONFIG_EXTRA="
865
    fft_mmx
866
"
867

    
868
CMDLINE_SELECT="
869
    $ARCH_EXT_LIST
870
    $CONFIG_LIST
871
    $THREADS_LIST
872
    cross_compile
873
    debug
874
    extra_warnings
875
    logging
876
    optimizations
877
    shared
878
    static
879
    stripping
880
"
881

    
882
PATHS_LIST='
883
    bindir
884
    incdir
885
    libdir
886
    mandir
887
    prefix
888
    shlibdir
889
'
890

    
891
CMDLINE_SET="
892
    $PATHS_LIST
893
    arch
894
    build_suffix
895
    cc
896
    cpu
897
    cross_prefix
898
    extra_version
899
    logfile
900
    source_path
901
    target_os
902
"
903

    
904
# code dependency declarations
905

    
906
# architecture extensions
907
altivec_deps="powerpc"
908
armv5te_deps="armv4l"
909
armv6_deps="armv4l"
910
armvfp_deps="armv4l"
911
iwmmxt_deps="armv4l"
912
mmi_deps="mips"
913
mmx_deps="x86"
914
mmx2_deps="x86 mmx"
915
neon_deps="armv4l"
916
ssse3_deps="x86"
917
vis_deps="sparc"
918

    
919
# common features
920
fft_suggest="fft_mmx"
921
fft_mmx_deps="mmx yasm"
922

    
923
# decoders / encoders
924
aac_decoder_select="fft mdct"
925
ac3_decoder_deps="gpl"
926
ac3_decoder_select="fft mdct"
927
atrac3_decoder_select="fft mdct"
928
cavs_decoder_select="golomb"
929
cook_decoder_select="fft mdct"
930
dca_decoder_select="fft mdct"
931
dxa_decoder_deps="zlib"
932
eac3_decoder_deps="gpl"
933
eac3_decoder_select="fft mdct"
934
ffv1_decoder_select="golomb"
935
flac_decoder_select="golomb"
936
flac_encoder_select="golomb"
937
flashsv_decoder_deps="zlib"
938
flashsv_encoder_deps="zlib"
939
h264_decoder_select="golomb"
940
imc_decoder_select="fft mdct"
941
jpegls_decoder_select="golomb"
942
jpegls_encoder_select="golomb"
943
loco_decoder_select="golomb"
944
mpeg_xvmc_decoder_deps="xvmc"
945
nellymoser_decoder_select="fft mdct"
946
nellymoser_encoder_select="fft mdct"
947
png_decoder_deps="zlib"
948
png_encoder_deps="zlib"
949
qdm2_decoder_select="fft mdct"
950
shorten_decoder_select="golomb"
951
sonic_decoder_select="golomb"
952
sonic_encoder_select="golomb"
953
sonic_ls_encoder_select="golomb"
954
svq3_decoder_select="golomb"
955
vorbis_decoder_select="fft mdct"
956
vorbis_encoder_select="fft mdct"
957
wmav1_decoder_select="fft mdct"
958
wmav1_encoder_select="fft mdct"
959
wmav2_decoder_select="fft mdct"
960
wmav2_encoder_select="fft mdct"
961
zmbv_decoder_deps="zlib"
962
zmbv_encoder_deps="zlib"
963

    
964
# external libraries
965
libamr_nb_decoder_deps="libamr_nb"
966
libamr_nb_encoder_deps="libamr_nb"
967
libamr_wb_decoder_deps="libamr_wb"
968
libamr_wb_encoder_deps="libamr_wb"
969
libdirac_decoder_deps="libdirac !libschroedinger"
970
libdirac_encoder_deps="libdirac"
971
libfaac_encoder_deps="libfaac"
972
libfaad_decoder_deps="libfaad"
973
libfaadbin_decoder_extralibs='$ldl'
974
libgsm_decoder_deps="libgsm"
975
libgsm_encoder_deps="libgsm"
976
libgsm_ms_decoder_deps="libgsm"
977
libgsm_ms_encoder_deps="libgsm"
978
libmp3lame_encoder_deps="libmp3lame"
979
libschroedinger_decoder_deps="libschroedinger"
980
libschroedinger_encoder_deps="libschroedinger"
981
libspeex_decoder_deps="libspeex"
982
libtheora_encoder_deps="libtheora"
983
libvorbis_encoder_deps="libvorbis"
984
libx264_encoder_deps="libx264"
985
libxvid_encoder_deps="libxvid"
986
mpeg4aac_decoder_deps="libfaad"
987

    
988
# demuxers / muxers
989
ac3_demuxer_deps="ac3_parser"
990
audio_beos_demuxer_deps="audio_beos"
991
audio_beos_demuxer_extralibs="-lmedia -lbe"
992
audio_beos_muxer_deps="audio_beos"
993
audio_beos_muxer_extralibs="-lmedia -lbe"
994
avisynth_demuxer_deps="avisynth"
995
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
996
dirac_demuxer_deps="dirac_parser"
997
dv1394_demuxer_deps="dv1394 dv_demuxer"
998
libdc1394_demuxer_deps="libdc1394"
999
libnut_demuxer_deps="libnut"
1000
libnut_muxer_deps="libnut"
1001
mp3_demuxer_deps="mpegaudio_parser"
1002
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1003
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1004
redir_demuxer_deps="network"
1005
rtp_muxer_deps="network rtp_protocol"
1006
rtsp_demuxer_deps="sdp_demuxer"
1007
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1008
v4l_demuxer_deps="linux_videodev_h"
1009
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1010
vfwcap_demuxer_deps="capCreateCaptureWindow"
1011
vfwcap_demuxer_extralibs="-lvfw32"
1012
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1013
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1014

    
1015
# protocols
1016
http_protocol_deps="network"
1017
rtp_protocol_deps="udp_protocol"
1018
tcp_protocol_deps="network"
1019
udp_protocol_deps="network"
1020

    
1021
# filters
1022
movie_filter_deps="avfilter_lavf"
1023

    
1024
# programs
1025
ffplay_deps="sdl"
1026
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1027
ffserver_extralibs='$ldl'
1028
vhook_extralibs='$ldl'
1029

    
1030

    
1031
# default parameters
1032

    
1033
logfile="config.err"
1034

    
1035
# installation paths
1036
prefix_default="/usr/local"
1037
bindir_default='${prefix}/bin'
1038
incdir_default='${prefix}/include'
1039
libdir_default='${prefix}/lib'
1040
mandir_default='${prefix}/share/man'
1041
shlibdir_default="$libdir_default"
1042

    
1043
# toolchain
1044
cc_default="gcc"
1045
yasmexe="yasm"
1046
ar="ar"
1047
nm="nm"
1048
ranlib="ranlib"
1049
strip="strip"
1050
asmalign_pot="unknown"
1051
ln_s="ln -sf"
1052
objformat="elf"
1053

    
1054
# machine
1055
arch=`uname -m`
1056
cpu="generic"
1057

    
1058
# OS
1059
target_os=$(tolower $(uname -s))
1060

    
1061
# libraries
1062
enable bzlib
1063
enable zlib
1064

    
1065
# configurable options
1066
enable debug
1067
enable ffmpeg
1068
enable ffplay
1069
enable ffserver
1070
enable ipv6
1071
enable mpegaudio_hp
1072
enable network
1073
enable optimizations
1074
enable protocols
1075
enable static
1076
enable stripping
1077
vhook="default"
1078

    
1079
# build settings
1080
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1081
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1082
VHOOKSHFLAGS='$(SHFLAGS)'
1083
FFSERVERLDFLAGS=-Wl,-E
1084
LIBPREF="lib"
1085
LIBSUF=".a"
1086
FULLNAME='$(NAME)$(BUILDSUF)'
1087
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1088
SLIBPREF="lib"
1089
SLIBSUF=".so"
1090
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1091
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1092
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1093
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1094

    
1095
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1096
# full relative path for objects in subdirectories for non-recursive Make.
1097
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1098

    
1099
# find source path
1100
source_path="`dirname \"$0\"`"
1101
enable source_path_used
1102
if test -z "$source_path" -o "$source_path" = "." ; then
1103
    source_path="`pwd`"
1104
    disable source_path_used
1105
else
1106
    source_path="`cd \"$source_path\"; pwd`"
1107
    echo "$source_path" | grep -q '[[:blank:]]' &&
1108
        die "Out of tree builds are impossible with whitespace in source path."
1109
fi
1110

    
1111
FFMPEG_CONFIGURATION="$@"
1112

    
1113
find_things(){
1114
    thing=$1
1115
    pattern=$2
1116
    file=$source_path/$3
1117
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1118
}
1119

    
1120
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1121
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1122
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1123
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1124
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1125
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1126
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1127
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1128
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1129
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1130

    
1131
enable $ARCH_EXT_LIST \
1132
       $DECODER_LIST \
1133
       $ENCODER_LIST \
1134
       $PARSER_LIST \
1135
       $BSF_LIST \
1136
       $DEMUXER_LIST \
1137
       $MUXER_LIST \
1138
       $FILTER_LIST \
1139
       $PROTOCOL_LIST \
1140
       $INDEV_LIST \
1141
       $OUTDEV_LIST \
1142

    
1143
die_unknown(){
1144
    echo "Unknown option \"$1\"."
1145
    echo "See $0 --help for available options."
1146
    exit 1
1147
}
1148

    
1149
show_list() {
1150
    suffix=_$1
1151
    shift
1152
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1153
    exit 0
1154
}
1155

    
1156
for opt do
1157
    optval="${opt#*=}"
1158
    case "$opt" in
1159
    --extra-cflags=*) add_cflags "$optval"
1160
    ;;
1161
    --extra-ldflags=*) add_ldflags "$optval"
1162
    ;;
1163
    --extra-libs=*) add_extralibs "$optval"
1164
    ;;
1165
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1166
    ;;
1167
    --enable-debug=*) debuglevel="$optval"
1168
    ;;
1169
    --enable-*=*|--disable-*=*)
1170
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1171
    case "$thing" in
1172
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1173
        *) die_unknown "$opt" ;;
1174
    esac
1175
    ;;
1176
    --enable-?*|--disable-?*)
1177
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1178
    if is_in $option $COMPONENT_LIST; then
1179
        eval $action \$$(toupper ${option%s})_LIST
1180
    elif is_in $option $CMDLINE_SELECT; then
1181
        $action $option
1182
    else
1183
        die_unknown $opt
1184
    fi
1185
    ;;
1186
    --list-*)
1187
        NAME="${opt#--list-}"
1188
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1189
        NAME=${NAME%s}
1190
        eval show_list $NAME \$$(toupper $NAME)_LIST
1191
    ;;
1192
    --help|-h) show_help
1193
    ;;
1194
    *)
1195
    optname="${opt%%=*}"
1196
    optname="${optname#--}"
1197
    optname=$(echo "$optname" | sed 's/-/_/g')
1198
    is_in $optname $CMDLINE_SET || die_unknown $opt
1199
    eval $optname='$optval'
1200
    ;;
1201
    esac
1202
done
1203

    
1204
disabled logging && logfile=/dev/null
1205

    
1206
echo "# $0 $@" > $logfile
1207
set >> $logfile
1208

    
1209
cc_default="${cross_prefix}${cc_default}"
1210
yasmexe="${cross_prefix}${yasmexe}"
1211
ar="${cross_prefix}${ar}"
1212
nm="${cross_prefix}${nm}"
1213
ranlib="${cross_prefix}${ranlib}"
1214
strip="${cross_prefix}${strip}"
1215

    
1216
set_default cc
1217

    
1218
# set temporary file name
1219
if test ! -z "$TMPDIR" ; then
1220
    TMPDIR1="${TMPDIR}"
1221
elif test ! -z "$TEMPDIR" ; then
1222
    TMPDIR1="${TEMPDIR}"
1223
else
1224
    TMPDIR1="/tmp"
1225
fi
1226

    
1227
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1228
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1229
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1230
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1231
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1232
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1233

    
1234
check_cflags -std=c99
1235

    
1236
case "$arch" in
1237
    i386|i486|i586|i686|i86pc|BePC)
1238
        arch="x86_32"
1239
        enable fast_unaligned
1240
    ;;
1241
    x86_64|amd64)
1242
        arch="x86_32"
1243
        enable fast_unaligned
1244
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1245
        int test[sizeof(char*) - 7];
1246
EOF
1247
    ;;
1248
    # armv4l is a subset of armv[567]*l
1249
    arm|armv[4567]*l)
1250
        arch="armv4l"
1251
    ;;
1252
    alpha)
1253
        arch="alpha"
1254
        enable fast_64bit
1255
    ;;
1256
    "Power Macintosh"|ppc|powerpc)
1257
        arch="powerpc"
1258
        enable fast_unaligned
1259
    ;;
1260
    ppc64)
1261
        arch="powerpc"
1262
        enable fast_64bit
1263
        enable fast_unaligned
1264
    ;;
1265
    mips|mipsel|IP*)
1266
        arch="mips"
1267
    ;;
1268
    sun4u|sparc64)
1269
        arch="sparc64"
1270
        enable fast_64bit
1271
    ;;
1272
    sparc)
1273
        arch="sparc"
1274
    ;;
1275
    sh4)
1276
        arch="sh4"
1277
    ;;
1278
    parisc)
1279
        arch="parisc"
1280
    ;;
1281
    parisc64)
1282
        arch="parisc"
1283
        enable fast_64bit
1284
    ;;
1285
    s390|s390x)
1286
        arch="s390"
1287
    ;;
1288
    m68k)
1289
        arch="m68k"
1290
    ;;
1291
    ia64)
1292
        arch="ia64"
1293
        enable fast_64bit
1294
    ;;
1295
    bfin)
1296
        arch="bfin"
1297
    ;;
1298
    *)
1299
        arch="unknown"
1300
    ;;
1301
esac
1302

    
1303
enable $arch
1304
enabled_any x86_32 x86_64 && enable x86
1305
enabled     sparc64       && enable sparc
1306

    
1307
# OS specific
1308
case $target_os in
1309
    beos|haiku|zeta)
1310
        prefix_default="$HOME/config"
1311
        # helps building libavcodec
1312
        add_cflags "-DPIC -fomit-frame-pointer"
1313
        # 3 gcc releases known for BeOS, each with ugly bugs
1314
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1315
        case "$gcc_version" in
1316
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1317
            disable mmx
1318
            ;;
1319
          *20010315*) echo "BeBits gcc"
1320
            add_cflags "-fno-expensive-optimizations"
1321
            ;;
1322
        esac
1323
        SHFLAGS=-nostart
1324
        # enable BeOS things
1325
        enable audio_beos
1326
        # no need for libm, but the inet stuff
1327
        # Check for BONE
1328
        # XXX: actually should check for NOT net_server
1329
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1330
            network_extralibs="-lbind -lsocket"
1331
        else
1332
            enable beos_netserver
1333
            network_extralibs="-lnet"
1334
        fi ;;
1335
    sunos)
1336
        FFSERVERLDFLAGS=""
1337
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1338
        network_extralibs="-lsocket -lnsl"
1339
        ;;
1340
    netbsd)
1341
        oss_demuxer_extralibs="-lossaudio"
1342
        oss_muxer_extralibs="-lossaudio"
1343
        ;;
1344
    openbsd)
1345
        disable need_memalign
1346
        LIBOBJFLAGS='$(PIC)'
1347
        SHFLAGS='-shared'
1348
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1349
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1350
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1351
        oss_demuxer_extralibs="-lossaudio"
1352
        oss_muxer_extralibs="-lossaudio"
1353
        ;;
1354
    freebsd)
1355
        disable need_memalign
1356
        ;;
1357
    bsd/os)
1358
        osextralibs="-lpoll -lgnugetopt"
1359
        strip="strip -d"
1360
        ;;
1361
    darwin)
1362
        disable need_memalign
1363
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1364
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1365
        strip="strip -x"
1366
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1367
        SLIBSUF=".dylib"
1368
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1369
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1370
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1371
        objformat="macho"
1372
        enabled x86_64 && objformat="macho64"
1373
        ;;
1374
    mingw32*)
1375
        target_os=mingw32
1376
        LIBTARGET=i386
1377
        if test $arch = x86_64; then
1378
            disable need_memalign
1379
            LIBTARGET=x64
1380
        fi
1381
        shlibdir_default="$bindir_default"
1382
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1383
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1384
        if enabled swscale; then
1385
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1386
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1387
        fi
1388
        disable ffserver
1389
        SLIBPREF=""
1390
        SLIBSUF=".dll"
1391
        EXESUF=".exe"
1392
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1393
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1394
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1395
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1396
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1397
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1398
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1399
        objformat="win32"
1400
        enable dos_paths
1401
        ;;
1402
    cygwin*)
1403
        target_os=cygwin
1404
        shlibdir_default="$bindir_default"
1405
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1406
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1407
        if enabled swscale; then
1408
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1409
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1410
        fi
1411
        EXESUF=".exe"
1412
        SLIBPREF="cyg"
1413
        SLIBSUF=".dll"
1414
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1415
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1416
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1417
        objformat="win32"
1418
        enable dos_paths
1419
        ;;
1420
    *-dos|freedos|opendos)
1421
        disable ffplay ffserver vhook
1422
        disable $INDEV_LIST $OUTDEV_LIST
1423
        network_extralibs="-lsocket"
1424
        EXESUF=".exe"
1425
        objformat="win32"
1426
        enable dos_paths
1427
        ;;
1428
    linux)
1429
        enable dv1394
1430
        ;;
1431
    irix*)
1432
        target_os=irix
1433
        ranlib="echo ignoring ranlib"
1434
        ;;
1435
    os/2*)
1436
        strip="lxlite"
1437
        ln_s="cp -f"
1438
        EXESUF=".exe"
1439
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1440
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1441
        FFSERVERLDFLAGS=""
1442
        LIBSUF="_s.a"
1443
        SLIBPREF=""
1444
        SLIBSUF=".dll"
1445
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1446
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1447
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1448
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1449
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1450
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1451
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1452
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1453
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1454
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1455
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1456
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1457
        disable vhook
1458
        enable dos_paths
1459
        ;;
1460
    interix)
1461
        disable vhook
1462
        ;;
1463

    
1464
    *)
1465
        target_os="${target_os}-UNKNOWN"
1466
        ;;
1467
esac
1468

    
1469
set_default $PATHS_LIST
1470

    
1471
add_extralibs $osextralibs
1472

    
1473
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1474
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1475

    
1476
test -n "$cross_prefix" && enable cross_compile
1477

    
1478
# we need to build at least one lib type
1479
if ! enabled_any static shared; then
1480
    cat <<EOF
1481
At least one library type must be built.
1482
Specify --enable-static to build the static libraries or --enable-shared to
1483
build the shared libraries as well. To only build the shared libraries specify
1484
--disable-static in addition to --enable-shared.
1485
EOF
1486
    exit 1;
1487
fi
1488

    
1489
disabled static && LIBNAME=""
1490

    
1491
if enabled_any libfaad libfaadbin ; then
1492
    if check_header faad.h; then
1493
        check_cc <<EOF
1494
#include <faad.h>
1495
#ifndef FAAD2_VERSION
1496
ok faad1
1497
#endif
1498
int main(void) { return 0; }
1499
EOF
1500
        test $? = 0 && enable libfaad2
1501
    else
1502
        die "FAAD test failed."
1503
    fi
1504
fi
1505

    
1506

    
1507
if ! enabled gpl; then
1508
    die_gpl_disabled(){
1509
        name=$1
1510
        shift
1511
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1512
    }
1513
    die_gpl_disabled "The Postprocessing code" postproc
1514
    die_gpl_disabled "libx264"                 libx264
1515
    die_gpl_disabled "libxvidcore"             libxvid
1516
    die_gpl_disabled "FAAD2"                   libfaad2
1517
    die_gpl_disabled "The X11 grabber"         x11grab
1518
    die_gpl_disabled "The software scaler"     swscale
1519
fi
1520

    
1521
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1522
    die "libamr is nonfree and --enable-nonfree is not specified."
1523
fi
1524

    
1525
check_deps $ARCH_EXT_LIST
1526

    
1527
test -z "$need_memalign" && need_memalign="$mmx"
1528

    
1529
#Darwin CC versions
1530
if test $target_os = darwin; then
1531
    if $cc -v 2>&1 | grep -q xlc; then
1532
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1533
    else
1534
        add_cflags "-pipe"
1535
        check_cflags "-force_cpusubtype_ALL"
1536
        check_cflags "-Wno-sign-compare"
1537
        enabled shared || check_cflags -mdynamic-no-pic
1538
    fi
1539
fi
1540

    
1541
disabled optimizations || check_cflags -fomit-frame-pointer
1542

    
1543
# Add processor-specific flags
1544
if test $cpu != "generic"; then
1545
    warn_altivec(){
1546
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1547
    }
1548
    case $cpu in
1549
        601|ppc601|PowerPC601)
1550
            add_cflags "-mcpu=601"
1551
            warn_altivec enabled PPC601
1552
        ;;
1553
        603*|ppc603*|PowerPC603*)
1554
            add_cflags "-mcpu=603"
1555
            warn_altivec enabled PPC603
1556
        ;;
1557
        604*|ppc604*|PowerPC604*)
1558
            add_cflags "-mcpu=604"
1559
            warn_altivec enabled PPC604
1560
        ;;
1561
        G3|g3|75*|ppc75*|PowerPC75*)
1562
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1563
            warn_altivec enabled PPC75x
1564
        ;;
1565
        G4|g4|745*|ppc745*|PowerPC745*)
1566
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1567
            warn_altivec disabled PPC745x
1568
        ;;
1569
        74*|ppc74*|PowerPC74*)
1570
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1571
            warn_altivec disabled PPC74xx
1572
        ;;
1573
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1574
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1575
            warn_altivec disabled PPC970
1576
            enable ppc64
1577
        ;;
1578
        Cell|CELL|cell)
1579
            add_cflags "-mcpu=cell"
1580
            warn_altivec disabled Cell
1581
            enable ppc64
1582
        ;;
1583
        # targets that do NOT support conditional mov (cmov)
1584
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1585
            add_cflags "-march=$cpu"
1586
            disable cmov
1587
        ;;
1588
        # targets that do support conditional mov (cmov)
1589
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1590
            add_cflags "-march=$cpu"
1591
            enable cmov
1592
            enable fast_cmov
1593
        ;;
1594
        # targets that do support conditional mov but on which it's slow
1595
        pentium4|pentium4m|prescott|nocona)
1596
            add_cflags "-march=$cpu"
1597
            enable cmov
1598
            disable fast_cmov
1599
        ;;
1600
        sparc64)
1601
            add_cflags "-mcpu=v9"
1602
        ;;
1603
        arm11*|cortex*)
1604
            add_cflags "-mcpu=$cpu"
1605
            enable fast_unaligned
1606
        ;;
1607
        armv*)
1608
            add_cflags "-march=$cpu"
1609
        ;;
1610
        arm*)
1611
            add_cflags "-mcpu=$cpu"
1612
        ;;
1613
        *)
1614
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1615
        ;;
1616
    esac
1617
fi
1618

    
1619
# make sure we can execute files in $TMPDIR
1620
cat > $TMPSH 2>> $logfile <<EOF
1621
#! /bin/sh
1622
EOF
1623
chmod +x $TMPSH >> $logfile 2>&1
1624
if ! $TMPSH >> $logfile 2>&1; then
1625
    cat <<EOF
1626
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1627
variable to another directory and make sure that $TMPDIR1 is not mounted
1628
noexec.
1629
EOF
1630
    die "Sanity test failed."
1631
fi
1632
rm $TMPSH
1633

    
1634
# compiler sanity check
1635
check_exec <<EOF
1636
int main(void){ return 0; }
1637
EOF
1638
if test "$?" != 0; then
1639
    echo "$cc is unable to create an executable file."
1640
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1641
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1642
        echo "Only do this if you know what cross compiling means."
1643
    fi
1644
    die "C compiler test failed."
1645
fi
1646

    
1647
check_cc <<EOF || die "Symbol mangling check failed."
1648
int ff_extern;
1649
EOF
1650
sym=$($nm -P -g $TMPO | grep ff_extern)
1651
extern_prefix=${sym%%ff_extern*}
1652

    
1653
check_asm inline_asm '""'
1654

    
1655
if enabled x86; then
1656
    # check whether EBP is available on x86
1657
    # As 'i' is stored on the stack, this program will crash
1658
    # if the base pointer is used to access it because the
1659
    # base pointer is cleared in the inline assembly code.
1660
    check_exec_crash <<EOF && enable ebp_available
1661
    volatile int i=0;
1662
    __asm__ volatile (
1663
        "xorl %%ebp, %%ebp"
1664
    ::: "%ebp");
1665
    return i;
1666
EOF
1667

    
1668
    # check wether EBX is available on x86
1669
    check_asm ebx_available '"":::"%ebx"'
1670

    
1671
    # check whether binutils is new enough to compile SSSE3/MMX2
1672
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1673
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1674

    
1675
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1676

    
1677
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1678
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1679
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1680
    case "$objformat" in
1681
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1682
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1683
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1684
    esac
1685
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1686
fi
1687

    
1688
# check for assembler specific support
1689

    
1690
if test $arch = "powerpc"; then
1691
    check_asm dcbzl '"dcbzl 0, 1"'
1692
fi
1693

    
1694
# check for SIMD availability
1695

    
1696
# AltiVec flags: The FSF version of GCC differs from the Apple version
1697
if enabled altivec; then
1698
    check_cflags -maltivec -mabi=altivec &&
1699
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1700
        check_cflags -faltivec
1701

    
1702
    # check if our compiler supports Motorola AltiVec C API
1703
    check_cc <<EOF || disable altivec
1704
$inc_altivec_h
1705
int main(void) {
1706
    vector signed int v1, v2, v3;
1707
    v1 = vec_add(v2,v3);
1708
    return 0;
1709
}
1710
EOF
1711

    
1712
    # check if our compiler supports braces for vector declarations
1713
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1714
$inc_altivec_h
1715
int main (void) { (vector int) {1}; return 0; }
1716
EOF
1717
fi
1718

    
1719
# We have to check if pld is a nop and disable it.
1720
enabled armv4l  && check_asm pld     '"pld [r0]"'
1721
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1722
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1723
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1724
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1725
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1726
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1727
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1728

    
1729
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1730

    
1731
# ---
1732
# big/little-endian test
1733
check_cc <<EOF || die "endian test failed"
1734
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1735
EOF
1736
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1737

    
1738
# ---
1739
# check availability of some header files
1740

    
1741
if check_func dlopen; then
1742
    ldl=
1743
elif check_func dlopen -ldl; then
1744
    ldl=-ldl
1745
fi
1746

    
1747
check_func  fork
1748
check_func  gethrtime
1749
check_func  getrusage
1750
check_func  inet_aton $network_extralibs
1751
check_func  memalign
1752
check_func  mkstemp
1753
check_func_headers windows.h GetProcessTimes
1754

    
1755
check_header conio.h
1756
check_header dlfcn.h
1757
check_header malloc.h
1758
check_header poll.h
1759
check_header sys/mman.h
1760
check_header sys/resource.h
1761
check_header sys/select.h
1762
check_header termios.h
1763

    
1764
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1765
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1766
fi
1767

    
1768
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1769
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1770

    
1771
# check for some common methods of building with pthread support
1772
# do this before the optional library checks as some of them require pthreads
1773
if enabled pthreads; then
1774
    if check_func pthread_create; then
1775
        :
1776
    elif check_func pthread_create -pthread; then
1777
        add_cflags -pthread
1778
        add_extralibs -pthread
1779
    elif check_func pthread_create -pthreads; then
1780
        add_cflags -pthreads
1781
        add_extralibs -pthreads
1782
    elif check_func pthread_create -lpthreadGC2; then
1783
        add_extralibs -lpthreadGC2
1784
    elif ! check_lib pthread.h pthread_create -lpthread; then
1785
        die "ERROR: can't find pthreads library"
1786
    fi
1787
fi
1788

    
1789
for thread in $THREADS_LIST; do
1790
    if enabled $thread; then
1791
        test -n "$thread_type" &&
1792
            die "ERROR: Only one thread type must be selected." ||
1793
            thread_type="$thread"
1794
    fi
1795
done
1796

    
1797
check_lib math.h sin -lm
1798

    
1799
# test for C99 functions in math.h
1800
for func in llrint lrint lrintf round roundf; do
1801
    check_exec <<EOF && enable $func || disable $func
1802
#include <math.h>
1803
int main(void) { return ($func(3.999f) > 0)?0:1; }
1804
EOF
1805
done
1806

    
1807
# these are off by default, so fail if requested and not available
1808
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1809
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1810
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1811
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1812
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1813
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1814
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1815
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1816
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1817
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1818
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1819
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1820
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1821
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1822
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1823
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1824
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
1825
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1826
                        die "ERROR: libx264 version must be >= 0.65."; }
1827
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1828
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1829

    
1830
# libdc1394 check
1831
if enabled libdc1394; then
1832
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1833
        enable libdc1394_2; } ||
1834
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1835
        enable libdc1394_1; } ||
1836
    die "ERROR: No version of libdc1394 found "
1837
fi
1838

    
1839

    
1840
_restrict=
1841
for restrict_keyword in restrict __restrict__ __restrict; do
1842
    check_cc <<EOF && _restrict=$restrict_keyword && break
1843
void foo(char * $restrict_keyword p);
1844
EOF
1845
done
1846

    
1847
test "$vhook" = "default" && vhook="$dlopen"
1848

    
1849
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1850
    disable vhook
1851
    echo
1852
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1853
    echo "Patches welcome."
1854
    echo
1855
fi
1856

    
1857
if enabled vhook; then
1858
    check_ldflags -rdynamic
1859
    check_ldflags -export-dynamic
1860
fi
1861

    
1862
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1863
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1864

    
1865
##########################################
1866
# SDL check
1867

    
1868
disable sdl_too_old
1869
disable sdl
1870
SDL_CONFIG="${cross_prefix}sdl-config"
1871
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1872
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1873
    temp_cflags $sdl_cflags
1874
    temp_extralibs `"${SDL_CONFIG}" --libs`
1875
    if check_lib2 SDL.h SDL_Init; then
1876
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1877
        if test "$_sdlversion" -lt 121 ; then
1878
            enable sdl_too_old
1879
        else
1880
            enable sdl
1881
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1882
#include <SDL.h>
1883
int main(int argc, char **argv){
1884
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1885
    int w = vi->current_w;
1886
    return 0;
1887
}
1888
EOF
1889
        fi
1890
    fi
1891
    restore_flags
1892
fi
1893

    
1894
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1895

    
1896
##########################################
1897
# Network check
1898

    
1899
if enabled network; then
1900
    check_type sys/socket.h socklen_t
1901
    # Prefer arpa/inet.h over winsock2
1902
    if check_header arpa/inet.h ; then
1903
        check_func closesocket
1904
    elif check_header winsock2.h ; then
1905
        network_extralibs="-lws2_32"
1906
        check_type ws2tcpip.h socklen_t
1907
        check_func_headers winsock2.h closesocket
1908
    fi
1909
fi
1910

    
1911
##########################################
1912
# IPv6 check
1913

    
1914
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1915
#include <sys/types.h>
1916
#include <sys/socket.h>
1917
#include <netinet/in.h>
1918
#include <netdb.h>
1919
int main(void) {
1920
    struct sockaddr_storage saddr;
1921
    struct ipv6_mreq mreq6;
1922
    getaddrinfo(0,0,0,0);
1923
    getnameinfo(0,0,0,0,0,0,0);
1924
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1925
}
1926
EOF
1927

    
1928
check_header linux/videodev.h
1929
check_header linux/videodev2.h
1930
check_header sys/videoio.h
1931

    
1932
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1933

    
1934
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1935
{ check_header dev/bktr/ioctl_meteor.h &&
1936
  check_header dev/bktr/ioctl_bt848.h; } ||
1937
{ check_header machine/ioctl_meteor.h &&
1938
  check_header machine/ioctl_bt848.h; } ||
1939
{ check_header dev/video/meteor/ioctl_meteor.h &&
1940
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1941
check_header dev/ic/bt8xx.h
1942

    
1943
check_header sys/soundcard.h
1944
check_header soundcard.h
1945

    
1946
# deal with the X11 frame grabber
1947
enabled x11grab                         &&
1948
check_header X11/Xlib.h                 &&
1949
check_header X11/extensions/XShm.h      &&
1950
check_func XOpenDisplay -lX11           &&
1951
check_func XShmCreateImage -lX11 -lXext
1952

    
1953
enabled debug && add_cflags -g"$debuglevel"
1954

    
1955
# add some useful compiler flags if supported
1956
check_cflags -Wdeclaration-after-statement
1957
check_cflags -Wall
1958
check_cflags -Wno-switch
1959
check_cflags -Wdisabled-optimization
1960
check_cflags -Wpointer-arith
1961
check_cflags -Wredundant-decls
1962
check_cflags -Wno-pointer-sign
1963
check_cflags -Wcast-qual
1964
check_cflags -Wwrite-strings
1965
check_cflags -Wtype-limits
1966
enabled extra_warnings && check_cflags -Winline
1967

    
1968
# add some linker flags
1969
check_ldflags -Wl,--warn-common
1970
check_ldflags -Wl,--as-needed
1971
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
1972
check_ldflags -Wl,-Bsymbolic
1973

    
1974
if enabled small; then
1975
    check_cflags -Os            # not all compilers support -Os
1976
    optimizations="small"
1977
elif enabled optimizations; then
1978
    if $cc -v 2>&1 | grep -q xlc; then
1979
        add_cflags  "-O5"
1980
        add_ldflags "-O5"
1981
    else
1982
        add_cflags "-O3"
1983
    fi
1984
fi
1985
check_cflags -fno-math-errno
1986
check_cflags -fno-signed-zeros
1987

    
1988
# add some flags for Intel C Compiler
1989
if $cc --version 2> /dev/null | grep -q Intel; then
1990
  # Just warnings, no remarks
1991
  check_cflags -w1
1992
  # -wd: Disable following warnings
1993
  # 144, 167, 556: -Wno-pointer-sign
1994
  # 10006: ignoring unknown option -fno-signed-zeros
1995
  # 10156: ignoring option '-W'; no argument required
1996
  check_cflags -wd144,167,556,10006,10156
1997
  # 11030: Warning unknown option --as-needed
1998
  # 10156: ignoring option '-export'; no argument required
1999
  check_ldflags -wd10156,11030
2000
  # Allow to compile with optimizations
2001
  check_ldflags -march=$cpu
2002
fi
2003

    
2004
# PIC flags for shared library objects where they are needed
2005
if enabled shared; then
2006
    # LIBOBJFLAGS may have already been set in the OS configuration
2007
    if test -z "$LIBOBJFLAGS" ; then
2008
        case "$arch" in
2009
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2010
        esac
2011
    fi
2012
fi
2013

    
2014
if enabled gprof; then
2015
    add_cflags  "-p"
2016
    add_ldflags "-p"
2017
fi
2018

    
2019
VHOOKCFLAGS="-fPIC"
2020

    
2021
# Find out if the .align argument is a power of two or not.
2022
if test $asmalign_pot = "unknown"; then
2023
    disable asmalign_pot
2024
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2025
fi
2026

    
2027
enabled_any $DECODER_LIST      && enable decoders
2028
enabled_any $ENCODER_LIST      && enable encoders
2029
enabled_any $BSF_LIST          && enable bsfs
2030
enabled_any $DEMUXER_LIST      && enable demuxers
2031
enabled_any $MUXER_LIST        && enable muxers
2032
enabled_any $FILTER_LIST       && enable filters
2033
enabled_any $INDEV_LIST        && enable demuxers
2034
enabled_any $OUTDEV_LIST       && enable muxers
2035
enabled_any $PROTOCOL_LIST     && enable protocols
2036

    
2037
enabled_any $THREADS_LIST      && enable threads
2038

    
2039
check_deps $CONFIG_LIST       \
2040
           $CONFIG_EXTRA      \
2041
           $HAVE_LIST         \
2042
           $DECODER_LIST      \
2043
           $ENCODER_LIST      \
2044
           $PARSER_LIST       \
2045
           $BSF_LIST          \
2046
           $DEMUXER_LIST      \
2047
           $MUXER_LIST        \
2048
           $FILTER_LIST       \
2049
           $INDEV_LIST        \
2050
           $OUTDEV_LIST       \
2051
           $PROTOCOL_LIST     \
2052

    
2053
enabled libdc1394 && append pkg_requires "libraw1394"
2054
enabled libdirac  && append pkg_requires "dirac"
2055
enabled libtheora && append pkg_requires "theora"
2056
enabled libvorbis && append pkg_requires "vorbisenc"
2057

    
2058
echo "install prefix            $prefix"
2059
echo "source path               $source_path"
2060
echo "C compiler                $cc"
2061
echo ".align is power-of-two    $asmalign_pot"
2062
echo "ARCH                      $arch ($cpu)"
2063
if test "$build_suffix" != ""; then
2064
    echo "build suffix              $build_suffix"
2065
fi
2066
if test "$extra_version" != ""; then
2067
    echo "version string suffix     $extra_version"
2068
fi
2069
echo "big-endian                ${bigendian-no}"
2070
if test $arch = "x86_32" -o $arch = "x86_64"; then
2071
    echo "yasm                      ${yasm-no}"
2072
    echo "MMX enabled               ${mmx-no}"
2073
    echo "CMOV enabled              ${cmov-no}"
2074
    echo "CMOV is fast              ${fast_cmov-no}"
2075
    echo "EBX available             ${ebx_available-no}"
2076
    echo "EBP available             ${ebp_available-no}"
2077
fi
2078
if test $arch = "armv4l"; then
2079
    echo "ARMv5TE enabled           ${armv5te-no}"
2080
    echo "ARMv6 enabled             ${armv6-no}"
2081
    echo "ARM VFP enabled           ${armvfp-no}"
2082
    echo "IWMMXT enabled            ${iwmmxt-no}"
2083
    echo "NEON enabled              ${neon-no}"
2084
fi
2085
if test $arch = "mips"; then
2086
    echo "MMI enabled               ${mmi-no}"
2087
fi
2088
if test $arch = "powerpc"; then
2089
    echo "AltiVec enabled           ${altivec-no}"
2090
    echo "dcbzl available           ${dcbzl-no}"
2091
fi
2092
echo "gprof enabled             ${gprof-no}"
2093
echo "debug symbols             ${debug-no}"
2094
echo "strip symbols             ${stripping-no}"
2095
echo "optimizations             ${optimizations-no}"
2096
echo "static                    ${static-no}"
2097
echo "shared                    ${shared-no}"
2098
echo "postprocessing support    ${postproc-no}"
2099
echo "software scaler enabled   ${swscale-no}"
2100
echo "new filter support        ${avfilter-no}"
2101
echo "filters using lavformat   ${avfilter_lavf-no}"
2102
echo "video hooking             ${vhook-no}"
2103
if enabled vhook; then
2104
    echo "Imlib2 support            ${imlib2-no}"
2105
    echo "FreeType support          ${freetype2-no}"
2106
fi
2107
echo "network support           ${network-no}"
2108
if enabled network; then
2109
    echo "IPv6 support              ${ipv6-no}"
2110
fi
2111
echo "threading support         ${thread_type-no}"
2112
echo "SDL support               ${sdl-no}"
2113
if enabled sdl_too_old; then
2114
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2115
fi
2116
echo "Sun medialib support      ${mlib-no}"
2117
echo "AVISynth enabled          ${avisynth-no}"
2118
echo "libamr-nb support         ${libamr_nb-no}"
2119
echo "libamr-wb support         ${libamr_wb-no}"
2120
echo "libdc1394 support         ${libdc1394-no}"
2121
echo "libdirac enabled          ${libdirac-no}"
2122
echo "libfaac enabled           ${libfaac-no}"
2123
echo "libfaad enabled           ${libfaad-no}"
2124
echo "libfaad dlopened          ${libfaadbin-no}"
2125
echo "libgsm enabled            ${libgsm-no}"
2126
echo "libmp3lame enabled        ${libmp3lame-no}"
2127
echo "libnut enabled            ${libnut-no}"
2128
echo "libschroedinger enabled   ${libschroedinger-no}"
2129
echo "libspeex enabled          ${libspeex-no}"
2130
echo "libtheora enabled         ${libtheora-no}"
2131
echo "libvorbis enabled         ${libvorbis-no}"
2132
echo "libx264 enabled           ${libx264-no}"
2133
echo "libxvid enabled           ${libxvid-no}"
2134
echo "zlib enabled              ${zlib-no}"
2135
echo "bzlib enabled             ${bzlib-no}"
2136
echo
2137

    
2138
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2139
    echo "Enabled ${type}s:"
2140
    eval list=\$$(toupper $type)_LIST
2141
    for part in $list; do
2142
        enabled $part && echo ${part%_*}
2143
    done | sort | pr -3 -t
2144
    echo
2145
done
2146

    
2147
license="LGPL"
2148
if enabled nonfree; then
2149
    license="unredistributable"
2150
elif enabled gpl; then
2151
    license="GPL"
2152
fi
2153

    
2154
echo "License: $license"
2155

    
2156
echo "Creating config.mak and config.h..."
2157

    
2158
echo "# Automatically generated by configure - do not modify!" > config.mak
2159
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2160
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2161
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2162
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2163

    
2164
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2165
echo "prefix=$prefix" >> config.mak
2166
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2167
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2168
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2169
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2170
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2171
echo "CC=$cc" >> config.mak
2172
echo "YASM=$yasmexe" >> config.mak
2173
echo "AR=$ar" >> config.mak
2174
echo "RANLIB=$ranlib" >> config.mak
2175
echo "LN_S=$ln_s" >> config.mak
2176
enabled stripping &&
2177
    echo "STRIP=$strip" >> config.mak ||
2178
    echo "STRIP=echo ignoring strip" >> config.mak
2179

    
2180
echo "OPTFLAGS=$CFLAGS" >> config.mak
2181
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2182
echo "LDFLAGS=$LDFLAGS" >> config.mak
2183
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2184
echo "SHFLAGS=$SHFLAGS" >> config.mak
2185
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2186
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2187
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2188
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2189
echo "BUILD_STATIC=$static" >> config.mak
2190
echo "BUILDSUF=$build_suffix" >> config.mak
2191
echo "FULLNAME=$FULLNAME" >> config.mak
2192
echo "LIBPREF=$LIBPREF" >> config.mak
2193
echo "LIBSUF=$LIBSUF" >> config.mak
2194
echo "LIBNAME=$LIBNAME" >> config.mak
2195
echo "SLIBPREF=$SLIBPREF" >> config.mak
2196
echo "SLIBSUF=$SLIBSUF" >> config.mak
2197
echo "EXESUF=$EXESUF" >> config.mak
2198
echo "EXTRA_VERSION=$extra_version" >> config.mak
2199
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2200

    
2201
if enabled bigendian; then
2202
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2203
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2204
fi
2205

    
2206
if enabled sdl; then
2207
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2208
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2209
fi
2210
if enabled texi2html; then
2211
    echo "BUILD_DOC=yes" >> config.mak
2212
fi
2213

    
2214
get_version(){
2215
    name=$1
2216
    file=$source_path/$2
2217
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2218
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2219
    lcname=$(tolower $name)
2220
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2221
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2222
}
2223

    
2224
get_version LIBSWSCALE  libswscale/swscale.h
2225
get_version LIBPOSTPROC libpostproc/postprocess.h
2226
get_version LIBAVCODEC  libavcodec/avcodec.h
2227
get_version LIBAVDEVICE libavdevice/avdevice.h
2228
get_version LIBAVFORMAT libavformat/avformat.h
2229
get_version LIBAVUTIL   libavutil/avutil.h
2230
get_version LIBAVFILTER libavfilter/avfilter.h
2231

    
2232
if enabled shared; then
2233
    echo "BUILD_SHARED=yes" >> config.mak
2234
    echo "PIC=-fPIC -DPIC" >> config.mak
2235
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2236
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2237
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2238
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2239
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2240
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2241
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2242
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2243
fi
2244
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2245
echo "EXTRALIBS=$extralibs" >> config.mak
2246

    
2247
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2248
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2249
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2250
                                      $CONFIG_EXTRA      \
2251
                                      $DECODER_LIST      \
2252
                                      $ENCODER_LIST      \
2253
                                      $PARSER_LIST       \
2254
                                      $BSF_LIST          \
2255
                                      $DEMUXER_LIST      \
2256
                                      $MUXER_LIST        \
2257
                                      $FILTER_LIST       \
2258
                                      $PROTOCOL_LIST     \
2259
                                      $INDEV_LIST        \
2260
                                      $OUTDEV_LIST       \
2261

    
2262
echo "#define restrict $_restrict" >> $TMPH
2263

    
2264
if enabled small; then
2265
    echo "#define av_always_inline"  >> $TMPH
2266
fi
2267

    
2268
echo "SRC_PATH=\"$source_path\"" >> config.mak
2269
echo "SRC_PATH_BARE=$source_path" >> config.mak
2270
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2271

    
2272
# Apparently it's not possible to portably echo a backslash.
2273
enabled asmalign_pot &&
2274
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2275
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2276

    
2277
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2278

    
2279
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2280

    
2281
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2282
cmp -s $TMPH config.h &&
2283
    echo "config.h is unchanged" ||
2284
    mv -f $TMPH config.h
2285

    
2286
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2287

    
2288
# build tree in object directory if source path is different from current one
2289
if enabled source_path_used; then
2290
    DIRS="\
2291
        doc               \
2292
        libavcodec        \
2293
        libavcodec/alpha  \
2294
        libavcodec/armv4l \
2295
        libavcodec/bfin   \
2296
        libavcodec/i386   \
2297
        libavcodec/mlib   \
2298
        libavcodec/ppc    \
2299
        libavcodec/sh4    \
2300
        libavcodec/sparc  \
2301
        libavdevice       \
2302
        libavfilter       \
2303
        libavformat       \
2304
        libavutil         \
2305
        libpostproc       \
2306
        libswscale        \
2307
        tests             \
2308
        tools             \
2309
        vhook             \
2310
        "
2311
    FILES="\
2312
        Makefile             \
2313
        common.mak           \
2314
        subdir.mak           \
2315
        doc/texi2pod.pl      \
2316
        libavcodec/Makefile  \
2317
        libavdevice/Makefile \
2318
        libavfilter/Makefile \
2319
        libavformat/Makefile \
2320
        libavutil/Makefile   \
2321
        libpostproc/Makefile \
2322
        libswscale/Makefile  \
2323
        "
2324
    for dir in $DIRS ; do
2325
        mkdir -p $dir
2326
    done
2327
    for f in $FILES ; do
2328
        $ln_s "$source_path/$f" $f
2329
    done
2330
fi
2331

    
2332

    
2333
# build pkg-config files
2334

    
2335
pkgconfig_generate(){
2336
name=$1
2337
shortname=${name#lib}
2338
comment=$2
2339
version=$3
2340
libs=$4
2341
requires=$5
2342
cat <<EOF > $name/$name.pc
2343
prefix=$prefix
2344
exec_prefix=\${prefix}
2345
libdir=$libdir
2346
includedir=$incdir
2347

    
2348
Name: $name
2349
Description: $comment
2350
Version: $version
2351
Requires: $(disabled shared && echo $requires)
2352
Requires.private: $(enabled shared && echo $requires)
2353
Conflicts:
2354
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2355
Libs.private: $(enabled shared && echo $libs)
2356
Cflags: -I\${includedir}
2357
EOF
2358
cat <<EOF > $name/$name-uninstalled.pc
2359
prefix=
2360
exec_prefix=
2361
libdir=\${pcfiledir}
2362
includedir=${source_path}
2363

    
2364
Name: $name
2365
Description: $comment
2366
Version: $version
2367
Requires: $requires
2368
Conflicts:
2369
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2370
Cflags: -I\${includedir}
2371
EOF
2372
}
2373

    
2374
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2375
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2376
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2377
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2378
enabled avfilter &&
2379
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2380
enabled postproc &&
2381
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2382
if enabled swscale; then
2383
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2384
else
2385
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2386
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2387
fi