Statistics
| Branch: | Revision:

ffmpeg / configure @ 402d55ee

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
928
THREADS_LIST='
929
    beosthreads
930
    os2threads
931
    pthreads
932
    w32threads
933
'
934

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

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

    
977
HAVE_LIST_PUB='
978
    bigendian
979
'
980

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

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

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

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

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

    
1123
CMDLINE_APPEND="
1124
    extra_cflags
1125
"
1126

    
1127
# code dependency declarations
1128

    
1129
# architecture extensions
1130

    
1131
armv5te_deps="arm"
1132
armv6_deps="arm"
1133
armv6t2_deps="arm"
1134
armvfp_deps="arm"
1135
iwmmxt_deps="arm"
1136
neon_deps="arm"
1137

    
1138
mmi_deps="mips"
1139

    
1140
altivec_deps="ppc"
1141
ppc4xx_deps="ppc"
1142

    
1143
vis_deps="sparc"
1144

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

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

    
1157
need_memalign="altivec neon sse"
1158
inline_asm_deps="!tms470"
1159

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

    
1276
# parsers
1277
h264_parser_select="golomb"
1278

    
1279
# bitstream_filters
1280
aac_adtstoasc_bsf_select="aac_parser"
1281

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

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

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

    
1353
# protocols
1354
gopher_protocol_deps="network"
1355
http_protocol_deps="network"
1356
rtmp_protocol_deps="tcp_protocol"
1357
rtp_protocol_deps="udp_protocol"
1358
tcp_protocol_deps="network"
1359
udp_protocol_deps="network"
1360

    
1361
# filters
1362
movie_filter_deps="avfilter_lavf"
1363
avfilter_lavf_deps="avformat"
1364

    
1365
# libraries
1366
avdevice_deps="avcodec avformat"
1367
avformat_deps="avcodec"
1368

    
1369
# programs
1370
ffmpeg_deps="avcodec avformat swscale"
1371
ffplay_deps="avcodec avformat swscale sdl"
1372
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1373
ffserver_extralibs='$ldl'
1374

    
1375
doc_deps="texi2html"
1376

    
1377
# default parameters
1378

    
1379
logfile="config.err"
1380

    
1381
# installation paths
1382
prefix_default="/usr/local"
1383
bindir_default='${prefix}/bin'
1384
datadir_default='${prefix}/share/ffmpeg'
1385
incdir_default='${prefix}/include'
1386
libdir_default='${prefix}/lib'
1387
mandir_default='${prefix}/share/man'
1388
shlibdir_default="$libdir_default"
1389

    
1390
# toolchain
1391
ar="ar"
1392
cc_default="gcc"
1393
cc_version=\"unknown\"
1394
host_cc_default="gcc"
1395
ln_s="ln -sf"
1396
nm_default="nm"
1397
objformat="elf"
1398
ranlib="ranlib"
1399
strip="strip"
1400
yasmexe="yasm"
1401

    
1402
nm_opts='-g'
1403

    
1404
# machine
1405
arch=$(uname -m)
1406
cpu="generic"
1407

    
1408
# OS
1409
target_os=$(tolower $(uname -s))
1410
host_os=$target_os
1411

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

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

    
1447
CC_O='-o $@'
1448

    
1449
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1450
host_libs='-lm'
1451

    
1452
target_path='$(PWD)'
1453

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

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

    
1473
for v in "$@"; do
1474
    r=${v#*=}
1475
    l=${v%"$r"}
1476
    r=$(sh_quote "$r")
1477
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1478
done
1479

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

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

    
1499
enable $ARCH_EXT_LIST \
1500
       $DECODER_LIST \
1501
       $ENCODER_LIST \
1502
       $HWACCEL_LIST \
1503
       $PARSER_LIST \
1504
       $BSF_LIST \
1505
       $DEMUXER_LIST \
1506
       $MUXER_LIST \
1507
       $FILTER_LIST \
1508
       $PROTOCOL_LIST \
1509
       $INDEV_LIST \
1510
       $OUTDEV_LIST \
1511

    
1512
die_unknown(){
1513
    echo "Unknown option \"$1\"."
1514
    echo "See $0 --help for available options."
1515
    exit 1
1516
}
1517

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

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

    
1577
disabled logging && logfile=/dev/null
1578

    
1579
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1580
set >> $logfile
1581

    
1582
test -n "$cross_prefix" && enable cross_compile
1583

    
1584
ar="${cross_prefix}${ar}"
1585
cc_default="${cross_prefix}${cc_default}"
1586
nm_default="${cross_prefix}${nm_default}"
1587
ranlib="${cross_prefix}${ranlib}"
1588
strip="${cross_prefix}${strip}"
1589

    
1590
sysinclude_default="${sysroot}/usr/include"
1591

    
1592
set_default cc nm sysinclude
1593
enabled cross_compile || host_cc_default=$cc
1594
set_default host_cc
1595

    
1596
exesuf() {
1597
    case $1 in
1598
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1599
    esac
1600
}
1601

    
1602
EXESUF=$(exesuf $target_os)
1603
HOSTEXESUF=$(exesuf $host_os)
1604

    
1605
# set temporary file name
1606
: ${TMPDIR:=$TEMPDIR}
1607
: ${TMPDIR:=$TMP}
1608
: ${TMPDIR:=/tmp}
1609

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

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

    
1626
trap 'rm -f -- $TMPFILES' EXIT
1627
trap exit HUP INT TERM
1628

    
1629
tmpfile TMPC  .c
1630
tmpfile TMPE  $EXESUF
1631
tmpfile TMPH  .h
1632
tmpfile TMPO  .o
1633
tmpfile TMPS  .S
1634
tmpfile TMPV  .ver
1635
tmpfile TMPSH .sh
1636

    
1637
unset -f mktemp
1638

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

    
1652
filter_cflags=echo
1653
filter_cppflags=echo
1654
filter_asflags=echo
1655

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

    
1790
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1791

    
1792
: ${as_default:=$cc}
1793
: ${dep_cc_default:=$cc}
1794
: ${ld_default:=$cc}
1795
set_default as dep_cc ld
1796

    
1797
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1798
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1799

    
1800
add_cflags $extra_cflags
1801
add_asflags $extra_cflags
1802

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

    
1820
if test "$cpu" = host; then
1821
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1822

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

    
1837
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1838
fi
1839

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

    
1881
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1882
enable $arch
1883

    
1884
# Add processor-specific flags
1885
if test "$cpu" = generic; then
1886
    : do nothing
1887
elif enabled ppc; then
1888

    
1889
    case $cpu in
1890
        601|ppc601|PowerPC601)
1891
            cpuflags="-mcpu=601"
1892
        ;;
1893
        603*|ppc603*|PowerPC603*)
1894
            cpuflags="-mcpu=603"
1895
        ;;
1896
        604*|ppc604*|PowerPC604*)
1897
            cpuflags="-mcpu=604"
1898
        ;;
1899
        G3|g3|75*|ppc75*|PowerPC75*)
1900
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1901
        ;;
1902
        G4|g4|745*|ppc745*|PowerPC745*)
1903
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1904
        ;;
1905
        74*|ppc74*|PowerPC74*)
1906
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1907
        ;;
1908
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1909
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1910
        ;;
1911
        Cell|CELL|cell)
1912
            cpuflags="-mcpu=cell"
1913
            enable ldbrx
1914
        ;;
1915
    esac
1916

    
1917
elif enabled x86; then
1918

    
1919
    case $cpu in
1920
        i[345]86|pentium)
1921
            cpuflags="-march=$cpu"
1922
            disable mmx
1923
        ;;
1924
        # targets that do NOT support conditional mov (cmov)
1925
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1926
            cpuflags="-march=$cpu"
1927
            disable cmov
1928
        ;;
1929
        # targets that do support conditional mov (cmov)
1930
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1931
            cpuflags="-march=$cpu"
1932
            enable cmov
1933
            enable fast_cmov
1934
        ;;
1935
        # targets that do support conditional mov but on which it's slow
1936
        pentium4|pentium4m|prescott|nocona)
1937
            cpuflags="-march=$cpu"
1938
            enable cmov
1939
            disable fast_cmov
1940
        ;;
1941
    esac
1942

    
1943
elif enabled sparc; then
1944

    
1945
    case $cpu in
1946
        sparc64)
1947
            cpuflags="-mcpu=v9"
1948
        ;;
1949
    esac
1950

    
1951
elif enabled arm; then
1952

    
1953
    case $cpu in
1954
        armv*)
1955
            cpuflags="-march=$cpu"
1956
        ;;
1957
        *)
1958
            cpuflags="-mcpu=$cpu"
1959
        ;;
1960
    esac
1961

    
1962
elif enabled alpha; then
1963

    
1964
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1965

    
1966
elif enabled bfin; then
1967

    
1968
    cpuflags="-mcpu=$cpu"
1969

    
1970
elif enabled mips; then
1971

    
1972
    cpuflags="-march=$cpu"
1973

    
1974
elif enabled avr32; then
1975

    
1976
    case $cpu in
1977
        ap7[02]0[0-2])
1978
            subarch="avr32_ap"
1979
            cpuflags="-mpart=$cpu"
1980
        ;;
1981
        ap)
1982
            subarch="avr32_ap"
1983
            cpuflags="-march=$cpu"
1984
        ;;
1985
        uc3[ab]*)
1986
            subarch="avr32_uc"
1987
            cpuflags="-mcpu=$cpu"
1988
        ;;
1989
        uc)
1990
            subarch="avr32_uc"
1991
            cpuflags="-march=$cpu"
1992
        ;;
1993
    esac
1994

    
1995
fi
1996

    
1997
add_cflags $cpuflags
1998
add_asflags $cpuflags
1999

    
2000
# compiler sanity check
2001
check_exec <<EOF
2002
int main(void){ return 0; }
2003
EOF
2004
if test "$?" != 0; then
2005
    echo "$cc is unable to create an executable file."
2006
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2007
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2008
        echo "Only do this if you know what cross compiling means."
2009
    fi
2010
    die "C compiler test failed."
2011
fi
2012

    
2013
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2014
check_cflags -std=c99
2015
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2016
#include <stdlib.h>
2017
EOF
2018
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2019
#include <stdlib.h>
2020
EOF
2021

    
2022
check_host_cflags -std=c99
2023

    
2024
case "$arch" in
2025
    alpha|ia64|mips|parisc|sparc)
2026
        spic=$shared
2027
    ;;
2028
    x86)
2029
        subarch="x86_32"
2030
        check_cc <<EOF && subarch="x86_64"
2031
        int test[(int)sizeof(char*) - 7];
2032
EOF
2033
        if test "$subarch" = "x86_64"; then
2034
            spic=$shared
2035
        fi
2036
    ;;
2037
esac
2038

    
2039
enable $subarch
2040
enabled spic && enable pic
2041
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2042

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

    
2210
    *)
2211
        die "Unknown OS '$target_os'."
2212
        ;;
2213
esac
2214

    
2215
set_default $PATHS_LIST
2216

    
2217
add_extralibs $osextralibs
2218

    
2219
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2220
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2221

    
2222
# we need to build at least one lib type
2223
if ! enabled_any static shared; then
2224
    cat <<EOF
2225
At least one library type must be built.
2226
Specify --enable-static to build the static libraries or --enable-shared to
2227
build the shared libraries as well. To only build the shared libraries specify
2228
--disable-static in addition to --enable-shared.
2229
EOF
2230
    exit 1;
2231
fi
2232

    
2233
disabled static && LIBNAME=""
2234

    
2235
if enabled_any libfaad libfaadbin ; then
2236
    if check_header faad.h; then
2237
        check_cc <<EOF
2238
#include <faad.h>
2239
#ifndef FAAD2_VERSION
2240
ok faad1
2241
#endif
2242
int main(void) { return 0; }
2243
EOF
2244
        test $? = 0 && enable libfaad2
2245
    else
2246
        die "FAAD test failed."
2247
    fi
2248
fi
2249

    
2250

    
2251
die_license_disabled() {
2252
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2253
}
2254

    
2255
die_license_disabled gpl libfaad2
2256
die_license_disabled gpl libx264
2257
die_license_disabled gpl libxvid
2258
die_license_disabled gpl postproc
2259
die_license_disabled gpl x11grab
2260

    
2261
die_license_disabled nonfree libfaac
2262

    
2263
die_license_disabled version3 libopencore_amrnb
2264
die_license_disabled version3 libopencore_amrwb
2265

    
2266
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2267

    
2268
check_deps $ARCH_EXT_LIST
2269

    
2270
disabled optimizations || check_cflags -fomit-frame-pointer
2271

    
2272
enable_pic() {
2273
    enable pic
2274
    add_cppflags -DPIC
2275
    add_cflags   -fPIC
2276
    add_asflags  -fPIC
2277
}
2278

    
2279
enabled pic && enable_pic
2280

    
2281
check_cc <<EOF || die "Symbol mangling check failed."
2282
int ff_extern;
2283
EOF
2284
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2285
extern_prefix=${sym%%ff_extern*}
2286

    
2287
check_cc <<EOF && enable inline_asm
2288
void foo(void) { __asm__ volatile ("" ::); }
2289
EOF
2290

    
2291
_restrict=
2292
for restrict_keyword in restrict __restrict__ __restrict; do
2293
    check_cc <<EOF && _restrict=$restrict_keyword && break
2294
void foo(char * $restrict_keyword p);
2295
EOF
2296
done
2297

    
2298
check_cc <<EOF && enable attribute_packed
2299
struct { int x; } __attribute__((packed)) x;
2300
EOF
2301

    
2302
check_cc <<EOF && enable attribute_may_alias
2303
union { int x; } __attribute__((may_alias)) x;
2304
EOF
2305

    
2306
check_cc <<EOF || die "endian test failed"
2307
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2308
EOF
2309
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2310

    
2311
if enabled alpha; then
2312

    
2313
    check_cflags -mieee
2314

    
2315
elif enabled arm; then
2316

    
2317
    check_cflags -marm
2318

    
2319
    check_ld <<EOF && enable vfp_args
2320
__asm__ (".eabi_attribute 28, 1");
2321
int main(void) { return 0; }
2322
EOF
2323

    
2324
    # We have to check if pld is a nop and disable it.
2325
    check_asm pld '"pld [r0]"'
2326

    
2327
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2328
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2329
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2330
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2331
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2332
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2333

    
2334
    enabled_all armv6t2 shared !pic && enable_pic
2335

    
2336
elif enabled ia64; then
2337

    
2338
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2339
    enabled shared && enable_weak hardcoded_tables
2340

    
2341
elif enabled mips; then
2342

    
2343
    check_asm loongson '"dmult.g $1, $2, $3"'
2344
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2345

    
2346
elif enabled ppc; then
2347

    
2348
    check_asm dcbzl     '"dcbzl 0, 1"'
2349
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2350
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2351

    
2352
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2353
    if enabled altivec; then
2354
        check_cflags -maltivec -mabi=altivec &&
2355
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2356
        check_cflags -faltivec
2357

    
2358
        # check if our compiler supports Motorola AltiVec C API
2359
        check_cc <<EOF || disable altivec
2360
$inc_altivec_h
2361
int main(void) {
2362
    vector signed int v1, v2, v3;
2363
    v1 = vec_add(v2,v3);
2364
    return 0;
2365
}
2366
EOF
2367

    
2368
        # check if our compiler supports braces for vector declarations
2369
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2370
$inc_altivec_h
2371
int main (void) { (vector int) {1}; return 0; }
2372
EOF
2373
    fi
2374

    
2375
elif enabled sparc; then
2376

    
2377
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2378
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2379

    
2380
elif enabled x86; then
2381

    
2382
    # check whether EBP is available on x86
2383
    # As 'i' is stored on the stack, this program will crash
2384
    # if the base pointer is used to access it because the
2385
    # base pointer is cleared in the inline assembly code.
2386
    check_exec_crash <<EOF && enable ebp_available
2387
    volatile int i=0;
2388
    __asm__ volatile (
2389
        "xorl %%ebp, %%ebp"
2390
    ::: "%ebp");
2391
    return i;
2392
EOF
2393

    
2394
    # check whether EBX is available on x86
2395
    check_asm ebx_available '""::"b"(0)' &&
2396
        check_asm ebx_available '"":::"%ebx"'
2397

    
2398
    # check whether more than 10 operands are supported
2399
    check_cc <<EOF && enable ten_operands
2400
int main(void) {
2401
    int x=0;
2402
    __asm__ volatile(
2403
        ""
2404
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2405
    );
2406
    return 0;
2407
}
2408
EOF
2409

    
2410
    # check whether binutils is new enough to compile SSSE3/MMX2
2411
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2412
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2413

    
2414
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2415

    
2416
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2417
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2418
    enabled     pic           && append YASMFLAGS "-DPIC"
2419
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2420
    case "$objformat" in
2421
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2422
    esac
2423
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2424

    
2425
    case "$cpu" in
2426
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2427
            disable fast_clz
2428
        ;;
2429
    esac
2430

    
2431
fi
2432

    
2433
if check_func dlopen; then
2434
    ldl=
2435
elif check_func dlopen -ldl; then
2436
    ldl=-ldl
2437
fi
2438

    
2439
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2440
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2441

    
2442
check_func  fork
2443
check_func  getaddrinfo $network_extralibs
2444
check_func  gethrtime
2445
check_func  getrusage
2446
check_func  inet_aton $network_extralibs
2447
check_func  isatty
2448
check_func  ${malloc_prefix}memalign            && enable memalign
2449
check_func  mkstemp
2450
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2451
check_func_headers io.h setmode
2452
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2453
check_func_headers windows.h GetProcessTimes
2454
check_func_headers windows.h VirtualAlloc
2455

    
2456
check_header conio.h
2457
check_header dlfcn.h
2458
check_header dxva2api.h
2459
check_header malloc.h
2460
check_header poll.h
2461
check_header sys/mman.h
2462
check_header sys/resource.h
2463
check_header sys/select.h
2464
check_header termios.h
2465
check_header vdpau/vdpau.h
2466
check_header vdpau/vdpau_x11.h
2467
check_header X11/extensions/XvMClib.h
2468

    
2469
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2470

    
2471
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2472
     enabled_any $need_memalign ; then
2473
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2474
fi
2475

    
2476
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2477
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2478

    
2479
# check for some common methods of building with pthread support
2480
# do this before the optional library checks as some of them require pthreads
2481
if enabled pthreads; then
2482
    if check_func pthread_create; then
2483
        :
2484
    elif check_func pthread_create -pthread; then
2485
        add_cflags -pthread
2486
        add_extralibs -pthread
2487
    elif check_func pthread_create -pthreads; then
2488
        add_cflags -pthreads
2489
        add_extralibs -pthreads
2490
    elif check_func pthread_create -lpthreadGC2; then
2491
        add_extralibs -lpthreadGC2
2492
    elif ! check_lib pthread.h pthread_create -lpthread; then
2493
        die "ERROR: can't find pthreads library"
2494
    fi
2495
fi
2496

    
2497
for thread in $THREADS_LIST; do
2498
    if enabled $thread; then
2499
        test -n "$thread_type" &&
2500
            die "ERROR: Only one thread type must be selected." ||
2501
            thread_type="$thread"
2502
    fi
2503
done
2504

    
2505
check_lib math.h sin -lm
2506
check_lib va/va.h vaInitialize -lva
2507

    
2508
check_func exp2
2509
check_func exp2f
2510
check_func llrint
2511
check_func log2
2512
check_func log2f
2513
check_func lrint
2514
check_func lrintf
2515
check_func round
2516
check_func roundf
2517
check_func truncf
2518

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

    
2543
# libdc1394 check
2544
if enabled libdc1394; then
2545
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2546
        enable libdc1394_2; } ||
2547
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2548
        enable libdc1394_1; } ||
2549
    die "ERROR: No version of libdc1394 found "
2550
fi
2551

    
2552
SDL_CONFIG="${cross_prefix}sdl-config"
2553
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2554
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2555
    sdl_libs=$("${SDL_CONFIG}" --libs)
2556
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2557
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2558
    enable sdl &&
2559
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2560
fi
2561

    
2562
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2563

    
2564
if enabled network; then
2565
    check_type "sys/types.h sys/socket.h" socklen_t
2566
    check_type netdb.h "struct addrinfo"
2567
    check_type netinet/in.h "struct ipv6_mreq"
2568
    check_type netinet/in.h "struct sockaddr_in6"
2569
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2570
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2571
    # Prefer arpa/inet.h over winsock2
2572
    if check_header arpa/inet.h ; then
2573
        check_func closesocket
2574
    elif check_header winsock2.h ; then
2575
        check_func_headers winsock2.h closesocket -lws2 && \
2576
            network_extralibs="-lws2" || \
2577
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2578
            network_extralibs="-lws2_32"; }
2579
        # getaddrinfo is available if _WIN32_WINNT >= 0x0501 is defined
2580
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
2581
        check_type ws2tcpip.h socklen_t
2582
        check_type ws2tcpip.h "struct addrinfo"
2583
        check_type ws2tcpip.h "struct ipv6_mreq"
2584
        check_type ws2tcpip.h "struct sockaddr_in6"
2585
        check_type ws2tcpip.h "struct sockaddr_storage"
2586
        check_struct winsock2.h "struct sockaddr" sa_len
2587
    else
2588
        disable network
2589
    fi
2590
fi
2591

    
2592
check_header linux/videodev.h
2593
check_header linux/videodev2.h
2594
check_header sys/videoio.h
2595

    
2596
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2597

    
2598
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2599
{ check_header dev/bktr/ioctl_meteor.h &&
2600
  check_header dev/bktr/ioctl_bt848.h; } ||
2601
{ check_header machine/ioctl_meteor.h &&
2602
  check_header machine/ioctl_bt848.h; } ||
2603
{ check_header dev/video/meteor/ioctl_meteor.h &&
2604
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2605
check_header dev/ic/bt8xx.h
2606

    
2607
check_header sys/soundcard.h
2608
check_header soundcard.h
2609

    
2610
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2611

    
2612
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2613

    
2614
enabled x11grab                         &&
2615
check_header X11/Xlib.h                 &&
2616
check_header X11/extensions/XShm.h      &&
2617
check_header X11/extensions/Xfixes.h    &&
2618
check_func XOpenDisplay -lX11           &&
2619
check_func XShmCreateImage -lX11 -lXext &&
2620
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2621

    
2622
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2623
check_cpp_condition \
2624
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2625
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2626
      disable vdpau; }
2627
fi
2628

    
2629
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2630

    
2631
# add some useful compiler flags if supported
2632
check_cflags -Wdeclaration-after-statement
2633
check_cflags -Wall
2634
check_cflags -Wno-switch
2635
check_cflags -Wdisabled-optimization
2636
check_cflags -Wpointer-arith
2637
check_cflags -Wredundant-decls
2638
check_cflags -Wno-pointer-sign
2639
check_cflags -Wcast-qual
2640
check_cflags -Wwrite-strings
2641
check_cflags -Wtype-limits
2642
check_cflags -Wundef
2643
enabled extra_warnings && check_cflags -Winline
2644

    
2645
# add some linker flags
2646
check_ldflags -Wl,--warn-common
2647
check_ldflags -Wl,--as-needed
2648
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'
2649
check_ldflags -Wl,-Bsymbolic
2650

    
2651
echo "X{};" > $TMPV
2652
test_ldflags -Wl,--version-script,$TMPV &&
2653
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2654

    
2655
if enabled small; then
2656
    add_cflags $size_cflags
2657
    optimizations="small"
2658
elif enabled optimizations; then
2659
    add_cflags $speed_cflags
2660
fi
2661
check_cflags -fno-math-errno
2662
check_cflags -fno-signed-zeros
2663

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

    
2698
if enabled gprof; then
2699
    add_cflags  -p
2700
    add_ldflags -p
2701
fi
2702

    
2703
# Find out if the .align argument is a power of two or not.
2704
check_asm asmalign_pot '".align 3"'
2705

    
2706
enabled_any $DECODER_LIST      && enable decoders
2707
enabled_any $ENCODER_LIST      && enable encoders
2708
enabled_any $HWACCEL_LIST      && enable hwaccels
2709
enabled_any $BSF_LIST          && enable bsfs
2710
enabled_any $DEMUXER_LIST      && enable demuxers
2711
enabled_any $MUXER_LIST        && enable muxers
2712
enabled_any $FILTER_LIST       && enable filters
2713
enabled_any $INDEV_LIST        && enable indevs
2714
enabled_any $OUTDEV_LIST       && enable outdevs
2715
enabled_any $PROTOCOL_LIST     && enable protocols
2716

    
2717
enabled_any $THREADS_LIST      && enable threads
2718

    
2719
check_deps $CONFIG_LIST       \
2720
           $CONFIG_EXTRA      \
2721
           $HAVE_LIST         \
2722
           $DECODER_LIST      \
2723
           $ENCODER_LIST      \
2724
           $HWACCEL_LIST      \
2725
           $PARSER_LIST       \
2726
           $BSF_LIST          \
2727
           $DEMUXER_LIST      \
2728
           $MUXER_LIST        \
2729
           $FILTER_LIST       \
2730
           $INDEV_LIST        \
2731
           $OUTDEV_LIST       \
2732
           $PROTOCOL_LIST     \
2733

    
2734
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2735

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

    
2818
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2819
    echo "Enabled ${type}s:"
2820
    eval list=\$$(toupper $type)_LIST
2821
    for part in $list; do
2822
        enabled $part && echo ${part%_*}
2823
    done | sort | pr -3 -t
2824
    echo
2825
done
2826

    
2827
license="LGPL version 2.1 or later"
2828
if enabled nonfree; then
2829
    license="nonfree and unredistributable"
2830
elif enabled gplv3; then
2831
    license="GPL version 3 or later"
2832
elif enabled lgplv3; then
2833
    license="LGPL version 3 or later"
2834
elif enabled gpl; then
2835
    license="GPL version 2 or later"
2836
fi
2837

    
2838
echo "License: $license"
2839

    
2840
echo "Creating config.mak and config.h..."
2841

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

    
2880
enabled stripping || strip="echo skipping strip"
2881

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

    
2942
get_version(){
2943
    name=$1
2944
    file=$source_path/$2
2945
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2946
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2947
    lcname=$(tolower $name)
2948
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2949
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2950
}
2951

    
2952
get_version LIBSWSCALE  libswscale/swscale.h
2953
get_version LIBPOSTPROC libpostproc/postprocess.h
2954
get_version LIBAVCODEC  libavcodec/avcodec.h
2955
get_version LIBAVDEVICE libavdevice/avdevice.h
2956
get_version LIBAVFORMAT libavformat/avformat.h
2957
get_version LIBAVUTIL   libavutil/avutil.h
2958
get_version LIBAVFILTER libavfilter/avfilter.h
2959

    
2960
enabled shared && cat >> config.mak <<EOF
2961
LIBTARGET=${LIBTARGET}
2962
SLIBNAME=${SLIBNAME}
2963
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2964
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2965
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2966
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2967
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2968
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2969
EOF
2970

    
2971
enabled asmalign_pot || align_shift="1 <<"
2972

    
2973
cat > $TMPH <<EOF
2974
/* Automatically generated by configure - do not modify! */
2975
#ifndef FFMPEG_CONFIG_H
2976
#define FFMPEG_CONFIG_H
2977
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2978
#define FFMPEG_LICENSE "$(c_escape $license)"
2979
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2980
#define CC_TYPE "$cc_type"
2981
#define CC_VERSION $cc_version
2982
#define restrict $_restrict
2983
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2984
#define EXTERN_PREFIX "${extern_prefix}"
2985
#define EXTERN_ASM ${extern_prefix}
2986
EOF
2987

    
2988
test -n "$malloc_prefix" &&
2989
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2990

    
2991
if enabled small || disabled optimizations; then
2992
    echo "#define av_always_inline"  >> $TMPH
2993
fi
2994

    
2995
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2996
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2997
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2998
                                      $CONFIG_EXTRA      \
2999
                                      $DECODER_LIST      \
3000
                                      $ENCODER_LIST      \
3001
                                      $HWACCEL_LIST      \
3002
                                      $PARSER_LIST       \
3003
                                      $BSF_LIST          \
3004
                                      $DEMUXER_LIST      \
3005
                                      $MUXER_LIST        \
3006
                                      $FILTER_LIST       \
3007
                                      $PROTOCOL_LIST     \
3008
                                      $INDEV_LIST        \
3009
                                      $OUTDEV_LIST       \
3010

    
3011
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3012
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3013

    
3014
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3015
cp_if_changed $TMPH config.h
3016

    
3017
cat > $TMPH <<EOF
3018
/* Generated by ffconf */
3019
#ifndef AVUTIL_AVCONFIG_H
3020
#define AVUTIL_AVCONFIG_H
3021
EOF
3022

    
3023
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3024

    
3025
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3026

    
3027
cp_if_changed $TMPH libavutil/avconfig.h
3028

    
3029
# build pkg-config files
3030

    
3031
pkgconfig_generate(){
3032
name=$1
3033
shortname=${name#lib}${build_suffix}
3034
comment=$2
3035
version=$3
3036
libs=$4
3037
requires=$5
3038
cat <<EOF > $name/$name.pc
3039
prefix=$prefix
3040
exec_prefix=\${prefix}
3041
libdir=$libdir
3042
includedir=$incdir
3043

    
3044
Name: $name
3045
Description: $comment
3046
Version: $version
3047
Requires: $(enabled shared || echo $requires)
3048
Requires.private: $(enabled shared && echo $requires)
3049
Conflicts:
3050
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3051
Libs.private: $(enabled shared && echo $libs)
3052
Cflags: -I\${includedir}
3053
EOF
3054
cat <<EOF > $name/$name-uninstalled.pc
3055
prefix=
3056
exec_prefix=
3057
libdir=\${pcfiledir}
3058
includedir=${source_path}
3059

    
3060
Name: $name
3061
Description: $comment
3062
Version: $version
3063
Requires: $requires
3064
Conflicts:
3065
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3066
Cflags: -I\${includedir}
3067
EOF
3068
}
3069

    
3070
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3071
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3072
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3073
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3074
enabled avfilter &&
3075
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3076
enabled postproc &&
3077
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3078
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"