Statistics
| Branch: | Revision:

ffmpeg / configure @ 49fb20cb

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
940
# code dependency declarations
941

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

    
957
# common features
958
fft_suggest="fft_mmx"
959
fft_mmx_deps="mmx yasm"
960
oldscaler_deps="!swscale"
961

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

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

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

    
1083
# protocols
1084
http_protocol_deps="network"
1085
rtp_protocol_deps="udp_protocol"
1086
tcp_protocol_deps="network"
1087
udp_protocol_deps="network"
1088

    
1089
# filters
1090
movie_filter_deps="avfilter_lavf"
1091

    
1092
# programs
1093
ffplay_deps="sdl"
1094
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1095
ffserver_extralibs='$ldl'
1096
vhook_extralibs='$ldl'
1097

    
1098

    
1099
# default parameters
1100

    
1101
logfile="config.err"
1102

    
1103
# installation paths
1104
prefix_default="/usr/local"
1105
bindir_default='${prefix}/bin'
1106
incdir_default='${prefix}/include'
1107
libdir_default='${prefix}/lib'
1108
mandir_default='${prefix}/share/man'
1109
shlibdir_default="$libdir_default"
1110

    
1111
# toolchain
1112
ar="ar"
1113
cc_default="gcc"
1114
host_cc_default="gcc"
1115
ln_s="ln -sf"
1116
nm_default="nm"
1117
objformat="elf"
1118
ranlib="ranlib"
1119
strip="strip"
1120
yasmexe="yasm"
1121

    
1122
# machine
1123
arch=`uname -m`
1124
cpu="generic"
1125

    
1126
# OS
1127
target_os=$(tolower $(uname -s))
1128

    
1129
# configurable options
1130
enable debug
1131
enable ffmpeg
1132
enable ffplay
1133
enable ffserver
1134
enable ipv6
1135
enable mpegaudio_hp
1136
enable network
1137
enable oldscaler
1138
enable optimizations
1139
enable protocols
1140
enable static
1141
enable stripping
1142
vhook="default"
1143

    
1144
# build settings
1145
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1146
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1147
VHOOKSHFLAGS='$(SHFLAGS)'
1148
FFSERVERLDFLAGS=-Wl,-E
1149
LIBPREF="lib"
1150
LIBSUF=".a"
1151
FULLNAME='$(NAME)$(BUILDSUF)'
1152
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1153
SLIBPREF="lib"
1154
SLIBSUF=".so"
1155
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1156
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1157
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1158
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1159

    
1160
host_cflags='-O3 -g -Wall'
1161
host_libs='-lm'
1162

    
1163
target_path='.'
1164

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

    
1169
# find source path
1170
source_path="`dirname \"$0\"`"
1171
enable source_path_used
1172
if test -z "$source_path" -o "$source_path" = "." ; then
1173
    source_path="`pwd`"
1174
    disable source_path_used
1175
else
1176
    source_path="`cd \"$source_path\"; pwd`"
1177
    echo "$source_path" | grep -q '[[:blank:]]' &&
1178
        die "Out of tree builds are impossible with whitespace in source path."
1179
fi
1180

    
1181
FFMPEG_CONFIGURATION="$@"
1182

    
1183
find_things(){
1184
    thing=$1
1185
    pattern=$2
1186
    file=$source_path/$3
1187
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1188
}
1189

    
1190
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1191
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1192
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1193
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1194
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1195
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1196
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1197
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1198
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1199
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1200

    
1201
enable $ARCH_EXT_LIST \
1202
       $DECODER_LIST \
1203
       $ENCODER_LIST \
1204
       $PARSER_LIST \
1205
       $BSF_LIST \
1206
       $DEMUXER_LIST \
1207
       $MUXER_LIST \
1208
       $FILTER_LIST \
1209
       $PROTOCOL_LIST \
1210
       $INDEV_LIST \
1211
       $OUTDEV_LIST \
1212

    
1213
die_unknown(){
1214
    echo "Unknown option \"$1\"."
1215
    echo "See $0 --help for available options."
1216
    exit 1
1217
}
1218

    
1219
show_list() {
1220
    suffix=_$1
1221
    shift
1222
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1223
    exit 0
1224
}
1225

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

    
1274
disabled logging && logfile=/dev/null
1275

    
1276
echo "# $0 $@" > $logfile
1277
set >> $logfile
1278

    
1279
test -n "$cross_prefix" && enable cross_compile
1280

    
1281
ar="${cross_prefix}${ar}"
1282
cc_default="${cross_prefix}${cc_default}"
1283
nm_default="${cross_prefix}${nm_default}"
1284
ranlib="${cross_prefix}${ranlib}"
1285
strip="${cross_prefix}${strip}"
1286

    
1287
set_default cc nm
1288
enabled cross_compile || host_cc_default=$cc
1289
set_default host_cc
1290

    
1291
# set temporary file name
1292
: ${TMPDIR:=$TEMPDIR}
1293
: ${TMPDIR:=$TMP}
1294
: ${TMPDIR:=/tmp}
1295

    
1296
TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1297
TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1298
TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1299
TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1300
TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1301
TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1302

    
1303
check_cflags -std=c99
1304

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

    
1380
enable $arch $subarch
1381

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

    
1542
    *)
1543
        target_os="${target_os}-UNKNOWN"
1544
        ;;
1545
esac
1546

    
1547
set_default $PATHS_LIST
1548

    
1549
add_extralibs $osextralibs
1550

    
1551
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1552
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1553

    
1554
# we need to build at least one lib type
1555
if ! enabled_any static shared; then
1556
    cat <<EOF
1557
At least one library type must be built.
1558
Specify --enable-static to build the static libraries or --enable-shared to
1559
build the shared libraries as well. To only build the shared libraries specify
1560
--disable-static in addition to --enable-shared.
1561
EOF
1562
    exit 1;
1563
fi
1564

    
1565
disabled static && LIBNAME=""
1566

    
1567
if enabled_any libfaad libfaadbin ; then
1568
    if check_header faad.h; then
1569
        check_cc <<EOF
1570
#include <faad.h>
1571
#ifndef FAAD2_VERSION
1572
ok faad1
1573
#endif
1574
int main(void) { return 0; }
1575
EOF
1576
        test $? = 0 && enable libfaad2
1577
    else
1578
        die "FAAD test failed."
1579
    fi
1580
fi
1581

    
1582

    
1583
if ! enabled gpl; then
1584
    die_gpl_disabled(){
1585
        name=$1
1586
        shift
1587
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1588
    }
1589
    die_gpl_disabled "The Postprocessing code" postproc
1590
    die_gpl_disabled "libx264"                 libx264
1591
    die_gpl_disabled "libxvidcore"             libxvid
1592
    die_gpl_disabled "FAAD2"                   libfaad2
1593
    die_gpl_disabled "The X11 grabber"         x11grab
1594
    die_gpl_disabled "The software scaler"     swscale
1595
fi
1596

    
1597
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1598
    die "libamr is nonfree and --enable-nonfree is not specified."
1599
fi
1600

    
1601
check_deps $ARCH_EXT_LIST
1602

    
1603
test -z "$need_memalign" && need_memalign="$mmx"
1604

    
1605
#Darwin CC versions
1606
if test $target_os = darwin; then
1607
    if $cc -v 2>&1 | grep -q xlc; then
1608
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1609
    else
1610
        add_cflags -pipe
1611
        check_cflags -force_cpusubtype_ALL
1612
        check_cflags -Wno-sign-compare
1613
        enabled shared || check_cflags -mdynamic-no-pic
1614
    fi
1615
fi
1616

    
1617
disabled optimizations || check_cflags -fomit-frame-pointer
1618

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

    
1698
# make sure we can execute files in $TMPDIR
1699
cat > $TMPSH 2>> $logfile <<EOF
1700
#! /bin/sh
1701
EOF
1702
chmod +x $TMPSH >> $logfile 2>&1
1703
if ! $TMPSH >> $logfile 2>&1; then
1704
    cat <<EOF
1705
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1706
variable to another directory and make sure that it is not mounted noexec.
1707
EOF
1708
    die "Sanity test failed."
1709
fi
1710
rm $TMPSH
1711

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

    
1725
check_cc <<EOF || die "Symbol mangling check failed."
1726
int ff_extern;
1727
EOF
1728
sym=$($nm -P -g $TMPO | grep ff_extern)
1729
extern_prefix=${sym%%ff_extern*}
1730

    
1731
check_asm inline_asm '""'
1732

    
1733
if enabled x86; then
1734
    # check whether EBP is available on x86
1735
    # As 'i' is stored on the stack, this program will crash
1736
    # if the base pointer is used to access it because the
1737
    # base pointer is cleared in the inline assembly code.
1738
    check_exec_crash <<EOF && enable ebp_available
1739
    volatile int i=0;
1740
    __asm__ volatile (
1741
        "xorl %%ebp, %%ebp"
1742
    ::: "%ebp");
1743
    return i;
1744
EOF
1745

    
1746
    # check wether EBX is available on x86
1747
    check_asm ebx_available '"":::"%ebx"'
1748

    
1749
    # check whether binutils is new enough to compile SSSE3/MMX2
1750
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1751
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1752

    
1753
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1754

    
1755
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1756
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1757
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1758
    case "$objformat" in
1759
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1760
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1761
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1762
    esac
1763
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1764
fi
1765

    
1766
# check for assembler specific support
1767

    
1768
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1769

    
1770
# check for SIMD availability
1771

    
1772
# AltiVec flags: The FSF version of GCC differs from the Apple version
1773
if enabled altivec; then
1774
    check_cflags -maltivec -mabi=altivec &&
1775
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1776
        check_cflags -faltivec
1777

    
1778
    # check if our compiler supports Motorola AltiVec C API
1779
    check_cc <<EOF || disable altivec
1780
$inc_altivec_h
1781
int main(void) {
1782
    vector signed int v1, v2, v3;
1783
    v1 = vec_add(v2,v3);
1784
    return 0;
1785
}
1786
EOF
1787

    
1788
    # check if our compiler supports braces for vector declarations
1789
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1790
$inc_altivec_h
1791
int main (void) { (vector int) {1}; return 0; }
1792
EOF
1793
fi
1794

    
1795
# We have to check if pld is a nop and disable it.
1796
enabled arm     && check_asm pld     '"pld [r0]"'
1797
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1798
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1799
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1800
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1801
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1802
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1803
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1804
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1805

    
1806
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1807

    
1808
# ---
1809
# big/little-endian test
1810
check_cc <<EOF || die "endian test failed"
1811
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1812
EOF
1813
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1814

    
1815
# ---
1816
# check availability of some header files
1817

    
1818
if check_func dlopen; then
1819
    ldl=
1820
elif check_func dlopen -ldl; then
1821
    ldl=-ldl
1822
fi
1823

    
1824
check_func  fork
1825
check_func  gethrtime
1826
check_func  getrusage
1827
check_func  inet_aton $network_extralibs
1828
check_func  memalign
1829
check_func  mkstemp
1830
check_func  posix_memalign
1831
check_func_headers io.h setmode
1832
check_func_headers windows.h GetProcessTimes
1833

    
1834
check_header conio.h
1835
check_header dlfcn.h
1836
check_header malloc.h
1837
check_header poll.h
1838
check_header sys/mman.h
1839
check_header sys/resource.h
1840
check_header sys/select.h
1841
check_header termios.h
1842
check_header vdpau/vdpau.h
1843
check_header vdpau/vdpau_x11.h
1844
check_header X11/extensions/XvMClib.h
1845

    
1846
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1847
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1848
fi
1849

    
1850
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1851
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1852

    
1853
# check for some common methods of building with pthread support
1854
# do this before the optional library checks as some of them require pthreads
1855
if enabled pthreads; then
1856
    if check_func pthread_create; then
1857
        :
1858
    elif check_func pthread_create -pthread; then
1859
        add_cflags -pthread
1860
        add_extralibs -pthread
1861
    elif check_func pthread_create -pthreads; then
1862
        add_cflags -pthreads
1863
        add_extralibs -pthreads
1864
    elif check_func pthread_create -lpthreadGC2; then
1865
        add_extralibs -lpthreadGC2
1866
    elif ! check_lib pthread.h pthread_create -lpthread; then
1867
        die "ERROR: can't find pthreads library"
1868
    fi
1869
fi
1870

    
1871
for thread in $THREADS_LIST; do
1872
    if enabled $thread; then
1873
        test -n "$thread_type" &&
1874
            die "ERROR: Only one thread type must be selected." ||
1875
            thread_type="$thread"
1876
    fi
1877
done
1878

    
1879
check_lib math.h sin -lm
1880

    
1881
# test for C99 functions in math.h
1882
for func in llrint lrint lrintf round roundf truncf; do
1883
    check_exec <<EOF && enable $func || disable $func
1884
#include <math.h>
1885
int main(void) { return ($func(3.999f) > 0)?0:1; }
1886
EOF
1887
done
1888

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

    
1912
# libdc1394 check
1913
if enabled libdc1394; then
1914
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1915
        enable libdc1394_2; } ||
1916
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1917
        enable libdc1394_1; } ||
1918
    die "ERROR: No version of libdc1394 found "
1919
fi
1920

    
1921

    
1922
_restrict=
1923
for restrict_keyword in restrict __restrict__ __restrict; do
1924
    check_cc <<EOF && _restrict=$restrict_keyword && break
1925
void foo(char * $restrict_keyword p);
1926
EOF
1927
done
1928

    
1929
test "$vhook" = "default" && vhook="$dlopen"
1930

    
1931
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1932
    disable vhook
1933
    echo
1934
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1935
    echo "Patches welcome."
1936
    echo
1937
fi
1938

    
1939
if enabled vhook; then
1940
    check_ldflags -rdynamic
1941
    check_ldflags -export-dynamic
1942
fi
1943

    
1944
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1945
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1946

    
1947
##########################################
1948
# SDL check
1949

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

    
1976
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1977

    
1978
##########################################
1979
# Network check
1980

    
1981
if enabled network; then
1982
    check_type "sys/types.h sys/socket.h" socklen_t
1983
    # Prefer arpa/inet.h over winsock2
1984
    if check_header arpa/inet.h ; then
1985
        check_func closesocket
1986
    elif check_header winsock2.h ; then
1987
        network_extralibs="-lws2_32"
1988
        check_type ws2tcpip.h socklen_t
1989
        check_func_headers winsock2.h closesocket
1990
    fi
1991
fi
1992

    
1993
##########################################
1994
# IPv6 check
1995

    
1996
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1997
#include <sys/types.h>
1998
#include <sys/socket.h>
1999
#include <netinet/in.h>
2000
#include <netdb.h>
2001
int main(void) {
2002
    struct sockaddr_storage saddr;
2003
    struct ipv6_mreq mreq6;
2004
    getaddrinfo(0,0,0,0);
2005
    getnameinfo(0,0,0,0,0,0,0);
2006
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2007
}
2008
EOF
2009

    
2010
check_header linux/videodev.h
2011
check_header linux/videodev2.h
2012
check_header sys/videoio.h
2013

    
2014
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2015

    
2016
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2017
{ check_header dev/bktr/ioctl_meteor.h &&
2018
  check_header dev/bktr/ioctl_bt848.h; } ||
2019
{ check_header machine/ioctl_meteor.h &&
2020
  check_header machine/ioctl_bt848.h; } ||
2021
{ check_header dev/video/meteor/ioctl_meteor.h &&
2022
  check_header dev/video/bktr/ioctl_bt848.h; } ||
2023
check_header dev/ic/bt8xx.h
2024

    
2025
check_header sys/soundcard.h
2026
check_header soundcard.h
2027

    
2028
# deal with the X11 frame grabber
2029
enabled x11grab                         &&
2030
check_header X11/Xlib.h                 &&
2031
check_header X11/extensions/XShm.h      &&
2032
check_func XOpenDisplay -lX11           &&
2033
check_func XShmCreateImage -lX11 -lXext
2034

    
2035
enabled debug && add_cflags -g"$debuglevel"
2036

    
2037
# add some useful compiler flags if supported
2038
check_cflags -Wdeclaration-after-statement
2039
check_cflags -Wall
2040
check_cflags -Wno-switch
2041
check_cflags -Wdisabled-optimization
2042
check_cflags -Wpointer-arith
2043
check_cflags -Wredundant-decls
2044
check_cflags -Wno-pointer-sign
2045
check_cflags -Wcast-qual
2046
check_cflags -Wwrite-strings
2047
check_cflags -Wtype-limits
2048
enabled extra_warnings && check_cflags -Winline
2049

    
2050
# add some linker flags
2051
check_ldflags -Wl,--warn-common
2052
check_ldflags -Wl,--as-needed
2053
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'
2054
check_ldflags -Wl,-Bsymbolic
2055

    
2056
if enabled small; then
2057
    check_cflags -Os            # not all compilers support -Os
2058
    optimizations="small"
2059
elif enabled optimizations; then
2060
    if $cc -v 2>&1 | grep -q xlc; then
2061
        add_cflags  -O5
2062
        add_ldflags -O5
2063
    else
2064
        add_cflags -O3
2065
    fi
2066
fi
2067
check_cflags -fno-math-errno
2068
check_cflags -fno-signed-zeros
2069

    
2070
# add some flags for Intel C Compiler
2071
if $cc --version 2> /dev/null | grep -q Intel; then
2072
  # Just warnings, no remarks
2073
  check_cflags -w1
2074
  # -wd: Disable following warnings
2075
  # 144, 167, 556: -Wno-pointer-sign
2076
  # 10006: ignoring unknown option -fno-signed-zeros
2077
  # 10156: ignoring option '-W'; no argument required
2078
  check_cflags -wd144,167,556,10006,10156
2079
  # 11030: Warning unknown option --as-needed
2080
  # 10156: ignoring option '-export'; no argument required
2081
  check_ldflags -wd10156,11030
2082
  # Allow to compile with optimizations
2083
  check_ldflags -march=$cpu
2084
fi
2085

    
2086
# PIC flags for shared library objects where they are needed
2087
if enabled shared; then
2088
    # LIBOBJFLAGS may have already been set in the OS configuration
2089
    if test -z "$LIBOBJFLAGS" ; then
2090
        case "${subarch-$arch}" in
2091
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2092
        esac
2093
    fi
2094
fi
2095

    
2096
if enabled gprof; then
2097
    add_cflags  -p
2098
    add_ldflags -p
2099
fi
2100

    
2101
VHOOKCFLAGS="-fPIC"
2102

    
2103
# Find out if the .align argument is a power of two or not.
2104
check_asm asmalign_pot '".align 3"'
2105

    
2106
enabled_any $DECODER_LIST      && enable decoders
2107
enabled_any $ENCODER_LIST      && enable encoders
2108
enabled_any $BSF_LIST          && enable bsfs
2109
enabled_any $DEMUXER_LIST      && enable demuxers
2110
enabled_any $MUXER_LIST        && enable muxers
2111
enabled_any $FILTER_LIST       && enable filters
2112
enabled_any $INDEV_LIST        && enable demuxers
2113
enabled_any $OUTDEV_LIST       && enable muxers
2114
enabled_any $PROTOCOL_LIST     && enable protocols
2115

    
2116
enabled_any $THREADS_LIST      && enable threads
2117

    
2118
check_deps $CONFIG_LIST       \
2119
           $CONFIG_EXTRA      \
2120
           $HAVE_LIST         \
2121
           $DECODER_LIST      \
2122
           $ENCODER_LIST      \
2123
           $PARSER_LIST       \
2124
           $BSF_LIST          \
2125
           $DEMUXER_LIST      \
2126
           $MUXER_LIST        \
2127
           $FILTER_LIST       \
2128
           $INDEV_LIST        \
2129
           $OUTDEV_LIST       \
2130
           $PROTOCOL_LIST     \
2131

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

    
2215
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2216
    echo "Enabled ${type}s:"
2217
    eval list=\$$(toupper $type)_LIST
2218
    for part in $list; do
2219
        enabled $part && echo ${part%_*}
2220
    done | sort | pr -3 -t
2221
    echo
2222
done
2223

    
2224
license="LGPL"
2225
if enabled nonfree; then
2226
    license="unredistributable"
2227
elif enabled gpl; then
2228
    license="GPL"
2229
fi
2230

    
2231
echo "License: $license"
2232

    
2233
echo "Creating config.mak and config.h..."
2234

    
2235
echo "# Automatically generated by configure - do not modify!" > config.mak
2236
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2237
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2238
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2239
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2240

    
2241
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2242
echo "prefix=$prefix" >> config.mak
2243
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2244
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2245
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2246
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2247
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2248
echo "CC=$cc" >> config.mak
2249
echo "YASM=$yasmexe" >> config.mak
2250
echo "AR=$ar" >> config.mak
2251
echo "RANLIB=$ranlib" >> config.mak
2252
echo "LN_S=$ln_s" >> config.mak
2253
enabled stripping &&
2254
    echo "STRIP=$strip" >> config.mak ||
2255
    echo "STRIP=echo ignoring strip" >> config.mak
2256

    
2257
echo "OPTFLAGS=$CFLAGS" >> config.mak
2258
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2259
echo "LDFLAGS=$LDFLAGS" >> config.mak
2260
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2261
echo "SHFLAGS=$SHFLAGS" >> config.mak
2262
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2263
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2264
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2265
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2266
echo "BUILD_STATIC=$static" >> config.mak
2267
echo "BUILDSUF=$build_suffix" >> config.mak
2268
echo "FULLNAME=$FULLNAME" >> config.mak
2269
echo "LIBPREF=$LIBPREF" >> config.mak
2270
echo "LIBSUF=$LIBSUF" >> config.mak
2271
echo "LIBNAME=$LIBNAME" >> config.mak
2272
echo "SLIBPREF=$SLIBPREF" >> config.mak
2273
echo "SLIBSUF=$SLIBSUF" >> config.mak
2274
echo "EXESUF=$EXESUF" >> config.mak
2275
echo "EXTRA_VERSION=$extra_version" >> config.mak
2276
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2277
echo "HOSTCC=$host_cc" >> config.mak
2278
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2279
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2280
echo "HOSTLIBS=$host_libs" >> config.mak
2281
echo "TARGET_EXEC=$target_exec" >> config.mak
2282
echo "TARGET_PATH=$target_path" >> config.mak
2283

    
2284
if enabled bigendian; then
2285
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2286
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2287
fi
2288

    
2289
if enabled sdl; then
2290
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2291
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2292
fi
2293
if enabled texi2html; then
2294
    echo "BUILD_DOC=yes" >> config.mak
2295
fi
2296

    
2297
get_version(){
2298
    name=$1
2299
    file=$source_path/$2
2300
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2301
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2302
    lcname=$(tolower $name)
2303
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2304
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2305
}
2306

    
2307
get_version LIBSWSCALE  libswscale/swscale.h
2308
get_version LIBPOSTPROC libpostproc/postprocess.h
2309
get_version LIBAVCODEC  libavcodec/avcodec.h
2310
get_version LIBAVDEVICE libavdevice/avdevice.h
2311
get_version LIBAVFORMAT libavformat/avformat.h
2312
get_version LIBAVUTIL   libavutil/avutil.h
2313
get_version LIBAVFILTER libavfilter/avfilter.h
2314

    
2315
if enabled shared; then
2316
    echo "BUILD_SHARED=yes" >> config.mak
2317
    echo "PIC=-fPIC -DPIC" >> config.mak
2318
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2319
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2320
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2321
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2322
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2323
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2324
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2325
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2326
fi
2327
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2328
echo "EXTRALIBS=$extralibs" >> config.mak
2329

    
2330
echo "ARCH=$arch" >> config.mak
2331

    
2332
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2333
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2334
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2335
                                      $CONFIG_EXTRA      \
2336
                                      $DECODER_LIST      \
2337
                                      $ENCODER_LIST      \
2338
                                      $PARSER_LIST       \
2339
                                      $BSF_LIST          \
2340
                                      $DEMUXER_LIST      \
2341
                                      $MUXER_LIST        \
2342
                                      $FILTER_LIST       \
2343
                                      $PROTOCOL_LIST     \
2344
                                      $INDEV_LIST        \
2345
                                      $OUTDEV_LIST       \
2346

    
2347
echo "#define restrict $_restrict" >> $TMPH
2348

    
2349
if enabled small; then
2350
    echo "#define av_always_inline"  >> $TMPH
2351
fi
2352

    
2353
echo "SRC_PATH=\"$source_path\"" >> config.mak
2354
echo "SRC_PATH_BARE=$source_path" >> config.mak
2355
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2356

    
2357
# Apparently it's not possible to portably echo a backslash.
2358
enabled asmalign_pot &&
2359
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2360
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2361

    
2362
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2363

    
2364
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2365

    
2366
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2367
cmp -s $TMPH config.h &&
2368
    echo "config.h is unchanged" ||
2369
    mv -f $TMPH config.h
2370

    
2371
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2372

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

    
2417

    
2418
# build pkg-config files
2419

    
2420
pkgconfig_generate(){
2421
name=$1
2422
shortname=${name#lib}${build_suffix}
2423
comment=$2
2424
version=$3
2425
libs=$4
2426
requires=$5
2427
cat <<EOF > $name/$name.pc
2428
prefix=$prefix
2429
exec_prefix=\${prefix}
2430
libdir=$libdir
2431
includedir=$incdir
2432

    
2433
Name: $name
2434
Description: $comment
2435
Version: $version
2436
Requires: $(disabled shared && echo $requires)
2437
Requires.private: $(enabled shared && echo $requires)
2438
Conflicts:
2439
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2440
Libs.private: $(enabled shared && echo $libs)
2441
Cflags: -I\${includedir}
2442
EOF
2443
cat <<EOF > $name/$name-uninstalled.pc
2444
prefix=
2445
exec_prefix=
2446
libdir=\${pcfiledir}
2447
includedir=${source_path}
2448

    
2449
Name: $name
2450
Description: $comment
2451
Version: $version
2452
Requires: $requires
2453
Conflicts:
2454
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2455
Cflags: -I\${includedir}
2456
EOF
2457
}
2458

    
2459
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2460
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2461
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2462
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2463
enabled avfilter &&
2464
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2465
enabled postproc &&
2466
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2467
if enabled swscale; then
2468
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2469
else
2470
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2471
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2472
fi