Statistics
| Branch: | Revision:

ffmpeg / configure @ e5af4a11

History | View | Annotate | Download (57.1 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
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
924

    
925
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
926
enable $ARCH_EXT_LIST
927

    
928
die_unknown(){
929
    echo "Unknown option \"$1\"."
930
    echo "See $0 --help for available options."
931
    exit 1
932
}
933

    
934
show_list() {
935
    suffix=_$1
936
    shift
937
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
938
    exit 0
939
}
940

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

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

    
1095
enable $arch
1096
enabled_any x86_32 x86_64 && enable x86
1097
enabled     sparc64       && enable sparc
1098

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

    
1215
add_extralibs $osextralibs
1216

    
1217
if ! disabled logging ; then
1218
    enabled logging || logfile="$logging"
1219
    echo "# $0 $@" >$logfile
1220
    set >>$logfile
1221
else
1222
    logfile=/dev/null
1223
fi
1224

    
1225
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1226
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1227

    
1228
test -n "$cross_prefix" && enable cross_compile
1229
cc="${cross_prefix}${cc}"
1230
ar="${cross_prefix}${ar}"
1231
ranlib="${cross_prefix}${ranlib}"
1232
strip="${cross_prefix}${strip}"
1233

    
1234
# we need to build at least one lib type
1235
if ! enabled_any static shared; then
1236
    cat <<EOF
1237
At least one library type must be built.
1238
Specify --enable-static to build the static libraries or --enable-shared to
1239
build the shared libraries as well. To only build the shared libraries specify
1240
--disable-static in addition to --enable-shared.
1241
EOF
1242
    exit 1;
1243
fi
1244

    
1245
disabled static && LIBNAME=""
1246

    
1247
if enabled_any libfaad libfaadbin ; then
1248
    if check_header faad.h; then
1249
        check_cc << EOF
1250
#include <faad.h>
1251
#ifndef FAAD2_VERSION
1252
ok faad1
1253
#endif
1254
int main(void) { return 0; }
1255
EOF
1256
        test $? = 0 && enable libfaad2
1257
    else
1258
        die "FAAD test failed."
1259
    fi
1260
fi
1261

    
1262

    
1263
if ! enabled gpl; then
1264
    die_gpl_disabled(){
1265
        name=$1
1266
        shift
1267
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1268
    }
1269
    die_gpl_disabled "The Postprocessing code" pp
1270
    die_gpl_disabled "liba52"                  liba52
1271
    die_gpl_disabled "libx264"                 libx264
1272
    die_gpl_disabled "libxvidcore"             libxvid
1273
    die_gpl_disabled "FAAD2"                   libfaad2
1274
    die_gpl_disabled "The X11 grabber"         x11grab
1275
    die_gpl_disabled "The software scaler"     swscaler
1276
fi
1277

    
1278
check_deps $ARCH_EXT_LIST
1279

    
1280
test -z "$need_memalign" && need_memalign="$mmx"
1281

    
1282
#Darwin CC versions
1283
if test $targetos = darwin; then
1284
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1285
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1286
    else
1287
        add_cflags "-no-cpp-precomp -pipe"
1288
        check_cflags "-force_cpusubtype_ALL"
1289
        check_cflags "-Wno-sign-compare"
1290
        disabled shared && add_cflags -mdynamic-no-pic
1291
    fi
1292
fi
1293

    
1294
disabled optimizations || add_cflags -fomit-frame-pointer
1295

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

    
1369
gnu_make(){
1370
    $1 --version 2>&1 | grep -q GNU
1371
}
1372

    
1373
if ! gnu_make $make; then
1374
    gnu_make gmake && make=gmake || die "GNU make not found."
1375
fi
1376

    
1377
# make sure we can execute files in $TMPDIR
1378
cat >$TMPE 2>>$logfile <<EOF
1379
#! /bin/sh
1380
EOF
1381
chmod +x $TMPE >>$logfile 2>&1
1382
if ! $TMPE >>$logfile 2>&1; then
1383
    cat <<EOF
1384
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1385
variable to another directory and make sure that $TMPDIR1 is not mounted
1386
noexec.
1387
EOF
1388
    die "Sanity test failed."
1389
fi
1390
rm $TMPE
1391

    
1392
# compiler sanity check
1393
check_exec <<EOF
1394
int main(void){
1395
    return 0;
1396
}
1397
EOF
1398
if test "$?" != 0; then
1399
    echo "$cc is unable to create an executable file."
1400
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1401
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1402
        echo "Only do this if you know what cross compiling means."
1403
    fi
1404
    die "C compiler test failed."
1405
fi
1406

    
1407
if enabled x86; then
1408
    # check whether EBP is available on x86
1409
    # As 'i' is stored on the stack, this program will crash
1410
    # if the base pointer is used to access it because the
1411
    # base pointer is cleared in the inline assembly code.
1412
    check_exec_crash <<EOF && enable ebp_available
1413
    volatile int i=0;
1414
    asm volatile (
1415
        "xorl %%ebp, %%ebp"
1416
    ::: "%ebp");
1417
    return i;
1418
EOF
1419

    
1420
    # check wether EBX is available on x86
1421
    check_asm ebx_available '"":::"%ebx"'
1422

    
1423
    # check whether binutils is new enough to compile SSSE3
1424
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1425
fi
1426

    
1427
# check for assembler specific support
1428

    
1429
if test $arch = "powerpc"; then
1430
check_cc <<EOF && enable dcbzl
1431
int main(void) {
1432
    register long zero = 0;
1433
    char data[1024];
1434
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1435
return 0;
1436
}
1437
EOF
1438
fi
1439

    
1440
# check for SIMD availability
1441

    
1442
# AltiVec flags: The FSF version of GCC differs from the Apple version
1443
if enabled altivec; then
1444
    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1445
        add_cflags "-faltivec" ||
1446
        add_cflags "-maltivec -mabi=altivec"
1447

    
1448
    check_header altivec.h
1449

    
1450
    # check if our compiler supports Motorola AltiVec C API
1451
    enabled altivec_h &&
1452
        inc_altivec_h="#include <altivec.h>" ||
1453
        inc_altivec_h=
1454
    check_cc <<EOF || disable altivec
1455
$inc_altivec_h
1456
int main(void) {
1457
    vector signed int v1, v2, v3;
1458
    v1 = vec_add(v2,v3);
1459
    return 0;
1460
}
1461
EOF
1462
fi
1463

    
1464
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1465
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1466
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1467
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1468
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1469

    
1470
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1471

    
1472
# ---
1473
# big/little-endian test
1474
check_cc <<EOF || die "endian test failed"
1475
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1476
EOF
1477
grep -q BIGE $TMPO && enable bigendian
1478

    
1479
# ---
1480
# check availability of some header files
1481

    
1482
if check_func dlopen; then
1483
    ldl=
1484
elif check_func dlopen -ldl; then
1485
    ldl=-ldl
1486
fi
1487

    
1488
check_func fork
1489
check_func gethrtime
1490
check_func getrusage
1491
check_func inet_aton
1492
check_func memalign
1493
check_func mkstemp
1494
check_func2 windows.h GetProcessTimes
1495

    
1496
check_header byteswap.h
1497
check_header conio.h
1498
check_header dlfcn.h
1499
check_header malloc.h
1500
check_header termios.h
1501

    
1502
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1503
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1504
fi
1505

    
1506
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1507

    
1508
# ffserver uses poll(),
1509
# if it's not found we can emulate it using select().
1510
if enabled ffserver; then
1511
    check_header sys/poll.h
1512
fi
1513

    
1514
# check for some common methods of building with pthread support
1515
# do this before the optional library checks as some of them require pthreads
1516
if enabled pthreads; then
1517
    if check_func pthread_create; then
1518
        :
1519
    elif check_func pthread_create -pthread; then
1520
        add_cflags -pthread
1521
        add_ldflags -pthread
1522
    elif check_func pthread_create -pthreads; then
1523
        add_cflags -pthreads
1524
        add_ldflags -pthreads
1525
    elif ! check_lib pthread.h pthread_create -lpthread; then
1526
        die "ERROR: can't find pthreads library"
1527
    fi
1528
fi
1529

    
1530
for thread in $THREADS_LIST; do
1531
    if enabled $thread; then
1532
        test -n "$thread_type" &&
1533
            die "ERROR: Only one thread type must be selected." ||
1534
            thread_type="$thread"
1535
    fi
1536
done
1537

    
1538
check_lib math.h sin -lm
1539

    
1540
# test for lrintf in math.h
1541
check_exec <<EOF && enable lrintf || disable lrintf
1542
#define _ISOC9X_SOURCE  1
1543
#include <math.h>
1544
int main(void) { return (lrintf(3.999f) > 0)?0:1; }
1545
EOF
1546

    
1547
enabled_any libamr_nb libamr_wb && enable libamr
1548

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

    
1566
# disable the native AC-3 decoder if liba52 is enabled
1567
enabled liba52 && disable ac3_decoder
1568

    
1569
_restrict=
1570
for restrict_keyword in restrict __restrict__ __restrict; do
1571
    check_cc <<EOF && _restrict=$restrict_keyword && break
1572
void foo(char * $restrict_keyword p);
1573
EOF
1574
done
1575

    
1576
test "$vhook" = "default" && vhook="$dlopen"
1577

    
1578
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1579
    disable vhook
1580
    echo
1581
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1582
    echo "Patches welcome."
1583
    echo
1584
fi
1585

    
1586
if enabled vhook; then
1587
    check_ldflags -rdynamic
1588
    check_ldflags -export-dynamic
1589
fi
1590

    
1591
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1592
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1593

    
1594
##########################################
1595
# SDL check
1596

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

    
1623
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1624

    
1625
##########################################
1626
# Network check
1627

    
1628
if enabled network; then
1629
    # Prefer arpa/inet.h over winsock2
1630
    if check_header arpa/inet.h ; then
1631
        check_func closesocket
1632
    elif check_header winsock2.h ; then
1633
        network_extralibs="-lws2_32"
1634
        check_func2 winsock2.h closesocket
1635
    fi
1636
fi
1637

    
1638
##########################################
1639
# IPv6 check
1640

    
1641
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1642
#include <sys/types.h>
1643
#include <sys/socket.h>
1644
#include <netinet/in.h>
1645
#include <netdb.h>
1646
int main(void) {
1647
  struct sockaddr_storage saddr;
1648
  struct ipv6_mreq mreq6;
1649
  getaddrinfo(0,0,0,0);
1650
  getnameinfo(0,0,0,0,0,0,0);
1651
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1652
}
1653
EOF
1654

    
1655
check_header linux/videodev.h
1656
check_header linux/videodev2.h
1657

    
1658
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1659
{ check_header dev/bktr/ioctl_meteor.h &&
1660
  check_header dev/bktr/ioctl_bt848.h; } ||
1661
{ check_header machine/ioctl_meteor.h &&
1662
  check_header machine/ioctl_bt848.h; } ||
1663
{ check_header dev/video/meteor/ioctl_meteor.h &&
1664
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1665
check_header dev/ic/bt8xx.h
1666

    
1667
check_header sys/soundcard.h
1668
check_header soundcard.h
1669

    
1670
# Deal with the x11 frame grabber
1671
enabled x11grab                         &&
1672
check_header X11/Xlib.h                 &&
1673
check_header X11/extensions/XShm.h      &&
1674
check_func XOpenDisplay -lX11           &&
1675
check_func XShmCreateImage -lX11 -lXext
1676

    
1677
enabled debug && add_cflags -g
1678

    
1679
# add some useful compiler flags if supported
1680
check_cflags -Wdeclaration-after-statement
1681
check_cflags -Wall
1682
check_cflags -Wno-switch
1683
check_cflags -Wdisabled-optimization
1684
check_cflags -Wpointer-arith
1685
check_cflags -Wredundant-decls
1686
check_cflags -Wno-pointer-sign
1687
enabled extra_warnings && check_cflags -Winline
1688

    
1689
# add some linker flags
1690
check_ldflags -Wl,--warn-common
1691
check_ldflags $LDLATEFLAGS
1692

    
1693
if enabled small; then
1694
    check_cflags -Os            # not all compilers support -Os
1695
    optimizations="small"
1696
elif enabled optimizations; then
1697
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1698
        add_cflags  "-O5"
1699
        add_ldflags "-O5"
1700
    else
1701
        add_cflags "-O3"
1702
    fi
1703
fi
1704

    
1705
# PIC flags for shared library objects where they are needed
1706
if enabled shared; then
1707
    # LIBOBJFLAGS may have already been set in the OS configuration
1708
    if test -z "$LIBOBJFLAGS" ; then
1709
        case "$arch" in
1710
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1711
        esac
1712
    fi
1713
fi
1714

    
1715
if enabled gprof; then
1716
    add_cflags  "-p"
1717
    add_ldflags "-p"
1718
fi
1719

    
1720
VHOOKCFLAGS="-fPIC"
1721

    
1722
# Find out if the .align argument is a power of two or not.
1723
if test $asmalign_pot = "unknown"; then
1724
    disable asmalign_pot
1725
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1726
fi
1727

    
1728
enabled_any $ENCODER_LIST  && enable encoders
1729
enabled_any $DECODER_LIST  && enable decoders
1730
enabled_any $MUXER_LIST    && enable muxers
1731
enabled_any $DEMUXER_LIST  && enable demuxers
1732
enabled_any $PROTOCOL_LIST && enable protocols
1733
enabled_any $BSF_LIST      && enable bsfs
1734

    
1735
enabled_any $THREADS_LIST  && enable threads
1736

    
1737
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1738
    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1739

    
1740
enabled libdc1394 && append pkg_requires "libraw1394"
1741
enabled libtheora && append pkg_requires "theora"
1742
enabled libvorbis && append pkg_requires "vorbisenc"
1743

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

    
1817
for type in decoder encoder parser demuxer muxer protocol bsf; do
1818
    echo "Enabled ${type}s:"
1819
    ucname="\$`toupper $type`_LIST"
1820
    list="`eval echo $ucname`"
1821
    partlist=""
1822
    for part in $list; do
1823
        enabled $part && partlist="$partlist $part"
1824
    done
1825
    partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
1826
    echo $partlist
1827
done
1828

    
1829
echo "Creating config.mak and config.h..."
1830

    
1831
echo "# Automatically generated by configure - do not modify!" > config.mak
1832
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1833
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1834
echo "#define FFMPEG_CONFIG_H" >> $TMPH
1835
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1836

    
1837
echo "PREFIX=$PREFIX" >> config.mak
1838
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1839
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1840
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1841
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1842
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1843
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1844
echo "MAKE=$make" >> config.mak
1845
echo "CC=$cc" >> config.mak
1846
echo "AR=$ar" >> config.mak
1847
echo "RANLIB=$ranlib" >> config.mak
1848
echo "LDCONFIG=$LDCONFIG" >> config.mak
1849
echo "LN_S=$ln_s" >> config.mak
1850
enabled dostrip &&
1851
    echo "STRIP=$strip" >> config.mak ||
1852
    echo "STRIP=echo ignoring strip" >> config.mak
1853

    
1854
echo "OPTFLAGS=$CFLAGS" >> config.mak
1855
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1856
echo "LDFLAGS=$LDFLAGS" >> config.mak
1857
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1858
echo "SHFLAGS=$SHFLAGS" >> config.mak
1859
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1860
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1861
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1862
echo "BUILD_STATIC=$static" >> config.mak
1863
echo "BUILDSUF=$BUILDSUF" >> config.mak
1864
echo "FULLNAME=$FULLNAME" >> config.mak
1865
echo "LIBPREF=$LIBPREF" >> config.mak
1866
echo "LIBSUF=$LIBSUF" >> config.mak
1867
echo "LIBNAME=$LIBNAME" >> config.mak
1868
echo "SLIBPREF=$SLIBPREF" >> config.mak
1869
echo "SLIBSUF=$SLIBSUF" >> config.mak
1870
echo "EXESUF=$EXESUF" >> config.mak
1871

    
1872
if enabled bigendian; then
1873
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1874
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1875
fi
1876
if enabled mmx; then
1877
  echo "#define __CPU__ 586" >> $TMPH
1878
fi
1879

    
1880
if enabled sdl; then
1881
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1882
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1883
fi
1884
if enabled texi2html; then
1885
  echo "BUILD_DOC=yes" >> config.mak
1886
fi
1887

    
1888
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1889
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1890
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1891
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1892
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1893

    
1894

    
1895

    
1896
if enabled shared; then
1897
  echo "BUILD_SHARED=yes" >> config.mak
1898
  echo "PIC=-fPIC -DPIC" >> config.mak
1899
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1900
  echo "SPPVERSION=$pp_version" >> config.mak
1901
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1902
  echo "LAVCVERSION=$lavc_version" >> config.mak
1903
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1904
  echo "LAVFVERSION=$lavf_version" >> config.mak
1905
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1906
  echo "LAVUVERSION=$lavu_version" >> config.mak
1907
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1908
  echo "SWSVERSION=$sws_version" >> config.mak
1909
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1910
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1911
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1912
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1913
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1914
  echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
1915
fi
1916
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1917
echo "EXTRALIBS=$extralibs" >> config.mak
1918

    
1919
print_config ARCH_   $TMPH config.mak $ARCH_LIST
1920
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1921
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1922
                                      $DECODER_LIST  \
1923
                                      $ENCODER_LIST  \
1924
                                      $PARSER_LIST   \
1925
                                      $BSF_LIST      \
1926
                                      $DEMUXER_LIST  \
1927
                                      $MUXER_LIST    \
1928
                                      $PROTOCOL_LIST \
1929

    
1930
echo "#define restrict $_restrict" >> $TMPH
1931

    
1932
if enabled small; then
1933
  echo "#define av_always_inline"  >> $TMPH
1934
fi
1935

    
1936
echo "SRC_PATH=\"$source_path\"" >> config.mak
1937
echo "SRC_PATH_BARE=$source_path" >> config.mak
1938
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1939

    
1940
# Apparently it's not possible to portably echo a backslash.
1941
enabled asmalign_pot &&
1942
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
1943
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1944

    
1945

    
1946
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
1947

    
1948
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1949
cmp -s $TMPH config.h &&
1950
    echo "config.h is unchanged" ||
1951
    mv -f $TMPH config.h
1952

    
1953
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1954

    
1955
# build tree in object directory if source path is different from current one
1956
if enabled source_path_used; then
1957
    DIRS="\
1958
         doc \
1959
         libavcodec \
1960
         libavcodec/alpha \
1961
         libavcodec/armv4l \
1962
         libavcodec/bfin \
1963
         libavcodec/i386 \
1964
         libavcodec/mlib \
1965
         libavcodec/ppc \
1966
         libavcodec/sh4 \
1967
         libavcodec/sparc \
1968
         libavformat \
1969
         libavutil \
1970
         libpostproc \
1971
         libswscale \
1972
         tests \
1973
         tools \
1974
         vhook \
1975
         "
1976
    FILES="\
1977
          Makefile \
1978
          common.mak \
1979
          doc/texi2pod.pl \
1980
          libavcodec/Makefile \
1981
          libavformat/Makefile \
1982
          libavutil/Makefile \
1983
          libpostproc/Makefile \
1984
          libswscale/Makefile \
1985
          "
1986
    for dir in $DIRS ; do
1987
            mkdir -p $dir
1988
    done
1989
    for f in $FILES ; do
1990
        $ln_s "$source_path/$f" $f
1991
    done
1992
fi
1993

    
1994

    
1995
# build pkg-config files
1996
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
1997

    
1998
pkgconfig_generate(){
1999
name=$1
2000
comment=$2
2001
version=$3
2002
libs=$4
2003
requires=$5
2004
include=$6
2005
cat <<EOF >$name.pc
2006
prefix=$PREFIX
2007
exec_prefix=\${prefix}
2008
libdir=\${exec_prefix}/lib
2009
includedir=\${prefix}/include
2010

    
2011
Name: $name
2012
Description: $comment
2013
Version: $version
2014
Requires: $requires
2015
Conflicts:
2016
Libs: -L\${libdir} $libs
2017
Cflags: -I\${includedir} -I\${includedir}/$include
2018
EOF
2019
}
2020

    
2021
pkgconfig_generate_uninstalled(){
2022
name=$1
2023
shortname=${name#lib}
2024
comment=$2
2025
version=$3
2026
libs=$4
2027
requires=$5
2028
cat <<EOF >$name-uninstalled.pc
2029
prefix=
2030
exec_prefix=
2031
libdir=\${pcfiledir}/$name
2032
includedir=\${pcfiledir}/$name
2033

    
2034
Name: $name
2035
Description: $comment
2036
Version: $version
2037
Requires: $requires
2038
Conflicts:
2039
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2040
Cflags: -I\${includedir}
2041
EOF
2042
}
2043

    
2044
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2045
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2046

    
2047
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2048
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2049

    
2050
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2051
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2052

    
2053
if enabled pp; then
2054
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2055
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2056
fi
2057

    
2058
if enabled swscaler; then
2059
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2060
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2061
else
2062
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2063
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2064
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2065
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2066
fi