Statistics
| Branch: | Revision:

ffmpeg / configure @ 5af41508

History | View | Annotate | Download (86.8 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
cat <<EOF
59
Usage: configure [options]
60
Options: [defaults in brackets after descriptions]
61

    
62
Standard options:
63
  --help                   print this message
64
  --logfile=FILE           log tests and output to FILE [config.err]
65
  --disable-logging        do not log configure debug information
66
  --prefix=PREFIX          install in PREFIX [$prefix]
67
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
68
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69
  --libdir=DIR             install libs in DIR [PREFIX/lib]
70
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71
  --incdir=DIR             install includes in DIR [PREFIX/include]
72
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
73

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-ffserver       disable ffserver build
86
  --disable-avdevice       disable libavdevice build
87
  --disable-avcodec        disable libavcodec build
88
  --disable-avformat       disable libavformat build
89
  --disable-swscale        disable libswscale build
90
  --enable-postproc        enable GPLed postprocessing support [no]
91
  --enable-avfilter        video filter support [no]
92
  --enable-avfilter-lavf   video filters dependent on avformat [no]
93
  --enable-beosthreads     use BeOS threads [no]
94
  --enable-os2threads      use OS/2 threads [no]
95
  --enable-pthreads        use pthreads [no]
96
  --enable-w32threads      use Win32 threads [no]
97
  --enable-x11grab         enable X11 grabbing [no]
98
  --disable-network        disable network support [no]
99
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
100
  --enable-gray            enable full grayscale support (slower color)
101
  --disable-swscale-alpha  disable alpha channel support in swscale
102
  --disable-fastdiv        disable table-based division
103
  --enable-small           optimize for size instead of speed
104
  --disable-aandct         disable AAN DCT code
105
  --disable-dct            disable DCT code
106
  --disable-fft            disable FFT code
107
  --disable-golomb         disable Golomb code
108
  --disable-lpc            disable LPC code
109
  --disable-mdct           disable MDCT code
110
  --disable-rdft           disable RDFT code
111
  --disable-vaapi          disable VAAPI code
112
  --disable-vdpau          disable VDPAU code
113
  --disable-dxva2          disable DXVA2 code
114
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
117
  --enable-beos-netserver  enable BeOS netserver
118
  --disable-encoder=NAME   disable encoder NAME
119
  --enable-encoder=NAME    enable encoder NAME
120
  --disable-encoders       disable all encoders
121
  --disable-decoder=NAME   disable decoder NAME
122
  --enable-decoder=NAME    enable decoder NAME
123
  --disable-decoders       disable all decoders
124
  --disable-hwaccel=NAME   disable hwaccel NAME
125
  --enable-hwaccel=NAME    enable hwaccel NAME
126
  --disable-hwaccels       disable all hwaccels
127
  --disable-muxer=NAME     disable muxer NAME
128
  --enable-muxer=NAME      enable muxer NAME
129
  --disable-muxers         disable all muxers
130
  --disable-demuxer=NAME   disable demuxer NAME
131
  --enable-demuxer=NAME    enable demuxer NAME
132
  --disable-demuxers       disable all demuxers
133
  --enable-parser=NAME     enable parser NAME
134
  --disable-parser=NAME    disable parser NAME
135
  --disable-parsers        disable all parsers
136
  --enable-bsf=NAME        enable bitstream filter NAME
137
  --disable-bsf=NAME       disable bitstream filter NAME
138
  --disable-bsfs           disable all bitstream filters
139
  --enable-protocol=NAME   enable protocol NAME
140
  --disable-protocol=NAME  disable protocol NAME
141
  --disable-protocols      disable all protocols
142
  --disable-indev=NAME     disable input device NAME
143
  --disable-outdev=NAME    disable output device NAME
144
  --disable-indevs         disable input devices
145
  --disable-outdevs        disable output devices
146
  --disable-devices        disable all devices
147
  --enable-filter=NAME     enable filter NAME
148
  --disable-filter=NAME    disable filter NAME
149
  --disable-filters        disable all filters
150
  --list-decoders          show all available decoders
151
  --list-encoders          show all available encoders
152
  --list-hwaccels          show all available hardware accelerators
153
  --list-muxers            show all available muxers
154
  --list-demuxers          show all available demuxers
155
  --list-parsers           show all available parsers
156
  --list-protocols         show all available protocols
157
  --list-bsfs              show all available bitstream filters
158
  --list-indevs            show all available input devices
159
  --list-outdevs           show all available output devices
160
  --list-filters           show all available filters
161

    
162
External library support:
163
  --enable-avisynth        enable reading of AVISynth script files [no]
164
  --enable-bzlib           enable bzlib [autodetect]
165
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
168
                           and libraw1394 [no]
169
  --enable-libdirac        enable Dirac support via libdirac [no]
170
  --enable-libfaac         enable FAAC support via libfaac [no]
171
  --enable-libfaad         enable FAAD support via libfaad [no]
172
  --enable-libfaadbin      open libfaad.so.0 at runtime [no]
173
  --enable-libgsm          enable GSM support via libgsm [no]
174
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
175
  --enable-libnut          enable NUT (de)muxing via libnut,
176
                           native (de)muxer exists [no]
177
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
178
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
179
  --enable-libspeex        enable Speex decoding via libspeex [no]
180
  --enable-libtheora       enable Theora encoding via libtheora [no]
181
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
182
                           native implementation exists [no]
183
  --enable-libx264         enable H.264 encoding via x264 [no]
184
  --enable-libxvid         enable Xvid encoding via xvidcore,
185
                           native MPEG-4/Xvid encoder exists [no]
186
  --enable-mlib            enable Sun medialib [no]
187
  --enable-zlib            enable zlib [autodetect]
188

    
189
Advanced options (experts only):
190
  --source-path=PATH       path to source code [$source_path]
191
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
192
  --enable-cross-compile   assume a cross-compiler is used
193
  --sysroot=PATH           root of cross-build tree
194
  --sysinclude=PATH        location of cross-build system headers
195
  --target-os=OS           compiler targets OS [$target_os]
196
  --target-exec=CMD        command to run executables on target
197
  --target-path=DIR        path to view of build directory on target
198
  --nm=NM                  use nm tool
199
  --as=AS                  use assembler AS [$as_default]
200
  --cc=CC                  use C compiler CC [$cc_default]
201
  --ld=LD                  use linker LD
202
  --host-cc=HOSTCC         use host C compiler HOSTCC
203
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
204
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
205
  --host-libs=HLIBS        use libs HLIBS when linking for host
206
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
207
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
208
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
209
  --extra-version=STRING   version string suffix []
210
  --build-suffix=SUFFIX    library name suffix []
211
  --arch=ARCH              select architecture [$arch]
212
  --cpu=CPU                select the minimum required CPU (affects
213
                           instruction selection, may crash on older CPUs)
214
  --enable-powerpc-perf    enable performance report on PPC
215
                           (requires enabling PMC)
216
  --disable-asm            disable all assembler optimizations
217
  --disable-altivec        disable AltiVec optimizations
218
  --disable-amd3dnow       disable 3DNow! optimizations
219
  --disable-amd3dnowext    disable 3DNow! extended optimizations
220
  --disable-mmx            disable MMX optimizations
221
  --disable-mmx2           disable MMX2 optimizations
222
  --disable-sse            disable SSE optimizations
223
  --disable-ssse3          disable SSSE3 optimizations
224
  --disable-armv5te        disable armv5te optimizations
225
  --disable-armv6          disable armv6 optimizations
226
  --disable-armv6t2        disable armv6t2 optimizations
227
  --disable-armvfp         disable ARM VFP optimizations
228
  --disable-iwmmxt         disable iwmmxt optimizations
229
  --disable-mmi            disable MMI optimizations
230
  --disable-neon           disable neon optimizations
231
  --disable-vis            disable VIS optimizations
232
  --disable-yasm           disable use of yasm assembler
233
  --enable-pic             build position-independent code
234
  --malloc-prefix=PFX      prefix malloc and related names with PFX
235
  --enable-sram            allow use of on-chip SRAM
236

    
237
Developer options (useful when working on FFmpeg itself):
238
  --disable-debug          disable debugging symbols
239
  --enable-debug=LEVEL     set the debug level [$debuglevel]
240
  --enable-gprof           enable profiling with gprof [$gprof]
241
  --disable-optimizations  disable compiler optimizations
242
  --enable-extra-warnings  enable more compiler warnings
243
  --disable-stripping      disable stripping of executables and shared libraries
244

    
245
NOTE: Object files are built at the place where configure is launched.
246
EOF
247
  exit 0
248
}
249

    
250
log(){
251
    echo "$@" >> $logfile
252
}
253

    
254
log_file(){
255
    log BEGIN $1
256
    pr -n -t $1 >> $logfile
257
    log END $1
258
}
259

    
260
echolog(){
261
    log "$@"
262
    echo "$@"
263
}
264

    
265
die(){
266
    echolog "$@"
267
    cat <<EOF
268

    
269
If you think configure made a mistake, make sure you are using the latest
270
version from SVN.  If the latest version fails, report the problem to the
271
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
272
EOF
273
    if disabled logging; then
274
        cat <<EOF
275
Rerun configure with logging enabled (do not use --disable-logging), and
276
include the log this produces with your report.
277
EOF
278
    else
279
cat <<EOF
280
Include the log file "$logfile" produced by configure as this will help
281
solving the problem.
282
EOF
283
    fi
284
    exit 1
285
}
286

    
287
# Avoid locale weirdness, besides we really just want to translate ASCII.
288
toupper(){
289
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
290
}
291

    
292
tolower(){
293
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
294
}
295

    
296
c_escape(){
297
    echo "$*" | sed 's/["\\]/\\\0/g'
298
}
299

    
300
sh_quote(){
301
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
302
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
303
    echo "$v"
304
}
305

    
306
filter(){
307
    pat=$1
308
    shift
309
    for v; do
310
        eval "case $v in $pat) echo $v ;; esac"
311
    done
312
}
313

    
314
set_all(){
315
    value=$1
316
    shift
317
    for var in $*; do
318
        eval $var=$value
319
    done
320
}
321

    
322
set_weak(){
323
    value=$1
324
    shift
325
    for var; do
326
        eval : \${$var:=$value}
327
    done
328
}
329

    
330
pushvar(){
331
    for var in $*; do
332
        eval level=\${${var}_level:=0}
333
        eval ${var}_${level}="\$$var"
334
        eval ${var}_level=$(($level+1))
335
    done
336
}
337

    
338
popvar(){
339
    for var in $*; do
340
        eval level=\${${var}_level:-0}
341
        test $level = 0 && continue
342
        eval level=$(($level-1))
343
        eval $var="\${${var}_${level}}"
344
        eval ${var}_level=$level
345
        eval unset ${var}_${level}
346
    done
347
}
348

    
349
enable(){
350
    set_all yes $*
351
}
352

    
353
disable(){
354
    set_all no $*
355
}
356

    
357
enable_weak(){
358
    set_weak yes $*
359
}
360

    
361
disable_weak(){
362
    set_weak no $*
363
}
364

    
365
enable_safe(){
366
    for var; do
367
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
368
    done
369
}
370

    
371
disable_safe(){
372
    for var; do
373
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
374
    done
375
}
376

    
377
do_enable_deep(){
378
    for var; do
379
        enabled $var && continue
380
        eval sel="\$${var}_select"
381
        eval sgs="\$${var}_suggest"
382
        pushvar var sgs
383
        enable_deep $sel
384
        popvar sgs
385
        enable_deep_weak $sgs
386
        popvar var
387
    done
388
}
389

    
390
enable_deep(){
391
    do_enable_deep $*
392
    enable $*
393
}
394

    
395
enable_deep_weak(){
396
    do_enable_deep $*
397
    enable_weak $*
398
}
399

    
400
enabled(){
401
    test "${1#!}" = "$1" && op== || op=!=
402
    eval test "x\$${1#!}" $op "xyes"
403
}
404

    
405
disabled(){
406
    test "${1#!}" = "$1" && op== || op=!=
407
    eval test "x\$${1#!}" $op "xno"
408
}
409

    
410
enabled_all(){
411
    for opt; do
412
        enabled $opt || return 1
413
    done
414
}
415

    
416
disabled_all(){
417
    for opt; do
418
        disabled $opt || return 1
419
    done
420
}
421

    
422
enabled_any(){
423
    for opt; do
424
        enabled $opt && return 0
425
    done
426
}
427

    
428
disabled_any(){
429
    for opt; do
430
        disabled $opt && return 0
431
    done
432
    return 1
433
}
434

    
435
set_default(){
436
    for opt; do
437
        eval : \${$opt:=\$${opt}_default}
438
    done
439
}
440

    
441
is_in(){
442
    value=$1
443
    shift
444
    for var in $*; do
445
        [ $var = $value ] && return 0
446
    done
447
    return 1
448
}
449

    
450
check_deps(){
451
    for cfg; do
452
        cfg="${cfg#!}"
453
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
454
        disabled ${cfg}_checking && continue
455
        enable ${cfg}_checking
456

    
457
        eval dep_all="\$${cfg}_deps"
458
        eval dep_any="\$${cfg}_deps_any"
459
        eval dep_sel="\$${cfg}_select"
460
        eval dep_sgs="\$${cfg}_suggest"
461
        eval dep_ifa="\$${cfg}_if"
462
        eval dep_ifn="\$${cfg}_if_any"
463

    
464
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
465
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
466
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
467

    
468
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
469
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
470
        enabled_all  $dep_all || disable $cfg
471
        enabled_any  $dep_any || disable $cfg
472
        disabled_any $dep_sel && disable $cfg
473

    
474
        if enabled $cfg; then
475
            eval dep_extralibs="\$${cfg}_extralibs"
476
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
477
            enable_deep $dep_sel
478
            enable_deep_weak $dep_sgs
479
        fi
480

    
481
        disable ${cfg}_checking
482
    done
483
}
484

    
485
print_config(){
486
    pfx=$1
487
    header=$2
488
    makefile=$3
489
    shift 3
490
    for cfg; do
491
        ucname="$(toupper $cfg)"
492
        if enabled $cfg; then
493
            echo "#define ${pfx}${ucname} 1" >> $header
494
            echo "${pfx}${ucname}=yes" >> $makefile
495
        else
496
            echo "#define ${pfx}${ucname} 0" >> $header
497
            echo "!${pfx}${ucname}=yes" >> $makefile
498
        fi
499
    done
500
}
501

    
502
flags_saved(){
503
    (: ${SAVE_CFLAGS?}) 2> /dev/null
504
}
505

    
506
save_flags(){
507
    flags_saved && return
508
    SAVE_CFLAGS="$CFLAGS"
509
    SAVE_LDFLAGS="$LDFLAGS"
510
    SAVE_extralibs="$extralibs"
511
}
512

    
513
restore_flags(){
514
    flags_saved || return
515
    CFLAGS="$SAVE_CFLAGS"
516
    LDFLAGS="$SAVE_LDFLAGS"
517
    extralibs="$SAVE_extralibs"
518
    unset SAVE_CFLAGS
519
    unset SAVE_LDFLAGS
520
    unset SAVE_extralibs
521
}
522

    
523
temp_cflags(){
524
    save_flags
525
    CFLAGS="$CFLAGS $*"
526
}
527

    
528
temp_ldflags(){
529
    save_flags
530
    LDFLAGS="$LDFLAGS $*"
531
}
532

    
533
temp_extralibs(){
534
    save_flags
535
    extralibs="$extralibs $*"
536
}
537

    
538
append(){
539
    var=$1
540
    shift
541
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
542
    eval "$var=\"\$$var $*\""
543
}
544

    
545
add_cppflags(){
546
    append CPPFLAGS $($filter_cppflags "$@")
547
}
548

    
549
add_cflags(){
550
    append CFLAGS $($filter_cflags "$@")
551
}
552

    
553
add_asflags(){
554
    append ASFLAGS $($filter_asflags "$@")
555
}
556

    
557
add_ldflags(){
558
    append LDFLAGS "$@"
559
}
560

    
561
add_extralibs(){
562
    append extralibs "$@"
563
}
564

    
565
check_cmd(){
566
    log "$@"
567
    "$@" >> $logfile 2>&1
568
}
569

    
570
check_cc(){
571
    log check_cc "$@"
572
    cat > $TMPC
573
    log_file $TMPC
574
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
575
}
576

    
577
check_cpp(){
578
    log check_cpp "$@"
579
    cat > $TMPC
580
    log_file $TMPC
581
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
582
}
583

    
584
check_as(){
585
    log check_as "$@"
586
    cat > $TMPC
587
    log_file $TMPC
588
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
589
}
590

    
591
check_asm(){
592
    log check_asm "$@"
593
    name="$1"
594
    code="$2"
595
    shift 2
596
    disable $name
597
    check_as "$@" <<EOF && enable $name
598
void foo(void){ __asm__ volatile($code); }
599
EOF
600
}
601

    
602
check_yasm(){
603
    log check_yasm "$@"
604
    echo "$1" > $TMPS
605
    log_file $TMPS
606
    shift 1
607
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
608
}
609

    
610
check_ld(){
611
    log check_ld "$@"
612
    flags=''
613
    libs=''
614
    for f; do
615
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
616
    done
617
    check_cc $($filter_cflags $flags) || return
618
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
619
}
620

    
621
check_cppflags(){
622
    log check_cppflags "$@"
623
    set -- $($filter_cppflags "$@")
624
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
625
int x;
626
EOF
627
}
628

    
629
check_cflags(){
630
    log check_cflags "$@"
631
    set -- $($filter_cflags "$@")
632
    check_cc "$@" <<EOF && append CFLAGS "$@"
633
int x;
634
EOF
635
}
636

    
637
test_ldflags(){
638
    log test_ldflags "$@"
639
    check_ld "$@" <<EOF
640
int main(void){ return 0; }
641
EOF
642
}
643

    
644
check_ldflags(){
645
    log check_ldflags "$@"
646
    test_ldflags "$@" && add_ldflags "$@"
647
}
648

    
649
check_header(){
650
    log check_header "$@"
651
    header=$1
652
    shift
653
    disable_safe $header
654
    check_cpp "$@" <<EOF && enable_safe $header
655
#include <$header>
656
int x;
657
EOF
658
}
659

    
660
check_func(){
661
    log check_func "$@"
662
    func=$1
663
    shift
664
    disable $func
665
    check_ld "$@" <<EOF && enable $func
666
extern int $func();
667
int main(void){ $func(); }
668
EOF
669
}
670

    
671
check_func_headers(){
672
    log check_func_headers "$@"
673
    headers=$1
674
    func=$2
675
    shift 2
676
    disable $func
677
    incs=""
678
    for hdr in $headers; do
679
        incs="$incs
680
#include <$hdr>"
681
    done
682
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
683
$incs
684
int main(int argc, char **argv){
685
    return (long) $func;
686
}
687
EOF
688
}
689

    
690
check_cpp_condition(){
691
    log check_cpp_condition "$@"
692
    header=$1
693
    condition=$2
694
    shift 2
695
    check_cpp $($filter_cppflags "$@") <<EOF
696
#include <$header>
697
#if !($condition)
698
#error "unsatisfied condition: $condition"
699
#endif
700
EOF
701
}
702

    
703
check_lib(){
704
    log check_lib "$@"
705
    header="$1"
706
    func="$2"
707
    shift 2
708
    temp_extralibs "$@"
709
    check_header $header && check_func $func && add_extralibs "$@"
710
    err=$?
711
    restore_flags
712
    return $err
713
}
714

    
715
check_lib2(){
716
    log check_lib2 "$@"
717
    headers="$1"
718
    func="$2"
719
    shift 2
720
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
721
}
722

    
723
check_exec(){
724
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
725
}
726

    
727
check_exec_crash(){
728
    code=$(cat)
729

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

    
736
    (check_exec "$@") >> $logfile 2>&1 <<EOF
737
#include <signal.h>
738
static void sighandler(int sig){
739
    raise(SIGTERM);
740
}
741
int main(void){
742
    signal(SIGILL, sighandler);
743
    signal(SIGFPE, sighandler);
744
    signal(SIGSEGV, sighandler);
745
#ifdef SIGBUS
746
    signal(SIGBUS, sighandler);
747
#endif
748
    { $code }
749
}
750
EOF
751
}
752

    
753
check_type(){
754
    log check_type "$@"
755
    headers=$1
756
    type=$2
757
    shift 2
758
    disable_safe "$type"
759
    incs=""
760
    for hdr in $headers; do
761
        incs="$incs
762
#include <$hdr>"
763
    done
764
    check_cc "$@" <<EOF && enable_safe "$type"
765
$incs
766
$type v;
767
EOF
768
}
769

    
770
check_struct(){
771
    log check_type "$@"
772
    headers=$1
773
    struct=$2
774
    member=$3
775
    shift 3
776
    disable_safe "${struct}_${member}"
777
    incs=""
778
    for hdr in $headers; do
779
        incs="$incs
780
#include <$hdr>"
781
    done
782
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
783
$incs
784
const void *p = &(($struct *)0)->$member;
785
EOF
786
}
787

    
788
require(){
789
    name="$1"
790
    header="$2"
791
    func="$3"
792
    shift 3
793
    check_lib $header $func "$@" || die "ERROR: $name not found"
794
}
795

    
796
require2(){
797
    name="$1"
798
    headers="$2"
799
    func="$3"
800
    shift 3
801
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
802
}
803

    
804
check_foo_config(){
805
    cfg=$1
806
    pkg=$2
807
    header=$3
808
    func=$4
809
    shift 4
810
    disable $cfg
811
    check_cmd ${pkg}-config --version
812
    err=$?
813
    if test "$err" = 0; then
814
        temp_cflags $(${pkg}-config --cflags)
815
        temp_extralibs $(${pkg}-config --libs)
816
        check_lib "$@" $header $func && enable $cfg
817
    fi
818
    return $err
819
}
820

    
821
check_host_cc(){
822
    log check_host_cc "$@"
823
    cat > $TMPC
824
    log_file $TMPC
825
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
826
}
827

    
828
check_host_cflags(){
829
    log check_host_cflags "$@"
830
    check_host_cc "$@" <<EOF && append host_cflags "$@"
831
int x;
832
EOF
833
}
834

    
835
apply(){
836
    file=$1
837
    shift
838
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
839
}
840

    
841
cp_if_changed(){
842
    cmp -s "$1" "$2" &&
843
        echo "$2 is unchanged" ||
844
        cp -f "$1" "$2"
845
}
846

    
847
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
848
# system-dependent things.
849

    
850
COMPONENT_LIST="
851
    bsfs
852
    decoders
853
    demuxers
854
    encoders
855
    filters
856
    hwaccels
857
    indevs
858
    muxers
859
    outdevs
860
    parsers
861
    protocols
862
"
863

    
864
CONFIG_LIST="
865
    $COMPONENT_LIST
866
    aandct
867
    avcodec
868
    avdevice
869
    avfilter
870
    avfilter_lavf
871
    avformat
872
    avisynth
873
    beos_netserver
874
    bzlib
875
    dct
876
    doc
877
    dxva2
878
    fastdiv
879
    ffmpeg
880
    ffplay
881
    ffserver
882
    fft
883
    golomb
884
    gpl
885
    gprof
886
    gray
887
    hardcoded_tables
888
    libdc1394
889
    libdirac
890
    libfaac
891
    libfaad
892
    libfaadbin
893
    libgsm
894
    libmp3lame
895
    libnut
896
    libopencore_amrnb
897
    libopencore_amrwb
898
    libopenjpeg
899
    libschroedinger
900
    libspeex
901
    libtheora
902
    libvorbis
903
    libx264
904
    libxvid
905
    lpc
906
    mdct
907
    memalign_hack
908
    mlib
909
    mpegaudio_hp
910
    network
911
    nonfree
912
    pic
913
    postproc
914
    powerpc_perf
915
    rdft
916
    runtime_cpudetect
917
    shared
918
    small
919
    sram
920
    static
921
    swscale
922
    swscale_alpha
923
    vaapi
924
    vdpau
925
    version3
926
    x11grab
927
    zlib
928
"
929

    
930
THREADS_LIST='
931
    beosthreads
932
    os2threads
933
    pthreads
934
    w32threads
935
'
936

    
937
ARCH_LIST='
938
    alpha
939
    arm
940
    avr32
941
    avr32_ap
942
    avr32_uc
943
    bfin
944
    ia64
945
    m68k
946
    mips
947
    mips64
948
    parisc
949
    ppc
950
    ppc64
951
    s390
952
    sh4
953
    sparc
954
    sparc64
955
    x86
956
    x86_32
957
    x86_64
958
'
959

    
960
ARCH_EXT_LIST='
961
    altivec
962
    amd3dnow
963
    amd3dnowext
964
    armv5te
965
    armv6
966
    armv6t2
967
    armvfp
968
    iwmmxt
969
    mmi
970
    mmx
971
    mmx2
972
    neon
973
    ppc4xx
974
    sse
975
    ssse3
976
    vis
977
'
978

    
979
HAVE_LIST_PUB='
980
    bigendian
981
'
982

    
983
HAVE_LIST="
984
    $ARCH_EXT_LIST
985
    $HAVE_LIST_PUB
986
    $THREADS_LIST
987
    alsa_asoundlib_h
988
    altivec_h
989
    arpa_inet_h
990
    attribute_may_alias
991
    attribute_packed
992
    bswap
993
    closesocket
994
    cmov
995
    conio_h
996
    dcbzl
997
    dev_bktr_ioctl_bt848_h
998
    dev_bktr_ioctl_meteor_h
999
    dev_ic_bt8xx_h
1000
    dev_video_meteor_ioctl_meteor_h
1001
    dev_video_bktr_ioctl_bt848_h
1002
    dlfcn_h
1003
    dlopen
1004
    dos_paths
1005
    ebp_available
1006
    ebx_available
1007
    exp2
1008
    exp2f
1009
    fast_64bit
1010
    fast_clz
1011
    fast_cmov
1012
    fast_unaligned
1013
    fork
1014
    getaddrinfo
1015
    gethrtime
1016
    GetProcessTimes
1017
    getrusage
1018
    inet_aton
1019
    inline_asm
1020
    isatty
1021
    ldbrx
1022
    libdc1394_1
1023
    libdc1394_2
1024
    llrint
1025
    log2
1026
    log2f
1027
    loongson
1028
    lrint
1029
    lrintf
1030
    lzo1x_999_compress
1031
    machine_ioctl_bt848_h
1032
    machine_ioctl_meteor_h
1033
    malloc_h
1034
    memalign
1035
    mkstemp
1036
    pld
1037
    posix_memalign
1038
    round
1039
    roundf
1040
    sdl
1041
    sdl_video_size
1042
    setmode
1043
    socklen_t
1044
    soundcard_h
1045
    poll_h
1046
    struct_addrinfo
1047
    struct_ipv6_mreq
1048
    struct_sockaddr_in6
1049
    struct_sockaddr_sa_len
1050
    struct_sockaddr_storage
1051
    sys_mman_h
1052
    sys_resource_h
1053
    sys_select_h
1054
    sys_soundcard_h
1055
    sys_videoio_h
1056
    ten_operands
1057
    termios_h
1058
    threads
1059
    truncf
1060
    vfp_args
1061
    VirtualAlloc
1062
    winsock2_h
1063
    xform_asm
1064
    yasm
1065
"
1066

    
1067
# options emitted with CONFIG_ prefix but not available on command line
1068
CONFIG_EXTRA="
1069
    avutil
1070
    gplv3
1071
    lgplv3
1072
"
1073

    
1074
CMDLINE_SELECT="
1075
    $ARCH_EXT_LIST
1076
    $CONFIG_LIST
1077
    $THREADS_LIST
1078
    asm
1079
    cross_compile
1080
    debug
1081
    extra_warnings
1082
    logging
1083
    optimizations
1084
    stripping
1085
    yasm
1086
"
1087

    
1088
PATHS_LIST='
1089
    bindir
1090
    datadir
1091
    incdir
1092
    libdir
1093
    mandir
1094
    prefix
1095
    shlibdir
1096
'
1097

    
1098
CMDLINE_SET="
1099
    $PATHS_LIST
1100
    arch
1101
    as
1102
    build_suffix
1103
    cc
1104
    cpu
1105
    cross_prefix
1106
    dep_cc
1107
    extra_version
1108
    host_cc
1109
    host_cflags
1110
    host_ldflags
1111
    host_libs
1112
    host_os
1113
    ld
1114
    logfile
1115
    malloc_prefix
1116
    nm
1117
    source_path
1118
    sysinclude
1119
    sysroot
1120
    target_exec
1121
    target_os
1122
    target_path
1123
"
1124

    
1125
CMDLINE_APPEND="
1126
    extra_cflags
1127
"
1128

    
1129
# code dependency declarations
1130

    
1131
# architecture extensions
1132

    
1133
armv5te_deps="arm"
1134
armv6_deps="arm"
1135
armv6t2_deps="arm"
1136
armvfp_deps="arm"
1137
iwmmxt_deps="arm"
1138
neon_deps="arm"
1139

    
1140
mmi_deps="mips"
1141

    
1142
altivec_deps="ppc"
1143
ppc4xx_deps="ppc"
1144

    
1145
vis_deps="sparc"
1146

    
1147
x86_64_suggest="cmov fast_cmov"
1148
amd3dnow_deps="mmx"
1149
amd3dnowext_deps="amd3dnow"
1150
mmx_deps="x86"
1151
mmx2_deps="mmx"
1152
sse_deps="mmx"
1153
ssse3_deps="sse"
1154

    
1155
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1156
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1157
fast_unaligned_if_any="armv6 ppc x86"
1158

    
1159
need_memalign="altivec neon sse"
1160
inline_asm_deps="!tms470"
1161

    
1162
# decoders / encoders / hardware accelerators
1163
aac_decoder_select="fft mdct aac_parser"
1164
aac_encoder_select="fft mdct"
1165
ac3_decoder_select="fft mdct ac3_parser"
1166
alac_encoder_select="lpc"
1167
atrac3_decoder_select="fft mdct"
1168
binkaudio_dct_decoder_select="fft mdct rdft dct"
1169
binkaudio_rdft_decoder_select="fft mdct rdft"
1170
cavs_decoder_select="golomb"
1171
cook_decoder_select="fft mdct"
1172
cscd_decoder_suggest="zlib"
1173
dca_decoder_select="fft mdct"
1174
dnxhd_encoder_select="aandct"
1175
dxa_decoder_select="zlib"
1176
eac3_decoder_select="ac3_decoder"
1177
eamad_decoder_select="aandct"
1178
eatgq_decoder_select="aandct"
1179
eatqi_decoder_select="aandct"
1180
ffv1_decoder_select="golomb"
1181
flac_decoder_select="golomb"
1182
flac_encoder_select="golomb lpc"
1183
flashsv_decoder_select="zlib"
1184
flashsv_encoder_select="zlib"
1185
flv_decoder_select="h263_decoder"
1186
flv_encoder_select="h263_encoder"
1187
h261_encoder_select="aandct"
1188
h263_decoder_select="h263_parser"
1189
h263_encoder_select="aandct"
1190
h263_vaapi_hwaccel_deps="va_va_h"
1191
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1192
h263i_decoder_select="h263_decoder"
1193
h263p_encoder_select="h263_encoder"
1194
h264_decoder_select="golomb"
1195
h264_dxva2_hwaccel_deps="dxva2api_h"
1196
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1197
h264_vaapi_hwaccel_deps="va_va_h"
1198
h264_vaapi_hwaccel_select="vaapi"
1199
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1200
h264_vdpau_decoder_select="vdpau h264_decoder"
1201
imc_decoder_select="fft mdct"
1202
jpegls_decoder_select="golomb"
1203
jpegls_encoder_select="golomb"
1204
ljpeg_encoder_select="aandct"
1205
loco_decoder_select="golomb"
1206
mjpeg_encoder_select="aandct"
1207
mlp_decoder_select="mlp_parser"
1208
mpeg1video_encoder_select="aandct"
1209
mpeg2video_encoder_select="aandct"
1210
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1211
mpeg4_encoder_select="h263_encoder"
1212
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1213
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1214
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1215
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1216
mpeg2_vaapi_hwaccel_deps="va_va_h"
1217
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1218
mpeg4_vaapi_hwaccel_deps="va_va_h"
1219
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1220
mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1221
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1222
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1223
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1224
msmpeg4v1_decoder_select="h263_decoder"
1225
msmpeg4v1_encoder_select="h263_encoder"
1226
msmpeg4v2_decoder_select="h263_decoder"
1227
msmpeg4v2_encoder_select="h263_encoder"
1228
msmpeg4v3_decoder_select="h263_decoder"
1229
msmpeg4v3_encoder_select="h263_encoder"
1230
nellymoser_decoder_select="fft mdct"
1231
nellymoser_encoder_select="fft mdct"
1232
png_decoder_select="zlib"
1233
png_encoder_select="zlib"
1234
qdm2_decoder_select="fft mdct rdft"
1235
rv10_decoder_select="h263_decoder"
1236
rv10_encoder_select="h263_encoder"
1237
rv20_decoder_select="h263_decoder"
1238
rv20_encoder_select="h263_encoder"
1239
rv30_decoder_select="golomb"
1240
rv40_decoder_select="golomb"
1241
shorten_decoder_select="golomb"
1242
sonic_decoder_select="golomb"
1243
sonic_encoder_select="golomb"
1244
sonic_ls_encoder_select="golomb"
1245
svq3_decoder_select="golomb"
1246
svq3_decoder_suggest="zlib"
1247
theora_decoder_select="vp3_decoder"
1248
tiff_decoder_suggest="zlib"
1249
tiff_encoder_suggest="zlib"
1250
truehd_decoder_select="mlp_decoder"
1251
tscc_decoder_select="zlib"
1252
vc1_decoder_select="h263_decoder"
1253
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1254
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1255
vc1_vaapi_hwaccel_deps="va_va_h"
1256
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1257
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1258
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1259
vorbis_decoder_select="fft mdct"
1260
vorbis_encoder_select="fft mdct"
1261
vp6a_decoder_select="vp6_decoder"
1262
vp6f_decoder_select="vp6_decoder"
1263
wmav1_decoder_select="fft mdct"
1264
wmav1_encoder_select="fft mdct"
1265
wmav2_decoder_select="fft mdct"
1266
wmav2_encoder_select="fft mdct"
1267
wmv1_decoder_select="h263_decoder"
1268
wmv1_encoder_select="h263_encoder"
1269
wmv2_decoder_select="h263_decoder"
1270
wmv2_encoder_select="h263_encoder"
1271
wmv3_decoder_select="vc1_decoder"
1272
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1273
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1274
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1275
zlib_decoder_select="zlib"
1276
zlib_encoder_select="zlib"
1277
zmbv_decoder_select="zlib"
1278
zmbv_encoder_select="zlib"
1279

    
1280
# parsers
1281
h264_parser_select="golomb"
1282

    
1283
# bitstream_filters
1284
aac_adtstoasc_bsf_select="aac_parser"
1285

    
1286
# external libraries
1287
libdirac_decoder_deps="libdirac !libschroedinger"
1288
libdirac_encoder_deps="libdirac"
1289
libfaac_encoder_deps="libfaac"
1290
libfaad_decoder_deps="libfaad"
1291
libfaadbin_decoder_extralibs='$ldl'
1292
libgsm_decoder_deps="libgsm"
1293
libgsm_encoder_deps="libgsm"
1294
libgsm_ms_decoder_deps="libgsm"
1295
libgsm_ms_encoder_deps="libgsm"
1296
libmp3lame_encoder_deps="libmp3lame"
1297
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1298
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1299
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1300
libopenjpeg_decoder_deps="libopenjpeg"
1301
libschroedinger_decoder_deps="libschroedinger"
1302
libschroedinger_encoder_deps="libschroedinger"
1303
libspeex_decoder_deps="libspeex"
1304
libtheora_encoder_deps="libtheora"
1305
libvorbis_encoder_deps="libvorbis"
1306
libx264_encoder_deps="libx264"
1307
libxvid_encoder_deps="libxvid"
1308

    
1309
# demuxers / muxers
1310
ac3_demuxer_deps="ac3_parser"
1311
asf_stream_muxer_select="asf_muxer"
1312
avisynth_demuxer_deps="avisynth"
1313
dirac_demuxer_deps="dirac_parser"
1314
eac3_demuxer_select="ac3_parser"
1315
ipod_muxer_select="mov_muxer"
1316
libnut_demuxer_deps="libnut"
1317
libnut_muxer_deps="libnut"
1318
matroska_audio_muxer_select="matroska_muxer"
1319
matroska_demuxer_suggest="zlib bzlib"
1320
mov_demuxer_suggest="zlib"
1321
mp3_demuxer_deps="mpegaudio_parser"
1322
mp4_muxer_select="mov_muxer"
1323
mpegtsraw_demuxer_select="mpegts_demuxer"
1324
mxf_d10_muxer_select="mxf_muxer"
1325
ogg_demuxer_select="golomb"
1326
psp_muxer_select="mov_muxer"
1327
rtsp_demuxer_deps="sdp_demuxer"
1328
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1329
spdif_muxer_select="aac_parser"
1330
tg2_muxer_select="mov_muxer"
1331
tgp_muxer_select="mov_muxer"
1332
w64_demuxer_deps="wav_demuxer"
1333

    
1334
# indevs / outdevs
1335
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1336
alsa_indev_extralibs="-lasound"
1337
alsa_outdev_deps="alsa_asoundlib_h"
1338
alsa_outdev_extralibs="-lasound"
1339
audio_beos_indev_deps="audio_beos"
1340
audio_beos_indev_extralibs="-lmedia -lbe"
1341
audio_beos_outdev_deps="audio_beos"
1342
audio_beos_outdev_extralibs="-lmedia -lbe"
1343
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1344
dv1394_indev_deps="dv1394 dv_demuxer"
1345
jack_indev_deps="jack_jack_h"
1346
jack_indev_extralibs="-ljack"
1347
libdc1394_indev_deps="libdc1394"
1348
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1349
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1350
v4l_indev_deps="linux_videodev_h"
1351
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1352
vfwcap_indev_deps="capCreateCaptureWindow"
1353
vfwcap_indev_extralibs="-lavicap32"
1354
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1355
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1356

    
1357
# protocols
1358
gopher_protocol_deps="network"
1359
http_protocol_deps="network"
1360
rtmp_protocol_deps="tcp_protocol"
1361
rtp_protocol_deps="udp_protocol"
1362
tcp_protocol_deps="network"
1363
udp_protocol_deps="network"
1364

    
1365
# filters
1366
movie_filter_deps="avfilter_lavf"
1367
avfilter_lavf_deps="avformat"
1368

    
1369
# libraries
1370
avdevice_deps="avcodec avformat"
1371
avformat_deps="avcodec"
1372

    
1373
# programs
1374
ffmpeg_deps="avcodec avformat swscale"
1375
ffplay_deps="avcodec avformat swscale sdl"
1376
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1377
ffserver_extralibs='$ldl'
1378

    
1379
doc_deps="texi2html"
1380

    
1381
# default parameters
1382

    
1383
logfile="config.err"
1384

    
1385
# installation paths
1386
prefix_default="/usr/local"
1387
bindir_default='${prefix}/bin'
1388
datadir_default='${prefix}/share/ffmpeg'
1389
incdir_default='${prefix}/include'
1390
libdir_default='${prefix}/lib'
1391
mandir_default='${prefix}/share/man'
1392
shlibdir_default="$libdir_default"
1393

    
1394
# toolchain
1395
ar="ar"
1396
cc_default="gcc"
1397
cc_version=\"unknown\"
1398
host_cc_default="gcc"
1399
ln_s="ln -sf"
1400
nm_default="nm"
1401
objformat="elf"
1402
ranlib="ranlib"
1403
strip="strip"
1404
yasmexe="yasm"
1405

    
1406
nm_opts='-g'
1407

    
1408
# machine
1409
arch=$(uname -m)
1410
cpu="generic"
1411

    
1412
# OS
1413
target_os=$(tolower $(uname -s))
1414
host_os=$target_os
1415

    
1416
# configurable options
1417
enable avcodec
1418
enable avdevice
1419
enable avformat
1420
enable avutil
1421
enable asm
1422
enable debug
1423
enable doc
1424
enable fastdiv
1425
enable ffmpeg
1426
enable ffplay
1427
enable ffserver
1428
enable mpegaudio_hp
1429
enable network
1430
enable optimizations
1431
enable protocols
1432
enable static
1433
enable stripping
1434
enable swscale
1435
enable swscale_alpha
1436

    
1437
# build settings
1438
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1439
FFSERVERLDFLAGS=-Wl,-E
1440
LIBPREF="lib"
1441
LIBSUF=".a"
1442
FULLNAME='$(NAME)$(BUILDSUF)'
1443
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1444
SLIBPREF="lib"
1445
SLIBSUF=".so"
1446
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1447
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1448
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1449
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1450

    
1451
CC_O='-o $@'
1452

    
1453
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1454
host_libs='-lm'
1455

    
1456
target_path='$(CURDIR)'
1457

    
1458
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1459
# full relative path for objects in subdirectories for non-recursive Make.
1460
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1461
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1462

    
1463
# find source path
1464
source_path="$(dirname "$0")"
1465
enable source_path_used
1466
if test -f configure; then
1467
    source_path="$(pwd)"
1468
    disable source_path_used
1469
else
1470
    source_path="$(cd "$source_path"; pwd)"
1471
    echo "$source_path" | grep -q '[[:blank:]]' &&
1472
        die "Out of tree builds are impossible with whitespace in source path."
1473
    test -e "$source_path/config.h" &&
1474
        die "Out of tree builds are impossible with config.h in source dir."
1475
fi
1476

    
1477
for v in "$@"; do
1478
    r=${v#*=}
1479
    l=${v%"$r"}
1480
    r=$(sh_quote "$r")
1481
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1482
done
1483

    
1484
find_things(){
1485
    thing=$1
1486
    pattern=$2
1487
    file=$source_path/$3
1488
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1489
}
1490

    
1491
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1492
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1493
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1494
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1495
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1496
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1497
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1498
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1499
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1500
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1501
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1502

    
1503
enable $ARCH_EXT_LIST \
1504
       $DECODER_LIST \
1505
       $ENCODER_LIST \
1506
       $HWACCEL_LIST \
1507
       $PARSER_LIST \
1508
       $BSF_LIST \
1509
       $DEMUXER_LIST \
1510
       $MUXER_LIST \
1511
       $FILTER_LIST \
1512
       $PROTOCOL_LIST \
1513
       $INDEV_LIST \
1514
       $OUTDEV_LIST \
1515

    
1516
die_unknown(){
1517
    echo "Unknown option \"$1\"."
1518
    echo "See $0 --help for available options."
1519
    exit 1
1520
}
1521

    
1522
show_list() {
1523
    suffix=_$1
1524
    shift
1525
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1526
    exit 0
1527
}
1528

    
1529
for opt do
1530
    optval="${opt#*=}"
1531
    case "$opt" in
1532
    --extra-ldflags=*) add_ldflags $optval
1533
    ;;
1534
    --extra-libs=*) add_extralibs $optval
1535
    ;;
1536
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1537
    ;;
1538
    --enable-debug=*) debuglevel="$optval"
1539
    ;;
1540
    --enable-*=*|--disable-*=*)
1541
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1542
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1543
    eval list=\$$(toupper $thing)_LIST
1544
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1545
    $action $(filter "$name" $list)
1546
    ;;
1547
    --enable-?*|--disable-?*)
1548
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1549
    if is_in $option $COMPONENT_LIST; then
1550
        test $action = disable && action=unset
1551
        eval $action \$$(toupper ${option%s})_LIST
1552
    elif is_in $option $CMDLINE_SELECT; then
1553
        $action $option
1554
    else
1555
        die_unknown $opt
1556
    fi
1557
    ;;
1558
    --list-*)
1559
        NAME="${opt#--list-}"
1560
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1561
        NAME=${NAME%s}
1562
        eval show_list $NAME \$$(toupper $NAME)_LIST
1563
    ;;
1564
    --help|-h) show_help
1565
    ;;
1566
    *)
1567
    optname="${opt%%=*}"
1568
    optname="${optname#--}"
1569
    optname=$(echo "$optname" | sed 's/-/_/g')
1570
    if is_in $optname $CMDLINE_SET; then
1571
        eval $optname='$optval'
1572
    elif is_in $optname $CMDLINE_APPEND; then
1573
        append $optname "$optval"
1574
    else
1575
         die_unknown $opt
1576
    fi
1577
    ;;
1578
    esac
1579
done
1580

    
1581
disabled logging && logfile=/dev/null
1582

    
1583
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1584
set >> $logfile
1585

    
1586
test -n "$cross_prefix" && enable cross_compile
1587

    
1588
ar="${cross_prefix}${ar}"
1589
cc_default="${cross_prefix}${cc_default}"
1590
nm_default="${cross_prefix}${nm_default}"
1591
ranlib="${cross_prefix}${ranlib}"
1592
strip="${cross_prefix}${strip}"
1593

    
1594
sysinclude_default="${sysroot}/usr/include"
1595

    
1596
set_default cc nm sysinclude
1597
enabled cross_compile || host_cc_default=$cc
1598
set_default host_cc
1599

    
1600
exesuf() {
1601
    case $1 in
1602
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1603
    esac
1604
}
1605

    
1606
EXESUF=$(exesuf $target_os)
1607
HOSTEXESUF=$(exesuf $host_os)
1608

    
1609
# set temporary file name
1610
: ${TMPDIR:=$TEMPDIR}
1611
: ${TMPDIR:=$TMP}
1612
: ${TMPDIR:=/tmp}
1613

    
1614
if ! check_cmd type mktemp; then
1615
    # simple replacement for missing mktemp
1616
    # NOT SAFE FOR GENERAL USE
1617
    mktemp(){
1618
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1619
    }
1620
fi
1621

    
1622
tmpfile(){
1623
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1624
        (set -C; exec > $tmp) 2>/dev/null ||
1625
        die "Unable to create temporary file in $TMPDIR."
1626
    append TMPFILES $tmp
1627
    eval $1=$tmp
1628
}
1629

    
1630
trap 'rm -f -- $TMPFILES' EXIT
1631
trap exit HUP INT TERM
1632

    
1633
tmpfile TMPC  .c
1634
tmpfile TMPE  $EXESUF
1635
tmpfile TMPH  .h
1636
tmpfile TMPO  .o
1637
tmpfile TMPS  .S
1638
tmpfile TMPV  .ver
1639
tmpfile TMPSH .sh
1640

    
1641
unset -f mktemp
1642

    
1643
# make sure we can execute files in $TMPDIR
1644
cat > $TMPSH 2>> $logfile <<EOF
1645
#! /bin/sh
1646
EOF
1647
chmod +x $TMPSH >> $logfile 2>&1
1648
if ! $TMPSH >> $logfile 2>&1; then
1649
    cat <<EOF
1650
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1651
variable to another directory and make sure that it is not mounted noexec.
1652
EOF
1653
    die "Sanity test failed."
1654
fi
1655

    
1656
filter_cflags=echo
1657
filter_cppflags=echo
1658
filter_asflags=echo
1659

    
1660
if   $cc -v 2>&1 | grep -qi ^gcc; then
1661
    cc_type=gcc
1662
    cc_version=__VERSION__
1663
    if ! $cc -dumpversion | grep -q '^2\.'; then
1664
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1665
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1666
    fi
1667
    speed_cflags='-O3'
1668
    size_cflags='-Os'
1669
elif $cc --version 2>/dev/null | grep -q Intel; then
1670
    cc_type=icc
1671
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1672
    CC_DEPFLAGS='-MMD'
1673
    AS_DEPFLAGS='-MMD'
1674
    speed_cflags='-O3'
1675
    size_cflags='-Os'
1676
elif $cc -v 2>&1 | grep -q xlc; then
1677
    cc_type=xlc
1678
    cc_version="AV_STRINGIFY(__IBMC__)"
1679
    speed_cflags='-O5'
1680
    size_cflags='-O5 -qcompact'
1681
elif $cc -V 2>/dev/null | grep -q Compaq; then
1682
    cc_type=ccc
1683
    cc_version="AV_STRINGIFY(__DECC_VER)"
1684
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1685
    debuglevel=3
1686
    add_ldflags -Wl,-z,now # calls to libots crash without this
1687
    speed_cflags='-fast'
1688
    size_cflags='-O1'
1689
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1690
    test -d "$sysroot" || die "No valid sysroot specified."
1691
    cc_type=armcc
1692
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1693
    armcc_conf="$PWD/armcc.conf"
1694
    $cc --arm_linux_configure                 \
1695
        --arm_linux_config_file="$armcc_conf" \
1696
        --configure_sysroot="$sysroot"        \
1697
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1698
        die "Error creating armcc configuration file."
1699
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1700
    as_default="${cross_prefix}gcc"
1701
    CC_DEPFLAGS='-MMD'
1702
    AS_DEPFLAGS='-MMD'
1703
    speed_cflags='-O3'
1704
    size_cflags='-Os'
1705
elif $cc -version 2>/dev/null | grep -q TMS470; then
1706
    cc_type=tms470
1707
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1708
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1709
    CC_O='-fr=$(@D)'
1710
    as_default="${cross_prefix}gcc"
1711
    ld_default="${cross_prefix}gcc"
1712
    TMPO=$(basename $TMPC .c).o
1713
    append TMPFILES $TMPO
1714
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1715
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1716
    AS_DEPFLAGS='-MMD'
1717
    speed_cflags='-O3 -mf=5'
1718
    size_cflags='-O3 -mf=2'
1719
    filter_cflags=tms470_flags
1720
    tms470_flags(){
1721
        for flag; do
1722
            case $flag in
1723
                -march=*|-mcpu=*)
1724
                    case "${flag#*=}" in
1725
                        armv7-a|cortex-a*)      echo -mv=7a8 ;;
1726
                        armv7-r|cortex-r*)      echo -mv=7r4 ;;
1727
                        armv7-m|cortex-m*)      echo -mv=7m3 ;;
1728
                        armv6*|arm11*)          echo -mv=6   ;;
1729
                        armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1730
                                                echo -mv=5e  ;;
1731
                        armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1732
                    esac
1733
                    ;;
1734
                -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1735
                -mfpu=vfp)      echo --float_support=vfpv2        ;;
1736
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1737
                -msoft-float)   echo --float_support=vfplib       ;;
1738
                -O[0-3]|-mf=*)  echo $flag                        ;;
1739
                -g)             echo -g -mn                       ;;
1740
                -pds=*)         echo $flag                        ;;
1741
            esac
1742
        done
1743
    }
1744
elif $cc -v 2>&1 | grep -q clang; then
1745
    cc_type=clang
1746
    cc_version=__VERSION__
1747
    CC_DEPFLAGS='-MMD'
1748
    AS_DEPFLAGS='-MMD'
1749
    speed_cflags='-O3'
1750
    size_cflags='-Os'
1751
elif $cc -V 2>&1 | grep -q Sun; then
1752
    cc_type=suncc
1753
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
1754
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1755
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1756
    speed_cflags='-O5'
1757
    size_cflags='-O5 -xspace'
1758
    filter_cflags=suncc_flags
1759
    suncc_flags(){
1760
        for flag; do
1761
            case $flag in
1762
                -march=*|-mcpu=*)
1763
                    case "${flag#*=}" in
1764
                        native)                   echo -xtarget=native       ;;
1765
                        v9)                       echo -xarch=sparc          ;;
1766
                        ultrasparc)               echo -xarch=sparcvis       ;;
1767
                        ultrasparc3|niagara*)     echo -xarch=sparcvis2      ;;
1768
                        i586|pentium)             echo -xchip=pentium        ;;
1769
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1770
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1771
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1772
                        pentium4*)          echo -xtarget=pentium4           ;;
1773
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1774
                        *-sse3)             echo -xarch=sse3                 ;;
1775
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
1776
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1777
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1778
                        k8|opteron|athlon64|athlon-fx)
1779
                                                  echo -xarch=sse2a          ;;
1780
                        athlon*)                  echo -xarch=pentium_proa   ;;
1781
                    esac
1782
                    ;;
1783
                -std=c99)             echo -xc99              ;;
1784
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
1785
                -fPIC)                echo -KPIC -xcode=pic32 ;;
1786
                -W*,*)                echo $flag              ;;
1787
                -f*-*|-W*)                                    ;;
1788
                *)                    echo $flag              ;;
1789
            esac
1790
        done
1791
    }
1792
fi
1793

    
1794
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1795

    
1796
: ${as_default:=$cc}
1797
: ${dep_cc_default:=$cc}
1798
: ${ld_default:=$cc}
1799
set_default as dep_cc ld
1800

    
1801
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1802
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1803

    
1804
add_cflags $extra_cflags
1805
add_asflags $extra_cflags
1806

    
1807
if test -n "$sysroot"; then
1808
    case "$cc_type" in
1809
        gcc)
1810
            add_cppflags --sysroot="$sysroot"
1811
            add_ldflags --sysroot="$sysroot"
1812
        ;;
1813
        tms470)
1814
            add_cppflags -I"$sysinclude"
1815
            add_ldflags  --sysroot="$sysroot"
1816
        ;;
1817
        clang)
1818
            add_cppflags -isysroot="$sysroot"
1819
            add_ldflags -isysroot="$sysroot"
1820
        ;;
1821
    esac
1822
fi
1823

    
1824
if test "$cpu" = host; then
1825
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1826

    
1827
    case "$cc_type" in
1828
        gcc)
1829
            check_native(){
1830
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1831
                sed -n "/$1=/{
1832
                            s/.*$1=\\([^ ]*\\).*/\\1/
1833
                            p
1834
                            q
1835
                        }" $TMPE
1836
            }
1837
            cpu=$(check_native -march || check_native -mcpu)
1838
        ;;
1839
    esac
1840

    
1841
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1842
fi
1843

    
1844
# Deal with common $arch aliases
1845
case "$arch" in
1846
    arm*)
1847
        arch="arm"
1848
    ;;
1849
    mips|mipsel|IP*)
1850
        arch="mips"
1851
    ;;
1852
    mips64)
1853
        arch="mips"
1854
        subarch="mips64"
1855
    ;;
1856
    parisc|hppa)
1857
        arch="parisc"
1858
    ;;
1859
    parisc64|hppa64)
1860
        arch="parisc"
1861
        subarch="parisc64"
1862
    ;;
1863
    "Power Macintosh"|ppc|powerpc)
1864
        arch="ppc"
1865
    ;;
1866
    ppc64)
1867
        arch="ppc"
1868
        subarch="ppc64"
1869
    ;;
1870
    s390|s390x)
1871
        arch="s390"
1872
    ;;
1873
    sh4|sh)
1874
        arch="sh4"
1875
    ;;
1876
    sun4u|sparc64)
1877
        arch="sparc"
1878
        subarch="sparc64"
1879
    ;;
1880
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1881
        arch="x86"
1882
    ;;
1883
esac
1884

    
1885
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1886
enable $arch
1887

    
1888
# Add processor-specific flags
1889
if test "$cpu" = generic; then
1890
    : do nothing
1891
elif enabled ppc; then
1892

    
1893
    case $(tolower $cpu) in
1894
        601|ppc601|powerpc601)
1895
            cpuflags="-mcpu=601"
1896
            disable altivec
1897
        ;;
1898
        603*|ppc603*|powerpc603*)
1899
            cpuflags="-mcpu=603"
1900
            disable altivec
1901
        ;;
1902
        604*|ppc604*|powerpc604*)
1903
            cpuflags="-mcpu=604"
1904
            disable altivec
1905
        ;;
1906
        g3|75*|ppc75*|powerpc75*)
1907
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1908
            disable altivec
1909
        ;;
1910
        g4|745*|ppc745*|powerpc745*)
1911
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1912
        ;;
1913
        74*|ppc74*|powerpc74*)
1914
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1915
        ;;
1916
        g5|970|ppc970|powerpc970|power4*)
1917
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1918
        ;;
1919
        cell)
1920
            cpuflags="-mcpu=cell"
1921
            enable ldbrx
1922
        ;;
1923
        e500v2)
1924
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1925
            disable altivec
1926
        ;;
1927
        e500)
1928
            cpuflags="-mcpu=8540 -mhard-float"
1929
            disable altivec
1930
        ;;
1931
    esac
1932

    
1933
elif enabled x86; then
1934

    
1935
    case $cpu in
1936
        i[345]86|pentium)
1937
            cpuflags="-march=$cpu"
1938
            disable mmx
1939
        ;;
1940
        # targets that do NOT support conditional mov (cmov)
1941
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1942
            cpuflags="-march=$cpu"
1943
            disable cmov
1944
        ;;
1945
        # targets that do support conditional mov (cmov)
1946
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1947
            cpuflags="-march=$cpu"
1948
            enable cmov
1949
            enable fast_cmov
1950
        ;;
1951
        # targets that do support conditional mov but on which it's slow
1952
        pentium4|pentium4m|prescott|nocona)
1953
            cpuflags="-march=$cpu"
1954
            enable cmov
1955
            disable fast_cmov
1956
        ;;
1957
    esac
1958

    
1959
elif enabled sparc; then
1960

    
1961
    case $cpu in
1962
        sparc64)
1963
            cpuflags="-mcpu=v9"
1964
        ;;
1965
    esac
1966

    
1967
elif enabled arm; then
1968

    
1969
    case $cpu in
1970
        armv*)
1971
            cpuflags="-march=$cpu"
1972
        ;;
1973
        *)
1974
            cpuflags="-mcpu=$cpu"
1975
        ;;
1976
    esac
1977

    
1978
elif enabled alpha; then
1979

    
1980
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1981

    
1982
elif enabled bfin; then
1983

    
1984
    cpuflags="-mcpu=$cpu"
1985

    
1986
elif enabled mips; then
1987

    
1988
    cpuflags="-march=$cpu"
1989

    
1990
elif enabled avr32; then
1991

    
1992
    case $cpu in
1993
        ap7[02]0[0-2])
1994
            subarch="avr32_ap"
1995
            cpuflags="-mpart=$cpu"
1996
        ;;
1997
        ap)
1998
            subarch="avr32_ap"
1999
            cpuflags="-march=$cpu"
2000
        ;;
2001
        uc3[ab]*)
2002
            subarch="avr32_uc"
2003
            cpuflags="-mcpu=$cpu"
2004
        ;;
2005
        uc)
2006
            subarch="avr32_uc"
2007
            cpuflags="-march=$cpu"
2008
        ;;
2009
    esac
2010

    
2011
fi
2012

    
2013
add_cflags $cpuflags
2014
add_asflags $cpuflags
2015

    
2016
# compiler sanity check
2017
check_exec <<EOF
2018
int main(void){ return 0; }
2019
EOF
2020
if test "$?" != 0; then
2021
    echo "$cc is unable to create an executable file."
2022
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2023
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2024
        echo "Only do this if you know what cross compiling means."
2025
    fi
2026
    die "C compiler test failed."
2027
fi
2028

    
2029
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2030
check_cflags -std=c99
2031
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2032
#include <stdlib.h>
2033
EOF
2034
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2035
#include <stdlib.h>
2036
EOF
2037

    
2038
check_host_cflags -std=c99
2039

    
2040
case "$arch" in
2041
    alpha|ia64|mips|parisc|sparc)
2042
        spic=$shared
2043
    ;;
2044
    x86)
2045
        subarch="x86_32"
2046
        check_cc <<EOF && subarch="x86_64"
2047
        int test[(int)sizeof(char*) - 7];
2048
EOF
2049
        if test "$subarch" = "x86_64"; then
2050
            spic=$shared
2051
        fi
2052
    ;;
2053
esac
2054

    
2055
enable $subarch
2056
enabled spic && enable pic
2057
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2058

    
2059
# OS specific
2060
case $target_os in
2061
    beos|haiku|zeta)
2062
        prefix_default="$HOME/config"
2063
        # 3 gcc releases known for BeOS, each with ugly bugs
2064
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
2065
        case "$gcc_version" in
2066
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
2067
            disable mmx
2068
            ;;
2069
          *20010315*) echo "BeBits gcc"
2070
            add_cflags -fno-expensive-optimizations
2071
            ;;
2072
        esac
2073
        SHFLAGS=-nostart
2074
        # enable BeOS things
2075
        enable audio_beos
2076
        # no need for libm, but the inet stuff
2077
        # Check for BONE
2078
        # XXX: actually should check for NOT net_server
2079
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
2080
            network_extralibs="-lbind -lsocket"
2081
        else
2082
            enable beos_netserver
2083
            network_extralibs="-lnet"
2084
        fi ;;
2085
    sunos)
2086
        FFSERVERLDFLAGS=""
2087
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2088
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2089
        network_extralibs="-lsocket -lnsl"
2090
        add_cppflags -D__EXTENSIONS__
2091
        nm_opts='-P -g'
2092
        ;;
2093
    netbsd)
2094
        oss_indev_extralibs="-lossaudio"
2095
        oss_outdev_extralibs="-lossaudio"
2096
        ;;
2097
    openbsd)
2098
        enable malloc_aligned
2099
        # On OpenBSD 4.5. the compiler does not use PIC unless
2100
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2101
        # however the generated executable will not do anything
2102
        # (simply quits with exit-code 1, no crash, no output).
2103
        # Thus explicitly enable PIC here.
2104
        enable pic
2105
        SHFLAGS='-shared'
2106
        oss_indev_extralibs="-lossaudio"
2107
        oss_outdev_extralibs="-lossaudio"
2108
        ;;
2109
    freebsd|dragonfly)
2110
        enable malloc_aligned
2111
        ;;
2112
    bsd/os)
2113
        osextralibs="-lpoll -lgnugetopt"
2114
        strip="strip -d"
2115
        ;;
2116
    darwin)
2117
        enable malloc_aligned
2118
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2119
        strip="strip -x"
2120
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2121
        SLIBSUF=".dylib"
2122
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2123
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2124
        FFSERVERLDFLAGS=-Wl,-bind_at_load
2125
        objformat="macho"
2126
        enabled x86_64 && objformat="macho64"
2127
        enabled_any pic shared ||
2128
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2129
        ;;
2130
    mingw32*)
2131
        if test $target_os = "mingw32ce"; then
2132
            disable network
2133
        else
2134
            target_os=mingw32
2135
        fi
2136
        LIBTARGET=i386
2137
        if enabled x86_64; then
2138
            enable malloc_aligned
2139
            LIBTARGET=x64
2140
        elif enabled arm; then
2141
            LIBTARGET=arm
2142
        fi
2143
        shlibdir_default="$bindir_default"
2144
        disable ffserver
2145
        SLIBPREF=""
2146
        SLIBSUF=".dll"
2147
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2148
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2149
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2150
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2151
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2152
            install -d "$(LIBDIR)"; \
2153
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2154
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2155
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
2156
        objformat="win32"
2157
        enable dos_paths
2158
        check_cflags -fno-common
2159
        if ! enabled x86_64; then
2160
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2161
                die "ERROR: MinGW runtime version must be >= 3.15."
2162
            enabled_any avisynth vfwcap_indev &&
2163
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2164
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2165
        fi
2166
        ;;
2167
    cygwin*)
2168
        target_os=cygwin
2169
        shlibdir_default="$bindir_default"
2170
        SLIBPREF="cyg"
2171
        SLIBSUF=".dll"
2172
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2173
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2174
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2175
        objformat="win32"
2176
        enable dos_paths
2177
        check_cflags -fno-common
2178
        ;;
2179
    *-dos|freedos|opendos)
2180
        disable ffplay ffserver
2181
        disable $INDEV_LIST $OUTDEV_LIST
2182
        network_extralibs="-lsocket"
2183
        objformat="coff"
2184
        enable dos_paths
2185
        ;;
2186
    linux)
2187
        enable dv1394
2188
        ;;
2189
    irix*)
2190
        target_os=irix
2191
        ranlib="echo ignoring ranlib"
2192
        ;;
2193
    os/2*)
2194
        strip="lxlite"
2195
        ln_s="cp -f"
2196
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2197
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2198
        FFSERVERLDFLAGS=""
2199
        LIBSUF="_s.a"
2200
        SLIBPREF=""
2201
        SLIBSUF=".dll"
2202
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2203
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2204
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2205
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2206
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2207
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2208
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2209
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2210
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2211
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2212
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2213
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2214
        enable dos_paths
2215
        ;;
2216
    gnu/kfreebsd)
2217
        ;;
2218
    gnu)
2219
        ;;
2220

    
2221
    *)
2222
        die "Unknown OS '$target_os'."
2223
        ;;
2224
esac
2225

    
2226
set_default $PATHS_LIST
2227

    
2228
add_extralibs $osextralibs
2229

    
2230
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2231
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2232

    
2233
# we need to build at least one lib type
2234
if ! enabled_any static shared; then
2235
    cat <<EOF
2236
At least one library type must be built.
2237
Specify --enable-static to build the static libraries or --enable-shared to
2238
build the shared libraries as well. To only build the shared libraries specify
2239
--disable-static in addition to --enable-shared.
2240
EOF
2241
    exit 1;
2242
fi
2243

    
2244
disabled static && LIBNAME=""
2245

    
2246
if enabled_any libfaad libfaadbin ; then
2247
    if check_header faad.h; then
2248
        check_cc <<EOF
2249
#include <faad.h>
2250
#ifndef FAAD2_VERSION
2251
ok faad1
2252
#endif
2253
int main(void) { return 0; }
2254
EOF
2255
        test $? = 0 && enable libfaad2
2256
    else
2257
        die "FAAD test failed."
2258
    fi
2259
fi
2260

    
2261

    
2262
die_license_disabled() {
2263
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2264
}
2265

    
2266
die_license_disabled gpl libfaad2
2267
die_license_disabled gpl libx264
2268
die_license_disabled gpl libxvid
2269
die_license_disabled gpl postproc
2270
die_license_disabled gpl x11grab
2271

    
2272
die_license_disabled nonfree libfaac
2273

    
2274
die_license_disabled version3 libopencore_amrnb
2275
die_license_disabled version3 libopencore_amrwb
2276

    
2277
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2278

    
2279
check_deps $ARCH_EXT_LIST
2280

    
2281
disabled optimizations || check_cflags -fomit-frame-pointer
2282

    
2283
enable_pic() {
2284
    enable pic
2285
    add_cppflags -DPIC
2286
    add_cflags   -fPIC
2287
    add_asflags  -fPIC
2288
}
2289

    
2290
enabled pic && enable_pic
2291

    
2292
check_cc <<EOF || die "Symbol mangling check failed."
2293
int ff_extern;
2294
EOF
2295
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2296
extern_prefix=${sym%%ff_extern*}
2297

    
2298
check_cc <<EOF && enable inline_asm
2299
void foo(void) { __asm__ volatile ("" ::); }
2300
EOF
2301

    
2302
_restrict=
2303
for restrict_keyword in restrict __restrict__ __restrict; do
2304
    check_cc <<EOF && _restrict=$restrict_keyword && break
2305
void foo(char * $restrict_keyword p);
2306
EOF
2307
done
2308

    
2309
check_cc <<EOF && enable attribute_packed
2310
struct { int x; } __attribute__((packed)) x;
2311
EOF
2312

    
2313
check_cc <<EOF && enable attribute_may_alias
2314
union { int x; } __attribute__((may_alias)) x;
2315
EOF
2316

    
2317
check_cc <<EOF || die "endian test failed"
2318
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2319
EOF
2320
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2321

    
2322
if enabled alpha; then
2323

    
2324
    check_cflags -mieee
2325

    
2326
elif enabled arm; then
2327

    
2328
    check_cflags -marm
2329

    
2330
    check_ld <<EOF && enable vfp_args
2331
__asm__ (".eabi_attribute 28, 1");
2332
int main(void) { return 0; }
2333
EOF
2334

    
2335
    # We have to check if pld is a nop and disable it.
2336
    check_asm pld '"pld [r0]"'
2337

    
2338
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2339
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2340
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2341
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2342
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2343
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2344

    
2345
    enabled_all armv6t2 shared !pic && enable_pic
2346

    
2347
elif enabled ia64; then
2348

    
2349
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2350
    enabled shared && enable_weak hardcoded_tables
2351

    
2352
elif enabled mips; then
2353

    
2354
    check_asm loongson '"dmult.g $1, $2, $3"'
2355
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2356

    
2357
elif enabled ppc; then
2358

    
2359
    check_asm dcbzl     '"dcbzl 0, 1"'
2360
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2361
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2362

    
2363
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2364
    if enabled altivec; then
2365
        check_cflags -maltivec -mabi=altivec &&
2366
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2367
        check_cflags -faltivec
2368

    
2369
        # check if our compiler supports Motorola AltiVec C API
2370
        check_cc <<EOF || disable altivec
2371
$inc_altivec_h
2372
int main(void) {
2373
    vector signed int v1, v2, v3;
2374
    v1 = vec_add(v2,v3);
2375
    return 0;
2376
}
2377
EOF
2378

    
2379
        # check if our compiler supports braces for vector declarations
2380
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2381
$inc_altivec_h
2382
int main (void) { (vector int) {1}; return 0; }
2383
EOF
2384
    fi
2385

    
2386
elif enabled sparc; then
2387

    
2388
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2389
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2390

    
2391
elif enabled x86; then
2392

    
2393
    # check whether EBP is available on x86
2394
    # As 'i' is stored on the stack, this program will crash
2395
    # if the base pointer is used to access it because the
2396
    # base pointer is cleared in the inline assembly code.
2397
    check_exec_crash <<EOF && enable ebp_available
2398
    volatile int i=0;
2399
    __asm__ volatile (
2400
        "xorl %%ebp, %%ebp"
2401
    ::: "%ebp");
2402
    return i;
2403
EOF
2404

    
2405
    # check whether EBX is available on x86
2406
    check_asm ebx_available '""::"b"(0)' &&
2407
        check_asm ebx_available '"":::"%ebx"'
2408

    
2409
    # check whether more than 10 operands are supported
2410
    check_cc <<EOF && enable ten_operands
2411
int main(void) {
2412
    int x=0;
2413
    __asm__ volatile(
2414
        ""
2415
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2416
    );
2417
    return 0;
2418
}
2419
EOF
2420

    
2421
    # check whether binutils is new enough to compile SSSE3/MMX2
2422
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2423
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2424

    
2425
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2426

    
2427
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2428
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2429
    enabled     pic           && append YASMFLAGS "-DPIC"
2430
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2431
    case "$objformat" in
2432
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2433
    esac
2434
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2435

    
2436
    case "$cpu" in
2437
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2438
            disable fast_clz
2439
        ;;
2440
    esac
2441

    
2442
fi
2443

    
2444
if check_func dlopen; then
2445
    ldl=
2446
elif check_func dlopen -ldl; then
2447
    ldl=-ldl
2448
fi
2449

    
2450
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2451
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2452

    
2453
check_func  fork
2454
check_func  getaddrinfo $network_extralibs
2455
check_func  gethrtime
2456
check_func  getrusage
2457
check_func  inet_aton $network_extralibs
2458
check_func  isatty
2459
check_func  ${malloc_prefix}memalign            && enable memalign
2460
check_func  mkstemp
2461
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2462
check_func_headers io.h setmode
2463
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2464
check_func_headers windows.h GetProcessTimes
2465
check_func_headers windows.h VirtualAlloc
2466

    
2467
check_header conio.h
2468
check_header dlfcn.h
2469
check_header dxva2api.h
2470
check_header malloc.h
2471
check_header poll.h
2472
check_header sys/mman.h
2473
check_header sys/resource.h
2474
check_header sys/select.h
2475
check_header termios.h
2476
check_header vdpau/vdpau.h
2477
check_header vdpau/vdpau_x11.h
2478
check_header X11/extensions/XvMClib.h
2479

    
2480
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2481

    
2482
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2483
     enabled_any $need_memalign ; then
2484
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2485
fi
2486

    
2487
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2488
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2489

    
2490
# check for some common methods of building with pthread support
2491
# do this before the optional library checks as some of them require pthreads
2492
if enabled pthreads; then
2493
    if check_func pthread_create; then
2494
        :
2495
    elif check_func pthread_create -pthread; then
2496
        add_cflags -pthread
2497
        add_extralibs -pthread
2498
    elif check_func pthread_create -pthreads; then
2499
        add_cflags -pthreads
2500
        add_extralibs -pthreads
2501
    elif check_func pthread_create -lpthreadGC2; then
2502
        add_extralibs -lpthreadGC2
2503
    elif ! check_lib pthread.h pthread_create -lpthread; then
2504
        die "ERROR: can't find pthreads library"
2505
    fi
2506
fi
2507

    
2508
for thread in $THREADS_LIST; do
2509
    if enabled $thread; then
2510
        test -n "$thread_type" &&
2511
            die "ERROR: Only one thread type must be selected." ||
2512
            thread_type="$thread"
2513
    fi
2514
done
2515

    
2516
check_lib math.h sin -lm
2517
check_lib va/va.h vaInitialize -lva
2518

    
2519
check_func exp2
2520
check_func exp2f
2521
check_func llrint
2522
check_func log2
2523
check_func log2f
2524
check_func lrint
2525
check_func lrintf
2526
check_func round
2527
check_func roundf
2528
check_func truncf
2529

    
2530
# these are off by default, so fail if requested and not available
2531
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2532
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2533
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2534
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2535
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2536
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2537
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2538
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2539
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2540
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2541
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2542
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2543
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2544
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2545
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2546
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2547
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2548
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2549
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2550
                        die "ERROR: libx264 version must be >= 0.83."; }
2551
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2552
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2553

    
2554
# libdc1394 check
2555
if enabled libdc1394; then
2556
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2557
        enable libdc1394_2; } ||
2558
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2559
        enable libdc1394_1; } ||
2560
    die "ERROR: No version of libdc1394 found "
2561
fi
2562

    
2563
SDL_CONFIG="${cross_prefix}sdl-config"
2564
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2565
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2566
    sdl_libs=$("${SDL_CONFIG}" --libs)
2567
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2568
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2569
    enable sdl &&
2570
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2571
fi
2572

    
2573
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2574

    
2575
if enabled network; then
2576
    check_type "sys/types.h sys/socket.h" socklen_t
2577
    check_type netdb.h "struct addrinfo"
2578
    check_type netinet/in.h "struct ipv6_mreq"
2579
    check_type netinet/in.h "struct sockaddr_in6"
2580
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2581
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2582
    # Prefer arpa/inet.h over winsock2
2583
    if check_header arpa/inet.h ; then
2584
        check_func closesocket
2585
    elif check_header winsock2.h ; then
2586
        check_func_headers winsock2.h closesocket -lws2 && \
2587
            network_extralibs="-lws2" || \
2588
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2589
            network_extralibs="-lws2_32"; }
2590
        check_type ws2tcpip.h socklen_t
2591
        check_type ws2tcpip.h "struct addrinfo"
2592
        check_type ws2tcpip.h "struct ipv6_mreq"
2593
        check_type ws2tcpip.h "struct sockaddr_in6"
2594
        check_type ws2tcpip.h "struct sockaddr_storage"
2595
        check_struct winsock2.h "struct sockaddr" sa_len
2596
    else
2597
        disable network
2598
    fi
2599
fi
2600

    
2601
check_header linux/videodev.h
2602
check_header linux/videodev2.h
2603
check_header sys/videoio.h
2604

    
2605
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2606

    
2607
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2608
{ check_header dev/bktr/ioctl_meteor.h &&
2609
  check_header dev/bktr/ioctl_bt848.h; } ||
2610
{ check_header machine/ioctl_meteor.h &&
2611
  check_header machine/ioctl_bt848.h; } ||
2612
{ check_header dev/video/meteor/ioctl_meteor.h &&
2613
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2614
check_header dev/ic/bt8xx.h
2615

    
2616
check_header sys/soundcard.h
2617
check_header soundcard.h
2618

    
2619
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2620

    
2621
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2622

    
2623
enabled x11grab                         &&
2624
check_header X11/Xlib.h                 &&
2625
check_header X11/extensions/XShm.h      &&
2626
check_header X11/extensions/Xfixes.h    &&
2627
check_func XOpenDisplay -lX11           &&
2628
check_func XShmCreateImage -lX11 -lXext &&
2629
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2630

    
2631
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2632
check_cpp_condition \
2633
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2634
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2635
      disable vdpau; }
2636
fi
2637

    
2638
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2639

    
2640
# add some useful compiler flags if supported
2641
check_cflags -Wdeclaration-after-statement
2642
check_cflags -Wall
2643
check_cflags -Wno-switch
2644
check_cflags -Wdisabled-optimization
2645
check_cflags -Wpointer-arith
2646
check_cflags -Wredundant-decls
2647
check_cflags -Wno-pointer-sign
2648
check_cflags -Wcast-qual
2649
check_cflags -Wwrite-strings
2650
check_cflags -Wtype-limits
2651
check_cflags -Wundef
2652
enabled extra_warnings && check_cflags -Winline
2653

    
2654
# add some linker flags
2655
check_ldflags -Wl,--warn-common
2656
check_ldflags -Wl,--as-needed
2657
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'
2658
check_ldflags -Wl,-Bsymbolic
2659

    
2660
echo "X{};" > $TMPV
2661
test_ldflags -Wl,--version-script,$TMPV &&
2662
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2663

    
2664
if enabled small; then
2665
    add_cflags $size_cflags
2666
    optimizations="small"
2667
elif enabled optimizations; then
2668
    add_cflags $speed_cflags
2669
fi
2670
check_cflags -fno-math-errno
2671
check_cflags -fno-signed-zeros
2672

    
2673
if enabled icc; then
2674
    # Just warnings, no remarks
2675
    check_cflags -w1
2676
    # -wd: Disable following warnings
2677
    # 144, 167, 556: -Wno-pointer-sign
2678
    # 10006: ignoring unknown option -fno-signed-zeros
2679
    # 10156: ignoring option '-W'; no argument required
2680
    check_cflags -wd144,167,556,10006,10156
2681
    # 11030: Warning unknown option --as-needed
2682
    # 10156: ignoring option '-export'; no argument required
2683
    check_ldflags -wd10156,11030
2684
    # Allow to compile with optimizations
2685
    check_ldflags -march=$cpu
2686
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2687
    enable ebp_available
2688
elif enabled ccc; then
2689
    # disable some annoying warnings
2690
    add_cflags -msg_disable cvtu32to64
2691
    add_cflags -msg_disable embedcomment
2692
    add_cflags -msg_disable needconstext
2693
    add_cflags -msg_disable nomainieee
2694
    add_cflags -msg_disable ptrmismatch1
2695
    add_cflags -msg_disable unreachcode
2696
elif enabled gcc; then
2697
    check_cflags -fno-tree-vectorize
2698
elif enabled clang; then
2699
    check_cflags -Qunused-arguments
2700
elif enabled armcc; then
2701
    # 2523: use of inline assembler is deprecated
2702
    add_cflags -Wrvct,--diag_suppress=2523
2703
elif enabled tms470; then
2704
    add_cflags -pds=824 -pds=837
2705
fi
2706

    
2707
if enabled gprof; then
2708
    add_cflags  -p
2709
    add_ldflags -p
2710
fi
2711

    
2712
# Find out if the .align argument is a power of two or not.
2713
check_asm asmalign_pot '".align 3"'
2714

    
2715
enabled_any $DECODER_LIST      && enable decoders
2716
enabled_any $ENCODER_LIST      && enable encoders
2717
enabled_any $HWACCEL_LIST      && enable hwaccels
2718
enabled_any $BSF_LIST          && enable bsfs
2719
enabled_any $DEMUXER_LIST      && enable demuxers
2720
enabled_any $MUXER_LIST        && enable muxers
2721
enabled_any $FILTER_LIST       && enable filters
2722
enabled_any $INDEV_LIST        && enable indevs
2723
enabled_any $OUTDEV_LIST       && enable outdevs
2724
enabled_any $PROTOCOL_LIST     && enable protocols
2725

    
2726
enabled_any $THREADS_LIST      && enable threads
2727

    
2728
check_deps $CONFIG_LIST       \
2729
           $CONFIG_EXTRA      \
2730
           $HAVE_LIST         \
2731
           $DECODER_LIST      \
2732
           $ENCODER_LIST      \
2733
           $HWACCEL_LIST      \
2734
           $PARSER_LIST       \
2735
           $BSF_LIST          \
2736
           $DEMUXER_LIST      \
2737
           $MUXER_LIST        \
2738
           $FILTER_LIST       \
2739
           $INDEV_LIST        \
2740
           $OUTDEV_LIST       \
2741
           $PROTOCOL_LIST     \
2742

    
2743
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2744

    
2745
echo "install prefix            $prefix"
2746
echo "source path               $source_path"
2747
echo "C compiler                $cc"
2748
echo ".align is power-of-two    $asmalign_pot"
2749
echo "ARCH                      $arch ($cpu)"
2750
if test "$build_suffix" != ""; then
2751
    echo "build suffix              $build_suffix"
2752
fi
2753
if test "$extra_version" != ""; then
2754
    echo "version string suffix     $extra_version"
2755
fi
2756
echo "big-endian                ${bigendian-no}"
2757
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2758
if enabled x86; then
2759
    echo "yasm                      ${yasm-no}"
2760
    echo "MMX enabled               ${mmx-no}"
2761
    echo "MMX2 enabled              ${mmx2-no}"
2762
    echo "3DNow! enabled            ${amd3dnow-no}"
2763
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2764
    echo "SSE enabled               ${sse-no}"
2765
    echo "SSSE3 enabled             ${ssse3-no}"
2766
    echo "CMOV enabled              ${cmov-no}"
2767
    echo "CMOV is fast              ${fast_cmov-no}"
2768
    echo "EBX available             ${ebx_available-no}"
2769
    echo "EBP available             ${ebp_available-no}"
2770
    echo "10 operands supported     ${ten_operands-no}"
2771
fi
2772
if enabled arm; then
2773
    echo "ARMv5TE enabled           ${armv5te-no}"
2774
    echo "ARMv6 enabled             ${armv6-no}"
2775
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2776
    echo "ARM VFP enabled           ${armvfp-no}"
2777
    echo "IWMMXT enabled            ${iwmmxt-no}"
2778
    echo "NEON enabled              ${neon-no}"
2779
fi
2780
if enabled mips; then
2781
    echo "MMI enabled               ${mmi-no}"
2782
fi
2783
if enabled ppc; then
2784
    echo "AltiVec enabled           ${altivec-no}"
2785
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2786
    echo "dcbzl available           ${dcbzl-no}"
2787
    echo "performance report        ${powerpc_perf-no}"
2788
fi
2789
if enabled sparc; then
2790
    echo "VIS enabled               ${vis-no}"
2791
fi
2792
echo "gprof enabled             ${gprof-no}"
2793
echo "debug symbols             ${debug-no}"
2794
echo "strip symbols             ${stripping-no}"
2795
echo "optimizations             ${optimizations-no}"
2796
echo "static                    ${static-no}"
2797
echo "shared                    ${shared-no}"
2798
echo "postprocessing support    ${postproc-no}"
2799
echo "new filter support        ${avfilter-no}"
2800
echo "filters using lavformat   ${avfilter_lavf-no}"
2801
echo "network support           ${network-no}"
2802
echo "threading support         ${thread_type-no}"
2803
echo "SDL support               ${sdl-no}"
2804
echo "Sun medialib support      ${mlib-no}"
2805
echo "AVISynth enabled          ${avisynth-no}"
2806
echo "libdc1394 support         ${libdc1394-no}"
2807
echo "libdirac enabled          ${libdirac-no}"
2808
echo "libfaac enabled           ${libfaac-no}"
2809
echo "libfaad enabled           ${libfaad-no}"
2810
echo "libfaad dlopened          ${libfaadbin-no}"
2811
echo "libgsm enabled            ${libgsm-no}"
2812
echo "libmp3lame enabled        ${libmp3lame-no}"
2813
echo "libnut enabled            ${libnut-no}"
2814
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2815
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2816
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2817
echo "libschroedinger enabled   ${libschroedinger-no}"
2818
echo "libspeex enabled          ${libspeex-no}"
2819
echo "libtheora enabled         ${libtheora-no}"
2820
echo "libvorbis enabled         ${libvorbis-no}"
2821
echo "libx264 enabled           ${libx264-no}"
2822
echo "libxvid enabled           ${libxvid-no}"
2823
echo "zlib enabled              ${zlib-no}"
2824
echo "bzlib enabled             ${bzlib-no}"
2825
echo
2826

    
2827
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2828
    echo "Enabled ${type}s:"
2829
    eval list=\$$(toupper $type)_LIST
2830
    for part in $list; do
2831
        enabled $part && echo ${part%_*}
2832
    done | sort | pr -3 -t
2833
    echo
2834
done
2835

    
2836
license="LGPL version 2.1 or later"
2837
if enabled nonfree; then
2838
    license="nonfree and unredistributable"
2839
elif enabled gplv3; then
2840
    license="GPL version 3 or later"
2841
elif enabled lgplv3; then
2842
    license="LGPL version 3 or later"
2843
elif enabled gpl; then
2844
    license="GPL version 2 or later"
2845
fi
2846

    
2847
echo "License: $license"
2848

    
2849
echo "Creating config.mak and config.h..."
2850

    
2851
# build tree in object directory if source path is different from current one
2852
if enabled source_path_used; then
2853
    DIRS="
2854
        doc
2855
        libavcodec
2856
        libavcodec/$arch
2857
        libavdevice
2858
        libavfilter
2859
        libavformat
2860
        libavutil
2861
        libavutil/$arch
2862
        libpostproc
2863
        libswscale
2864
        libswscale/$arch
2865
        tests
2866
        tools
2867
    "
2868
    FILES="
2869
        Makefile
2870
        common.mak
2871
        subdir.mak
2872
        doc/texi2pod.pl
2873
        libavcodec/Makefile
2874
        libavdevice/Makefile
2875
        libavfilter/Makefile
2876
        libavformat/Makefile
2877
        libavutil/Makefile
2878
        libpostproc/Makefile
2879
        libswscale/Makefile
2880
    "
2881
    for dir in $DIRS ; do
2882
        mkdir -p $dir
2883
    done
2884
    for f in $FILES ; do
2885
        $ln_s "$source_path/$f" $f
2886
    done
2887
fi
2888

    
2889
enabled stripping || strip="echo skipping strip"
2890

    
2891
cat > config.mak <<EOF
2892
# Automatically generated by configure - do not modify!
2893
ifndef FFMPEG_CONFIG_MAK
2894
FFMPEG_CONFIG_MAK=1
2895
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2896
prefix=$prefix
2897
LIBDIR=\$(DESTDIR)$libdir
2898
SHLIBDIR=\$(DESTDIR)$shlibdir
2899
INCDIR=\$(DESTDIR)$incdir
2900
BINDIR=\$(DESTDIR)$bindir
2901
DATADIR=\$(DESTDIR)$datadir
2902
MANDIR=\$(DESTDIR)$mandir
2903
SRC_PATH="$source_path"
2904
SRC_PATH_BARE=$source_path
2905
BUILD_ROOT="$PWD"
2906
ARCH=$arch
2907
CC=$cc
2908
AS=$as
2909
LD=$ld
2910
DEPCC=$dep_cc
2911
YASM=$yasmexe
2912
AR=$ar
2913
RANLIB=$ranlib
2914
LN_S=$ln_s
2915
STRIP=$strip
2916
CPPFLAGS=$CPPFLAGS
2917
CFLAGS=$CFLAGS
2918
ASFLAGS=$ASFLAGS
2919
CC_O=$CC_O
2920
LDFLAGS=$LDFLAGS
2921
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2922
SHFLAGS=$SHFLAGS
2923
YASMFLAGS=$YASMFLAGS
2924
BUILDSUF=$build_suffix
2925
FULLNAME=$FULLNAME
2926
LIBPREF=$LIBPREF
2927
LIBSUF=$LIBSUF
2928
LIBNAME=$LIBNAME
2929
SLIBPREF=$SLIBPREF
2930
SLIBSUF=$SLIBSUF
2931
EXESUF=$EXESUF
2932
EXTRA_VERSION=$extra_version
2933
DEPFLAGS=$DEPFLAGS
2934
CCDEP=$CCDEP
2935
ASDEP=$ASDEP
2936
CC_DEPFLAGS=$CC_DEPFLAGS
2937
AS_DEPFLAGS=$AS_DEPFLAGS
2938
HOSTCC=$host_cc
2939
HOSTCFLAGS=$host_cflags
2940
HOSTEXESUF=$HOSTEXESUF
2941
HOSTLDFLAGS=$host_ldflags
2942
HOSTLIBS=$host_libs
2943
TARGET_EXEC=$target_exec
2944
TARGET_PATH=$target_path
2945
SDL_LIBS=$sdl_libs
2946
SDL_CFLAGS=$sdl_cflags
2947
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2948
EXTRALIBS=$extralibs
2949
EOF
2950

    
2951
get_version(){
2952
    name=$1
2953
    file=$source_path/$2
2954
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2955
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2956
    lcname=$(tolower $name)
2957
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2958
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2959
}
2960

    
2961
get_version LIBSWSCALE  libswscale/swscale.h
2962
get_version LIBPOSTPROC libpostproc/postprocess.h
2963
get_version LIBAVCODEC  libavcodec/avcodec.h
2964
get_version LIBAVDEVICE libavdevice/avdevice.h
2965
get_version LIBAVFORMAT libavformat/avformat.h
2966
get_version LIBAVUTIL   libavutil/avutil.h
2967
get_version LIBAVFILTER libavfilter/avfilter.h
2968

    
2969
enabled shared && cat >> config.mak <<EOF
2970
LIBTARGET=${LIBTARGET}
2971
SLIBNAME=${SLIBNAME}
2972
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2973
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2974
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2975
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2976
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2977
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2978
EOF
2979

    
2980
enabled asmalign_pot || align_shift="1 <<"
2981

    
2982
cat > $TMPH <<EOF
2983
/* Automatically generated by configure - do not modify! */
2984
#ifndef FFMPEG_CONFIG_H
2985
#define FFMPEG_CONFIG_H
2986
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2987
#define FFMPEG_LICENSE "$(c_escape $license)"
2988
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2989
#define CC_TYPE "$cc_type"
2990
#define CC_VERSION $cc_version
2991
#define restrict $_restrict
2992
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2993
#define EXTERN_PREFIX "${extern_prefix}"
2994
#define EXTERN_ASM ${extern_prefix}
2995
EOF
2996

    
2997
test -n "$malloc_prefix" &&
2998
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2999

    
3000
if enabled small || disabled optimizations; then
3001
    echo "#define av_always_inline"  >> $TMPH
3002
fi
3003

    
3004
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3005
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3006
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3007
                                      $CONFIG_EXTRA      \
3008
                                      $DECODER_LIST      \
3009
                                      $ENCODER_LIST      \
3010
                                      $HWACCEL_LIST      \
3011
                                      $PARSER_LIST       \
3012
                                      $BSF_LIST          \
3013
                                      $DEMUXER_LIST      \
3014
                                      $MUXER_LIST        \
3015
                                      $FILTER_LIST       \
3016
                                      $PROTOCOL_LIST     \
3017
                                      $INDEV_LIST        \
3018
                                      $OUTDEV_LIST       \
3019

    
3020
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3021
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3022

    
3023
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3024
cp_if_changed $TMPH config.h
3025

    
3026
cat > $TMPH <<EOF
3027
/* Generated by ffconf */
3028
#ifndef AVUTIL_AVCONFIG_H
3029
#define AVUTIL_AVCONFIG_H
3030
EOF
3031

    
3032
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3033

    
3034
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3035

    
3036
cp_if_changed $TMPH libavutil/avconfig.h
3037

    
3038
# build pkg-config files
3039

    
3040
pkgconfig_generate(){
3041
name=$1
3042
shortname=${name#lib}${build_suffix}
3043
comment=$2
3044
version=$3
3045
libs=$4
3046
requires=$5
3047
cat <<EOF > $name/$name.pc
3048
prefix=$prefix
3049
exec_prefix=\${prefix}
3050
libdir=$libdir
3051
includedir=$incdir
3052

    
3053
Name: $name
3054
Description: $comment
3055
Version: $version
3056
Requires: $(enabled shared || echo $requires)
3057
Requires.private: $(enabled shared && echo $requires)
3058
Conflicts:
3059
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3060
Libs.private: $(enabled shared && echo $libs)
3061
Cflags: -I\${includedir}
3062
EOF
3063
cat <<EOF > $name/$name-uninstalled.pc
3064
prefix=
3065
exec_prefix=
3066
libdir=\${pcfiledir}
3067
includedir=${source_path}
3068

    
3069
Name: $name
3070
Description: $comment
3071
Version: $version
3072
Requires: $requires
3073
Conflicts:
3074
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3075
Cflags: -I\${includedir}
3076
EOF
3077
}
3078

    
3079
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3080
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3081
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3082
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3083
enabled avfilter &&
3084
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3085
enabled postproc &&
3086
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3087
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"