Statistics
| Branch: | Revision:

ffmpeg / configure @ 47a158cb

History | View | Annotate | Download (68.2 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
    gpl
727
    gprof
728
    gray
729
    hardcoded_tables
730
    ipv6
731
    libamr_nb
732
    libamr_wb
733
    libdc1394
734
    libdirac
735
    libfaac
736
    libfaad
737
    libfaadbin
738
    libgsm
739
    libmp3lame
740
    libnut
741
    libschroedinger
742
    libspeex
743
    libtheora
744
    libvorbis
745
    libx264
746
    libxvid
747
    mdct
748
    memalign_hack
749
    mlib
750
    mpegaudio_hp
751
    network
752
    nonfree
753
    postproc
754
    powerpc_perf
755
    small
756
    swscale
757
    vhook
758
    x11grab
759
    zlib
760
"
761

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

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

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

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

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

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

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

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

    
903
# code dependency declarations
904

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

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

    
922
# decoders / encoders
923
aac_decoder_select="fft mdct"
924
ac3_decoder_deps="gpl"
925
ac3_decoder_select="fft mdct"
926
atrac3_decoder_select="fft mdct"
927
cook_decoder_select="fft mdct"
928
dca_decoder_select="fft mdct"
929
dxa_decoder_deps="zlib"
930
eac3_decoder_deps="gpl"
931
eac3_decoder_select="fft mdct"
932
flashsv_decoder_deps="zlib"
933
flashsv_encoder_deps="zlib"
934
imc_decoder_select="fft mdct"
935
mpeg_xvmc_decoder_deps="xvmc"
936
nellymoser_decoder_select="fft mdct"
937
nellymoser_encoder_select="fft mdct"
938
png_decoder_deps="zlib"
939
png_encoder_deps="zlib"
940
qdm2_decoder_select="fft mdct"
941
vorbis_decoder_select="fft mdct"
942
vorbis_encoder_select="fft mdct"
943
wmav1_decoder_select="fft mdct"
944
wmav1_encoder_select="fft mdct"
945
wmav2_decoder_select="fft mdct"
946
wmav2_encoder_select="fft mdct"
947
zmbv_decoder_deps="zlib"
948
zmbv_encoder_deps="zlib"
949

    
950
# external libraries
951
libamr_nb_decoder_deps="libamr_nb"
952
libamr_nb_encoder_deps="libamr_nb"
953
libamr_wb_decoder_deps="libamr_wb"
954
libamr_wb_encoder_deps="libamr_wb"
955
libdirac_decoder_deps="libdirac !libschroedinger"
956
libdirac_encoder_deps="libdirac"
957
libfaac_encoder_deps="libfaac"
958
libfaad_decoder_deps="libfaad"
959
libfaadbin_decoder_extralibs='$ldl'
960
libgsm_decoder_deps="libgsm"
961
libgsm_encoder_deps="libgsm"
962
libgsm_ms_decoder_deps="libgsm"
963
libgsm_ms_encoder_deps="libgsm"
964
libmp3lame_encoder_deps="libmp3lame"
965
libschroedinger_decoder_deps="libschroedinger"
966
libschroedinger_encoder_deps="libschroedinger"
967
libspeex_decoder_deps="libspeex"
968
libtheora_encoder_deps="libtheora"
969
libvorbis_encoder_deps="libvorbis"
970
libx264_encoder_deps="libx264"
971
libxvid_encoder_deps="libxvid"
972
mpeg4aac_decoder_deps="libfaad"
973

    
974
# demuxers / muxers
975
ac3_demuxer_deps="ac3_parser"
976
audio_beos_demuxer_deps="audio_beos"
977
audio_beos_demuxer_extralibs="-lmedia -lbe"
978
audio_beos_muxer_deps="audio_beos"
979
audio_beos_muxer_extralibs="-lmedia -lbe"
980
avisynth_demuxer_deps="avisynth"
981
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
982
dirac_demuxer_deps="dirac_parser"
983
dv1394_demuxer_deps="dv1394 dv_demuxer"
984
libdc1394_demuxer_deps="libdc1394"
985
libnut_demuxer_deps="libnut"
986
libnut_muxer_deps="libnut"
987
mp3_demuxer_deps="mpegaudio_parser"
988
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
989
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
990
redir_demuxer_deps="network"
991
rtp_muxer_deps="network rtp_protocol"
992
rtsp_demuxer_deps="sdp_demuxer"
993
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
994
v4l_demuxer_deps="linux_videodev_h"
995
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
996
vfwcap_demuxer_deps="capCreateCaptureWindow"
997
vfwcap_demuxer_extralibs="-lvfw32"
998
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
999
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1000

    
1001
# protocols
1002
http_protocol_deps="network"
1003
rtp_protocol_deps="udp_protocol"
1004
tcp_protocol_deps="network"
1005
udp_protocol_deps="network"
1006

    
1007
# filters
1008
movie_filter_deps="avfilter_lavf"
1009

    
1010
# programs
1011
ffplay_deps="sdl"
1012
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1013
ffserver_extralibs='$ldl'
1014
vhook_extralibs='$ldl'
1015

    
1016

    
1017
# default parameters
1018

    
1019
logfile="config.err"
1020

    
1021
# installation paths
1022
prefix_default="/usr/local"
1023
bindir_default='${prefix}/bin'
1024
incdir_default='${prefix}/include'
1025
libdir_default='${prefix}/lib'
1026
mandir_default='${prefix}/share/man'
1027
shlibdir_default="$libdir_default"
1028

    
1029
# toolchain
1030
cc_default="gcc"
1031
yasmexe="yasm"
1032
ar="ar"
1033
nm="nm"
1034
ranlib="ranlib"
1035
strip="strip"
1036
asmalign_pot="unknown"
1037
ln_s="ln -sf"
1038
objformat="elf"
1039

    
1040
# machine
1041
arch=`uname -m`
1042
cpu="generic"
1043

    
1044
# OS
1045
target_os=$(tolower $(uname -s))
1046

    
1047
# libraries
1048
enable bzlib
1049
enable zlib
1050

    
1051
# configurable options
1052
enable debug
1053
enable ffmpeg
1054
enable ffplay
1055
enable ffserver
1056
enable ipv6
1057
enable mpegaudio_hp
1058
enable network
1059
enable optimizations
1060
enable protocols
1061
enable static
1062
enable stripping
1063
vhook="default"
1064

    
1065
# build settings
1066
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1067
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1068
VHOOKSHFLAGS='$(SHFLAGS)'
1069
FFSERVERLDFLAGS=-Wl,-E
1070
LIBPREF="lib"
1071
LIBSUF=".a"
1072
FULLNAME='$(NAME)$(BUILDSUF)'
1073
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1074
SLIBPREF="lib"
1075
SLIBSUF=".so"
1076
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1077
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1078
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1079
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1080

    
1081
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1082
# full relative path for objects in subdirectories for non-recursive Make.
1083
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,"'
1084

    
1085
# find source path
1086
source_path="`dirname \"$0\"`"
1087
enable source_path_used
1088
if test -z "$source_path" -o "$source_path" = "." ; then
1089
    source_path="`pwd`"
1090
    disable source_path_used
1091
else
1092
    source_path="`cd \"$source_path\"; pwd`"
1093
    echo "$source_path" | grep -q '[[:blank:]]' &&
1094
        die "Out of tree builds are impossible with whitespace in source path."
1095
fi
1096

    
1097
FFMPEG_CONFIGURATION="$@"
1098

    
1099
find_things(){
1100
    thing=$1
1101
    pattern=$2
1102
    file=$source_path/$3
1103
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1104
}
1105

    
1106
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1107
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1108
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1109
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1110
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1111
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1112
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1113
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1114
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1115
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1116

    
1117
enable $ARCH_EXT_LIST \
1118
       $DECODER_LIST \
1119
       $ENCODER_LIST \
1120
       $PARSER_LIST \
1121
       $BSF_LIST \
1122
       $DEMUXER_LIST \
1123
       $MUXER_LIST \
1124
       $FILTER_LIST \
1125
       $PROTOCOL_LIST \
1126
       $INDEV_LIST \
1127
       $OUTDEV_LIST \
1128

    
1129
die_unknown(){
1130
    echo "Unknown option \"$1\"."
1131
    echo "See $0 --help for available options."
1132
    exit 1
1133
}
1134

    
1135
show_list() {
1136
    suffix=_$1
1137
    shift
1138
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1139
    exit 0
1140
}
1141

    
1142
for opt do
1143
    optval="${opt#*=}"
1144
    case "$opt" in
1145
    --extra-cflags=*) add_cflags "$optval"
1146
    ;;
1147
    --extra-ldflags=*) add_ldflags "$optval"
1148
    ;;
1149
    --extra-libs=*) add_extralibs "$optval"
1150
    ;;
1151
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1152
    ;;
1153
    --enable-debug=*) debuglevel="$optval"
1154
    ;;
1155
    --enable-*=*|--disable-*=*)
1156
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1157
    case "$thing" in
1158
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1159
        *) die_unknown "$opt" ;;
1160
    esac
1161
    ;;
1162
    --enable-?*|--disable-?*)
1163
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1164
    if is_in $option $COMPONENT_LIST; then
1165
        eval $action \$$(toupper ${option%s})_LIST
1166
    elif is_in $option $CMDLINE_SELECT; then
1167
        $action $option
1168
    else
1169
        die_unknown $opt
1170
    fi
1171
    ;;
1172
    --list-*)
1173
        NAME="${opt#--list-}"
1174
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1175
        NAME=${NAME%s}
1176
        eval show_list $NAME \$$(toupper $NAME)_LIST
1177
    ;;
1178
    --help|-h) show_help
1179
    ;;
1180
    *)
1181
    optname="${opt%%=*}"
1182
    optname="${optname#--}"
1183
    optname=$(echo "$optname" | sed 's/-/_/g')
1184
    is_in $optname $CMDLINE_SET || die_unknown $opt
1185
    eval $optname='$optval'
1186
    ;;
1187
    esac
1188
done
1189

    
1190
disabled logging && logfile=/dev/null
1191

    
1192
echo "# $0 $@" > $logfile
1193
set >> $logfile
1194

    
1195
cc_default="${cross_prefix}${cc_default}"
1196
yasmexe="${cross_prefix}${yasmexe}"
1197
ar="${cross_prefix}${ar}"
1198
nm="${cross_prefix}${nm}"
1199
ranlib="${cross_prefix}${ranlib}"
1200
strip="${cross_prefix}${strip}"
1201

    
1202
set_default cc
1203

    
1204
# set temporary file name
1205
if test ! -z "$TMPDIR" ; then
1206
    TMPDIR1="${TMPDIR}"
1207
elif test ! -z "$TEMPDIR" ; then
1208
    TMPDIR1="${TEMPDIR}"
1209
else
1210
    TMPDIR1="/tmp"
1211
fi
1212

    
1213
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1214
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1215
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1216
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1217
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1218
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1219

    
1220
check_cflags -std=c99
1221

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

    
1289
enable $arch
1290
enabled_any x86_32 x86_64 && enable x86
1291
enabled     sparc64       && enable sparc
1292

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

    
1450
    *)
1451
        target_os="${target_os}-UNKNOWN"
1452
        ;;
1453
esac
1454

    
1455
set_default $PATHS_LIST
1456

    
1457
add_extralibs $osextralibs
1458

    
1459
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1460
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1461

    
1462
test -n "$cross_prefix" && enable cross_compile
1463

    
1464
# we need to build at least one lib type
1465
if ! enabled_any static shared; then
1466
    cat <<EOF
1467
At least one library type must be built.
1468
Specify --enable-static to build the static libraries or --enable-shared to
1469
build the shared libraries as well. To only build the shared libraries specify
1470
--disable-static in addition to --enable-shared.
1471
EOF
1472
    exit 1;
1473
fi
1474

    
1475
disabled static && LIBNAME=""
1476

    
1477
if enabled_any libfaad libfaadbin ; then
1478
    if check_header faad.h; then
1479
        check_cc <<EOF
1480
#include <faad.h>
1481
#ifndef FAAD2_VERSION
1482
ok faad1
1483
#endif
1484
int main(void) { return 0; }
1485
EOF
1486
        test $? = 0 && enable libfaad2
1487
    else
1488
        die "FAAD test failed."
1489
    fi
1490
fi
1491

    
1492

    
1493
if ! enabled gpl; then
1494
    die_gpl_disabled(){
1495
        name=$1
1496
        shift
1497
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1498
    }
1499
    die_gpl_disabled "The Postprocessing code" postproc
1500
    die_gpl_disabled "libx264"                 libx264
1501
    die_gpl_disabled "libxvidcore"             libxvid
1502
    die_gpl_disabled "FAAD2"                   libfaad2
1503
    die_gpl_disabled "The X11 grabber"         x11grab
1504
    die_gpl_disabled "The software scaler"     swscale
1505
fi
1506

    
1507
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1508
    die "libamr is nonfree and --enable-nonfree is not specified."
1509
fi
1510

    
1511
check_deps $ARCH_EXT_LIST
1512

    
1513
test -z "$need_memalign" && need_memalign="$mmx"
1514

    
1515
#Darwin CC versions
1516
if test $target_os = darwin; then
1517
    if $cc -v 2>&1 | grep -q xlc; then
1518
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1519
    else
1520
        add_cflags "-pipe"
1521
        check_cflags "-force_cpusubtype_ALL"
1522
        check_cflags "-Wno-sign-compare"
1523
        enabled shared || check_cflags -mdynamic-no-pic
1524
    fi
1525
fi
1526

    
1527
disabled optimizations || check_cflags -fomit-frame-pointer
1528

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

    
1605
# make sure we can execute files in $TMPDIR
1606
cat > $TMPSH 2>> $logfile <<EOF
1607
#! /bin/sh
1608
EOF
1609
chmod +x $TMPSH >> $logfile 2>&1
1610
if ! $TMPSH >> $logfile 2>&1; then
1611
    cat <<EOF
1612
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1613
variable to another directory and make sure that $TMPDIR1 is not mounted
1614
noexec.
1615
EOF
1616
    die "Sanity test failed."
1617
fi
1618
rm $TMPSH
1619

    
1620
# compiler sanity check
1621
check_exec <<EOF
1622
int main(void){ return 0; }
1623
EOF
1624
if test "$?" != 0; then
1625
    echo "$cc is unable to create an executable file."
1626
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1627
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1628
        echo "Only do this if you know what cross compiling means."
1629
    fi
1630
    die "C compiler test failed."
1631
fi
1632

    
1633
check_cc <<EOF || die "Symbol mangling check failed."
1634
int ff_extern;
1635
EOF
1636
sym=$($nm -P -g $TMPO | grep ff_extern)
1637
extern_prefix=${sym%%ff_extern*}
1638

    
1639
check_asm inline_asm '""'
1640

    
1641
if enabled x86; then
1642
    # check whether EBP is available on x86
1643
    # As 'i' is stored on the stack, this program will crash
1644
    # if the base pointer is used to access it because the
1645
    # base pointer is cleared in the inline assembly code.
1646
    check_exec_crash <<EOF && enable ebp_available
1647
    volatile int i=0;
1648
    __asm__ volatile (
1649
        "xorl %%ebp, %%ebp"
1650
    ::: "%ebp");
1651
    return i;
1652
EOF
1653

    
1654
    # check wether EBX is available on x86
1655
    check_asm ebx_available '"":::"%ebx"'
1656

    
1657
    # check whether binutils is new enough to compile SSSE3/MMX2
1658
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1659
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1660

    
1661
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1662

    
1663
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1664
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1665
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1666
    case "$objformat" in
1667
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1668
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1669
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1670
    esac
1671
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1672
fi
1673

    
1674
# check for assembler specific support
1675

    
1676
if test $arch = "powerpc"; then
1677
    check_asm dcbzl '"dcbzl 0, 1"'
1678
fi
1679

    
1680
# check for SIMD availability
1681

    
1682
# AltiVec flags: The FSF version of GCC differs from the Apple version
1683
if enabled altivec; then
1684
    check_cflags -maltivec -mabi=altivec &&
1685
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1686
        check_cflags -faltivec
1687

    
1688
    # check if our compiler supports Motorola AltiVec C API
1689
    check_cc <<EOF || disable altivec
1690
$inc_altivec_h
1691
int main(void) {
1692
    vector signed int v1, v2, v3;
1693
    v1 = vec_add(v2,v3);
1694
    return 0;
1695
}
1696
EOF
1697

    
1698
    # check if our compiler supports braces for vector declarations
1699
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1700
$inc_altivec_h
1701
int main (void) { (vector int) {1}; return 0; }
1702
EOF
1703
fi
1704

    
1705
# We have to check if pld is a nop and disable it.
1706
enabled armv4l  && check_asm pld     '"pld [r0]"'
1707
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1708
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1709
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1710
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1711
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1712
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1713
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1714

    
1715
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1716

    
1717
# ---
1718
# big/little-endian test
1719
check_cc <<EOF || die "endian test failed"
1720
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1721
EOF
1722
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1723

    
1724
# ---
1725
# check availability of some header files
1726

    
1727
if check_func dlopen; then
1728
    ldl=
1729
elif check_func dlopen -ldl; then
1730
    ldl=-ldl
1731
fi
1732

    
1733
check_func  fork
1734
check_func  gethrtime
1735
check_func  getrusage
1736
check_func  inet_aton $network_extralibs
1737
check_func  memalign
1738
check_func  mkstemp
1739
check_func_headers windows.h GetProcessTimes
1740

    
1741
check_header conio.h
1742
check_header dlfcn.h
1743
check_header malloc.h
1744
check_header poll.h
1745
check_header sys/mman.h
1746
check_header sys/resource.h
1747
check_header sys/select.h
1748
check_header termios.h
1749

    
1750
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1751
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1752
fi
1753

    
1754
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1755
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1756

    
1757
# check for some common methods of building with pthread support
1758
# do this before the optional library checks as some of them require pthreads
1759
if enabled pthreads; then
1760
    if check_func pthread_create; then
1761
        :
1762
    elif check_func pthread_create -pthread; then
1763
        add_cflags -pthread
1764
        add_extralibs -pthread
1765
    elif check_func pthread_create -pthreads; then
1766
        add_cflags -pthreads
1767
        add_extralibs -pthreads
1768
    elif check_func pthread_create -lpthreadGC2; then
1769
        add_extralibs -lpthreadGC2
1770
    elif ! check_lib pthread.h pthread_create -lpthread; then
1771
        die "ERROR: can't find pthreads library"
1772
    fi
1773
fi
1774

    
1775
for thread in $THREADS_LIST; do
1776
    if enabled $thread; then
1777
        test -n "$thread_type" &&
1778
            die "ERROR: Only one thread type must be selected." ||
1779
            thread_type="$thread"
1780
    fi
1781
done
1782

    
1783
check_lib math.h sin -lm
1784

    
1785
# test for C99 functions in math.h
1786
for func in llrint lrint lrintf round roundf; do
1787
    check_exec <<EOF && enable $func || disable $func
1788
#include <math.h>
1789
int main(void) { return ($func(3.999f) > 0)?0:1; }
1790
EOF
1791
done
1792

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

    
1816
# libdc1394 check
1817
if enabled libdc1394; then
1818
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1819
        enable libdc1394_2; } ||
1820
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1821
        enable libdc1394_1; } ||
1822
    die "ERROR: No version of libdc1394 found "
1823
fi
1824

    
1825

    
1826
_restrict=
1827
for restrict_keyword in restrict __restrict__ __restrict; do
1828
    check_cc <<EOF && _restrict=$restrict_keyword && break
1829
void foo(char * $restrict_keyword p);
1830
EOF
1831
done
1832

    
1833
test "$vhook" = "default" && vhook="$dlopen"
1834

    
1835
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1836
    disable vhook
1837
    echo
1838
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1839
    echo "Patches welcome."
1840
    echo
1841
fi
1842

    
1843
if enabled vhook; then
1844
    check_ldflags -rdynamic
1845
    check_ldflags -export-dynamic
1846
fi
1847

    
1848
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1849
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1850

    
1851
##########################################
1852
# SDL check
1853

    
1854
disable sdl_too_old
1855
disable sdl
1856
SDL_CONFIG="${cross_prefix}sdl-config"
1857
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1858
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1859
    temp_cflags $sdl_cflags
1860
    temp_extralibs `"${SDL_CONFIG}" --libs`
1861
    if check_lib2 SDL.h SDL_Init; then
1862
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1863
        if test "$_sdlversion" -lt 121 ; then
1864
            enable sdl_too_old
1865
        else
1866
            enable sdl
1867
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1868
#include <SDL.h>
1869
int main(int argc, char **argv){
1870
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1871
    int w = vi->current_w;
1872
    return 0;
1873
}
1874
EOF
1875
        fi
1876
    fi
1877
    restore_flags
1878
fi
1879

    
1880
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1881

    
1882
##########################################
1883
# Network check
1884

    
1885
if enabled network; then
1886
    check_type sys/socket.h socklen_t
1887
    # Prefer arpa/inet.h over winsock2
1888
    if check_header arpa/inet.h ; then
1889
        check_func closesocket
1890
    elif check_header winsock2.h ; then
1891
        network_extralibs="-lws2_32"
1892
        check_type ws2tcpip.h socklen_t
1893
        check_func_headers winsock2.h closesocket
1894
    fi
1895
fi
1896

    
1897
##########################################
1898
# IPv6 check
1899

    
1900
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1901
#include <sys/types.h>
1902
#include <sys/socket.h>
1903
#include <netinet/in.h>
1904
#include <netdb.h>
1905
int main(void) {
1906
    struct sockaddr_storage saddr;
1907
    struct ipv6_mreq mreq6;
1908
    getaddrinfo(0,0,0,0);
1909
    getnameinfo(0,0,0,0,0,0,0);
1910
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1911
}
1912
EOF
1913

    
1914
check_header linux/videodev.h
1915
check_header linux/videodev2.h
1916
check_header sys/videoio.h
1917

    
1918
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1919

    
1920
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1921
{ check_header dev/bktr/ioctl_meteor.h &&
1922
  check_header dev/bktr/ioctl_bt848.h; } ||
1923
{ check_header machine/ioctl_meteor.h &&
1924
  check_header machine/ioctl_bt848.h; } ||
1925
{ check_header dev/video/meteor/ioctl_meteor.h &&
1926
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1927
check_header dev/ic/bt8xx.h
1928

    
1929
check_header sys/soundcard.h
1930
check_header soundcard.h
1931

    
1932
# deal with the X11 frame grabber
1933
enabled x11grab                         &&
1934
check_header X11/Xlib.h                 &&
1935
check_header X11/extensions/XShm.h      &&
1936
check_func XOpenDisplay -lX11           &&
1937
check_func XShmCreateImage -lX11 -lXext
1938

    
1939
enabled debug && add_cflags -g"$debuglevel"
1940

    
1941
# add some useful compiler flags if supported
1942
check_cflags -Wdeclaration-after-statement
1943
check_cflags -Wall
1944
check_cflags -Wno-switch
1945
check_cflags -Wdisabled-optimization
1946
check_cflags -Wpointer-arith
1947
check_cflags -Wredundant-decls
1948
check_cflags -Wno-pointer-sign
1949
check_cflags -Wcast-qual
1950
check_cflags -Wwrite-strings
1951
check_cflags -Wtype-limits
1952
enabled extra_warnings && check_cflags -Winline
1953

    
1954
# add some linker flags
1955
check_ldflags -Wl,--warn-common
1956
check_ldflags -Wl,--as-needed
1957
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'
1958
check_ldflags -Wl,-Bsymbolic
1959

    
1960
if enabled small; then
1961
    check_cflags -Os            # not all compilers support -Os
1962
    optimizations="small"
1963
elif enabled optimizations; then
1964
    if $cc -v 2>&1 | grep -q xlc; then
1965
        add_cflags  "-O5"
1966
        add_ldflags "-O5"
1967
    else
1968
        add_cflags "-O3"
1969
    fi
1970
fi
1971
check_cflags -fno-math-errno
1972
check_cflags -fno-signed-zeros
1973

    
1974
# add some flags for Intel C Compiler
1975
if $cc --version 2> /dev/null | grep -q Intel; then
1976
  # Just warnings, no remarks
1977
  check_cflags -w1
1978
  # -wd: Disable following warnings
1979
  # 144, 167, 556: -Wno-pointer-sign
1980
  # 10006: ignoring unknown option -fno-signed-zeros
1981
  # 10156: ignoring option '-W'; no argument required
1982
  check_cflags -wd144,167,556,10006,10156
1983
  # 11030: Warning unknown option --as-needed
1984
  # 10156: ignoring option '-export'; no argument required
1985
  check_ldflags -wd10156,11030
1986
  # Allow to compile with optimizations
1987
  check_ldflags -march=$cpu
1988
fi
1989

    
1990
# PIC flags for shared library objects where they are needed
1991
if enabled shared; then
1992
    # LIBOBJFLAGS may have already been set in the OS configuration
1993
    if test -z "$LIBOBJFLAGS" ; then
1994
        case "$arch" in
1995
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1996
        esac
1997
    fi
1998
fi
1999

    
2000
if enabled gprof; then
2001
    add_cflags  "-p"
2002
    add_ldflags "-p"
2003
fi
2004

    
2005
VHOOKCFLAGS="-fPIC"
2006

    
2007
# Find out if the .align argument is a power of two or not.
2008
if test $asmalign_pot = "unknown"; then
2009
    disable asmalign_pot
2010
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2011
fi
2012

    
2013
enabled_any $DECODER_LIST      && enable decoders
2014
enabled_any $ENCODER_LIST      && enable encoders
2015
enabled_any $BSF_LIST          && enable bsfs
2016
enabled_any $DEMUXER_LIST      && enable demuxers
2017
enabled_any $MUXER_LIST        && enable muxers
2018
enabled_any $FILTER_LIST       && enable filters
2019
enabled_any $INDEV_LIST        && enable demuxers
2020
enabled_any $OUTDEV_LIST       && enable muxers
2021
enabled_any $PROTOCOL_LIST     && enable protocols
2022

    
2023
enabled_any $THREADS_LIST      && enable threads
2024

    
2025
check_deps $CONFIG_LIST       \
2026
           $CONFIG_EXTRA      \
2027
           $HAVE_LIST         \
2028
           $DECODER_LIST      \
2029
           $ENCODER_LIST      \
2030
           $PARSER_LIST       \
2031
           $BSF_LIST          \
2032
           $DEMUXER_LIST      \
2033
           $MUXER_LIST        \
2034
           $FILTER_LIST       \
2035
           $INDEV_LIST        \
2036
           $OUTDEV_LIST       \
2037
           $PROTOCOL_LIST     \
2038

    
2039
enabled libdc1394 && append pkg_requires "libraw1394"
2040
enabled libdirac  && append pkg_requires "dirac"
2041
enabled libtheora && append pkg_requires "theora"
2042
enabled libvorbis && append pkg_requires "vorbisenc"
2043

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

    
2124
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2125
    echo "Enabled ${type}s:"
2126
    eval list=\$$(toupper $type)_LIST
2127
    for part in $list; do
2128
        enabled $part && echo ${part%_*}
2129
    done | sort | pr -3 -t
2130
    echo
2131
done
2132

    
2133
license="LGPL"
2134
if enabled nonfree; then
2135
    license="unredistributable"
2136
elif enabled gpl; then
2137
    license="GPL"
2138
fi
2139

    
2140
echo "License: $license"
2141

    
2142
echo "Creating config.mak and config.h..."
2143

    
2144
echo "# Automatically generated by configure - do not modify!" > config.mak
2145
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2146
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2147
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2148
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2149

    
2150
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2151
echo "prefix=$prefix" >> config.mak
2152
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2153
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2154
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2155
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2156
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2157
echo "CC=$cc" >> config.mak
2158
echo "YASM=$yasmexe" >> config.mak
2159
echo "AR=$ar" >> config.mak
2160
echo "RANLIB=$ranlib" >> config.mak
2161
echo "LN_S=$ln_s" >> config.mak
2162
enabled stripping &&
2163
    echo "STRIP=$strip" >> config.mak ||
2164
    echo "STRIP=echo ignoring strip" >> config.mak
2165

    
2166
echo "OPTFLAGS=$CFLAGS" >> config.mak
2167
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2168
echo "LDFLAGS=$LDFLAGS" >> config.mak
2169
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2170
echo "SHFLAGS=$SHFLAGS" >> config.mak
2171
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2172
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2173
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2174
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2175
echo "BUILD_STATIC=$static" >> config.mak
2176
echo "BUILDSUF=$build_suffix" >> config.mak
2177
echo "FULLNAME=$FULLNAME" >> config.mak
2178
echo "LIBPREF=$LIBPREF" >> config.mak
2179
echo "LIBSUF=$LIBSUF" >> config.mak
2180
echo "LIBNAME=$LIBNAME" >> config.mak
2181
echo "SLIBPREF=$SLIBPREF" >> config.mak
2182
echo "SLIBSUF=$SLIBSUF" >> config.mak
2183
echo "EXESUF=$EXESUF" >> config.mak
2184
echo "EXTRA_VERSION=$extra_version" >> config.mak
2185
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2186

    
2187
if enabled bigendian; then
2188
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2189
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2190
fi
2191

    
2192
if enabled sdl; then
2193
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2194
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2195
fi
2196
if enabled texi2html; then
2197
    echo "BUILD_DOC=yes" >> config.mak
2198
fi
2199

    
2200
get_version(){
2201
    name=$1
2202
    file=$source_path/$2
2203
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2204
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2205
    lcname=$(tolower $name)
2206
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2207
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2208
}
2209

    
2210
get_version LIBSWSCALE  libswscale/swscale.h
2211
get_version LIBPOSTPROC libpostproc/postprocess.h
2212
get_version LIBAVCODEC  libavcodec/avcodec.h
2213
get_version LIBAVDEVICE libavdevice/avdevice.h
2214
get_version LIBAVFORMAT libavformat/avformat.h
2215
get_version LIBAVUTIL   libavutil/avutil.h
2216
get_version LIBAVFILTER libavfilter/avfilter.h
2217

    
2218
if enabled shared; then
2219
    echo "BUILD_SHARED=yes" >> config.mak
2220
    echo "PIC=-fPIC -DPIC" >> config.mak
2221
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2222
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2223
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2224
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2225
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2226
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2227
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2228
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2229
fi
2230
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2231
echo "EXTRALIBS=$extralibs" >> config.mak
2232

    
2233
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2234
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2235
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2236
                                      $CONFIG_EXTRA      \
2237
                                      $DECODER_LIST      \
2238
                                      $ENCODER_LIST      \
2239
                                      $PARSER_LIST       \
2240
                                      $BSF_LIST          \
2241
                                      $DEMUXER_LIST      \
2242
                                      $MUXER_LIST        \
2243
                                      $FILTER_LIST       \
2244
                                      $PROTOCOL_LIST     \
2245
                                      $INDEV_LIST        \
2246
                                      $OUTDEV_LIST       \
2247

    
2248
echo "#define restrict $_restrict" >> $TMPH
2249

    
2250
if enabled small; then
2251
    echo "#define av_always_inline"  >> $TMPH
2252
fi
2253

    
2254
echo "SRC_PATH=\"$source_path\"" >> config.mak
2255
echo "SRC_PATH_BARE=$source_path" >> config.mak
2256
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2257

    
2258
# Apparently it's not possible to portably echo a backslash.
2259
enabled asmalign_pot &&
2260
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2261
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2262

    
2263
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2264

    
2265
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2266

    
2267
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2268
cmp -s $TMPH config.h &&
2269
    echo "config.h is unchanged" ||
2270
    mv -f $TMPH config.h
2271

    
2272
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2273

    
2274
# build tree in object directory if source path is different from current one
2275
if enabled source_path_used; then
2276
    DIRS="\
2277
        doc               \
2278
        libavcodec        \
2279
        libavcodec/alpha  \
2280
        libavcodec/armv4l \
2281
        libavcodec/bfin   \
2282
        libavcodec/i386   \
2283
        libavcodec/mlib   \
2284
        libavcodec/ppc    \
2285
        libavcodec/sh4    \
2286
        libavcodec/sparc  \
2287
        libavdevice       \
2288
        libavfilter       \
2289
        libavformat       \
2290
        libavutil         \
2291
        libpostproc       \
2292
        libswscale        \
2293
        tests             \
2294
        tools             \
2295
        vhook             \
2296
        "
2297
    FILES="\
2298
        Makefile             \
2299
        common.mak           \
2300
        subdir.mak           \
2301
        doc/texi2pod.pl      \
2302
        libavcodec/Makefile  \
2303
        libavdevice/Makefile \
2304
        libavfilter/Makefile \
2305
        libavformat/Makefile \
2306
        libavutil/Makefile   \
2307
        libpostproc/Makefile \
2308
        libswscale/Makefile  \
2309
        "
2310
    for dir in $DIRS ; do
2311
        mkdir -p $dir
2312
    done
2313
    for f in $FILES ; do
2314
        $ln_s "$source_path/$f" $f
2315
    done
2316
fi
2317

    
2318

    
2319
# build pkg-config files
2320

    
2321
pkgconfig_generate(){
2322
name=$1
2323
shortname=${name#lib}
2324
comment=$2
2325
version=$3
2326
libs=$4
2327
requires=$5
2328
cat <<EOF > $name/$name.pc
2329
prefix=$prefix
2330
exec_prefix=\${prefix}
2331
libdir=$libdir
2332
includedir=$incdir
2333

    
2334
Name: $name
2335
Description: $comment
2336
Version: $version
2337
Requires: $(disabled shared && echo $requires)
2338
Requires.private: $(enabled shared && echo $requires)
2339
Conflicts:
2340
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2341
Libs.private: $(enabled shared && echo $libs)
2342
Cflags: -I\${includedir}
2343
EOF
2344
cat <<EOF > $name/$name-uninstalled.pc
2345
prefix=
2346
exec_prefix=
2347
libdir=\${pcfiledir}
2348
includedir=${source_path}
2349

    
2350
Name: $name
2351
Description: $comment
2352
Version: $version
2353
Requires: $requires
2354
Conflicts:
2355
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2356
Cflags: -I\${includedir}
2357
EOF
2358
}
2359

    
2360
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2361
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2362
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2363
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2364
enabled avfilter &&
2365
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2366
enabled postproc &&
2367
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2368
if enabled swscale; then
2369
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2370
else
2371
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2372
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2373
fi