Statistics
| Branch: | Revision:

ffmpeg / configure @ 6b35d421

History | View | Annotate | Download (86.7 KB)

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

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

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

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

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

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

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

    
57
show_help(){
58
cat <<EOF
59
Usage: configure [options]
60
Options: [defaults in brackets after descriptions]
61

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
979
HAVE_LIST_PUB='
980
    bigendian
981
'
982

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

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

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

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

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

    
1125
CMDLINE_APPEND="
1126
    extra_cflags
1127
"
1128

    
1129
# code dependency declarations
1130

    
1131
# architecture extensions
1132

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

    
1140
mmi_deps="mips"
1141

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

    
1145
vis_deps="sparc"
1146

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

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

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

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

    
1278
# parsers
1279
h264_parser_select="golomb"
1280

    
1281
# bitstream_filters
1282
aac_adtstoasc_bsf_select="aac_parser"
1283

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

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

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

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

    
1363
# filters
1364
movie_filter_deps="avfilter_lavf"
1365
avfilter_lavf_deps="avformat"
1366

    
1367
# libraries
1368
avdevice_deps="avcodec avformat"
1369
avformat_deps="avcodec"
1370

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

    
1377
doc_deps="texi2html"
1378

    
1379
# default parameters
1380

    
1381
logfile="config.err"
1382

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

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

    
1404
nm_opts='-g'
1405

    
1406
# machine
1407
arch=$(uname -m)
1408
cpu="generic"
1409

    
1410
# OS
1411
target_os=$(tolower $(uname -s))
1412
host_os=$target_os
1413

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

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

    
1449
CC_O='-o $@'
1450

    
1451
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1452
host_libs='-lm'
1453

    
1454
target_path='$(CURDIR)'
1455

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

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

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

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

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

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

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

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

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

    
1579
disabled logging && logfile=/dev/null
1580

    
1581
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1582
set >> $logfile
1583

    
1584
test -n "$cross_prefix" && enable cross_compile
1585

    
1586
ar="${cross_prefix}${ar}"
1587
cc_default="${cross_prefix}${cc_default}"
1588
nm_default="${cross_prefix}${nm_default}"
1589
ranlib="${cross_prefix}${ranlib}"
1590
strip="${cross_prefix}${strip}"
1591

    
1592
sysinclude_default="${sysroot}/usr/include"
1593

    
1594
set_default cc nm sysinclude
1595
enabled cross_compile || host_cc_default=$cc
1596
set_default host_cc
1597

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

    
1604
EXESUF=$(exesuf $target_os)
1605
HOSTEXESUF=$(exesuf $host_os)
1606

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

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

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

    
1628
trap 'rm -f -- $TMPFILES' EXIT
1629
trap exit HUP INT TERM
1630

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

    
1639
unset -f mktemp
1640

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

    
1654
filter_cflags=echo
1655
filter_cppflags=echo
1656
filter_asflags=echo
1657

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

    
1792
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1793

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

    
1799
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1800
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1801

    
1802
add_cflags $extra_cflags
1803
add_asflags $extra_cflags
1804

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

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

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

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

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

    
1883
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1884
enable $arch
1885

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

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

    
1931
elif enabled x86; then
1932

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

    
1957
elif enabled sparc; then
1958

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

    
1965
elif enabled arm; then
1966

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

    
1976
elif enabled alpha; then
1977

    
1978
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1979

    
1980
elif enabled bfin; then
1981

    
1982
    cpuflags="-mcpu=$cpu"
1983

    
1984
elif enabled mips; then
1985

    
1986
    cpuflags="-march=$cpu"
1987

    
1988
elif enabled avr32; then
1989

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

    
2009
fi
2010

    
2011
add_cflags $cpuflags
2012
add_asflags $cpuflags
2013

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

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

    
2036
check_host_cflags -std=c99
2037

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

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

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

    
2219
    *)
2220
        die "Unknown OS '$target_os'."
2221
        ;;
2222
esac
2223

    
2224
set_default $PATHS_LIST
2225

    
2226
add_extralibs $osextralibs
2227

    
2228
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2229
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2230

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

    
2242
disabled static && LIBNAME=""
2243

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

    
2259

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

    
2264
die_license_disabled gpl libfaad2
2265
die_license_disabled gpl libx264
2266
die_license_disabled gpl libxvid
2267
die_license_disabled gpl postproc
2268
die_license_disabled gpl x11grab
2269

    
2270
die_license_disabled nonfree libfaac
2271

    
2272
die_license_disabled version3 libopencore_amrnb
2273
die_license_disabled version3 libopencore_amrwb
2274

    
2275
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2276

    
2277
check_deps $ARCH_EXT_LIST
2278

    
2279
disabled optimizations || check_cflags -fomit-frame-pointer
2280

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

    
2288
enabled pic && enable_pic
2289

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

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

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

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

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

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

    
2320
if enabled alpha; then
2321

    
2322
    check_cflags -mieee
2323

    
2324
elif enabled arm; then
2325

    
2326
    check_cflags -marm
2327

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

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

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

    
2343
    enabled_all armv6t2 shared !pic && enable_pic
2344

    
2345
elif enabled ia64; then
2346

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

    
2350
elif enabled mips; then
2351

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

    
2355
elif enabled ppc; then
2356

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

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

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

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

    
2384
elif enabled sparc; then
2385

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

    
2389
elif enabled x86; then
2390

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

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

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

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

    
2423
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2424

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

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

    
2440
fi
2441

    
2442
if check_func dlopen; then
2443
    ldl=
2444
elif check_func dlopen -ldl; then
2445
    ldl=-ldl
2446
fi
2447

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

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

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

    
2478
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2479

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

    
2485
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2486
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2487

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

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

    
2514
check_lib math.h sin -lm
2515
check_lib va/va.h vaInitialize -lva
2516

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

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

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

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

    
2571
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2572

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

    
2599
check_header linux/videodev.h
2600
check_header linux/videodev2.h
2601
check_header sys/videoio.h
2602

    
2603
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2604

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

    
2614
check_header sys/soundcard.h
2615
check_header soundcard.h
2616

    
2617
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2618

    
2619
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2620

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

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

    
2636
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2637

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

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

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

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

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

    
2705
if enabled gprof; then
2706
    add_cflags  -p
2707
    add_ldflags -p
2708
fi
2709

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

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

    
2724
enabled_any $THREADS_LIST      && enable threads
2725

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

    
2741
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2742

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

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

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

    
2845
echo "License: $license"
2846

    
2847
echo "Creating config.mak and config.h..."
2848

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

    
2887
enabled stripping || strip="echo skipping strip"
2888

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

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

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

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

    
2978
enabled asmalign_pot || align_shift="1 <<"
2979

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

    
2995
test -n "$malloc_prefix" &&
2996
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2997

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

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

    
3018
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3019
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3020

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

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

    
3030
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3031

    
3032
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3033

    
3034
cp_if_changed $TMPH libavutil/avconfig.h
3035

    
3036
# build pkg-config files
3037

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

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

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

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