Statistics
| Branch: | Revision:

ffmpeg / configure @ 6f5a3d0a

History | View | Annotate | Download (87.8 KB)

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

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

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

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

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

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

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

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

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

    
74
Configuration options:
75
  --disable-static         do not build static libraries [no]
76
  --enable-shared          build shared libraries [no]
77
  --enable-gpl             allow use of GPL code, the resulting libs
78
                           and binaries will be under GPL [no]
79
  --enable-version3        upgrade (L)GPL to version 3 [no]
80
  --enable-nonfree         allow use of nonfree code, the resulting libs
81
                           and binaries will be unredistributable [no]
82
  --disable-doc            do not build documentation
83
  --disable-ffmpeg         disable ffmpeg build
84
  --disable-ffplay         disable ffplay build
85
  --disable-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
rtsp_muxer_deps="sdp_demuxer"
1355
rtsp_muxer_select="rtp_muxer"
1356
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1357
spdif_muxer_select="aac_parser"
1358
tg2_muxer_select="mov_muxer"
1359
tgp_muxer_select="mov_muxer"
1360
w64_demuxer_deps="wav_demuxer"
1361

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

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

    
1393
# filters
1394
movie_filter_deps="avfilter_lavf"
1395
avfilter_lavf_deps="avformat"
1396

    
1397
# libraries
1398
avdevice_deps="avcodec avformat"
1399
avformat_deps="avcodec"
1400

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

    
1409
doc_deps="texi2html"
1410

    
1411
# default parameters
1412

    
1413
logfile="config.err"
1414

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

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

    
1436
nm_opts='-g'
1437

    
1438
# machine
1439
arch_default=$(uname -m)
1440
cpu="generic"
1441

    
1442
# OS
1443
target_os_default=$(tolower $(uname -s))
1444
host_os=$target_os_default
1445

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

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

    
1482
CC_O='-o $@'
1483

    
1484
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1485
host_libs='-lm'
1486

    
1487
target_path='$(CURDIR)'
1488

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

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

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

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

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

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

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

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

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

    
1612
disabled logging && logfile=/dev/null
1613

    
1614
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1615
set >> $logfile
1616

    
1617
test -n "$cross_prefix" && enable cross_compile
1618

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

    
1624
set_default arch target_os
1625

    
1626
ar="${cross_prefix}${ar}"
1627
cc_default="${cross_prefix}${cc_default}"
1628
nm_default="${cross_prefix}${nm_default}"
1629
ranlib="${cross_prefix}${ranlib}"
1630
strip_default="${cross_prefix}${strip_default}"
1631

    
1632
sysinclude_default="${sysroot}/usr/include"
1633

    
1634
set_default cc nm strip sysinclude
1635
enabled cross_compile || host_cc_default=$cc
1636
set_default host_cc
1637

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

    
1644
EXESUF=$(exesuf $target_os)
1645
HOSTEXESUF=$(exesuf $host_os)
1646

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

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

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

    
1668
trap 'rm -f -- $TMPFILES' EXIT
1669
trap exit HUP INT TERM
1670

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

    
1679
unset -f mktemp
1680

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

    
1694
filter_cflags=echo
1695
filter_cppflags=echo
1696
filter_asflags=echo
1697

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

    
1832
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1833

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

    
1839
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1840
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1841

    
1842
add_cflags $extra_cflags
1843
add_asflags $extra_cflags
1844

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

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

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

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

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

    
1923
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1924
enable $arch
1925

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

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

    
1971
elif enabled x86; then
1972

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

    
1997
elif enabled sparc; then
1998

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

    
2005
elif enabled arm; then
2006

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

    
2016
elif enabled alpha; then
2017

    
2018
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2019

    
2020
elif enabled bfin; then
2021

    
2022
    cpuflags="-mcpu=$cpu"
2023

    
2024
elif enabled mips; then
2025

    
2026
    cpuflags="-march=$cpu"
2027

    
2028
elif enabled avr32; then
2029

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

    
2049
fi
2050

    
2051
add_cflags $cpuflags
2052
add_asflags $cpuflags
2053

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

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

    
2076
check_host_cflags -std=c99
2077

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

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

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

    
2265
set_default $PATHS_LIST
2266

    
2267
add_extralibs $osextralibs
2268

    
2269
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2270
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2271

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

    
2283
disabled static && LIBNAME=""
2284

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

    
2300

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

    
2305
die_license_disabled gpl libfaad2
2306
die_license_disabled gpl libx264
2307
die_license_disabled gpl libxvid
2308
die_license_disabled gpl postproc
2309
die_license_disabled gpl x11grab
2310

    
2311
die_license_disabled nonfree libfaac
2312

    
2313
die_license_disabled version3 libopencore_amrnb
2314
die_license_disabled version3 libopencore_amrwb
2315

    
2316
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2317

    
2318
check_deps $ARCH_EXT_LIST
2319

    
2320
disabled optimizations || check_cflags -fomit-frame-pointer
2321

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

    
2329
enabled pic && enable_pic
2330

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

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

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

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

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

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

    
2361
if enabled alpha; then
2362

    
2363
    check_cflags -mieee
2364

    
2365
elif enabled arm; then
2366

    
2367
    check_cflags -marm
2368

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

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

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

    
2384
    enabled_all armv6t2 shared !pic && enable_pic
2385

    
2386
elif enabled ia64; then
2387

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

    
2391
elif enabled mips; then
2392

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

    
2396
elif enabled ppc; then
2397

    
2398
    enable local_aligned_8 local_aligned_16
2399

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

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

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

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

    
2427
elif enabled sparc; then
2428

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

    
2432
elif enabled x86; then
2433

    
2434
    enable local_aligned_8 local_aligned_16
2435

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

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

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

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

    
2468
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2469

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

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

    
2485
fi
2486

    
2487
if check_func dlopen; then
2488
    ldl=
2489
elif check_func dlopen -ldl; then
2490
    ldl=-ldl
2491
fi
2492

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

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

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

    
2524
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2525

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

    
2531
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2532
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2533

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

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

    
2560
check_lib math.h sin -lm
2561
check_lib va/va.h vaInitialize -lva
2562

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

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

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

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

    
2617
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2618

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

    
2645
check_header linux/videodev.h
2646
check_header linux/videodev2.h
2647
check_header sys/videoio.h
2648

    
2649
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2650

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

    
2660
check_header sys/soundcard.h
2661
check_header soundcard.h
2662

    
2663
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2664

    
2665
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2666

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

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

    
2682
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2683

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

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

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

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

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

    
2752
if enabled gprof; then
2753
    add_cflags  -p
2754
    add_ldflags -p
2755
fi
2756

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

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

    
2771
enabled_any $THREADS_LIST      && enable threads
2772

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

    
2788
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2789

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

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

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

    
2892
echo "License: $license"
2893

    
2894
echo "Creating config.mak and config.h..."
2895

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

    
2934
enabled stripping || strip="echo skipping strip"
2935

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

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

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

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

    
3025
enabled asmalign_pot || align_shift="1 <<"
3026

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

    
3042
test -n "$malloc_prefix" &&
3043
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3044

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

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

    
3065
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3066
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3067

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

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

    
3077
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3078

    
3079
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3080

    
3081
cp_if_changed $TMPH libavutil/avconfig.h
3082

    
3083
# build pkg-config files
3084

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

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

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

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