Statistics
| Branch: | Revision:

ffmpeg / configure @ e6b9d588

History | View | Annotate | Download (69.1 KB)

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

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

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

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

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

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

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

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

    
199
log(){
200
    echo "$@" >> $logfile
201
}
202

    
203
log_file(){
204
    log BEGIN $1
205
    pr -n -t $1 >> $logfile
206
    log END $1
207
}
208

    
209
echolog(){
210
    log "$@"
211
    echo "$@"
212
}
213

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

    
236
# Avoid locale weirdness, besides we really just want to translate ASCII.
237
toupper(){
238
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
239
}
240

    
241
tolower(){
242
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
243
}
244

    
245
set_all(){
246
    value=$1
247
    shift
248
    for var in $*; do
249
        eval $var=$value
250
    done
251
}
252

    
253
set_weak(){
254
    value=$1
255
    shift
256
    for var; do
257
        eval : \${$var:=$value}
258
    done
259
}
260

    
261
pushvar(){
262
    for var in $*; do
263
        eval level=\${${var}_level:=0}
264
        eval ${var}_${level}="\$$var"
265
        eval ${var}_level=$(($level+1))
266
    done
267
}
268

    
269
popvar(){
270
    for var in $*; do
271
        eval level=\${${var}_level:-0}
272
        test $level = 0 && continue
273
        eval level=$(($level-1))
274
        eval $var="\${${var}_${level}}"
275
        eval ${var}_level=$level
276
        eval unset ${var}_${level}
277
    done
278
}
279

    
280
enable(){
281
    set_all yes $*
282
}
283

    
284
disable(){
285
    set_all no $*
286
}
287

    
288
enable_weak(){
289
    set_weak yes $*
290
}
291

    
292
disable_weak(){
293
    set_weak no $*
294
}
295

    
296
do_enable_deep(){
297
    for var; do
298
        enabled $var && continue
299
        eval sel="\$${var}_select"
300
        eval sgs="\$${var}_suggest"
301
        pushvar var sgs
302
        enable_deep $sel
303
        popvar sgs
304
        enable_deep_weak $sgs
305
        popvar var
306
    done
307
}
308

    
309
enable_deep(){
310
    do_enable_deep $*
311
    enable $*
312
}
313

    
314
enable_deep_weak(){
315
    do_enable_deep $*
316
    enable_weak $*
317
}
318

    
319
enabled(){
320
    test "${1#!}" = "$1" && op== || op=!=
321
    eval test "x\$${1#!}" $op "xyes"
322
}
323

    
324
disabled(){
325
    test "${1#!}" = "$1" && op== || op=!=
326
    eval test "x\$${1#!}" $op "xno"
327
}
328

    
329
enabled_all(){
330
    for opt; do
331
        enabled $opt || return 1
332
    done
333
}
334

    
335
disabled_all(){
336
    for opt; do
337
        disabled $opt || return 1
338
    done
339
}
340

    
341
enabled_any(){
342
    for opt; do
343
        enabled $opt && return 0
344
    done
345
}
346

    
347
disabled_any(){
348
    for opt; do
349
        disabled $opt && return 0
350
    done
351
    return 1
352
}
353

    
354
set_default(){
355
    for opt; do
356
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
357
    done
358
}
359

    
360
is_in(){
361
    value=$1
362
    shift
363
    for var in $*; do
364
        [ $var = $value ] && return 0
365
    done
366
    return 1
367
}
368

    
369
check_deps(){
370
    for cfg; do
371
        cfg="${cfg#!}"
372
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
373
        disabled ${cfg}_checking && continue
374
        enable ${cfg}_checking
375

    
376
        eval dep_all="\$${cfg}_deps"
377
        eval dep_any="\$${cfg}_deps_any"
378
        eval dep_sel="\$${cfg}_select"
379
        eval dep_sgs="\$${cfg}_suggest"
380

    
381
        pushvar cfg dep_all dep_any dep_sel dep_sgs
382
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
383
        popvar cfg dep_all dep_any dep_sel dep_sgs
384

    
385
        enabled_all  $dep_all || disable $cfg
386
        enabled_any  $dep_any || disable $cfg
387
        disabled_any $dep_sel && disable $cfg
388

    
389
        if enabled $cfg; then
390
            eval dep_extralibs="\$${cfg}_extralibs"
391
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
392
            enable_deep $dep_sel
393
            enable_deep_weak $dep_sgs
394
        fi
395

    
396
        disable ${cfg}_checking
397
    done
398
}
399

    
400
print_config(){
401
    pfx=$1
402
    header=$2
403
    makefile=$3
404
    shift 3
405
    for cfg; do
406
        ucname="`toupper $cfg`"
407
        if enabled $cfg; then
408
            echo "#define ${pfx}${ucname} 1" >> $header
409
            echo "#define ENABLE_${ucname} 1" >> $header
410
            echo "${pfx}${ucname}=yes" >> $makefile
411
        else
412
            echo "#define ENABLE_${ucname} 0" >> $header
413
        fi
414
    done
415
}
416

    
417
flags_saved(){
418
    (: ${SAVE_CFLAGS?}) 2> /dev/null
419
}
420

    
421
save_flags(){
422
    flags_saved && return
423
    SAVE_CFLAGS="$CFLAGS"
424
    SAVE_LDFLAGS="$LDFLAGS"
425
    SAVE_extralibs="$extralibs"
426
}
427

    
428
restore_flags(){
429
    flags_saved || return
430
    CFLAGS="$SAVE_CFLAGS"
431
    LDFLAGS="$SAVE_LDFLAGS"
432
    extralibs="$SAVE_extralibs"
433
    unset SAVE_CFLAGS
434
    unset SAVE_LDFLAGS
435
    unset SAVE_extralibs
436
}
437

    
438
temp_cflags(){
439
    save_flags
440
    CFLAGS="$CFLAGS $*"
441
}
442

    
443
temp_ldflags(){
444
    save_flags
445
    LDFLAGS="$LDFLAGS $*"
446
}
447

    
448
temp_extralibs(){
449
    save_flags
450
    extralibs="$extralibs $*"
451
}
452

    
453
append(){
454
    var=$1
455
    shift
456
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
457
    eval "$var=\"\$$var $*\""
458
}
459

    
460
add_cflags(){
461
    append CFLAGS "$@"
462
}
463

    
464
add_ldflags(){
465
    append LDFLAGS "$@"
466
}
467

    
468
add_extralibs(){
469
    append extralibs "$@"
470
}
471

    
472
check_cmd(){
473
    log "$@"
474
    "$@" >> $logfile 2>&1
475
}
476

    
477
check_cc(){
478
    log check_cc "$@"
479
    cat > $TMPC
480
    log_file $TMPC
481
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
482
}
483

    
484
check_cpp(){
485
    log check_cpp "$@"
486
    cat > $TMPC
487
    log_file $TMPC
488
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
489
}
490

    
491
check_asm(){
492
    log check_asm "$@"
493
    name="$1"
494
    asm="$2"
495
    shift 2
496
    check_cc "$@" <<EOF && enable $name || disable $name
497
int foo(void){ __asm__ volatile($asm); }
498
EOF
499
}
500

    
501
check_yasm(){
502
    log check_yasm "$@"
503
    echo "$1" > $TMPS
504
    log_file $TMPS
505
    shift 1
506
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
507
}
508

    
509
check_ld(){
510
    log check_ld "$@"
511
    check_cc || return
512
    flags=''
513
    libs=''
514
    for f; do
515
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
516
    done
517
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
518
}
519

    
520
check_cflags(){
521
    log check_cflags "$@"
522
    check_cc "$@" <<EOF && add_cflags "$@"
523
int x;
524
EOF
525
}
526

    
527
check_ldflags(){
528
    log check_ldflags "$@"
529
    check_ld "$@" <<EOF && add_ldflags "$@"
530
int main(void){ return 0; }
531
EOF
532
}
533

    
534
check_header(){
535
    log check_header "$@"
536
    header=$1
537
    shift
538
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
539
    disable $var
540
    check_cpp "$@" <<EOF && enable $var
541
#include <$header>
542
int x;
543
EOF
544
}
545

    
546
check_func(){
547
    log check_func "$@"
548
    func=$1
549
    shift
550
    disable $func
551
    check_ld "$@" <<EOF && enable $func
552
extern int $func();
553
int main(void){ $func(); }
554
EOF
555
}
556

    
557
check_func_headers(){
558
    log check_func_headers "$@"
559
    headers=$1
560
    func=$2
561
    shift 2
562
    disable $func
563
    incs=""
564
    for hdr in $headers; do
565
        incs="$incs
566
#include <$hdr>"
567
    done
568
    check_ld "$@" <<EOF && enable $func
569
$incs
570
int main(int argc, char **argv){
571
    (void) $func;
572
    return 0;
573
}
574
EOF
575
}
576

    
577
check_cpp_condition(){
578
    log check_cpp_condition "$@"
579
    header=$1
580
    condition=$2
581
    check_cpp <<EOF
582
#include <$header>
583
#if !($condition)
584
#error "unsatisfied condition: $condition"
585
#endif
586
EOF
587
}
588

    
589
check_lib(){
590
    log check_lib "$@"
591
    header="$1"
592
    func="$2"
593
    shift 2
594
    temp_extralibs "$@"
595
    check_header $header && check_func $func && add_extralibs "$@"
596
    err=$?
597
    restore_flags
598
    return $err
599
}
600

    
601
check_lib2(){
602
    log check_lib2 "$@"
603
    headers="$1"
604
    func="$2"
605
    shift 2
606
    temp_extralibs "$@"
607
    check_func_headers "$headers" $func && add_extralibs "$@"
608
    err=$?
609
    restore_flags
610
    return $err
611
}
612

    
613
check_exec(){
614
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
615
}
616

    
617
check_exec_crash(){
618
    code=`cat`
619

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

    
626
    (check_exec "$@") >> $logfile 2>&1 <<EOF
627
#include <signal.h>
628
static void sighandler(int sig){
629
    raise(SIGTERM);
630
}
631
int main(void){
632
    signal(SIGILL, sighandler);
633
    signal(SIGFPE, sighandler);
634
    signal(SIGSEGV, sighandler);
635
#ifdef SIGBUS
636
    signal(SIGBUS, sighandler);
637
#endif
638
    { $code }
639
}
640
EOF
641
}
642

    
643
check_type(){
644
    log check_type "$@"
645
    headers=$1
646
    type=$2
647
    shift 2
648
    disable $type
649
    incs=""
650
    for hdr in $headers; do
651
        incs="$incs
652
#include <$hdr>"
653
    done
654
    check_cc "$@" <<EOF && enable $type
655
$incs
656
$type v;
657
EOF
658
}
659

    
660
require(){
661
    name="$1"
662
    header="$2"
663
    func="$3"
664
    shift 3
665
    check_lib $header $func "$@" || die "ERROR: $name not found"
666
}
667

    
668
require2(){
669
    name="$1"
670
    headers="$2"
671
    func="$3"
672
    shift 3
673
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
674
}
675

    
676
check_foo_config(){
677
    cfg=$1
678
    pkg=$2
679
    header=$3
680
    func=$4
681
    shift 4
682
    disable $cfg
683
    check_cmd ${pkg}-config --version
684
    err=$?
685
    if test "$err" = 0; then
686
        temp_cflags `${pkg}-config --cflags`
687
        temp_extralibs `${pkg}-config --libs`
688
        check_lib "$@" $header $func && enable $cfg
689
    fi
690
    return $err
691
}
692

    
693
apply(){
694
    file=$1
695
    shift
696
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
697
}
698

    
699
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
700
# system-dependent things.
701

    
702
COMPONENT_LIST="
703
    bsfs
704
    decoders
705
    demuxers
706
    encoders
707
    filters
708
    indevs
709
    muxers
710
    outdevs
711
    parsers
712
    protocols
713
"
714

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

    
763
THREADS_LIST='
764
    beosthreads
765
    os2threads
766
    pthreads
767
    w32threads
768
'
769

    
770
ARCH_LIST='
771
    alpha
772
    armv4l
773
    bfin
774
    ia64
775
    m68k
776
    mips
777
    parisc
778
    powerpc
779
    s390
780
    sh4
781
    sparc
782
    sparc64
783
    x86
784
    x86_32
785
    x86_64
786
'
787

    
788
ARCH_EXT_LIST='
789
    altivec
790
    armv5te
791
    armv6
792
    armvfp
793
    iwmmxt
794
    mmi
795
    mmx
796
    mmx2
797
    neon
798
    ssse3
799
    vis
800
'
801

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

    
863
# options emitted with CONFIG_ prefix but not available on command line
864
CONFIG_EXTRA="
865
    fft_mmx
866
"
867

    
868
CMDLINE_SELECT="
869
    $ARCH_EXT_LIST
870
    $CONFIG_LIST
871
    $THREADS_LIST
872
    cross_compile
873
    debug
874
    extra_warnings
875
    logging
876
    optimizations
877
    shared
878
    static
879
    stripping
880
"
881

    
882
PATHS_LIST='
883
    bindir
884
    incdir
885
    libdir
886
    mandir
887
    prefix
888
    shlibdir
889
'
890

    
891
CMDLINE_SET="
892
    $PATHS_LIST
893
    arch
894
    build_suffix
895
    cc
896
    cpu
897
    cross_prefix
898
    extra_version
899
    logfile
900
    source_path
901
    target_os
902
"
903

    
904
# code dependency declarations
905

    
906
# architecture extensions
907
altivec_deps="powerpc"
908
armv5te_deps="armv4l"
909
armv6_deps="armv4l"
910
armvfp_deps="armv4l"
911
iwmmxt_deps="armv4l"
912
mmi_deps="mips"
913
mmx_deps="x86"
914
mmx2_deps="x86 mmx"
915
neon_deps="armv4l"
916
ssse3_deps="x86"
917
vis_deps="sparc"
918

    
919
# common features
920
fft_suggest="fft_mmx"
921
fft_mmx_deps="mmx yasm"
922

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

    
971
# external libraries
972
libamr_nb_decoder_deps="libamr_nb"
973
libamr_nb_encoder_deps="libamr_nb"
974
libamr_wb_decoder_deps="libamr_wb"
975
libamr_wb_encoder_deps="libamr_wb"
976
libdirac_decoder_deps="libdirac !libschroedinger"
977
libdirac_encoder_deps="libdirac"
978
libfaac_encoder_deps="libfaac"
979
libfaad_decoder_deps="libfaad"
980
libfaadbin_decoder_extralibs='$ldl'
981
libgsm_decoder_deps="libgsm"
982
libgsm_encoder_deps="libgsm"
983
libgsm_ms_decoder_deps="libgsm"
984
libgsm_ms_encoder_deps="libgsm"
985
libmp3lame_encoder_deps="libmp3lame"
986
libschroedinger_decoder_deps="libschroedinger"
987
libschroedinger_encoder_deps="libschroedinger"
988
libspeex_decoder_deps="libspeex"
989
libtheora_encoder_deps="libtheora"
990
libvorbis_encoder_deps="libvorbis"
991
libx264_encoder_deps="libx264"
992
libxvid_encoder_deps="libxvid"
993
mpeg4aac_decoder_deps="libfaad"
994

    
995
# demuxers / muxers
996
ac3_demuxer_deps="ac3_parser"
997
audio_beos_demuxer_deps="audio_beos"
998
audio_beos_demuxer_extralibs="-lmedia -lbe"
999
audio_beos_muxer_deps="audio_beos"
1000
audio_beos_muxer_extralibs="-lmedia -lbe"
1001
avisynth_demuxer_deps="avisynth"
1002
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1003
dirac_demuxer_deps="dirac_parser"
1004
dv1394_demuxer_deps="dv1394 dv_demuxer"
1005
libdc1394_demuxer_deps="libdc1394"
1006
libnut_demuxer_deps="libnut"
1007
libnut_muxer_deps="libnut"
1008
matroska_demuxer_suggest="zlib bzlib"
1009
mov_demuxer_suggest="zlib"
1010
mp3_demuxer_deps="mpegaudio_parser"
1011
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1012
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1013
redir_demuxer_deps="network"
1014
rtp_muxer_deps="network rtp_protocol"
1015
rtsp_demuxer_deps="sdp_demuxer"
1016
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1017
v4l_demuxer_deps="linux_videodev_h"
1018
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1019
vfwcap_demuxer_deps="capCreateCaptureWindow"
1020
vfwcap_demuxer_extralibs="-lvfw32"
1021
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1022
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1023

    
1024
# protocols
1025
http_protocol_deps="network"
1026
rtp_protocol_deps="udp_protocol"
1027
tcp_protocol_deps="network"
1028
udp_protocol_deps="network"
1029

    
1030
# filters
1031
movie_filter_deps="avfilter_lavf"
1032

    
1033
# programs
1034
ffplay_deps="sdl"
1035
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1036
ffserver_extralibs='$ldl'
1037
vhook_extralibs='$ldl'
1038

    
1039

    
1040
# default parameters
1041

    
1042
logfile="config.err"
1043

    
1044
# installation paths
1045
prefix_default="/usr/local"
1046
bindir_default='${prefix}/bin'
1047
incdir_default='${prefix}/include'
1048
libdir_default='${prefix}/lib'
1049
mandir_default='${prefix}/share/man'
1050
shlibdir_default="$libdir_default"
1051

    
1052
# toolchain
1053
cc_default="gcc"
1054
yasmexe="yasm"
1055
ar="ar"
1056
nm="nm"
1057
ranlib="ranlib"
1058
strip="strip"
1059
asmalign_pot="unknown"
1060
ln_s="ln -sf"
1061
objformat="elf"
1062

    
1063
# machine
1064
arch=`uname -m`
1065
cpu="generic"
1066

    
1067
# OS
1068
target_os=$(tolower $(uname -s))
1069

    
1070
# configurable options
1071
enable debug
1072
enable ffmpeg
1073
enable ffplay
1074
enable ffserver
1075
enable ipv6
1076
enable mpegaudio_hp
1077
enable network
1078
enable optimizations
1079
enable protocols
1080
enable static
1081
enable stripping
1082
vhook="default"
1083

    
1084
# build settings
1085
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1086
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1087
VHOOKSHFLAGS='$(SHFLAGS)'
1088
FFSERVERLDFLAGS=-Wl,-E
1089
LIBPREF="lib"
1090
LIBSUF=".a"
1091
FULLNAME='$(NAME)$(BUILDSUF)'
1092
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1093
SLIBPREF="lib"
1094
SLIBSUF=".so"
1095
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1096
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1097
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1098
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1099

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

    
1104
# find source path
1105
source_path="`dirname \"$0\"`"
1106
enable source_path_used
1107
if test -z "$source_path" -o "$source_path" = "." ; then
1108
    source_path="`pwd`"
1109
    disable source_path_used
1110
else
1111
    source_path="`cd \"$source_path\"; pwd`"
1112
    echo "$source_path" | grep -q '[[:blank:]]' &&
1113
        die "Out of tree builds are impossible with whitespace in source path."
1114
fi
1115

    
1116
FFMPEG_CONFIGURATION="$@"
1117

    
1118
find_things(){
1119
    thing=$1
1120
    pattern=$2
1121
    file=$source_path/$3
1122
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1123
}
1124

    
1125
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1126
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1127
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1128
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1129
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1130
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1131
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1132
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1133
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1134
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1135

    
1136
enable $ARCH_EXT_LIST \
1137
       $DECODER_LIST \
1138
       $ENCODER_LIST \
1139
       $PARSER_LIST \
1140
       $BSF_LIST \
1141
       $DEMUXER_LIST \
1142
       $MUXER_LIST \
1143
       $FILTER_LIST \
1144
       $PROTOCOL_LIST \
1145
       $INDEV_LIST \
1146
       $OUTDEV_LIST \
1147

    
1148
die_unknown(){
1149
    echo "Unknown option \"$1\"."
1150
    echo "See $0 --help for available options."
1151
    exit 1
1152
}
1153

    
1154
show_list() {
1155
    suffix=_$1
1156
    shift
1157
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1158
    exit 0
1159
}
1160

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

    
1209
disabled logging && logfile=/dev/null
1210

    
1211
echo "# $0 $@" > $logfile
1212
set >> $logfile
1213

    
1214
cc_default="${cross_prefix}${cc_default}"
1215
yasmexe="${cross_prefix}${yasmexe}"
1216
ar="${cross_prefix}${ar}"
1217
nm="${cross_prefix}${nm}"
1218
ranlib="${cross_prefix}${ranlib}"
1219
strip="${cross_prefix}${strip}"
1220

    
1221
set_default cc
1222

    
1223
# set temporary file name
1224
if test ! -z "$TMPDIR" ; then
1225
    TMPDIR1="${TMPDIR}"
1226
elif test ! -z "$TEMPDIR" ; then
1227
    TMPDIR1="${TEMPDIR}"
1228
else
1229
    TMPDIR1="/tmp"
1230
fi
1231

    
1232
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1233
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1234
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1235
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1236
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1237
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1238

    
1239
check_cflags -std=c99
1240

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

    
1310
enable $arch
1311
enabled_any x86_32 x86_64 && enable x86
1312
enabled     sparc64       && enable sparc
1313

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

    
1476
    *)
1477
        target_os="${target_os}-UNKNOWN"
1478
        ;;
1479
esac
1480

    
1481
set_default $PATHS_LIST
1482

    
1483
add_extralibs $osextralibs
1484

    
1485
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1486
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1487

    
1488
test -n "$cross_prefix" && enable cross_compile
1489

    
1490
# we need to build at least one lib type
1491
if ! enabled_any static shared; then
1492
    cat <<EOF
1493
At least one library type must be built.
1494
Specify --enable-static to build the static libraries or --enable-shared to
1495
build the shared libraries as well. To only build the shared libraries specify
1496
--disable-static in addition to --enable-shared.
1497
EOF
1498
    exit 1;
1499
fi
1500

    
1501
disabled static && LIBNAME=""
1502

    
1503
if enabled_any libfaad libfaadbin ; then
1504
    if check_header faad.h; then
1505
        check_cc <<EOF
1506
#include <faad.h>
1507
#ifndef FAAD2_VERSION
1508
ok faad1
1509
#endif
1510
int main(void) { return 0; }
1511
EOF
1512
        test $? = 0 && enable libfaad2
1513
    else
1514
        die "FAAD test failed."
1515
    fi
1516
fi
1517

    
1518

    
1519
if ! enabled gpl; then
1520
    die_gpl_disabled(){
1521
        name=$1
1522
        shift
1523
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1524
    }
1525
    die_gpl_disabled "The Postprocessing code" postproc
1526
    die_gpl_disabled "libx264"                 libx264
1527
    die_gpl_disabled "libxvidcore"             libxvid
1528
    die_gpl_disabled "FAAD2"                   libfaad2
1529
    die_gpl_disabled "The X11 grabber"         x11grab
1530
    die_gpl_disabled "The software scaler"     swscale
1531
fi
1532

    
1533
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1534
    die "libamr is nonfree and --enable-nonfree is not specified."
1535
fi
1536

    
1537
check_deps $ARCH_EXT_LIST
1538

    
1539
test -z "$need_memalign" && need_memalign="$mmx"
1540

    
1541
#Darwin CC versions
1542
if test $target_os = darwin; then
1543
    if $cc -v 2>&1 | grep -q xlc; then
1544
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1545
    else
1546
        add_cflags "-pipe"
1547
        check_cflags "-force_cpusubtype_ALL"
1548
        check_cflags "-Wno-sign-compare"
1549
        enabled shared || check_cflags -mdynamic-no-pic
1550
    fi
1551
fi
1552

    
1553
disabled optimizations || check_cflags -fomit-frame-pointer
1554

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

    
1631
# make sure we can execute files in $TMPDIR
1632
cat > $TMPSH 2>> $logfile <<EOF
1633
#! /bin/sh
1634
EOF
1635
chmod +x $TMPSH >> $logfile 2>&1
1636
if ! $TMPSH >> $logfile 2>&1; then
1637
    cat <<EOF
1638
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1639
variable to another directory and make sure that $TMPDIR1 is not mounted
1640
noexec.
1641
EOF
1642
    die "Sanity test failed."
1643
fi
1644
rm $TMPSH
1645

    
1646
# compiler sanity check
1647
check_exec <<EOF
1648
int main(void){ return 0; }
1649
EOF
1650
if test "$?" != 0; then
1651
    echo "$cc is unable to create an executable file."
1652
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1653
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1654
        echo "Only do this if you know what cross compiling means."
1655
    fi
1656
    die "C compiler test failed."
1657
fi
1658

    
1659
check_cc <<EOF || die "Symbol mangling check failed."
1660
int ff_extern;
1661
EOF
1662
sym=$($nm -P -g $TMPO | grep ff_extern)
1663
extern_prefix=${sym%%ff_extern*}
1664

    
1665
check_asm inline_asm '""'
1666

    
1667
if enabled x86; then
1668
    # check whether EBP is available on x86
1669
    # As 'i' is stored on the stack, this program will crash
1670
    # if the base pointer is used to access it because the
1671
    # base pointer is cleared in the inline assembly code.
1672
    check_exec_crash <<EOF && enable ebp_available
1673
    volatile int i=0;
1674
    __asm__ volatile (
1675
        "xorl %%ebp, %%ebp"
1676
    ::: "%ebp");
1677
    return i;
1678
EOF
1679

    
1680
    # check wether EBX is available on x86
1681
    check_asm ebx_available '"":::"%ebx"'
1682

    
1683
    # check whether binutils is new enough to compile SSSE3/MMX2
1684
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1685
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1686

    
1687
    check_asm bswap '"bswap %%eax" ::: "%eax"'
1688

    
1689
    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1690
    enabled     x86_64        && append YASMFLAGS "-m amd64"
1691
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1692
    case "$objformat" in
1693
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1694
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1695
        *)                    append YASMFLAGS "-DPREFIX"  ;;
1696
    esac
1697
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1698
fi
1699

    
1700
# check for assembler specific support
1701

    
1702
if test $arch = "powerpc"; then
1703
    check_asm dcbzl '"dcbzl 0, 1"'
1704
fi
1705

    
1706
# check for SIMD availability
1707

    
1708
# AltiVec flags: The FSF version of GCC differs from the Apple version
1709
if enabled altivec; then
1710
    check_cflags -maltivec -mabi=altivec &&
1711
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1712
        check_cflags -faltivec
1713

    
1714
    # check if our compiler supports Motorola AltiVec C API
1715
    check_cc <<EOF || disable altivec
1716
$inc_altivec_h
1717
int main(void) {
1718
    vector signed int v1, v2, v3;
1719
    v1 = vec_add(v2,v3);
1720
    return 0;
1721
}
1722
EOF
1723

    
1724
    # check if our compiler supports braces for vector declarations
1725
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1726
$inc_altivec_h
1727
int main (void) { (vector int) {1}; return 0; }
1728
EOF
1729
fi
1730

    
1731
# We have to check if pld is a nop and disable it.
1732
enabled armv4l  && check_asm pld     '"pld [r0]"'
1733
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1734
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1735
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1736
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1737
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1738
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1739
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1740

    
1741
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1742

    
1743
# ---
1744
# big/little-endian test
1745
check_cc <<EOF || die "endian test failed"
1746
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1747
EOF
1748
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1749

    
1750
# ---
1751
# check availability of some header files
1752

    
1753
if check_func dlopen; then
1754
    ldl=
1755
elif check_func dlopen -ldl; then
1756
    ldl=-ldl
1757
fi
1758

    
1759
check_func  fork
1760
check_func  gethrtime
1761
check_func  getrusage
1762
check_func  inet_aton $network_extralibs
1763
check_func  memalign
1764
check_func  mkstemp
1765
check_func_headers windows.h GetProcessTimes
1766

    
1767
check_header conio.h
1768
check_header dlfcn.h
1769
check_header malloc.h
1770
check_header poll.h
1771
check_header sys/mman.h
1772
check_header sys/resource.h
1773
check_header sys/select.h
1774
check_header termios.h
1775

    
1776
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1777
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1778
fi
1779

    
1780
disabled  zlib || check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1781
disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1782

    
1783
# check for some common methods of building with pthread support
1784
# do this before the optional library checks as some of them require pthreads
1785
if enabled pthreads; then
1786
    if check_func pthread_create; then
1787
        :
1788
    elif check_func pthread_create -pthread; then
1789
        add_cflags -pthread
1790
        add_extralibs -pthread
1791
    elif check_func pthread_create -pthreads; then
1792
        add_cflags -pthreads
1793
        add_extralibs -pthreads
1794
    elif check_func pthread_create -lpthreadGC2; then
1795
        add_extralibs -lpthreadGC2
1796
    elif ! check_lib pthread.h pthread_create -lpthread; then
1797
        die "ERROR: can't find pthreads library"
1798
    fi
1799
fi
1800

    
1801
for thread in $THREADS_LIST; do
1802
    if enabled $thread; then
1803
        test -n "$thread_type" &&
1804
            die "ERROR: Only one thread type must be selected." ||
1805
            thread_type="$thread"
1806
    fi
1807
done
1808

    
1809
check_lib math.h sin -lm
1810

    
1811
# test for C99 functions in math.h
1812
for func in llrint lrint lrintf round roundf; do
1813
    check_exec <<EOF && enable $func || disable $func
1814
#include <math.h>
1815
int main(void) { return ($func(3.999f) > 0)?0:1; }
1816
EOF
1817
done
1818

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

    
1842
# libdc1394 check
1843
if enabled libdc1394; then
1844
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1845
        enable libdc1394_2; } ||
1846
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1847
        enable libdc1394_1; } ||
1848
    die "ERROR: No version of libdc1394 found "
1849
fi
1850

    
1851

    
1852
_restrict=
1853
for restrict_keyword in restrict __restrict__ __restrict; do
1854
    check_cc <<EOF && _restrict=$restrict_keyword && break
1855
void foo(char * $restrict_keyword p);
1856
EOF
1857
done
1858

    
1859
test "$vhook" = "default" && vhook="$dlopen"
1860

    
1861
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1862
    disable vhook
1863
    echo
1864
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1865
    echo "Patches welcome."
1866
    echo
1867
fi
1868

    
1869
if enabled vhook; then
1870
    check_ldflags -rdynamic
1871
    check_ldflags -export-dynamic
1872
fi
1873

    
1874
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1875
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1876

    
1877
##########################################
1878
# SDL check
1879

    
1880
disable sdl_too_old
1881
disable sdl
1882
SDL_CONFIG="${cross_prefix}sdl-config"
1883
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1884
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1885
    temp_cflags $sdl_cflags
1886
    temp_extralibs `"${SDL_CONFIG}" --libs`
1887
    if check_lib2 SDL.h SDL_Init; then
1888
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1889
        if test "$_sdlversion" -lt 121 ; then
1890
            enable sdl_too_old
1891
        else
1892
            enable sdl
1893
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1894
#include <SDL.h>
1895
int main(int argc, char **argv){
1896
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1897
    int w = vi->current_w;
1898
    return 0;
1899
}
1900
EOF
1901
        fi
1902
    fi
1903
    restore_flags
1904
fi
1905

    
1906
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1907

    
1908
##########################################
1909
# Network check
1910

    
1911
if enabled network; then
1912
    check_type sys/socket.h socklen_t
1913
    # Prefer arpa/inet.h over winsock2
1914
    if check_header arpa/inet.h ; then
1915
        check_func closesocket
1916
    elif check_header winsock2.h ; then
1917
        network_extralibs="-lws2_32"
1918
        check_type ws2tcpip.h socklen_t
1919
        check_func_headers winsock2.h closesocket
1920
    fi
1921
fi
1922

    
1923
##########################################
1924
# IPv6 check
1925

    
1926
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1927
#include <sys/types.h>
1928
#include <sys/socket.h>
1929
#include <netinet/in.h>
1930
#include <netdb.h>
1931
int main(void) {
1932
    struct sockaddr_storage saddr;
1933
    struct ipv6_mreq mreq6;
1934
    getaddrinfo(0,0,0,0);
1935
    getnameinfo(0,0,0,0,0,0,0);
1936
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1937
}
1938
EOF
1939

    
1940
check_header linux/videodev.h
1941
check_header linux/videodev2.h
1942
check_header sys/videoio.h
1943

    
1944
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1945

    
1946
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1947
{ check_header dev/bktr/ioctl_meteor.h &&
1948
  check_header dev/bktr/ioctl_bt848.h; } ||
1949
{ check_header machine/ioctl_meteor.h &&
1950
  check_header machine/ioctl_bt848.h; } ||
1951
{ check_header dev/video/meteor/ioctl_meteor.h &&
1952
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1953
check_header dev/ic/bt8xx.h
1954

    
1955
check_header sys/soundcard.h
1956
check_header soundcard.h
1957

    
1958
# deal with the X11 frame grabber
1959
enabled x11grab                         &&
1960
check_header X11/Xlib.h                 &&
1961
check_header X11/extensions/XShm.h      &&
1962
check_func XOpenDisplay -lX11           &&
1963
check_func XShmCreateImage -lX11 -lXext
1964

    
1965
enabled debug && add_cflags -g"$debuglevel"
1966

    
1967
# add some useful compiler flags if supported
1968
check_cflags -Wdeclaration-after-statement
1969
check_cflags -Wall
1970
check_cflags -Wno-switch
1971
check_cflags -Wdisabled-optimization
1972
check_cflags -Wpointer-arith
1973
check_cflags -Wredundant-decls
1974
check_cflags -Wno-pointer-sign
1975
check_cflags -Wcast-qual
1976
check_cflags -Wwrite-strings
1977
check_cflags -Wtype-limits
1978
enabled extra_warnings && check_cflags -Winline
1979

    
1980
# add some linker flags
1981
check_ldflags -Wl,--warn-common
1982
check_ldflags -Wl,--as-needed
1983
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'
1984
check_ldflags -Wl,-Bsymbolic
1985

    
1986
if enabled small; then
1987
    check_cflags -Os            # not all compilers support -Os
1988
    optimizations="small"
1989
elif enabled optimizations; then
1990
    if $cc -v 2>&1 | grep -q xlc; then
1991
        add_cflags  "-O5"
1992
        add_ldflags "-O5"
1993
    else
1994
        add_cflags "-O3"
1995
    fi
1996
fi
1997
check_cflags -fno-math-errno
1998
check_cflags -fno-signed-zeros
1999

    
2000
# add some flags for Intel C Compiler
2001
if $cc --version 2> /dev/null | grep -q Intel; then
2002
  # Just warnings, no remarks
2003
  check_cflags -w1
2004
  # -wd: Disable following warnings
2005
  # 144, 167, 556: -Wno-pointer-sign
2006
  # 10006: ignoring unknown option -fno-signed-zeros
2007
  # 10156: ignoring option '-W'; no argument required
2008
  check_cflags -wd144,167,556,10006,10156
2009
  # 11030: Warning unknown option --as-needed
2010
  # 10156: ignoring option '-export'; no argument required
2011
  check_ldflags -wd10156,11030
2012
  # Allow to compile with optimizations
2013
  check_ldflags -march=$cpu
2014
fi
2015

    
2016
# PIC flags for shared library objects where they are needed
2017
if enabled shared; then
2018
    # LIBOBJFLAGS may have already been set in the OS configuration
2019
    if test -z "$LIBOBJFLAGS" ; then
2020
        case "$arch" in
2021
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2022
        esac
2023
    fi
2024
fi
2025

    
2026
if enabled gprof; then
2027
    add_cflags  "-p"
2028
    add_ldflags "-p"
2029
fi
2030

    
2031
VHOOKCFLAGS="-fPIC"
2032

    
2033
# Find out if the .align argument is a power of two or not.
2034
if test $asmalign_pot = "unknown"; then
2035
    disable asmalign_pot
2036
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2037
fi
2038

    
2039
enabled_any $DECODER_LIST      && enable decoders
2040
enabled_any $ENCODER_LIST      && enable encoders
2041
enabled_any $BSF_LIST          && enable bsfs
2042
enabled_any $DEMUXER_LIST      && enable demuxers
2043
enabled_any $MUXER_LIST        && enable muxers
2044
enabled_any $FILTER_LIST       && enable filters
2045
enabled_any $INDEV_LIST        && enable demuxers
2046
enabled_any $OUTDEV_LIST       && enable muxers
2047
enabled_any $PROTOCOL_LIST     && enable protocols
2048

    
2049
enabled_any $THREADS_LIST      && enable threads
2050

    
2051
check_deps $CONFIG_LIST       \
2052
           $CONFIG_EXTRA      \
2053
           $HAVE_LIST         \
2054
           $DECODER_LIST      \
2055
           $ENCODER_LIST      \
2056
           $PARSER_LIST       \
2057
           $BSF_LIST          \
2058
           $DEMUXER_LIST      \
2059
           $MUXER_LIST        \
2060
           $FILTER_LIST       \
2061
           $INDEV_LIST        \
2062
           $OUTDEV_LIST       \
2063
           $PROTOCOL_LIST     \
2064

    
2065
enabled libdc1394 && append pkg_requires "libraw1394"
2066
enabled libdirac  && append pkg_requires "dirac"
2067
enabled libtheora && append pkg_requires "theora"
2068
enabled libvorbis && append pkg_requires "vorbisenc"
2069

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

    
2150
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2151
    echo "Enabled ${type}s:"
2152
    eval list=\$$(toupper $type)_LIST
2153
    for part in $list; do
2154
        enabled $part && echo ${part%_*}
2155
    done | sort | pr -3 -t
2156
    echo
2157
done
2158

    
2159
license="LGPL"
2160
if enabled nonfree; then
2161
    license="unredistributable"
2162
elif enabled gpl; then
2163
    license="GPL"
2164
fi
2165

    
2166
echo "License: $license"
2167

    
2168
echo "Creating config.mak and config.h..."
2169

    
2170
echo "# Automatically generated by configure - do not modify!" > config.mak
2171
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2172
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2173
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2174
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2175

    
2176
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2177
echo "prefix=$prefix" >> config.mak
2178
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2179
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2180
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2181
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2182
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2183
echo "CC=$cc" >> config.mak
2184
echo "YASM=$yasmexe" >> config.mak
2185
echo "AR=$ar" >> config.mak
2186
echo "RANLIB=$ranlib" >> config.mak
2187
echo "LN_S=$ln_s" >> config.mak
2188
enabled stripping &&
2189
    echo "STRIP=$strip" >> config.mak ||
2190
    echo "STRIP=echo ignoring strip" >> config.mak
2191

    
2192
echo "OPTFLAGS=$CFLAGS" >> config.mak
2193
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2194
echo "LDFLAGS=$LDFLAGS" >> config.mak
2195
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2196
echo "SHFLAGS=$SHFLAGS" >> config.mak
2197
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2198
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2199
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2200
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2201
echo "BUILD_STATIC=$static" >> config.mak
2202
echo "BUILDSUF=$build_suffix" >> config.mak
2203
echo "FULLNAME=$FULLNAME" >> config.mak
2204
echo "LIBPREF=$LIBPREF" >> config.mak
2205
echo "LIBSUF=$LIBSUF" >> config.mak
2206
echo "LIBNAME=$LIBNAME" >> config.mak
2207
echo "SLIBPREF=$SLIBPREF" >> config.mak
2208
echo "SLIBSUF=$SLIBSUF" >> config.mak
2209
echo "EXESUF=$EXESUF" >> config.mak
2210
echo "EXTRA_VERSION=$extra_version" >> config.mak
2211
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2212

    
2213
if enabled bigendian; then
2214
    echo "WORDS_BIGENDIAN=yes" >> config.mak
2215
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2216
fi
2217

    
2218
if enabled sdl; then
2219
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2220
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2221
fi
2222
if enabled texi2html; then
2223
    echo "BUILD_DOC=yes" >> config.mak
2224
fi
2225

    
2226
get_version(){
2227
    name=$1
2228
    file=$source_path/$2
2229
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2230
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2231
    lcname=$(tolower $name)
2232
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2233
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2234
}
2235

    
2236
get_version LIBSWSCALE  libswscale/swscale.h
2237
get_version LIBPOSTPROC libpostproc/postprocess.h
2238
get_version LIBAVCODEC  libavcodec/avcodec.h
2239
get_version LIBAVDEVICE libavdevice/avdevice.h
2240
get_version LIBAVFORMAT libavformat/avformat.h
2241
get_version LIBAVUTIL   libavutil/avutil.h
2242
get_version LIBAVFILTER libavfilter/avfilter.h
2243

    
2244
if enabled shared; then
2245
    echo "BUILD_SHARED=yes" >> config.mak
2246
    echo "PIC=-fPIC -DPIC" >> config.mak
2247
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2248
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
2249
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2250
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2251
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2252
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2253
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2254
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2255
fi
2256
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2257
echo "EXTRALIBS=$extralibs" >> config.mak
2258

    
2259
print_config ARCH_   $TMPH config.mak $ARCH_LIST
2260
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2261
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2262
                                      $CONFIG_EXTRA      \
2263
                                      $DECODER_LIST      \
2264
                                      $ENCODER_LIST      \
2265
                                      $PARSER_LIST       \
2266
                                      $BSF_LIST          \
2267
                                      $DEMUXER_LIST      \
2268
                                      $MUXER_LIST        \
2269
                                      $FILTER_LIST       \
2270
                                      $PROTOCOL_LIST     \
2271
                                      $INDEV_LIST        \
2272
                                      $OUTDEV_LIST       \
2273

    
2274
echo "#define restrict $_restrict" >> $TMPH
2275

    
2276
if enabled small; then
2277
    echo "#define av_always_inline"  >> $TMPH
2278
fi
2279

    
2280
echo "SRC_PATH=\"$source_path\"" >> config.mak
2281
echo "SRC_PATH_BARE=$source_path" >> config.mak
2282
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2283

    
2284
# Apparently it's not possible to portably echo a backslash.
2285
enabled asmalign_pot &&
2286
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2287
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2288

    
2289
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2290

    
2291
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2292

    
2293
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2294
cmp -s $TMPH config.h &&
2295
    echo "config.h is unchanged" ||
2296
    mv -f $TMPH config.h
2297

    
2298
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2299

    
2300
# build tree in object directory if source path is different from current one
2301
if enabled source_path_used; then
2302
    DIRS="\
2303
        doc               \
2304
        libavcodec        \
2305
        libavcodec/alpha  \
2306
        libavcodec/armv4l \
2307
        libavcodec/bfin   \
2308
        libavcodec/i386   \
2309
        libavcodec/mlib   \
2310
        libavcodec/ppc    \
2311
        libavcodec/sh4    \
2312
        libavcodec/sparc  \
2313
        libavdevice       \
2314
        libavfilter       \
2315
        libavformat       \
2316
        libavutil         \
2317
        libpostproc       \
2318
        libswscale        \
2319
        tests             \
2320
        tools             \
2321
        vhook             \
2322
        "
2323
    FILES="\
2324
        Makefile             \
2325
        common.mak           \
2326
        subdir.mak           \
2327
        doc/texi2pod.pl      \
2328
        libavcodec/Makefile  \
2329
        libavdevice/Makefile \
2330
        libavfilter/Makefile \
2331
        libavformat/Makefile \
2332
        libavutil/Makefile   \
2333
        libpostproc/Makefile \
2334
        libswscale/Makefile  \
2335
        "
2336
    for dir in $DIRS ; do
2337
        mkdir -p $dir
2338
    done
2339
    for f in $FILES ; do
2340
        $ln_s "$source_path/$f" $f
2341
    done
2342
fi
2343

    
2344

    
2345
# build pkg-config files
2346

    
2347
pkgconfig_generate(){
2348
name=$1
2349
shortname=${name#lib}
2350
comment=$2
2351
version=$3
2352
libs=$4
2353
requires=$5
2354
cat <<EOF > $name/$name.pc
2355
prefix=$prefix
2356
exec_prefix=\${prefix}
2357
libdir=$libdir
2358
includedir=$incdir
2359

    
2360
Name: $name
2361
Description: $comment
2362
Version: $version
2363
Requires: $(disabled shared && echo $requires)
2364
Requires.private: $(enabled shared && echo $requires)
2365
Conflicts:
2366
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2367
Libs.private: $(enabled shared && echo $libs)
2368
Cflags: -I\${includedir}
2369
EOF
2370
cat <<EOF > $name/$name-uninstalled.pc
2371
prefix=
2372
exec_prefix=
2373
libdir=\${pcfiledir}
2374
includedir=${source_path}
2375

    
2376
Name: $name
2377
Description: $comment
2378
Version: $version
2379
Requires: $requires
2380
Conflicts:
2381
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2382
Cflags: -I\${includedir}
2383
EOF
2384
}
2385

    
2386
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2387
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2388
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2389
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2390
enabled avfilter &&
2391
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2392
enabled postproc &&
2393
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2394
if enabled swscale; then
2395
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2396
else
2397
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2398
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2399
fi