Statistics
| Branch: | Revision:

ffmpeg / configure @ 88268e94

History | View | Annotate | Download (69.7 KB)

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

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

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

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

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

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

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

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

    
208
log(){
209
    echo "$@" >> $logfile
210
}
211

    
212
log_file(){
213
    log BEGIN $1
214
    pr -n -t $1 >> $logfile
215
    log END $1
216
}
217

    
218
echolog(){
219
    log "$@"
220
    echo "$@"
221
}
222

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

    
245
# Avoid locale weirdness, besides we really just want to translate ASCII.
246
toupper(){
247
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
248
}
249

    
250
tolower(){
251
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
252
}
253

    
254
set_all(){
255
    value=$1
256
    shift
257
    for var in $*; do
258
        eval $var=$value
259
    done
260
}
261

    
262
set_weak(){
263
    value=$1
264
    shift
265
    for var; do
266
        eval : \${$var:=$value}
267
    done
268
}
269

    
270
pushvar(){
271
    for var in $*; do
272
        eval level=\${${var}_level:=0}
273
        eval ${var}_${level}="\$$var"
274
        eval ${var}_level=$(($level+1))
275
    done
276
}
277

    
278
popvar(){
279
    for var in $*; do
280
        eval level=\${${var}_level:-0}
281
        test $level = 0 && continue
282
        eval level=$(($level-1))
283
        eval $var="\${${var}_${level}}"
284
        eval ${var}_level=$level
285
        eval unset ${var}_${level}
286
    done
287
}
288

    
289
enable(){
290
    set_all yes $*
291
}
292

    
293
disable(){
294
    set_all no $*
295
}
296

    
297
enable_weak(){
298
    set_weak yes $*
299
}
300

    
301
disable_weak(){
302
    set_weak no $*
303
}
304

    
305
do_enable_deep(){
306
    for var; do
307
        enabled $var && continue
308
        eval sel="\$${var}_select"
309
        eval sgs="\$${var}_suggest"
310
        pushvar var sgs
311
        enable_deep $sel
312
        popvar sgs
313
        enable_deep_weak $sgs
314
        popvar var
315
    done
316
}
317

    
318
enable_deep(){
319
    do_enable_deep $*
320
    enable $*
321
}
322

    
323
enable_deep_weak(){
324
    do_enable_deep $*
325
    enable_weak $*
326
}
327

    
328
enabled(){
329
    test "${1#!}" = "$1" && op== || op=!=
330
    eval test "x\$${1#!}" $op "xyes"
331
}
332

    
333
disabled(){
334
    test "${1#!}" = "$1" && op== || op=!=
335
    eval test "x\$${1#!}" $op "xno"
336
}
337

    
338
enabled_all(){
339
    for opt; do
340
        enabled $opt || return 1
341
    done
342
}
343

    
344
disabled_all(){
345
    for opt; do
346
        disabled $opt || return 1
347
    done
348
}
349

    
350
enabled_any(){
351
    for opt; do
352
        enabled $opt && return 0
353
    done
354
}
355

    
356
disabled_any(){
357
    for opt; do
358
        disabled $opt && return 0
359
    done
360
    return 1
361
}
362

    
363
set_default(){
364
    for opt; do
365
        eval : \${$opt:=\$${opt}_default}
366
    done
367
}
368

    
369
is_in(){
370
    value=$1
371
    shift
372
    for var in $*; do
373
        [ $var = $value ] && return 0
374
    done
375
    return 1
376
}
377

    
378
check_deps(){
379
    for cfg; do
380
        cfg="${cfg#!}"
381
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
382
        disabled ${cfg}_checking && continue
383
        enable ${cfg}_checking
384

    
385
        eval dep_all="\$${cfg}_deps"
386
        eval dep_any="\$${cfg}_deps_any"
387
        eval dep_sel="\$${cfg}_select"
388
        eval dep_sgs="\$${cfg}_suggest"
389

    
390
        pushvar cfg dep_all dep_any dep_sel dep_sgs
391
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
392
        popvar cfg dep_all dep_any dep_sel dep_sgs
393

    
394
        enabled_all  $dep_all || disable $cfg
395
        enabled_any  $dep_any || disable $cfg
396
        disabled_any $dep_sel && disable $cfg
397

    
398
        if enabled $cfg; then
399
            eval dep_extralibs="\$${cfg}_extralibs"
400
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
401
            enable_deep $dep_sel
402
            enable_deep_weak $dep_sgs
403
        fi
404

    
405
        disable ${cfg}_checking
406
    done
407
}
408

    
409
print_config(){
410
    pfx=$1
411
    header=$2
412
    makefile=$3
413
    shift 3
414
    for cfg; do
415
        ucname="`toupper $cfg`"
416
        if enabled $cfg; then
417
            echo "#define ${pfx}${ucname} 1" >> $header
418
            echo "#define ENABLE_${ucname} 1" >> $header
419
            echo "${pfx}${ucname}=yes" >> $makefile
420
        else
421
            echo "#define ENABLE_${ucname} 0" >> $header
422
        fi
423
    done
424
}
425

    
426
flags_saved(){
427
    (: ${SAVE_CFLAGS?}) 2> /dev/null
428
}
429

    
430
save_flags(){
431
    flags_saved && return
432
    SAVE_CFLAGS="$CFLAGS"
433
    SAVE_LDFLAGS="$LDFLAGS"
434
    SAVE_extralibs="$extralibs"
435
}
436

    
437
restore_flags(){
438
    flags_saved || return
439
    CFLAGS="$SAVE_CFLAGS"
440
    LDFLAGS="$SAVE_LDFLAGS"
441
    extralibs="$SAVE_extralibs"
442
    unset SAVE_CFLAGS
443
    unset SAVE_LDFLAGS
444
    unset SAVE_extralibs
445
}
446

    
447
temp_cflags(){
448
    save_flags
449
    CFLAGS="$CFLAGS $*"
450
}
451

    
452
temp_ldflags(){
453
    save_flags
454
    LDFLAGS="$LDFLAGS $*"
455
}
456

    
457
temp_extralibs(){
458
    save_flags
459
    extralibs="$extralibs $*"
460
}
461

    
462
append(){
463
    var=$1
464
    shift
465
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
466
    eval "$var=\"\$$var $*\""
467
}
468

    
469
add_cflags(){
470
    append CFLAGS "$@"
471
}
472

    
473
add_ldflags(){
474
    append LDFLAGS "$@"
475
}
476

    
477
add_extralibs(){
478
    append extralibs "$@"
479
}
480

    
481
check_cmd(){
482
    log "$@"
483
    "$@" >> $logfile 2>&1
484
}
485

    
486
check_cc(){
487
    log check_cc "$@"
488
    cat > $TMPC
489
    log_file $TMPC
490
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
491
}
492

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

    
500
check_asm(){
501
    log check_asm "$@"
502
    name="$1"
503
    asm="$2"
504
    shift 2
505
    check_cc "$@" <<EOF && enable $name || disable $name
506
int foo(void){ __asm__ volatile($asm); }
507
EOF
508
}
509

    
510
check_yasm(){
511
    log check_yasm "$@"
512
    echo "$1" > $TMPS
513
    log_file $TMPS
514
    shift 1
515
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
516
}
517

    
518
check_ld(){
519
    log check_ld "$@"
520
    check_cc || return
521
    flags=''
522
    libs=''
523
    for f; do
524
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
525
    done
526
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
527
}
528

    
529
check_cflags(){
530
    log check_cflags "$@"
531
    check_cc "$@" <<EOF && add_cflags "$@"
532
int x;
533
EOF
534
}
535

    
536
check_ldflags(){
537
    log check_ldflags "$@"
538
    check_ld "$@" <<EOF && add_ldflags "$@"
539
int main(void){ return 0; }
540
EOF
541
}
542

    
543
check_header(){
544
    log check_header "$@"
545
    header=$1
546
    shift
547
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
548
    disable $var
549
    check_cpp "$@" <<EOF && enable $var
550
#include <$header>
551
int x;
552
EOF
553
}
554

    
555
check_func(){
556
    log check_func "$@"
557
    func=$1
558
    shift
559
    disable $func
560
    check_ld "$@" <<EOF && enable $func
561
extern int $func();
562
int main(void){ $func(); }
563
EOF
564
}
565

    
566
check_func_headers(){
567
    log check_func_headers "$@"
568
    headers=$1
569
    func=$2
570
    shift 2
571
    disable $func
572
    incs=""
573
    for hdr in $headers; do
574
        incs="$incs
575
#include <$hdr>"
576
    done
577
    check_ld "$@" <<EOF && enable $func
578
$incs
579
int main(int argc, char **argv){
580
    (void) $func;
581
    return 0;
582
}
583
EOF
584
}
585

    
586
check_cpp_condition(){
587
    log check_cpp_condition "$@"
588
    header=$1
589
    condition=$2
590
    check_cpp <<EOF
591
#include <$header>
592
#if !($condition)
593
#error "unsatisfied condition: $condition"
594
#endif
595
EOF
596
}
597

    
598
check_lib(){
599
    log check_lib "$@"
600
    header="$1"
601
    func="$2"
602
    shift 2
603
    temp_extralibs "$@"
604
    check_header $header && check_func $func && add_extralibs "$@"
605
    err=$?
606
    restore_flags
607
    return $err
608
}
609

    
610
check_lib2(){
611
    log check_lib2 "$@"
612
    headers="$1"
613
    func="$2"
614
    shift 2
615
    temp_extralibs "$@"
616
    check_func_headers "$headers" $func && add_extralibs "$@"
617
    err=$?
618
    restore_flags
619
    return $err
620
}
621

    
622
check_exec(){
623
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
624
}
625

    
626
check_exec_crash(){
627
    code=`cat`
628

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

    
635
    (check_exec "$@") >> $logfile 2>&1 <<EOF
636
#include <signal.h>
637
static void sighandler(int sig){
638
    raise(SIGTERM);
639
}
640
int main(void){
641
    signal(SIGILL, sighandler);
642
    signal(SIGFPE, sighandler);
643
    signal(SIGSEGV, sighandler);
644
#ifdef SIGBUS
645
    signal(SIGBUS, sighandler);
646
#endif
647
    { $code }
648
}
649
EOF
650
}
651

    
652
check_type(){
653
    log check_type "$@"
654
    headers=$1
655
    type=$2
656
    shift 2
657
    disable $type
658
    incs=""
659
    for hdr in $headers; do
660
        incs="$incs
661
#include <$hdr>"
662
    done
663
    check_cc "$@" <<EOF && enable $type
664
$incs
665
$type v;
666
EOF
667
}
668

    
669
require(){
670
    name="$1"
671
    header="$2"
672
    func="$3"
673
    shift 3
674
    check_lib $header $func "$@" || die "ERROR: $name not found"
675
}
676

    
677
require2(){
678
    name="$1"
679
    headers="$2"
680
    func="$3"
681
    shift 3
682
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
683
}
684

    
685
check_foo_config(){
686
    cfg=$1
687
    pkg=$2
688
    header=$3
689
    func=$4
690
    shift 4
691
    disable $cfg
692
    check_cmd ${pkg}-config --version
693
    err=$?
694
    if test "$err" = 0; then
695
        temp_cflags `${pkg}-config --cflags`
696
        temp_extralibs `${pkg}-config --libs`
697
        check_lib "$@" $header $func && enable $cfg
698
    fi
699
    return $err
700
}
701

    
702
apply(){
703
    file=$1
704
    shift
705
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
706
}
707

    
708
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
709
# system-dependent things.
710

    
711
COMPONENT_LIST="
712
    bsfs
713
    decoders
714
    demuxers
715
    encoders
716
    filters
717
    indevs
718
    muxers
719
    outdevs
720
    parsers
721
    protocols
722
"
723

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

    
772
THREADS_LIST='
773
    beosthreads
774
    os2threads
775
    pthreads
776
    w32threads
777
'
778

    
779
ARCH_LIST='
780
    alpha
781
    armv4l
782
    bfin
783
    ia64
784
    m68k
785
    mips
786
    parisc
787
    powerpc
788
    s390
789
    sh4
790
    sparc
791
    sparc64
792
    x86
793
    x86_32
794
    x86_64
795
'
796

    
797
ARCH_EXT_LIST='
798
    altivec
799
    armv5te
800
    armv6
801
    armvfp
802
    iwmmxt
803
    mmi
804
    mmx
805
    mmx2
806
    neon
807
    ssse3
808
    vis
809
'
810

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

    
872
# options emitted with CONFIG_ prefix but not available on command line
873
CONFIG_EXTRA="
874
    fft_mmx
875
    oldscaler
876
"
877

    
878
CMDLINE_SELECT="
879
    $ARCH_EXT_LIST
880
    $CONFIG_LIST
881
    $THREADS_LIST
882
    cross_compile
883
    debug
884
    extra_warnings
885
    logging
886
    optimizations
887
    shared
888
    static
889
    stripping
890
"
891

    
892
PATHS_LIST='
893
    bindir
894
    incdir
895
    libdir
896
    mandir
897
    prefix
898
    shlibdir
899
'
900

    
901
CMDLINE_SET="
902
    $PATHS_LIST
903
    arch
904
    build_suffix
905
    cc
906
    cpu
907
    cross_prefix
908
    extra_version
909
    logfile
910
    source_path
911
    target_os
912
"
913

    
914
# code dependency declarations
915

    
916
# architecture extensions
917
altivec_deps="powerpc"
918
armv5te_deps="armv4l"
919
armv6_deps="armv4l"
920
armvfp_deps="armv4l"
921
iwmmxt_deps="armv4l"
922
mmi_deps="mips"
923
mmx_deps="x86"
924
mmx2_deps="x86 mmx"
925
neon_deps="armv4l"
926
ssse3_deps="x86"
927
vis_deps="sparc"
928

    
929
# common features
930
fft_suggest="fft_mmx"
931
fft_mmx_deps="mmx yasm"
932
oldscaler_deps="!swscale"
933

    
934
# decoders / encoders
935
aac_decoder_select="fft mdct"
936
ac3_decoder_deps="gpl"
937
ac3_decoder_select="fft mdct"
938
atrac3_decoder_select="fft mdct"
939
cavs_decoder_select="golomb"
940
cook_decoder_select="fft mdct"
941
cscd_decoder_suggest="zlib"
942
dca_decoder_select="fft mdct"
943
dxa_decoder_select="zlib"
944
eac3_decoder_deps="gpl"
945
eac3_decoder_select="fft mdct"
946
ffv1_decoder_select="golomb"
947
flac_decoder_select="golomb"
948
flac_encoder_select="golomb"
949
flashsv_decoder_select="zlib"
950
flashsv_encoder_select="zlib"
951
h264_decoder_select="golomb"
952
imc_decoder_select="fft mdct"
953
jpegls_decoder_select="golomb"
954
jpegls_encoder_select="golomb"
955
loco_decoder_select="golomb"
956
mpeg_xvmc_decoder_deps="xvmc"
957
nellymoser_decoder_select="fft mdct"
958
nellymoser_encoder_select="fft mdct"
959
png_decoder_select="zlib"
960
png_encoder_select="zlib"
961
qdm2_decoder_select="fft mdct"
962
shorten_decoder_select="golomb"
963
sonic_decoder_select="golomb"
964
sonic_encoder_select="golomb"
965
sonic_ls_encoder_select="golomb"
966
svq3_decoder_select="golomb"
967
svq3_decoder_suggest="zlib"
968
tiff_decoder_suggest="zlib"
969
tiff_encoder_suggest="zlib"
970
tscc_decoder_select="zlib"
971
vorbis_decoder_select="fft mdct"
972
vorbis_encoder_select="fft mdct"
973
wmav1_decoder_select="fft mdct"
974
wmav1_encoder_select="fft mdct"
975
wmav2_decoder_select="fft mdct"
976
wmav2_encoder_select="fft mdct"
977
zlib_decoder_select="zlib"
978
zlib_encoder_select="zlib"
979
zmbv_decoder_select="zlib"
980
zmbv_encoder_select="zlib"
981

    
982
# external libraries
983
libamr_nb_decoder_deps="libamr_nb"
984
libamr_nb_encoder_deps="libamr_nb"
985
libamr_wb_decoder_deps="libamr_wb"
986
libamr_wb_encoder_deps="libamr_wb"
987
libdirac_decoder_deps="libdirac !libschroedinger"
988
libdirac_encoder_deps="libdirac"
989
libfaac_encoder_deps="libfaac"
990
libfaad_decoder_deps="libfaad"
991
libfaadbin_decoder_extralibs='$ldl'
992
libgsm_decoder_deps="libgsm"
993
libgsm_encoder_deps="libgsm"
994
libgsm_ms_decoder_deps="libgsm"
995
libgsm_ms_encoder_deps="libgsm"
996
libmp3lame_encoder_deps="libmp3lame"
997
libschroedinger_decoder_deps="libschroedinger"
998
libschroedinger_encoder_deps="libschroedinger"
999
libspeex_decoder_deps="libspeex"
1000
libtheora_encoder_deps="libtheora"
1001
libvorbis_encoder_deps="libvorbis"
1002
libx264_encoder_deps="libx264"
1003
libxvid_encoder_deps="libxvid"
1004
mpeg4aac_decoder_deps="libfaad"
1005

    
1006
# demuxers / muxers
1007
ac3_demuxer_deps="ac3_parser"
1008
audio_beos_demuxer_deps="audio_beos"
1009
audio_beos_demuxer_extralibs="-lmedia -lbe"
1010
audio_beos_muxer_deps="audio_beos"
1011
audio_beos_muxer_extralibs="-lmedia -lbe"
1012
avisynth_demuxer_deps="avisynth"
1013
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1014
dirac_demuxer_deps="dirac_parser"
1015
dv1394_demuxer_deps="dv1394 dv_demuxer"
1016
libdc1394_demuxer_deps="libdc1394"
1017
libnut_demuxer_deps="libnut"
1018
libnut_muxer_deps="libnut"
1019
matroska_demuxer_suggest="zlib bzlib"
1020
mov_demuxer_suggest="zlib"
1021
mp3_demuxer_deps="mpegaudio_parser"
1022
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1023
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1024
redir_demuxer_deps="network"
1025
rtp_muxer_deps="network rtp_protocol"
1026
rtsp_demuxer_deps="sdp_demuxer"
1027
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1028
v4l_demuxer_deps="linux_videodev_h"
1029
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1030
vfwcap_demuxer_deps="capCreateCaptureWindow"
1031
vfwcap_demuxer_extralibs="-lvfw32"
1032
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1033
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1034

    
1035
# protocols
1036
http_protocol_deps="network"
1037
rtp_protocol_deps="udp_protocol"
1038
tcp_protocol_deps="network"
1039
udp_protocol_deps="network"
1040

    
1041
# filters
1042
movie_filter_deps="avfilter_lavf"
1043

    
1044
# programs
1045
ffplay_deps="sdl"
1046
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1047
ffserver_extralibs='$ldl'
1048
vhook_extralibs='$ldl'
1049

    
1050

    
1051
# default parameters
1052

    
1053
logfile="config.err"
1054

    
1055
# installation paths
1056
prefix_default="/usr/local"
1057
bindir_default='${prefix}/bin'
1058
incdir_default='${prefix}/include'
1059
libdir_default='${prefix}/lib'
1060
mandir_default='${prefix}/share/man'
1061
shlibdir_default="$libdir_default"
1062

    
1063
# toolchain
1064
cc_default="gcc"
1065
yasmexe="yasm"
1066
ar="ar"
1067
nm="nm"
1068
ranlib="ranlib"
1069
strip="strip"
1070
asmalign_pot="unknown"
1071
ln_s="ln -sf"
1072
objformat="elf"
1073

    
1074
# machine
1075
arch=`uname -m`
1076
cpu="generic"
1077

    
1078
# OS
1079
target_os=$(tolower $(uname -s))
1080

    
1081
# configurable options
1082
enable debug
1083
enable ffmpeg
1084
enable ffplay
1085
enable ffserver
1086
enable ipv6
1087
enable mpegaudio_hp
1088
enable network
1089
enable oldscaler
1090
enable optimizations
1091
enable protocols
1092
enable static
1093
enable stripping
1094
vhook="default"
1095

    
1096
# build settings
1097
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1098
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1099
VHOOKSHFLAGS='$(SHFLAGS)'
1100
FFSERVERLDFLAGS=-Wl,-E
1101
LIBPREF="lib"
1102
LIBSUF=".a"
1103
FULLNAME='$(NAME)$(BUILDSUF)'
1104
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1105
SLIBPREF="lib"
1106
SLIBSUF=".so"
1107
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1108
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1109
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1110
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1111

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

    
1116
# find source path
1117
source_path="`dirname \"$0\"`"
1118
enable source_path_used
1119
if test -z "$source_path" -o "$source_path" = "." ; then
1120
    source_path="`pwd`"
1121
    disable source_path_used
1122
else
1123
    source_path="`cd \"$source_path\"; pwd`"
1124
    echo "$source_path" | grep -q '[[:blank:]]' &&
1125
        die "Out of tree builds are impossible with whitespace in source path."
1126
fi
1127

    
1128
FFMPEG_CONFIGURATION="$@"
1129

    
1130
find_things(){
1131
    thing=$1
1132
    pattern=$2
1133
    file=$source_path/$3
1134
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1135
}
1136

    
1137
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1138
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1139
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1140
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1141
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1142
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1143
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1144
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1145
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1146
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1147

    
1148
enable $ARCH_EXT_LIST \
1149
       $DECODER_LIST \
1150
       $ENCODER_LIST \
1151
       $PARSER_LIST \
1152
       $BSF_LIST \
1153
       $DEMUXER_LIST \
1154
       $MUXER_LIST \
1155
       $FILTER_LIST \
1156
       $PROTOCOL_LIST \
1157
       $INDEV_LIST \
1158
       $OUTDEV_LIST \
1159

    
1160
die_unknown(){
1161
    echo "Unknown option \"$1\"."
1162
    echo "See $0 --help for available options."
1163
    exit 1
1164
}
1165

    
1166
show_list() {
1167
    suffix=_$1
1168
    shift
1169
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1170
    exit 0
1171
}
1172

    
1173
for opt do
1174
    optval="${opt#*=}"
1175
    case "$opt" in
1176
    --extra-cflags=*) add_cflags "$optval"
1177
    ;;
1178
    --extra-ldflags=*) add_ldflags "$optval"
1179
    ;;
1180
    --extra-libs=*) add_extralibs "$optval"
1181
    ;;
1182
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1183
    ;;
1184
    --enable-debug=*) debuglevel="$optval"
1185
    ;;
1186
    --enable-*=*|--disable-*=*)
1187
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1188
    case "$thing" in
1189
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1190
        *) die_unknown "$opt" ;;
1191
    esac
1192
    ;;
1193
    --enable-?*|--disable-?*)
1194
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1195
    if is_in $option $COMPONENT_LIST; then
1196
        eval $action \$$(toupper ${option%s})_LIST
1197
    elif is_in $option $CMDLINE_SELECT; then
1198
        $action $option
1199
    else
1200
        die_unknown $opt
1201
    fi
1202
    ;;
1203
    --list-*)
1204
        NAME="${opt#--list-}"
1205
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1206
        NAME=${NAME%s}
1207
        eval show_list $NAME \$$(toupper $NAME)_LIST
1208
    ;;
1209
    --help|-h) show_help
1210
    ;;
1211
    *)
1212
    optname="${opt%%=*}"
1213
    optname="${optname#--}"
1214
    optname=$(echo "$optname" | sed 's/-/_/g')
1215
    is_in $optname $CMDLINE_SET || die_unknown $opt
1216
    eval $optname='$optval'
1217
    ;;
1218
    esac
1219
done
1220

    
1221
disabled logging && logfile=/dev/null
1222

    
1223
echo "# $0 $@" > $logfile
1224
set >> $logfile
1225

    
1226
cc_default="${cross_prefix}${cc_default}"
1227
yasmexe="${cross_prefix}${yasmexe}"
1228
ar="${cross_prefix}${ar}"
1229
nm="${cross_prefix}${nm}"
1230
ranlib="${cross_prefix}${ranlib}"
1231
strip="${cross_prefix}${strip}"
1232

    
1233
set_default cc
1234

    
1235
# set temporary file name
1236
if test ! -z "$TMPDIR" ; then
1237
    TMPDIR1="${TMPDIR}"
1238
elif test ! -z "$TEMPDIR" ; then
1239
    TMPDIR1="${TEMPDIR}"
1240
else
1241
    TMPDIR1="/tmp"
1242
fi
1243

    
1244
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1245
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1246
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1247
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1248
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1249
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1250

    
1251
check_cflags -std=c99
1252

    
1253
case "$arch" in
1254
    i386|i486|i586|i686|i86pc|BePC)
1255
        arch="x86_32"
1256
        enable fast_unaligned
1257
    ;;
1258
    x86_64|amd64)
1259
        arch="x86_32"
1260
        enable cmov
1261
        enable fast_cmov
1262
        enable fast_unaligned
1263
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
1264
        int test[sizeof(char*) - 7];
1265
EOF
1266
    ;;
1267
    # armv4l is a subset of armv[567]*l
1268
    arm|armv[4567]*l)
1269
        arch="armv4l"
1270
    ;;
1271
    alpha)
1272
        arch="alpha"
1273
        enable fast_64bit
1274
    ;;
1275
    "Power Macintosh"|ppc|powerpc)
1276
        arch="powerpc"
1277
        enable fast_unaligned
1278
    ;;
1279
    ppc64)
1280
        arch="powerpc"
1281
        enable fast_64bit
1282
        enable fast_unaligned
1283
    ;;
1284
    mips|mipsel|IP*)
1285
        arch="mips"
1286
    ;;
1287
    sun4u|sparc64)
1288
        arch="sparc64"
1289
        enable fast_64bit
1290
    ;;
1291
    sparc)
1292
        arch="sparc"
1293
    ;;
1294
    sh4)
1295
        arch="sh4"
1296
    ;;
1297
    parisc)
1298
        arch="parisc"
1299
    ;;
1300
    parisc64)
1301
        arch="parisc"
1302
        enable fast_64bit
1303
    ;;
1304
    s390|s390x)
1305
        arch="s390"
1306
    ;;
1307
    m68k)
1308
        arch="m68k"
1309
    ;;
1310
    ia64)
1311
        arch="ia64"
1312
        enable fast_64bit
1313
    ;;
1314
    bfin)
1315
        arch="bfin"
1316
    ;;
1317
    *)
1318
        arch="unknown"
1319
    ;;
1320
esac
1321

    
1322
enable $arch
1323
enabled_any x86_32 x86_64 && enable x86
1324
enabled     sparc64       && enable sparc
1325

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

    
1488
    *)
1489
        target_os="${target_os}-UNKNOWN"
1490
        ;;
1491
esac
1492

    
1493
set_default $PATHS_LIST
1494

    
1495
add_extralibs $osextralibs
1496

    
1497
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1498
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1499

    
1500
test -n "$cross_prefix" && enable cross_compile
1501

    
1502
# we need to build at least one lib type
1503
if ! enabled_any static shared; then
1504
    cat <<EOF
1505
At least one library type must be built.
1506
Specify --enable-static to build the static libraries or --enable-shared to
1507
build the shared libraries as well. To only build the shared libraries specify
1508
--disable-static in addition to --enable-shared.
1509
EOF
1510
    exit 1;
1511
fi
1512

    
1513
disabled static && LIBNAME=""
1514

    
1515
if enabled_any libfaad libfaadbin ; then
1516
    if check_header faad.h; then
1517
        check_cc <<EOF
1518
#include <faad.h>
1519
#ifndef FAAD2_VERSION
1520
ok faad1
1521
#endif
1522
int main(void) { return 0; }
1523
EOF
1524
        test $? = 0 && enable libfaad2
1525
    else
1526
        die "FAAD test failed."
1527
    fi
1528
fi
1529

    
1530

    
1531
if ! enabled gpl; then
1532
    die_gpl_disabled(){
1533
        name=$1
1534
        shift
1535
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1536
    }
1537
    die_gpl_disabled "The Postprocessing code" postproc
1538
    die_gpl_disabled "libx264"                 libx264
1539
    die_gpl_disabled "libxvidcore"             libxvid
1540
    die_gpl_disabled "FAAD2"                   libfaad2
1541
    die_gpl_disabled "The X11 grabber"         x11grab
1542
    die_gpl_disabled "The software scaler"     swscale
1543
fi
1544

    
1545
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1546
    die "libamr is nonfree and --enable-nonfree is not specified."
1547
fi
1548

    
1549
check_deps $ARCH_EXT_LIST
1550

    
1551
test -z "$need_memalign" && need_memalign="$mmx"
1552

    
1553
#Darwin CC versions
1554
if test $target_os = darwin; then
1555
    if $cc -v 2>&1 | grep -q xlc; then
1556
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1557
    else
1558
        add_cflags "-pipe"
1559
        check_cflags "-force_cpusubtype_ALL"
1560
        check_cflags "-Wno-sign-compare"
1561
        enabled shared || check_cflags -mdynamic-no-pic
1562
    fi
1563
fi
1564

    
1565
disabled optimizations || check_cflags -fomit-frame-pointer
1566

    
1567
# Add processor-specific flags
1568
if test $cpu != "generic"; then
1569
    warn_altivec(){
1570
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1571
    }
1572
    case $cpu in
1573
        601|ppc601|PowerPC601)
1574
            add_cflags "-mcpu=601"
1575
            warn_altivec enabled PPC601
1576
        ;;
1577
        603*|ppc603*|PowerPC603*)
1578
            add_cflags "-mcpu=603"
1579
            warn_altivec enabled PPC603
1580
        ;;
1581
        604*|ppc604*|PowerPC604*)
1582
            add_cflags "-mcpu=604"
1583
            warn_altivec enabled PPC604
1584
        ;;
1585
        G3|g3|75*|ppc75*|PowerPC75*)
1586
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1587
            warn_altivec enabled PPC75x
1588
        ;;
1589
        G4|g4|745*|ppc745*|PowerPC745*)
1590
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1591
            warn_altivec disabled PPC745x
1592
        ;;
1593
        74*|ppc74*|PowerPC74*)
1594
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1595
            warn_altivec disabled PPC74xx
1596
        ;;
1597
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1598
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1599
            warn_altivec disabled PPC970
1600
            enable ppc64
1601
        ;;
1602
        Cell|CELL|cell)
1603
            add_cflags "-mcpu=cell"
1604
            warn_altivec disabled Cell
1605
            enable ppc64
1606
        ;;
1607
        # targets that do NOT support conditional mov (cmov)
1608
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1609
            add_cflags "-march=$cpu"
1610
            disable cmov
1611
        ;;
1612
        # targets that do support conditional mov (cmov)
1613
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1614
            add_cflags "-march=$cpu"
1615
            enable cmov
1616
            enable fast_cmov
1617
        ;;
1618
        # targets that do support conditional mov but on which it's slow
1619
        pentium4|pentium4m|prescott|nocona)
1620
            add_cflags "-march=$cpu"
1621
            enable cmov
1622
            disable fast_cmov
1623
        ;;
1624
        sparc64)
1625
            add_cflags "-mcpu=v9"
1626
        ;;
1627
        arm11*|cortex*)
1628
            add_cflags "-mcpu=$cpu"
1629
            enable fast_unaligned
1630
        ;;
1631
        armv*)
1632
            add_cflags "-march=$cpu"
1633
        ;;
1634
        arm*)
1635
            add_cflags "-mcpu=$cpu"
1636
        ;;
1637
        *)
1638
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1639
        ;;
1640
    esac
1641
fi
1642

    
1643
# make sure we can execute files in $TMPDIR
1644
cat > $TMPSH 2>> $logfile <<EOF
1645
#! /bin/sh
1646
EOF
1647
chmod +x $TMPSH >> $logfile 2>&1
1648
if ! $TMPSH >> $logfile 2>&1; then
1649
    cat <<EOF
1650
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1651
variable to another directory and make sure that $TMPDIR1 is not mounted
1652
noexec.
1653
EOF
1654
    die "Sanity test failed."
1655
fi
1656
rm $TMPSH
1657

    
1658
# compiler sanity check
1659
check_exec <<EOF
1660
int main(void){ return 0; }
1661
EOF
1662
if test "$?" != 0; then
1663
    echo "$cc is unable to create an executable file."
1664
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1665
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1666
        echo "Only do this if you know what cross compiling means."
1667
    fi
1668
    die "C compiler test failed."
1669
fi
1670

    
1671
check_cc <<EOF || die "Symbol mangling check failed."
1672
int ff_extern;
1673
EOF
1674
sym=$($nm -P -g $TMPO | grep ff_extern)
1675
extern_prefix=${sym%%ff_extern*}
1676

    
1677
check_asm inline_asm '""'
1678

    
1679
if enabled x86; then
1680
    # check whether EBP is available on x86
1681
    # As 'i' is stored on the stack, this program will crash
1682
    # if the base pointer is used to access it because the
1683
    # base pointer is cleared in the inline assembly code.
1684
    check_exec_crash <<EOF && enable ebp_available
1685
    volatile int i=0;
1686
    __asm__ volatile (
1687
        "xorl %%ebp, %%ebp"
1688
    ::: "%ebp");
1689
    return i;
1690
EOF
1691

    
1692
    # check wether EBX is available on x86
1693
    check_asm ebx_available '"":::"%ebx"'
1694

    
1695
    # check whether binutils is new enough to compile SSSE3/MMX2
1696
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1697
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1698

    
1699
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1700

    
1701
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1702
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1703
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1704
    case "$objformat" in
1705
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1706
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1707
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1708
    esac
1709
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1710
fi
1711

    
1712
# check for assembler specific support
1713

    
1714
if test $arch = "powerpc"; then
1715
    check_asm dcbzl '"dcbzl 0, 1"'
1716
fi
1717

    
1718
# check for SIMD availability
1719

    
1720
# AltiVec flags: The FSF version of GCC differs from the Apple version
1721
if enabled altivec; then
1722
    check_cflags -maltivec -mabi=altivec &&
1723
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1724
        check_cflags -faltivec
1725

    
1726
    # check if our compiler supports Motorola AltiVec C API
1727
    check_cc <<EOF || disable altivec
1728
$inc_altivec_h
1729
int main(void) {
1730
    vector signed int v1, v2, v3;
1731
    v1 = vec_add(v2,v3);
1732
    return 0;
1733
}
1734
EOF
1735

    
1736
    # check if our compiler supports braces for vector declarations
1737
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1738
$inc_altivec_h
1739
int main (void) { (vector int) {1}; return 0; }
1740
EOF
1741
fi
1742

    
1743
# We have to check if pld is a nop and disable it.
1744
enabled armv4l  && check_asm pld     '"pld [r0]"'
1745
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1746
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1747
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1748
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1749
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1750
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1751
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1752

    
1753
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1754

    
1755
# ---
1756
# big/little-endian test
1757
check_cc <<EOF || die "endian test failed"
1758
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1759
EOF
1760
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1761

    
1762
# ---
1763
# check availability of some header files
1764

    
1765
if check_func dlopen; then
1766
    ldl=
1767
elif check_func dlopen -ldl; then
1768
    ldl=-ldl
1769
fi
1770

    
1771
check_func  fork
1772
check_func  gethrtime
1773
check_func  getrusage
1774
check_func  inet_aton $network_extralibs
1775
check_func  memalign
1776
check_func  mkstemp
1777
check_func_headers windows.h GetProcessTimes
1778

    
1779
check_header conio.h
1780
check_header dlfcn.h
1781
check_header malloc.h
1782
check_header poll.h
1783
check_header sys/mman.h
1784
check_header sys/resource.h
1785
check_header sys/select.h
1786
check_header termios.h
1787

    
1788
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1789
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1790
fi
1791

    
1792
disabled  zlib || check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1793
disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1794

    
1795
# check for some common methods of building with pthread support
1796
# do this before the optional library checks as some of them require pthreads
1797
if enabled pthreads; then
1798
    if check_func pthread_create; then
1799
        :
1800
    elif check_func pthread_create -pthread; then
1801
        add_cflags -pthread
1802
        add_extralibs -pthread
1803
    elif check_func pthread_create -pthreads; then
1804
        add_cflags -pthreads
1805
        add_extralibs -pthreads
1806
    elif check_func pthread_create -lpthreadGC2; then
1807
        add_extralibs -lpthreadGC2
1808
    elif ! check_lib pthread.h pthread_create -lpthread; then
1809
        die "ERROR: can't find pthreads library"
1810
    fi
1811
fi
1812

    
1813
for thread in $THREADS_LIST; do
1814
    if enabled $thread; then
1815
        test -n "$thread_type" &&
1816
            die "ERROR: Only one thread type must be selected." ||
1817
            thread_type="$thread"
1818
    fi
1819
done
1820

    
1821
check_lib math.h sin -lm
1822

    
1823
# test for C99 functions in math.h
1824
for func in llrint lrint lrintf round roundf; do
1825
    check_exec <<EOF && enable $func || disable $func
1826
#include <math.h>
1827
int main(void) { return ($func(3.999f) > 0)?0:1; }
1828
EOF
1829
done
1830

    
1831
# these are off by default, so fail if requested and not available
1832
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1833
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1834
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1835
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1836
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1837
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1838
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1839
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1840
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1841
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1842
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1843
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1844
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1845
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1846
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1847
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1848
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1849
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1850
                        die "ERROR: libx264 version must be >= 0.65."; }
1851
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1852
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1853

    
1854
# libdc1394 check
1855
if enabled libdc1394; then
1856
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1857
        enable libdc1394_2; } ||
1858
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1859
        enable libdc1394_1; } ||
1860
    die "ERROR: No version of libdc1394 found "
1861
fi
1862

    
1863

    
1864
_restrict=
1865
for restrict_keyword in restrict __restrict__ __restrict; do
1866
    check_cc <<EOF && _restrict=$restrict_keyword && break
1867
void foo(char * $restrict_keyword p);
1868
EOF
1869
done
1870

    
1871
test "$vhook" = "default" && vhook="$dlopen"
1872

    
1873
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1874
    disable vhook
1875
    echo
1876
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1877
    echo "Patches welcome."
1878
    echo
1879
fi
1880

    
1881
if enabled vhook; then
1882
    check_ldflags -rdynamic
1883
    check_ldflags -export-dynamic
1884
fi
1885

    
1886
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1887
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1888

    
1889
##########################################
1890
# SDL check
1891

    
1892
disable sdl_too_old
1893
disable sdl
1894
SDL_CONFIG="${cross_prefix}sdl-config"
1895
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1896
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1897
    temp_cflags $sdl_cflags
1898
    temp_extralibs `"${SDL_CONFIG}" --libs`
1899
    if check_lib2 SDL.h SDL_Init; then
1900
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1901
        if test "$_sdlversion" -lt 121 ; then
1902
            enable sdl_too_old
1903
        else
1904
            enable sdl
1905
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1906
#include <SDL.h>
1907
int main(int argc, char **argv){
1908
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1909
    int w = vi->current_w;
1910
    return 0;
1911
}
1912
EOF
1913
        fi
1914
    fi
1915
    restore_flags
1916
fi
1917

    
1918
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1919

    
1920
##########################################
1921
# Network check
1922

    
1923
if enabled network; then
1924
    check_type sys/socket.h socklen_t
1925
    # Prefer arpa/inet.h over winsock2
1926
    if check_header arpa/inet.h ; then
1927
        check_func closesocket
1928
    elif check_header winsock2.h ; then
1929
        network_extralibs="-lws2_32"
1930
        check_type ws2tcpip.h socklen_t
1931
        check_func_headers winsock2.h closesocket
1932
    fi
1933
fi
1934

    
1935
##########################################
1936
# IPv6 check
1937

    
1938
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1939
#include <sys/types.h>
1940
#include <sys/socket.h>
1941
#include <netinet/in.h>
1942
#include <netdb.h>
1943
int main(void) {
1944
    struct sockaddr_storage saddr;
1945
    struct ipv6_mreq mreq6;
1946
    getaddrinfo(0,0,0,0);
1947
    getnameinfo(0,0,0,0,0,0,0);
1948
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1949
}
1950
EOF
1951

    
1952
check_header linux/videodev.h
1953
check_header linux/videodev2.h
1954
check_header sys/videoio.h
1955

    
1956
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1957

    
1958
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1959
{ check_header dev/bktr/ioctl_meteor.h &&
1960
  check_header dev/bktr/ioctl_bt848.h; } ||
1961
{ check_header machine/ioctl_meteor.h &&
1962
  check_header machine/ioctl_bt848.h; } ||
1963
{ check_header dev/video/meteor/ioctl_meteor.h &&
1964
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1965
check_header dev/ic/bt8xx.h
1966

    
1967
check_header sys/soundcard.h
1968
check_header soundcard.h
1969

    
1970
# deal with the X11 frame grabber
1971
enabled x11grab                         &&
1972
check_header X11/Xlib.h                 &&
1973
check_header X11/extensions/XShm.h      &&
1974
check_func XOpenDisplay -lX11           &&
1975
check_func XShmCreateImage -lX11 -lXext
1976

    
1977
enabled debug && add_cflags -g"$debuglevel"
1978

    
1979
# add some useful compiler flags if supported
1980
check_cflags -Wdeclaration-after-statement
1981
check_cflags -Wall
1982
check_cflags -Wno-switch
1983
check_cflags -Wdisabled-optimization
1984
check_cflags -Wpointer-arith
1985
check_cflags -Wredundant-decls
1986
check_cflags -Wno-pointer-sign
1987
check_cflags -Wcast-qual
1988
check_cflags -Wwrite-strings
1989
check_cflags -Wtype-limits
1990
enabled extra_warnings && check_cflags -Winline
1991

    
1992
# add some linker flags
1993
check_ldflags -Wl,--warn-common
1994
check_ldflags -Wl,--as-needed
1995
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'
1996
check_ldflags -Wl,-Bsymbolic
1997

    
1998
if enabled small; then
1999
    check_cflags -Os            # not all compilers support -Os
2000
    optimizations="small"
2001
elif enabled optimizations; then
2002
    if $cc -v 2>&1 | grep -q xlc; then
2003
        add_cflags  "-O5"
2004
        add_ldflags "-O5"
2005
    else
2006
        add_cflags "-O3"
2007
    fi
2008
fi
2009
check_cflags -fno-math-errno
2010
check_cflags -fno-signed-zeros
2011

    
2012
# add some flags for Intel C Compiler
2013
if $cc --version 2> /dev/null | grep -q Intel; then
2014
  # Just warnings, no remarks
2015
  check_cflags -w1
2016
  # -wd: Disable following warnings
2017
  # 144, 167, 556: -Wno-pointer-sign
2018
  # 10006: ignoring unknown option -fno-signed-zeros
2019
  # 10156: ignoring option '-W'; no argument required
2020
  check_cflags -wd144,167,556,10006,10156
2021
  # 11030: Warning unknown option --as-needed
2022
  # 10156: ignoring option '-export'; no argument required
2023
  check_ldflags -wd10156,11030
2024
  # Allow to compile with optimizations
2025
  check_ldflags -march=$cpu
2026
fi
2027

    
2028
# PIC flags for shared library objects where they are needed
2029
if enabled shared; then
2030
    # LIBOBJFLAGS may have already been set in the OS configuration
2031
    if test -z "$LIBOBJFLAGS" ; then
2032
        case "$arch" in
2033
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2034
        esac
2035
    fi
2036
fi
2037

    
2038
if enabled gprof; then
2039
    add_cflags  "-p"
2040
    add_ldflags "-p"
2041
fi
2042

    
2043
VHOOKCFLAGS="-fPIC"
2044

    
2045
# Find out if the .align argument is a power of two or not.
2046
if test $asmalign_pot = "unknown"; then
2047
    disable asmalign_pot
2048
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2049
fi
2050

    
2051
enabled_any $DECODER_LIST      && enable decoders
2052
enabled_any $ENCODER_LIST      && enable encoders
2053
enabled_any $BSF_LIST          && enable bsfs
2054
enabled_any $DEMUXER_LIST      && enable demuxers
2055
enabled_any $MUXER_LIST        && enable muxers
2056
enabled_any $FILTER_LIST       && enable filters
2057
enabled_any $INDEV_LIST        && enable demuxers
2058
enabled_any $OUTDEV_LIST       && enable muxers
2059
enabled_any $PROTOCOL_LIST     && enable protocols
2060

    
2061
enabled_any $THREADS_LIST      && enable threads
2062

    
2063
check_deps $CONFIG_LIST       \
2064
           $CONFIG_EXTRA      \
2065
           $HAVE_LIST         \
2066
           $DECODER_LIST      \
2067
           $ENCODER_LIST      \
2068
           $PARSER_LIST       \
2069
           $BSF_LIST          \
2070
           $DEMUXER_LIST      \
2071
           $MUXER_LIST        \
2072
           $FILTER_LIST       \
2073
           $INDEV_LIST        \
2074
           $OUTDEV_LIST       \
2075
           $PROTOCOL_LIST     \
2076

    
2077
enabled libdc1394 && append pkg_requires "libraw1394"
2078
enabled libdirac  && append pkg_requires "dirac"
2079
enabled libtheora && append pkg_requires "theora"
2080
enabled libvorbis && append pkg_requires "vorbisenc"
2081

    
2082
echo "install prefix            $prefix"
2083
echo "source path               $source_path"
2084
echo "C compiler                $cc"
2085
echo ".align is power-of-two    $asmalign_pot"
2086
echo "ARCH                      $arch ($cpu)"
2087
if test "$build_suffix" != ""; then
2088
    echo "build suffix              $build_suffix"
2089
fi
2090
if test "$extra_version" != ""; then
2091
    echo "version string suffix     $extra_version"
2092
fi
2093
echo "big-endian                ${bigendian-no}"
2094
if test $arch = "x86_32" -o $arch = "x86_64"; then
2095
    echo "yasm                      ${yasm-no}"
2096
    echo "MMX enabled               ${mmx-no}"
2097
    echo "CMOV enabled              ${cmov-no}"
2098
    echo "CMOV is fast              ${fast_cmov-no}"
2099
    echo "EBX available             ${ebx_available-no}"
2100
    echo "EBP available             ${ebp_available-no}"
2101
fi
2102
if test $arch = "armv4l"; then
2103
    echo "ARMv5TE enabled           ${armv5te-no}"
2104
    echo "ARMv6 enabled             ${armv6-no}"
2105
    echo "ARM VFP enabled           ${armvfp-no}"
2106
    echo "IWMMXT enabled            ${iwmmxt-no}"
2107
    echo "NEON enabled              ${neon-no}"
2108
fi
2109
if test $arch = "mips"; then
2110
    echo "MMI enabled               ${mmi-no}"
2111
fi
2112
if test $arch = "powerpc"; then
2113
    echo "AltiVec enabled           ${altivec-no}"
2114
    echo "dcbzl available           ${dcbzl-no}"
2115
fi
2116
echo "gprof enabled             ${gprof-no}"
2117
echo "debug symbols             ${debug-no}"
2118
echo "strip symbols             ${stripping-no}"
2119
echo "optimizations             ${optimizations-no}"
2120
echo "static                    ${static-no}"
2121
echo "shared                    ${shared-no}"
2122
echo "postprocessing support    ${postproc-no}"
2123
echo "software scaler enabled   ${swscale-no}"
2124
echo "new filter support        ${avfilter-no}"
2125
echo "filters using lavformat   ${avfilter_lavf-no}"
2126
echo "video hooking             ${vhook-no}"
2127
if enabled vhook; then
2128
    echo "Imlib2 support            ${imlib2-no}"
2129
    echo "FreeType support          ${freetype2-no}"
2130
fi
2131
echo "network support           ${network-no}"
2132
if enabled network; then
2133
    echo "IPv6 support              ${ipv6-no}"
2134
fi
2135
echo "threading support         ${thread_type-no}"
2136
echo "SDL support               ${sdl-no}"
2137
if enabled sdl_too_old; then
2138
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2139
fi
2140
echo "Sun medialib support      ${mlib-no}"
2141
echo "AVISynth enabled          ${avisynth-no}"
2142
echo "libamr-nb support         ${libamr_nb-no}"
2143
echo "libamr-wb support         ${libamr_wb-no}"
2144
echo "libdc1394 support         ${libdc1394-no}"
2145
echo "libdirac enabled          ${libdirac-no}"
2146
echo "libfaac enabled           ${libfaac-no}"
2147
echo "libfaad enabled           ${libfaad-no}"
2148
echo "libfaad dlopened          ${libfaadbin-no}"
2149
echo "libgsm enabled            ${libgsm-no}"
2150
echo "libmp3lame enabled        ${libmp3lame-no}"
2151
echo "libnut enabled            ${libnut-no}"
2152
echo "libschroedinger enabled   ${libschroedinger-no}"
2153
echo "libspeex enabled          ${libspeex-no}"
2154
echo "libtheora enabled         ${libtheora-no}"
2155
echo "libvorbis enabled         ${libvorbis-no}"
2156
echo "libx264 enabled           ${libx264-no}"
2157
echo "libxvid enabled           ${libxvid-no}"
2158
echo "zlib enabled              ${zlib-no}"
2159
echo "bzlib enabled             ${bzlib-no}"
2160
echo
2161

    
2162
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2163
    echo "Enabled ${type}s:"
2164
    eval list=\$$(toupper $type)_LIST
2165
    for part in $list; do
2166
        enabled $part && echo ${part%_*}
2167
    done | sort | pr -3 -t
2168
    echo
2169
done
2170

    
2171
license="LGPL"
2172
if enabled nonfree; then
2173
    license="unredistributable"
2174
elif enabled gpl; then
2175
    license="GPL"
2176
fi
2177

    
2178
echo "License: $license"
2179

    
2180
echo "Creating config.mak and config.h..."
2181

    
2182
echo "# Automatically generated by configure - do not modify!" > config.mak
2183
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2184
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2185
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2186
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2187

    
2188
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2189
echo "prefix=$prefix" >> config.mak
2190
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2191
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2192
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2193
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2194
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2195
echo "CC=$cc" >> config.mak
2196
echo "YASM=$yasmexe" >> config.mak
2197
echo "AR=$ar" >> config.mak
2198
echo "RANLIB=$ranlib" >> config.mak
2199
echo "LN_S=$ln_s" >> config.mak
2200
enabled stripping &&
2201
    echo "STRIP=$strip" >> config.mak ||
2202
    echo "STRIP=echo ignoring strip" >> config.mak
2203

    
2204
echo "OPTFLAGS=$CFLAGS" >> config.mak
2205
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2206
echo "LDFLAGS=$LDFLAGS" >> config.mak
2207
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2208
echo "SHFLAGS=$SHFLAGS" >> config.mak
2209
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2210
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2211
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2212
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2213
echo "BUILD_STATIC=$static" >> config.mak
2214
echo "BUILDSUF=$build_suffix" >> config.mak
2215
echo "FULLNAME=$FULLNAME" >> config.mak
2216
echo "LIBPREF=$LIBPREF" >> config.mak
2217
echo "LIBSUF=$LIBSUF" >> config.mak
2218
echo "LIBNAME=$LIBNAME" >> config.mak
2219
echo "SLIBPREF=$SLIBPREF" >> config.mak
2220
echo "SLIBSUF=$SLIBSUF" >> config.mak
2221
echo "EXESUF=$EXESUF" >> config.mak
2222
echo "EXTRA_VERSION=$extra_version" >> config.mak
2223
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2224

    
2225
if enabled bigendian; then
2226
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2227
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2228
fi
2229

    
2230
if enabled sdl; then
2231
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2232
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2233
fi
2234
if enabled texi2html; then
2235
    echo "BUILD_DOC=yes" >> config.mak
2236
fi
2237

    
2238
get_version(){
2239
    name=$1
2240
    file=$source_path/$2
2241
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2242
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2243
    lcname=$(tolower $name)
2244
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2245
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2246
}
2247

    
2248
get_version LIBSWSCALE  libswscale/swscale.h
2249
get_version LIBPOSTPROC libpostproc/postprocess.h
2250
get_version LIBAVCODEC  libavcodec/avcodec.h
2251
get_version LIBAVDEVICE libavdevice/avdevice.h
2252
get_version LIBAVFORMAT libavformat/avformat.h
2253
get_version LIBAVUTIL   libavutil/avutil.h
2254
get_version LIBAVFILTER libavfilter/avfilter.h
2255

    
2256
if enabled shared; then
2257
    echo "BUILD_SHARED=yes" >> config.mak
2258
    echo "PIC=-fPIC -DPIC" >> config.mak
2259
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2260
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2261
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2262
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2263
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2264
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2265
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2266
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2267
fi
2268
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2269
echo "EXTRALIBS=$extralibs" >> config.mak
2270

    
2271
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2272
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2273
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2274
                                      $CONFIG_EXTRA      \
2275
                                      $DECODER_LIST      \
2276
                                      $ENCODER_LIST      \
2277
                                      $PARSER_LIST       \
2278
                                      $BSF_LIST          \
2279
                                      $DEMUXER_LIST      \
2280
                                      $MUXER_LIST        \
2281
                                      $FILTER_LIST       \
2282
                                      $PROTOCOL_LIST     \
2283
                                      $INDEV_LIST        \
2284
                                      $OUTDEV_LIST       \
2285

    
2286
echo "#define restrict $_restrict" >> $TMPH
2287

    
2288
if enabled small; then
2289
    echo "#define av_always_inline"  >> $TMPH
2290
fi
2291

    
2292
echo "SRC_PATH=\"$source_path\"" >> config.mak
2293
echo "SRC_PATH_BARE=$source_path" >> config.mak
2294
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2295

    
2296
# Apparently it's not possible to portably echo a backslash.
2297
enabled asmalign_pot &&
2298
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2299
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2300

    
2301
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2302

    
2303
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2304

    
2305
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2306
cmp -s $TMPH config.h &&
2307
    echo "config.h is unchanged" ||
2308
    mv -f $TMPH config.h
2309

    
2310
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2311

    
2312
# build tree in object directory if source path is different from current one
2313
if enabled source_path_used; then
2314
    DIRS="\
2315
        doc               \
2316
        libavcodec        \
2317
        libavcodec/alpha  \
2318
        libavcodec/armv4l \
2319
        libavcodec/bfin   \
2320
        libavcodec/i386   \
2321
        libavcodec/mlib   \
2322
        libavcodec/ppc    \
2323
        libavcodec/sh4    \
2324
        libavcodec/sparc  \
2325
        libavdevice       \
2326
        libavfilter       \
2327
        libavformat       \
2328
        libavutil         \
2329
        libpostproc       \
2330
        libswscale        \
2331
        tests             \
2332
        tools             \
2333
        vhook             \
2334
        "
2335
    FILES="\
2336
        Makefile             \
2337
        common.mak           \
2338
        subdir.mak           \
2339
        doc/texi2pod.pl      \
2340
        libavcodec/Makefile  \
2341
        libavdevice/Makefile \
2342
        libavfilter/Makefile \
2343
        libavformat/Makefile \
2344
        libavutil/Makefile   \
2345
        libpostproc/Makefile \
2346
        libswscale/Makefile  \
2347
        "
2348
    for dir in $DIRS ; do
2349
        mkdir -p $dir
2350
    done
2351
    for f in $FILES ; do
2352
        $ln_s "$source_path/$f" $f
2353
    done
2354
fi
2355

    
2356

    
2357
# build pkg-config files
2358

    
2359
pkgconfig_generate(){
2360
name=$1
2361
shortname=${name#lib}${build_suffix}
2362
comment=$2
2363
version=$3
2364
libs=$4
2365
requires=$5
2366
cat <<EOF > $name/$name.pc
2367
prefix=$prefix
2368
exec_prefix=\${prefix}
2369
libdir=$libdir
2370
includedir=$incdir
2371

    
2372
Name: $name
2373
Description: $comment
2374
Version: $version
2375
Requires: $(disabled shared && echo $requires)
2376
Requires.private: $(enabled shared && echo $requires)
2377
Conflicts:
2378
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2379
Libs.private: $(enabled shared && echo $libs)
2380
Cflags: -I\${includedir}
2381
EOF
2382
cat <<EOF > $name/$name-uninstalled.pc
2383
prefix=
2384
exec_prefix=
2385
libdir=\${pcfiledir}
2386
includedir=${source_path}
2387

    
2388
Name: $name
2389
Description: $comment
2390
Version: $version
2391
Requires: $requires
2392
Conflicts:
2393
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2394
Cflags: -I\${includedir}
2395
EOF
2396
}
2397

    
2398
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2399
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2400
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2401
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2402
enabled avfilter &&
2403
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2404
enabled postproc &&
2405
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2406
if enabled swscale; then
2407
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2408
else
2409
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2410
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2411
fi