Statistics
| Branch: | Revision:

ffmpeg / configure @ 7996d153

History | View | Annotate | Download (71.7 KB)

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

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

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

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

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

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

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

    
57
show_help(){
58
  echo "Usage: configure [options]"
59
  echo "Options: [defaults in brackets after descriptions]"
60
  echo
61
  echo "Standard options:"
62
  echo "  --help                   print this message"
63
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71
  echo
72
  echo "Configuration options:"
73
  echo "  --disable-static         do not build static libraries [no]"
74
  echo "  --enable-shared          build shared libraries [no]"
75
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
76
  echo "                           and binaries will be under GPL [no]"
77
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
78
  echo "                           and binaries will be unredistributable [no]"
79
  echo "  --disable-ffmpeg         disable ffmpeg build"
80
  echo "  --disable-ffplay         disable ffplay build"
81
  echo "  --disable-ffserver       disable ffserver build"
82
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
83
  echo "  --enable-swscale         enable GPLed software scaler support [no]"
84
  echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
85
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
86
  echo "  --disable-vhook          disable video hooking support"
87
  echo "  --enable-beosthreads     use BeOS threads [no]"
88
  echo "  --enable-os2threads      use OS/2 threads [no]"
89
  echo "  --enable-pthreads        use pthreads [no]"
90
  echo "  --enable-w32threads      use Win32 threads [no]"
91
  echo "  --enable-x11grab         enable X11 grabbing [no]"
92
  echo "  --enable-vdpau           enable VDPAU support [no]"
93
  echo "  --enable-xvmc            enable XvMC support [no]"
94
  echo "  --disable-network        disable network support [no]"
95
  echo "  --disable-ipv6           disable IPv6 support [no]"
96
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
97
  echo "  --enable-gray            enable full grayscale support (slower color)"
98
  echo "  --disable-fastdiv        disable table-based division"
99
  echo "  --enable-small           optimize for size instead of speed"
100
  echo "  --disable-aandct         disable AAN DCT code"
101
  echo "  --disable-fft            disable FFT code"
102
  echo "  --disable-golomb         disable Golomb code"
103
  echo "  --disable-mdct           disable MDCT code"
104
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
105
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
106
  echo "  --enable-beos-netserver  enable BeOS netserver"
107
  echo "  --disable-encoder=NAME   disable encoder NAME"
108
  echo "  --enable-encoder=NAME    enable encoder NAME"
109
  echo "  --disable-encoders       disable all encoders"
110
  echo "  --disable-decoder=NAME   disable decoder NAME"
111
  echo "  --enable-decoder=NAME    enable decoder NAME"
112
  echo "  --disable-decoders       disable all decoders"
113
  echo "  --disable-muxer=NAME     disable muxer NAME"
114
  echo "  --enable-muxer=NAME      enable muxer NAME"
115
  echo "  --disable-muxers         disable all muxers"
116
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
117
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
118
  echo "  --disable-demuxers       disable all demuxers"
119
  echo "  --enable-parser=NAME     enable parser NAME"
120
  echo "  --disable-parser=NAME    disable parser NAME"
121
  echo "  --disable-parsers        disable all parsers"
122
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
123
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
124
  echo "  --disable-bsfs           disable all bitstream filters"
125
  echo "  --enable-protocol=NAME   enable protocol NAME"
126
  echo "  --disable-protocol=NAME  disable protocol NAME"
127
  echo "  --disable-protocols      disable all protocols"
128
  echo "  --disable-indevs         disable input devices"
129
  echo "  --disable-outdevs        disable output devices"
130
  echo "  --disable-devices        disable all devices"
131
  echo "  --enable-filter=NAME     enable filter NAME"
132
  echo "  --disable-filter=NAME    disable filter NAME"
133
  echo "  --disable-filters        disable all filters"
134
  echo "  --list-decoders          show all available decoders"
135
  echo "  --list-encoders          show all available encoders"
136
  echo "  --list-muxers            show all available muxers"
137
  echo "  --list-demuxers          show all available demuxers"
138
  echo "  --list-parsers           show all available parsers"
139
  echo "  --list-protocols         show all available protocols"
140
  echo "  --list-bsfs              show all available bitstream filters"
141
  echo "  --list-indevs            show all available input devices"
142
  echo "  --list-outdevs           show all available output devices"
143
  echo "  --list-filters           show all available filters"
144
  echo
145
  echo "External library support:"
146
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
147
  echo "  --enable-bzlib           enable bzlib [autodetect]"
148
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
149
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
150
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
151
  echo "                           and libraw1394 [no]"
152
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
153
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
154
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
155
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
156
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
157
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
158
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
159
  echo "                           native (de)muxer exists [no]"
160
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
161
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
162
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
163
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
164
  echo "                           native implementation exists [no]"
165
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
166
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
167
  echo "                           native MPEG-4/Xvid encoder exists [no]"
168
  echo "  --enable-mlib            enable Sun medialib [no]"
169
  echo "  --enable-zlib            enable zlib [autodetect]"
170
  echo ""
171
  echo "Advanced options (experts only):"
172
  echo "  --source-path=PATH       path to source code [$source_path]"
173
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
174
  echo "  --enable-cross-compile   assume a cross-compiler is used"
175
  echo "  --target-os=OS           compiler targets OS [$target_os]"
176
  echo "  --target-exec=CMD        command to run executables on target"
177
  echo "  --target-path=DIR        path to view of build directory on target"
178
  echo "  --nm=NM                  use nm tool"
179
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
180
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
181
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
182
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
183
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
184
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
185
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
186
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
187
  echo "  --extra-version=STRING   version string suffix []"
188
  echo "  --build-suffix=SUFFIX    library name suffix []"
189
  echo "  --arch=ARCH              select architecture [$arch]"
190
  echo "  --cpu=CPU                select the minimum required CPU (affects"
191
  echo "                           instruction selection, may crash on older CPUs)"
192
  echo "  --enable-powerpc-perf    enable performance report on PPC"
193
  echo "                           (requires enabling PMC)"
194
  echo "  --disable-altivec        disable AltiVec optimizations"
195
  echo "  --disable-mmx            disable MMX optimizations"
196
  echo "  --disable-mmx2           disable MMX2 optimizations"
197
  echo "  --disable-sse            disable SSE optimizations"
198
  echo "  --disable-ssse3          disable SSSE3 optimizations"
199
  echo "  --disable-armv5te        disable armv5te optimizations"
200
  echo "  --disable-armv6          disable armv6 optimizations"
201
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
202
  echo "  --disable-armvfp         disable ARM VFP optimizations"
203
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
204
  echo "  --disable-mmi            disable MMI optimizations"
205
  echo "  --disable-neon           disable neon optimizations"
206
  echo "  --disable-vis            disable VIS optimizations"
207
  echo
208
  echo "Developer options (useful when working on FFmpeg itself):"
209
  echo "  --disable-debug          disable debugging symbols"
210
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
211
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
212
  echo "  --disable-optimizations  disable compiler optimizations"
213
  echo "  --enable-extra-warnings  enable more compiler warnings"
214
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
215
  echo ""
216
  echo "NOTE: Object files are built at the place where configure is launched."
217
  exit 0
218
}
219

    
220
log(){
221
    echo "$@" >> $logfile
222
}
223

    
224
log_file(){
225
    log BEGIN $1
226
    pr -n -t $1 >> $logfile
227
    log END $1
228
}
229

    
230
echolog(){
231
    log "$@"
232
    echo "$@"
233
}
234

    
235
die(){
236
    echolog "$@"
237
    cat <<EOF
238
If you think configure made a mistake, make sure you are using the latest
239
version from SVN.  If the latest version fails, report the problem to the
240
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
241
EOF
242
    if disabled logging; then
243
        cat <<EOF
244
Rerun configure with logging enabled (do not use --disable-logging), and
245
include the log this produces with your report.
246
EOF
247
    else
248
cat <<EOF
249
Include the log file "$logfile" produced by configure as this will help
250
solving the problem.
251
EOF
252
    fi
253
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
254
    exit 1
255
}
256

    
257
# Avoid locale weirdness, besides we really just want to translate ASCII.
258
toupper(){
259
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
260
}
261

    
262
tolower(){
263
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
264
}
265

    
266
set_all(){
267
    value=$1
268
    shift
269
    for var in $*; do
270
        eval $var=$value
271
    done
272
}
273

    
274
set_weak(){
275
    value=$1
276
    shift
277
    for var; do
278
        eval : \${$var:=$value}
279
    done
280
}
281

    
282
pushvar(){
283
    for var in $*; do
284
        eval level=\${${var}_level:=0}
285
        eval ${var}_${level}="\$$var"
286
        eval ${var}_level=$(($level+1))
287
    done
288
}
289

    
290
popvar(){
291
    for var in $*; do
292
        eval level=\${${var}_level:-0}
293
        test $level = 0 && continue
294
        eval level=$(($level-1))
295
        eval $var="\${${var}_${level}}"
296
        eval ${var}_level=$level
297
        eval unset ${var}_${level}
298
    done
299
}
300

    
301
enable(){
302
    set_all yes $*
303
}
304

    
305
disable(){
306
    set_all no $*
307
}
308

    
309
enable_weak(){
310
    set_weak yes $*
311
}
312

    
313
disable_weak(){
314
    set_weak no $*
315
}
316

    
317
do_enable_deep(){
318
    for var; do
319
        enabled $var && continue
320
        eval sel="\$${var}_select"
321
        eval sgs="\$${var}_suggest"
322
        pushvar var sgs
323
        enable_deep $sel
324
        popvar sgs
325
        enable_deep_weak $sgs
326
        popvar var
327
    done
328
}
329

    
330
enable_deep(){
331
    do_enable_deep $*
332
    enable $*
333
}
334

    
335
enable_deep_weak(){
336
    do_enable_deep $*
337
    enable_weak $*
338
}
339

    
340
enabled(){
341
    test "${1#!}" = "$1" && op== || op=!=
342
    eval test "x\$${1#!}" $op "xyes"
343
}
344

    
345
disabled(){
346
    test "${1#!}" = "$1" && op== || op=!=
347
    eval test "x\$${1#!}" $op "xno"
348
}
349

    
350
enabled_all(){
351
    for opt; do
352
        enabled $opt || return 1
353
    done
354
}
355

    
356
disabled_all(){
357
    for opt; do
358
        disabled $opt || return 1
359
    done
360
}
361

    
362
enabled_any(){
363
    for opt; do
364
        enabled $opt && return 0
365
    done
366
}
367

    
368
disabled_any(){
369
    for opt; do
370
        disabled $opt && return 0
371
    done
372
    return 1
373
}
374

    
375
set_default(){
376
    for opt; do
377
        eval : \${$opt:=\$${opt}_default}
378
    done
379
}
380

    
381
is_in(){
382
    value=$1
383
    shift
384
    for var in $*; do
385
        [ $var = $value ] && return 0
386
    done
387
    return 1
388
}
389

    
390
check_deps(){
391
    for cfg; do
392
        cfg="${cfg#!}"
393
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
394
        disabled ${cfg}_checking && continue
395
        enable ${cfg}_checking
396

    
397
        eval dep_all="\$${cfg}_deps"
398
        eval dep_any="\$${cfg}_deps_any"
399
        eval dep_sel="\$${cfg}_select"
400
        eval dep_sgs="\$${cfg}_suggest"
401

    
402
        pushvar cfg dep_all dep_any dep_sel dep_sgs
403
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
404
        popvar cfg dep_all dep_any dep_sel dep_sgs
405

    
406
        enabled_all  $dep_all || disable $cfg
407
        enabled_any  $dep_any || disable $cfg
408
        disabled_any $dep_sel && disable $cfg
409

    
410
        if enabled $cfg; then
411
            eval dep_extralibs="\$${cfg}_extralibs"
412
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
413
            enable_deep $dep_sel
414
            enable_deep_weak $dep_sgs
415
        fi
416

    
417
        disable ${cfg}_checking
418
    done
419
}
420

    
421
print_config(){
422
    pfx=$1
423
    header=$2
424
    makefile=$3
425
    shift 3
426
    for cfg; do
427
        ucname="`toupper $cfg`"
428
        if enabled $cfg; then
429
            echo "#define ${pfx}${ucname} 1" >> $header
430
            echo "${pfx}${ucname}=yes" >> $makefile
431
        else
432
            echo "#define ${pfx}${ucname} 0" >> $header
433
        fi
434
    done
435
}
436

    
437
flags_saved(){
438
    (: ${SAVE_CFLAGS?}) 2> /dev/null
439
}
440

    
441
save_flags(){
442
    flags_saved && return
443
    SAVE_CFLAGS="$CFLAGS"
444
    SAVE_LDFLAGS="$LDFLAGS"
445
    SAVE_extralibs="$extralibs"
446
}
447

    
448
restore_flags(){
449
    flags_saved || return
450
    CFLAGS="$SAVE_CFLAGS"
451
    LDFLAGS="$SAVE_LDFLAGS"
452
    extralibs="$SAVE_extralibs"
453
    unset SAVE_CFLAGS
454
    unset SAVE_LDFLAGS
455
    unset SAVE_extralibs
456
}
457

    
458
temp_cflags(){
459
    save_flags
460
    CFLAGS="$CFLAGS $*"
461
}
462

    
463
temp_ldflags(){
464
    save_flags
465
    LDFLAGS="$LDFLAGS $*"
466
}
467

    
468
temp_extralibs(){
469
    save_flags
470
    extralibs="$extralibs $*"
471
}
472

    
473
append(){
474
    var=$1
475
    shift
476
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
477
    eval "$var=\"\$$var $*\""
478
}
479

    
480
add_cflags(){
481
    append CFLAGS "$@"
482
}
483

    
484
add_ldflags(){
485
    append LDFLAGS "$@"
486
}
487

    
488
add_extralibs(){
489
    append extralibs "$@"
490
}
491

    
492
check_cmd(){
493
    log "$@"
494
    "$@" >> $logfile 2>&1
495
}
496

    
497
check_cc(){
498
    log check_cc "$@"
499
    cat > $TMPC
500
    log_file $TMPC
501
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
502
}
503

    
504
check_cpp(){
505
    log check_cpp "$@"
506
    cat > $TMPC
507
    log_file $TMPC
508
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
509
}
510

    
511
check_asm(){
512
    log check_asm "$@"
513
    name="$1"
514
    asm="$2"
515
    shift 2
516
    check_cc "$@" <<EOF && enable $name || disable $name
517
void foo(void){ __asm__ volatile($asm); }
518
EOF
519
}
520

    
521
check_yasm(){
522
    log check_yasm "$@"
523
    echo "$1" > $TMPS
524
    log_file $TMPS
525
    shift 1
526
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
527
}
528

    
529
check_ld(){
530
    log check_ld "$@"
531
    check_cc || return
532
    flags=''
533
    libs=''
534
    for f; do
535
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
536
    done
537
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
538
}
539

    
540
check_cflags(){
541
    log check_cflags "$@"
542
    check_cc "$@" <<EOF && add_cflags "$@"
543
int x;
544
EOF
545
}
546

    
547
check_ldflags(){
548
    log check_ldflags "$@"
549
    check_ld "$@" <<EOF && add_ldflags "$@"
550
int main(void){ return 0; }
551
EOF
552
}
553

    
554
check_header(){
555
    log check_header "$@"
556
    header=$1
557
    shift
558
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
559
    disable $var
560
    check_cpp "$@" <<EOF && enable $var
561
#include <$header>
562
int x;
563
EOF
564
}
565

    
566
check_func(){
567
    log check_func "$@"
568
    func=$1
569
    shift
570
    disable $func
571
    check_ld "$@" <<EOF && enable $func
572
extern int $func();
573
int main(void){ $func(); }
574
EOF
575
}
576

    
577
check_func_headers(){
578
    log check_func_headers "$@"
579
    headers=$1
580
    func=$2
581
    shift 2
582
    disable $func
583
    incs=""
584
    for hdr in $headers; do
585
        incs="$incs
586
#include <$hdr>"
587
    done
588
    check_ld "$@" <<EOF && enable $func
589
$incs
590
int main(int argc, char **argv){
591
    (void) $func;
592
    return 0;
593
}
594
EOF
595
}
596

    
597
check_cpp_condition(){
598
    log check_cpp_condition "$@"
599
    header=$1
600
    condition=$2
601
    check_cpp <<EOF
602
#include <$header>
603
#if !($condition)
604
#error "unsatisfied condition: $condition"
605
#endif
606
EOF
607
}
608

    
609
check_lib(){
610
    log check_lib "$@"
611
    header="$1"
612
    func="$2"
613
    shift 2
614
    temp_extralibs "$@"
615
    check_header $header && check_func $func && add_extralibs "$@"
616
    err=$?
617
    restore_flags
618
    return $err
619
}
620

    
621
check_lib2(){
622
    log check_lib2 "$@"
623
    headers="$1"
624
    func="$2"
625
    shift 2
626
    temp_extralibs "$@"
627
    check_func_headers "$headers" $func && add_extralibs "$@"
628
    err=$?
629
    restore_flags
630
    return $err
631
}
632

    
633
check_exec(){
634
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
635
}
636

    
637
check_exec_crash(){
638
    code=`cat`
639

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

    
646
    (check_exec "$@") >> $logfile 2>&1 <<EOF
647
#include <signal.h>
648
static void sighandler(int sig){
649
    raise(SIGTERM);
650
}
651
int main(void){
652
    signal(SIGILL, sighandler);
653
    signal(SIGFPE, sighandler);
654
    signal(SIGSEGV, sighandler);
655
#ifdef SIGBUS
656
    signal(SIGBUS, sighandler);
657
#endif
658
    { $code }
659
}
660
EOF
661
}
662

    
663
check_type(){
664
    log check_type "$@"
665
    headers=$1
666
    type=$2
667
    shift 2
668
    disable $type
669
    incs=""
670
    for hdr in $headers; do
671
        incs="$incs
672
#include <$hdr>"
673
    done
674
    check_cc "$@" <<EOF && enable $type
675
$incs
676
$type v;
677
EOF
678
}
679

    
680
require(){
681
    name="$1"
682
    header="$2"
683
    func="$3"
684
    shift 3
685
    check_lib $header $func "$@" || die "ERROR: $name not found"
686
}
687

    
688
require2(){
689
    name="$1"
690
    headers="$2"
691
    func="$3"
692
    shift 3
693
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
694
}
695

    
696
check_foo_config(){
697
    cfg=$1
698
    pkg=$2
699
    header=$3
700
    func=$4
701
    shift 4
702
    disable $cfg
703
    check_cmd ${pkg}-config --version
704
    err=$?
705
    if test "$err" = 0; then
706
        temp_cflags `${pkg}-config --cflags`
707
        temp_extralibs `${pkg}-config --libs`
708
        check_lib "$@" $header $func && enable $cfg
709
    fi
710
    return $err
711
}
712

    
713
apply(){
714
    file=$1
715
    shift
716
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
717
}
718

    
719
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
720
# system-dependent things.
721

    
722
COMPONENT_LIST="
723
    bsfs
724
    decoders
725
    demuxers
726
    encoders
727
    filters
728
    indevs
729
    muxers
730
    outdevs
731
    parsers
732
    protocols
733
"
734

    
735
CONFIG_LIST="
736
    $COMPONENT_LIST
737
    aandct
738
    avfilter
739
    avfilter_lavf
740
    avisynth
741
    beos_netserver
742
    bzlib
743
    fastdiv
744
    ffmpeg
745
    ffplay
746
    ffserver
747
    fft
748
    golomb
749
    gpl
750
    gprof
751
    gray
752
    hardcoded_tables
753
    ipv6
754
    libamr_nb
755
    libamr_wb
756
    libdc1394
757
    libdirac
758
    libfaac
759
    libfaad
760
    libfaadbin
761
    libgsm
762
    libmp3lame
763
    libnut
764
    libschroedinger
765
    libspeex
766
    libtheora
767
    libvorbis
768
    libx264
769
    libxvid
770
    mdct
771
    memalign_hack
772
    mlib
773
    mpegaudio_hp
774
    network
775
    nonfree
776
    postproc
777
    powerpc_perf
778
    shared
779
    small
780
    static
781
    swscale
782
    vdpau
783
    vhook
784
    x11grab
785
    xvmc
786
    zlib
787
"
788

    
789
THREADS_LIST='
790
    beosthreads
791
    os2threads
792
    pthreads
793
    w32threads
794
'
795

    
796
ARCH_LIST='
797
    alpha
798
    arm
799
    bfin
800
    ia64
801
    m68k
802
    mips
803
    parisc
804
    ppc
805
    s390
806
    sh4
807
    sparc
808
    sparc64
809
    x86
810
    x86_32
811
    x86_64
812
'
813

    
814
ARCH_EXT_LIST='
815
    altivec
816
    armv5te
817
    armv6
818
    armv6t2
819
    armvfp
820
    iwmmxt
821
    mmi
822
    mmx
823
    mmx2
824
    neon
825
    ppc4xx
826
    sse
827
    ssse3
828
    vis
829
'
830

    
831
HAVE_LIST="
832
    $ARCH_EXT_LIST
833
    $THREADS_LIST
834
    altivec_h
835
    arpa_inet_h
836
    bswap
837
    closesocket
838
    cmov
839
    conio_h
840
    dcbzl
841
    dev_bktr_ioctl_bt848_h
842
    dev_bktr_ioctl_meteor_h
843
    dev_ic_bt8xx_h
844
    dev_video_meteor_ioctl_meteor_h
845
    dev_video_bktr_ioctl_bt848_h
846
    dlfcn_h
847
    dlopen
848
    dos_paths
849
    ebp_available
850
    ebx_available
851
    fast_64bit
852
    fast_cmov
853
    fast_unaligned
854
    fork
855
    freetype2
856
    gethrtime
857
    GetProcessTimes
858
    getrusage
859
    imlib2
860
    inet_aton
861
    inline_asm
862
    libdc1394_1
863
    libdc1394_2
864
    llrint
865
    lrint
866
    lrintf
867
    machine_ioctl_bt848_h
868
    machine_ioctl_meteor_h
869
    malloc_h
870
    memalign
871
    mkstemp
872
    pld
873
    posix_memalign
874
    ppc64
875
    round
876
    roundf
877
    sdl
878
    sdl_video_size
879
    setmode
880
    socklen_t
881
    soundcard_h
882
    poll_h
883
    sys_mman_h
884
    sys_resource_h
885
    sys_select_h
886
    sys_soundcard_h
887
    sys_videoio_h
888
    termios_h
889
    threads
890
    truncf
891
    winsock2_h
892
    yasm
893
"
894

    
895
# options emitted with CONFIG_ prefix but not available on command line
896
CONFIG_EXTRA="
897
    fft_mmx
898
    oldscaler
899
"
900

    
901
CMDLINE_SELECT="
902
    $ARCH_EXT_LIST
903
    $CONFIG_LIST
904
    $THREADS_LIST
905
    cross_compile
906
    debug
907
    extra_warnings
908
    logging
909
    optimizations
910
    stripping
911
"
912

    
913
PATHS_LIST='
914
    bindir
915
    incdir
916
    libdir
917
    mandir
918
    prefix
919
    shlibdir
920
'
921

    
922
CMDLINE_SET="
923
    $PATHS_LIST
924
    arch
925
    build_suffix
926
    cc
927
    cpu
928
    cross_prefix
929
    extra_version
930
    host_cc
931
    host_cflags
932
    host_ldflags
933
    host_libs
934
    logfile
935
    nm
936
    source_path
937
    target_exec
938
    target_os
939
    target_path
940
"
941

    
942
# code dependency declarations
943

    
944
# architecture extensions
945
altivec_deps="ppc"
946
armv5te_deps="arm"
947
armv6_deps="arm"
948
armv6t2_deps="arm"
949
armvfp_deps="arm"
950
iwmmxt_deps="arm"
951
mmi_deps="mips"
952
mmx_deps="x86"
953
mmx2_deps="x86 mmx"
954
neon_deps="arm"
955
ppc4xx_deps="ppc"
956
sse_deps="x86 mmx"
957
ssse3_deps="x86 sse"
958
vis_deps="sparc"
959

    
960
# common features
961
fft_suggest="fft_mmx"
962
fft_mmx_deps="mmx yasm"
963
oldscaler_deps="!swscale"
964

    
965
# decoders / encoders
966
aac_decoder_select="fft mdct"
967
ac3_decoder_deps="gpl"
968
ac3_decoder_select="fft mdct"
969
atrac3_decoder_select="fft mdct"
970
cavs_decoder_select="golomb"
971
cook_decoder_select="fft mdct"
972
cscd_decoder_suggest="zlib"
973
dca_decoder_select="fft mdct"
974
dnxhd_encoder_select="aandct"
975
dxa_decoder_select="zlib"
976
eac3_decoder_deps="gpl"
977
eac3_decoder_select="fft mdct"
978
eatgq_decoder_select="aandct"
979
ffv1_decoder_select="golomb"
980
flac_decoder_select="golomb"
981
flac_encoder_select="golomb"
982
flashsv_decoder_select="zlib"
983
flashsv_encoder_select="zlib"
984
flv_encoder_select="aandct"
985
h261_encoder_select="aandct"
986
h263_encoder_select="aandct"
987
h263p_encoder_select="aandct"
988
h264_decoder_select="golomb"
989
h264_vdpau_decoder_deps="vdpau"
990
imc_decoder_select="fft mdct"
991
jpegls_decoder_select="golomb"
992
jpegls_encoder_select="golomb"
993
ljpeg_encoder_select="aandct"
994
loco_decoder_select="golomb"
995
mjpeg_encoder_select="aandct"
996
mpeg1video_encoder_select="aandct"
997
mpeg2video_encoder_select="aandct"
998
mpeg4_encoder_select="aandct"
999
mpeg_vdpau_decoder_deps="vdpau"
1000
mpeg1_vdpau_decoder_deps="vdpau"
1001
mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
1002
msmpeg4v1_encoder_select="aandct"
1003
msmpeg4v2_encoder_select="aandct"
1004
msmpeg4v3_encoder_select="aandct"
1005
nellymoser_decoder_select="fft mdct"
1006
nellymoser_encoder_select="fft mdct"
1007
png_decoder_select="zlib"
1008
png_encoder_select="zlib"
1009
qdm2_decoder_select="fft mdct"
1010
rv10_encoder_select="aandct"
1011
rv20_encoder_select="aandct"
1012
shorten_decoder_select="golomb"
1013
sonic_decoder_select="golomb"
1014
sonic_encoder_select="golomb"
1015
sonic_ls_encoder_select="golomb"
1016
svq3_decoder_select="golomb"
1017
svq3_decoder_suggest="zlib"
1018
tiff_decoder_suggest="zlib"
1019
tiff_encoder_suggest="zlib"
1020
tscc_decoder_select="zlib"
1021
vc1_vdpau_decoder_deps="vdpau"
1022
vorbis_decoder_select="fft mdct"
1023
vorbis_encoder_select="fft mdct"
1024
wmav1_decoder_select="fft mdct"
1025
wmav1_encoder_select="fft mdct"
1026
wmav2_decoder_select="fft mdct"
1027
wmav2_encoder_select="fft mdct"
1028
wmv1_encoder_select="aandct"
1029
wmv2_encoder_select="aandct"
1030
wmv3_vdpau_decoder_deps="vdpau"
1031
zlib_decoder_select="zlib"
1032
zlib_encoder_select="zlib"
1033
zmbv_decoder_select="zlib"
1034
zmbv_encoder_select="zlib"
1035

    
1036
# external libraries
1037
libamr_nb_decoder_deps="libamr_nb"
1038
libamr_nb_encoder_deps="libamr_nb"
1039
libamr_wb_decoder_deps="libamr_wb"
1040
libamr_wb_encoder_deps="libamr_wb"
1041
libdirac_decoder_deps="libdirac !libschroedinger"
1042
libdirac_encoder_deps="libdirac"
1043
libfaac_encoder_deps="libfaac"
1044
libfaad_decoder_deps="libfaad"
1045
libfaadbin_decoder_extralibs='$ldl'
1046
libgsm_decoder_deps="libgsm"
1047
libgsm_encoder_deps="libgsm"
1048
libgsm_ms_decoder_deps="libgsm"
1049
libgsm_ms_encoder_deps="libgsm"
1050
libmp3lame_encoder_deps="libmp3lame"
1051
libschroedinger_decoder_deps="libschroedinger"
1052
libschroedinger_encoder_deps="libschroedinger"
1053
libspeex_decoder_deps="libspeex"
1054
libtheora_encoder_deps="libtheora"
1055
libvorbis_encoder_deps="libvorbis"
1056
libx264_encoder_deps="libx264"
1057
libxvid_encoder_deps="libxvid"
1058
mpeg4aac_decoder_deps="libfaad"
1059
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1060

    
1061
# demuxers / muxers
1062
ac3_demuxer_deps="ac3_parser"
1063
audio_beos_demuxer_deps="audio_beos"
1064
audio_beos_demuxer_extralibs="-lmedia -lbe"
1065
audio_beos_muxer_deps="audio_beos"
1066
audio_beos_muxer_extralibs="-lmedia -lbe"
1067
avisynth_demuxer_deps="avisynth"
1068
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1069
dirac_demuxer_deps="dirac_parser"
1070
dv1394_demuxer_deps="dv1394 dv_demuxer"
1071
libdc1394_demuxer_deps="libdc1394"
1072
libnut_demuxer_deps="libnut"
1073
libnut_muxer_deps="libnut"
1074
matroska_demuxer_suggest="zlib bzlib"
1075
mov_demuxer_suggest="zlib"
1076
mp3_demuxer_deps="mpegaudio_parser"
1077
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1078
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1079
redir_demuxer_deps="network"
1080
rtp_muxer_deps="network rtp_protocol"
1081
rtsp_demuxer_deps="sdp_demuxer"
1082
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1083
v4l_demuxer_deps="linux_videodev_h"
1084
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1085
vfwcap_demuxer_deps="capCreateCaptureWindow"
1086
vfwcap_demuxer_extralibs="-lvfw32"
1087
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1088
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1089

    
1090
# protocols
1091
http_protocol_deps="network"
1092
rtp_protocol_deps="udp_protocol"
1093
tcp_protocol_deps="network"
1094
udp_protocol_deps="network"
1095

    
1096
# filters
1097
movie_filter_deps="avfilter_lavf"
1098

    
1099
# programs
1100
ffplay_deps="sdl"
1101
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1102
ffserver_extralibs='$ldl'
1103
vhook_extralibs='$ldl'
1104

    
1105

    
1106
# default parameters
1107

    
1108
logfile="config.err"
1109

    
1110
# installation paths
1111
prefix_default="/usr/local"
1112
bindir_default='${prefix}/bin'
1113
incdir_default='${prefix}/include'
1114
libdir_default='${prefix}/lib'
1115
mandir_default='${prefix}/share/man'
1116
shlibdir_default="$libdir_default"
1117

    
1118
# toolchain
1119
ar="ar"
1120
cc_default="gcc"
1121
host_cc_default="gcc"
1122
ln_s="ln -sf"
1123
nm_default="nm"
1124
objformat="elf"
1125
ranlib="ranlib"
1126
strip="strip"
1127
yasmexe="yasm"
1128

    
1129
# machine
1130
arch=`uname -m`
1131
cpu="generic"
1132

    
1133
# OS
1134
target_os=$(tolower $(uname -s))
1135

    
1136
# configurable options
1137
enable debug
1138
enable ffmpeg
1139
enable ffplay
1140
enable ffserver
1141
enable ipv6
1142
enable mpegaudio_hp
1143
enable network
1144
enable oldscaler
1145
enable optimizations
1146
enable protocols
1147
enable static
1148
enable stripping
1149
vhook="default"
1150

    
1151
# build settings
1152
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1153
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1154
VHOOKSHFLAGS='$(SHFLAGS)'
1155
FFSERVERLDFLAGS=-Wl,-E
1156
LIBPREF="lib"
1157
LIBSUF=".a"
1158
FULLNAME='$(NAME)$(BUILDSUF)'
1159
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1160
SLIBPREF="lib"
1161
SLIBSUF=".so"
1162
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1163
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1164
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1165
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1166

    
1167
host_cflags='-O3 -g -Wall'
1168
host_libs='-lm'
1169

    
1170
target_path='.'
1171

    
1172
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1173
# full relative path for objects in subdirectories for non-recursive Make.
1174
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1175

    
1176
# find source path
1177
source_path="`dirname \"$0\"`"
1178
enable source_path_used
1179
if test -z "$source_path" -o "$source_path" = "." ; then
1180
    source_path="`pwd`"
1181
    disable source_path_used
1182
else
1183
    source_path="`cd \"$source_path\"; pwd`"
1184
    echo "$source_path" | grep -q '[[:blank:]]' &&
1185
        die "Out of tree builds are impossible with whitespace in source path."
1186
fi
1187

    
1188
FFMPEG_CONFIGURATION="$@"
1189

    
1190
find_things(){
1191
    thing=$1
1192
    pattern=$2
1193
    file=$source_path/$3
1194
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1195
}
1196

    
1197
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1198
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1199
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1200
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1201
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1202
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1203
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1204
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1205
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1206
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1207

    
1208
enable $ARCH_EXT_LIST \
1209
       $DECODER_LIST \
1210
       $ENCODER_LIST \
1211
       $PARSER_LIST \
1212
       $BSF_LIST \
1213
       $DEMUXER_LIST \
1214
       $MUXER_LIST \
1215
       $FILTER_LIST \
1216
       $PROTOCOL_LIST \
1217
       $INDEV_LIST \
1218
       $OUTDEV_LIST \
1219

    
1220
die_unknown(){
1221
    echo "Unknown option \"$1\"."
1222
    echo "See $0 --help for available options."
1223
    exit 1
1224
}
1225

    
1226
show_list() {
1227
    suffix=_$1
1228
    shift
1229
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1230
    exit 0
1231
}
1232

    
1233
for opt do
1234
    optval="${opt#*=}"
1235
    case "$opt" in
1236
    --extra-cflags=*) add_cflags $optval
1237
    ;;
1238
    --extra-ldflags=*) add_ldflags $optval
1239
    ;;
1240
    --extra-libs=*) add_extralibs $optval
1241
    ;;
1242
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1243
    ;;
1244
    --enable-debug=*) debuglevel="$optval"
1245
    ;;
1246
    --enable-*=*|--disable-*=*)
1247
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1248
    case "$thing" in
1249
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1250
        *) die_unknown "$opt" ;;
1251
    esac
1252
    ;;
1253
    --enable-?*|--disable-?*)
1254
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1255
    if is_in $option $COMPONENT_LIST; then
1256
        eval $action \$$(toupper ${option%s})_LIST
1257
    elif is_in $option $CMDLINE_SELECT; then
1258
        $action $option
1259
    else
1260
        die_unknown $opt
1261
    fi
1262
    ;;
1263
    --list-*)
1264
        NAME="${opt#--list-}"
1265
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1266
        NAME=${NAME%s}
1267
        eval show_list $NAME \$$(toupper $NAME)_LIST
1268
    ;;
1269
    --help|-h) show_help
1270
    ;;
1271
    *)
1272
    optname="${opt%%=*}"
1273
    optname="${optname#--}"
1274
    optname=$(echo "$optname" | sed 's/-/_/g')
1275
    is_in $optname $CMDLINE_SET || die_unknown $opt
1276
    eval $optname='$optval'
1277
    ;;
1278
    esac
1279
done
1280

    
1281
disabled logging && logfile=/dev/null
1282

    
1283
echo "# $0 $@" > $logfile
1284
set >> $logfile
1285

    
1286
test -n "$cross_prefix" && enable cross_compile
1287

    
1288
ar="${cross_prefix}${ar}"
1289
cc_default="${cross_prefix}${cc_default}"
1290
nm_default="${cross_prefix}${nm_default}"
1291
ranlib="${cross_prefix}${ranlib}"
1292
strip="${cross_prefix}${strip}"
1293

    
1294
set_default cc nm
1295
enabled cross_compile || host_cc_default=$cc
1296
set_default host_cc
1297

    
1298
# set temporary file name
1299
: ${TMPDIR:=$TEMPDIR}
1300
: ${TMPDIR:=$TMP}
1301
: ${TMPDIR:=/tmp}
1302

    
1303
TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1304
TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1305
TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1306
TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1307
TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1308
TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1309

    
1310
check_cflags -std=c99
1311

    
1312
case "$arch" in
1313
    i386|i486|i586|i686|i86pc|BePC)
1314
        arch="x86"
1315
        subarch="x86_32"
1316
        enable fast_unaligned
1317
    ;;
1318
    x86_64|amd64)
1319
        arch="x86"
1320
        subarch="x86_32"
1321
        enable cmov
1322
        enable fast_cmov
1323
        enable fast_unaligned
1324
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1325
        int test[sizeof(char*) - 7];
1326
EOF
1327
    ;;
1328
    arm|armv[4567]*l)
1329
        arch="arm"
1330
    ;;
1331
    alpha)
1332
        arch="alpha"
1333
        enable fast_64bit
1334
        check_cflags -mieee
1335
    ;;
1336
    "Power Macintosh"|ppc|powerpc)
1337
        arch="ppc"
1338
        enable fast_unaligned
1339
    ;;
1340
    ppc64)
1341
        arch="ppc"
1342
        enable fast_64bit
1343
        enable fast_unaligned
1344
    ;;
1345
    mips|mipsel|IP*)
1346
        arch="mips"
1347
    ;;
1348
    mips64)
1349
        arch="mips"
1350
        enable fast_64bit
1351
    ;;
1352
    sun4u|sparc64)
1353
        arch="sparc"
1354
        subarch="sparc64"
1355
        enable fast_64bit
1356
    ;;
1357
    sparc)
1358
        arch="sparc"
1359
    ;;
1360
    sh4|sh)
1361
        arch="sh4"
1362
    ;;
1363
    parisc|hppa)
1364
        arch="parisc"
1365
    ;;
1366
    parisc64|hppa64)
1367
        arch="parisc"
1368
        enable fast_64bit
1369
    ;;
1370
    s390|s390x)
1371
        arch="s390"
1372
    ;;
1373
    m68k)
1374
        arch="m68k"
1375
    ;;
1376
    ia64)
1377
        arch="ia64"
1378
        enable fast_64bit
1379
    ;;
1380
    bfin)
1381
        arch="bfin"
1382
    ;;
1383
    *)
1384
        arch="unknown"
1385
    ;;
1386
esac
1387

    
1388
enable $arch $subarch
1389

    
1390
# OS specific
1391
case $target_os in
1392
    beos|haiku|zeta)
1393
        prefix_default="$HOME/config"
1394
        # helps building libavcodec
1395
        add_cflags -DPIC -fomit-frame-pointer
1396
        # 3 gcc releases known for BeOS, each with ugly bugs
1397
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1398
        case "$gcc_version" in
1399
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1400
            disable mmx
1401
            ;;
1402
          *20010315*) echo "BeBits gcc"
1403
            add_cflags -fno-expensive-optimizations
1404
            ;;
1405
        esac
1406
        SHFLAGS=-nostart
1407
        # enable BeOS things
1408
        enable audio_beos
1409
        # no need for libm, but the inet stuff
1410
        # Check for BONE
1411
        # XXX: actually should check for NOT net_server
1412
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1413
            network_extralibs="-lbind -lsocket"
1414
        else
1415
            enable beos_netserver
1416
            network_extralibs="-lnet"
1417
        fi ;;
1418
    sunos)
1419
        FFSERVERLDFLAGS=""
1420
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1421
        network_extralibs="-lsocket -lnsl"
1422
        add_cflags -D__EXTENSIONS__
1423
        ;;
1424
    netbsd)
1425
        oss_demuxer_extralibs="-lossaudio"
1426
        oss_muxer_extralibs="-lossaudio"
1427
        ;;
1428
    openbsd)
1429
        disable need_memalign
1430
        LIBOBJFLAGS='$(PIC)'
1431
        SHFLAGS='-shared'
1432
        oss_demuxer_extralibs="-lossaudio"
1433
        oss_muxer_extralibs="-lossaudio"
1434
        ;;
1435
    freebsd)
1436
        disable need_memalign
1437
        ;;
1438
    bsd/os)
1439
        osextralibs="-lpoll -lgnugetopt"
1440
        strip="strip -d"
1441
        ;;
1442
    darwin)
1443
        disable need_memalign
1444
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1445
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1446
        strip="strip -x"
1447
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1448
        SLIBSUF=".dylib"
1449
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1450
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1451
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1452
        objformat="macho"
1453
        enabled x86_64 && objformat="macho64"
1454
        ;;
1455
    mingw32*)
1456
        target_os=mingw32
1457
        LIBTARGET=i386
1458
        if enabled x86_64; then
1459
            disable need_memalign
1460
            LIBTARGET=x64
1461
        fi
1462
        shlibdir_default="$bindir_default"
1463
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1464
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1465
        if enabled swscale; then
1466
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1467
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1468
        fi
1469
        disable ffserver
1470
        SLIBPREF=""
1471
        SLIBSUF=".dll"
1472
        EXESUF=".exe"
1473
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1474
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1475
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1476
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1477
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1478
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1479
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1480
        objformat="win32"
1481
        enable dos_paths
1482
        check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1483
            die "ERROR: MinGW runtime version must be >= 3.15."
1484
        enabled_any avisynth vfwcap_demuxer &&
1485
            { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1486
              die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1487
        ;;
1488
    cygwin*)
1489
        target_os=cygwin
1490
        shlibdir_default="$bindir_default"
1491
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1492
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1493
        if enabled swscale; then
1494
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1495
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1496
        fi
1497
        EXESUF=".exe"
1498
        SLIBPREF="cyg"
1499
        SLIBSUF=".dll"
1500
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1501
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1502
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1503
        objformat="win32"
1504
        enable dos_paths
1505
        ;;
1506
    *-dos|freedos|opendos)
1507
        disable ffplay ffserver vhook
1508
        disable $INDEV_LIST $OUTDEV_LIST
1509
        network_extralibs="-lsocket"
1510
        EXESUF=".exe"
1511
        objformat="coff"
1512
        enable dos_paths
1513
        ;;
1514
    linux)
1515
        enable dv1394
1516
        ;;
1517
    irix*)
1518
        target_os=irix
1519
        ranlib="echo ignoring ranlib"
1520
        ;;
1521
    os/2*)
1522
        strip="lxlite"
1523
        ln_s="cp -f"
1524
        EXESUF=".exe"
1525
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1526
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1527
        FFSERVERLDFLAGS=""
1528
        LIBSUF="_s.a"
1529
        SLIBPREF=""
1530
        SLIBSUF=".dll"
1531
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1532
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1533
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1534
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1535
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1536
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1537
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1538
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1539
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1540
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1541
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1542
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1543
        disable vhook
1544
        enable dos_paths
1545
        ;;
1546
    interix)
1547
        disable vhook
1548
        ;;
1549

    
1550
    *)
1551
        target_os="${target_os}-UNKNOWN"
1552
        ;;
1553
esac
1554

    
1555
set_default $PATHS_LIST
1556

    
1557
add_extralibs $osextralibs
1558

    
1559
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1560
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1561

    
1562
# we need to build at least one lib type
1563
if ! enabled_any static shared; then
1564
    cat <<EOF
1565
At least one library type must be built.
1566
Specify --enable-static to build the static libraries or --enable-shared to
1567
build the shared libraries as well. To only build the shared libraries specify
1568
--disable-static in addition to --enable-shared.
1569
EOF
1570
    exit 1;
1571
fi
1572

    
1573
disabled static && LIBNAME=""
1574

    
1575
if enabled_any libfaad libfaadbin ; then
1576
    if check_header faad.h; then
1577
        check_cc <<EOF
1578
#include <faad.h>
1579
#ifndef FAAD2_VERSION
1580
ok faad1
1581
#endif
1582
int main(void) { return 0; }
1583
EOF
1584
        test $? = 0 && enable libfaad2
1585
    else
1586
        die "FAAD test failed."
1587
    fi
1588
fi
1589

    
1590

    
1591
if ! enabled gpl; then
1592
    die_gpl_disabled(){
1593
        name=$1
1594
        shift
1595
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1596
    }
1597
    die_gpl_disabled "The Postprocessing code" postproc
1598
    die_gpl_disabled "libx264"                 libx264
1599
    die_gpl_disabled "libxvidcore"             libxvid
1600
    die_gpl_disabled "FAAD2"                   libfaad2
1601
    die_gpl_disabled "The X11 grabber"         x11grab
1602
    die_gpl_disabled "The software scaler"     swscale
1603
fi
1604

    
1605
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1606
    die "libamr is nonfree and --enable-nonfree is not specified."
1607
fi
1608

    
1609
check_deps $ARCH_EXT_LIST
1610

    
1611
test -z "$need_memalign" && need_memalign="$mmx"
1612

    
1613
#Darwin CC versions
1614
if test $target_os = darwin; then
1615
    if $cc -v 2>&1 | grep -q xlc; then
1616
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1617
    else
1618
        add_cflags -pipe
1619
        check_cflags -force_cpusubtype_ALL
1620
        check_cflags -Wno-sign-compare
1621
        enabled shared || check_cflags -mdynamic-no-pic
1622
    fi
1623
fi
1624

    
1625
disabled optimizations || check_cflags -fomit-frame-pointer
1626

    
1627
# Add processor-specific flags
1628
if test $cpu != "generic"; then
1629
    warn_altivec(){
1630
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1631
    }
1632
    case $cpu in
1633
        601|ppc601|PowerPC601)
1634
            add_cflags -mcpu=601
1635
            warn_altivec enabled PPC601
1636
        ;;
1637
        603*|ppc603*|PowerPC603*)
1638
            add_cflags -mcpu=603
1639
            warn_altivec enabled PPC603
1640
        ;;
1641
        604*|ppc604*|PowerPC604*)
1642
            add_cflags -mcpu=604
1643
            warn_altivec enabled PPC604
1644
        ;;
1645
        G3|g3|75*|ppc75*|PowerPC75*)
1646
            add_cflags -mcpu=750 -mpowerpc-gfxopt
1647
            warn_altivec enabled PPC75x
1648
        ;;
1649
        G4|g4|745*|ppc745*|PowerPC745*)
1650
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
1651
            warn_altivec disabled PPC745x
1652
        ;;
1653
        74*|ppc74*|PowerPC74*)
1654
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
1655
            warn_altivec disabled PPC74xx
1656
        ;;
1657
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1658
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1659
            warn_altivec disabled PPC970
1660
            enable ppc64
1661
        ;;
1662
        Cell|CELL|cell)
1663
            add_cflags -mcpu=cell
1664
            warn_altivec disabled Cell
1665
            enable ppc64
1666
        ;;
1667
        # targets that do NOT support conditional mov (cmov)
1668
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1669
            add_cflags -march=$cpu
1670
            disable cmov
1671
        ;;
1672
        # targets that do support conditional mov (cmov)
1673
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1674
            add_cflags -march=$cpu
1675
            enable cmov
1676
            enable fast_cmov
1677
        ;;
1678
        # targets that do support conditional mov but on which it's slow
1679
        pentium4|pentium4m|prescott|nocona)
1680
            add_cflags -march=$cpu
1681
            enable cmov
1682
            disable fast_cmov
1683
        ;;
1684
        sparc64)
1685
            add_cflags -mcpu=v9
1686
        ;;
1687
        arm11*|cortex*)
1688
            add_cflags -mcpu=$cpu
1689
            enable fast_unaligned
1690
        ;;
1691
        armv*)
1692
            add_cflags -march=$cpu
1693
        ;;
1694
        arm*)
1695
            add_cflags -mcpu=$cpu
1696
        ;;
1697
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1698
            add_cflags -mcpu=$cpu
1699
        ;;
1700
        *)
1701
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1702
        ;;
1703
    esac
1704
fi
1705

    
1706
# make sure we can execute files in $TMPDIR
1707
cat > $TMPSH 2>> $logfile <<EOF
1708
#! /bin/sh
1709
EOF
1710
chmod +x $TMPSH >> $logfile 2>&1
1711
if ! $TMPSH >> $logfile 2>&1; then
1712
    cat <<EOF
1713
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1714
variable to another directory and make sure that it is not mounted noexec.
1715
EOF
1716
    die "Sanity test failed."
1717
fi
1718
rm $TMPSH
1719

    
1720
# compiler sanity check
1721
check_exec <<EOF
1722
int main(void){ return 0; }
1723
EOF
1724
if test "$?" != 0; then
1725
    echo "$cc is unable to create an executable file."
1726
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1727
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1728
        echo "Only do this if you know what cross compiling means."
1729
    fi
1730
    die "C compiler test failed."
1731
fi
1732

    
1733
check_cc <<EOF || die "Symbol mangling check failed."
1734
int ff_extern;
1735
EOF
1736
sym=$($nm -P -g $TMPO | grep ff_extern)
1737
extern_prefix=${sym%%ff_extern*}
1738

    
1739
check_asm inline_asm '""'
1740

    
1741
if enabled x86; then
1742
    # check whether EBP is available on x86
1743
    # As 'i' is stored on the stack, this program will crash
1744
    # if the base pointer is used to access it because the
1745
    # base pointer is cleared in the inline assembly code.
1746
    check_exec_crash <<EOF && enable ebp_available
1747
    volatile int i=0;
1748
    __asm__ volatile (
1749
        "xorl %%ebp, %%ebp"
1750
    ::: "%ebp");
1751
    return i;
1752
EOF
1753

    
1754
    # check wether EBX is available on x86
1755
    check_asm ebx_available '"":::"%ebx"'
1756

    
1757
    # check whether binutils is new enough to compile SSSE3/MMX2
1758
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1759
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1760

    
1761
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1762

    
1763
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1764
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1765
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1766
    case "$objformat" in
1767
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1768
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1769
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1770
    esac
1771
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1772
fi
1773

    
1774
# check for assembler specific support
1775

    
1776
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1777
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1778

    
1779
# check for SIMD availability
1780

    
1781
# AltiVec flags: The FSF version of GCC differs from the Apple version
1782
if enabled altivec; then
1783
    check_cflags -maltivec -mabi=altivec &&
1784
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1785
        check_cflags -faltivec
1786

    
1787
    # check if our compiler supports Motorola AltiVec C API
1788
    check_cc <<EOF || disable altivec
1789
$inc_altivec_h
1790
int main(void) {
1791
    vector signed int v1, v2, v3;
1792
    v1 = vec_add(v2,v3);
1793
    return 0;
1794
}
1795
EOF
1796

    
1797
    # check if our compiler supports braces for vector declarations
1798
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1799
$inc_altivec_h
1800
int main (void) { (vector int) {1}; return 0; }
1801
EOF
1802
fi
1803

    
1804
# We have to check if pld is a nop and disable it.
1805
enabled arm     && check_asm pld     '"pld [r0]"'
1806
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1807
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1808
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1809
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1810
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1811
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1812
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1813
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1814

    
1815
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1816

    
1817
# ---
1818
# big/little-endian test
1819
check_cc <<EOF || die "endian test failed"
1820
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1821
EOF
1822
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1823

    
1824
# ---
1825
# check availability of some header files
1826

    
1827
if check_func dlopen; then
1828
    ldl=
1829
elif check_func dlopen -ldl; then
1830
    ldl=-ldl
1831
fi
1832

    
1833
check_func  fork
1834
check_func  gethrtime
1835
check_func  getrusage
1836
check_func  inet_aton $network_extralibs
1837
check_func  memalign
1838
check_func  mkstemp
1839
check_func  posix_memalign
1840
check_func_headers io.h setmode
1841
check_func_headers windows.h GetProcessTimes
1842

    
1843
check_header conio.h
1844
check_header dlfcn.h
1845
check_header malloc.h
1846
check_header poll.h
1847
check_header sys/mman.h
1848
check_header sys/resource.h
1849
check_header sys/select.h
1850
check_header termios.h
1851
check_header vdpau/vdpau.h
1852
check_header vdpau/vdpau_x11.h
1853
check_header X11/extensions/XvMClib.h
1854

    
1855
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1856
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1857
fi
1858

    
1859
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1860
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1861

    
1862
# check for some common methods of building with pthread support
1863
# do this before the optional library checks as some of them require pthreads
1864
if enabled pthreads; then
1865
    if check_func pthread_create; then
1866
        :
1867
    elif check_func pthread_create -pthread; then
1868
        add_cflags -pthread
1869
        add_extralibs -pthread
1870
    elif check_func pthread_create -pthreads; then
1871
        add_cflags -pthreads
1872
        add_extralibs -pthreads
1873
    elif check_func pthread_create -lpthreadGC2; then
1874
        add_extralibs -lpthreadGC2
1875
    elif ! check_lib pthread.h pthread_create -lpthread; then
1876
        die "ERROR: can't find pthreads library"
1877
    fi
1878
fi
1879

    
1880
for thread in $THREADS_LIST; do
1881
    if enabled $thread; then
1882
        test -n "$thread_type" &&
1883
            die "ERROR: Only one thread type must be selected." ||
1884
            thread_type="$thread"
1885
    fi
1886
done
1887

    
1888
check_lib math.h sin -lm
1889

    
1890
# test for C99 functions in math.h
1891
for func in llrint lrint lrintf round roundf truncf; do
1892
    check_exec <<EOF && enable $func || disable $func
1893
#include <math.h>
1894
int main(void) { return ($func(3.999f) > 0)?0:1; }
1895
EOF
1896
done
1897

    
1898
# these are off by default, so fail if requested and not available
1899
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1900
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1901
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1902
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1903
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1904
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1905
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1906
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1907
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1908
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1909
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1910
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1911
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1912
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1913
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1914
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1915
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1916
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1917
                        die "ERROR: libx264 version must be >= 0.65."; }
1918
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1919
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1920

    
1921
# libdc1394 check
1922
if enabled libdc1394; then
1923
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1924
        enable libdc1394_2; } ||
1925
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1926
        enable libdc1394_1; } ||
1927
    die "ERROR: No version of libdc1394 found "
1928
fi
1929

    
1930

    
1931
_restrict=
1932
for restrict_keyword in restrict __restrict__ __restrict; do
1933
    check_cc <<EOF && _restrict=$restrict_keyword && break
1934
void foo(char * $restrict_keyword p);
1935
EOF
1936
done
1937

    
1938
test "$vhook" = "default" && vhook="$dlopen"
1939

    
1940
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1941
    disable vhook
1942
    echo
1943
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1944
    echo "Patches welcome."
1945
    echo
1946
fi
1947

    
1948
if enabled vhook; then
1949
    check_ldflags -rdynamic
1950
    check_ldflags -export-dynamic
1951
fi
1952

    
1953
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1954
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1955

    
1956
##########################################
1957
# SDL check
1958

    
1959
disable sdl_too_old
1960
disable sdl
1961
SDL_CONFIG="${cross_prefix}sdl-config"
1962
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1963
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1964
    temp_cflags $sdl_cflags
1965
    temp_extralibs `"${SDL_CONFIG}" --libs`
1966
    if check_lib2 SDL.h SDL_Init; then
1967
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1968
        if test "$_sdlversion" -lt 121 ; then
1969
            enable sdl_too_old
1970
        else
1971
            enable sdl
1972
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1973
#include <SDL.h>
1974
int main(int argc, char **argv){
1975
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1976
    int w = vi->current_w;
1977
    return 0;
1978
}
1979
EOF
1980
        fi
1981
    fi
1982
    restore_flags
1983
fi
1984

    
1985
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1986

    
1987
##########################################
1988
# Network check
1989

    
1990
if enabled network; then
1991
    check_type "sys/types.h sys/socket.h" socklen_t
1992
    # Prefer arpa/inet.h over winsock2
1993
    if check_header arpa/inet.h ; then
1994
        check_func closesocket
1995
    elif check_header winsock2.h ; then
1996
        network_extralibs="-lws2_32"
1997
        check_type ws2tcpip.h socklen_t
1998
        check_func_headers winsock2.h closesocket
1999
    fi
2000
fi
2001

    
2002
##########################################
2003
# IPv6 check
2004

    
2005
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2006
#include <sys/types.h>
2007
#include <sys/socket.h>
2008
#include <netinet/in.h>
2009
#include <netdb.h>
2010
int main(void) {
2011
    struct sockaddr_storage saddr;
2012
    struct ipv6_mreq mreq6;
2013
    getaddrinfo(0,0,0,0);
2014
    getnameinfo(0,0,0,0,0,0,0);
2015
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2016
}
2017
EOF
2018

    
2019
check_header linux/videodev.h
2020
check_header linux/videodev2.h
2021
check_header sys/videoio.h
2022

    
2023
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2024

    
2025
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2026
{ check_header dev/bktr/ioctl_meteor.h &&
2027
  check_header dev/bktr/ioctl_bt848.h; } ||
2028
{ check_header machine/ioctl_meteor.h &&
2029
  check_header machine/ioctl_bt848.h; } ||
2030
{ check_header dev/video/meteor/ioctl_meteor.h &&
2031
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2032
check_header dev/ic/bt8xx.h
2033

    
2034
check_header sys/soundcard.h
2035
check_header soundcard.h
2036

    
2037
# deal with the X11 frame grabber
2038
enabled x11grab                         &&
2039
check_header X11/Xlib.h                 &&
2040
check_header X11/extensions/XShm.h      &&
2041
check_func XOpenDisplay -lX11           &&
2042
check_func XShmCreateImage -lX11 -lXext
2043

    
2044
enabled debug && add_cflags -g"$debuglevel"
2045

    
2046
# add some useful compiler flags if supported
2047
check_cflags -Wdeclaration-after-statement
2048
check_cflags -Wall
2049
check_cflags -Wno-switch
2050
check_cflags -Wdisabled-optimization
2051
check_cflags -Wpointer-arith
2052
check_cflags -Wredundant-decls
2053
check_cflags -Wno-pointer-sign
2054
check_cflags -Wcast-qual
2055
check_cflags -Wwrite-strings
2056
check_cflags -Wtype-limits
2057
check_cflags -Wundef
2058
enabled extra_warnings && check_cflags -Winline
2059

    
2060
# add some linker flags
2061
check_ldflags -Wl,--warn-common
2062
check_ldflags -Wl,--as-needed
2063
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'
2064
check_ldflags -Wl,-Bsymbolic
2065

    
2066
if enabled small; then
2067
    check_cflags -Os            # not all compilers support -Os
2068
    optimizations="small"
2069
elif enabled optimizations; then
2070
    if $cc -v 2>&1 | grep -q xlc; then
2071
        add_cflags  -O5
2072
        add_ldflags -O5
2073
    else
2074
        add_cflags -O3
2075
    fi
2076
fi
2077
check_cflags -fno-math-errno
2078
check_cflags -fno-signed-zeros
2079

    
2080
# add some flags for Intel C Compiler
2081
if $cc --version 2> /dev/null | grep -q Intel; then
2082
  # Just warnings, no remarks
2083
  check_cflags -w1
2084
  # -wd: Disable following warnings
2085
  # 144, 167, 556: -Wno-pointer-sign
2086
  # 10006: ignoring unknown option -fno-signed-zeros
2087
  # 10156: ignoring option '-W'; no argument required
2088
  check_cflags -wd144,167,556,10006,10156
2089
  # 11030: Warning unknown option --as-needed
2090
  # 10156: ignoring option '-export'; no argument required
2091
  check_ldflags -wd10156,11030
2092
  # Allow to compile with optimizations
2093
  check_ldflags -march=$cpu
2094
fi
2095

    
2096
# PIC flags for shared library objects where they are needed
2097
if enabled shared; then
2098
    # LIBOBJFLAGS may have already been set in the OS configuration
2099
    if test -z "$LIBOBJFLAGS" ; then
2100
        case "${subarch-$arch}" in
2101
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2102
        esac
2103
    fi
2104
fi
2105

    
2106
if enabled gprof; then
2107
    add_cflags  -p
2108
    add_ldflags -p
2109
fi
2110

    
2111
VHOOKCFLAGS="-fPIC"
2112

    
2113
# Find out if the .align argument is a power of two or not.
2114
check_asm asmalign_pot '".align 3"'
2115

    
2116
enabled_any $DECODER_LIST      && enable decoders
2117
enabled_any $ENCODER_LIST      && enable encoders
2118
enabled_any $BSF_LIST          && enable bsfs
2119
enabled_any $DEMUXER_LIST      && enable demuxers
2120
enabled_any $MUXER_LIST        && enable muxers
2121
enabled_any $FILTER_LIST       && enable filters
2122
enabled_any $INDEV_LIST        && enable demuxers
2123
enabled_any $OUTDEV_LIST       && enable muxers
2124
enabled_any $PROTOCOL_LIST     && enable protocols
2125

    
2126
enabled_any $THREADS_LIST      && enable threads
2127

    
2128
check_deps $CONFIG_LIST       \
2129
           $CONFIG_EXTRA      \
2130
           $HAVE_LIST         \
2131
           $DECODER_LIST      \
2132
           $ENCODER_LIST      \
2133
           $PARSER_LIST       \
2134
           $BSF_LIST          \
2135
           $DEMUXER_LIST      \
2136
           $MUXER_LIST        \
2137
           $FILTER_LIST       \
2138
           $INDEV_LIST        \
2139
           $OUTDEV_LIST       \
2140
           $PROTOCOL_LIST     \
2141

    
2142
echo "install prefix            $prefix"
2143
echo "source path               $source_path"
2144
echo "C compiler                $cc"
2145
echo ".align is power-of-two    $asmalign_pot"
2146
echo "ARCH                      $arch ($cpu)"
2147
if test "$build_suffix" != ""; then
2148
    echo "build suffix              $build_suffix"
2149
fi
2150
if test "$extra_version" != ""; then
2151
    echo "version string suffix     $extra_version"
2152
fi
2153
echo "big-endian                ${bigendian-no}"
2154
if enabled x86; then
2155
    echo "yasm                      ${yasm-no}"
2156
    echo "MMX enabled               ${mmx-no}"
2157
    echo "SSE enabled               ${sse-no}"
2158
    echo "CMOV enabled              ${cmov-no}"
2159
    echo "CMOV is fast              ${fast_cmov-no}"
2160
    echo "EBX available             ${ebx_available-no}"
2161
    echo "EBP available             ${ebp_available-no}"
2162
fi
2163
if enabled arm; then
2164
    echo "ARMv5TE enabled           ${armv5te-no}"
2165
    echo "ARMv6 enabled             ${armv6-no}"
2166
    echo "ARMv6T2 enabled           ${armv6t2-no}"
2167
    echo "ARM VFP enabled           ${armvfp-no}"
2168
    echo "IWMMXT enabled            ${iwmmxt-no}"
2169
    echo "NEON enabled              ${neon-no}"
2170
fi
2171
if enabled mips; then
2172
    echo "MMI enabled               ${mmi-no}"
2173
fi
2174
if enabled ppc; then
2175
    echo "AltiVec enabled           ${altivec-no}"
2176
    echo "dcbzl available           ${dcbzl-no}"
2177
fi
2178
echo "gprof enabled             ${gprof-no}"
2179
echo "debug symbols             ${debug-no}"
2180
echo "strip symbols             ${stripping-no}"
2181
echo "optimizations             ${optimizations-no}"
2182
echo "static                    ${static-no}"
2183
echo "shared                    ${shared-no}"
2184
echo "postprocessing support    ${postproc-no}"
2185
echo "software scaler enabled   ${swscale-no}"
2186
echo "new filter support        ${avfilter-no}"
2187
echo "filters using lavformat   ${avfilter_lavf-no}"
2188
echo "video hooking             ${vhook-no}"
2189
if enabled vhook; then
2190
    echo "Imlib2 support            ${imlib2-no}"
2191
    echo "FreeType support          ${freetype2-no}"
2192
fi
2193
echo "network support           ${network-no}"
2194
if enabled network; then
2195
    echo "IPv6 support              ${ipv6-no}"
2196
fi
2197
echo "threading support         ${thread_type-no}"
2198
echo "SDL support               ${sdl-no}"
2199
if enabled sdl_too_old; then
2200
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2201
fi
2202
echo "Sun medialib support      ${mlib-no}"
2203
echo "AVISynth enabled          ${avisynth-no}"
2204
echo "libamr-nb support         ${libamr_nb-no}"
2205
echo "libamr-wb support         ${libamr_wb-no}"
2206
echo "libdc1394 support         ${libdc1394-no}"
2207
echo "libdirac enabled          ${libdirac-no}"
2208
echo "libfaac enabled           ${libfaac-no}"
2209
echo "libfaad enabled           ${libfaad-no}"
2210
echo "libfaad dlopened          ${libfaadbin-no}"
2211
echo "libgsm enabled            ${libgsm-no}"
2212
echo "libmp3lame enabled        ${libmp3lame-no}"
2213
echo "libnut enabled            ${libnut-no}"
2214
echo "libschroedinger enabled   ${libschroedinger-no}"
2215
echo "libspeex enabled          ${libspeex-no}"
2216
echo "libtheora enabled         ${libtheora-no}"
2217
echo "libvorbis enabled         ${libvorbis-no}"
2218
echo "libx264 enabled           ${libx264-no}"
2219
echo "libxvid enabled           ${libxvid-no}"
2220
echo "vdpau enabled             ${vdpau-no}"
2221
echo "zlib enabled              ${zlib-no}"
2222
echo "bzlib enabled             ${bzlib-no}"
2223
echo
2224

    
2225
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2226
    echo "Enabled ${type}s:"
2227
    eval list=\$$(toupper $type)_LIST
2228
    for part in $list; do
2229
        enabled $part && echo ${part%_*}
2230
    done | sort | pr -3 -t
2231
    echo
2232
done
2233

    
2234
license="LGPL"
2235
if enabled nonfree; then
2236
    license="unredistributable"
2237
elif enabled gpl; then
2238
    license="GPL"
2239
fi
2240

    
2241
echo "License: $license"
2242

    
2243
echo "Creating config.mak and config.h..."
2244

    
2245
echo "# Automatically generated by configure - do not modify!" > config.mak
2246
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2247
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2248
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2249
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2250

    
2251
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2252
echo "prefix=$prefix" >> config.mak
2253
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2254
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2255
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2256
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2257
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2258
echo "CC=$cc" >> config.mak
2259
echo "YASM=$yasmexe" >> config.mak
2260
echo "AR=$ar" >> config.mak
2261
echo "RANLIB=$ranlib" >> config.mak
2262
echo "LN_S=$ln_s" >> config.mak
2263
enabled stripping &&
2264
    echo "STRIP=$strip" >> config.mak ||
2265
    echo "STRIP=echo ignoring strip" >> config.mak
2266

    
2267
echo "OPTFLAGS=$CFLAGS" >> config.mak
2268
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2269
echo "LDFLAGS=$LDFLAGS" >> config.mak
2270
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2271
echo "SHFLAGS=$SHFLAGS" >> config.mak
2272
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2273
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2274
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2275
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2276
echo "BUILD_STATIC=$static" >> config.mak
2277
echo "BUILDSUF=$build_suffix" >> config.mak
2278
echo "FULLNAME=$FULLNAME" >> config.mak
2279
echo "LIBPREF=$LIBPREF" >> config.mak
2280
echo "LIBSUF=$LIBSUF" >> config.mak
2281
echo "LIBNAME=$LIBNAME" >> config.mak
2282
echo "SLIBPREF=$SLIBPREF" >> config.mak
2283
echo "SLIBSUF=$SLIBSUF" >> config.mak
2284
echo "EXESUF=$EXESUF" >> config.mak
2285
echo "EXTRA_VERSION=$extra_version" >> config.mak
2286
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2287
echo "HOSTCC=$host_cc" >> config.mak
2288
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2289
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2290
echo "HOSTLIBS=$host_libs" >> config.mak
2291
echo "TARGET_EXEC=$target_exec" >> config.mak
2292
echo "TARGET_PATH=$target_path" >> config.mak
2293

    
2294
if enabled bigendian; then
2295
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2296
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2297
fi
2298

    
2299
if enabled sdl; then
2300
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2301
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2302
fi
2303
if enabled texi2html; then
2304
    echo "BUILD_DOC=yes" >> config.mak
2305
fi
2306

    
2307
get_version(){
2308
    name=$1
2309
    file=$source_path/$2
2310
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2311
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2312
    lcname=$(tolower $name)
2313
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2314
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2315
}
2316

    
2317
get_version LIBSWSCALE  libswscale/swscale.h
2318
get_version LIBPOSTPROC libpostproc/postprocess.h
2319
get_version LIBAVCODEC  libavcodec/avcodec.h
2320
get_version LIBAVDEVICE libavdevice/avdevice.h
2321
get_version LIBAVFORMAT libavformat/avformat.h
2322
get_version LIBAVUTIL   libavutil/avutil.h
2323
get_version LIBAVFILTER libavfilter/avfilter.h
2324

    
2325
if enabled shared; then
2326
    echo "BUILD_SHARED=yes" >> config.mak
2327
    echo "PIC=-fPIC -DPIC" >> config.mak
2328
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2329
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2330
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2331
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2332
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2333
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2334
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2335
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2336
fi
2337
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2338
echo "EXTRALIBS=$extralibs" >> config.mak
2339

    
2340
echo "ARCH=$arch" >> config.mak
2341

    
2342
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2343
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2344
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2345
                                      $CONFIG_EXTRA      \
2346
                                      $DECODER_LIST      \
2347
                                      $ENCODER_LIST      \
2348
                                      $PARSER_LIST       \
2349
                                      $BSF_LIST          \
2350
                                      $DEMUXER_LIST      \
2351
                                      $MUXER_LIST        \
2352
                                      $FILTER_LIST       \
2353
                                      $PROTOCOL_LIST     \
2354
                                      $INDEV_LIST        \
2355
                                      $OUTDEV_LIST       \
2356

    
2357
echo "#define restrict $_restrict" >> $TMPH
2358

    
2359
if enabled small; then
2360
    echo "#define av_always_inline"  >> $TMPH
2361
fi
2362

    
2363
echo "SRC_PATH=\"$source_path\"" >> config.mak
2364
echo "SRC_PATH_BARE=$source_path" >> config.mak
2365
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2366

    
2367
# Apparently it's not possible to portably echo a backslash.
2368
enabled asmalign_pot &&
2369
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2370
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2371

    
2372
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2373

    
2374
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2375

    
2376
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2377
cmp -s $TMPH config.h &&
2378
    echo "config.h is unchanged" ||
2379
    mv -f $TMPH config.h
2380

    
2381
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2382

    
2383
# build tree in object directory if source path is different from current one
2384
if enabled source_path_used; then
2385
    DIRS="\
2386
        doc               \
2387
        libavcodec        \
2388
        libavcodec/alpha  \
2389
        libavcodec/arm    \
2390
        libavcodec/bfin   \
2391
        libavcodec/mlib   \
2392
        libavcodec/ppc    \
2393
        libavcodec/sh4    \
2394
        libavcodec/sparc  \
2395
        libavcodec/x86    \
2396
        libavdevice       \
2397
        libavfilter       \
2398
        libavformat       \
2399
        libavutil         \
2400
        libpostproc       \
2401
        libswscale        \
2402
        tests             \
2403
        tools             \
2404
        vhook             \
2405
        "
2406
    FILES="\
2407
        Makefile             \
2408
        common.mak           \
2409
        subdir.mak           \
2410
        doc/texi2pod.pl      \
2411
        libavcodec/Makefile  \
2412
        libavdevice/Makefile \
2413
        libavfilter/Makefile \
2414
        libavformat/Makefile \
2415
        libavutil/Makefile   \
2416
        libpostproc/Makefile \
2417
        libswscale/Makefile  \
2418
        "
2419
    for dir in $DIRS ; do
2420
        mkdir -p $dir
2421
    done
2422
    for f in $FILES ; do
2423
        $ln_s "$source_path/$f" $f
2424
    done
2425
fi
2426

    
2427

    
2428
# build pkg-config files
2429

    
2430
pkgconfig_generate(){
2431
name=$1
2432
shortname=${name#lib}${build_suffix}
2433
comment=$2
2434
version=$3
2435
libs=$4
2436
requires=$5
2437
cat <<EOF > $name/$name.pc
2438
prefix=$prefix
2439
exec_prefix=\${prefix}
2440
libdir=$libdir
2441
includedir=$incdir
2442

    
2443
Name: $name
2444
Description: $comment
2445
Version: $version
2446
Requires: $(disabled shared && echo $requires)
2447
Requires.private: $(enabled shared && echo $requires)
2448
Conflicts:
2449
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2450
Libs.private: $(enabled shared && echo $libs)
2451
Cflags: -I\${includedir}
2452
EOF
2453
cat <<EOF > $name/$name-uninstalled.pc
2454
prefix=
2455
exec_prefix=
2456
libdir=\${pcfiledir}
2457
includedir=${source_path}
2458

    
2459
Name: $name
2460
Description: $comment
2461
Version: $version
2462
Requires: $requires
2463
Conflicts:
2464
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2465
Cflags: -I\${includedir}
2466
EOF
2467
}
2468

    
2469
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2470
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2471
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2472
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2473
enabled avfilter &&
2474
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2475
enabled postproc &&
2476
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2477
if enabled swscale; then
2478
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2479
else
2480
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2481
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2482
fi