Statistics
| Branch: | Revision:

ffmpeg / configure @ bf0c4afa

History | View | Annotate | Download (57.2 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-libogg          enable Ogg muxing via libogg [default=no]"
95
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
96
  echo "  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,"
97
  echo "                           native implementations exist [default=no]"
98
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
99
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
100
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
101
  echo ""
102
  echo "Advanced options (experts only):"
103
  echo "  --source-path=PATH       path to source code [$source_path]"
104
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
105
  echo "  --cross-compile          assume a cross-compiler is used"
106
  echo "  --target-os=OS           compiler targets OS [$targetos]"
107
  echo "  --cc=CC                  use C compiler CC [$cc]"
108
  echo "  --make=MAKE              use specified make [$make]"
109
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
110
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
111
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
112
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
113
  echo "  --arch=ARCH              select architecture  [$arch]"
114
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
115
  echo "                           instruction selection, may crash on older CPUs)"
116
  echo "  --enable-powerpc-perf    enable performance report on PPC"
117
  echo "                           (requires enabling PMC)"
118
  echo "  --disable-mmx            disable MMX usage"
119
  echo "  --disable-armv5te        disable armv5te usage"
120
  echo "  --disable-armv6          disable armv6 usage"
121
  echo "  --disable-iwmmxt         disable iwmmxt usage"
122
  echo "  --disable-altivec        disable AltiVec usage"
123
  echo "  --disable-network        disable network support [default=no]"
124
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
125
  echo "  --disable-zlib           disable zlib [default=no]"
126
  echo "  --disable-vhook          disable video hooking support"
127
  echo "  --disable-debug          disable debugging symbols"
128
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
129
  echo "                           MPEG audio decoding [default=no]"
130
  echo "  --enable-gray            enable full grayscale support (slower color)"
131
  echo "  --disable-ffmpeg         disable ffmpeg build"
132
  echo "  --disable-ffserver       disable ffserver build"
133
  echo "  --disable-ffplay         disable ffplay build"
134
  echo "  --enable-small           optimize for size instead of speed"
135
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
136
  echo "  --disable-encoder=NAME   disables encoder NAME"
137
  echo "  --enable-encoder=NAME    enables encoder NAME"
138
  echo "  --disable-decoder=NAME   disables decoder NAME"
139
  echo "  --enable-decoder=NAME    enables decoder NAME"
140
  echo "  --disable-encoders       disables all encoders"
141
  echo "  --disable-decoders       disables all decoders"
142
  echo "  --disable-muxer=NAME     disables muxer NAME"
143
  echo "  --enable-muxer=NAME      enables muxer NAME"
144
  echo "  --disable-muxers         disables all muxers"
145
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
146
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
147
  echo "  --disable-demuxers       disables all demuxers"
148
  echo "  --enable-parser=NAME     enables parser NAME"
149
  echo "  --disable-parser=NAME    disables parser NAME"
150
  echo "  --disable-parsers        disables all parsers"
151
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
152
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
153
  echo "  --disable-bsfs           disables all bitstream filters"
154
  echo "  --enable-protocol=NAME   enables protocol NAME"
155
  echo "  --disable-protocol=NAME  disables protocol NAME"
156
  echo "  --disable-protocols      disables all protocols"
157
  echo "  --list-decoders          show all available decoders"
158
  echo "  --list-encoders          show all available encoders"
159
  echo "  --list-muxers            show all available muxers"
160
  echo "  --list-demuxers          show all available demuxers"
161
  echo "  --list-parsers           show all available parsers"
162
  echo "  --list-protocols         show all available protocols"
163
  echo "  --list-bsfs              show all available bitstream filters"
164
  echo
165
  echo "Developer options (useful when working on FFmpeg itself):"
166
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
167
  echo "  --disable-optimizations  disable compiler optimizations"
168
  echo "  --enable-extra-warnings  enable more compiler warnings"
169
  echo "  --disable-strip          disable stripping of executables and shared libraries"
170
  echo ""
171
  echo "NOTE: Object files are built at the place where configure is launched."
172
  exit 1
173
}
174

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
640
THREADS_LIST='
641
    beosthreads
642
    pthreads
643
    w32threads
644
'
645

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

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

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

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

    
733
# code dependency declarations
734

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

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

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

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

    
816
# protocols
817
http_protocol_deps="network"
818
rtp_protocol_deps="udp_protocol"
819
tcp_protocol_deps="network"
820
udp_protocol_deps="network"
821

    
822
# programs
823
ffplay_deps="sdl"
824
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
825
ffserver_extralibs='$ldl'
826
vhook_extralibs='$ldl'
827

    
828

    
829
# set temporary file name
830
if test ! -z "$TMPDIR" ; then
831
    TMPDIR1="${TMPDIR}"
832
elif test ! -z "$TEMPDIR" ; then
833
    TMPDIR1="${TEMPDIR}"
834
else
835
    TMPDIR1="/tmp"
836
fi
837

    
838
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
839
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
840
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
841
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
842
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
843

    
844
# default parameters
845

    
846
enable logging
847
logfile="config.err"
848

    
849
# installation paths
850
PREFIX="/usr/local"
851
libdir='$(PREFIX)/lib'
852
shlibdir="$libdir"
853
incdir='$(PREFIX)/include/ffmpeg'
854
mandir='$(PREFIX)/share/man'
855
bindir='$(PREFIX)/bin'
856

    
857
# toolchain
858
cc="gcc"
859
ar="ar"
860
ranlib="ranlib"
861
make="make"
862
strip="strip"
863
asmalign_pot="unknown"
864
ln_s="ln -sf"
865

    
866
# machine
867
arch=`uname -m`
868
cpu="generic"
869

    
870
# OS
871
targetos=$(tolower $(uname -s))
872

    
873
# libraries
874
enable zlib
875

    
876
# configurable options
877
enable debug
878
enable dostrip
879
enable ffmpeg
880
enable ffplay
881
enable ffserver
882
enable ipv6
883
enable static
884
enable mpegaudio_hp
885
enable network
886
enable optimizations
887
enable protocols
888
vhook="default"
889

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

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

    
919
FFMPEG_CONFIGURATION="$@"
920

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

    
929
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
930
enable $ARCH_EXT_LIST
931

    
932
die_unknown(){
933
    echo "Unknown option \"$1\"."
934
    echo "See $0 --help for available options."
935
    exit 1
936
}
937

    
938
show_list() {
939
    suffix=_$1
940
    shift
941
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
942
    exit 0
943
}
944

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

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

    
1099
enable $arch
1100
enabled_any x86_32 x86_64 && enable x86
1101
enabled     sparc64       && enable sparc
1102

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

    
1219
add_extralibs $osextralibs
1220

    
1221
if ! disabled logging ; then
1222
    enabled logging || logfile="$logging"
1223
    echo "# $0 $@" >$logfile
1224
    set >>$logfile
1225
else
1226
    logfile=/dev/null
1227
fi
1228

    
1229
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1230
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1231

    
1232
test -n "$cross_prefix" && enable cross_compile
1233
cc="${cross_prefix}${cc}"
1234
ar="${cross_prefix}${ar}"
1235
ranlib="${cross_prefix}${ranlib}"
1236
strip="${cross_prefix}${strip}"
1237

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

    
1249
disabled static && LIBNAME=""
1250

    
1251
if ! enabled libogg; then
1252
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1253
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1254
fi
1255

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

    
1271

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

    
1287
check_deps $ARCH_EXT_LIST
1288

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

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

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

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

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

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

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

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

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

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

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

    
1436
# check for assembler specific support
1437

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

    
1449
# check for SIMD availability
1450

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

    
1457
    check_header altivec.h
1458

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1547
check_lib math.h sin -lm
1548

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

    
1556
enabled_any libamr_nb libamr_wb && enable libamr
1557

    
1558
# these are off by default, so fail if requested and not available
1559
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1560
enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1561
enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1562
enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1563
enabled libdc1394  && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1564
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1565
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1566
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1567
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1568
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1569
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1570
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1571
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -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 $ENCODER_LIST  && enable encoders
1739
enabled_any $DECODER_LIST  && enable decoders
1740
enabled_any $MUXER_LIST    && enable muxers
1741
enabled_any $DEMUXER_LIST  && enable demuxers
1742
enabled_any $PROTOCOL_LIST && enable protocols
1743
enabled_any $BSF_LIST      && enable bsfs
1744

    
1745
enabled_any $THREADS_LIST  && enable threads
1746

    
1747
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1748
    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1749

    
1750
enabled libdc1394 && append pkg_requires "libraw1394"
1751
enabled libogg    && append pkg_requires "ogg >= 1.1"
1752
enabled libtheora && append pkg_requires "theora"
1753
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1754

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