Statistics
| Branch: | Revision:

ffmpeg / configure @ 976d7bf7

History | View | Annotate | Download (87.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-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87
  --disable-avdevice       disable libavdevice build
88
  --disable-avcodec        disable libavcodec build
89
  --disable-avformat       disable libavformat build
90
  --disable-swscale        disable libswscale build
91
  --enable-postproc        enable GPLed postprocessing support [no]
92
  --enable-avfilter        video filter support [no]
93
  --enable-avfilter-lavf   video filters dependent on avformat [no]
94
  --enable-beosthreads     use BeOS threads [no]
95
  --enable-os2threads      use OS/2 threads [no]
96
  --enable-pthreads        use pthreads [no]
97
  --enable-w32threads      use Win32 threads [no]
98
  --enable-x11grab         enable X11 grabbing [no]
99
  --disable-network        disable network support [no]
100
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
101
  --enable-gray            enable full grayscale support (slower color)
102
  --disable-swscale-alpha  disable alpha channel support in swscale
103
  --disable-fastdiv        disable table-based division
104
  --enable-small           optimize for size instead of speed
105
  --disable-aandct         disable AAN DCT code
106
  --disable-dct            disable DCT code
107
  --disable-fft            disable FFT code
108
  --disable-golomb         disable Golomb code
109
  --disable-lpc            disable LPC code
110
  --disable-mdct           disable MDCT code
111
  --disable-rdft           disable RDFT code
112
  --disable-vaapi          disable VAAPI code
113
  --disable-vdpau          disable VDPAU code
114
  --disable-dxva2          disable DXVA2 code
115
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
116
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
117
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
118
  --enable-beos-netserver  enable BeOS netserver
119
  --disable-encoder=NAME   disable encoder NAME
120
  --enable-encoder=NAME    enable encoder NAME
121
  --disable-encoders       disable all encoders
122
  --disable-decoder=NAME   disable decoder NAME
123
  --enable-decoder=NAME    enable decoder NAME
124
  --disable-decoders       disable all decoders
125
  --disable-hwaccel=NAME   disable hwaccel NAME
126
  --enable-hwaccel=NAME    enable hwaccel NAME
127
  --disable-hwaccels       disable all hwaccels
128
  --disable-muxer=NAME     disable muxer NAME
129
  --enable-muxer=NAME      enable muxer NAME
130
  --disable-muxers         disable all muxers
131
  --disable-demuxer=NAME   disable demuxer NAME
132
  --enable-demuxer=NAME    enable demuxer NAME
133
  --disable-demuxers       disable all demuxers
134
  --enable-parser=NAME     enable parser NAME
135
  --disable-parser=NAME    disable parser NAME
136
  --disable-parsers        disable all parsers
137
  --enable-bsf=NAME        enable bitstream filter NAME
138
  --disable-bsf=NAME       disable bitstream filter NAME
139
  --disable-bsfs           disable all bitstream filters
140
  --enable-protocol=NAME   enable protocol NAME
141
  --disable-protocol=NAME  disable protocol NAME
142
  --disable-protocols      disable all protocols
143
  --disable-indev=NAME     disable input device NAME
144
  --disable-outdev=NAME    disable output device NAME
145
  --disable-indevs         disable input devices
146
  --disable-outdevs        disable output devices
147
  --disable-devices        disable all devices
148
  --enable-filter=NAME     enable filter NAME
149
  --disable-filter=NAME    disable filter NAME
150
  --disable-filters        disable all filters
151
  --list-decoders          show all available decoders
152
  --list-encoders          show all available encoders
153
  --list-hwaccels          show all available hardware accelerators
154
  --list-muxers            show all available muxers
155
  --list-demuxers          show all available demuxers
156
  --list-parsers           show all available parsers
157
  --list-protocols         show all available protocols
158
  --list-bsfs              show all available bitstream filters
159
  --list-indevs            show all available input devices
160
  --list-outdevs           show all available output devices
161
  --list-filters           show all available filters
162

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
672
check_mathfunc(){
673
    log check_mathfunc "$@"
674
    func=$1
675
    shift
676
    disable $func
677
    check_ld "$@" <<EOF && enable $func
678
#include <math.h>
679
float foo(float f) { return $func(f); }
680
int main(void){ return 0; }
681
EOF
682
}
683

    
684
check_func_headers(){
685
    log check_func_headers "$@"
686
    headers=$1
687
    func=$2
688
    shift 2
689
    disable $func
690
    incs=""
691
    for hdr in $headers; do
692
        incs="$incs
693
#include <$hdr>"
694
    done
695
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
696
$incs
697
int main(int argc, char **argv){
698
    return (long) $func;
699
}
700
EOF
701
}
702

    
703
check_cpp_condition(){
704
    log check_cpp_condition "$@"
705
    header=$1
706
    condition=$2
707
    shift 2
708
    check_cpp $($filter_cppflags "$@") <<EOF
709
#include <$header>
710
#if !($condition)
711
#error "unsatisfied condition: $condition"
712
#endif
713
EOF
714
}
715

    
716
check_lib(){
717
    log check_lib "$@"
718
    header="$1"
719
    func="$2"
720
    shift 2
721
    temp_extralibs "$@"
722
    check_header $header && check_func $func && add_extralibs "$@"
723
    err=$?
724
    restore_flags
725
    return $err
726
}
727

    
728
check_lib2(){
729
    log check_lib2 "$@"
730
    headers="$1"
731
    func="$2"
732
    shift 2
733
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
734
}
735

    
736
check_exec(){
737
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
738
}
739

    
740
check_exec_crash(){
741
    code=$(cat)
742

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

    
749
    (check_exec "$@") >> $logfile 2>&1 <<EOF
750
#include <signal.h>
751
static void sighandler(int sig){
752
    raise(SIGTERM);
753
}
754
int main(void){
755
    signal(SIGILL, sighandler);
756
    signal(SIGFPE, sighandler);
757
    signal(SIGSEGV, sighandler);
758
#ifdef SIGBUS
759
    signal(SIGBUS, sighandler);
760
#endif
761
    { $code }
762
}
763
EOF
764
}
765

    
766
check_type(){
767
    log check_type "$@"
768
    headers=$1
769
    type=$2
770
    shift 2
771
    disable_safe "$type"
772
    incs=""
773
    for hdr in $headers; do
774
        incs="$incs
775
#include <$hdr>"
776
    done
777
    check_cc "$@" <<EOF && enable_safe "$type"
778
$incs
779
$type v;
780
EOF
781
}
782

    
783
check_struct(){
784
    log check_type "$@"
785
    headers=$1
786
    struct=$2
787
    member=$3
788
    shift 3
789
    disable_safe "${struct}_${member}"
790
    incs=""
791
    for hdr in $headers; do
792
        incs="$incs
793
#include <$hdr>"
794
    done
795
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
796
$incs
797
const void *p = &(($struct *)0)->$member;
798
EOF
799
}
800

    
801
require(){
802
    name="$1"
803
    header="$2"
804
    func="$3"
805
    shift 3
806
    check_lib $header $func "$@" || die "ERROR: $name not found"
807
}
808

    
809
require2(){
810
    name="$1"
811
    headers="$2"
812
    func="$3"
813
    shift 3
814
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
815
}
816

    
817
check_foo_config(){
818
    cfg=$1
819
    pkg=$2
820
    header=$3
821
    func=$4
822
    shift 4
823
    disable $cfg
824
    check_cmd ${pkg}-config --version
825
    err=$?
826
    if test "$err" = 0; then
827
        temp_cflags $(${pkg}-config --cflags)
828
        temp_extralibs $(${pkg}-config --libs)
829
        check_lib "$@" $header $func && enable $cfg
830
    fi
831
    return $err
832
}
833

    
834
check_host_cc(){
835
    log check_host_cc "$@"
836
    cat > $TMPC
837
    log_file $TMPC
838
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
839
}
840

    
841
check_host_cflags(){
842
    log check_host_cflags "$@"
843
    check_host_cc "$@" <<EOF && append host_cflags "$@"
844
int x;
845
EOF
846
}
847

    
848
apply(){
849
    file=$1
850
    shift
851
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
852
}
853

    
854
cp_if_changed(){
855
    cmp -s "$1" "$2" &&
856
        echo "$2 is unchanged" ||
857
        cp -f "$1" "$2"
858
}
859

    
860
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
861
# system-dependent things.
862

    
863
COMPONENT_LIST="
864
    bsfs
865
    decoders
866
    demuxers
867
    encoders
868
    filters
869
    hwaccels
870
    indevs
871
    muxers
872
    outdevs
873
    parsers
874
    protocols
875
"
876

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

    
944
THREADS_LIST='
945
    beosthreads
946
    os2threads
947
    pthreads
948
    w32threads
949
'
950

    
951
ARCH_LIST='
952
    alpha
953
    arm
954
    avr32
955
    avr32_ap
956
    avr32_uc
957
    bfin
958
    ia64
959
    m68k
960
    mips
961
    mips64
962
    parisc
963
    ppc
964
    ppc64
965
    s390
966
    sh4
967
    sparc
968
    sparc64
969
    tomi
970
    x86
971
    x86_32
972
    x86_64
973
'
974

    
975
ARCH_EXT_LIST='
976
    altivec
977
    amd3dnow
978
    amd3dnowext
979
    armv5te
980
    armv6
981
    armv6t2
982
    armvfp
983
    iwmmxt
984
    mmi
985
    mmx
986
    mmx2
987
    neon
988
    ppc4xx
989
    sse
990
    ssse3
991
    vis
992
'
993

    
994
HAVE_LIST_PUB='
995
    bigendian
996
'
997

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

    
1085
# options emitted with CONFIG_ prefix but not available on command line
1086
CONFIG_EXTRA="
1087
    avutil
1088
    gplv3
1089
    lgplv3
1090
"
1091

    
1092
CMDLINE_SELECT="
1093
    $ARCH_EXT_LIST
1094
    $CONFIG_LIST
1095
    $THREADS_LIST
1096
    asm
1097
    cross_compile
1098
    debug
1099
    extra_warnings
1100
    logging
1101
    optimizations
1102
    stripping
1103
    yasm
1104
"
1105

    
1106
PATHS_LIST='
1107
    bindir
1108
    datadir
1109
    incdir
1110
    libdir
1111
    mandir
1112
    prefix
1113
    shlibdir
1114
'
1115

    
1116
CMDLINE_SET="
1117
    $PATHS_LIST
1118
    arch
1119
    as
1120
    build_suffix
1121
    cc
1122
    cpu
1123
    cross_prefix
1124
    dep_cc
1125
    extra_version
1126
    host_cc
1127
    host_cflags
1128
    host_ldflags
1129
    host_libs
1130
    host_os
1131
    ld
1132
    logfile
1133
    malloc_prefix
1134
    nm
1135
    source_path
1136
    strip
1137
    sysinclude
1138
    sysroot
1139
    target_exec
1140
    target_os
1141
    target_path
1142
"
1143

    
1144
CMDLINE_APPEND="
1145
    extra_cflags
1146
"
1147

    
1148
# code dependency declarations
1149

    
1150
# architecture extensions
1151

    
1152
armv5te_deps="arm"
1153
armv6_deps="arm"
1154
armv6t2_deps="arm"
1155
armvfp_deps="arm"
1156
iwmmxt_deps="arm"
1157
neon_deps="arm"
1158

    
1159
mmi_deps="mips"
1160

    
1161
altivec_deps="ppc"
1162
ppc4xx_deps="ppc"
1163

    
1164
vis_deps="sparc"
1165

    
1166
x86_64_suggest="cmov fast_cmov"
1167
amd3dnow_deps="mmx"
1168
amd3dnowext_deps="amd3dnow"
1169
mmx_deps="x86"
1170
mmx2_deps="mmx"
1171
sse_deps="mmx"
1172
ssse3_deps="sse"
1173

    
1174
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1175
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1176
fast_unaligned_if_any="armv6 ppc x86"
1177

    
1178
need_memalign="altivec neon sse"
1179
inline_asm_deps="!tms470"
1180

    
1181
# subsystems
1182
mdct_select="fft"
1183
rdft_select="fft"
1184

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

    
1306
# parsers
1307
h264_parser_select="golomb"
1308

    
1309
# bitstream_filters
1310
aac_adtstoasc_bsf_select="aac_parser"
1311

    
1312
# external libraries
1313
libdirac_decoder_deps="libdirac !libschroedinger"
1314
libdirac_encoder_deps="libdirac"
1315
libfaac_encoder_deps="libfaac"
1316
libfaad_decoder_deps="libfaad"
1317
libfaadbin_decoder_extralibs='$ldl'
1318
libgsm_decoder_deps="libgsm"
1319
libgsm_encoder_deps="libgsm"
1320
libgsm_ms_decoder_deps="libgsm"
1321
libgsm_ms_encoder_deps="libgsm"
1322
libmp3lame_encoder_deps="libmp3lame"
1323
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1324
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1325
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1326
libopenjpeg_decoder_deps="libopenjpeg"
1327
libschroedinger_decoder_deps="libschroedinger"
1328
libschroedinger_encoder_deps="libschroedinger"
1329
libspeex_decoder_deps="libspeex"
1330
libtheora_encoder_deps="libtheora"
1331
libvorbis_encoder_deps="libvorbis"
1332
libx264_encoder_deps="libx264"
1333
libxvid_encoder_deps="libxvid"
1334

    
1335
# demuxers / muxers
1336
ac3_demuxer_deps="ac3_parser"
1337
asf_stream_muxer_select="asf_muxer"
1338
avisynth_demuxer_deps="avisynth"
1339
dirac_demuxer_deps="dirac_parser"
1340
eac3_demuxer_select="ac3_parser"
1341
ipod_muxer_select="mov_muxer"
1342
libnut_demuxer_deps="libnut"
1343
libnut_muxer_deps="libnut"
1344
matroska_audio_muxer_select="matroska_muxer"
1345
matroska_demuxer_suggest="zlib bzlib"
1346
mov_demuxer_suggest="zlib"
1347
mp3_demuxer_deps="mpegaudio_parser"
1348
mp4_muxer_select="mov_muxer"
1349
mpegtsraw_demuxer_select="mpegts_demuxer"
1350
mxf_d10_muxer_select="mxf_muxer"
1351
ogg_demuxer_select="golomb"
1352
psp_muxer_select="mov_muxer"
1353
rtsp_demuxer_deps="sdp_demuxer"
1354
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1355
spdif_muxer_select="aac_parser"
1356
tg2_muxer_select="mov_muxer"
1357
tgp_muxer_select="mov_muxer"
1358
w64_demuxer_deps="wav_demuxer"
1359

    
1360
# indevs / outdevs
1361
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1362
alsa_indev_extralibs="-lasound"
1363
alsa_outdev_deps="alsa_asoundlib_h"
1364
alsa_outdev_extralibs="-lasound"
1365
audio_beos_indev_deps="audio_beos"
1366
audio_beos_indev_extralibs="-lmedia -lbe"
1367
audio_beos_outdev_deps="audio_beos"
1368
audio_beos_outdev_extralibs="-lmedia -lbe"
1369
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1370
dv1394_indev_deps="dv1394 dv_demuxer"
1371
jack_indev_deps="jack_jack_h"
1372
jack_indev_extralibs="-ljack"
1373
libdc1394_indev_deps="libdc1394"
1374
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1375
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1376
v4l_indev_deps="linux_videodev_h"
1377
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1378
vfwcap_indev_deps="capCreateCaptureWindow"
1379
vfwcap_indev_extralibs="-lavicap32"
1380
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1381
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1382

    
1383
# protocols
1384
gopher_protocol_deps="network"
1385
http_protocol_deps="network"
1386
rtmp_protocol_deps="tcp_protocol"
1387
rtp_protocol_deps="udp_protocol"
1388
tcp_protocol_deps="network"
1389
udp_protocol_deps="network"
1390

    
1391
# filters
1392
movie_filter_deps="avfilter_lavf"
1393
avfilter_lavf_deps="avformat"
1394

    
1395
# libraries
1396
avdevice_deps="avcodec avformat"
1397
avformat_deps="avcodec"
1398

    
1399
# programs
1400
ffmpeg_deps="avcodec avformat swscale"
1401
ffplay_deps="avcodec avformat swscale sdl"
1402
ffplay_select="rdft"
1403
ffprobe_deps="avcodec avformat"
1404
ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1405
ffserver_extralibs='$ldl'
1406

    
1407
doc_deps="texi2html"
1408

    
1409
# default parameters
1410

    
1411
logfile="config.err"
1412

    
1413
# installation paths
1414
prefix_default="/usr/local"
1415
bindir_default='${prefix}/bin'
1416
datadir_default='${prefix}/share/ffmpeg'
1417
incdir_default='${prefix}/include'
1418
libdir_default='${prefix}/lib'
1419
mandir_default='${prefix}/share/man'
1420
shlibdir_default="$libdir_default"
1421

    
1422
# toolchain
1423
ar="ar"
1424
cc_default="gcc"
1425
cc_version=\"unknown\"
1426
host_cc_default="gcc"
1427
ln_s="ln -sf"
1428
nm_default="nm"
1429
objformat="elf"
1430
ranlib="ranlib"
1431
strip_default="strip"
1432
yasmexe="yasm"
1433

    
1434
nm_opts='-g'
1435

    
1436
# machine
1437
arch_default=$(uname -m)
1438
cpu="generic"
1439

    
1440
# OS
1441
target_os_default=$(tolower $(uname -s))
1442
host_os=$target_os_default
1443

    
1444
# configurable options
1445
enable avcodec
1446
enable avdevice
1447
enable avformat
1448
enable avutil
1449
enable asm
1450
enable debug
1451
enable doc
1452
enable fastdiv
1453
enable ffmpeg
1454
enable ffplay
1455
enable ffprobe
1456
enable ffserver
1457
enable mpegaudio_hp
1458
enable network
1459
enable optimizations
1460
enable protocols
1461
enable static
1462
enable stripping
1463
enable swscale
1464
enable swscale_alpha
1465

    
1466
# build settings
1467
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1468
FFSERVERLDFLAGS=-Wl,-E
1469
LIBPREF="lib"
1470
LIBSUF=".a"
1471
FULLNAME='$(NAME)$(BUILDSUF)'
1472
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1473
SLIBPREF="lib"
1474
SLIBSUF=".so"
1475
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1476
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1477
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1478
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1479

    
1480
CC_O='-o $@'
1481

    
1482
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1483
host_libs='-lm'
1484

    
1485
target_path='$(CURDIR)'
1486

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

    
1492
# find source path
1493
source_path="$(dirname "$0")"
1494
enable source_path_used
1495
if test -f configure; then
1496
    source_path="$(pwd)"
1497
    disable source_path_used
1498
else
1499
    source_path="$(cd "$source_path"; pwd)"
1500
    echo "$source_path" | grep -q '[[:blank:]]' &&
1501
        die "Out of tree builds are impossible with whitespace in source path."
1502
    test -e "$source_path/config.h" &&
1503
        die "Out of tree builds are impossible with config.h in source dir."
1504
fi
1505

    
1506
for v in "$@"; do
1507
    r=${v#*=}
1508
    l=${v%"$r"}
1509
    r=$(sh_quote "$r")
1510
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1511
done
1512

    
1513
find_things(){
1514
    thing=$1
1515
    pattern=$2
1516
    file=$source_path/$3
1517
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1518
}
1519

    
1520
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1521
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1522
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1523
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1524
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1525
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1526
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1527
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1528
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1529
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1530
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1531

    
1532
enable $ARCH_EXT_LIST \
1533
       $DECODER_LIST \
1534
       $ENCODER_LIST \
1535
       $HWACCEL_LIST \
1536
       $PARSER_LIST \
1537
       $BSF_LIST \
1538
       $DEMUXER_LIST \
1539
       $MUXER_LIST \
1540
       $FILTER_LIST \
1541
       $PROTOCOL_LIST \
1542
       $INDEV_LIST \
1543
       $OUTDEV_LIST \
1544

    
1545
die_unknown(){
1546
    echo "Unknown option \"$1\"."
1547
    echo "See $0 --help for available options."
1548
    exit 1
1549
}
1550

    
1551
show_list() {
1552
    suffix=_$1
1553
    shift
1554
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1555
    exit 0
1556
}
1557

    
1558
for opt do
1559
    optval="${opt#*=}"
1560
    case "$opt" in
1561
    --extra-ldflags=*) add_ldflags $optval
1562
    ;;
1563
    --extra-libs=*) add_extralibs $optval
1564
    ;;
1565
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1566
    ;;
1567
    --enable-debug=*) debuglevel="$optval"
1568
    ;;
1569
    --enable-*=*|--disable-*=*)
1570
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1571
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1572
    eval list=\$$(toupper $thing)_LIST
1573
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1574
    $action $(filter "$name" $list)
1575
    ;;
1576
    --enable-?*|--disable-?*)
1577
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1578
    if is_in $option $COMPONENT_LIST; then
1579
        test $action = disable && action=unset
1580
        eval $action \$$(toupper ${option%s})_LIST
1581
    elif is_in $option $CMDLINE_SELECT; then
1582
        $action $option
1583
    else
1584
        die_unknown $opt
1585
    fi
1586
    ;;
1587
    --list-*)
1588
        NAME="${opt#--list-}"
1589
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1590
        NAME=${NAME%s}
1591
        eval show_list $NAME \$$(toupper $NAME)_LIST
1592
    ;;
1593
    --help|-h) show_help
1594
    ;;
1595
    *)
1596
    optname="${opt%%=*}"
1597
    optname="${optname#--}"
1598
    optname=$(echo "$optname" | sed 's/-/_/g')
1599
    if is_in $optname $CMDLINE_SET; then
1600
        eval $optname='$optval'
1601
    elif is_in $optname $CMDLINE_APPEND; then
1602
        append $optname "$optval"
1603
    else
1604
         die_unknown $opt
1605
    fi
1606
    ;;
1607
    esac
1608
done
1609

    
1610
disabled logging && logfile=/dev/null
1611

    
1612
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1613
set >> $logfile
1614

    
1615
test -n "$cross_prefix" && enable cross_compile
1616

    
1617
if enabled cross_compile; then
1618
    test -n "$arch" && test -n "$target_os" ||
1619
        die "Must specify target arch and OS when cross-compiling"
1620
fi
1621

    
1622
set_default arch target_os
1623

    
1624
ar="${cross_prefix}${ar}"
1625
cc_default="${cross_prefix}${cc_default}"
1626
nm_default="${cross_prefix}${nm_default}"
1627
ranlib="${cross_prefix}${ranlib}"
1628
strip_default="${cross_prefix}${strip_default}"
1629

    
1630
sysinclude_default="${sysroot}/usr/include"
1631

    
1632
set_default cc nm strip sysinclude
1633
enabled cross_compile || host_cc_default=$cc
1634
set_default host_cc
1635

    
1636
exesuf() {
1637
    case $1 in
1638
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1639
    esac
1640
}
1641

    
1642
EXESUF=$(exesuf $target_os)
1643
HOSTEXESUF=$(exesuf $host_os)
1644

    
1645
# set temporary file name
1646
: ${TMPDIR:=$TEMPDIR}
1647
: ${TMPDIR:=$TMP}
1648
: ${TMPDIR:=/tmp}
1649

    
1650
if ! check_cmd type mktemp; then
1651
    # simple replacement for missing mktemp
1652
    # NOT SAFE FOR GENERAL USE
1653
    mktemp(){
1654
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1655
    }
1656
fi
1657

    
1658
tmpfile(){
1659
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1660
        (set -C; exec > $tmp) 2>/dev/null ||
1661
        die "Unable to create temporary file in $TMPDIR."
1662
    append TMPFILES $tmp
1663
    eval $1=$tmp
1664
}
1665

    
1666
trap 'rm -f -- $TMPFILES' EXIT
1667
trap exit HUP INT TERM
1668

    
1669
tmpfile TMPC  .c
1670
tmpfile TMPE  $EXESUF
1671
tmpfile TMPH  .h
1672
tmpfile TMPO  .o
1673
tmpfile TMPS  .S
1674
tmpfile TMPV  .ver
1675
tmpfile TMPSH .sh
1676

    
1677
unset -f mktemp
1678

    
1679
# make sure we can execute files in $TMPDIR
1680
cat > $TMPSH 2>> $logfile <<EOF
1681
#! /bin/sh
1682
EOF
1683
chmod +x $TMPSH >> $logfile 2>&1
1684
if ! $TMPSH >> $logfile 2>&1; then
1685
    cat <<EOF
1686
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1687
variable to another directory and make sure that it is not mounted noexec.
1688
EOF
1689
    die "Sanity test failed."
1690
fi
1691

    
1692
filter_cflags=echo
1693
filter_cppflags=echo
1694
filter_asflags=echo
1695

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

    
1830
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1831

    
1832
: ${as_default:=$cc}
1833
: ${dep_cc_default:=$cc}
1834
: ${ld_default:=$cc}
1835
set_default as dep_cc ld
1836

    
1837
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1838
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1839

    
1840
add_cflags $extra_cflags
1841
add_asflags $extra_cflags
1842

    
1843
if test -n "$sysroot"; then
1844
    case "$cc_type" in
1845
        gcc)
1846
            add_cppflags --sysroot="$sysroot"
1847
            add_ldflags --sysroot="$sysroot"
1848
        ;;
1849
        tms470)
1850
            add_cppflags -I"$sysinclude"
1851
            add_ldflags  --sysroot="$sysroot"
1852
        ;;
1853
        clang)
1854
            add_cppflags -isysroot="$sysroot"
1855
            add_ldflags -isysroot="$sysroot"
1856
        ;;
1857
    esac
1858
fi
1859

    
1860
if test "$cpu" = host; then
1861
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1862

    
1863
    case "$cc_type" in
1864
        gcc)
1865
            check_native(){
1866
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1867
                sed -n "/$1=/{
1868
                            s/.*$1=\\([^ ]*\\).*/\\1/
1869
                            p
1870
                            q
1871
                        }" $TMPE
1872
            }
1873
            cpu=$(check_native -march || check_native -mcpu)
1874
        ;;
1875
    esac
1876

    
1877
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1878
fi
1879

    
1880
# Deal with common $arch aliases
1881
case "$arch" in
1882
    arm*)
1883
        arch="arm"
1884
    ;;
1885
    mips|mipsel|IP*)
1886
        arch="mips"
1887
    ;;
1888
    mips64)
1889
        arch="mips"
1890
        subarch="mips64"
1891
    ;;
1892
    parisc|hppa)
1893
        arch="parisc"
1894
    ;;
1895
    parisc64|hppa64)
1896
        arch="parisc"
1897
        subarch="parisc64"
1898
    ;;
1899
    "Power Macintosh"|ppc|powerpc)
1900
        arch="ppc"
1901
    ;;
1902
    ppc64)
1903
        arch="ppc"
1904
        subarch="ppc64"
1905
    ;;
1906
    s390|s390x)
1907
        arch="s390"
1908
    ;;
1909
    sh4|sh)
1910
        arch="sh4"
1911
    ;;
1912
    sun4u|sparc64)
1913
        arch="sparc"
1914
        subarch="sparc64"
1915
    ;;
1916
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1917
        arch="x86"
1918
    ;;
1919
esac
1920

    
1921
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1922
enable $arch
1923

    
1924
# Add processor-specific flags
1925
if test "$cpu" = generic; then
1926
    : do nothing
1927
elif enabled ppc; then
1928

    
1929
    case $(tolower $cpu) in
1930
        601|ppc601|powerpc601)
1931
            cpuflags="-mcpu=601"
1932
            disable altivec
1933
        ;;
1934
        603*|ppc603*|powerpc603*)
1935
            cpuflags="-mcpu=603"
1936
            disable altivec
1937
        ;;
1938
        604*|ppc604*|powerpc604*)
1939
            cpuflags="-mcpu=604"
1940
            disable altivec
1941
        ;;
1942
        g3|75*|ppc75*|powerpc75*)
1943
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1944
            disable altivec
1945
        ;;
1946
        g4|745*|ppc745*|powerpc745*)
1947
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1948
        ;;
1949
        74*|ppc74*|powerpc74*)
1950
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1951
        ;;
1952
        g5|970|ppc970|powerpc970|power4*)
1953
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1954
        ;;
1955
        cell)
1956
            cpuflags="-mcpu=cell"
1957
            enable ldbrx
1958
        ;;
1959
        e500v2)
1960
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1961
            disable altivec
1962
        ;;
1963
        e500)
1964
            cpuflags="-mcpu=8540 -mhard-float"
1965
            disable altivec
1966
        ;;
1967
    esac
1968

    
1969
elif enabled x86; then
1970

    
1971
    case $cpu in
1972
        i[345]86|pentium)
1973
            cpuflags="-march=$cpu"
1974
            disable mmx
1975
        ;;
1976
        # targets that do NOT support conditional mov (cmov)
1977
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1978
            cpuflags="-march=$cpu"
1979
            disable cmov
1980
        ;;
1981
        # targets that do support conditional mov (cmov)
1982
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1983
            cpuflags="-march=$cpu"
1984
            enable cmov
1985
            enable fast_cmov
1986
        ;;
1987
        # targets that do support conditional mov but on which it's slow
1988
        pentium4|pentium4m|prescott|nocona)
1989
            cpuflags="-march=$cpu"
1990
            enable cmov
1991
            disable fast_cmov
1992
        ;;
1993
    esac
1994

    
1995
elif enabled sparc; then
1996

    
1997
    case $cpu in
1998
        sparc64)
1999
            cpuflags="-mcpu=v9"
2000
        ;;
2001
    esac
2002

    
2003
elif enabled arm; then
2004

    
2005
    case $cpu in
2006
        armv*)
2007
            cpuflags="-march=$cpu"
2008
        ;;
2009
        *)
2010
            cpuflags="-mcpu=$cpu"
2011
        ;;
2012
    esac
2013

    
2014
elif enabled alpha; then
2015

    
2016
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2017

    
2018
elif enabled bfin; then
2019

    
2020
    cpuflags="-mcpu=$cpu"
2021

    
2022
elif enabled mips; then
2023

    
2024
    cpuflags="-march=$cpu"
2025

    
2026
elif enabled avr32; then
2027

    
2028
    case $cpu in
2029
        ap7[02]0[0-2])
2030
            subarch="avr32_ap"
2031
            cpuflags="-mpart=$cpu"
2032
        ;;
2033
        ap)
2034
            subarch="avr32_ap"
2035
            cpuflags="-march=$cpu"
2036
        ;;
2037
        uc3[ab]*)
2038
            subarch="avr32_uc"
2039
            cpuflags="-mcpu=$cpu"
2040
        ;;
2041
        uc)
2042
            subarch="avr32_uc"
2043
            cpuflags="-march=$cpu"
2044
        ;;
2045
    esac
2046

    
2047
fi
2048

    
2049
add_cflags $cpuflags
2050
add_asflags $cpuflags
2051

    
2052
# compiler sanity check
2053
check_exec <<EOF
2054
int main(void){ return 0; }
2055
EOF
2056
if test "$?" != 0; then
2057
    echo "$cc is unable to create an executable file."
2058
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
2059
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2060
        echo "Only do this if you know what cross compiling means."
2061
    fi
2062
    die "C compiler test failed."
2063
fi
2064

    
2065
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2066
check_cflags -std=c99
2067
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2068
#include <stdlib.h>
2069
EOF
2070
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2071
#include <stdlib.h>
2072
EOF
2073

    
2074
check_host_cflags -std=c99
2075

    
2076
case "$arch" in
2077
    alpha|ia64|mips|parisc|sparc)
2078
        spic=$shared
2079
    ;;
2080
    x86)
2081
        subarch="x86_32"
2082
        check_cc <<EOF && subarch="x86_64"
2083
        int test[(int)sizeof(char*) - 7];
2084
EOF
2085
        if test "$subarch" = "x86_64"; then
2086
            spic=$shared
2087
        fi
2088
    ;;
2089
esac
2090

    
2091
enable $subarch
2092
enabled spic && enable pic
2093
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2094

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

    
2263
set_default $PATHS_LIST
2264

    
2265
add_extralibs $osextralibs
2266

    
2267
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2268
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2269

    
2270
# we need to build at least one lib type
2271
if ! enabled_any static shared; then
2272
    cat <<EOF
2273
At least one library type must be built.
2274
Specify --enable-static to build the static libraries or --enable-shared to
2275
build the shared libraries as well. To only build the shared libraries specify
2276
--disable-static in addition to --enable-shared.
2277
EOF
2278
    exit 1;
2279
fi
2280

    
2281
disabled static && LIBNAME=""
2282

    
2283
if enabled_any libfaad libfaadbin ; then
2284
    if check_header faad.h; then
2285
        check_cc <<EOF
2286
#include <faad.h>
2287
#ifndef FAAD2_VERSION
2288
ok faad1
2289
#endif
2290
int main(void) { return 0; }
2291
EOF
2292
        test $? = 0 && enable libfaad2
2293
    else
2294
        die "FAAD test failed."
2295
    fi
2296
fi
2297

    
2298

    
2299
die_license_disabled() {
2300
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2301
}
2302

    
2303
die_license_disabled gpl libfaad2
2304
die_license_disabled gpl libx264
2305
die_license_disabled gpl libxvid
2306
die_license_disabled gpl postproc
2307
die_license_disabled gpl x11grab
2308

    
2309
die_license_disabled nonfree libfaac
2310

    
2311
die_license_disabled version3 libopencore_amrnb
2312
die_license_disabled version3 libopencore_amrwb
2313

    
2314
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2315

    
2316
check_deps $ARCH_EXT_LIST
2317

    
2318
disabled optimizations || check_cflags -fomit-frame-pointer
2319

    
2320
enable_pic() {
2321
    enable pic
2322
    add_cppflags -DPIC
2323
    add_cflags   -fPIC
2324
    add_asflags  -fPIC
2325
}
2326

    
2327
enabled pic && enable_pic
2328

    
2329
check_cc <<EOF || die "Symbol mangling check failed."
2330
int ff_extern;
2331
EOF
2332
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2333
extern_prefix=${sym%%ff_extern*}
2334

    
2335
check_cc <<EOF && enable inline_asm
2336
void foo(void) { __asm__ volatile ("" ::); }
2337
EOF
2338

    
2339
_restrict=
2340
for restrict_keyword in restrict __restrict__ __restrict; do
2341
    check_cc <<EOF && _restrict=$restrict_keyword && break
2342
void foo(char * $restrict_keyword p);
2343
EOF
2344
done
2345

    
2346
check_cc <<EOF && enable attribute_packed
2347
struct { int x; } __attribute__((packed)) x;
2348
EOF
2349

    
2350
check_cc <<EOF && enable attribute_may_alias
2351
union { int x; } __attribute__((may_alias)) x;
2352
EOF
2353

    
2354
check_cc <<EOF || die "endian test failed"
2355
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2356
EOF
2357
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2358

    
2359
if enabled alpha; then
2360

    
2361
    check_cflags -mieee
2362

    
2363
elif enabled arm; then
2364

    
2365
    check_cflags -marm
2366

    
2367
    check_ld <<EOF && enable vfp_args
2368
__asm__ (".eabi_attribute 28, 1");
2369
int main(void) { return 0; }
2370
EOF
2371

    
2372
    # We have to check if pld is a nop and disable it.
2373
    check_asm pld '"pld [r0]"'
2374

    
2375
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2376
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2377
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2378
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2379
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2380
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2381

    
2382
    enabled_all armv6t2 shared !pic && enable_pic
2383

    
2384
elif enabled ia64; then
2385

    
2386
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2387
    enabled shared && enable_weak hardcoded_tables
2388

    
2389
elif enabled mips; then
2390

    
2391
    check_asm loongson '"dmult.g $1, $2, $3"'
2392
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2393

    
2394
elif enabled ppc; then
2395

    
2396
    enable local_aligned_8 local_aligned_16
2397

    
2398
    check_asm dcbzl     '"dcbzl 0, 1"'
2399
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2400
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2401

    
2402
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2403
    if enabled altivec; then
2404
        check_cflags -maltivec -mabi=altivec &&
2405
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2406
        check_cflags -faltivec
2407

    
2408
        # check if our compiler supports Motorola AltiVec C API
2409
        check_cc <<EOF || disable altivec
2410
$inc_altivec_h
2411
int main(void) {
2412
    vector signed int v1, v2, v3;
2413
    v1 = vec_add(v2,v3);
2414
    return 0;
2415
}
2416
EOF
2417

    
2418
        # check if our compiler supports braces for vector declarations
2419
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2420
$inc_altivec_h
2421
int main (void) { (vector int) {1}; return 0; }
2422
EOF
2423
    fi
2424

    
2425
elif enabled sparc; then
2426

    
2427
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2428
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2429

    
2430
elif enabled x86; then
2431

    
2432
    enable local_aligned_8 local_aligned_16
2433

    
2434
    # check whether EBP is available on x86
2435
    # As 'i' is stored on the stack, this program will crash
2436
    # if the base pointer is used to access it because the
2437
    # base pointer is cleared in the inline assembly code.
2438
    check_exec_crash <<EOF && enable ebp_available
2439
    volatile int i=0;
2440
    __asm__ volatile (
2441
        "xorl %%ebp, %%ebp"
2442
    ::: "%ebp");
2443
    return i;
2444
EOF
2445

    
2446
    # check whether EBX is available on x86
2447
    check_asm ebx_available '""::"b"(0)' &&
2448
        check_asm ebx_available '"":::"%ebx"'
2449

    
2450
    # check whether more than 10 operands are supported
2451
    check_cc <<EOF && enable ten_operands
2452
int main(void) {
2453
    int x=0;
2454
    __asm__ volatile(
2455
        ""
2456
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2457
    );
2458
    return 0;
2459
}
2460
EOF
2461

    
2462
    # check whether binutils is new enough to compile SSSE3/MMX2
2463
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2464
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2465

    
2466
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2467

    
2468
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2469
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2470
    enabled     pic           && append YASMFLAGS "-DPIC"
2471
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2472
    case "$objformat" in
2473
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2474
    esac
2475
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2476

    
2477
    case "$cpu" in
2478
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2479
            disable fast_clz
2480
        ;;
2481
    esac
2482

    
2483
fi
2484

    
2485
if check_func dlopen; then
2486
    ldl=
2487
elif check_func dlopen -ldl; then
2488
    ldl=-ldl
2489
fi
2490

    
2491
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2492
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2493

    
2494
check_func  fork
2495
check_func  getaddrinfo $network_extralibs
2496
check_func  gethrtime
2497
check_func  getrusage
2498
check_func  inet_aton $network_extralibs
2499
check_func  isatty
2500
check_func  ${malloc_prefix}memalign            && enable memalign
2501
check_func  mkstemp
2502
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2503
check_func  setrlimit
2504
check_func_headers io.h setmode
2505
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2506
check_func_headers windows.h GetProcessTimes
2507
check_func_headers windows.h VirtualAlloc
2508

    
2509
check_header conio.h
2510
check_header dlfcn.h
2511
check_header dxva2api.h
2512
check_header malloc.h
2513
check_header poll.h
2514
check_header sys/mman.h
2515
check_header sys/resource.h
2516
check_header sys/select.h
2517
check_header termios.h
2518
check_header vdpau/vdpau.h
2519
check_header vdpau/vdpau_x11.h
2520
check_header X11/extensions/XvMClib.h
2521

    
2522
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2523

    
2524
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2525
     enabled_any $need_memalign ; then
2526
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2527
fi
2528

    
2529
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2530
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2531

    
2532
# check for some common methods of building with pthread support
2533
# do this before the optional library checks as some of them require pthreads
2534
if enabled pthreads; then
2535
    if check_func pthread_create; then
2536
        :
2537
    elif check_func pthread_create -pthread; then
2538
        add_cflags -pthread
2539
        add_extralibs -pthread
2540
    elif check_func pthread_create -pthreads; then
2541
        add_cflags -pthreads
2542
        add_extralibs -pthreads
2543
    elif check_func pthread_create -lpthreadGC2; then
2544
        add_extralibs -lpthreadGC2
2545
    elif ! check_lib pthread.h pthread_create -lpthread; then
2546
        die "ERROR: can't find pthreads library"
2547
    fi
2548
fi
2549

    
2550
for thread in $THREADS_LIST; do
2551
    if enabled $thread; then
2552
        test -n "$thread_type" &&
2553
            die "ERROR: Only one thread type must be selected." ||
2554
            thread_type="$thread"
2555
    fi
2556
done
2557

    
2558
check_lib math.h sin -lm
2559
check_lib va/va.h vaInitialize -lva
2560

    
2561
check_mathfunc exp2
2562
check_mathfunc exp2f
2563
check_mathfunc llrint
2564
check_mathfunc log2
2565
check_mathfunc log2f
2566
check_mathfunc lrint
2567
check_mathfunc lrintf
2568
check_mathfunc round
2569
check_mathfunc roundf
2570
check_mathfunc truncf
2571

    
2572
# these are off by default, so fail if requested and not available
2573
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2574
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2575
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2576
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2577
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2578
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2579
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2580
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2581
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2582
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2583
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2584
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2585
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2586
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2587
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2588
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2589
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2590
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2591
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2592
                        die "ERROR: libx264 version must be >= 0.83."; }
2593
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2594
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2595

    
2596
# libdc1394 check
2597
if enabled libdc1394; then
2598
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2599
        enable libdc1394_2; } ||
2600
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2601
        enable libdc1394_1; } ||
2602
    die "ERROR: No version of libdc1394 found "
2603
fi
2604

    
2605
SDL_CONFIG="${cross_prefix}sdl-config"
2606
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2607
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2608
    sdl_libs=$("${SDL_CONFIG}" --libs)
2609
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2610
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2611
    enable sdl &&
2612
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2613
fi
2614

    
2615
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2616

    
2617
if enabled network; then
2618
    check_type "sys/types.h sys/socket.h" socklen_t
2619
    check_type netdb.h "struct addrinfo"
2620
    check_type netinet/in.h "struct ipv6_mreq"
2621
    check_type netinet/in.h "struct sockaddr_in6"
2622
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2623
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2624
    # Prefer arpa/inet.h over winsock2
2625
    if check_header arpa/inet.h ; then
2626
        check_func closesocket
2627
    elif check_header winsock2.h ; then
2628
        check_func_headers winsock2.h closesocket -lws2 && \
2629
            network_extralibs="-lws2" || \
2630
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2631
            network_extralibs="-lws2_32"; }
2632
        check_type ws2tcpip.h socklen_t
2633
        check_type ws2tcpip.h "struct addrinfo"
2634
        check_type ws2tcpip.h "struct ipv6_mreq"
2635
        check_type ws2tcpip.h "struct sockaddr_in6"
2636
        check_type ws2tcpip.h "struct sockaddr_storage"
2637
        check_struct winsock2.h "struct sockaddr" sa_len
2638
    else
2639
        disable network
2640
    fi
2641
fi
2642

    
2643
check_header linux/videodev.h
2644
check_header linux/videodev2.h
2645
check_header sys/videoio.h
2646

    
2647
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2648

    
2649
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2650
{ check_header dev/bktr/ioctl_meteor.h &&
2651
  check_header dev/bktr/ioctl_bt848.h; } ||
2652
{ check_header machine/ioctl_meteor.h &&
2653
  check_header machine/ioctl_bt848.h; } ||
2654
{ check_header dev/video/meteor/ioctl_meteor.h &&
2655
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2656
check_header dev/ic/bt8xx.h
2657

    
2658
check_header sys/soundcard.h
2659
check_header soundcard.h
2660

    
2661
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2662

    
2663
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2664

    
2665
enabled x11grab                         &&
2666
check_header X11/Xlib.h                 &&
2667
check_header X11/extensions/XShm.h      &&
2668
check_header X11/extensions/Xfixes.h    &&
2669
check_func XOpenDisplay -lX11           &&
2670
check_func XShmCreateImage -lX11 -lXext &&
2671
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2672

    
2673
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2674
check_cpp_condition \
2675
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2676
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2677
      disable vdpau; }
2678
fi
2679

    
2680
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2681

    
2682
# add some useful compiler flags if supported
2683
check_cflags -Wdeclaration-after-statement
2684
check_cflags -Wall
2685
check_cflags -Wno-switch
2686
check_cflags -Wdisabled-optimization
2687
check_cflags -Wpointer-arith
2688
check_cflags -Wredundant-decls
2689
check_cflags -Wno-pointer-sign
2690
check_cflags -Wcast-qual
2691
check_cflags -Wwrite-strings
2692
check_cflags -Wtype-limits
2693
check_cflags -Wundef
2694
enabled extra_warnings && check_cflags -Winline
2695

    
2696
# add some linker flags
2697
check_ldflags -Wl,--warn-common
2698
check_ldflags -Wl,--as-needed
2699
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'
2700
check_ldflags -Wl,-Bsymbolic
2701

    
2702
echo "X{};" > $TMPV
2703
test_ldflags -Wl,--version-script,$TMPV &&
2704
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2705

    
2706
if enabled small; then
2707
    add_cflags $size_cflags
2708
    optimizations="small"
2709
elif enabled optimizations; then
2710
    add_cflags $speed_cflags
2711
fi
2712
check_cflags -fno-math-errno
2713
check_cflags -fno-signed-zeros
2714

    
2715
if enabled icc; then
2716
    # Just warnings, no remarks
2717
    check_cflags -w1
2718
    # -wd: Disable following warnings
2719
    # 144, 167, 556: -Wno-pointer-sign
2720
    # 10006: ignoring unknown option -fno-signed-zeros
2721
    # 10156: ignoring option '-W'; no argument required
2722
    check_cflags -wd144,167,556,1292,10006,10156
2723
    # 11030: Warning unknown option --as-needed
2724
    # 10156: ignoring option '-export'; no argument required
2725
    check_ldflags -wd10156,11030
2726
    # Allow to compile with optimizations
2727
    check_ldflags -march=$cpu
2728
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2729
    enable ebp_available
2730
elif enabled ccc; then
2731
    # disable some annoying warnings
2732
    add_cflags -msg_disable cvtu32to64
2733
    add_cflags -msg_disable embedcomment
2734
    add_cflags -msg_disable needconstext
2735
    add_cflags -msg_disable nomainieee
2736
    add_cflags -msg_disable ptrmismatch1
2737
    add_cflags -msg_disable unreachcode
2738
elif enabled gcc; then
2739
    check_cflags -fno-tree-vectorize
2740
elif enabled clang; then
2741
    check_cflags -Qunused-arguments
2742
elif enabled armcc; then
2743
    # 2523: use of inline assembler is deprecated
2744
    add_cflags -Wrvct,--diag_suppress=2523
2745
    add_cflags -Wrvct,--diag_suppress=1207
2746
elif enabled tms470; then
2747
    add_cflags -pds=824 -pds=837
2748
fi
2749

    
2750
if enabled gprof; then
2751
    add_cflags  -p
2752
    add_ldflags -p
2753
fi
2754

    
2755
# Find out if the .align argument is a power of two or not.
2756
check_asm asmalign_pot '".align 3"'
2757

    
2758
enabled_any $DECODER_LIST      && enable decoders
2759
enabled_any $ENCODER_LIST      && enable encoders
2760
enabled_any $HWACCEL_LIST      && enable hwaccels
2761
enabled_any $BSF_LIST          && enable bsfs
2762
enabled_any $DEMUXER_LIST      && enable demuxers
2763
enabled_any $MUXER_LIST        && enable muxers
2764
enabled_any $FILTER_LIST       && enable filters
2765
enabled_any $INDEV_LIST        && enable indevs
2766
enabled_any $OUTDEV_LIST       && enable outdevs
2767
enabled_any $PROTOCOL_LIST     && enable protocols
2768

    
2769
enabled_any $THREADS_LIST      && enable threads
2770

    
2771
check_deps $CONFIG_LIST       \
2772
           $CONFIG_EXTRA      \
2773
           $HAVE_LIST         \
2774
           $DECODER_LIST      \
2775
           $ENCODER_LIST      \
2776
           $HWACCEL_LIST      \
2777
           $PARSER_LIST       \
2778
           $BSF_LIST          \
2779
           $DEMUXER_LIST      \
2780
           $MUXER_LIST        \
2781
           $FILTER_LIST       \
2782
           $INDEV_LIST        \
2783
           $OUTDEV_LIST       \
2784
           $PROTOCOL_LIST     \
2785

    
2786
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2787

    
2788
echo "install prefix            $prefix"
2789
echo "source path               $source_path"
2790
echo "C compiler                $cc"
2791
echo ".align is power-of-two    $asmalign_pot"
2792
echo "ARCH                      $arch ($cpu)"
2793
if test "$build_suffix" != ""; then
2794
    echo "build suffix              $build_suffix"
2795
fi
2796
if test "$extra_version" != ""; then
2797
    echo "version string suffix     $extra_version"
2798
fi
2799
echo "big-endian                ${bigendian-no}"
2800
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2801
if enabled x86; then
2802
    echo "yasm                      ${yasm-no}"
2803
    echo "MMX enabled               ${mmx-no}"
2804
    echo "MMX2 enabled              ${mmx2-no}"
2805
    echo "3DNow! enabled            ${amd3dnow-no}"
2806
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2807
    echo "SSE enabled               ${sse-no}"
2808
    echo "SSSE3 enabled             ${ssse3-no}"
2809
    echo "CMOV enabled              ${cmov-no}"
2810
    echo "CMOV is fast              ${fast_cmov-no}"
2811
    echo "EBX available             ${ebx_available-no}"
2812
    echo "EBP available             ${ebp_available-no}"
2813
    echo "10 operands supported     ${ten_operands-no}"
2814
fi
2815
if enabled arm; then
2816
    echo "ARMv5TE enabled           ${armv5te-no}"
2817
    echo "ARMv6 enabled             ${armv6-no}"
2818
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2819
    echo "ARM VFP enabled           ${armvfp-no}"
2820
    echo "IWMMXT enabled            ${iwmmxt-no}"
2821
    echo "NEON enabled              ${neon-no}"
2822
fi
2823
if enabled mips; then
2824
    echo "MMI enabled               ${mmi-no}"
2825
fi
2826
if enabled ppc; then
2827
    echo "AltiVec enabled           ${altivec-no}"
2828
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2829
    echo "dcbzl available           ${dcbzl-no}"
2830
    echo "performance report        ${powerpc_perf-no}"
2831
fi
2832
if enabled sparc; then
2833
    echo "VIS enabled               ${vis-no}"
2834
fi
2835
echo "gprof enabled             ${gprof-no}"
2836
echo "debug symbols             ${debug-no}"
2837
echo "strip symbols             ${stripping-no}"
2838
echo "optimizations             ${optimizations-no}"
2839
echo "static                    ${static-no}"
2840
echo "shared                    ${shared-no}"
2841
echo "postprocessing support    ${postproc-no}"
2842
echo "new filter support        ${avfilter-no}"
2843
echo "filters using lavformat   ${avfilter_lavf-no}"
2844
echo "network support           ${network-no}"
2845
echo "threading support         ${thread_type-no}"
2846
echo "SDL support               ${sdl-no}"
2847
echo "Sun medialib support      ${mlib-no}"
2848
echo "AVISynth enabled          ${avisynth-no}"
2849
echo "libdc1394 support         ${libdc1394-no}"
2850
echo "libdirac enabled          ${libdirac-no}"
2851
echo "libfaac enabled           ${libfaac-no}"
2852
echo "libfaad enabled           ${libfaad-no}"
2853
echo "libfaad dlopened          ${libfaadbin-no}"
2854
echo "libgsm enabled            ${libgsm-no}"
2855
echo "libmp3lame enabled        ${libmp3lame-no}"
2856
echo "libnut enabled            ${libnut-no}"
2857
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2858
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2859
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2860
echo "libschroedinger enabled   ${libschroedinger-no}"
2861
echo "libspeex enabled          ${libspeex-no}"
2862
echo "libtheora enabled         ${libtheora-no}"
2863
echo "libvorbis enabled         ${libvorbis-no}"
2864
echo "libx264 enabled           ${libx264-no}"
2865
echo "libxvid enabled           ${libxvid-no}"
2866
echo "zlib enabled              ${zlib-no}"
2867
echo "bzlib enabled             ${bzlib-no}"
2868
echo
2869

    
2870
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2871
    echo "Enabled ${type}s:"
2872
    eval list=\$$(toupper $type)_LIST
2873
    for part in $list; do
2874
        enabled $part && echo ${part%_*}
2875
    done | sort | pr -3 -t
2876
    echo
2877
done
2878

    
2879
license="LGPL version 2.1 or later"
2880
if enabled nonfree; then
2881
    license="nonfree and unredistributable"
2882
elif enabled gplv3; then
2883
    license="GPL version 3 or later"
2884
elif enabled lgplv3; then
2885
    license="LGPL version 3 or later"
2886
elif enabled gpl; then
2887
    license="GPL version 2 or later"
2888
fi
2889

    
2890
echo "License: $license"
2891

    
2892
echo "Creating config.mak and config.h..."
2893

    
2894
# build tree in object directory if source path is different from current one
2895
if enabled source_path_used; then
2896
    DIRS="
2897
        doc
2898
        libavcodec
2899
        libavcodec/$arch
2900
        libavdevice
2901
        libavfilter
2902
        libavformat
2903
        libavutil
2904
        libavutil/$arch
2905
        libpostproc
2906
        libswscale
2907
        libswscale/$arch
2908
        tests
2909
        tools
2910
    "
2911
    FILES="
2912
        Makefile
2913
        common.mak
2914
        subdir.mak
2915
        doc/texi2pod.pl
2916
        libavcodec/Makefile
2917
        libavdevice/Makefile
2918
        libavfilter/Makefile
2919
        libavformat/Makefile
2920
        libavutil/Makefile
2921
        libpostproc/Makefile
2922
        libswscale/Makefile
2923
    "
2924
    for dir in $DIRS ; do
2925
        mkdir -p $dir
2926
    done
2927
    for f in $FILES ; do
2928
        $ln_s "$source_path/$f" $f
2929
    done
2930
fi
2931

    
2932
enabled stripping || strip="echo skipping strip"
2933

    
2934
cat > config.mak <<EOF
2935
# Automatically generated by configure - do not modify!
2936
ifndef FFMPEG_CONFIG_MAK
2937
FFMPEG_CONFIG_MAK=1
2938
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2939
prefix=$prefix
2940
LIBDIR=\$(DESTDIR)$libdir
2941
SHLIBDIR=\$(DESTDIR)$shlibdir
2942
INCDIR=\$(DESTDIR)$incdir
2943
BINDIR=\$(DESTDIR)$bindir
2944
DATADIR=\$(DESTDIR)$datadir
2945
MANDIR=\$(DESTDIR)$mandir
2946
SRC_PATH="$source_path"
2947
SRC_PATH_BARE=$source_path
2948
BUILD_ROOT="$PWD"
2949
ARCH=$arch
2950
CC=$cc
2951
AS=$as
2952
LD=$ld
2953
DEPCC=$dep_cc
2954
YASM=$yasmexe
2955
AR=$ar
2956
RANLIB=$ranlib
2957
LN_S=$ln_s
2958
STRIP=$strip
2959
CPPFLAGS=$CPPFLAGS
2960
CFLAGS=$CFLAGS
2961
ASFLAGS=$ASFLAGS
2962
CC_O=$CC_O
2963
LDFLAGS=$LDFLAGS
2964
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2965
SHFLAGS=$SHFLAGS
2966
YASMFLAGS=$YASMFLAGS
2967
BUILDSUF=$build_suffix
2968
FULLNAME=$FULLNAME
2969
LIBPREF=$LIBPREF
2970
LIBSUF=$LIBSUF
2971
LIBNAME=$LIBNAME
2972
SLIBPREF=$SLIBPREF
2973
SLIBSUF=$SLIBSUF
2974
EXESUF=$EXESUF
2975
EXTRA_VERSION=$extra_version
2976
DEPFLAGS=$DEPFLAGS
2977
CCDEP=$CCDEP
2978
ASDEP=$ASDEP
2979
CC_DEPFLAGS=$CC_DEPFLAGS
2980
AS_DEPFLAGS=$AS_DEPFLAGS
2981
HOSTCC=$host_cc
2982
HOSTCFLAGS=$host_cflags
2983
HOSTEXESUF=$HOSTEXESUF
2984
HOSTLDFLAGS=$host_ldflags
2985
HOSTLIBS=$host_libs
2986
TARGET_EXEC=$target_exec
2987
TARGET_PATH=$target_path
2988
SDL_LIBS=$sdl_libs
2989
SDL_CFLAGS=$sdl_cflags
2990
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2991
EXTRALIBS=$extralibs
2992
EOF
2993

    
2994
get_version(){
2995
    name=$1
2996
    file=$source_path/$2
2997
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2998
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2999
    lcname=$(tolower $name)
3000
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3001
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3002
}
3003

    
3004
get_version LIBSWSCALE  libswscale/swscale.h
3005
get_version LIBPOSTPROC libpostproc/postprocess.h
3006
get_version LIBAVCODEC  libavcodec/avcodec.h
3007
get_version LIBAVDEVICE libavdevice/avdevice.h
3008
get_version LIBAVFORMAT libavformat/avformat.h
3009
get_version LIBAVUTIL   libavutil/avutil.h
3010
get_version LIBAVFILTER libavfilter/avfilter.h
3011

    
3012
enabled shared && cat >> config.mak <<EOF
3013
LIBTARGET=${LIBTARGET}
3014
SLIBNAME=${SLIBNAME}
3015
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3016
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3017
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3018
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3019
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3020
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3021
EOF
3022

    
3023
enabled asmalign_pot || align_shift="1 <<"
3024

    
3025
cat > $TMPH <<EOF
3026
/* Automatically generated by configure - do not modify! */
3027
#ifndef FFMPEG_CONFIG_H
3028
#define FFMPEG_CONFIG_H
3029
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3030
#define FFMPEG_LICENSE "$(c_escape $license)"
3031
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3032
#define CC_TYPE "$cc_type"
3033
#define CC_VERSION $cc_version
3034
#define restrict $_restrict
3035
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
3036
#define EXTERN_PREFIX "${extern_prefix}"
3037
#define EXTERN_ASM ${extern_prefix}
3038
EOF
3039

    
3040
test -n "$malloc_prefix" &&
3041
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3042

    
3043
if enabled small || disabled optimizations; then
3044
    echo "#define av_always_inline"  >> $TMPH
3045
fi
3046

    
3047
print_config ARCH_   $TMPH config.mak $ARCH_LIST
3048
print_config HAVE_   $TMPH config.mak $HAVE_LIST
3049
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3050
                                      $CONFIG_EXTRA      \
3051
                                      $DECODER_LIST      \
3052
                                      $ENCODER_LIST      \
3053
                                      $HWACCEL_LIST      \
3054
                                      $PARSER_LIST       \
3055
                                      $BSF_LIST          \
3056
                                      $DEMUXER_LIST      \
3057
                                      $MUXER_LIST        \
3058
                                      $FILTER_LIST       \
3059
                                      $PROTOCOL_LIST     \
3060
                                      $INDEV_LIST        \
3061
                                      $OUTDEV_LIST       \
3062

    
3063
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3064
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3065

    
3066
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3067
cp_if_changed $TMPH config.h
3068

    
3069
cat > $TMPH <<EOF
3070
/* Generated by ffconf */
3071
#ifndef AVUTIL_AVCONFIG_H
3072
#define AVUTIL_AVCONFIG_H
3073
EOF
3074

    
3075
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3076

    
3077
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3078

    
3079
cp_if_changed $TMPH libavutil/avconfig.h
3080

    
3081
# build pkg-config files
3082

    
3083
pkgconfig_generate(){
3084
name=$1
3085
shortname=${name#lib}${build_suffix}
3086
comment=$2
3087
version=$3
3088
libs=$4
3089
requires=$5
3090
cat <<EOF > $name/$name.pc
3091
prefix=$prefix
3092
exec_prefix=\${prefix}
3093
libdir=$libdir
3094
includedir=$incdir
3095

    
3096
Name: $name
3097
Description: $comment
3098
Version: $version
3099
Requires: $(enabled shared || echo $requires)
3100
Requires.private: $(enabled shared && echo $requires)
3101
Conflicts:
3102
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3103
Libs.private: $(enabled shared && echo $libs)
3104
Cflags: -I\${includedir}
3105
EOF
3106
cat <<EOF > $name/$name-uninstalled.pc
3107
prefix=
3108
exec_prefix=
3109
libdir=\${pcfiledir}
3110
includedir=${source_path}
3111

    
3112
Name: $name
3113
Description: $comment
3114
Version: $version
3115
Requires: $requires
3116
Conflicts:
3117
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3118
Cflags: -I\${includedir}
3119
EOF
3120
}
3121

    
3122
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3123
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3124
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3125
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3126
enabled avfilter &&
3127
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3128
enabled postproc &&
3129
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3130
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"