Statistics
| Branch: | Revision:

ffmpeg / configure @ f0f86627

History | View | Annotate | Download (85.4 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"
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
        # Only WinXP or greater are supported
2079
        add_cflags -D_WIN32_WINNT=0x0501
2080
        if test $target_os = "mingw32ce"; then
2081
            disable network
2082
        else
2083
            target_os=mingw32
2084
        fi
2085
        LIBTARGET=i386
2086
        if enabled x86_64; then
2087
            enable malloc_aligned
2088
            LIBTARGET=x64
2089
        elif enabled arm; then
2090
            LIBTARGET=arm
2091
        fi
2092
        shlibdir_default="$bindir_default"
2093
        disable ffserver
2094
        SLIBPREF=""
2095
        SLIBSUF=".dll"
2096
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2097
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2098
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2099
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2100
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2101
            install -d "$(LIBDIR)"; \
2102
            install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2103
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2104
        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'
2105
        objformat="win32"
2106
        enable dos_paths
2107
        check_cflags -fno-common
2108
        if ! enabled x86_64; then
2109
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2110
                die "ERROR: MinGW runtime version must be >= 3.15."
2111
            enabled_any avisynth vfwcap_indev &&
2112
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2113
                  die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2114
        fi
2115
        ;;
2116
    cygwin*)
2117
        target_os=cygwin
2118
        shlibdir_default="$bindir_default"
2119
        SLIBPREF="cyg"
2120
        SLIBSUF=".dll"
2121
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2122
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2123
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
2124
        objformat="win32"
2125
        enable dos_paths
2126
        check_cflags -fno-common
2127
        ;;
2128
    *-dos|freedos|opendos)
2129
        disable ffplay ffserver
2130
        disable $INDEV_LIST $OUTDEV_LIST
2131
        network_extralibs="-lsocket"
2132
        objformat="coff"
2133
        enable dos_paths
2134
        ;;
2135
    linux)
2136
        enable dv1394
2137
        ;;
2138
    irix*)
2139
        target_os=irix
2140
        ranlib="echo ignoring ranlib"
2141
        ;;
2142
    os/2*)
2143
        strip="lxlite"
2144
        ln_s="cp -f"
2145
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2146
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2147
        FFSERVERLDFLAGS=""
2148
        LIBSUF="_s.a"
2149
        SLIBPREF=""
2150
        SLIBSUF=".dll"
2151
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2152
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2153
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2154
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2155
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2156
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2157
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2158
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2159
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2160
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2161
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2162
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2163
        enable dos_paths
2164
        ;;
2165
    gnu/kfreebsd)
2166
        ;;
2167
    gnu)
2168
        ;;
2169

    
2170
    *)
2171
        die "Unknown OS '$target_os'."
2172
        ;;
2173
esac
2174

    
2175
set_default $PATHS_LIST
2176

    
2177
add_extralibs $osextralibs
2178

    
2179
# Combine FFLDFLAGS and the LDFLAGS environment variable.
2180
LDFLAGS="$FFLDFLAGS $LDFLAGS"
2181

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

    
2193
disabled static && LIBNAME=""
2194

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

    
2210

    
2211
die_license_disabled() {
2212
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2213
}
2214

    
2215
die_license_disabled gpl libfaad2
2216
die_license_disabled gpl libx264
2217
die_license_disabled gpl libxvid
2218
die_license_disabled gpl postproc
2219
die_license_disabled gpl x11grab
2220

    
2221
die_license_disabled nonfree libfaac
2222

    
2223
die_license_disabled version3 libopencore_amrnb
2224
die_license_disabled version3 libopencore_amrwb
2225

    
2226
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2227

    
2228
check_deps $ARCH_EXT_LIST
2229

    
2230
disabled optimizations || check_cflags -fomit-frame-pointer
2231

    
2232
enable_pic() {
2233
    enable pic
2234
    add_cppflags -DPIC
2235
    add_cflags   -fPIC
2236
    add_asflags  -fPIC
2237
}
2238

    
2239
enabled pic && enable_pic
2240

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

    
2247
check_cc <<EOF && enable inline_asm
2248
void foo(void) { __asm__ volatile ("" ::); }
2249
EOF
2250

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

    
2258
check_cc <<EOF && enable attribute_packed
2259
struct { int x; } __attribute__((packed)) x;
2260
EOF
2261

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

    
2267
if enabled alpha; then
2268

    
2269
    check_cflags -mieee
2270

    
2271
elif enabled arm; then
2272

    
2273
    check_cflags -marm
2274

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

    
2280
    # We have to check if pld is a nop and disable it.
2281
    check_asm pld '"pld [r0]"'
2282

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

    
2290
    enabled_all armv6t2 shared !pic && enable_pic
2291

    
2292
elif enabled ia64; then
2293

    
2294
    # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2295
    enabled shared && enable_weak hardcoded_tables
2296

    
2297
elif enabled mips; then
2298

    
2299
    check_asm loongson '"dmult.g $1, $2, $3"'
2300
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2301

    
2302
elif enabled ppc; then
2303

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

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

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

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

    
2331
elif enabled sparc; then
2332

    
2333
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2334
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2335

    
2336
elif enabled x86; then
2337

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

    
2350
    # check whether EBX is available on x86
2351
    check_asm ebx_available '""::"b"(0)' &&
2352
        check_asm ebx_available '"":::"%ebx"'
2353

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

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

    
2370
    check_asm bswap '"bswap %%eax" ::: "%eax"'
2371

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

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

    
2387
fi
2388

    
2389
if check_func dlopen; then
2390
    ldl=
2391
elif check_func dlopen -ldl; then
2392
    ldl=-ldl
2393
fi
2394

    
2395
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2396
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2397

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

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

    
2425
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2426
     enabled_any $need_memalign ; then
2427
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2428
fi
2429

    
2430
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2431
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2432

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

    
2451
for thread in $THREADS_LIST; do
2452
    if enabled $thread; then
2453
        test -n "$thread_type" &&
2454
            die "ERROR: Only one thread type must be selected." ||
2455
            thread_type="$thread"
2456
    fi
2457
done
2458

    
2459
check_lib math.h sin -lm
2460
check_lib va/va.h vaInitialize -lva
2461

    
2462
check_func exp2
2463
check_func exp2f
2464
check_func llrint
2465
check_func log2
2466
check_func log2f
2467
check_func lrint
2468
check_func lrintf
2469
check_func round
2470
check_func roundf
2471
check_func truncf
2472

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

    
2497
# libdc1394 check
2498
if enabled libdc1394; then
2499
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2500
        enable libdc1394_2; } ||
2501
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2502
        enable libdc1394_1; } ||
2503
    die "ERROR: No version of libdc1394 found "
2504
fi
2505

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

    
2516
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2517

    
2518
if enabled network; then
2519
    check_type "sys/types.h sys/socket.h" socklen_t
2520
    check_type netdb.h "struct addrinfo"
2521
    check_type netinet/in.h "struct ipv6_mreq"
2522
    check_type netinet/in.h "struct sockaddr_in6"
2523
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2524
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2525
    # Prefer arpa/inet.h over winsock2
2526
    if check_header arpa/inet.h ; then
2527
        check_func closesocket
2528
    elif check_header winsock2.h ; then
2529
        check_func_headers winsock2.h closesocket -lws2 && \
2530
            network_extralibs="-lws2" || \
2531
        { check_func_headers winsock2.h closesocket -lws2_32 && \
2532
            network_extralibs="-lws2_32"; }
2533
        check_type ws2tcpip.h socklen_t
2534
        check_type ws2tcpip.h "struct addrinfo"
2535
        check_type ws2tcpip.h "struct ipv6_mreq"
2536
        check_type ws2tcpip.h "struct sockaddr_in6"
2537
        check_type ws2tcpip.h "struct sockaddr_storage"
2538
        check_struct winsock2.h "struct sockaddr" sa_len
2539
    else
2540
        disable network
2541
    fi
2542
fi
2543

    
2544
check_header linux/videodev.h
2545
check_header linux/videodev2.h
2546
check_header sys/videoio.h
2547

    
2548
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2549

    
2550
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2551
{ check_header dev/bktr/ioctl_meteor.h &&
2552
  check_header dev/bktr/ioctl_bt848.h; } ||
2553
{ check_header machine/ioctl_meteor.h &&
2554
  check_header machine/ioctl_bt848.h; } ||
2555
{ check_header dev/video/meteor/ioctl_meteor.h &&
2556
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2557
check_header dev/ic/bt8xx.h
2558

    
2559
check_header sys/soundcard.h
2560
check_header soundcard.h
2561

    
2562
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2563

    
2564
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2565

    
2566
enabled x11grab                         &&
2567
check_header X11/Xlib.h                 &&
2568
check_header X11/extensions/XShm.h      &&
2569
check_header X11/extensions/Xfixes.h    &&
2570
check_func XOpenDisplay -lX11           &&
2571
check_func XShmCreateImage -lX11 -lXext &&
2572
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2573

    
2574
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2575
check_cpp_condition \
2576
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2577
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2578
      disable vdpau; }
2579
fi
2580

    
2581
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2582

    
2583
# add some useful compiler flags if supported
2584
check_cflags -Wdeclaration-after-statement
2585
check_cflags -Wall
2586
check_cflags -Wno-switch
2587
check_cflags -Wdisabled-optimization
2588
check_cflags -Wpointer-arith
2589
check_cflags -Wredundant-decls
2590
check_cflags -Wno-pointer-sign
2591
check_cflags -Wcast-qual
2592
check_cflags -Wwrite-strings
2593
check_cflags -Wtype-limits
2594
check_cflags -Wundef
2595
enabled extra_warnings && check_cflags -Winline
2596

    
2597
# add some linker flags
2598
check_ldflags -Wl,--warn-common
2599
check_ldflags -Wl,--as-needed
2600
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'
2601
check_ldflags -Wl,-Bsymbolic
2602

    
2603
echo "X{};" > $TMPV
2604
test_ldflags -Wl,--version-script,$TMPV &&
2605
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2606

    
2607
if enabled small; then
2608
    check_cflags -Os            # not all compilers support -Os
2609
    optimizations="small"
2610
elif enabled optimizations; then
2611
    if enabled xlc; then
2612
        add_cflags  -O5
2613
        add_ldflags -O5
2614
    elif enabled suncc; then
2615
        add_cflags -O5
2616
    elif enabled ccc; then
2617
        add_cflags -fast
2618
    else
2619
        add_cflags -O3
2620
    fi
2621
fi
2622
check_cflags -fno-math-errno
2623
check_cflags -fno-signed-zeros
2624

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

    
2659
if enabled gprof; then
2660
    add_cflags  -p
2661
    add_ldflags -p
2662
fi
2663

    
2664
# Find out if the .align argument is a power of two or not.
2665
check_asm asmalign_pot '".align 3"'
2666

    
2667
enabled_any $DECODER_LIST      && enable decoders
2668
enabled_any $ENCODER_LIST      && enable encoders
2669
enabled_any $HWACCEL_LIST      && enable hwaccels
2670
enabled_any $BSF_LIST          && enable bsfs
2671
enabled_any $DEMUXER_LIST      && enable demuxers
2672
enabled_any $MUXER_LIST        && enable muxers
2673
enabled_any $FILTER_LIST       && enable filters
2674
enabled_any $INDEV_LIST        && enable indevs
2675
enabled_any $OUTDEV_LIST       && enable outdevs
2676
enabled_any $PROTOCOL_LIST     && enable protocols
2677

    
2678
enabled_any $THREADS_LIST      && enable threads
2679

    
2680
check_deps $CONFIG_LIST       \
2681
           $CONFIG_EXTRA      \
2682
           $HAVE_LIST         \
2683
           $DECODER_LIST      \
2684
           $ENCODER_LIST      \
2685
           $HWACCEL_LIST      \
2686
           $PARSER_LIST       \
2687
           $BSF_LIST          \
2688
           $DEMUXER_LIST      \
2689
           $MUXER_LIST        \
2690
           $FILTER_LIST       \
2691
           $INDEV_LIST        \
2692
           $OUTDEV_LIST       \
2693
           $PROTOCOL_LIST     \
2694

    
2695
enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2696

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

    
2779
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2780
    echo "Enabled ${type}s:"
2781
    eval list=\$$(toupper $type)_LIST
2782
    for part in $list; do
2783
        enabled $part && echo ${part%_*}
2784
    done | sort | pr -3 -t
2785
    echo
2786
done
2787

    
2788
license="LGPL version 2.1 or later"
2789
if enabled nonfree; then
2790
    license="nonfree and unredistributable"
2791
elif enabled gplv3; then
2792
    license="GPL version 3 or later"
2793
elif enabled lgplv3; then
2794
    license="LGPL version 3 or later"
2795
elif enabled gpl; then
2796
    license="GPL version 2 or later"
2797
fi
2798

    
2799
echo "License: $license"
2800

    
2801
echo "Creating config.mak and config.h..."
2802

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

    
2841
enabled stripping || strip="echo skipping strip"
2842

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

    
2903
get_version(){
2904
    name=$1
2905
    file=$source_path/$2
2906
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2907
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2908
    lcname=$(tolower $name)
2909
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2910
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2911
}
2912

    
2913
get_version LIBSWSCALE  libswscale/swscale.h
2914
get_version LIBPOSTPROC libpostproc/postprocess.h
2915
get_version LIBAVCODEC  libavcodec/avcodec.h
2916
get_version LIBAVDEVICE libavdevice/avdevice.h
2917
get_version LIBAVFORMAT libavformat/avformat.h
2918
get_version LIBAVUTIL   libavutil/avutil.h
2919
get_version LIBAVFILTER libavfilter/avfilter.h
2920

    
2921
enabled shared && cat >> config.mak <<EOF
2922
LIBTARGET=${LIBTARGET}
2923
SLIBNAME=${SLIBNAME}
2924
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2925
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2926
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2927
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2928
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2929
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2930
EOF
2931

    
2932
enabled asmalign_pot || align_shift="1 <<"
2933

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

    
2949
if enabled small || disabled optimizations; then
2950
    echo "#define av_always_inline"  >> $TMPH
2951
fi
2952

    
2953
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2954
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2955
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2956
                                      $CONFIG_EXTRA      \
2957
                                      $DECODER_LIST      \
2958
                                      $ENCODER_LIST      \
2959
                                      $HWACCEL_LIST      \
2960
                                      $PARSER_LIST       \
2961
                                      $BSF_LIST          \
2962
                                      $DEMUXER_LIST      \
2963
                                      $MUXER_LIST        \
2964
                                      $FILTER_LIST       \
2965
                                      $PROTOCOL_LIST     \
2966
                                      $INDEV_LIST        \
2967
                                      $OUTDEV_LIST       \
2968

    
2969
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2970
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2971

    
2972
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2973
cp_if_changed $TMPH config.h
2974

    
2975
cat > $TMPH <<EOF
2976
/* Generated by ffconf */
2977
#ifndef AVUTIL_AVCONFIG_H
2978
#define AVUTIL_AVCONFIG_H
2979
EOF
2980

    
2981
print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
2982

    
2983
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
2984

    
2985
cp_if_changed $TMPH libavutil/avconfig.h
2986

    
2987
# build pkg-config files
2988

    
2989
pkgconfig_generate(){
2990
name=$1
2991
shortname=${name#lib}${build_suffix}
2992
comment=$2
2993
version=$3
2994
libs=$4
2995
requires=$5
2996
cat <<EOF > $name/$name.pc
2997
prefix=$prefix
2998
exec_prefix=\${prefix}
2999
libdir=$libdir
3000
includedir=$incdir
3001

    
3002
Name: $name
3003
Description: $comment
3004
Version: $version
3005
Requires: $(enabled shared || echo $requires)
3006
Requires.private: $(enabled shared && echo $requires)
3007
Conflicts:
3008
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3009
Libs.private: $(enabled shared && echo $libs)
3010
Cflags: -I\${includedir}
3011
EOF
3012
cat <<EOF > $name/$name-uninstalled.pc
3013
prefix=
3014
exec_prefix=
3015
libdir=\${pcfiledir}
3016
includedir=${source_path}
3017

    
3018
Name: $name
3019
Description: $comment
3020
Version: $version
3021
Requires: $requires
3022
Conflicts:
3023
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3024
Cflags: -I\${includedir}
3025
EOF
3026
}
3027

    
3028
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3029
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3030
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3031
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3032
enabled avfilter &&
3033
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3034
enabled postproc &&
3035
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3036
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"