Statistics
| Branch: | Revision:

ffmpeg / configure @ 7483e694

History | View | Annotate | Download (59.4 KB)

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

    
10
# make sure we are running under a compatible shell
11
# try to make this part work with most shells
12

    
13
try_exec(){
14
    echo "Trying shell $1"
15
    type "$1" >/dev/null 2>&1 && exec "$@"
16
}
17

    
18
unset foo
19
(: ${foo%%bar}) 2>/dev/null
20
E1="$?"
21

    
22
(: ${foo?}) 2>/dev/null
23
E2="$?"
24

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

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

    
174
log(){
175
    echo "$@" >>$logfile
176
}
177

    
178
log_file(){
179
    log BEGIN $1
180
    pr -n -t $1 >>$logfile
181
    log END $1
182
}
183

    
184
echolog(){
185
    log "$@"
186
    echo "$@"
187
}
188

    
189
die(){
190
    echolog "$@"
191
    cat <<EOF
192
If you think configure made a mistake, make sure you are using the latest
193
version from SVN.  If the latest version fails, report the problem to the
194
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
195
EOF
196
    if enabled logging; then
197
        cat <<EOF
198
Include the log file "$logfile" produced by configure as this will help
199
solving the problem.
200
EOF
201
    else
202
cat <<EOF
203
Rerun configure with logging enabled (do not use --log=no), and include the
204
log this produces with your report.
205
EOF
206
    fi
207
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
208
    exit 1
209
}
210

    
211
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
212
toupper(){
213
    echo "$@" | tr '[a-z]' '[A-Z]'
214
}
215

    
216
tolower(){
217
    echo "$@" | tr '[A-Z]' '[a-z]'
218
}
219

    
220
set_all(){
221
    value=$1
222
    shift
223
    for var in $*; do
224
        eval $var=$value
225
    done
226
}
227

    
228
pushvar(){
229
    for var in $*; do
230
        eval level=\${${var}_level:=0}
231
        eval ${var}_${level}="\$$var"
232
        eval ${var}_level=$(($level+1))
233
    done
234
}
235

    
236
popvar(){
237
    for var in $*; do
238
        eval level=\${${var}_level:-0}
239
        test $level = 0 && continue
240
        eval level=$(($level-1))
241
        eval $var="\${${var}_${level}}"
242
        eval ${var}_level=$level
243
        eval unset ${var}_${level}
244
    done
245
}
246

    
247
enable(){
248
    set_all yes $*
249
}
250

    
251
disable(){
252
    set_all no $*
253
}
254

    
255
enabled(){
256
    eval test "x\$$1" = "xyes"
257
}
258

    
259
disabled(){
260
    eval test "x\$$1" = "xno"
261
}
262

    
263
enabled_all(){
264
    for opt; do
265
        enabled $opt || return 1
266
    done
267
}
268

    
269
disabled_all(){
270
    for opt; do
271
        disabled $opt || return 1
272
    done
273
}
274

    
275
enabled_any(){
276
    for opt; do
277
        enabled $opt && return 0
278
    done
279
}
280

    
281
disabled_any(){
282
    for opt; do
283
        disabled $opt && return 0
284
    done
285
}
286

    
287
is_in(){
288
    value=$1
289
    shift
290
    for var in $*; do
291
        [ $var = $value ] && return 0
292
    done
293
    return 1
294
}
295

    
296
check_deps(){
297
    for cfg; do
298
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
299
        disabled ${cfg}_checking && continue
300
        enable ${cfg}_checking
301

    
302
        eval dep_all="\$${cfg}_deps"
303
        eval dep_any="\$${cfg}_deps_any"
304

    
305
        pushvar cfg dep_all dep_any
306
        check_deps $dep_all $dep_any
307
        popvar cfg dep_all dep_any
308

    
309
        enabled_all $dep_all || disable $cfg
310
        enabled_any $dep_any || disable $cfg
311

    
312
        if enabled $cfg; then
313
            eval dep_extralibs="\$${cfg}_extralibs"
314
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
315
        fi
316

    
317
        disable ${cfg}_checking
318
    done
319
}
320

    
321
print_config(){
322
    pfx=$1
323
    header=$2
324
    makefile=$3
325
    shift 3
326
    for cfg; do
327
        ucname="`toupper $cfg`"
328
        if enabled $cfg; then
329
            echo "#define ${pfx}${ucname} 1" >> $header
330
            echo "#define ENABLE_${ucname} 1" >> $header
331
            echo "${pfx}${ucname}=yes" >> $makefile
332
        else
333
            echo "#define ENABLE_${ucname} 0" >> $header
334
        fi
335
    done
336
}
337

    
338
flags_saved(){
339
    (: ${SAVE_CFLAGS?}) 2>/dev/null
340
}
341

    
342
save_flags(){
343
    flags_saved && return
344
    SAVE_CFLAGS="$CFLAGS"
345
    SAVE_LDFLAGS="$LDFLAGS"
346
    SAVE_extralibs="$extralibs"
347
}
348

    
349
restore_flags(){
350
    flags_saved || return
351
    CFLAGS="$SAVE_CFLAGS"
352
    LDFLAGS="$SAVE_LDFLAGS"
353
    extralibs="$SAVE_extralibs"
354
    unset SAVE_CFLAGS
355
    unset SAVE_LDFLAGS
356
    unset SAVE_extralibs
357
}
358

    
359
temp_cflags(){
360
    save_flags
361
    CFLAGS="$CFLAGS $*"
362
}
363

    
364
temp_ldflags(){
365
    save_flags
366
    LDFLAGS="$LDFLAGS $*"
367
}
368

    
369
temp_extralibs(){
370
    save_flags
371
    extralibs="$extralibs $*"
372
}
373

    
374
append(){
375
    var=$1
376
    shift
377
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
378
    eval "$var=\"\$$var $*\""
379
}
380

    
381
add_cflags(){
382
    append CFLAGS "$@"
383
}
384

    
385
add_ldflags(){
386
    append LDFLAGS "$@"
387
}
388

    
389
add_extralibs(){
390
    append extralibs "$@"
391
}
392

    
393
check_cmd(){
394
    log "$@"
395
    "$@" >>$logfile 2>&1
396
}
397

    
398
check_cc(){
399
    log check_cc "$@"
400
    cat >$TMPC
401
    log_file $TMPC
402
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
403
}
404

    
405
check_cpp(){
406
    log check_cpp "$@"
407
    cat >$TMPC
408
    log_file $TMPC
409
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
410
}
411

    
412
check_asm(){
413
    log check_asm "$@"
414
    name="$1"
415
    asm="$2"
416
    shift 2
417
    check_cc "$@" <<EOF && enable $name || disable $name
418
int foo(void){
419
    asm volatile($asm);
420
}
421
EOF
422
}
423

    
424
check_ld(){
425
    log check_ld "$@"
426
    check_cc || return
427
    flags=''
428
    libs=''
429
    for f; do
430
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
431
    done
432
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
433
}
434

    
435
check_cflags(){
436
    log check_cflags "$@"
437
    check_cc "$@" <<EOF && add_cflags "$@"
438
int x;
439
EOF
440
}
441

    
442
check_ldflags(){
443
    log check_ldflags "$@"
444
    check_ld "$@" <<EOF && add_ldflags "$@"
445
int main(void){
446
    return 0;
447
}
448
EOF
449
}
450

    
451
check_header(){
452
    log check_header "$@"
453
    header=$1
454
    shift
455
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
456
    disable $var
457
    check_cpp "$@" <<EOF && enable $var
458
#include <$header>
459
int x;
460
EOF
461
}
462

    
463
check_func(){
464
    log check_func "$@"
465
    func=$1
466
    shift
467
    disable $func
468
    check_ld "$@" <<EOF && enable $func
469
extern int $func();
470
int main(void){
471
    $func();
472
}
473
EOF
474
}
475

    
476
check_func2(){
477
    log check_func2 "$@"
478
    headers=$1
479
    func=$2
480
    shift 2
481
    disable $func
482
    incs=""
483
    for hdr in $headers; do
484
        incs="$incs
485
#include <$hdr>"
486
    done
487
    check_ld "$@" <<EOF && enable $func
488
$incs
489
int main(void){
490
    (void) $func;
491
    return 0;
492
}
493
EOF
494
}
495

    
496
check_lib(){
497
    log check_lib "$@"
498
    header="$1"
499
    func="$2"
500
    shift 2
501
    temp_extralibs "$@"
502
    check_header $header && check_func $func && add_extralibs "$@"
503
    err=$?
504
    restore_flags
505
    return $err
506
}
507

    
508
check_lib2(){
509
    log check_lib2 "$@"
510
    headers="$1"
511
    func="$2"
512
    shift 2
513
    temp_extralibs "$@"
514
    check_func2 "$headers" $func && add_extralibs "$@"
515
    err=$?
516
    restore_flags
517
    return $err
518
}
519

    
520
check_exec(){
521
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
522
}
523

    
524
check_exec_crash(){
525
    code=`cat`
526

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

    
533
    (check_exec "$@") >>$logfile 2>&1 <<EOF
534
#include <signal.h>
535
static void sighandler(int sig){
536
    raise(SIGTERM);
537
}
538
int main(void){
539
    signal(SIGILL, sighandler);
540
    signal(SIGFPE, sighandler);
541
    signal(SIGSEGV, sighandler);
542
#ifdef SIGBUS
543
    signal(SIGBUS, sighandler);
544
#endif
545
    { $code }
546
}
547
EOF
548
}
549

    
550
require(){
551
    name="$1"
552
    header="$2"
553
    func="$3"
554
    shift 3
555
    check_lib $header $func "$@" || die "ERROR: $name not found"
556
}
557

    
558
require2(){
559
    name="$1"
560
    headers="$2"
561
    func="$3"
562
    shift 3
563
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
564
}
565

    
566
check_foo_config(){
567
    cfg=$1
568
    pkg=$2
569
    header=$3
570
    func=$4
571
    shift 4
572
    disable $cfg
573
    check_cmd ${pkg}-config --version
574
    err=$?
575
    if test "$err" = 0; then
576
        temp_cflags `${pkg}-config --cflags`
577
        temp_extralibs `${pkg}-config --libs`
578
        check_lib "$@" $header $func && enable $cfg
579
    fi
580
    return $err
581
}
582

    
583
apply(){
584
    file=$1
585
    shift
586
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
587
}
588

    
589
COMPONENT_LIST="
590
    bsfs
591
    decoders
592
    demuxers
593
    encoders
594
    muxers
595
    parsers
596
    protocols
597
"
598

    
599
CONFIG_LIST="
600
    $COMPONENT_LIST
601
    avisynth
602
    beos_netserver
603
    ffmpeg
604
    ffplay
605
    ffserver
606
    gpl
607
    gprof
608
    gray
609
    ipv6
610
    liba52
611
    liba52bin
612
    libamr
613
    libamr_nb
614
    libamr_wb
615
    libdc1394
616
    libfaac
617
    libfaad
618
    libfaadbin
619
    libgsm
620
    libmp3lame
621
    libnut
622
    libtheora
623
    libvorbis
624
    libx264
625
    libxvid
626
    memalign_hack
627
    mpegaudio_hp
628
    network
629
    powerpc_perf
630
    pp
631
    small
632
    swscaler
633
    vhook
634
    x11grab
635
    zlib
636
"
637

    
638
THREADS_LIST='
639
    beosthreads
640
    pthreads
641
    w32threads
642
'
643

    
644
ARCH_LIST='
645
    alpha
646
    armv4l
647
    bfin
648
    ia64
649
    m68k
650
    mips
651
    parisc
652
    powerpc
653
    s390
654
    sh4
655
    sparc
656
    sparc64
657
    x86
658
    x86_32
659
    x86_64
660
'
661

    
662
ARCH_EXT_LIST='
663
    altivec
664
    armv5te
665
    armv6
666
    iwmmxt
667
    mmi
668
    mmx
669
    ssse3
670
    vis
671
'
672

    
673
HAVE_LIST="
674
    $ARCH_EXT_LIST
675
    $THREADS_LIST
676
    altivec_h
677
    arpa_inet_h
678
    byteswap_h
679
    closesocket
680
    cmov
681
    conio_h
682
    dcbzl
683
    dev_bktr_ioctl_bt848_h
684
    dev_bktr_ioctl_meteor_h
685
    dev_ic_bt8xx_h
686
    dev_video_meteor_ioctl_meteor_h
687
    dev_video_bktr_ioctl_bt848_h
688
    dlfcn_h
689
    dlopen
690
    ebp_available
691
    ebx_available
692
    fast_64bit
693
    fast_cmov
694
    fast_unaligned
695
    fork
696
    freetype2
697
    gethrtime
698
    GetProcessTimes
699
    getrusage
700
    imlib2
701
    inet_aton
702
    lrintf
703
    machine_ioctl_bt848_h
704
    machine_ioctl_meteor_h
705
    malloc_h
706
    memalign
707
    mkstemp
708
    mlib
709
    ppc64
710
    sdl
711
    sdl_video_size
712
    soundcard_h
713
    sys_poll_h
714
    sys_soundcard_h
715
    termios_h
716
    threads
717
    winsock2_h
718
"
719

    
720
CMDLINE_SELECT="
721
    $ARCH_EXT_LIST
722
    $CONFIG_LIST
723
    $THREADS_LIST
724
    debug
725
    extra_warnings
726
    optimizations
727
    shared
728
    static
729
"
730

    
731
# code dependency declarations
732

    
733
# architecture extensions
734
altivec_deps="powerpc"
735
armv5te_deps="armv4l"
736
armv6_deps="armv4l"
737
iwmmxt_deps="armv4l"
738
mmi_deps="mips"
739
mmx_deps="x86"
740
ssse3_deps="x86"
741
vis_deps="sparc"
742

    
743
# decoders / encoders
744
ac3_decoder_deps="gpl"
745
dxa_decoder_deps="zlib"
746
flashsv_decoder_deps="zlib"
747
flashsv_encoder_deps="zlib"
748
flv_decoder_deps="h263_decoder"
749
h263_decoder_deps="h263_parser mpeg4video_parser"
750
h263i_decoder_deps="h263_decoder"
751
h264_decoder_deps="h264_parser"
752
mpeg_xvmc_decoder_deps="xvmc"
753
mpeg4_decoder_deps="h263_decoder"
754
msmpeg4v1_decoder_deps="h263_decoder"
755
msmpeg4v2_decoder_deps="h263_decoder"
756
msmpeg4v3_decoder_deps="h263_decoder"
757
png_decoder_deps="zlib"
758
png_encoder_deps="zlib"
759
svq3_decoder_deps="h264_parser"
760
vc1_decoder_deps="h263_decoder"
761
wmv1_decoder_deps="h263_decoder"
762
wmv2_decoder_deps="h263_decoder"
763
wmv3_decoder_deps="h263_decoder"
764
zmbv_decoder_deps="zlib"
765
zmbv_encoder_deps="zlib"
766

    
767
# external libraries
768
liba52_decoder_deps="liba52"
769
liba52bin_decoder_extralibs='$ldl'
770
libamr_nb_decoder_deps="libamr_nb"
771
libamr_nb_encoder_deps="libamr_nb"
772
libamr_wb_decoder_deps="libamr_wb"
773
libamr_wb_encoder_deps="libamr_wb"
774
libfaac_encoder_deps="libfaac"
775
libfaad_decoder_deps="libfaad"
776
libfaadbin_decoder_extralibs='$ldl'
777
libgsm_decoder_deps="libgsm"
778
libgsm_encoder_deps="libgsm"
779
libgsm_ms_decoder_deps="libgsm"
780
libgsm_ms_encoder_deps="libgsm"
781
libmp3lame_encoder_deps="libmp3lame"
782
libtheora_encoder_deps="libtheora"
783
libvorbis_encoder_deps="libvorbis"
784
libx264_encoder_deps="libx264"
785
libxvid_encoder_deps="libxvid"
786
mpeg4aac_decoder_deps="libfaad"
787

    
788
# demuxers / muxers
789
ac3_demuxer_deps="ac3_parser"
790
audio_beos_demuxer_deps="audio_beos"
791
audio_beos_demuxer_extralibs="-lmedia -lbe"
792
audio_beos_muxer_deps="audio_beos"
793
audio_beos_muxer_extralibs="-lmedia -lbe"
794
avisynth_demuxer_deps="avisynth"
795
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
796
dv1394_demuxer_deps="dv1394"
797
libdc1394_demuxer_deps="libdc1394"
798
libnut_demuxer_deps="libnut"
799
libnut_muxer_deps="libnut"
800
mp3_demuxer_deps="mpegaudio_parser"
801
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
802
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
803
redir_demuxer_deps="network"
804
rtp_muxer_deps="network mpegts_demuxer"
805
rtsp_demuxer_deps="rtp_protocol rtp_muxer"
806
sdp_demuxer_deps="rtsp_demuxer"
807
v4l2_demuxer_deps="linux_videodev2_h"
808
v4l_demuxer_deps="linux_videodev_h"
809
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
810
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
811

    
812
# protocols
813
http_protocol_deps="network"
814
rtp_protocol_deps="udp_protocol"
815
tcp_protocol_deps="network"
816
udp_protocol_deps="network"
817

    
818
# programs
819
ffplay_deps="sdl"
820
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
821
ffserver_extralibs='$ldl'
822
vhook_extralibs='$ldl'
823

    
824

    
825
# set temporary file name
826
if test ! -z "$TMPDIR" ; then
827
    TMPDIR1="${TMPDIR}"
828
elif test ! -z "$TEMPDIR" ; then
829
    TMPDIR1="${TEMPDIR}"
830
else
831
    TMPDIR1="/tmp"
832
fi
833

    
834
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
835
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
836
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
837
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
838
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
839

    
840
# default parameters
841

    
842
enable logging
843
logfile="config.err"
844

    
845
# installation paths
846
PREFIX="/usr/local"
847
libdir='$(PREFIX)/lib'
848
shlibdir="$libdir"
849
incdir='$(PREFIX)/include/ffmpeg'
850
mandir='$(PREFIX)/share/man'
851
bindir='$(PREFIX)/bin'
852

    
853
# toolchain
854
cc="gcc"
855
ar="ar"
856
ranlib="ranlib"
857
make="make"
858
strip="strip"
859
asmalign_pot="unknown"
860
ln_s="ln -sf"
861

    
862
# machine
863
arch=`uname -m`
864
cpu="generic"
865

    
866
# OS
867
targetos=$(tolower $(uname -s))
868

    
869
# libraries
870
enable zlib
871

    
872
# configurable options
873
enable debug
874
enable dostrip
875
enable ffmpeg
876
enable ffplay
877
enable ffserver
878
enable ipv6
879
enable static
880
enable mpegaudio_hp
881
enable network
882
enable optimizations
883
enable protocols
884
vhook="default"
885

    
886
# build settings
887
SHFLAGS='-shared -Wl,-soname,$@'
888
VHOOKSHFLAGS='$(SHFLAGS)'
889
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
890
FFSERVERLDFLAGS=-Wl,-E
891
LDCONFIG="ldconfig"
892
LIBPREF="lib"
893
LIBSUF=".a"
894
FULLNAME='$(NAME)$(BUILDSUF)'
895
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
896
SLIBPREF="lib"
897
SLIBSUF=".so"
898
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
899
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
900
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
901
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
902

    
903
# find source path
904
source_path="`dirname \"$0\"`"
905
enable source_path_used
906
if test -z "$source_path" -o "$source_path" = "." ; then
907
    source_path="`pwd`"
908
    disable source_path_used
909
else
910
    source_path="`cd \"$source_path\"; pwd`"
911
    echo "$source_path" | grep -q '[[:blank:]]' &&
912
        die "Out of tree builds are impossible with whitespace in source path."
913
fi
914

    
915
FFMPEG_CONFIGURATION="$@"
916

    
917
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
918
DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
919
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
920
BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
921
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
922
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
923
OUTDEV_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavdevice/alldevices.c"`
924
INDEV_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavdevice/alldevices.c"`
925
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
926

    
927
enable $ARCH_EXT_LIST \
928
       $DECODER_LIST \
929
       $ENCODER_LIST \
930
       $PARSER_LIST \
931
       $BSF_LIST \
932
       $DEMUXER_LIST \
933
       $MUXER_LIST \
934
       $PROTOCOL_LIST \
935
       $INDEV_LIST \
936
       $OUTDEV_LIST \
937

    
938
die_unknown(){
939
    echo "Unknown option \"$1\"."
940
    echo "See $0 --help for available options."
941
    exit 1
942
}
943

    
944
show_list() {
945
    suffix=_$1
946
    shift
947
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
948
    exit 0
949
}
950

    
951
for opt do
952
    optval="${opt#*=}"
953
    case "$opt" in
954
    --log)
955
    ;;
956
    --log=*) logging="$optval"
957
    ;;
958
    --prefix=*) PREFIX="$optval"
959
    ;;
960
    --libdir=*) libdir="$optval"
961
    ;;
962
    --shlibdir=*) shlibdir="$optval"
963
    ;;
964
    --incdir=*) incdir="$optval"
965
    ;;
966
    --mandir=*) mandir="$optval"
967
    ;;
968
    --source-path=*) source_path="$optval"
969
    ;;
970
    --cross-prefix=*) cross_prefix="$optval"
971
    ;;
972
    --cross-compile) enable cross_compile
973
    ;;
974
    --target-os=*) targetos="$optval"
975
    ;;
976
    --cc=*) cc="$optval"
977
    ;;
978
    --make=*) make="$optval"
979
    ;;
980
    --extra-cflags=*) add_cflags "$optval"
981
    ;;
982
    --extra-ldflags=*) add_ldflags "$optval"
983
    ;;
984
    --extra-libs=*) add_extralibs "$optval"
985
    ;;
986
    --build-suffix=*) BUILDSUF="$optval"
987
    ;;
988
    --arch=*) arch="$optval"
989
    ;;
990
    --cpu=*) cpu="$optval"
991
    ;;
992
    --enable-sunmlib) enable mlib
993
    ;;
994
    --disable-strip) disable dostrip
995
    ;;
996
    --disable-encoders) disable $ENCODER_LIST
997
    ;;
998
    --disable-decoders) disable $DECODER_LIST
999
    ;;
1000
    --disable-muxers) disable $MUXER_LIST
1001
    ;;
1002
    --disable-demuxers) disable $DEMUXER_LIST
1003
    ;;
1004
    --disable-parsers) disable $PARSER_LIST
1005
    ;;
1006
    --disable-bsfs) disable $BSF_LIST
1007
    ;;
1008
    --disable-protocols) disable $PROTOCOL_LIST
1009
    ;;
1010
    --enable-*=*|--disable-*=*)
1011
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1012
    case "$thing" in
1013
        encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
1014
        *) die_unknown "$opt" ;;
1015
    esac
1016
    ;;
1017
    --enable-?*|--disable-?*)
1018
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1019
    echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
1020
    $action $option
1021
    ;;
1022
    --list-*)
1023
        NAME="${opt#--list-}"
1024
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
1025
        NAME=${NAME%s}
1026
        eval show_list $NAME \$$(toupper $NAME)_LIST
1027
    ;;
1028
    --help|-h) show_help
1029
    ;;
1030
    *)
1031
    die_unknown $opt
1032
    ;;
1033
    esac
1034
done
1035

    
1036
case "$arch" in
1037
    i386|i486|i586|i686|i86pc|BePC)
1038
        arch="x86_32"
1039
        enable fast_unaligned
1040
    ;;
1041
    x86_64|amd64)
1042
        arch="x86_32"
1043
        enable fast_unaligned
1044
        canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1045
        if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1046
            if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1047
                arch="x86_64"
1048
                enable fast_64bit
1049
            fi
1050
        fi
1051
    ;;
1052
    # armv4l is a subset of armv[567]*l
1053
    arm|armv[4567]*l)
1054
        arch="armv4l"
1055
    ;;
1056
    alpha)
1057
        arch="alpha"
1058
        enable fast_64bit
1059
    ;;
1060
    "Power Macintosh"|ppc|powerpc)
1061
        arch="powerpc"
1062
    ;;
1063
    ppc64)
1064
        arch="powerpc"
1065
        enable fast_64bit
1066
    ;;
1067
    mips|mipsel|IP*)
1068
        arch="mips"
1069
    ;;
1070
    sun4u|sparc64)
1071
        arch="sparc64"
1072
        enable fast_64bit
1073
    ;;
1074
    sparc)
1075
        arch="sparc"
1076
    ;;
1077
    sh4)
1078
        arch="sh4"
1079
    ;;
1080
    parisc)
1081
        arch="parisc"
1082
    ;;
1083
    parisc64)
1084
        arch="parisc"
1085
        enable fast_64bit
1086
    ;;
1087
    s390|s390x)
1088
        arch="s390"
1089
    ;;
1090
    m68k)
1091
        arch="m68k"
1092
    ;;
1093
    ia64)
1094
        arch="ia64"
1095
        enable fast_64bit
1096
    ;;
1097
    bfin)
1098
        arch="bfin"
1099
    ;;
1100
    *)
1101
        arch="unknown"
1102
    ;;
1103
esac
1104

    
1105
enable $arch
1106
enabled_any x86_32 x86_64 && enable x86
1107
enabled     sparc64       && enable sparc
1108

    
1109
# OS specific
1110
case $targetos in
1111
    beos|haiku|zeta)
1112
        PREFIX="$HOME/config"
1113
        # helps building libavcodec
1114
        add_cflags "-DPIC -fomit-frame-pointer"
1115
        # 3 gcc releases known for BeOS, each with ugly bugs
1116
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1117
        case "$gcc_version" in
1118
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1119
            disable mmx
1120
            ;;
1121
          *20010315*) echo "BeBits gcc"
1122
            add_cflags "-fno-expensive-optimizations"
1123
            ;;
1124
        esac
1125
        LDCONFIG="echo ignoring ldconfig"
1126
        SHFLAGS=-nostart
1127
        # enable BeOS things
1128
        enable audio_beos
1129
        # no need for libm, but the inet stuff
1130
        # Check for BONE
1131
        # XXX: actually should check for NOT net_server
1132
        if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1133
            network_extralibs="-lbind -lsocket"
1134
        else
1135
            enable beos_netserver
1136
            network_extralibs="-lnet"
1137
        fi ;;
1138
    sunos)
1139
        FFSERVERLDFLAGS=""
1140
        SHFLAGS='-shared -Wl,-h,$@'
1141
        network_extralibs="-lsocket -lnsl"
1142
        ;;
1143
    netbsd)
1144
        oss_demuxer_extralibs="-lossaudio"
1145
        oss_muxer_extralibs="-lossaudio"
1146
        ;;
1147
    openbsd)
1148
        disable need_memalign
1149
        LIBOBJFLAGS='$(PIC)'
1150
        LDCONFIG='ldconfig -m $(SHLIBDIR)'
1151
        SHFLAGS='-shared'
1152
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1153
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1154
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1155
        oss_demuxer_extralibs="-lossaudio"
1156
        oss_muxer_extralibs="-lossaudio"
1157
        ;;
1158
    freebsd)
1159
        disable need_memalign
1160
        ;;
1161
    bsd/os)
1162
        osextralibs="-lpoll -lgnugetopt"
1163
        strip="strip -d"
1164
        ;;
1165
    darwin)
1166
        disable need_memalign
1167
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION) -Wl,-read_only_relocs,suppress'
1168
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1169
        strip="strip -x"
1170
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1171
        SLIBSUF=".dylib"
1172
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1173
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1174
        FFSERVERLDFLAGS=-Wl,-bind_at_load
1175
        ;;
1176
    mingw32*)
1177
        targetos=mingw32
1178
        shlibdir="$bindir"
1179
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1180
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1181
        if enabled swscaler; then
1182
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1183
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1184
        fi
1185
        disable ffserver
1186
        SLIBPREF=""
1187
        SLIBSUF=".dll"
1188
        EXESUF=".exe"
1189
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1190
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1191
        SLIB_EXTRA_CMD='-lib /machine:i386 /def:$(@:$(SLIBSUF)=.def)'
1192
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1193
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1194
        SHFLAGS='-shared -Wl,--output-def,$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1195
        ;;
1196
    cygwin*)
1197
        targetos=cygwin
1198
        shlibdir="$bindir"
1199
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1200
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1201
        if enabled swscaler; then
1202
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1203
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1204
        fi
1205
        EXESUF=".exe"
1206
        SLIBPREF="cyg"
1207
        SLIBSUF=".dll"
1208
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1209
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1210
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
1211
        ;;
1212
    linux)
1213
        LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1214
        enable dv1394
1215
        ;;
1216
    irix*)
1217
        targetos=irix
1218
        ranlib="echo ignoring ranlib"
1219
        ;;
1220
    *)
1221
        targetos="${targetos}-UNKNOWN"
1222
        ;;
1223
esac
1224

    
1225
add_extralibs $osextralibs
1226

    
1227
if ! disabled logging ; then
1228
    enabled logging || logfile="$logging"
1229
    echo "# $0 $@" >$logfile
1230
    set >>$logfile
1231
else
1232
    logfile=/dev/null
1233
fi
1234

    
1235
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1236
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1237

    
1238
test -n "$cross_prefix" && enable cross_compile
1239
cc="${cross_prefix}${cc}"
1240
ar="${cross_prefix}${ar}"
1241
ranlib="${cross_prefix}${ranlib}"
1242
strip="${cross_prefix}${strip}"
1243

    
1244
# we need to build at least one lib type
1245
if ! enabled_any static shared; then
1246
    cat <<EOF
1247
At least one library type must be built.
1248
Specify --enable-static to build the static libraries or --enable-shared to
1249
build the shared libraries as well. To only build the shared libraries specify
1250
--disable-static in addition to --enable-shared.
1251
EOF
1252
    exit 1;
1253
fi
1254

    
1255
disabled static && LIBNAME=""
1256

    
1257
if enabled_any libfaad libfaadbin ; then
1258
    if check_header faad.h; then
1259
        check_cc << EOF
1260
#include <faad.h>
1261
#ifndef FAAD2_VERSION
1262
ok faad1
1263
#endif
1264
int main(void) { return 0; }
1265
EOF
1266
        test $? = 0 && enable libfaad2
1267
    else
1268
        die "FAAD test failed."
1269
    fi
1270
fi
1271

    
1272

    
1273
if ! enabled gpl; then
1274
    die_gpl_disabled(){
1275
        name=$1
1276
        shift
1277
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1278
    }
1279
    die_gpl_disabled "The Postprocessing code" pp
1280
    die_gpl_disabled "liba52"                  liba52
1281
    die_gpl_disabled "libx264"                 libx264
1282
    die_gpl_disabled "libxvidcore"             libxvid
1283
    die_gpl_disabled "FAAD2"                   libfaad2
1284
    die_gpl_disabled "The X11 grabber"         x11grab
1285
    die_gpl_disabled "The software scaler"     swscaler
1286
fi
1287

    
1288
check_deps $ARCH_EXT_LIST
1289

    
1290
test -z "$need_memalign" && need_memalign="$mmx"
1291

    
1292
#Darwin CC versions
1293
if test $targetos = darwin; then
1294
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1295
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1296
    else
1297
        add_cflags "-no-cpp-precomp -pipe"
1298
        check_cflags "-force_cpusubtype_ALL"
1299
        check_cflags "-Wno-sign-compare"
1300
        disabled shared && add_cflags -mdynamic-no-pic
1301
    fi
1302
fi
1303

    
1304
disabled optimizations || add_cflags -fomit-frame-pointer
1305

    
1306
# Add processor-specific flags
1307
if test $cpu != "generic"; then
1308
    warn_altivec(){
1309
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1310
    }
1311
    case $cpu in
1312
        601|ppc601|PowerPC601)
1313
            add_cflags "-mcpu=601"
1314
            warn_altivec enabled PPC601
1315
        ;;
1316
        603*|ppc603*|PowerPC603*)
1317
            add_cflags "-mcpu=603"
1318
            warn_altivec enabled PPC603
1319
        ;;
1320
        604*|ppc604*|PowerPC604*)
1321
            add_cflags "-mcpu=604"
1322
            warn_altivec enabled PPC604
1323
        ;;
1324
        G3|g3|75*|ppc75*|PowerPC75*)
1325
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1326
            warn_altivec enabled PPC75x
1327
        ;;
1328
        G4|g4|745*|ppc745*|PowerPC745*)
1329
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1330
            warn_altivec disabled PPC745x
1331
        ;;
1332
        74*|ppc74*|PowerPC74*)
1333
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1334
            warn_altivec disabled PPC74xx
1335
        ;;
1336
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1337
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1338
            warn_altivec disabled PPC970
1339
            enable ppc64
1340
        ;;
1341
        Cell|CELL|cell)
1342
            add_cflags "-mcpu=cell"
1343
            warn_altivec disabled Cell
1344
            enable ppc64
1345
        ;;
1346
        # targets that do NOT support conditional mov (cmov)
1347
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1348
            add_cflags "-march=$cpu"
1349
            disable cmov
1350
        ;;
1351
        # targets that do support conditional mov (cmov)
1352
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1353
            add_cflags "-march=$cpu"
1354
            enable cmov
1355
            enable fast_cmov
1356
        ;;
1357
        # targets that do support conditional mov but on which it's slow
1358
        pentium4|prescott|nocona)
1359
            add_cflags "-march=$cpu"
1360
            enable cmov
1361
            disable fast_cmov
1362
        ;;
1363
        sparc64)
1364
            add_cflags "-mcpu=v9"
1365
        ;;
1366
        bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1367
            add_cflags "-mfdpic"
1368
            add_ldflags "-mfdpic"
1369
        ;;
1370
        arm*)
1371
            add_cflags "-mcpu=$cpu"
1372
        ;;
1373
        *)
1374
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1375
        ;;
1376
    esac
1377
fi
1378

    
1379
gnu_make(){
1380
    $1 --version 2>&1 | grep -q GNU
1381
}
1382

    
1383
if ! gnu_make $make; then
1384
    gnu_make gmake && make=gmake || die "GNU make not found."
1385
fi
1386

    
1387
# make sure we can execute files in $TMPDIR
1388
cat >$TMPE 2>>$logfile <<EOF
1389
#! /bin/sh
1390
EOF
1391
chmod +x $TMPE >>$logfile 2>&1
1392
if ! $TMPE >>$logfile 2>&1; then
1393
    cat <<EOF
1394
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1395
variable to another directory and make sure that $TMPDIR1 is not mounted
1396
noexec.
1397
EOF
1398
    die "Sanity test failed."
1399
fi
1400
rm $TMPE
1401

    
1402
# compiler sanity check
1403
check_exec <<EOF
1404
int main(void){
1405
    return 0;
1406
}
1407
EOF
1408
if test "$?" != 0; then
1409
    echo "$cc is unable to create an executable file."
1410
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1411
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1412
        echo "Only do this if you know what cross compiling means."
1413
    fi
1414
    die "C compiler test failed."
1415
fi
1416

    
1417
if enabled x86; then
1418
    # check whether EBP is available on x86
1419
    # As 'i' is stored on the stack, this program will crash
1420
    # if the base pointer is used to access it because the
1421
    # base pointer is cleared in the inline assembly code.
1422
    check_exec_crash <<EOF && enable ebp_available
1423
    volatile int i=0;
1424
    asm volatile (
1425
        "xorl %%ebp, %%ebp"
1426
    ::: "%ebp");
1427
    return i;
1428
EOF
1429

    
1430
    # check wether EBX is available on x86
1431
    check_asm ebx_available '"":::"%ebx"'
1432

    
1433
    # check whether binutils is new enough to compile SSSE3
1434
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1435
fi
1436

    
1437
# check for assembler specific support
1438

    
1439
if test $arch = "powerpc"; then
1440
check_cc <<EOF && enable dcbzl
1441
int main(void) {
1442
    register long zero = 0;
1443
    char data[1024];
1444
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1445
return 0;
1446
}
1447
EOF
1448
fi
1449

    
1450
# check for SIMD availability
1451

    
1452
# AltiVec flags: The FSF version of GCC differs from the Apple version
1453
if enabled altivec; then
1454
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1455
        add_cflags "-faltivec" ||
1456
        add_cflags "-maltivec -mabi=altivec"
1457

    
1458
    check_header altivec.h
1459

    
1460
    # check if our compiler supports Motorola AltiVec C API
1461
    enabled altivec_h &&
1462
        inc_altivec_h="#include <altivec.h>" ||
1463
        inc_altivec_h=
1464
    check_cc <<EOF || disable altivec
1465
$inc_altivec_h
1466
int main(void) {
1467
    vector signed int v1, v2, v3;
1468
    v1 = vec_add(v2,v3);
1469
    return 0;
1470
}
1471
EOF
1472
fi
1473

    
1474
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1475
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1476
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1477
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1478
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1479

    
1480
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1481

    
1482
# ---
1483
# big/little-endian test
1484
check_cc <<EOF || die "endian test failed"
1485
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1486
EOF
1487
grep -q BIGE $TMPO && enable bigendian
1488

    
1489
# ---
1490
# check availability of some header files
1491

    
1492
if check_func dlopen; then
1493
    ldl=
1494
elif check_func dlopen -ldl; then
1495
    ldl=-ldl
1496
fi
1497

    
1498
check_func  fork
1499
check_func  gethrtime
1500
check_func  getrusage
1501
check_func  inet_aton
1502
check_func  memalign
1503
check_func  mkstemp
1504
check_func2 windows.h GetProcessTimes
1505

    
1506
check_header byteswap.h
1507
check_header conio.h
1508
check_header dlfcn.h
1509
check_header malloc.h
1510
check_header termios.h
1511

    
1512
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1513
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1514
fi
1515

    
1516
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1517

    
1518
# ffserver uses poll(),
1519
# if it's not found we can emulate it using select().
1520
if enabled ffserver; then
1521
    check_header sys/poll.h
1522
fi
1523

    
1524
# check for some common methods of building with pthread support
1525
# do this before the optional library checks as some of them require pthreads
1526
if enabled pthreads; then
1527
    if check_func pthread_create; then
1528
        :
1529
    elif check_func pthread_create -pthread; then
1530
        add_cflags -pthread
1531
        add_ldflags -pthread
1532
    elif check_func pthread_create -pthreads; then
1533
        add_cflags -pthreads
1534
        add_ldflags -pthreads
1535
    elif ! check_lib pthread.h pthread_create -lpthread; then
1536
        die "ERROR: can't find pthreads library"
1537
    fi
1538
fi
1539

    
1540
for thread in $THREADS_LIST; do
1541
    if enabled $thread; then
1542
        test -n "$thread_type" &&
1543
            die "ERROR: Only one thread type must be selected." ||
1544
            thread_type="$thread"
1545
    fi
1546
done
1547

    
1548
check_lib math.h sin -lm
1549

    
1550
# test for lrintf in math.h
1551
check_exec <<EOF && enable lrintf || disable lrintf
1552
#define _ISOC9X_SOURCE  1
1553
#include <math.h>
1554
int main(void) { return (lrintf(3.999f) > 0)?0:1; }
1555
EOF
1556

    
1557
enabled_any libamr_nb libamr_wb && enable libamr
1558

    
1559
# these are off by default, so fail if requested and not available
1560
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1561
enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1562
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1563
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1564
enabled libdc1394  && require  libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1565
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1566
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1567
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1568
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1569
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1570
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1571
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1572
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264
1573
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1574
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1575

    
1576
# disable the native AC-3 decoder if liba52 is enabled
1577
enabled liba52 && disable ac3_decoder
1578

    
1579
_restrict=
1580
for restrict_keyword in restrict __restrict__ __restrict; do
1581
    check_cc <<EOF && _restrict=$restrict_keyword && break
1582
void foo(char * $restrict_keyword p);
1583
EOF
1584
done
1585

    
1586
test "$vhook" = "default" && vhook="$dlopen"
1587

    
1588
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1589
    disable vhook
1590
    echo
1591
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1592
    echo "Patches welcome."
1593
    echo
1594
fi
1595

    
1596
if enabled vhook; then
1597
    check_ldflags -rdynamic
1598
    check_ldflags -export-dynamic
1599
fi
1600

    
1601
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1602
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1603

    
1604
##########################################
1605
# SDL check
1606

    
1607
disable sdl_too_old
1608
disable sdl
1609
SDL_CONFIG="${cross_prefix}sdl-config"
1610
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1611
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1612
    temp_cflags $sdl_cflags
1613
    temp_extralibs `"${SDL_CONFIG}" --libs`
1614
    if check_lib SDL.h SDL_Init; then
1615
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1616
        if test "$_sdlversion" -lt 121 ; then
1617
            enable sdl_too_old
1618
        else
1619
            enable sdl
1620
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1621
#include <SDL.h>
1622
int main(void){
1623
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1624
    int w = vi->current_w;
1625
    return 0;
1626
}
1627
EOF
1628
        fi
1629
    fi
1630
    restore_flags
1631
fi
1632

    
1633
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1634

    
1635
##########################################
1636
# Network check
1637

    
1638
if enabled network; then
1639
    # Prefer arpa/inet.h over winsock2
1640
    if check_header arpa/inet.h ; then
1641
        check_func closesocket
1642
    elif check_header winsock2.h ; then
1643
        network_extralibs="-lws2_32"
1644
        check_func2 winsock2.h closesocket
1645
    fi
1646
fi
1647

    
1648
##########################################
1649
# IPv6 check
1650

    
1651
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1652
#include <sys/types.h>
1653
#include <sys/socket.h>
1654
#include <netinet/in.h>
1655
#include <netdb.h>
1656
int main(void) {
1657
    struct sockaddr_storage saddr;
1658
    struct ipv6_mreq mreq6;
1659
    getaddrinfo(0,0,0,0);
1660
    getnameinfo(0,0,0,0,0,0,0);
1661
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1662
}
1663
EOF
1664

    
1665
check_header linux/videodev.h
1666
check_header linux/videodev2.h
1667

    
1668
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1669
{ check_header dev/bktr/ioctl_meteor.h &&
1670
  check_header dev/bktr/ioctl_bt848.h; } ||
1671
{ check_header machine/ioctl_meteor.h &&
1672
  check_header machine/ioctl_bt848.h; } ||
1673
{ check_header dev/video/meteor/ioctl_meteor.h &&
1674
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1675
check_header dev/ic/bt8xx.h
1676

    
1677
check_header sys/soundcard.h
1678
check_header soundcard.h
1679

    
1680
# deal with the X11 frame grabber
1681
enabled x11grab                         &&
1682
check_header X11/Xlib.h                 &&
1683
check_header X11/extensions/XShm.h      &&
1684
check_func XOpenDisplay -lX11           &&
1685
check_func XShmCreateImage -lX11 -lXext
1686

    
1687
enabled debug && add_cflags -g
1688

    
1689
# add some useful compiler flags if supported
1690
check_cflags -Wdeclaration-after-statement
1691
check_cflags -Wall
1692
check_cflags -Wno-switch
1693
check_cflags -Wdisabled-optimization
1694
check_cflags -Wpointer-arith
1695
check_cflags -Wredundant-decls
1696
check_cflags -Wno-pointer-sign
1697
enabled extra_warnings && check_cflags -Winline
1698

    
1699
# add some linker flags
1700
check_ldflags -Wl,--warn-common
1701
check_ldflags $LDLATEFLAGS
1702

    
1703
if enabled small; then
1704
    check_cflags -Os            # not all compilers support -Os
1705
    optimizations="small"
1706
elif enabled optimizations; then
1707
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1708
        add_cflags  "-O5"
1709
        add_ldflags "-O5"
1710
    else
1711
        add_cflags "-O3"
1712
    fi
1713
fi
1714

    
1715
# PIC flags for shared library objects where they are needed
1716
if enabled shared; then
1717
    # LIBOBJFLAGS may have already been set in the OS configuration
1718
    if test -z "$LIBOBJFLAGS" ; then
1719
        case "$arch" in
1720
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1721
        esac
1722
    fi
1723
fi
1724

    
1725
if enabled gprof; then
1726
    add_cflags  "-p"
1727
    add_ldflags "-p"
1728
fi
1729

    
1730
VHOOKCFLAGS="-fPIC"
1731

    
1732
# Find out if the .align argument is a power of two or not.
1733
if test $asmalign_pot = "unknown"; then
1734
    disable asmalign_pot
1735
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1736
fi
1737

    
1738
enabled_any $DECODER_LIST      && enable decoders
1739
enabled_any $ENCODER_LIST      && enable encoders
1740
enabled_any $BSF_LIST          && enable bsfs
1741
enabled_any $DEMUXER_LIST      && enable demuxers
1742
enabled_any $MUXER_LIST        && enable muxers
1743
enabled_any $INDEV_LIST        && enable demuxers
1744
enabled_any $OUTDEV_LIST       && enable muxers
1745
enabled_any $PROTOCOL_LIST     && enable protocols
1746

    
1747
enabled_any $THREADS_LIST      && enable threads
1748

    
1749
check_deps $CONFIG_LIST       \
1750
           $HAVE_LIST         \
1751
           $DECODER_LIST      \
1752
           $ENCODER_LIST      \
1753
           $PARSER_LIST       \
1754
           $BSF_LIST          \
1755
           $DEMUXER_LIST      \
1756
           $MUXER_LIST        \
1757
           $INDEV_LIST        \
1758
           $OUTDEV_LIST       \
1759
           $PROTOCOL_LIST     \
1760

    
1761
enabled libdc1394 && append pkg_requires "libraw1394"
1762
enabled libtheora && append pkg_requires "theora"
1763
enabled libvorbis && append pkg_requires "vorbisenc"
1764

    
1765
echo "install prefix            $PREFIX"
1766
echo "source path               $source_path"
1767
echo "C compiler                $cc"
1768
echo "make                      $make"
1769
echo ".align is power-of-two    $asmalign_pot"
1770
echo "ARCH                      $arch ($cpu)"
1771
if test "$BUILDSUF" != ""; then
1772
    echo "build suffix              $BUILDSUF"
1773
fi
1774
echo "big-endian                ${bigendian-no}"
1775
if test $arch = "x86_32" -o $arch = "x86_64"; then
1776
    echo "MMX enabled               ${mmx-no}"
1777
    echo "CMOV enabled              ${cmov-no}"
1778
    echo "CMOV is fast              ${fast_cmov-no}"
1779
    echo "EBX available             ${ebx_available-no}"
1780
    echo "EBP available             ${ebp_available-no}"
1781
fi
1782
if test $arch = "armv4l"; then
1783
    echo "ARMv5TE enabled           ${armv5te-no}"
1784
    echo "ARMv6 enabled             ${armv6-no}"
1785
    echo "IWMMXT enabled            ${iwmmxt-no}"
1786
fi
1787
if test $arch = "mips"; then
1788
    echo "MMI enabled               ${mmi-no}"
1789
fi
1790
if test $arch = "powerpc"; then
1791
    echo "AltiVec enabled           ${altivec-no}"
1792
    echo "dcbzl available           ${dcbzl-no}"
1793
fi
1794
echo "gprof enabled             ${gprof-no}"
1795
echo "debug symbols             ${debug-no}"
1796
echo "strip symbols             ${dostrip-no}"
1797
echo "optimizations             ${optimizations-no}"
1798
echo "static                    ${static-no}"
1799
echo "shared                    ${shared-no}"
1800
echo "postprocessing support    ${pp-no}"
1801
echo "software scaler enabled   ${swscaler-no}"
1802
echo "video hooking             ${vhook-no}"
1803
if enabled vhook; then
1804
    echo "Imlib2 support            ${imlib2-no}"
1805
    echo "FreeType support          ${freetype2-no}"
1806
fi
1807
echo "network support           ${network-no}"
1808
if enabled network; then
1809
    echo "IPv6 support              ${ipv6-no}"
1810
fi
1811
echo "threading support         ${thread_type-no}"
1812
echo "SDL support               ${sdl-no}"
1813
if enabled sdl_too_old; then
1814
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1815
fi
1816
echo "Sun medialib support      ${mlib-no}"
1817
echo "AVISynth enabled          ${avisynth-no}"
1818
echo "liba52 support            ${liba52-no}"
1819
echo "liba52 dlopened           ${liba52bin-no}"
1820
echo "libamr-nb support         ${libamr_nb-no}"
1821
echo "libamr-wb support         ${libamr_wb-no}"
1822
echo "libdc1394 support         ${libdc1394-no}"
1823
echo "libfaac enabled           ${libfaac-no}"
1824
echo "libfaad enabled           ${libfaad-no}"
1825
echo "libfaad dlopened          ${libfaadbin-no}"
1826
echo "libgsm enabled            ${libgsm-no}"
1827
echo "libmp3lame enabled        ${libmp3lame-no}"
1828
echo "libnut enabled            ${libnut-no}"
1829
echo "libtheora enabled         ${libtheora-no}"
1830
echo "libvorbis enabled         ${libvorbis-no}"
1831
echo "x264 enabled              ${libx264-no}"
1832
echo "XviD enabled              ${libxvid-no}"
1833
echo "zlib enabled              ${zlib-no}"
1834
enabled gpl &&
1835
    echo "License: GPL" ||
1836
    echo "License: LGPL"
1837

    
1838
for type in decoder encoder parser demuxer muxer protocol bsf; do
1839
    echo "Enabled ${type}s:"
1840
    ucname="\$`toupper $type`_LIST"
1841
    list="`eval echo $ucname`"
1842
    partlist=""
1843
    for part in $list; do
1844
        enabled $part && partlist="$partlist $part"
1845
    done
1846
    partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
1847
    echo $partlist
1848
done
1849

    
1850
echo "Creating config.mak and config.h..."
1851

    
1852
echo "# Automatically generated by configure - do not modify!" > config.mak
1853
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1854
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1855
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1856
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1857

    
1858
echo "PREFIX=$PREFIX" >> config.mak
1859
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1860
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1861
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1862
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1863
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1864
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1865
echo "MAKE=$make" >> config.mak
1866
echo "CC=$cc" >> config.mak
1867
echo "AR=$ar" >> config.mak
1868
echo "RANLIB=$ranlib" >> config.mak
1869
echo "LDCONFIG=$LDCONFIG" >> config.mak
1870
echo "LN_S=$ln_s" >> config.mak
1871
enabled dostrip &&
1872
    echo "STRIP=$strip" >> config.mak ||
1873
    echo "STRIP=echo ignoring strip" >> config.mak
1874

    
1875
echo "OPTFLAGS=$CFLAGS" >> config.mak
1876
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1877
echo "LDFLAGS=$LDFLAGS" >> config.mak
1878
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1879
echo "SHFLAGS=$SHFLAGS" >> config.mak
1880
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1881
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1882
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1883
echo "BUILD_STATIC=$static" >> config.mak
1884
echo "BUILDSUF=$BUILDSUF" >> config.mak
1885
echo "FULLNAME=$FULLNAME" >> config.mak
1886
echo "LIBPREF=$LIBPREF" >> config.mak
1887
echo "LIBSUF=$LIBSUF" >> config.mak
1888
echo "LIBNAME=$LIBNAME" >> config.mak
1889
echo "SLIBPREF=$SLIBPREF" >> config.mak
1890
echo "SLIBSUF=$SLIBSUF" >> config.mak
1891
echo "EXESUF=$EXESUF" >> config.mak
1892

    
1893
if enabled bigendian; then
1894
    echo "WORDS_BIGENDIAN=yes" >> config.mak
1895
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1896
fi
1897
if enabled mmx; then
1898
    echo "#define __CPU__ 586" >> $TMPH
1899
fi
1900

    
1901
if enabled sdl; then
1902
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1903
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1904
fi
1905
if enabled texi2html; then
1906
    echo "BUILD_DOC=yes" >> config.mak
1907
fi
1908

    
1909
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1910
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1911
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1912
lavd_version=`grep '#define LIBAVDEVICE_VERSION ' "$source_path/libavdevice/avdevice.h" | sed 's/[^0-9\.]//g'`
1913
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1914
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1915

    
1916

    
1917

    
1918
if enabled shared; then
1919
    echo "BUILD_SHARED=yes" >> config.mak
1920
    echo "PIC=-fPIC -DPIC" >> config.mak
1921
    echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1922
    echo "SPPVERSION=$pp_version" >> config.mak
1923
    echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1924
    echo "LAVCVERSION=$lavc_version" >> config.mak
1925
    echo "LAVDMAJOR=${lavd_version%%.*}" >> config.mak
1926
    echo "LAVDVERSION=$lavd_version" >> config.mak
1927
    echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1928
    echo "LAVFVERSION=$lavf_version" >> config.mak
1929
    echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1930
    echo "LAVUVERSION=$lavu_version" >> config.mak
1931
    echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1932
    echo "SWSVERSION=$sws_version" >> config.mak
1933
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
1934
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1935
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1936
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1937
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1938
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
1939
fi
1940
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1941
echo "EXTRALIBS=$extralibs" >> config.mak
1942

    
1943
print_config ARCH_   $TMPH config.mak $ARCH_LIST
1944
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1945
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
1946
                                      $DECODER_LIST      \
1947
                                      $ENCODER_LIST      \
1948
                                      $PARSER_LIST       \
1949
                                      $BSF_LIST          \
1950
                                      $DEMUXER_LIST      \
1951
                                      $MUXER_LIST        \
1952
                                      $PROTOCOL_LIST     \
1953
                                      $INDEV_LIST        \
1954
                                      $OUTDEV_LIST       \
1955

    
1956
echo "#define restrict $_restrict" >> $TMPH
1957

    
1958
if enabled small; then
1959
    echo "#define av_always_inline"  >> $TMPH
1960
fi
1961

    
1962
echo "SRC_PATH=\"$source_path\"" >> config.mak
1963
echo "SRC_PATH_BARE=$source_path" >> config.mak
1964
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1965

    
1966
# Apparently it's not possible to portably echo a backslash.
1967
enabled asmalign_pot &&
1968
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
1969
    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1970

    
1971

    
1972
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
1973

    
1974
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1975
cmp -s $TMPH config.h &&
1976
    echo "config.h is unchanged" ||
1977
    mv -f $TMPH config.h
1978

    
1979
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1980

    
1981
# build tree in object directory if source path is different from current one
1982
if enabled source_path_used; then
1983
    DIRS="\
1984
        doc               \
1985
        libavcodec        \
1986
        libavcodec/alpha  \
1987
        libavcodec/armv4l \
1988
        libavcodec/bfin   \
1989
        libavcodec/i386   \
1990
        libavcodec/mlib   \
1991
        libavcodec/ppc    \
1992
        libavcodec/sh4    \
1993
        libavcodec/sparc  \
1994
        libavformat       \
1995
        libavutil         \
1996
        libpostproc       \
1997
        libswscale        \
1998
        tests             \
1999
        tools             \
2000
        vhook             \
2001
        "
2002
    FILES="\
2003
        Makefile             \
2004
        common.mak           \
2005
        doc/texi2pod.pl      \
2006
        libavcodec/Makefile  \
2007
        libavformat/Makefile \
2008
        libavutil/Makefile   \
2009
        libpostproc/Makefile \
2010
        libswscale/Makefile  \
2011
        "
2012
    for dir in $DIRS ; do
2013
        mkdir -p $dir
2014
    done
2015
    for f in $FILES ; do
2016
        $ln_s "$source_path/$f" $f
2017
    done
2018
fi
2019

    
2020

    
2021
# build pkg-config files
2022
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2023

    
2024
pkgconfig_generate(){
2025
name=$1
2026
comment=$2
2027
version=$3
2028
libs=$4
2029
requires=$5
2030
include=$6
2031
cat <<EOF >$name.pc
2032
prefix=$PREFIX
2033
exec_prefix=\${prefix}
2034
libdir=\${exec_prefix}/lib
2035
includedir=\${prefix}/include
2036

    
2037
Name: $name
2038
Description: $comment
2039
Version: $version
2040
Requires: $requires
2041
Conflicts:
2042
Libs: -L\${libdir} $libs
2043
Cflags: -I\${includedir} -I\${includedir}/$include
2044
EOF
2045
}
2046

    
2047
pkgconfig_generate_uninstalled(){
2048
name=$1
2049
shortname=${name#lib}
2050
comment=$2
2051
version=$3
2052
libs=$4
2053
requires=$5
2054
cat <<EOF >$name-uninstalled.pc
2055
prefix=
2056
exec_prefix=
2057
libdir=\${pcfiledir}/$name
2058
includedir=\${pcfiledir}/$name
2059

    
2060
Name: $name
2061
Description: $comment
2062
Version: $version
2063
Requires: $requires
2064
Conflicts:
2065
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2066
Cflags: -I\${includedir}
2067
EOF
2068
}
2069

    
2070
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2071
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2072

    
2073
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2074
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2075

    
2076
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2077
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2078

    
2079
pkgconfig_generate libavdevice "FFmpeg device handling library" "$lavd_version" "-lavdevice $extralibs" "$pkg_requires libavformat = $lavf_version" ffmpeg
2080
pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$lavd_version" "$extralibs" "$pkg_requires libavformat = $lavf_version"
2081
if enabled pp; then
2082
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2083
    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2084
fi
2085

    
2086
if enabled swscaler; then
2087
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2088
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2089
else
2090
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2091
    pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2092
    apply libswscale.pc sed s/^Libs:.*$/Libs:/
2093
    apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2094
fi