Statistics
| Branch: | Revision:

ffmpeg / configure @ 9104cd51

History | View | Annotate | Download (85.9 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

    
239
NOTE: Object files are built at the place where configure is launched.
240
EOF
241
  exit 0
242
}
243

    
244
log(){
245
    echo "$@" >> $logfile
246
}
247

    
248
log_file(){
249
    log BEGIN $1
250
    pr -n -t $1 >> $logfile
251
    log END $1
252
}
253

    
254
echolog(){
255
    log "$@"
256
    echo "$@"
257
}
258

    
259
die(){
260
    echolog "$@"
261
    cat <<EOF
262

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

    
281
# Avoid locale weirdness, besides we really just want to translate ASCII.
282
toupper(){
283
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
284
}
285

    
286
tolower(){
287
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
288
}
289

    
290
c_escape(){
291
    echo "$*" | sed 's/["\\]/\\\0/g'
292
}
293

    
294
sh_quote(){
295
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
296
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
297
    echo "$v"
298
}
299

    
300
filter(){
301
    pat=$1
302
    shift
303
    for v; do
304
        eval "case $v in $pat) echo $v ;; esac"
305
    done
306
}
307

    
308
set_all(){
309
    value=$1
310
    shift
311
    for var in $*; do
312
        eval $var=$value
313
    done
314
}
315

    
316
set_weak(){
317
    value=$1
318
    shift
319
    for var; do
320
        eval : \${$var:=$value}
321
    done
322
}
323

    
324
pushvar(){
325
    for var in $*; do
326
        eval level=\${${var}_level:=0}
327
        eval ${var}_${level}="\$$var"
328
        eval ${var}_level=$(($level+1))
329
    done
330
}
331

    
332
popvar(){
333
    for var in $*; do
334
        eval level=\${${var}_level:-0}
335
        test $level = 0 && continue
336
        eval level=$(($level-1))
337
        eval $var="\${${var}_${level}}"
338
        eval ${var}_level=$level
339
        eval unset ${var}_${level}
340
    done
341
}
342

    
343
enable(){
344
    set_all yes $*
345
}
346

    
347
disable(){
348
    set_all no $*
349
}
350

    
351
enable_weak(){
352
    set_weak yes $*
353
}
354

    
355
disable_weak(){
356
    set_weak no $*
357
}
358

    
359
enable_safe(){
360
    for var; do
361
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
362
    done
363
}
364

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

    
371
do_enable_deep(){
372
    for var; do
373
        enabled $var && continue
374
        eval sel="\$${var}_select"
375
        eval sgs="\$${var}_suggest"
376
        pushvar var sgs
377
        enable_deep $sel
378
        popvar sgs
379
        enable_deep_weak $sgs
380
        popvar var
381
    done
382
}
383

    
384
enable_deep(){
385
    do_enable_deep $*
386
    enable $*
387
}
388

    
389
enable_deep_weak(){
390
    do_enable_deep $*
391
    enable_weak $*
392
}
393

    
394
enabled(){
395
    test "${1#!}" = "$1" && op== || op=!=
396
    eval test "x\$${1#!}" $op "xyes"
397
}
398

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

    
404
enabled_all(){
405
    for opt; do
406
        enabled $opt || return 1
407
    done
408
}
409

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

    
416
enabled_any(){
417
    for opt; do
418
        enabled $opt && return 0
419
    done
420
}
421

    
422
disabled_any(){
423
    for opt; do
424
        disabled $opt && return 0
425
    done
426
    return 1
427
}
428

    
429
set_default(){
430
    for opt; do
431
        eval : \${$opt:=\$${opt}_default}
432
    done
433
}
434

    
435
is_in(){
436
    value=$1
437
    shift
438
    for var in $*; do
439
        [ $var = $value ] && return 0
440
    done
441
    return 1
442
}
443

    
444
check_deps(){
445
    for cfg; do
446
        cfg="${cfg#!}"
447
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
448
        disabled ${cfg}_checking && continue
449
        enable ${cfg}_checking
450

    
451
        eval dep_all="\$${cfg}_deps"
452
        eval dep_any="\$${cfg}_deps_any"
453
        eval dep_sel="\$${cfg}_select"
454
        eval dep_sgs="\$${cfg}_suggest"
455
        eval dep_ifa="\$${cfg}_if"
456
        eval dep_ifn="\$${cfg}_if_any"
457

    
458
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
459
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
460
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
461

    
462
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
463
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
464
        enabled_all  $dep_all || disable $cfg
465
        enabled_any  $dep_any || disable $cfg
466
        disabled_any $dep_sel && disable $cfg
467

    
468
        if enabled $cfg; then
469
            eval dep_extralibs="\$${cfg}_extralibs"
470
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
471
            enable_deep $dep_sel
472
            enable_deep_weak $dep_sgs
473
        fi
474

    
475
        disable ${cfg}_checking
476
    done
477
}
478

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

    
496
flags_saved(){
497
    (: ${SAVE_CFLAGS?}) 2> /dev/null
498
}
499

    
500
save_flags(){
501
    flags_saved && return
502
    SAVE_CFLAGS="$CFLAGS"
503
    SAVE_LDFLAGS="$LDFLAGS"
504
    SAVE_extralibs="$extralibs"
505
}
506

    
507
restore_flags(){
508
    flags_saved || return
509
    CFLAGS="$SAVE_CFLAGS"
510
    LDFLAGS="$SAVE_LDFLAGS"
511
    extralibs="$SAVE_extralibs"
512
    unset SAVE_CFLAGS
513
    unset SAVE_LDFLAGS
514
    unset SAVE_extralibs
515
}
516

    
517
temp_cflags(){
518
    save_flags
519
    CFLAGS="$CFLAGS $*"
520
}
521

    
522
temp_ldflags(){
523
    save_flags
524
    LDFLAGS="$LDFLAGS $*"
525
}
526

    
527
temp_extralibs(){
528
    save_flags
529
    extralibs="$extralibs $*"
530
}
531

    
532
append(){
533
    var=$1
534
    shift
535
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
536
    eval "$var=\"\$$var $*\""
537
}
538

    
539
add_cppflags(){
540
    append CPPFLAGS $($filter_cppflags "$@")
541
}
542

    
543
add_cflags(){
544
    append CFLAGS $($filter_cflags "$@")
545
}
546

    
547
add_asflags(){
548
    append ASFLAGS $($filter_asflags "$@")
549
}
550

    
551
add_ldflags(){
552
    append LDFLAGS "$@"
553
}
554

    
555
add_extralibs(){
556
    append extralibs "$@"
557
}
558

    
559
check_cmd(){
560
    log "$@"
561
    "$@" >> $logfile 2>&1
562
}
563

    
564
check_cc(){
565
    log check_cc "$@"
566
    cat > $TMPC
567
    log_file $TMPC
568
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
569
}
570

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

    
578
check_as(){
579
    log check_as "$@"
580
    cat > $TMPC
581
    log_file $TMPC
582
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
583
}
584

    
585
check_asm(){
586
    log check_asm "$@"
587
    name="$1"
588
    code="$2"
589
    shift 2
590
    disable $name
591
    check_as "$@" <<EOF && enable $name
592
void foo(void){ __asm__ volatile($code); }
593
EOF
594
}
595

    
596
check_yasm(){
597
    log check_yasm "$@"
598
    echo "$1" > $TMPS
599
    log_file $TMPS
600
    shift 1
601
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
602
}
603

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

    
615
check_cppflags(){
616
    log check_cppflags "$@"
617
    set -- $($filter_cppflags "$@")
618
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
619
int x;
620
EOF
621
}
622

    
623
check_cflags(){
624
    log check_cflags "$@"
625
    set -- $($filter_cflags "$@")
626
    check_cc "$@" <<EOF && append CFLAGS "$@"
627
int x;
628
EOF
629
}
630

    
631
test_ldflags(){
632
    log test_ldflags "$@"
633
    check_ld "$@" <<EOF
634
int main(void){ return 0; }
635
EOF
636
}
637

    
638
check_ldflags(){
639
    log check_ldflags "$@"
640
    test_ldflags "$@" && add_ldflags "$@"
641
}
642

    
643
check_header(){
644
    log check_header "$@"
645
    header=$1
646
    shift
647
    disable_safe $header
648
    check_cpp "$@" <<EOF && enable_safe $header
649
#include <$header>
650
int x;
651
EOF
652
}
653

    
654
check_func(){
655
    log check_func "$@"
656
    func=$1
657
    shift
658
    disable $func
659
    check_ld "$@" <<EOF && enable $func
660
extern int $func();
661
int main(void){ $func(); }
662
EOF
663
}
664

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

    
684
check_cpp_condition(){
685
    log check_cpp_condition "$@"
686
    header=$1
687
    condition=$2
688
    shift 2
689
    check_cpp $($filter_cppflags "$@") <<EOF
690
#include <$header>
691
#if !($condition)
692
#error "unsatisfied condition: $condition"
693
#endif
694
EOF
695
}
696

    
697
check_lib(){
698
    log check_lib "$@"
699
    header="$1"
700
    func="$2"
701
    shift 2
702
    temp_extralibs "$@"
703
    check_header $header && check_func $func && add_extralibs "$@"
704
    err=$?
705
    restore_flags
706
    return $err
707
}
708

    
709
check_lib2(){
710
    log check_lib2 "$@"
711
    headers="$1"
712
    func="$2"
713
    shift 2
714
    check_func_headers "$headers" $func "$@" && add_extralibs "$@"
715
}
716

    
717
check_exec(){
718
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
719
}
720

    
721
check_exec_crash(){
722
    code=$(cat)
723

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

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

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

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

    
782
require(){
783
    name="$1"
784
    header="$2"
785
    func="$3"
786
    shift 3
787
    check_lib $header $func "$@" || die "ERROR: $name not found"
788
}
789

    
790
require2(){
791
    name="$1"
792
    headers="$2"
793
    func="$3"
794
    shift 3
795
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
796
}
797

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

    
815
check_host_cc(){
816
    log check_host_cc "$@"
817
    cat > $TMPC
818
    log_file $TMPC
819
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
820
}
821

    
822
check_host_cflags(){
823
    log check_host_cflags "$@"
824
    check_host_cc "$@" <<EOF && append host_cflags "$@"
825
int x;
826
EOF
827
}
828

    
829
apply(){
830
    file=$1
831
    shift
832
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
833
}
834

    
835
cp_if_changed(){
836
    cmp -s "$1" "$2" &&
837
        echo "$2 is unchanged" ||
838
        cp -f "$1" "$2"
839
}
840

    
841
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
842
# system-dependent things.
843

    
844
COMPONENT_LIST="
845
    bsfs
846
    decoders
847
    demuxers
848
    encoders
849
    filters
850
    hwaccels
851
    indevs
852
    muxers
853
    outdevs
854
    parsers
855
    protocols
856
"
857

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

    
919
THREADS_LIST='
920
    beosthreads
921
    os2threads
922
    pthreads
923
    w32threads
924
'
925

    
926
ARCH_LIST='
927
    alpha
928
    arm
929
    avr32
930
    avr32_ap
931
    avr32_uc
932
    bfin
933
    ia64
934
    m68k
935
    mips
936
    mips64
937
    parisc
938
    ppc
939
    ppc64
940
    s390
941
    sh4
942
    sparc
943
    sparc64
944
    x86
945
    x86_32
946
    x86_64
947
'
948

    
949
ARCH_EXT_LIST='
950
    altivec
951
    amd3dnow
952
    amd3dnowext
953
    armv5te
954
    armv6
955
    armv6t2
956
    armvfp
957
    iwmmxt
958
    mmi
959
    mmx
960
    mmx2
961
    neon
962
    ppc4xx
963
    sse
964
    ssse3
965
    vis
966
'
967

    
968
HAVE_LIST_PUB='
969
    bigendian
970
'
971

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

    
1055
# options emitted with CONFIG_ prefix but not available on command line
1056
CONFIG_EXTRA="
1057
    gplv3
1058
    lgplv3
1059
"
1060

    
1061
CMDLINE_SELECT="
1062
    $ARCH_EXT_LIST
1063
    $CONFIG_LIST
1064
    $THREADS_LIST
1065
    asm
1066
    cross_compile
1067
    debug
1068
    extra_warnings
1069
    logging
1070
    optimizations
1071
    stripping
1072
    yasm
1073
"
1074

    
1075
PATHS_LIST='
1076
    bindir
1077
    datadir
1078
    incdir
1079
    libdir
1080
    mandir
1081
    prefix
1082
    shlibdir
1083
'
1084

    
1085
CMDLINE_SET="
1086
    $PATHS_LIST
1087
    arch
1088
    as
1089
    build_suffix
1090
    cc
1091
    cpu
1092
    cross_prefix
1093
    dep_cc
1094
    extra_version
1095
    host_cc
1096
    host_cflags
1097
    host_ldflags
1098
    host_libs
1099
    host_os
1100
    ld
1101
    logfile
1102
    nm
1103
    source_path
1104
    sysinclude
1105
    sysroot
1106
    target_exec
1107
    target_os
1108
    target_path
1109
"
1110

    
1111
CMDLINE_APPEND="
1112
    extra_cflags
1113
"
1114

    
1115
# code dependency declarations
1116

    
1117
# architecture extensions
1118

    
1119
armv5te_deps="arm"
1120
armv6_deps="arm"
1121
armv6t2_deps="arm"
1122
armvfp_deps="arm"
1123
iwmmxt_deps="arm"
1124
neon_deps="arm"
1125

    
1126
mmi_deps="mips"
1127

    
1128
altivec_deps="ppc"
1129
ppc4xx_deps="ppc"
1130

    
1131
vis_deps="sparc"
1132

    
1133
x86_64_select="cmov fast_cmov"
1134
amd3dnow_deps="mmx"
1135
amd3dnowext_deps="amd3dnow"
1136
mmx_deps="x86"
1137
mmx2_deps="mmx"
1138
sse_deps="mmx"
1139
ssse3_deps="sse"
1140

    
1141
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1142
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1143
fast_unaligned_if_any="armv6 ppc x86"
1144

    
1145
need_memalign="altivec neon sse"
1146
inline_asm_deps="!tms470"
1147

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

    
1264
# parsers
1265
h264_parser_select="golomb"
1266

    
1267
# bitstream_filters
1268
aac_adtstoasc_bsf_select="aac_parser"
1269

    
1270
# external libraries
1271
libdirac_decoder_deps="libdirac !libschroedinger"
1272
libdirac_encoder_deps="libdirac"
1273
libfaac_encoder_deps="libfaac"
1274
libfaad_decoder_deps="libfaad"
1275
libfaadbin_decoder_extralibs='$ldl'
1276
libgsm_decoder_deps="libgsm"
1277
libgsm_encoder_deps="libgsm"
1278
libgsm_ms_decoder_deps="libgsm"
1279
libgsm_ms_encoder_deps="libgsm"
1280
libmp3lame_encoder_deps="libmp3lame"
1281
libopencore_amrnb_decoder_deps="libopencore_amrnb"
1282
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1283
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1284
libopenjpeg_decoder_deps="libopenjpeg"
1285
libschroedinger_decoder_deps="libschroedinger"
1286
libschroedinger_encoder_deps="libschroedinger"
1287
libspeex_decoder_deps="libspeex"
1288
libtheora_encoder_deps="libtheora"
1289
libvorbis_encoder_deps="libvorbis"
1290
libx264_encoder_deps="libx264"
1291
libxvid_encoder_deps="libxvid"
1292

    
1293
# demuxers / muxers
1294
ac3_demuxer_deps="ac3_parser"
1295
asf_stream_muxer_select="asf_muxer"
1296
avisynth_demuxer_deps="avisynth"
1297
dirac_demuxer_deps="dirac_parser"
1298
eac3_demuxer_select="ac3_parser"
1299
ipod_muxer_select="mov_muxer"
1300
libnut_demuxer_deps="libnut"
1301
libnut_muxer_deps="libnut"
1302
matroska_audio_muxer_select="matroska_muxer"
1303
matroska_demuxer_suggest="zlib bzlib"
1304
mov_demuxer_suggest="zlib"
1305
mp3_demuxer_deps="mpegaudio_parser"
1306
mp4_muxer_select="mov_muxer"
1307
mpegtsraw_demuxer_select="mpegts_demuxer"
1308
mxf_d10_muxer_select="mxf_muxer"
1309
ogg_demuxer_select="golomb"
1310
psp_muxer_select="mov_muxer"
1311
rtsp_demuxer_deps="sdp_demuxer"
1312
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1313
spdif_muxer_select="aac_parser"
1314
tg2_muxer_select="mov_muxer"
1315
tgp_muxer_select="mov_muxer"
1316
w64_demuxer_deps="wav_demuxer"
1317

    
1318
# indevs / outdevs
1319
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1320
alsa_indev_extralibs="-lasound"
1321
alsa_outdev_deps="alsa_asoundlib_h"
1322
alsa_outdev_extralibs="-lasound"
1323
audio_beos_indev_deps="audio_beos"
1324
audio_beos_indev_extralibs="-lmedia -lbe"
1325
audio_beos_outdev_deps="audio_beos"
1326
audio_beos_outdev_extralibs="-lmedia -lbe"
1327
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1328
dv1394_indev_deps="dv1394 dv_demuxer"
1329
jack_indev_deps="jack_jack_h"
1330
jack_indev_extralibs="-ljack"
1331
libdc1394_indev_deps="libdc1394"
1332
oss_indev_deps_any="soundcard_h sys_soundcard_h"
1333
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1334
v4l_indev_deps="linux_videodev_h"
1335
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1336
vfwcap_indev_deps="capCreateCaptureWindow"
1337
vfwcap_indev_extralibs="-lavicap32"
1338
x11_grab_device_indev_deps="x11grab XShmCreateImage"
1339
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1340

    
1341
# protocols
1342
gopher_protocol_deps="network"
1343
http_protocol_deps="network"
1344
rtmp_protocol_deps="tcp_protocol"
1345
rtp_protocol_deps="udp_protocol"
1346
tcp_protocol_deps="network"
1347
udp_protocol_deps="network"
1348

    
1349
# filters
1350
movie_filter_deps="avfilter_lavf"
1351

    
1352
# programs
1353
ffplay_deps="sdl"
1354
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1355
ffserver_extralibs='$ldl'
1356

    
1357
doc_deps="texi2html"
1358

    
1359
# default parameters
1360

    
1361
logfile="config.err"
1362

    
1363
# installation paths
1364
prefix_default="/usr/local"
1365
bindir_default='${prefix}/bin'
1366
datadir_default='${prefix}/share/ffmpeg'
1367
incdir_default='${prefix}/include'
1368
libdir_default='${prefix}/lib'
1369
mandir_default='${prefix}/share/man'
1370
shlibdir_default="$libdir_default"
1371

    
1372
# toolchain
1373
ar="ar"
1374
cc_default="gcc"
1375
cc_version=\"unknown\"
1376
host_cc_default="gcc"
1377
ln_s="ln -sf"
1378
nm_default="nm"
1379
objformat="elf"
1380
ranlib="ranlib"
1381
strip="strip"
1382
yasmexe="yasm"
1383

    
1384
nm_opts='-g'
1385

    
1386
# machine
1387
arch=$(uname -m)
1388
cpu="generic"
1389

    
1390
# OS
1391
target_os=$(tolower $(uname -s))
1392
host_os=$target_os
1393

    
1394
# configurable options
1395
enable asm
1396
enable debug
1397
enable doc
1398
enable fastdiv
1399
enable ffmpeg
1400
enable ffplay
1401
enable ffserver
1402
enable mpegaudio_hp
1403
enable network
1404
enable optimizations
1405
enable protocols
1406
enable static
1407
enable stripping
1408
enable swscale_alpha
1409

    
1410
# build settings
1411
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1412
FFSERVERLDFLAGS=-Wl,-E
1413
LIBPREF="lib"
1414
LIBSUF=".a"
1415
FULLNAME='$(NAME)$(BUILDSUF)'
1416
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1417
SLIBPREF="lib"
1418
SLIBSUF=".so"
1419
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1420
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1421
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1422
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1423

    
1424
CC_O='-o $@'
1425

    
1426
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1427
host_libs='-lm'
1428

    
1429
target_path='.'
1430

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

    
1436
# find source path
1437
source_path="$(dirname "$0")"
1438
enable source_path_used
1439
if test -f configure; then
1440
    source_path="$(pwd)"
1441
    disable source_path_used
1442
else
1443
    source_path="$(cd "$source_path"; pwd)"
1444
    echo "$source_path" | grep -q '[[:blank:]]' &&
1445
        die "Out of tree builds are impossible with whitespace in source path."
1446
    test -e "$source_path/config.h" &&
1447
        die "Out of tree builds are impossible with config.h in source dir."
1448
fi
1449

    
1450
for v in "$@"; do
1451
    r=${v#*=}
1452
    l=${v%"$r"}
1453
    r=$(sh_quote "$r")
1454
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1455
done
1456

    
1457
find_things(){
1458
    thing=$1
1459
    pattern=$2
1460
    file=$source_path/$3
1461
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1462
}
1463

    
1464
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1465
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1466
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1467
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1468
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1469
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1470
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1471
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1472
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1473
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1474
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1475

    
1476
enable $ARCH_EXT_LIST \
1477
       $DECODER_LIST \
1478
       $ENCODER_LIST \
1479
       $HWACCEL_LIST \
1480
       $PARSER_LIST \
1481
       $BSF_LIST \
1482
       $DEMUXER_LIST \
1483
       $MUXER_LIST \
1484
       $FILTER_LIST \
1485
       $PROTOCOL_LIST \
1486
       $INDEV_LIST \
1487
       $OUTDEV_LIST \
1488

    
1489
die_unknown(){
1490
    echo "Unknown option \"$1\"."
1491
    echo "See $0 --help for available options."
1492
    exit 1
1493
}
1494

    
1495
show_list() {
1496
    suffix=_$1
1497
    shift
1498
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1499
    exit 0
1500
}
1501

    
1502
for opt do
1503
    optval="${opt#*=}"
1504
    case "$opt" in
1505
    --extra-ldflags=*) add_ldflags $optval
1506
    ;;
1507
    --extra-libs=*) add_extralibs $optval
1508
    ;;
1509
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1510
    ;;
1511
    --enable-debug=*) debuglevel="$optval"
1512
    ;;
1513
    --enable-*=*|--disable-*=*)
1514
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1515
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1516
    eval list=\$$(toupper $thing)_LIST
1517
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1518
    $action $(filter "$name" $list)
1519
    ;;
1520
    --enable-?*|--disable-?*)
1521
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1522
    if is_in $option $COMPONENT_LIST; then
1523
        test $action = disable && action=unset
1524
        eval $action \$$(toupper ${option%s})_LIST
1525
    elif is_in $option $CMDLINE_SELECT; then
1526
        $action $option
1527
    else
1528
        die_unknown $opt
1529
    fi
1530
    ;;
1531
    --list-*)
1532
        NAME="${opt#--list-}"
1533
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1534
        NAME=${NAME%s}
1535
        eval show_list $NAME \$$(toupper $NAME)_LIST
1536
    ;;
1537
    --help|-h) show_help
1538
    ;;
1539
    *)
1540
    optname="${opt%%=*}"
1541
    optname="${optname#--}"
1542
    optname=$(echo "$optname" | sed 's/-/_/g')
1543
    if is_in $optname $CMDLINE_SET; then
1544
        eval $optname='$optval'
1545
    elif is_in $optname $CMDLINE_APPEND; then
1546
        append $optname "$optval"
1547
    else
1548
         die_unknown $opt
1549
    fi
1550
    ;;
1551
    esac
1552
done
1553

    
1554
disabled logging && logfile=/dev/null
1555

    
1556
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1557
set >> $logfile
1558

    
1559
test -n "$cross_prefix" && enable cross_compile
1560

    
1561
ar="${cross_prefix}${ar}"
1562
cc_default="${cross_prefix}${cc_default}"
1563
nm_default="${cross_prefix}${nm_default}"
1564
ranlib="${cross_prefix}${ranlib}"
1565
strip="${cross_prefix}${strip}"
1566

    
1567
sysinclude_default="${sysroot}/usr/include"
1568

    
1569
set_default cc nm sysinclude
1570
enabled cross_compile || host_cc_default=$cc
1571
set_default host_cc
1572

    
1573
exesuf() {
1574
    case $1 in
1575
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1576
    esac
1577
}
1578

    
1579
EXESUF=$(exesuf $target_os)
1580
HOSTEXESUF=$(exesuf $host_os)
1581

    
1582
# set temporary file name
1583
: ${TMPDIR:=$TEMPDIR}
1584
: ${TMPDIR:=$TMP}
1585
: ${TMPDIR:=/tmp}
1586

    
1587
if ! check_cmd type mktemp; then
1588
    # simple replacement for missing mktemp
1589
    # NOT SAFE FOR GENERAL USE
1590
    mktemp(){
1591
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1592
    }
1593
fi
1594

    
1595
tmpfile(){
1596
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1597
        (set -C; exec > $tmp) 2>/dev/null ||
1598
        die "Unable to create temporary file in $TMPDIR."
1599
    append TMPFILES $tmp
1600
    eval $1=$tmp
1601
}
1602

    
1603
trap 'rm -f -- $TMPFILES' EXIT
1604
trap exit HUP INT TERM
1605

    
1606
tmpfile TMPC  .c
1607
tmpfile TMPE  $EXESUF
1608
tmpfile TMPH  .h
1609
tmpfile TMPO  .o
1610
tmpfile TMPS  .S
1611
tmpfile TMPV  .ver
1612
tmpfile TMPSH .sh
1613

    
1614
unset -f mktemp
1615

    
1616
# make sure we can execute files in $TMPDIR
1617
cat > $TMPSH 2>> $logfile <<EOF
1618
#! /bin/sh
1619
EOF
1620
chmod +x $TMPSH >> $logfile 2>&1
1621
if ! $TMPSH >> $logfile 2>&1; then
1622
    cat <<EOF
1623
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1624
variable to another directory and make sure that it is not mounted noexec.
1625
EOF
1626
    die "Sanity test failed."
1627
fi
1628

    
1629
filter_cflags=echo
1630
filter_cppflags=echo
1631
filter_asflags=echo
1632

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

    
1753
test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1754

    
1755
: ${as_default:=$cc}
1756
: ${dep_cc_default:=$cc}
1757
: ${ld_default:=$cc}
1758
set_default as dep_cc ld
1759

    
1760
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1761
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1762

    
1763
add_cflags $extra_cflags
1764
add_asflags $extra_cflags
1765

    
1766
if test -n "$sysroot"; then
1767
    case "$cc_type" in
1768
        gcc)
1769
            add_cppflags --sysroot="$sysroot"
1770
            add_ldflags --sysroot="$sysroot"
1771
        ;;
1772
        tms470)
1773
            add_cppflags -I"$sysinclude"
1774
            add_ldflags  --sysroot="$sysroot"
1775
        ;;
1776
        clang)
1777
            add_cppflags -isysroot="$sysroot"
1778
            add_ldflags -isysroot="$sysroot"
1779
        ;;
1780
    esac
1781
fi
1782

    
1783
if test "$cpu" = host; then
1784
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1785

    
1786
    case "$cc_type" in
1787
        gcc)
1788
            check_native(){
1789
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1790
                sed -n "/$1=/{
1791
                            s/.*$1=\\([^ ]*\\).*/\\1/
1792
                            p
1793
                            q
1794
                        }" $TMPE
1795
            }
1796
            cpu=$(check_native -march || check_native -mcpu)
1797
        ;;
1798
    esac
1799

    
1800
    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1801
fi
1802

    
1803
# Deal with common $arch aliases
1804
case "$arch" in
1805
    arm*)
1806
        arch="arm"
1807
    ;;
1808
    mips|mipsel|IP*)
1809
        arch="mips"
1810
    ;;
1811
    mips64)
1812
        arch="mips"
1813
        subarch="mips64"
1814
    ;;
1815
    parisc|hppa)
1816
        arch="parisc"
1817
    ;;
1818
    parisc64|hppa64)
1819
        arch="parisc"
1820
        subarch="parisc64"
1821
    ;;
1822
    "Power Macintosh"|ppc|powerpc)
1823
        arch="ppc"
1824
    ;;
1825
    ppc64)
1826
        arch="ppc"
1827
        subarch="ppc64"
1828
    ;;
1829
    s390|s390x)
1830
        arch="s390"
1831
    ;;
1832
    sh4|sh)
1833
        arch="sh4"
1834
    ;;
1835
    sun4u|sparc64)
1836
        arch="sparc"
1837
        subarch="sparc64"
1838
    ;;
1839
    i[3-6]86|i86pc|BePC|x86_64|amd64)
1840
        arch="x86"
1841
    ;;
1842
esac
1843

    
1844
is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1845
enable $arch
1846

    
1847
# Add processor-specific flags
1848
if test "$cpu" = generic; then
1849
    : do nothing
1850
elif enabled ppc; then
1851

    
1852
    case $cpu in
1853
        601|ppc601|PowerPC601)
1854
            cpuflags="-mcpu=601"
1855
        ;;
1856
        603*|ppc603*|PowerPC603*)
1857
            cpuflags="-mcpu=603"
1858
        ;;
1859
        604*|ppc604*|PowerPC604*)
1860
            cpuflags="-mcpu=604"
1861
        ;;
1862
        G3|g3|75*|ppc75*|PowerPC75*)
1863
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1864
        ;;
1865
        G4|g4|745*|ppc745*|PowerPC745*)
1866
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1867
        ;;
1868
        74*|ppc74*|PowerPC74*)
1869
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1870
        ;;
1871
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1872
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1873
        ;;
1874
        Cell|CELL|cell)
1875
            cpuflags="-mcpu=cell"
1876
            enable ldbrx
1877
        ;;
1878
    esac
1879

    
1880
elif enabled x86; then
1881

    
1882
    case $cpu in
1883
        i[345]86|pentium)
1884
            cpuflags="-march=$cpu"
1885
            disable mmx
1886
        ;;
1887
        # targets that do NOT support conditional mov (cmov)
1888
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1889
            cpuflags="-march=$cpu"
1890
            disable cmov
1891
        ;;
1892
        # targets that do support conditional mov (cmov)
1893
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1894
            cpuflags="-march=$cpu"
1895
            enable cmov
1896
            enable fast_cmov
1897
        ;;
1898
        # targets that do support conditional mov but on which it's slow
1899
        pentium4|pentium4m|prescott|nocona)
1900
            cpuflags="-march=$cpu"
1901
            enable cmov
1902
            disable fast_cmov
1903
        ;;
1904
    esac
1905

    
1906
elif enabled sparc; then
1907

    
1908
    case $cpu in
1909
        sparc64)
1910
            cpuflags="-mcpu=v9"
1911
        ;;
1912
    esac
1913

    
1914
elif enabled arm; then
1915

    
1916
    case $cpu in
1917
        armv*)
1918
            cpuflags="-march=$cpu"
1919
        ;;
1920
        *)
1921
            cpuflags="-mcpu=$cpu"
1922
        ;;
1923
    esac
1924

    
1925
elif enabled alpha; then
1926

    
1927
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1928

    
1929
elif enabled bfin; then
1930

    
1931
    cpuflags="-mcpu=$cpu"
1932

    
1933
elif enabled mips; then
1934

    
1935
    cpuflags="-march=$cpu"
1936

    
1937
elif enabled avr32; then
1938

    
1939
    case $cpu in
1940
        ap7[02]0[0-2])
1941
            subarch="avr32_ap"
1942
            cpuflags="-mpart=$cpu"
1943
        ;;
1944
        ap)
1945
            subarch="avr32_ap"
1946
            cpuflags="-march=$cpu"
1947
        ;;
1948
        uc3[ab]*)
1949
            subarch="avr32_uc"
1950
            cpuflags="-mcpu=$cpu"
1951
        ;;
1952
        uc)
1953
            subarch="avr32_uc"
1954
            cpuflags="-march=$cpu"
1955
        ;;
1956
    esac
1957

    
1958
fi
1959

    
1960
add_cflags $cpuflags
1961
add_asflags $cpuflags
1962

    
1963
# compiler sanity check
1964
check_exec <<EOF
1965
int main(void){ return 0; }
1966
EOF
1967
if test "$?" != 0; then
1968
    echo "$cc is unable to create an executable file."
1969
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1970
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1971
        echo "Only do this if you know what cross compiling means."
1972
    fi
1973
    die "C compiler test failed."
1974
fi
1975

    
1976
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1977
check_cflags -std=c99
1978
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1979
#include <stdlib.h>
1980
EOF
1981
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1982
#include <stdlib.h>
1983
EOF
1984

    
1985
check_host_cflags -std=c99
1986

    
1987
case "$arch" in
1988
    alpha|ia64|mips|parisc|sparc)
1989
        spic=$shared
1990
    ;;
1991
    x86)
1992
        subarch="x86_32"
1993
        check_cc <<EOF && subarch="x86_64"
1994
        int test[(int)sizeof(char*) - 7];
1995
EOF
1996
        if test "$subarch" = "x86_64"; then
1997
            spic=$shared
1998
        fi
1999
    ;;
2000
esac
2001

    
2002
enable $subarch
2003
enabled spic && enable pic
2004
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2005

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

    
2173
    *)
2174
        die "Unknown OS '$target_os'."
2175
        ;;
2176
esac
2177

    
2178
set_default $PATHS_LIST
2179

    
2180
add_extralibs $osextralibs
2181

    
2182
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2183
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2184

    
2185
# we need to build at least one lib type
2186
if ! enabled_any static shared; then
2187
    cat <<EOF
2188
At least one library type must be built.
2189
Specify --enable-static to build the static libraries or --enable-shared to
2190
build the shared libraries as well. To only build the shared libraries specify
2191
--disable-static in addition to --enable-shared.
2192
EOF
2193
    exit 1;
2194
fi
2195

    
2196
disabled static && LIBNAME=""
2197

    
2198
if enabled_any libfaad libfaadbin ; then
2199
    if check_header faad.h; then
2200
        check_cc <<EOF
2201
#include <faad.h>
2202
#ifndef FAAD2_VERSION
2203
ok faad1
2204
#endif
2205
int main(void) { return 0; }
2206
EOF
2207
        test $? = 0 && enable libfaad2
2208
    else
2209
        die "FAAD test failed."
2210
    fi
2211
fi
2212

    
2213

    
2214
die_license_disabled() {
2215
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2216
}
2217

    
2218
die_license_disabled gpl libfaad2
2219
die_license_disabled gpl libx264
2220
die_license_disabled gpl libxvid
2221
die_license_disabled gpl postproc
2222
die_license_disabled gpl x11grab
2223

    
2224
die_license_disabled nonfree libfaac
2225

    
2226
die_license_disabled version3 libopencore_amrnb
2227
die_license_disabled version3 libopencore_amrwb
2228

    
2229
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2230

    
2231
check_deps $ARCH_EXT_LIST
2232

    
2233
disabled optimizations || check_cflags -fomit-frame-pointer
2234

    
2235
enable_pic() {
2236
    enable pic
2237
    add_cppflags -DPIC
2238
    add_cflags   -fPIC
2239
    add_asflags  -fPIC
2240
}
2241

    
2242
enabled pic && enable_pic
2243

    
2244
check_cc <<EOF || die "Symbol mangling check failed."
2245
int ff_extern;
2246
EOF
2247
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2248
extern_prefix=${sym%%ff_extern*}
2249

    
2250
check_cc <<EOF && enable inline_asm
2251
void foo(void) { __asm__ volatile ("" ::); }
2252
EOF
2253

    
2254
_restrict=
2255
for restrict_keyword in restrict __restrict__ __restrict; do
2256
    check_cc <<EOF && _restrict=$restrict_keyword && break
2257
void foo(char * $restrict_keyword p);
2258
EOF
2259
done
2260

    
2261
check_cc <<EOF && enable attribute_packed
2262
struct { int x; } __attribute__((packed)) x;
2263
EOF
2264

    
2265
check_cc <<EOF || die "endian test failed"
2266
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2267
EOF
2268
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2269

    
2270
if enabled alpha; then
2271

    
2272
    check_cflags -mieee
2273

    
2274
elif enabled arm; then
2275

    
2276
    check_cflags -marm
2277

    
2278
    check_ld <<EOF && enable vfp_args
2279
__asm__ (".eabi_attribute 28, 1");
2280
int main(void) { return 0; }
2281
EOF
2282

    
2283
    # We have to check if pld is a nop and disable it.
2284
    check_asm pld '"pld [r0]"'
2285

    
2286
    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2287
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2288
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2289
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2290
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2291
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2292

    
2293
    enabled_all armv6t2 shared !pic && enable_pic
2294

    
2295
elif enabled ia64; then
2296

    
2297
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2298
    enabled shared && enable_weak hardcoded_tables
2299

    
2300
elif enabled mips; then
2301

    
2302
    check_asm loongson '"dmult.g $1, $2, $3"'
2303
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2304

    
2305
elif enabled ppc; then
2306

    
2307
    check_asm dcbzl     '"dcbzl 0, 1"'
2308
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2309
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2310

    
2311
    # AltiVec flags: The FSF version of GCC differs from the Apple version
2312
    if enabled altivec; then
2313
        check_cflags -maltivec -mabi=altivec &&
2314
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2315
        check_cflags -faltivec
2316

    
2317
        # check if our compiler supports Motorola AltiVec C API
2318
        check_cc <<EOF || disable altivec
2319
$inc_altivec_h
2320
int main(void) {
2321
    vector signed int v1, v2, v3;
2322
    v1 = vec_add(v2,v3);
2323
    return 0;
2324
}
2325
EOF
2326

    
2327
        # check if our compiler supports braces for vector declarations
2328
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2329
$inc_altivec_h
2330
int main (void) { (vector int) {1}; return 0; }
2331
EOF
2332
    fi
2333

    
2334
elif enabled sparc; then
2335

    
2336
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2337
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2338

    
2339
elif enabled x86; then
2340

    
2341
    # check whether EBP is available on x86
2342
    # As 'i' is stored on the stack, this program will crash
2343
    # if the base pointer is used to access it because the
2344
    # base pointer is cleared in the inline assembly code.
2345
    check_exec_crash <<EOF && enable ebp_available
2346
    volatile int i=0;
2347
    __asm__ volatile (
2348
        "xorl %%ebp, %%ebp"
2349
    ::: "%ebp");
2350
    return i;
2351
EOF
2352

    
2353
    # check whether EBX is available on x86
2354
    check_asm ebx_available '""::"b"(0)' &&
2355
        check_asm ebx_available '"":::"%ebx"'
2356

    
2357
    # check whether more than 10 operands are supported
2358
    check_cc <<EOF && enable ten_operands
2359
int main(void) {
2360
    int x=0;
2361
    __asm__ volatile(
2362
        ""
2363
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2364
    );
2365
    return 0;
2366
}
2367
EOF
2368

    
2369
    # check whether binutils is new enough to compile SSSE3/MMX2
2370
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2371
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2372

    
2373
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2374

    
2375
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2376
    enabled     x86_64        && append YASMFLAGS "-m amd64"
2377
    enabled     pic           && append YASMFLAGS "-DPIC"
2378
    test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2379
    case "$objformat" in
2380
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2381
    esac
2382
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2383

    
2384
    case "$cpu" in
2385
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2386
            disable fast_clz
2387
        ;;
2388
    esac
2389

    
2390
fi
2391

    
2392
if check_func dlopen; then
2393
    ldl=
2394
elif check_func dlopen -ldl; then
2395
    ldl=-ldl
2396
fi
2397

    
2398
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2399
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2400

    
2401
check_func  fork
2402
check_func  getaddrinfo $network_extralibs
2403
check_func  gethrtime
2404
check_func  getrusage
2405
check_func  inet_aton $network_extralibs
2406
check_func  isatty
2407
check_func  memalign
2408
check_func  mkstemp
2409
check_func  posix_memalign
2410
check_func_headers io.h setmode
2411
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2412
check_func_headers windows.h GetProcessTimes
2413
check_func_headers windows.h VirtualAlloc
2414

    
2415
check_header conio.h
2416
check_header dlfcn.h
2417
check_header dxva2api.h
2418
check_header malloc.h
2419
check_header poll.h
2420
check_header sys/mman.h
2421
check_header sys/resource.h
2422
check_header sys/select.h
2423
check_header termios.h
2424
check_header vdpau/vdpau.h
2425
check_header vdpau/vdpau_x11.h
2426
check_header X11/extensions/XvMClib.h
2427

    
2428
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2429

    
2430
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2431
     enabled_any $need_memalign ; then
2432
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2433
fi
2434

    
2435
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2436
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2437

    
2438
# check for some common methods of building with pthread support
2439
# do this before the optional library checks as some of them require pthreads
2440
if enabled pthreads; then
2441
    if check_func pthread_create; then
2442
        :
2443
    elif check_func pthread_create -pthread; then
2444
        add_cflags -pthread
2445
        add_extralibs -pthread
2446
    elif check_func pthread_create -pthreads; then
2447
        add_cflags -pthreads
2448
        add_extralibs -pthreads
2449
    elif check_func pthread_create -lpthreadGC2; then
2450
        add_extralibs -lpthreadGC2
2451
    elif ! check_lib pthread.h pthread_create -lpthread; then
2452
        die "ERROR: can't find pthreads library"
2453
    fi
2454
fi
2455

    
2456
for thread in $THREADS_LIST; do
2457
    if enabled $thread; then
2458
        test -n "$thread_type" &&
2459
            die "ERROR: Only one thread type must be selected." ||
2460
            thread_type="$thread"
2461
    fi
2462
done
2463

    
2464
check_lib math.h sin -lm
2465
check_lib va/va.h vaInitialize -lva
2466

    
2467
check_func exp2
2468
check_func exp2f
2469
check_func llrint
2470
check_func log2
2471
check_func log2f
2472
check_func lrint
2473
check_func lrintf
2474
check_func round
2475
check_func roundf
2476
check_func truncf
2477

    
2478
# these are off by default, so fail if requested and not available
2479
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2480
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2481
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2482
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2483
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2484
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2485
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2486
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2487
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2488
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2489
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2490
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2491
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2492
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2493
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2494
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2495
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2496
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2497
                      { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2498
                        die "ERROR: libx264 version must be >= 0.83."; }
2499
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2500
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2501

    
2502
# libdc1394 check
2503
if enabled libdc1394; then
2504
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2505
        enable libdc1394_2; } ||
2506
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2507
        enable libdc1394_1; } ||
2508
    die "ERROR: No version of libdc1394 found "
2509
fi
2510

    
2511
SDL_CONFIG="${cross_prefix}sdl-config"
2512
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2513
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
2514
    sdl_libs=$("${SDL_CONFIG}" --libs)
2515
    check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2516
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2517
    enable sdl &&
2518
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2519
fi
2520

    
2521
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2522

    
2523
if enabled network; then
2524
    check_type "sys/types.h sys/socket.h" socklen_t
2525
    check_type netdb.h "struct addrinfo"
2526
    check_type netinet/in.h "struct ipv6_mreq"
2527
    check_type netinet/in.h "struct sockaddr_in6"
2528
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2529
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2530
    # Prefer arpa/inet.h over winsock2
2531
    if check_header arpa/inet.h ; then
2532
        check_func closesocket
2533
    elif check_header winsock2.h ; then
2534
        check_func_headers winsock2.h closesocket -lws2 && \
2535
            network_extralibs="-lws2" || \
2536
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2537
            network_extralibs="-lws2_32"; }
2538
        # getaddrinfo is available if _WIN32_WINNT >= 0x0501 is defined
2539
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
2540
        check_type ws2tcpip.h socklen_t
2541
        check_type ws2tcpip.h "struct addrinfo"
2542
        check_type ws2tcpip.h "struct ipv6_mreq"
2543
        check_type ws2tcpip.h "struct sockaddr_in6"
2544
        check_type ws2tcpip.h "struct sockaddr_storage"
2545
        check_struct winsock2.h "struct sockaddr" sa_len
2546
    else
2547
        disable network
2548
    fi
2549
fi
2550

    
2551
check_header linux/videodev.h
2552
check_header linux/videodev2.h
2553
check_header sys/videoio.h
2554

    
2555
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2556

    
2557
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2558
{ check_header dev/bktr/ioctl_meteor.h &&
2559
  check_header dev/bktr/ioctl_bt848.h; } ||
2560
{ check_header machine/ioctl_meteor.h &&
2561
  check_header machine/ioctl_bt848.h; } ||
2562
{ check_header dev/video/meteor/ioctl_meteor.h &&
2563
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2564
check_header dev/ic/bt8xx.h
2565

    
2566
check_header sys/soundcard.h
2567
check_header soundcard.h
2568

    
2569
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2570

    
2571
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2572

    
2573
enabled x11grab                         &&
2574
check_header X11/Xlib.h                 &&
2575
check_header X11/extensions/XShm.h      &&
2576
check_header X11/extensions/Xfixes.h    &&
2577
check_func XOpenDisplay -lX11           &&
2578
check_func XShmCreateImage -lX11 -lXext &&
2579
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2580

    
2581
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2582
check_cpp_condition \
2583
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2584
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2585
      disable vdpau; }
2586
fi
2587

    
2588
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2589

    
2590
# add some useful compiler flags if supported
2591
check_cflags -Wdeclaration-after-statement
2592
check_cflags -Wall
2593
check_cflags -Wno-switch
2594
check_cflags -Wdisabled-optimization
2595
check_cflags -Wpointer-arith
2596
check_cflags -Wredundant-decls
2597
check_cflags -Wno-pointer-sign
2598
check_cflags -Wcast-qual
2599
check_cflags -Wwrite-strings
2600
check_cflags -Wtype-limits
2601
check_cflags -Wundef
2602
enabled extra_warnings && check_cflags -Winline
2603

    
2604
# add some linker flags
2605
check_ldflags -Wl,--warn-common
2606
check_ldflags -Wl,--as-needed
2607
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'
2608
check_ldflags -Wl,-Bsymbolic
2609

    
2610
echo "X{};" > $TMPV
2611
test_ldflags -Wl,--version-script,$TMPV &&
2612
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2613

    
2614
if enabled small; then
2615
    check_cflags -Os            # not all compilers support -Os
2616
    optimizations="small"
2617
elif enabled optimizations; then
2618
    if enabled xlc; then
2619
        add_cflags  -O5
2620
        add_ldflags -O5
2621
    elif enabled suncc; then
2622
        add_cflags -O5
2623
    elif enabled ccc; then
2624
        add_cflags -fast
2625
    else
2626
        add_cflags -O3
2627
    fi
2628
fi
2629
check_cflags -fno-math-errno
2630
check_cflags -fno-signed-zeros
2631

    
2632
if enabled icc; then
2633
    # Just warnings, no remarks
2634
    check_cflags -w1
2635
    # -wd: Disable following warnings
2636
    # 144, 167, 556: -Wno-pointer-sign
2637
    # 10006: ignoring unknown option -fno-signed-zeros
2638
    # 10156: ignoring option '-W'; no argument required
2639
    check_cflags -wd144,167,556,10006,10156
2640
    # 11030: Warning unknown option --as-needed
2641
    # 10156: ignoring option '-export'; no argument required
2642
    check_ldflags -wd10156,11030
2643
    # Allow to compile with optimizations
2644
    check_ldflags -march=$cpu
2645
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2646
    enable ebp_available
2647
elif enabled ccc; then
2648
    # disable some annoying warnings
2649
    add_cflags -msg_disable cvtu32to64
2650
    add_cflags -msg_disable embedcomment
2651
    add_cflags -msg_disable needconstext
2652
    add_cflags -msg_disable nomainieee
2653
    add_cflags -msg_disable ptrmismatch1
2654
    add_cflags -msg_disable unreachcode
2655
elif enabled gcc; then
2656
    check_cflags -fno-tree-vectorize
2657
elif enabled clang; then
2658
    check_cflags -Qunused-arguments
2659
elif enabled armcc; then
2660
    # 2523: use of inline assembler is deprecated
2661
    add_cflags -Wrvct,--diag_suppress=2523
2662
elif enabled tms470; then
2663
    add_cflags -pds=824 -pds=837
2664
fi
2665

    
2666
if enabled gprof; then
2667
    add_cflags  -p
2668
    add_ldflags -p
2669
fi
2670

    
2671
# Find out if the .align argument is a power of two or not.
2672
check_asm asmalign_pot '".align 3"'
2673

    
2674
enabled_any $DECODER_LIST      && enable decoders
2675
enabled_any $ENCODER_LIST      && enable encoders
2676
enabled_any $HWACCEL_LIST      && enable hwaccels
2677
enabled_any $BSF_LIST          && enable bsfs
2678
enabled_any $DEMUXER_LIST      && enable demuxers
2679
enabled_any $MUXER_LIST        && enable muxers
2680
enabled_any $FILTER_LIST       && enable filters
2681
enabled_any $INDEV_LIST        && enable indevs
2682
enabled_any $OUTDEV_LIST       && enable outdevs
2683
enabled_any $PROTOCOL_LIST     && enable protocols
2684

    
2685
enabled_any $THREADS_LIST      && enable threads
2686

    
2687
check_deps $CONFIG_LIST       \
2688
           $CONFIG_EXTRA      \
2689
           $HAVE_LIST         \
2690
           $DECODER_LIST      \
2691
           $ENCODER_LIST      \
2692
           $HWACCEL_LIST      \
2693
           $PARSER_LIST       \
2694
           $BSF_LIST          \
2695
           $DEMUXER_LIST      \
2696
           $MUXER_LIST        \
2697
           $FILTER_LIST       \
2698
           $INDEV_LIST        \
2699
           $OUTDEV_LIST       \
2700
           $PROTOCOL_LIST     \
2701

    
2702
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2703

    
2704
echo "install prefix            $prefix"
2705
echo "source path               $source_path"
2706
echo "C compiler                $cc"
2707
echo ".align is power-of-two    $asmalign_pot"
2708
echo "ARCH                      $arch ($cpu)"
2709
if test "$build_suffix" != ""; then
2710
    echo "build suffix              $build_suffix"
2711
fi
2712
if test "$extra_version" != ""; then
2713
    echo "version string suffix     $extra_version"
2714
fi
2715
echo "big-endian                ${bigendian-no}"
2716
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2717
if enabled x86; then
2718
    echo "yasm                      ${yasm-no}"
2719
    echo "MMX enabled               ${mmx-no}"
2720
    echo "MMX2 enabled              ${mmx2-no}"
2721
    echo "3DNow! enabled            ${amd3dnow-no}"
2722
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2723
    echo "SSE enabled               ${sse-no}"
2724
    echo "SSSE3 enabled             ${ssse3-no}"
2725
    echo "CMOV enabled              ${cmov-no}"
2726
    echo "CMOV is fast              ${fast_cmov-no}"
2727
    echo "EBX available             ${ebx_available-no}"
2728
    echo "EBP available             ${ebp_available-no}"
2729
    echo "10 operands supported     ${ten_operands-no}"
2730
fi
2731
if enabled arm; then
2732
    echo "ARMv5TE enabled           ${armv5te-no}"
2733
    echo "ARMv6 enabled             ${armv6-no}"
2734
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2735
    echo "ARM VFP enabled           ${armvfp-no}"
2736
    echo "IWMMXT enabled            ${iwmmxt-no}"
2737
    echo "NEON enabled              ${neon-no}"
2738
fi
2739
if enabled mips; then
2740
    echo "MMI enabled               ${mmi-no}"
2741
fi
2742
if enabled ppc; then
2743
    echo "AltiVec enabled           ${altivec-no}"
2744
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
2745
    echo "dcbzl available           ${dcbzl-no}"
2746
    echo "performance report        ${powerpc_perf-no}"
2747
fi
2748
if enabled sparc; then
2749
    echo "VIS enabled               ${vis-no}"
2750
fi
2751
echo "gprof enabled             ${gprof-no}"
2752
echo "debug symbols             ${debug-no}"
2753
echo "strip symbols             ${stripping-no}"
2754
echo "optimizations             ${optimizations-no}"
2755
echo "static                    ${static-no}"
2756
echo "shared                    ${shared-no}"
2757
echo "postprocessing support    ${postproc-no}"
2758
echo "new filter support        ${avfilter-no}"
2759
echo "filters using lavformat   ${avfilter_lavf-no}"
2760
echo "network support           ${network-no}"
2761
echo "threading support         ${thread_type-no}"
2762
echo "SDL support               ${sdl-no}"
2763
echo "Sun medialib support      ${mlib-no}"
2764
echo "AVISynth enabled          ${avisynth-no}"
2765
echo "libdc1394 support         ${libdc1394-no}"
2766
echo "libdirac enabled          ${libdirac-no}"
2767
echo "libfaac enabled           ${libfaac-no}"
2768
echo "libfaad enabled           ${libfaad-no}"
2769
echo "libfaad dlopened          ${libfaadbin-no}"
2770
echo "libgsm enabled            ${libgsm-no}"
2771
echo "libmp3lame enabled        ${libmp3lame-no}"
2772
echo "libnut enabled            ${libnut-no}"
2773
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2774
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2775
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2776
echo "libschroedinger enabled   ${libschroedinger-no}"
2777
echo "libspeex enabled          ${libspeex-no}"
2778
echo "libtheora enabled         ${libtheora-no}"
2779
echo "libvorbis enabled         ${libvorbis-no}"
2780
echo "libx264 enabled           ${libx264-no}"
2781
echo "libxvid enabled           ${libxvid-no}"
2782
echo "zlib enabled              ${zlib-no}"
2783
echo "bzlib enabled             ${bzlib-no}"
2784
echo
2785

    
2786
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2787
    echo "Enabled ${type}s:"
2788
    eval list=\$$(toupper $type)_LIST
2789
    for part in $list; do
2790
        enabled $part && echo ${part%_*}
2791
    done | sort | pr -3 -t
2792
    echo
2793
done
2794

    
2795
license="LGPL version 2.1 or later"
2796
if enabled nonfree; then
2797
    license="nonfree and unredistributable"
2798
elif enabled gplv3; then
2799
    license="GPL version 3 or later"
2800
elif enabled lgplv3; then
2801
    license="LGPL version 3 or later"
2802
elif enabled gpl; then
2803
    license="GPL version 2 or later"
2804
fi
2805

    
2806
echo "License: $license"
2807

    
2808
echo "Creating config.mak and config.h..."
2809

    
2810
# build tree in object directory if source path is different from current one
2811
if enabled source_path_used; then
2812
    DIRS="
2813
        doc
2814
        libavcodec
2815
        libavcodec/$arch
2816
        libavdevice
2817
        libavfilter
2818
        libavformat
2819
        libavutil
2820
        libavutil/$arch
2821
        libpostproc
2822
        libswscale
2823
        libswscale/$arch
2824
        tests
2825
        tools
2826
    "
2827
    FILES="
2828
        Makefile
2829
        common.mak
2830
        subdir.mak
2831
        doc/texi2pod.pl
2832
        libavcodec/Makefile
2833
        libavdevice/Makefile
2834
        libavfilter/Makefile
2835
        libavformat/Makefile
2836
        libavutil/Makefile
2837
        libpostproc/Makefile
2838
        libswscale/Makefile
2839
    "
2840
    for dir in $DIRS ; do
2841
        mkdir -p $dir
2842
    done
2843
    for f in $FILES ; do
2844
        $ln_s "$source_path/$f" $f
2845
    done
2846
fi
2847

    
2848
enabled stripping || strip="echo skipping strip"
2849

    
2850
cat > config.mak <<EOF
2851
# Automatically generated by configure - do not modify!
2852
ifndef FFMPEG_CONFIG_MAK
2853
FFMPEG_CONFIG_MAK=1
2854
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2855
prefix=$prefix
2856
LIBDIR=\$(DESTDIR)$libdir
2857
SHLIBDIR=\$(DESTDIR)$shlibdir
2858
INCDIR=\$(DESTDIR)$incdir
2859
BINDIR=\$(DESTDIR)$bindir
2860
DATADIR=\$(DESTDIR)$datadir
2861
MANDIR=\$(DESTDIR)$mandir
2862
SRC_PATH="$source_path"
2863
SRC_PATH_BARE=$source_path
2864
BUILD_ROOT="$PWD"
2865
ARCH=$arch
2866
CC=$cc
2867
AS=$as
2868
LD=$ld
2869
DEPCC=$dep_cc
2870
YASM=$yasmexe
2871
AR=$ar
2872
RANLIB=$ranlib
2873
LN_S=$ln_s
2874
STRIP=$strip
2875
CPPFLAGS=$CPPFLAGS
2876
CFLAGS=$CFLAGS
2877
ASFLAGS=$ASFLAGS
2878
CC_O=$CC_O
2879
LDFLAGS=$LDFLAGS
2880
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2881
SHFLAGS=$SHFLAGS
2882
YASMFLAGS=$YASMFLAGS
2883
BUILDSUF=$build_suffix
2884
FULLNAME=$FULLNAME
2885
LIBPREF=$LIBPREF
2886
LIBSUF=$LIBSUF
2887
LIBNAME=$LIBNAME
2888
SLIBPREF=$SLIBPREF
2889
SLIBSUF=$SLIBSUF
2890
EXESUF=$EXESUF
2891
EXTRA_VERSION=$extra_version
2892
DEPFLAGS=$DEPFLAGS
2893
CCDEP=$CCDEP
2894
ASDEP=$ASDEP
2895
CC_DEPFLAGS=$CC_DEPFLAGS
2896
AS_DEPFLAGS=$AS_DEPFLAGS
2897
HOSTCC=$host_cc
2898
HOSTCFLAGS=$host_cflags
2899
HOSTEXESUF=$HOSTEXESUF
2900
HOSTLDFLAGS=$host_ldflags
2901
HOSTLIBS=$host_libs
2902
TARGET_EXEC=$target_exec
2903
TARGET_PATH=$target_path
2904
SDL_LIBS=$sdl_libs
2905
SDL_CFLAGS=$sdl_cflags
2906
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2907
EXTRALIBS=$extralibs
2908
EOF
2909

    
2910
get_version(){
2911
    name=$1
2912
    file=$source_path/$2
2913
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2914
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2915
    lcname=$(tolower $name)
2916
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2917
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2918
}
2919

    
2920
get_version LIBSWSCALE  libswscale/swscale.h
2921
get_version LIBPOSTPROC libpostproc/postprocess.h
2922
get_version LIBAVCODEC  libavcodec/avcodec.h
2923
get_version LIBAVDEVICE libavdevice/avdevice.h
2924
get_version LIBAVFORMAT libavformat/avformat.h
2925
get_version LIBAVUTIL   libavutil/avutil.h
2926
get_version LIBAVFILTER libavfilter/avfilter.h
2927

    
2928
enabled shared && cat >> config.mak <<EOF
2929
LIBTARGET=${LIBTARGET}
2930
SLIBNAME=${SLIBNAME}
2931
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2932
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2933
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2934
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2935
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2936
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2937
EOF
2938

    
2939
enabled asmalign_pot || align_shift="1 <<"
2940

    
2941
cat > $TMPH <<EOF
2942
/* Automatically generated by configure - do not modify! */
2943
#ifndef FFMPEG_CONFIG_H
2944
#define FFMPEG_CONFIG_H
2945
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2946
#define FFMPEG_LICENSE "$(c_escape $license)"
2947
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2948
#define CC_TYPE "$cc_type"
2949
#define CC_VERSION $cc_version
2950
#define restrict $_restrict
2951
#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2952
#define EXTERN_PREFIX "${extern_prefix}"
2953
#define EXTERN_ASM ${extern_prefix}
2954
EOF
2955

    
2956
if enabled small || disabled optimizations; then
2957
    echo "#define av_always_inline"  >> $TMPH
2958
fi
2959

    
2960
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2961
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2962
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2963
                                      $CONFIG_EXTRA      \
2964
                                      $DECODER_LIST      \
2965
                                      $ENCODER_LIST      \
2966
                                      $HWACCEL_LIST      \
2967
                                      $PARSER_LIST       \
2968
                                      $BSF_LIST          \
2969
                                      $DEMUXER_LIST      \
2970
                                      $MUXER_LIST        \
2971
                                      $FILTER_LIST       \
2972
                                      $PROTOCOL_LIST     \
2973
                                      $INDEV_LIST        \
2974
                                      $OUTDEV_LIST       \
2975

    
2976
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2977
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2978

    
2979
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2980
cp_if_changed $TMPH config.h
2981

    
2982
cat > $TMPH <<EOF
2983
/* Generated by ffconf */
2984
#ifndef AVUTIL_AVCONFIG_H
2985
#define AVUTIL_AVCONFIG_H
2986
EOF
2987

    
2988
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
2989

    
2990
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
2991

    
2992
cp_if_changed $TMPH libavutil/avconfig.h
2993

    
2994
# build pkg-config files
2995

    
2996
pkgconfig_generate(){
2997
name=$1
2998
shortname=${name#lib}${build_suffix}
2999
comment=$2
3000
version=$3
3001
libs=$4
3002
requires=$5
3003
cat <<EOF > $name/$name.pc
3004
prefix=$prefix
3005
exec_prefix=\${prefix}
3006
libdir=$libdir
3007
includedir=$incdir
3008

    
3009
Name: $name
3010
Description: $comment
3011
Version: $version
3012
Requires: $(enabled shared || echo $requires)
3013
Requires.private: $(enabled shared && echo $requires)
3014
Conflicts:
3015
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3016
Libs.private: $(enabled shared && echo $libs)
3017
Cflags: -I\${includedir}
3018
EOF
3019
cat <<EOF > $name/$name-uninstalled.pc
3020
prefix=
3021
exec_prefix=
3022
libdir=\${pcfiledir}
3023
includedir=${source_path}
3024

    
3025
Name: $name
3026
Description: $comment
3027
Version: $version
3028
Requires: $requires
3029
Conflicts:
3030
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3031
Cflags: -I\${includedir}
3032
EOF
3033
}
3034

    
3035
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3036
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3037
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3038
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3039
enabled avfilter &&
3040
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3041
enabled postproc &&
3042
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3043
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"