Statistics
| Branch: | Revision:

ffmpeg / configure @ 9377b6ce

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

    
215
log(){
216
    echo "$@" >> $logfile
217
}
218

    
219
log_file(){
220
    log BEGIN $1
221
    pr -n -t $1 >> $logfile
222
    log END $1
223
}
224

    
225
echolog(){
226
    log "$@"
227
    echo "$@"
228
}
229

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

    
252
# Avoid locale weirdness, besides we really just want to translate ASCII.
253
toupper(){
254
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
255
}
256

    
257
tolower(){
258
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
259
}
260

    
261
set_all(){
262
    value=$1
263
    shift
264
    for var in $*; do
265
        eval $var=$value
266
    done
267
}
268

    
269
set_weak(){
270
    value=$1
271
    shift
272
    for var; do
273
        eval : \${$var:=$value}
274
    done
275
}
276

    
277
pushvar(){
278
    for var in $*; do
279
        eval level=\${${var}_level:=0}
280
        eval ${var}_${level}="\$$var"
281
        eval ${var}_level=$(($level+1))
282
    done
283
}
284

    
285
popvar(){
286
    for var in $*; do
287
        eval level=\${${var}_level:-0}
288
        test $level = 0 && continue
289
        eval level=$(($level-1))
290
        eval $var="\${${var}_${level}}"
291
        eval ${var}_level=$level
292
        eval unset ${var}_${level}
293
    done
294
}
295

    
296
enable(){
297
    set_all yes $*
298
}
299

    
300
disable(){
301
    set_all no $*
302
}
303

    
304
enable_weak(){
305
    set_weak yes $*
306
}
307

    
308
disable_weak(){
309
    set_weak no $*
310
}
311

    
312
do_enable_deep(){
313
    for var; do
314
        enabled $var && continue
315
        eval sel="\$${var}_select"
316
        eval sgs="\$${var}_suggest"
317
        pushvar var sgs
318
        enable_deep $sel
319
        popvar sgs
320
        enable_deep_weak $sgs
321
        popvar var
322
    done
323
}
324

    
325
enable_deep(){
326
    do_enable_deep $*
327
    enable $*
328
}
329

    
330
enable_deep_weak(){
331
    do_enable_deep $*
332
    enable_weak $*
333
}
334

    
335
enabled(){
336
    test "${1#!}" = "$1" && op== || op=!=
337
    eval test "x\$${1#!}" $op "xyes"
338
}
339

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

    
345
enabled_all(){
346
    for opt; do
347
        enabled $opt || return 1
348
    done
349
}
350

    
351
disabled_all(){
352
    for opt; do
353
        disabled $opt || return 1
354
    done
355
}
356

    
357
enabled_any(){
358
    for opt; do
359
        enabled $opt && return 0
360
    done
361
}
362

    
363
disabled_any(){
364
    for opt; do
365
        disabled $opt && return 0
366
    done
367
    return 1
368
}
369

    
370
set_default(){
371
    for opt; do
372
        eval : \${$opt:=\$${opt}_default}
373
    done
374
}
375

    
376
is_in(){
377
    value=$1
378
    shift
379
    for var in $*; do
380
        [ $var = $value ] && return 0
381
    done
382
    return 1
383
}
384

    
385
check_deps(){
386
    for cfg; do
387
        cfg="${cfg#!}"
388
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
389
        disabled ${cfg}_checking && continue
390
        enable ${cfg}_checking
391

    
392
        eval dep_all="\$${cfg}_deps"
393
        eval dep_any="\$${cfg}_deps_any"
394
        eval dep_sel="\$${cfg}_select"
395
        eval dep_sgs="\$${cfg}_suggest"
396

    
397
        pushvar cfg dep_all dep_any dep_sel dep_sgs
398
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
399
        popvar cfg dep_all dep_any dep_sel dep_sgs
400

    
401
        enabled_all  $dep_all || disable $cfg
402
        enabled_any  $dep_any || disable $cfg
403
        disabled_any $dep_sel && disable $cfg
404

    
405
        if enabled $cfg; then
406
            eval dep_extralibs="\$${cfg}_extralibs"
407
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
408
            enable_deep $dep_sel
409
            enable_deep_weak $dep_sgs
410
        fi
411

    
412
        disable ${cfg}_checking
413
    done
414
}
415

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

    
433
flags_saved(){
434
    (: ${SAVE_CFLAGS?}) 2> /dev/null
435
}
436

    
437
save_flags(){
438
    flags_saved && return
439
    SAVE_CFLAGS="$CFLAGS"
440
    SAVE_LDFLAGS="$LDFLAGS"
441
    SAVE_extralibs="$extralibs"
442
}
443

    
444
restore_flags(){
445
    flags_saved || return
446
    CFLAGS="$SAVE_CFLAGS"
447
    LDFLAGS="$SAVE_LDFLAGS"
448
    extralibs="$SAVE_extralibs"
449
    unset SAVE_CFLAGS
450
    unset SAVE_LDFLAGS
451
    unset SAVE_extralibs
452
}
453

    
454
temp_cflags(){
455
    save_flags
456
    CFLAGS="$CFLAGS $*"
457
}
458

    
459
temp_ldflags(){
460
    save_flags
461
    LDFLAGS="$LDFLAGS $*"
462
}
463

    
464
temp_extralibs(){
465
    save_flags
466
    extralibs="$extralibs $*"
467
}
468

    
469
append(){
470
    var=$1
471
    shift
472
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
473
    eval "$var=\"\$$var $*\""
474
}
475

    
476
add_cflags(){
477
    append CFLAGS "$@"
478
}
479

    
480
add_ldflags(){
481
    append LDFLAGS "$@"
482
}
483

    
484
add_extralibs(){
485
    append extralibs "$@"
486
}
487

    
488
check_cmd(){
489
    log "$@"
490
    "$@" >> $logfile 2>&1
491
}
492

    
493
check_cc(){
494
    log check_cc "$@"
495
    cat > $TMPC
496
    log_file $TMPC
497
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
498
}
499

    
500
check_cpp(){
501
    log check_cpp "$@"
502
    cat > $TMPC
503
    log_file $TMPC
504
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
505
}
506

    
507
check_asm(){
508
    log check_asm "$@"
509
    name="$1"
510
    asm="$2"
511
    shift 2
512
    check_cc "$@" <<EOF && enable $name || disable $name
513
int foo(void){ __asm__ volatile($asm); }
514
EOF
515
}
516

    
517
check_yasm(){
518
    log check_yasm "$@"
519
    echo "$1" > $TMPS
520
    log_file $TMPS
521
    shift 1
522
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
523
}
524

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

    
536
check_cflags(){
537
    log check_cflags "$@"
538
    check_cc "$@" <<EOF && add_cflags "$@"
539
int x;
540
EOF
541
}
542

    
543
check_ldflags(){
544
    log check_ldflags "$@"
545
    check_ld "$@" <<EOF && add_ldflags "$@"
546
int main(void){ return 0; }
547
EOF
548
}
549

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

    
562
check_func(){
563
    log check_func "$@"
564
    func=$1
565
    shift
566
    disable $func
567
    check_ld "$@" <<EOF && enable $func
568
extern int $func();
569
int main(void){ $func(); }
570
EOF
571
}
572

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

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

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

    
617
check_lib2(){
618
    log check_lib2 "$@"
619
    headers="$1"
620
    func="$2"
621
    shift 2
622
    temp_extralibs "$@"
623
    check_func_headers "$headers" $func && add_extralibs "$@"
624
    err=$?
625
    restore_flags
626
    return $err
627
}
628

    
629
check_exec(){
630
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
631
}
632

    
633
check_exec_crash(){
634
    code=`cat`
635

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

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

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

    
676
require(){
677
    name="$1"
678
    header="$2"
679
    func="$3"
680
    shift 3
681
    check_lib $header $func "$@" || die "ERROR: $name not found"
682
}
683

    
684
require2(){
685
    name="$1"
686
    headers="$2"
687
    func="$3"
688
    shift 3
689
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
690
}
691

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

    
709
apply(){
710
    file=$1
711
    shift
712
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
713
}
714

    
715
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
716
# system-dependent things.
717

    
718
COMPONENT_LIST="
719
    bsfs
720
    decoders
721
    demuxers
722
    encoders
723
    filters
724
    indevs
725
    muxers
726
    outdevs
727
    parsers
728
    protocols
729
"
730

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

    
780
THREADS_LIST='
781
    beosthreads
782
    os2threads
783
    pthreads
784
    w32threads
785
'
786

    
787
ARCH_LIST='
788
    alpha
789
    armv4l
790
    bfin
791
    ia64
792
    m68k
793
    mips
794
    parisc
795
    powerpc
796
    s390
797
    sh4
798
    sparc
799
    sparc64
800
    x86
801
    x86_32
802
    x86_64
803
'
804

    
805
ARCH_EXT_LIST='
806
    altivec
807
    armv5te
808
    armv6
809
    armvfp
810
    iwmmxt
811
    mmi
812
    mmx
813
    mmx2
814
    neon
815
    ssse3
816
    vis
817
'
818

    
819
HAVE_LIST="
820
    $ARCH_EXT_LIST
821
    $THREADS_LIST
822
    altivec_h
823
    arpa_inet_h
824
    bswap
825
    closesocket
826
    cmov
827
    conio_h
828
    dcbzl
829
    dev_bktr_ioctl_bt848_h
830
    dev_bktr_ioctl_meteor_h
831
    dev_ic_bt8xx_h
832
    dev_video_meteor_ioctl_meteor_h
833
    dev_video_bktr_ioctl_bt848_h
834
    dlfcn_h
835
    dlopen
836
    dos_paths
837
    ebp_available
838
    ebx_available
839
    fast_64bit
840
    fast_cmov
841
    fast_unaligned
842
    fork
843
    freetype2
844
    gethrtime
845
    GetProcessTimes
846
    getrusage
847
    imlib2
848
    inet_aton
849
    inline_asm
850
    libdc1394_1
851
    libdc1394_2
852
    llrint
853
    lrint
854
    lrintf
855
    machine_ioctl_bt848_h
856
    machine_ioctl_meteor_h
857
    malloc_h
858
    memalign
859
    mkstemp
860
    pld
861
    ppc64
862
    round
863
    roundf
864
    sdl
865
    sdl_video_size
866
    socklen_t
867
    soundcard_h
868
    poll_h
869
    sys_mman_h
870
    sys_resource_h
871
    sys_select_h
872
    sys_soundcard_h
873
    sys_videoio_h
874
    termios_h
875
    threads
876
    winsock2_h
877
    yasm
878
"
879

    
880
# options emitted with CONFIG_ prefix but not available on command line
881
CONFIG_EXTRA="
882
    fft_mmx
883
    oldscaler
884
"
885

    
886
CMDLINE_SELECT="
887
    $ARCH_EXT_LIST
888
    $CONFIG_LIST
889
    $THREADS_LIST
890
    cross_compile
891
    debug
892
    extra_warnings
893
    logging
894
    optimizations
895
    shared
896
    static
897
    stripping
898
"
899

    
900
PATHS_LIST='
901
    bindir
902
    incdir
903
    libdir
904
    mandir
905
    prefix
906
    shlibdir
907
'
908

    
909
CMDLINE_SET="
910
    $PATHS_LIST
911
    arch
912
    build_suffix
913
    cc
914
    cpu
915
    cross_prefix
916
    extra_version
917
    host_cc
918
    host_cflags
919
    host_ldflags
920
    host_libs
921
    logfile
922
    source_path
923
    target_exec
924
    target_os
925
    target_path
926
"
927

    
928
# code dependency declarations
929

    
930
# architecture extensions
931
altivec_deps="powerpc"
932
armv5te_deps="armv4l"
933
armv6_deps="armv4l"
934
armvfp_deps="armv4l"
935
iwmmxt_deps="armv4l"
936
mmi_deps="mips"
937
mmx_deps="x86"
938
mmx2_deps="x86 mmx"
939
neon_deps="armv4l"
940
ssse3_deps="x86"
941
vis_deps="sparc"
942

    
943
# common features
944
fft_suggest="fft_mmx"
945
fft_mmx_deps="mmx yasm"
946
oldscaler_deps="!swscale"
947

    
948
# decoders / encoders
949
aac_decoder_select="fft mdct"
950
ac3_decoder_deps="gpl"
951
ac3_decoder_select="fft mdct"
952
atrac3_decoder_select="fft mdct"
953
cavs_decoder_select="golomb"
954
cook_decoder_select="fft mdct"
955
cscd_decoder_suggest="zlib"
956
dca_decoder_select="fft mdct"
957
dnxhd_encoder_select="aandct"
958
dxa_decoder_select="zlib"
959
eac3_decoder_deps="gpl"
960
eac3_decoder_select="fft mdct"
961
eatgq_decoder_select="aandct"
962
ffv1_decoder_select="golomb"
963
flac_decoder_select="golomb"
964
flac_encoder_select="golomb"
965
flashsv_decoder_select="zlib"
966
flashsv_encoder_select="zlib"
967
flv_encoder_select="aandct"
968
h261_encoder_select="aandct"
969
h263_encoder_select="aandct"
970
h263p_encoder_select="aandct"
971
h264_decoder_select="golomb"
972
imc_decoder_select="fft mdct"
973
jpegls_decoder_select="golomb"
974
jpegls_encoder_select="golomb"
975
ljpeg_encoder_select="aandct"
976
loco_decoder_select="golomb"
977
mjpeg_encoder_select="aandct"
978
mpeg1video_encoder_select="aandct"
979
mpeg2video_encoder_select="aandct"
980
mpeg4_encoder_select="aandct"
981
msmpeg4v1_encoder_select="aandct"
982
msmpeg4v2_encoder_select="aandct"
983
msmpeg4v3_encoder_select="aandct"
984
mpeg_xvmc_decoder_deps="xvmc"
985
nellymoser_decoder_select="fft mdct"
986
nellymoser_encoder_select="fft mdct"
987
png_decoder_select="zlib"
988
png_encoder_select="zlib"
989
qdm2_decoder_select="fft mdct"
990
rv10_encoder_select="aandct"
991
rv20_encoder_select="aandct"
992
shorten_decoder_select="golomb"
993
sonic_decoder_select="golomb"
994
sonic_encoder_select="golomb"
995
sonic_ls_encoder_select="golomb"
996
svq3_decoder_select="golomb"
997
svq3_decoder_suggest="zlib"
998
tiff_decoder_suggest="zlib"
999
tiff_encoder_suggest="zlib"
1000
tscc_decoder_select="zlib"
1001
vorbis_decoder_select="fft mdct"
1002
vorbis_encoder_select="fft mdct"
1003
wmav1_decoder_select="fft mdct"
1004
wmav1_encoder_select="fft mdct"
1005
wmav2_decoder_select="fft mdct"
1006
wmav2_encoder_select="fft mdct"
1007
wmv1_encoder_select="aandct"
1008
wmv2_encoder_select="aandct"
1009
zlib_decoder_select="zlib"
1010
zlib_encoder_select="zlib"
1011
zmbv_decoder_select="zlib"
1012
zmbv_encoder_select="zlib"
1013

    
1014
# external libraries
1015
libamr_nb_decoder_deps="libamr_nb"
1016
libamr_nb_encoder_deps="libamr_nb"
1017
libamr_wb_decoder_deps="libamr_wb"
1018
libamr_wb_encoder_deps="libamr_wb"
1019
libdirac_decoder_deps="libdirac !libschroedinger"
1020
libdirac_encoder_deps="libdirac"
1021
libfaac_encoder_deps="libfaac"
1022
libfaad_decoder_deps="libfaad"
1023
libfaadbin_decoder_extralibs='$ldl'
1024
libgsm_decoder_deps="libgsm"
1025
libgsm_encoder_deps="libgsm"
1026
libgsm_ms_decoder_deps="libgsm"
1027
libgsm_ms_encoder_deps="libgsm"
1028
libmp3lame_encoder_deps="libmp3lame"
1029
libschroedinger_decoder_deps="libschroedinger"
1030
libschroedinger_encoder_deps="libschroedinger"
1031
libspeex_decoder_deps="libspeex"
1032
libtheora_encoder_deps="libtheora"
1033
libvorbis_encoder_deps="libvorbis"
1034
libx264_encoder_deps="libx264"
1035
libxvid_encoder_deps="libxvid"
1036
mpeg4aac_decoder_deps="libfaad"
1037

    
1038
# demuxers / muxers
1039
ac3_demuxer_deps="ac3_parser"
1040
audio_beos_demuxer_deps="audio_beos"
1041
audio_beos_demuxer_extralibs="-lmedia -lbe"
1042
audio_beos_muxer_deps="audio_beos"
1043
audio_beos_muxer_extralibs="-lmedia -lbe"
1044
avisynth_demuxer_deps="avisynth"
1045
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1046
dirac_demuxer_deps="dirac_parser"
1047
dv1394_demuxer_deps="dv1394 dv_demuxer"
1048
libdc1394_demuxer_deps="libdc1394"
1049
libnut_demuxer_deps="libnut"
1050
libnut_muxer_deps="libnut"
1051
matroska_demuxer_suggest="zlib bzlib"
1052
mov_demuxer_suggest="zlib"
1053
mp3_demuxer_deps="mpegaudio_parser"
1054
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1055
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1056
redir_demuxer_deps="network"
1057
rtp_muxer_deps="network rtp_protocol"
1058
rtsp_demuxer_deps="sdp_demuxer"
1059
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1060
v4l_demuxer_deps="linux_videodev_h"
1061
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1062
vfwcap_demuxer_deps="capCreateCaptureWindow"
1063
vfwcap_demuxer_extralibs="-lvfw32"
1064
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1065
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1066

    
1067
# protocols
1068
http_protocol_deps="network"
1069
rtp_protocol_deps="udp_protocol"
1070
tcp_protocol_deps="network"
1071
udp_protocol_deps="network"
1072

    
1073
# filters
1074
movie_filter_deps="avfilter_lavf"
1075

    
1076
# programs
1077
ffplay_deps="sdl"
1078
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1079
ffserver_extralibs='$ldl'
1080
vhook_extralibs='$ldl'
1081

    
1082

    
1083
# default parameters
1084

    
1085
logfile="config.err"
1086

    
1087
# installation paths
1088
prefix_default="/usr/local"
1089
bindir_default='${prefix}/bin'
1090
incdir_default='${prefix}/include'
1091
libdir_default='${prefix}/lib'
1092
mandir_default='${prefix}/share/man'
1093
shlibdir_default="$libdir_default"
1094

    
1095
# toolchain
1096
cc_default="gcc"
1097
host_cc_default="gcc"
1098
yasmexe="yasm"
1099
ar="ar"
1100
nm="nm"
1101
ranlib="ranlib"
1102
strip="strip"
1103
ln_s="ln -sf"
1104
objformat="elf"
1105

    
1106
# machine
1107
arch=`uname -m`
1108
cpu="generic"
1109

    
1110
# OS
1111
target_os=$(tolower $(uname -s))
1112

    
1113
# configurable options
1114
enable debug
1115
enable ffmpeg
1116
enable ffplay
1117
enable ffserver
1118
enable ipv6
1119
enable mpegaudio_hp
1120
enable network
1121
enable oldscaler
1122
enable optimizations
1123
enable protocols
1124
enable static
1125
enable stripping
1126
vhook="default"
1127

    
1128
# build settings
1129
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1130
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1131
VHOOKSHFLAGS='$(SHFLAGS)'
1132
FFSERVERLDFLAGS=-Wl,-E
1133
LIBPREF="lib"
1134
LIBSUF=".a"
1135
FULLNAME='$(NAME)$(BUILDSUF)'
1136
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1137
SLIBPREF="lib"
1138
SLIBSUF=".so"
1139
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1140
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1141
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1142
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1143

    
1144
host_cflags='-O3 -g -Wall'
1145
host_libs='-lm'
1146

    
1147
target_path='.'
1148

    
1149
# gcc stupidly only outputs the basename of targets with -MM, but we need the
1150
# full relative path for objects in subdirectories for non-recursive Make.
1151
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,"'
1152

    
1153
# find source path
1154
source_path="`dirname \"$0\"`"
1155
enable source_path_used
1156
if test -z "$source_path" -o "$source_path" = "." ; then
1157
    source_path="`pwd`"
1158
    disable source_path_used
1159
else
1160
    source_path="`cd \"$source_path\"; pwd`"
1161
    echo "$source_path" | grep -q '[[:blank:]]' &&
1162
        die "Out of tree builds are impossible with whitespace in source path."
1163
fi
1164

    
1165
FFMPEG_CONFIGURATION="$@"
1166

    
1167
find_things(){
1168
    thing=$1
1169
    pattern=$2
1170
    file=$source_path/$3
1171
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1172
}
1173

    
1174
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1175
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1176
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1177
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1178
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1179
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1180
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1181
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1182
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1183
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1184

    
1185
enable $ARCH_EXT_LIST \
1186
       $DECODER_LIST \
1187
       $ENCODER_LIST \
1188
       $PARSER_LIST \
1189
       $BSF_LIST \
1190
       $DEMUXER_LIST \
1191
       $MUXER_LIST \
1192
       $FILTER_LIST \
1193
       $PROTOCOL_LIST \
1194
       $INDEV_LIST \
1195
       $OUTDEV_LIST \
1196

    
1197
die_unknown(){
1198
    echo "Unknown option \"$1\"."
1199
    echo "See $0 --help for available options."
1200
    exit 1
1201
}
1202

    
1203
show_list() {
1204
    suffix=_$1
1205
    shift
1206
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1207
    exit 0
1208
}
1209

    
1210
for opt do
1211
    optval="${opt#*=}"
1212
    case "$opt" in
1213
    --extra-cflags=*) add_cflags "$optval"
1214
    ;;
1215
    --extra-ldflags=*) add_ldflags "$optval"
1216
    ;;
1217
    --extra-libs=*) add_extralibs "$optval"
1218
    ;;
1219
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1220
    ;;
1221
    --enable-debug=*) debuglevel="$optval"
1222
    ;;
1223
    --enable-*=*|--disable-*=*)
1224
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1225
    case "$thing" in
1226
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1227
        *) die_unknown "$opt" ;;
1228
    esac
1229
    ;;
1230
    --enable-?*|--disable-?*)
1231
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1232
    if is_in $option $COMPONENT_LIST; then
1233
        eval $action \$$(toupper ${option%s})_LIST
1234
    elif is_in $option $CMDLINE_SELECT; then
1235
        $action $option
1236
    else
1237
        die_unknown $opt
1238
    fi
1239
    ;;
1240
    --list-*)
1241
        NAME="${opt#--list-}"
1242
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1243
        NAME=${NAME%s}
1244
        eval show_list $NAME \$$(toupper $NAME)_LIST
1245
    ;;
1246
    --help|-h) show_help
1247
    ;;
1248
    *)
1249
    optname="${opt%%=*}"
1250
    optname="${optname#--}"
1251
    optname=$(echo "$optname" | sed 's/-/_/g')
1252
    is_in $optname $CMDLINE_SET || die_unknown $opt
1253
    eval $optname='$optval'
1254
    ;;
1255
    esac
1256
done
1257

    
1258
disabled logging && logfile=/dev/null
1259

    
1260
echo "# $0 $@" > $logfile
1261
set >> $logfile
1262

    
1263
test -n "$cross_prefix" && enable cross_compile
1264

    
1265
cc_default="${cross_prefix}${cc_default}"
1266
yasmexe="${cross_prefix}${yasmexe}"
1267
ar="${cross_prefix}${ar}"
1268
nm="${cross_prefix}${nm}"
1269
ranlib="${cross_prefix}${ranlib}"
1270
strip="${cross_prefix}${strip}"
1271

    
1272
set_default cc
1273
enabled cross_compile || host_cc_default=$cc
1274
set_default host_cc
1275

    
1276
# set temporary file name
1277
if test ! -z "$TMPDIR" ; then
1278
    TMPDIR1="${TMPDIR}"
1279
elif test ! -z "$TEMPDIR" ; then
1280
    TMPDIR1="${TEMPDIR}"
1281
else
1282
    TMPDIR1="/tmp"
1283
fi
1284

    
1285
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1286
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1287
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1288
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1289
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1290
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1291

    
1292
check_cflags -std=c99
1293

    
1294
case "$arch" in
1295
    i386|i486|i586|i686|i86pc|BePC)
1296
        arch="x86_32"
1297
        enable fast_unaligned
1298
    ;;
1299
    x86_64|amd64)
1300
        arch="x86_32"
1301
        enable cmov
1302
        enable fast_cmov
1303
        enable fast_unaligned
1304
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1305
        int test[sizeof(char*) - 7];
1306
EOF
1307
    ;;
1308
    # armv4l is a subset of armv[567]*l
1309
    arm|armv[4567]*l)
1310
        arch="armv4l"
1311
    ;;
1312
    alpha)
1313
        arch="alpha"
1314
        enable fast_64bit
1315
    ;;
1316
    "Power Macintosh"|ppc|powerpc)
1317
        arch="powerpc"
1318
        enable fast_unaligned
1319
    ;;
1320
    ppc64)
1321
        arch="powerpc"
1322
        enable fast_64bit
1323
        enable fast_unaligned
1324
    ;;
1325
    mips|mipsel|IP*)
1326
        arch="mips"
1327
    ;;
1328
    sun4u|sparc64)
1329
        arch="sparc64"
1330
        enable fast_64bit
1331
    ;;
1332
    sparc)
1333
        arch="sparc"
1334
    ;;
1335
    sh4)
1336
        arch="sh4"
1337
    ;;
1338
    parisc)
1339
        arch="parisc"
1340
    ;;
1341
    parisc64)
1342
        arch="parisc"
1343
        enable fast_64bit
1344
    ;;
1345
    s390|s390x)
1346
        arch="s390"
1347
    ;;
1348
    m68k)
1349
        arch="m68k"
1350
    ;;
1351
    ia64)
1352
        arch="ia64"
1353
        enable fast_64bit
1354
    ;;
1355
    bfin)
1356
        arch="bfin"
1357
    ;;
1358
    *)
1359
        arch="unknown"
1360
    ;;
1361
esac
1362

    
1363
enable $arch
1364
enabled_any x86_32 x86_64 && enable x86
1365
enabled     sparc64       && enable sparc
1366

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

    
1529
    *)
1530
        target_os="${target_os}-UNKNOWN"
1531
        ;;
1532
esac
1533

    
1534
set_default $PATHS_LIST
1535

    
1536
add_extralibs $osextralibs
1537

    
1538
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1539
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1540

    
1541
# we need to build at least one lib type
1542
if ! enabled_any static shared; then
1543
    cat <<EOF
1544
At least one library type must be built.
1545
Specify --enable-static to build the static libraries or --enable-shared to
1546
build the shared libraries as well. To only build the shared libraries specify
1547
--disable-static in addition to --enable-shared.
1548
EOF
1549
    exit 1;
1550
fi
1551

    
1552
disabled static && LIBNAME=""
1553

    
1554
if enabled_any libfaad libfaadbin ; then
1555
    if check_header faad.h; then
1556
        check_cc <<EOF
1557
#include <faad.h>
1558
#ifndef FAAD2_VERSION
1559
ok faad1
1560
#endif
1561
int main(void) { return 0; }
1562
EOF
1563
        test $? = 0 && enable libfaad2
1564
    else
1565
        die "FAAD test failed."
1566
    fi
1567
fi
1568

    
1569

    
1570
if ! enabled gpl; then
1571
    die_gpl_disabled(){
1572
        name=$1
1573
        shift
1574
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1575
    }
1576
    die_gpl_disabled "The Postprocessing code" postproc
1577
    die_gpl_disabled "libx264"                 libx264
1578
    die_gpl_disabled "libxvidcore"             libxvid
1579
    die_gpl_disabled "FAAD2"                   libfaad2
1580
    die_gpl_disabled "The X11 grabber"         x11grab
1581
    die_gpl_disabled "The software scaler"     swscale
1582
fi
1583

    
1584
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1585
    die "libamr is nonfree and --enable-nonfree is not specified."
1586
fi
1587

    
1588
check_deps $ARCH_EXT_LIST
1589

    
1590
test -z "$need_memalign" && need_memalign="$mmx"
1591

    
1592
#Darwin CC versions
1593
if test $target_os = darwin; then
1594
    if $cc -v 2>&1 | grep -q xlc; then
1595
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1596
    else
1597
        add_cflags "-pipe"
1598
        check_cflags "-force_cpusubtype_ALL"
1599
        check_cflags "-Wno-sign-compare"
1600
        enabled shared || check_cflags -mdynamic-no-pic
1601
    fi
1602
fi
1603

    
1604
disabled optimizations || check_cflags -fomit-frame-pointer
1605

    
1606
# Add processor-specific flags
1607
if test $cpu != "generic"; then
1608
    warn_altivec(){
1609
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1610
    }
1611
    case $cpu in
1612
        601|ppc601|PowerPC601)
1613
            add_cflags "-mcpu=601"
1614
            warn_altivec enabled PPC601
1615
        ;;
1616
        603*|ppc603*|PowerPC603*)
1617
            add_cflags "-mcpu=603"
1618
            warn_altivec enabled PPC603
1619
        ;;
1620
        604*|ppc604*|PowerPC604*)
1621
            add_cflags "-mcpu=604"
1622
            warn_altivec enabled PPC604
1623
        ;;
1624
        G3|g3|75*|ppc75*|PowerPC75*)
1625
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1626
            warn_altivec enabled PPC75x
1627
        ;;
1628
        G4|g4|745*|ppc745*|PowerPC745*)
1629
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1630
            warn_altivec disabled PPC745x
1631
        ;;
1632
        74*|ppc74*|PowerPC74*)
1633
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1634
            warn_altivec disabled PPC74xx
1635
        ;;
1636
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1637
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1638
            warn_altivec disabled PPC970
1639
            enable ppc64
1640
        ;;
1641
        Cell|CELL|cell)
1642
            add_cflags "-mcpu=cell"
1643
            warn_altivec disabled Cell
1644
            enable ppc64
1645
        ;;
1646
        # targets that do NOT support conditional mov (cmov)
1647
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1648
            add_cflags "-march=$cpu"
1649
            disable cmov
1650
        ;;
1651
        # targets that do support conditional mov (cmov)
1652
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1653
            add_cflags "-march=$cpu"
1654
            enable cmov
1655
            enable fast_cmov
1656
        ;;
1657
        # targets that do support conditional mov but on which it's slow
1658
        pentium4|pentium4m|prescott|nocona)
1659
            add_cflags "-march=$cpu"
1660
            enable cmov
1661
            disable fast_cmov
1662
        ;;
1663
        sparc64)
1664
            add_cflags "-mcpu=v9"
1665
        ;;
1666
        arm11*|cortex*)
1667
            add_cflags "-mcpu=$cpu"
1668
            enable fast_unaligned
1669
        ;;
1670
        armv*)
1671
            add_cflags "-march=$cpu"
1672
        ;;
1673
        arm*)
1674
            add_cflags "-mcpu=$cpu"
1675
        ;;
1676
        *)
1677
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1678
        ;;
1679
    esac
1680
fi
1681

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

    
1697
# compiler sanity check
1698
check_exec <<EOF
1699
int main(void){ return 0; }
1700
EOF
1701
if test "$?" != 0; then
1702
    echo "$cc is unable to create an executable file."
1703
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1704
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1705
        echo "Only do this if you know what cross compiling means."
1706
    fi
1707
    die "C compiler test failed."
1708
fi
1709

    
1710
check_cc <<EOF || die "Symbol mangling check failed."
1711
int ff_extern;
1712
EOF
1713
sym=$($nm -P -g $TMPO | grep ff_extern)
1714
extern_prefix=${sym%%ff_extern*}
1715

    
1716
check_asm inline_asm '""'
1717

    
1718
if enabled x86; then
1719
    # check whether EBP is available on x86
1720
    # As 'i' is stored on the stack, this program will crash
1721
    # if the base pointer is used to access it because the
1722
    # base pointer is cleared in the inline assembly code.
1723
    check_exec_crash <<EOF && enable ebp_available
1724
    volatile int i=0;
1725
    __asm__ volatile (
1726
        "xorl %%ebp, %%ebp"
1727
    ::: "%ebp");
1728
    return i;
1729
EOF
1730

    
1731
    # check wether EBX is available on x86
1732
    check_asm ebx_available '"":::"%ebx"'
1733

    
1734
    # check whether binutils is new enough to compile SSSE3/MMX2
1735
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1736
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1737

    
1738
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1739

    
1740
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1741
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1742
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1743
    case "$objformat" in
1744
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1745
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1746
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1747
    esac
1748
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1749
fi
1750

    
1751
# check for assembler specific support
1752

    
1753
if test $arch = "powerpc"; then
1754
    check_asm dcbzl '"dcbzl 0, 1"'
1755
fi
1756

    
1757
# check for SIMD availability
1758

    
1759
# AltiVec flags: The FSF version of GCC differs from the Apple version
1760
if enabled altivec; then
1761
    check_cflags -maltivec -mabi=altivec &&
1762
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1763
        check_cflags -faltivec
1764

    
1765
    # check if our compiler supports Motorola AltiVec C API
1766
    check_cc <<EOF || disable altivec
1767
$inc_altivec_h
1768
int main(void) {
1769
    vector signed int v1, v2, v3;
1770
    v1 = vec_add(v2,v3);
1771
    return 0;
1772
}
1773
EOF
1774

    
1775
    # check if our compiler supports braces for vector declarations
1776
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1777
$inc_altivec_h
1778
int main (void) { (vector int) {1}; return 0; }
1779
EOF
1780
fi
1781

    
1782
# We have to check if pld is a nop and disable it.
1783
enabled armv4l  && check_asm pld     '"pld [r0]"'
1784
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1785
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1786
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1787
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1788
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1789
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1790
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1791

    
1792
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1793

    
1794
# ---
1795
# big/little-endian test
1796
check_cc <<EOF || die "endian test failed"
1797
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1798
EOF
1799
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1800

    
1801
# ---
1802
# check availability of some header files
1803

    
1804
if check_func dlopen; then
1805
    ldl=
1806
elif check_func dlopen -ldl; then
1807
    ldl=-ldl
1808
fi
1809

    
1810
check_func  fork
1811
check_func  gethrtime
1812
check_func  getrusage
1813
check_func  inet_aton $network_extralibs
1814
check_func  memalign
1815
check_func  mkstemp
1816
check_func_headers windows.h GetProcessTimes
1817

    
1818
check_header conio.h
1819
check_header dlfcn.h
1820
check_header malloc.h
1821
check_header poll.h
1822
check_header sys/mman.h
1823
check_header sys/resource.h
1824
check_header sys/select.h
1825
check_header termios.h
1826

    
1827
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1828
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1829
fi
1830

    
1831
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1832
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1833

    
1834
# check for some common methods of building with pthread support
1835
# do this before the optional library checks as some of them require pthreads
1836
if enabled pthreads; then
1837
    if check_func pthread_create; then
1838
        :
1839
    elif check_func pthread_create -pthread; then
1840
        add_cflags -pthread
1841
        add_extralibs -pthread
1842
    elif check_func pthread_create -pthreads; then
1843
        add_cflags -pthreads
1844
        add_extralibs -pthreads
1845
    elif check_func pthread_create -lpthreadGC2; then
1846
        add_extralibs -lpthreadGC2
1847
    elif ! check_lib pthread.h pthread_create -lpthread; then
1848
        die "ERROR: can't find pthreads library"
1849
    fi
1850
fi
1851

    
1852
for thread in $THREADS_LIST; do
1853
    if enabled $thread; then
1854
        test -n "$thread_type" &&
1855
            die "ERROR: Only one thread type must be selected." ||
1856
            thread_type="$thread"
1857
    fi
1858
done
1859

    
1860
check_lib math.h sin -lm
1861

    
1862
# test for C99 functions in math.h
1863
for func in llrint lrint lrintf round roundf; do
1864
    check_exec <<EOF && enable $func || disable $func
1865
#include <math.h>
1866
int main(void) { return ($func(3.999f) > 0)?0:1; }
1867
EOF
1868
done
1869

    
1870
# these are off by default, so fail if requested and not available
1871
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1872
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1873
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1874
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1875
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1876
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1877
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1878
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1879
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1880
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1881
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1882
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1883
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1884
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1885
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1886
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1887
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1888
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1889
                        die "ERROR: libx264 version must be >= 0.65."; }
1890
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1891
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1892

    
1893
# libdc1394 check
1894
if enabled libdc1394; then
1895
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1896
        enable libdc1394_2; } ||
1897
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1898
        enable libdc1394_1; } ||
1899
    die "ERROR: No version of libdc1394 found "
1900
fi
1901

    
1902

    
1903
_restrict=
1904
for restrict_keyword in restrict __restrict__ __restrict; do
1905
    check_cc <<EOF && _restrict=$restrict_keyword && break
1906
void foo(char * $restrict_keyword p);
1907
EOF
1908
done
1909

    
1910
test "$vhook" = "default" && vhook="$dlopen"
1911

    
1912
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1913
    disable vhook
1914
    echo
1915
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1916
    echo "Patches welcome."
1917
    echo
1918
fi
1919

    
1920
if enabled vhook; then
1921
    check_ldflags -rdynamic
1922
    check_ldflags -export-dynamic
1923
fi
1924

    
1925
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1926
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1927

    
1928
##########################################
1929
# SDL check
1930

    
1931
disable sdl_too_old
1932
disable sdl
1933
SDL_CONFIG="${cross_prefix}sdl-config"
1934
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1935
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1936
    temp_cflags $sdl_cflags
1937
    temp_extralibs `"${SDL_CONFIG}" --libs`
1938
    if check_lib2 SDL.h SDL_Init; then
1939
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1940
        if test "$_sdlversion" -lt 121 ; then
1941
            enable sdl_too_old
1942
        else
1943
            enable sdl
1944
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1945
#include <SDL.h>
1946
int main(int argc, char **argv){
1947
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1948
    int w = vi->current_w;
1949
    return 0;
1950
}
1951
EOF
1952
        fi
1953
    fi
1954
    restore_flags
1955
fi
1956

    
1957
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1958

    
1959
##########################################
1960
# Network check
1961

    
1962
if enabled network; then
1963
    check_type sys/socket.h socklen_t
1964
    # Prefer arpa/inet.h over winsock2
1965
    if check_header arpa/inet.h ; then
1966
        check_func closesocket
1967
    elif check_header winsock2.h ; then
1968
        network_extralibs="-lws2_32"
1969
        check_type ws2tcpip.h socklen_t
1970
        check_func_headers winsock2.h closesocket
1971
    fi
1972
fi
1973

    
1974
##########################################
1975
# IPv6 check
1976

    
1977
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1978
#include <sys/types.h>
1979
#include <sys/socket.h>
1980
#include <netinet/in.h>
1981
#include <netdb.h>
1982
int main(void) {
1983
    struct sockaddr_storage saddr;
1984
    struct ipv6_mreq mreq6;
1985
    getaddrinfo(0,0,0,0);
1986
    getnameinfo(0,0,0,0,0,0,0);
1987
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1988
}
1989
EOF
1990

    
1991
check_header linux/videodev.h
1992
check_header linux/videodev2.h
1993
check_header sys/videoio.h
1994

    
1995
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1996

    
1997
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1998
{ check_header dev/bktr/ioctl_meteor.h &&
1999
  check_header dev/bktr/ioctl_bt848.h; } ||
2000
{ check_header machine/ioctl_meteor.h &&
2001
  check_header machine/ioctl_bt848.h; } ||
2002
{ check_header dev/video/meteor/ioctl_meteor.h &&
2003
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2004
check_header dev/ic/bt8xx.h
2005

    
2006
check_header sys/soundcard.h
2007
check_header soundcard.h
2008

    
2009
# deal with the X11 frame grabber
2010
enabled x11grab                         &&
2011
check_header X11/Xlib.h                 &&
2012
check_header X11/extensions/XShm.h      &&
2013
check_func XOpenDisplay -lX11           &&
2014
check_func XShmCreateImage -lX11 -lXext
2015

    
2016
enabled debug && add_cflags -g"$debuglevel"
2017

    
2018
# add some useful compiler flags if supported
2019
check_cflags -Wdeclaration-after-statement
2020
check_cflags -Wall
2021
check_cflags -Wno-switch
2022
check_cflags -Wdisabled-optimization
2023
check_cflags -Wpointer-arith
2024
check_cflags -Wredundant-decls
2025
check_cflags -Wno-pointer-sign
2026
check_cflags -Wcast-qual
2027
check_cflags -Wwrite-strings
2028
check_cflags -Wtype-limits
2029
enabled extra_warnings && check_cflags -Winline
2030

    
2031
# add some linker flags
2032
check_ldflags -Wl,--warn-common
2033
check_ldflags -Wl,--as-needed
2034
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'
2035
check_ldflags -Wl,-Bsymbolic
2036

    
2037
if enabled small; then
2038
    check_cflags -Os            # not all compilers support -Os
2039
    optimizations="small"
2040
elif enabled optimizations; then
2041
    if $cc -v 2>&1 | grep -q xlc; then
2042
        add_cflags  "-O5"
2043
        add_ldflags "-O5"
2044
    else
2045
        add_cflags "-O3"
2046
    fi
2047
fi
2048
check_cflags -fno-math-errno
2049
check_cflags -fno-signed-zeros
2050

    
2051
# add some flags for Intel C Compiler
2052
if $cc --version 2> /dev/null | grep -q Intel; then
2053
  # Just warnings, no remarks
2054
  check_cflags -w1
2055
  # -wd: Disable following warnings
2056
  # 144, 167, 556: -Wno-pointer-sign
2057
  # 10006: ignoring unknown option -fno-signed-zeros
2058
  # 10156: ignoring option '-W'; no argument required
2059
  check_cflags -wd144,167,556,10006,10156
2060
  # 11030: Warning unknown option --as-needed
2061
  # 10156: ignoring option '-export'; no argument required
2062
  check_ldflags -wd10156,11030
2063
  # Allow to compile with optimizations
2064
  check_ldflags -march=$cpu
2065
fi
2066

    
2067
# PIC flags for shared library objects where they are needed
2068
if enabled shared; then
2069
    # LIBOBJFLAGS may have already been set in the OS configuration
2070
    if test -z "$LIBOBJFLAGS" ; then
2071
        case "$arch" in
2072
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2073
        esac
2074
    fi
2075
fi
2076

    
2077
if enabled gprof; then
2078
    add_cflags  "-p"
2079
    add_ldflags "-p"
2080
fi
2081

    
2082
VHOOKCFLAGS="-fPIC"
2083

    
2084
# Find out if the .align argument is a power of two or not.
2085
check_asm asmalign_pot '".align 3"'
2086

    
2087
enabled_any $DECODER_LIST      && enable decoders
2088
enabled_any $ENCODER_LIST      && enable encoders
2089
enabled_any $BSF_LIST          && enable bsfs
2090
enabled_any $DEMUXER_LIST      && enable demuxers
2091
enabled_any $MUXER_LIST        && enable muxers
2092
enabled_any $FILTER_LIST       && enable filters
2093
enabled_any $INDEV_LIST        && enable demuxers
2094
enabled_any $OUTDEV_LIST       && enable muxers
2095
enabled_any $PROTOCOL_LIST     && enable protocols
2096

    
2097
enabled_any $THREADS_LIST      && enable threads
2098

    
2099
check_deps $CONFIG_LIST       \
2100
           $CONFIG_EXTRA      \
2101
           $HAVE_LIST         \
2102
           $DECODER_LIST      \
2103
           $ENCODER_LIST      \
2104
           $PARSER_LIST       \
2105
           $BSF_LIST          \
2106
           $DEMUXER_LIST      \
2107
           $MUXER_LIST        \
2108
           $FILTER_LIST       \
2109
           $INDEV_LIST        \
2110
           $OUTDEV_LIST       \
2111
           $PROTOCOL_LIST     \
2112

    
2113
enabled libdc1394 && append pkg_requires "libraw1394"
2114
enabled libdirac  && append pkg_requires "dirac"
2115
enabled libtheora && append pkg_requires "theora"
2116
enabled libvorbis && append pkg_requires "vorbisenc"
2117

    
2118
echo "install prefix            $prefix"
2119
echo "source path               $source_path"
2120
echo "C compiler                $cc"
2121
echo ".align is power-of-two    $asmalign_pot"
2122
echo "ARCH                      $arch ($cpu)"
2123
if test "$build_suffix" != ""; then
2124
    echo "build suffix              $build_suffix"
2125
fi
2126
if test "$extra_version" != ""; then
2127
    echo "version string suffix     $extra_version"
2128
fi
2129
echo "big-endian                ${bigendian-no}"
2130
if test $arch = "x86_32" -o $arch = "x86_64"; then
2131
    echo "yasm                      ${yasm-no}"
2132
    echo "MMX enabled               ${mmx-no}"
2133
    echo "CMOV enabled              ${cmov-no}"
2134
    echo "CMOV is fast              ${fast_cmov-no}"
2135
    echo "EBX available             ${ebx_available-no}"
2136
    echo "EBP available             ${ebp_available-no}"
2137
fi
2138
if test $arch = "armv4l"; then
2139
    echo "ARMv5TE enabled           ${armv5te-no}"
2140
    echo "ARMv6 enabled             ${armv6-no}"
2141
    echo "ARM VFP enabled           ${armvfp-no}"
2142
    echo "IWMMXT enabled            ${iwmmxt-no}"
2143
    echo "NEON enabled              ${neon-no}"
2144
fi
2145
if test $arch = "mips"; then
2146
    echo "MMI enabled               ${mmi-no}"
2147
fi
2148
if test $arch = "powerpc"; then
2149
    echo "AltiVec enabled           ${altivec-no}"
2150
    echo "dcbzl available           ${dcbzl-no}"
2151
fi
2152
echo "gprof enabled             ${gprof-no}"
2153
echo "debug symbols             ${debug-no}"
2154
echo "strip symbols             ${stripping-no}"
2155
echo "optimizations             ${optimizations-no}"
2156
echo "static                    ${static-no}"
2157
echo "shared                    ${shared-no}"
2158
echo "postprocessing support    ${postproc-no}"
2159
echo "software scaler enabled   ${swscale-no}"
2160
echo "new filter support        ${avfilter-no}"
2161
echo "filters using lavformat   ${avfilter_lavf-no}"
2162
echo "video hooking             ${vhook-no}"
2163
if enabled vhook; then
2164
    echo "Imlib2 support            ${imlib2-no}"
2165
    echo "FreeType support          ${freetype2-no}"
2166
fi
2167
echo "network support           ${network-no}"
2168
if enabled network; then
2169
    echo "IPv6 support              ${ipv6-no}"
2170
fi
2171
echo "threading support         ${thread_type-no}"
2172
echo "SDL support               ${sdl-no}"
2173
if enabled sdl_too_old; then
2174
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2175
fi
2176
echo "Sun medialib support      ${mlib-no}"
2177
echo "AVISynth enabled          ${avisynth-no}"
2178
echo "libamr-nb support         ${libamr_nb-no}"
2179
echo "libamr-wb support         ${libamr_wb-no}"
2180
echo "libdc1394 support         ${libdc1394-no}"
2181
echo "libdirac enabled          ${libdirac-no}"
2182
echo "libfaac enabled           ${libfaac-no}"
2183
echo "libfaad enabled           ${libfaad-no}"
2184
echo "libfaad dlopened          ${libfaadbin-no}"
2185
echo "libgsm enabled            ${libgsm-no}"
2186
echo "libmp3lame enabled        ${libmp3lame-no}"
2187
echo "libnut enabled            ${libnut-no}"
2188
echo "libschroedinger enabled   ${libschroedinger-no}"
2189
echo "libspeex enabled          ${libspeex-no}"
2190
echo "libtheora enabled         ${libtheora-no}"
2191
echo "libvorbis enabled         ${libvorbis-no}"
2192
echo "libx264 enabled           ${libx264-no}"
2193
echo "libxvid enabled           ${libxvid-no}"
2194
echo "zlib enabled              ${zlib-no}"
2195
echo "bzlib enabled             ${bzlib-no}"
2196
echo
2197

    
2198
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2199
    echo "Enabled ${type}s:"
2200
    eval list=\$$(toupper $type)_LIST
2201
    for part in $list; do
2202
        enabled $part && echo ${part%_*}
2203
    done | sort | pr -3 -t
2204
    echo
2205
done
2206

    
2207
license="LGPL"
2208
if enabled nonfree; then
2209
    license="unredistributable"
2210
elif enabled gpl; then
2211
    license="GPL"
2212
fi
2213

    
2214
echo "License: $license"
2215

    
2216
echo "Creating config.mak and config.h..."
2217

    
2218
echo "# Automatically generated by configure - do not modify!" > config.mak
2219
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2220
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2221
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2222
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2223

    
2224
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2225
echo "prefix=$prefix" >> config.mak
2226
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2227
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2228
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2229
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2230
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2231
echo "CC=$cc" >> config.mak
2232
echo "YASM=$yasmexe" >> config.mak
2233
echo "AR=$ar" >> config.mak
2234
echo "RANLIB=$ranlib" >> config.mak
2235
echo "LN_S=$ln_s" >> config.mak
2236
enabled stripping &&
2237
    echo "STRIP=$strip" >> config.mak ||
2238
    echo "STRIP=echo ignoring strip" >> config.mak
2239

    
2240
echo "OPTFLAGS=$CFLAGS" >> config.mak
2241
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2242
echo "LDFLAGS=$LDFLAGS" >> config.mak
2243
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2244
echo "SHFLAGS=$SHFLAGS" >> config.mak
2245
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2246
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2247
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2248
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2249
echo "BUILD_STATIC=$static" >> config.mak
2250
echo "BUILDSUF=$build_suffix" >> config.mak
2251
echo "FULLNAME=$FULLNAME" >> config.mak
2252
echo "LIBPREF=$LIBPREF" >> config.mak
2253
echo "LIBSUF=$LIBSUF" >> config.mak
2254
echo "LIBNAME=$LIBNAME" >> config.mak
2255
echo "SLIBPREF=$SLIBPREF" >> config.mak
2256
echo "SLIBSUF=$SLIBSUF" >> config.mak
2257
echo "EXESUF=$EXESUF" >> config.mak
2258
echo "EXTRA_VERSION=$extra_version" >> config.mak
2259
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2260
echo "HOSTCC=$host_cc" >> config.mak
2261
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2262
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2263
echo "HOSTLIBS=$host_libs" >> config.mak
2264
echo "TARGET_EXEC=$target_exec" >> config.mak
2265
echo "TARGET_PATH=$target_path" >> config.mak
2266

    
2267
if enabled bigendian; then
2268
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2269
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2270
fi
2271

    
2272
if enabled sdl; then
2273
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2274
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2275
fi
2276
if enabled texi2html; then
2277
    echo "BUILD_DOC=yes" >> config.mak
2278
fi
2279

    
2280
get_version(){
2281
    name=$1
2282
    file=$source_path/$2
2283
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2284
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2285
    lcname=$(tolower $name)
2286
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2287
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2288
}
2289

    
2290
get_version LIBSWSCALE  libswscale/swscale.h
2291
get_version LIBPOSTPROC libpostproc/postprocess.h
2292
get_version LIBAVCODEC  libavcodec/avcodec.h
2293
get_version LIBAVDEVICE libavdevice/avdevice.h
2294
get_version LIBAVFORMAT libavformat/avformat.h
2295
get_version LIBAVUTIL   libavutil/avutil.h
2296
get_version LIBAVFILTER libavfilter/avfilter.h
2297

    
2298
if enabled shared; then
2299
    echo "BUILD_SHARED=yes" >> config.mak
2300
    echo "PIC=-fPIC -DPIC" >> config.mak
2301
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2302
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2303
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2304
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2305
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2306
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2307
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2308
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2309
fi
2310
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2311
echo "EXTRALIBS=$extralibs" >> config.mak
2312

    
2313
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2314
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2315
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2316
                                      $CONFIG_EXTRA      \
2317
                                      $DECODER_LIST      \
2318
                                      $ENCODER_LIST      \
2319
                                      $PARSER_LIST       \
2320
                                      $BSF_LIST          \
2321
                                      $DEMUXER_LIST      \
2322
                                      $MUXER_LIST        \
2323
                                      $FILTER_LIST       \
2324
                                      $PROTOCOL_LIST     \
2325
                                      $INDEV_LIST        \
2326
                                      $OUTDEV_LIST       \
2327

    
2328
echo "#define restrict $_restrict" >> $TMPH
2329

    
2330
if enabled small; then
2331
    echo "#define av_always_inline"  >> $TMPH
2332
fi
2333

    
2334
echo "SRC_PATH=\"$source_path\"" >> config.mak
2335
echo "SRC_PATH_BARE=$source_path" >> config.mak
2336
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2337

    
2338
# Apparently it's not possible to portably echo a backslash.
2339
enabled asmalign_pot &&
2340
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2341
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2342

    
2343
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2344

    
2345
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2346

    
2347
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2348
cmp -s $TMPH config.h &&
2349
    echo "config.h is unchanged" ||
2350
    mv -f $TMPH config.h
2351

    
2352
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2353

    
2354
# build tree in object directory if source path is different from current one
2355
if enabled source_path_used; then
2356
    DIRS="\
2357
        doc               \
2358
        libavcodec        \
2359
        libavcodec/alpha  \
2360
        libavcodec/armv4l \
2361
        libavcodec/bfin   \
2362
        libavcodec/i386   \
2363
        libavcodec/mlib   \
2364
        libavcodec/ppc    \
2365
        libavcodec/sh4    \
2366
        libavcodec/sparc  \
2367
        libavdevice       \
2368
        libavfilter       \
2369
        libavformat       \
2370
        libavutil         \
2371
        libpostproc       \
2372
        libswscale        \
2373
        tests             \
2374
        tools             \
2375
        vhook             \
2376
        "
2377
    FILES="\
2378
        Makefile             \
2379
        common.mak           \
2380
        subdir.mak           \
2381
        doc/texi2pod.pl      \
2382
        libavcodec/Makefile  \
2383
        libavdevice/Makefile \
2384
        libavfilter/Makefile \
2385
        libavformat/Makefile \
2386
        libavutil/Makefile   \
2387
        libpostproc/Makefile \
2388
        libswscale/Makefile  \
2389
        "
2390
    for dir in $DIRS ; do
2391
        mkdir -p $dir
2392
    done
2393
    for f in $FILES ; do
2394
        $ln_s "$source_path/$f" $f
2395
    done
2396
fi
2397

    
2398

    
2399
# build pkg-config files
2400

    
2401
pkgconfig_generate(){
2402
name=$1
2403
shortname=${name#lib}${build_suffix}
2404
comment=$2
2405
version=$3
2406
libs=$4
2407
requires=$5
2408
cat <<EOF > $name/$name.pc
2409
prefix=$prefix
2410
exec_prefix=\${prefix}
2411
libdir=$libdir
2412
includedir=$incdir
2413

    
2414
Name: $name
2415
Description: $comment
2416
Version: $version
2417
Requires: $(disabled shared && echo $requires)
2418
Requires.private: $(enabled shared && echo $requires)
2419
Conflicts:
2420
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2421
Libs.private: $(enabled shared && echo $libs)
2422
Cflags: -I\${includedir}
2423
EOF
2424
cat <<EOF > $name/$name-uninstalled.pc
2425
prefix=
2426
exec_prefix=
2427
libdir=\${pcfiledir}
2428
includedir=${source_path}
2429

    
2430
Name: $name
2431
Description: $comment
2432
Version: $version
2433
Requires: $requires
2434
Conflicts:
2435
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2436
Cflags: -I\${includedir}
2437
EOF
2438
}
2439

    
2440
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2441
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2442
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2443
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2444
enabled avfilter &&
2445
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2446
enabled postproc &&
2447
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2448
if enabled swscale; then
2449
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2450
else
2451
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2452
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2453
fi