Statistics
| Branch: | Revision:

ffmpeg / configure @ a2fc0f6a

History | View | Annotate | Download (70.9 KB)

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

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

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

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

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

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

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

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

    
217
log(){
218
    echo "$@" >> $logfile
219
}
220

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

    
227
echolog(){
228
    log "$@"
229
    echo "$@"
230
}
231

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

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

    
259
tolower(){
260
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
261
}
262

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

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

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

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

    
298
enable(){
299
    set_all yes $*
300
}
301

    
302
disable(){
303
    set_all no $*
304
}
305

    
306
enable_weak(){
307
    set_weak yes $*
308
}
309

    
310
disable_weak(){
311
    set_weak no $*
312
}
313

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

    
327
enable_deep(){
328
    do_enable_deep $*
329
    enable $*
330
}
331

    
332
enable_deep_weak(){
333
    do_enable_deep $*
334
    enable_weak $*
335
}
336

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

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

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

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

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

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

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

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

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

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

    
399
        pushvar cfg dep_all dep_any dep_sel dep_sgs
400
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
401
        popvar cfg dep_all dep_any dep_sel dep_sgs
402

    
403
        enabled_all  $dep_all || disable $cfg
404
        enabled_any  $dep_any || disable $cfg
405
        disabled_any $dep_sel && disable $cfg
406

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

    
414
        disable ${cfg}_checking
415
    done
416
}
417

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

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

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

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

    
456
temp_cflags(){
457
    save_flags
458
    CFLAGS="$CFLAGS $*"
459
}
460

    
461
temp_ldflags(){
462
    save_flags
463
    LDFLAGS="$LDFLAGS $*"
464
}
465

    
466
temp_extralibs(){
467
    save_flags
468
    extralibs="$extralibs $*"
469
}
470

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

    
478
add_cflags(){
479
    append CFLAGS "$@"
480
}
481

    
482
add_ldflags(){
483
    append LDFLAGS "$@"
484
}
485

    
486
add_extralibs(){
487
    append extralibs "$@"
488
}
489

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
635
check_exec_crash(){
636
    code=`cat`
637

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

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

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

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

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

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

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

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

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

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

    
783
THREADS_LIST='
784
    beosthreads
785
    os2threads
786
    pthreads
787
    w32threads
788
'
789

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

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

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

    
883
# options emitted with CONFIG_ prefix but not available on command line
884
CONFIG_EXTRA="
885
    fft_mmx
886
    oldscaler
887
"
888

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

    
903
PATHS_LIST='
904
    bindir
905
    incdir
906
    libdir
907
    mandir
908
    prefix
909
    shlibdir
910
'
911

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

    
932
# code dependency declarations
933

    
934
# architecture extensions
935
altivec_deps="powerpc"
936
armv5te_deps="arm"
937
armv6_deps="arm"
938
armvfp_deps="arm"
939
iwmmxt_deps="arm"
940
mmi_deps="mips"
941
mmx_deps="x86"
942
mmx2_deps="x86 mmx"
943
neon_deps="arm"
944
ssse3_deps="x86"
945
vis_deps="sparc"
946

    
947
# common features
948
fft_suggest="fft_mmx"
949
fft_mmx_deps="mmx yasm"
950
oldscaler_deps="!swscale"
951

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

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

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

    
1071
# protocols
1072
http_protocol_deps="network"
1073
rtp_protocol_deps="udp_protocol"
1074
tcp_protocol_deps="network"
1075
udp_protocol_deps="network"
1076

    
1077
# filters
1078
movie_filter_deps="avfilter_lavf"
1079

    
1080
# programs
1081
ffplay_deps="sdl"
1082
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1083
ffserver_extralibs='$ldl'
1084
vhook_extralibs='$ldl'
1085

    
1086

    
1087
# default parameters
1088

    
1089
logfile="config.err"
1090

    
1091
# installation paths
1092
prefix_default="/usr/local"
1093
bindir_default='${prefix}/bin'
1094
incdir_default='${prefix}/include'
1095
libdir_default='${prefix}/lib'
1096
mandir_default='${prefix}/share/man'
1097
shlibdir_default="$libdir_default"
1098

    
1099
# toolchain
1100
cc_default="gcc"
1101
host_cc_default="gcc"
1102
yasmexe="yasm"
1103
ar="ar"
1104
nm_default="nm"
1105
ranlib="ranlib"
1106
strip="strip"
1107
ln_s="ln -sf"
1108
objformat="elf"
1109

    
1110
# machine
1111
arch=`uname -m`
1112
cpu="generic"
1113

    
1114
# OS
1115
target_os=$(tolower $(uname -s))
1116

    
1117
# configurable options
1118
enable debug
1119
enable ffmpeg
1120
enable ffplay
1121
enable ffserver
1122
enable ipv6
1123
enable mpegaudio_hp
1124
enable network
1125
enable oldscaler
1126
enable optimizations
1127
enable protocols
1128
enable static
1129
enable stripping
1130
vhook="default"
1131

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

    
1148
host_cflags='-O3 -g -Wall'
1149
host_libs='-lm'
1150

    
1151
target_path='.'
1152

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

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

    
1169
FFMPEG_CONFIGURATION="$@"
1170

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

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

    
1189
enable $ARCH_EXT_LIST \
1190
       $DECODER_LIST \
1191
       $ENCODER_LIST \
1192
       $PARSER_LIST \
1193
       $BSF_LIST \
1194
       $DEMUXER_LIST \
1195
       $MUXER_LIST \
1196
       $FILTER_LIST \
1197
       $PROTOCOL_LIST \
1198
       $INDEV_LIST \
1199
       $OUTDEV_LIST \
1200

    
1201
die_unknown(){
1202
    echo "Unknown option \"$1\"."
1203
    echo "See $0 --help for available options."
1204
    exit 1
1205
}
1206

    
1207
show_list() {
1208
    suffix=_$1
1209
    shift
1210
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1211
    exit 0
1212
}
1213

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

    
1262
disabled logging && logfile=/dev/null
1263

    
1264
echo "# $0 $@" > $logfile
1265
set >> $logfile
1266

    
1267
test -n "$cross_prefix" && enable cross_compile
1268

    
1269
cc_default="${cross_prefix}${cc_default}"
1270
yasmexe="${cross_prefix}${yasmexe}"
1271
ar="${cross_prefix}${ar}"
1272
nm_default="${cross_prefix}${nm_default}"
1273
ranlib="${cross_prefix}${ranlib}"
1274
strip="${cross_prefix}${strip}"
1275

    
1276
set_default cc nm
1277
enabled cross_compile || host_cc_default=$cc
1278
set_default host_cc
1279

    
1280
# set temporary file name
1281
if test ! -z "$TMPDIR" ; then
1282
    TMPDIR1="${TMPDIR}"
1283
elif test ! -z "$TEMPDIR" ; then
1284
    TMPDIR1="${TEMPDIR}"
1285
else
1286
    TMPDIR1="/tmp"
1287
fi
1288

    
1289
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1290
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1291
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1292
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1293
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1294
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1295

    
1296
check_cflags -std=c99
1297

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

    
1370
enable $arch
1371
enabled_any x86_32 x86_64 && enable x86
1372
enabled     sparc64       && enable sparc
1373

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

    
1533
    *)
1534
        target_os="${target_os}-UNKNOWN"
1535
        ;;
1536
esac
1537

    
1538
set_default $PATHS_LIST
1539

    
1540
add_extralibs $osextralibs
1541

    
1542
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1543
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1544

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

    
1556
disabled static && LIBNAME=""
1557

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

    
1573

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

    
1588
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1589
    die "libamr is nonfree and --enable-nonfree is not specified."
1590
fi
1591

    
1592
check_deps $ARCH_EXT_LIST
1593

    
1594
test -z "$need_memalign" && need_memalign="$mmx"
1595

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

    
1608
disabled optimizations || check_cflags -fomit-frame-pointer
1609

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

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

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

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

    
1720
check_asm inline_asm '""'
1721

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

    
1735
    # check wether EBX is available on x86
1736
    check_asm ebx_available '"":::"%ebx"'
1737

    
1738
    # check whether binutils is new enough to compile SSSE3/MMX2
1739
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1740
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1741

    
1742
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1743

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

    
1755
# check for assembler specific support
1756

    
1757
if test $arch = "powerpc"; then
1758
    check_asm dcbzl '"dcbzl 0, 1"'
1759
fi
1760

    
1761
# check for SIMD availability
1762

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

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

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

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

    
1796
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1797

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

    
1805
# ---
1806
# check availability of some header files
1807

    
1808
if check_func dlopen; then
1809
    ldl=
1810
elif check_func dlopen -ldl; then
1811
    ldl=-ldl
1812
fi
1813

    
1814
check_func  fork
1815
check_func  gethrtime
1816
check_func  getrusage
1817
check_func  inet_aton $network_extralibs
1818
check_func  memalign
1819
check_func  mkstemp
1820
check_func_headers windows.h GetProcessTimes
1821

    
1822
check_header conio.h
1823
check_header dlfcn.h
1824
check_header malloc.h
1825
check_header poll.h
1826
check_header sys/mman.h
1827
check_header sys/resource.h
1828
check_header sys/select.h
1829
check_header termios.h
1830
check_header X11/extensions/XvMClib.h
1831

    
1832
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1833
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1834
fi
1835

    
1836
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1837
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1838

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

    
1857
for thread in $THREADS_LIST; do
1858
    if enabled $thread; then
1859
        test -n "$thread_type" &&
1860
            die "ERROR: Only one thread type must be selected." ||
1861
            thread_type="$thread"
1862
    fi
1863
done
1864

    
1865
check_lib math.h sin -lm
1866

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

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

    
1898
# libdc1394 check
1899
if enabled libdc1394; then
1900
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1901
        enable libdc1394_2; } ||
1902
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1903
        enable libdc1394_1; } ||
1904
    die "ERROR: No version of libdc1394 found "
1905
fi
1906

    
1907

    
1908
_restrict=
1909
for restrict_keyword in restrict __restrict__ __restrict; do
1910
    check_cc <<EOF && _restrict=$restrict_keyword && break
1911
void foo(char * $restrict_keyword p);
1912
EOF
1913
done
1914

    
1915
test "$vhook" = "default" && vhook="$dlopen"
1916

    
1917
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1918
    disable vhook
1919
    echo
1920
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1921
    echo "Patches welcome."
1922
    echo
1923
fi
1924

    
1925
if enabled vhook; then
1926
    check_ldflags -rdynamic
1927
    check_ldflags -export-dynamic
1928
fi
1929

    
1930
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1931
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1932

    
1933
##########################################
1934
# SDL check
1935

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

    
1962
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1963

    
1964
##########################################
1965
# Network check
1966

    
1967
if enabled network; then
1968
    check_type "sys/types.h sys/socket.h" socklen_t
1969
    # Prefer arpa/inet.h over winsock2
1970
    if check_header arpa/inet.h ; then
1971
        check_func closesocket
1972
    elif check_header winsock2.h ; then
1973
        network_extralibs="-lws2_32"
1974
        check_type ws2tcpip.h socklen_t
1975
        check_func_headers winsock2.h closesocket
1976
    fi
1977
fi
1978

    
1979
##########################################
1980
# IPv6 check
1981

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

    
1996
check_header linux/videodev.h
1997
check_header linux/videodev2.h
1998
check_header sys/videoio.h
1999

    
2000
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2001

    
2002
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2003
{ check_header dev/bktr/ioctl_meteor.h &&
2004
  check_header dev/bktr/ioctl_bt848.h; } ||
2005
{ check_header machine/ioctl_meteor.h &&
2006
  check_header machine/ioctl_bt848.h; } ||
2007
{ check_header dev/video/meteor/ioctl_meteor.h &&
2008
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2009
check_header dev/ic/bt8xx.h
2010

    
2011
check_header sys/soundcard.h
2012
check_header soundcard.h
2013

    
2014
# deal with the X11 frame grabber
2015
enabled x11grab                         &&
2016
check_header X11/Xlib.h                 &&
2017
check_header X11/extensions/XShm.h      &&
2018
check_func XOpenDisplay -lX11           &&
2019
check_func XShmCreateImage -lX11 -lXext
2020

    
2021
enabled debug && add_cflags -g"$debuglevel"
2022

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

    
2036
# add some linker flags
2037
check_ldflags -Wl,--warn-common
2038
check_ldflags -Wl,--as-needed
2039
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'
2040
check_ldflags -Wl,-Bsymbolic
2041

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

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

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

    
2082
if enabled gprof; then
2083
    add_cflags  "-p"
2084
    add_ldflags "-p"
2085
fi
2086

    
2087
VHOOKCFLAGS="-fPIC"
2088

    
2089
# Find out if the .align argument is a power of two or not.
2090
check_asm asmalign_pot '".align 3"'
2091

    
2092
enabled_any $DECODER_LIST      && enable decoders
2093
enabled_any $ENCODER_LIST      && enable encoders
2094
enabled_any $BSF_LIST          && enable bsfs
2095
enabled_any $DEMUXER_LIST      && enable demuxers
2096
enabled_any $MUXER_LIST        && enable muxers
2097
enabled_any $FILTER_LIST       && enable filters
2098
enabled_any $INDEV_LIST        && enable demuxers
2099
enabled_any $OUTDEV_LIST       && enable muxers
2100
enabled_any $PROTOCOL_LIST     && enable protocols
2101

    
2102
enabled_any $THREADS_LIST      && enable threads
2103

    
2104
check_deps $CONFIG_LIST       \
2105
           $CONFIG_EXTRA      \
2106
           $HAVE_LIST         \
2107
           $DECODER_LIST      \
2108
           $ENCODER_LIST      \
2109
           $PARSER_LIST       \
2110
           $BSF_LIST          \
2111
           $DEMUXER_LIST      \
2112
           $MUXER_LIST        \
2113
           $FILTER_LIST       \
2114
           $INDEV_LIST        \
2115
           $OUTDEV_LIST       \
2116
           $PROTOCOL_LIST     \
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 = "arm"; 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/arm    \
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" "libavutil = $LIBAVUTIL_VERSION"
2442
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2443
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2444
enabled avfilter &&
2445
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "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" "" "libavcodec = $LIBAVCODEC_VERSION"
2452
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2453
fi