Statistics
| Branch: | Revision:

ffmpeg / configure @ 47772399

History | View | Annotate | Download (57.4 KB)

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

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

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

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

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

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

    
53
show_help(){
54
  echo "Usage: configure [options]"
55
  echo "Options: [defaults in brackets after descriptions]"
56
  echo
57
  echo "Standard options:"
58
  echo "  --help                   print this message"
59
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
64
  echo "  --mandir=DIR             install man page in DIR [PREFIX/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-dc1394          enable IIDC-1394 grabbing using libdc1394"
81
  echo "                           and libraw1394 [default=no]"
82
  echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
83
  echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
84
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
85
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
86
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
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-audio-oss      disable OSS audio support [default=no]"
124
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
125
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
126
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
127
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
128
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
129
  echo "  --disable-network        disable network support [default=no]"
130
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
131
  echo "  --disable-zlib           disable zlib [default=no]"
132
  echo "  --disable-vhook          disable video hooking support"
133
  echo "  --disable-debug          disable debugging symbols"
134
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
135
  echo "                           MPEG audio decoding [default=no]"
136
  echo "  --enable-gray            enable full grayscale support (slower color)"
137
  echo "  --disable-ffmpeg         disable ffmpeg build"
138
  echo "  --disable-ffserver       disable ffserver build"
139
  echo "  --disable-ffplay         disable ffplay build"
140
  echo "  --enable-small           optimize for size instead of speed"
141
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
142
  echo "  --disable-encoder=NAME   disables encoder NAME"
143
  echo "  --enable-encoder=NAME    enables encoder NAME"
144
  echo "  --disable-decoder=NAME   disables decoder NAME"
145
  echo "  --enable-decoder=NAME    enables decoder NAME"
146
  echo "  --disable-encoders       disables all encoders"
147
  echo "  --disable-decoders       disables all decoders"
148
  echo "  --disable-muxer=NAME     disables muxer NAME"
149
  echo "  --enable-muxer=NAME      enables muxer NAME"
150
  echo "  --disable-muxers         disables all muxers"
151
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
152
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
153
  echo "  --disable-demuxers       disables all demuxers"
154
  echo "  --enable-parser=NAME     enables parser NAME"
155
  echo "  --disable-parser=NAME    disables parser NAME"
156
  echo "  --disable-parsers        disables all parsers"
157
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
158
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
159
  echo "  --disable-bsfs           disables all bitstream filters"
160
  echo "  --enable-protocol=NAME   enables protocol NAME"
161
  echo "  --disable-protocol=NAME  disables protocol NAME"
162
  echo "  --disable-protocols      disables all protocols"
163
  echo "  --list-decoders          show all available decoders"
164
  echo "  --list-encoders          show all available encoders"
165
  echo "  --list-muxers            show all available muxers"
166
  echo "  --list-demuxers          show all available demuxers"
167
  echo "  --list-parsers           show all available parsers"
168
  echo "  --list-protocols         show all available protocols"
169
  echo "  --list-bsfs              show all available bitstream filters"
170
  echo
171
  echo "Developer options (useful when working on FFmpeg itself):"
172
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
173
  echo "  --disable-opts           disable compiler optimizations"
174
  echo "  --enable-extra-warnings  enable more compiler warnings"
175
  echo "  --disable-strip          disable stripping of executables and shared libraries"
176
  echo ""
177
  echo "NOTE: Object files are built at the place where configure is launched."
178
  exit 1
179
}
180

    
181
log(){
182
    echo "$@" >>$logfile
183
}
184

    
185
log_file(){
186
    log BEGIN $1
187
    cat -n $1 >>$logfile
188
    log END $1
189
}
190

    
191
echolog(){
192
    log "$@"
193
    echo "$@"
194
}
195

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

    
218
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
219
toupper(){
220
    echo "$@" | tr '[a-z]' '[A-Z]'
221
}
222

    
223
tolower(){
224
    echo "$@" | tr '[A-Z]' '[a-z]'
225
}
226

    
227
set_all(){
228
    value=$1
229
    shift
230
    for var in $*; do
231
        eval $var=$value
232
    done
233
}
234

    
235
pushvar(){
236
    for var in $*; do
237
        eval level=\${${var}_level:=0}
238
        eval ${var}_${level}="\$$var"
239
        eval ${var}_level=$(($level+1))
240
    done
241
}
242

    
243
popvar(){
244
    for var in $*; do
245
        eval level=\${${var}_level:-0}
246
        test $level = 0 && continue
247
        eval level=$(($level-1))
248
        eval $var="\${${var}_${level}}"
249
        eval ${var}_level=$level
250
        eval unset ${var}_${level}
251
    done
252
}
253

    
254
enable(){
255
    set_all yes $*
256
}
257

    
258
disable(){
259
    set_all no $*
260
}
261

    
262
enabled(){
263
    eval test "x\$$1" = "xyes"
264
}
265

    
266
disabled(){
267
    eval test "x\$$1" = "xno"
268
}
269

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

    
276
disabled_all(){
277
    for opt; do
278
        disabled $opt || return 1
279
    done
280
}
281

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

    
288
disabled_any(){
289
    for opt; do
290
        disabled $opt && return 0
291
    done
292
}
293

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

    
300
        eval dep_all="\$${cfg}_deps"
301
        eval dep_any="\$${cfg}_deps_any"
302

    
303
        pushvar cfg dep_all dep_any
304
        check_deps $dep_all $dep_any
305
        popvar cfg dep_all dep_any
306

    
307
        enabled_all $dep_all || disable $cfg
308
        enabled_any $dep_any || disable $cfg
309

    
310
        disable ${cfg}_checking
311
    done
312
}
313

    
314
print_config(){
315
    pfx=$1
316
    header=$2
317
    makefile=$3
318
    shift 3
319
    for cfg; do
320
        ucname="`toupper $cfg`"
321
        if enabled $cfg; then
322
            echo "#define ${pfx}${ucname} 1" >> $header
323
            echo "#define ENABLE_${ucname} 1" >> $header
324
            echo "${pfx}${ucname}=yes" >> $makefile
325
        else
326
            echo "#define ENABLE_${ucname} 0" >> $header
327
        fi
328
    done
329
}
330

    
331
flags_saved(){
332
    (: ${SAVE_CFLAGS?}) 2>/dev/null
333
}
334

    
335
save_flags(){
336
    flags_saved && return
337
    SAVE_CFLAGS="$CFLAGS"
338
    SAVE_LDFLAGS="$LDFLAGS"
339
    SAVE_extralibs="$extralibs"
340
}
341

    
342
restore_flags(){
343
    flags_saved || return
344
    CFLAGS="$SAVE_CFLAGS"
345
    LDFLAGS="$SAVE_LDFLAGS"
346
    extralibs="$SAVE_extralibs"
347
    unset SAVE_CFLAGS
348
    unset SAVE_LDFLAGS
349
    unset SAVE_extralibs
350
}
351

    
352
temp_cflags(){
353
    save_flags
354
    CFLAGS="$CFLAGS $*"
355
}
356

    
357
temp_ldflags(){
358
    save_flags
359
    LDFLAGS="$LDFLAGS $*"
360
}
361

    
362
temp_extralibs(){
363
    save_flags
364
    extralibs="$extralibs $*"
365
}
366

    
367
append(){
368
    var=$1
369
    shift
370
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
371
    eval "$var=\"\$$var $*\""
372
}
373

    
374
add_cflags(){
375
    append CFLAGS "$@"
376
}
377

    
378
add_ldflags(){
379
    append LDFLAGS "$@"
380
}
381

    
382
add_extralibs(){
383
    append extralibs "$@"
384
}
385

    
386
check_cmd(){
387
    log "$@"
388
    "$@" >>$logfile 2>&1
389
}
390

    
391
check_cc(){
392
    log check_cc "$@"
393
    cat >$TMPC
394
    log_file $TMPC
395
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
396
}
397

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

    
405
check_ld(){
406
    log check_ld "$@"
407
    check_cc || return
408
    flags=''
409
    libs=''
410
    for f; do
411
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
412
    done
413
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
414
}
415

    
416
check_cflags(){
417
    log check_cflags "$@"
418
    check_cc "$@" <<EOF && add_cflags "$@"
419
int x;
420
EOF
421
}
422

    
423
check_ldflags(){
424
    log check_ldflags "$@"
425
    check_ld "$@" <<EOF && add_ldflags "$@"
426
int main(){
427
    return 0;
428
}
429
EOF
430
}
431

    
432
check_header(){
433
    log check_header "$@"
434
    header=$1
435
    shift
436
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
437
    disable $var
438
    check_cpp "$@" <<EOF && enable $var
439
#include <$header>
440
int x;
441
EOF
442
}
443

    
444
check_func(){
445
    log check_func "$@"
446
    func=$1
447
    shift
448
    disable $func
449
    check_ld "$@" <<EOF && enable $func
450
extern int $func();
451
int main(){
452
    $func();
453
}
454
EOF
455
}
456

    
457
check_func2(){
458
    log check_func2 "$@"
459
    headers=$1
460
    func=$2
461
    shift 2
462
    disable $func
463
    incs=""
464
    for hdr in $headers; do
465
        incs="$incs
466
#include <$hdr>"
467
    done
468
    check_ld "$@" <<EOF && enable $func
469
$incs
470
int main(){
471
    (void) $func;
472
    return 0;
473
}
474
EOF
475
}
476

    
477
check_lib(){
478
    log check_lib "$@"
479
    header="$1"
480
    func="$2"
481
    shift 2
482
    temp_extralibs "$@"
483
    check_header $header && check_func $func && add_extralibs "$@"
484
    err=$?
485
    restore_flags
486
    return $err
487
}
488

    
489
check_lib2(){
490
    log check_lib2 "$@"
491
    headers="$1"
492
    func="$2"
493
    shift 2
494
    temp_extralibs "$@"
495
    check_func2 "$headers" $func && add_extralibs "$@"
496
    err=$?
497
    restore_flags
498
    return $err
499
}
500

    
501
check_exec(){
502
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
503
}
504

    
505
check_exec_crash(){
506
    code=`cat`
507

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

    
514
    (check_exec "$@") >>$logfile 2>&1 <<EOF
515
#include <signal.h>
516
static void sighandler(int sig){
517
    raise(SIGTERM);
518
}
519
int main(){
520
    signal(SIGILL, sighandler);
521
    signal(SIGFPE, sighandler);
522
    signal(SIGSEGV, sighandler);
523
#ifdef SIGBUS
524
    signal(SIGBUS, sighandler);
525
#endif
526
    { $code }
527
}
528
EOF
529
}
530

    
531
require(){
532
    name="$1"
533
    header="$2"
534
    func="$3"
535
    shift 3
536
    check_lib $header $func "$@" || die "ERROR: $name not found"
537
}
538

    
539
require2(){
540
    name="$1"
541
    headers="$2"
542
    func="$3"
543
    shift 3
544
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
545
}
546

    
547
check_foo_config(){
548
    cfg=$1
549
    pkg=$2
550
    header=$3
551
    func=$4
552
    shift 4
553
    disable $cfg
554
    check_cmd ${pkg}-config --version
555
    err=$?
556
    if test "$err" = 0; then
557
        temp_cflags `${pkg}-config --cflags`
558
        temp_extralibs `${pkg}-config --libs`
559
        check_lib "$@" $header $func && enable $cfg
560
    fi
561
    return $err
562
}
563

    
564
apply(){
565
    file=$1
566
    shift
567
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
568
}
569

    
570
CONFIG_LIST='
571
    audio_beos
572
    audio_oss
573
    avisynth
574
    beos_netserver
575
    bktr
576
    bsfs
577
    dc1394
578
    decoders
579
    demuxers
580
    dv1394
581
    encoders
582
    ffmpeg
583
    ffplay
584
    ffserver
585
    gpl
586
    gprof
587
    gray
588
    ipv6
589
    liba52
590
    liba52bin
591
    libamr
592
    libamr_nb
593
    libamr_wb
594
    libfaac
595
    libfaad
596
    libfaadbin
597
    libgsm
598
    libmp3lame
599
    libnut
600
    libogg
601
    libtheora
602
    libvorbis
603
    libx264
604
    libxvid
605
    memalign_hack
606
    mpegaudio_hp
607
    muxers
608
    network
609
    parsers
610
    powerpc_perf
611
    pp
612
    protocols
613
    small
614
    swscaler
615
    vhook
616
    v4l
617
    v4l2
618
    x11grab
619
    zlib
620
'
621

    
622
THREADS_LIST='
623
    beosthreads
624
    pthreads
625
    w32threads
626
'
627

    
628
ARCH_LIST='
629
    alpha
630
    armv4l
631
    bfin
632
    ia64
633
    m68k
634
    mips
635
    parisc
636
    powerpc
637
    s390
638
    sh4
639
    sparc
640
    sparc64
641
    x86
642
    x86_32
643
    x86_64
644
'
645

    
646
ARCH_EXT_LIST='
647
    altivec
648
    armv5te
649
    armv6
650
    iwmmxt
651
    mmi
652
    mmx
653
    ssse3
654
'
655

    
656
HAVE_LIST="
657
    $ARCH_EXT_LIST
658
    $THREADS_LIST
659
    altivec_h
660
    arpa_inet_h
661
    byteswap_h
662
    closesocket
663
    cmov
664
    conio_h
665
    dcbzl
666
    dev_bktr_ioctl_bt848_h
667
    dev_bktr_ioctl_meteor_h
668
    dev_ic_bt8xx_h
669
    dev_video_meteor_ioctl_meteor_h
670
    dev_video_bktr_ioctl_bt848_h
671
    dlfcn_h
672
    dlopen
673
    ebp_available
674
    ebx_available
675
    fast_64bit
676
    fast_cmov
677
    fast_unaligned
678
    fork
679
    freetype2
680
    GetProcessTimes
681
    getrusage
682
    imlib2
683
    inet_aton
684
    lrintf
685
    machine_ioctl_bt848_h
686
    machine_ioctl_meteor_h
687
    malloc_h
688
    memalign
689
    mkstemp
690
    gethrtime
691
    mlib
692
    ppc64
693
    sdl
694
    sdl_video_size
695
    soundcard_h
696
    sys_poll_h
697
    sys_soundcard_h
698
    termios_h
699
    threads
700
    winsock2_h
701
"
702

    
703
CMDLINE_SELECT="
704
    $ARCH_EXT_LIST
705
    $CONFIG_LIST
706
    $THREADS_LIST
707
    debug
708
    extra_warnings
709
    shared
710
    static
711
"
712

    
713
# code dependency declarations
714

    
715
# architecture extensions
716
altivec_deps="powerpc"
717
armv5te_deps="armv4l"
718
armv6_deps="armv4l"
719
iwmmxt_deps="armv4l"
720
mmi_deps="mips"
721
mmx_deps="x86"
722
ssse3_deps="x86"
723

    
724
# decoders / encoders
725
ac3_decoder_deps="gpl"
726
dxa_decoder_deps="zlib"
727
flashsv_decoder_deps="zlib"
728
flashsv_encoder_deps="zlib"
729
flv_decoder_deps="h263_decoder"
730
h263_decoder_deps="h263_parser mpeg4video_parser"
731
h263i_decoder_deps="h263_decoder"
732
h264_decoder_deps="h264_parser"
733
mpeg_xvmc_decoder_deps="xvmc"
734
mpeg4_decoder_deps="h263_decoder"
735
msmpeg4v1_decoder_deps="h263_decoder"
736
msmpeg4v2_decoder_deps="h263_decoder"
737
msmpeg4v3_decoder_deps="h263_decoder"
738
png_decoder_deps="zlib"
739
png_encoder_deps="zlib"
740
svq3_decoder_deps="h264_parser"
741
vc1_decoder_deps="h263_decoder"
742
wmv1_decoder_deps="h263_decoder"
743
wmv2_decoder_deps="h263_decoder"
744
wmv3_decoder_deps="h263_decoder"
745
zmbv_decoder_deps="zlib"
746
zmbv_encoder_deps="zlib"
747

    
748
# external libraries
749
mpeg4aac_decoder_deps="libfaad"
750
liba52_decoder_deps="liba52"
751
libamr_nb_decoder_deps="libamr_nb"
752
libamr_nb_encoder_deps="libamr_nb"
753
libamr_wb_decoder_deps="libamr_wb"
754
libamr_wb_encoder_deps="libamr_wb"
755
libfaac_encoder_deps="libfaac"
756
libfaad_decoder_deps="libfaad"
757
libgsm_decoder_deps="libgsm"
758
libgsm_encoder_deps="libgsm"
759
libgsm_ms_decoder_deps="libgsm"
760
libgsm_ms_encoder_deps="libgsm"
761
libmp3lame_encoder_deps="libmp3lame"
762
libtheora_encoder_deps="libtheora"
763
libvorbis_decoder_deps="libvorbis"
764
libvorbis_encoder_deps="libvorbis"
765
libx264_encoder_deps="libx264"
766
libxvid_encoder_deps="libxvid"
767

    
768
# demuxers / muxers
769
ac3_demuxer_deps="ac3_parser"
770
audio_demuxer_deps_any="audio_oss audio_beos"
771
audio_muxer_deps_any="audio_oss audio_beos"
772
dc1394_demuxer_deps="dc1394"
773
dv1394_demuxer_deps="dv1394"
774
libnut_demuxer_deps="libnut"
775
libnut_muxer_deps="libnut"
776
mp3_demuxer_deps="mpegaudio_parser"
777
ogg_muxer_deps="libogg"
778
redir_demuxer_deps="network"
779
rtp_muxer_deps="network mpegts_demuxer"
780
rtsp_demuxer_deps="rtp_protocol rtp_muxer"
781
sdp_demuxer_deps="rtsp_demuxer"
782
v4l2_demuxer_deps="v4l2"
783
video_grab_bktr_demuxer_deps="bktr"
784
video_grab_v4l_demuxer_deps="v4l"
785
x11_grab_device_demuxer_deps="x11grab"
786

    
787
# protocols
788
http_protocol_deps="network"
789
rtp_protocol_deps="udp_protocol"
790
tcp_protocol_deps="network"
791
udp_protocol_deps="network"
792

    
793
# programs
794
ffplay_deps="sdl"
795
ffserver_deps="muxers rtp_protocol"
796

    
797

    
798
# set temporary file name
799
if test ! -z "$TMPDIR" ; then
800
    TMPDIR1="${TMPDIR}"
801
elif test ! -z "$TEMPDIR" ; then
802
    TMPDIR1="${TEMPDIR}"
803
else
804
    TMPDIR1="/tmp"
805
fi
806

    
807
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
808
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
809
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
810
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
811
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
812

    
813
# default parameters
814

    
815
logging="yes"
816
logfile="config.err"
817

    
818
# installation paths
819
PREFIX="/usr/local"
820
libdir='$(PREFIX)/lib'
821
shlibdir="$libdir"
822
incdir='$(PREFIX)/include/ffmpeg'
823
mandir='$(PREFIX)/man'
824
bindir='$(PREFIX)/bin'
825

    
826
# toolchain
827
cc="gcc"
828
ar="ar"
829
ranlib="ranlib"
830
make="make"
831
strip="strip"
832
asmalign_pot="unknown"
833

    
834
# machine
835
arch=`uname -m`
836
cpu="generic"
837

    
838
# OS
839
targetos=$(tolower $(uname -s))
840

    
841
# non-library system interfaces
842
audio_oss="yes"
843
bktr="yes"
844
dv1394="yes"
845
v4l2="yes"
846
v4l="yes"
847

    
848
# libraries
849
zlib="yes"
850

    
851
# configurable options
852
debug="yes"
853
dostrip="yes"
854
ffmpeg="yes"
855
ffplay="yes"
856
ffserver="yes"
857
ipv6="yes"
858
static="yes"
859
mpegaudio_hp="yes"
860
network="yes"
861
optimize="yes"
862
protocols="yes"
863
vhook="default"
864

    
865
# build settings
866
SHFLAGS='-shared -Wl,-soname,$@'
867
VHOOKSHFLAGS='$(SHFLAGS)'
868
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
869
FFSERVERLDFLAGS=-Wl,-E
870
LDCONFIG="ldconfig"
871
LIBPREF="lib"
872
LIBSUF=".a"
873
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
874
SLIBPREF="lib"
875
SLIBSUF=".so"
876
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
877
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
878
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
879
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIB)"'
880

    
881
# find source path
882
source_path="`dirname \"$0\"`"
883
source_path_used="yes"
884
if test -z "$source_path" -o "$source_path" = "." ; then
885
    source_path="`pwd`"
886
    source_path_used="no"
887
else
888
    source_path="`cd \"$source_path\"; pwd`"
889
    echo "$source_path" | grep -q '[[:blank:]]' &&
890
      die "Out of tree builds are impossible with whitespace in source path."
891
fi
892

    
893
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
894
    show_help
895
fi
896

    
897
FFMPEG_CONFIGURATION="$@"
898

    
899
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
900
DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
901
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
902
BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
903
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
904
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
905
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
906

    
907
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
908
enable $ARCH_EXT_LIST
909

    
910
die_unknown(){
911
    echo "Unknown option \"$1\"."
912
    echo "See $0 --help for available options."
913
    exit 1
914
}
915

    
916
show_list() {
917
    for part in $*; do
918
        echo $part | sed 's/_[^_]*$//'
919
    done | sort
920
    exit 0
921
}
922

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

    
1009
case "$arch" in
1010
  i386|i486|i586|i686|i86pc|BePC)
1011
    arch="x86_32"
1012
    enable fast_unaligned
1013
  ;;
1014
  x86_64|amd64)
1015
    arch="x86_32"
1016
    enable fast_unaligned
1017
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1018
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1019
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1020
        arch="x86_64"
1021
        enable fast_64bit
1022
      fi
1023
    fi
1024
  ;;
1025
  # armv4l is a subset of armv[567]*l
1026
  arm|armv[4567]*l)
1027
    arch="armv4l"
1028
  ;;
1029
  alpha)
1030
    arch="alpha"
1031
    enable fast_64bit
1032
  ;;
1033
  "Power Macintosh"|ppc|powerpc)
1034
    arch="powerpc"
1035
  ;;
1036
  ppc64)
1037
    arch="powerpc"
1038
    enable fast_64bit
1039
  ;;
1040
  mips|mipsel|IP*)
1041
    arch="mips"
1042
  ;;
1043
  sun4u|sparc64)
1044
    arch="sparc64"
1045
    enable fast_64bit
1046
  ;;
1047
  sparc)
1048
    arch="sparc"
1049
  ;;
1050
  sh4)
1051
    arch="sh4"
1052
  ;;
1053
  parisc)
1054
    arch="parisc"
1055
  ;;
1056
  parisc64)
1057
    arch="parisc"
1058
    enable fast_64bit
1059
  ;;
1060
  s390|s390x)
1061
    arch="s390"
1062
  ;;
1063
  m68k)
1064
    arch="m68k"
1065
  ;;
1066
  ia64)
1067
    arch="ia64"
1068
    enable fast_64bit
1069
  ;;
1070
  bfin)
1071
    arch="bfin"
1072
  ;;
1073
  *)
1074
    arch="unknown"
1075
  ;;
1076
esac
1077

    
1078
enable $arch
1079
enabled_any x86_32 x86_64 && enable x86
1080
enabled     sparc64       && enable sparc
1081

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

    
1210
add_extralibs $osextralibs
1211

    
1212
if ! disabled logging ; then
1213
    enabled logging || logfile="$logging"
1214
    echo "# $0 $@" >$logfile
1215
    set >>$logfile
1216
else
1217
    logfile=/dev/null
1218
fi
1219

    
1220
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1221
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1222

    
1223
test -n "$cross_prefix" && cross_compile=yes
1224
cc="${cross_prefix}${cc}"
1225
ar="${cross_prefix}${ar}"
1226
ranlib="${cross_prefix}${ranlib}"
1227
strip="${cross_prefix}${strip}"
1228

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

    
1240
if disabled static; then
1241
    LIB=""
1242
fi
1243

    
1244
if ! enabled libogg; then
1245
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1246
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1247
fi
1248

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

    
1264

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

    
1280
check_deps $ARCH_EXT_LIST
1281

    
1282
test -z "$need_memalign" && need_memalign="$mmx"
1283

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

    
1298
disabled optimize || add_cflags -fomit-frame-pointer
1299

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

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

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

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

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

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

    
1421
    # check wether EBX is available on x86
1422
    check_cc <<EOF && enable ebx_available
1423
int main(){
1424
    asm volatile ("":::"%ebx");
1425
}
1426
EOF
1427

    
1428
    # check whether binutils is new enough to compile SSSE3
1429
    enabled ssse3 && check_cc <<EOF || disable ssse3
1430
int main(){
1431
    asm volatile ("pabsw %xmm0, %xmm0");
1432
}
1433
EOF
1434
fi
1435

    
1436
# check for assembler specific support
1437

    
1438
if test $arch = "powerpc"; then
1439
check_cc <<EOF && dcbzl=yes
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
    if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1454
        add_cflags "-faltivec"
1455
    else
1456
        add_cflags "-maltivec -mabi=altivec"
1457
    fi
1458

    
1459
    check_header altivec.h
1460

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

    
1477
# check armv5te instructions support
1478
enabled armv5te && check_cc <<EOF || disable armv5te
1479
int main(void) {
1480
    __asm__ __volatile__ ("qadd r0, r0, r0");
1481
}
1482
EOF
1483

    
1484
enabled armv6 && check_cc <<EOF || disable armv6
1485
int main(void) {
1486
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1487
}
1488
EOF
1489

    
1490
# check iwmmxt support
1491
enabled iwmmxt && check_cc <<EOF || disable iwmmxt
1492
int main(void) {
1493
    __asm__ __volatile__ ("wunpckelub wr6, wr4");
1494
}
1495
EOF
1496

    
1497
# check if our compiler supports mmi
1498
enabled mmi && check_cc <<EOF || mmi="no"
1499
int main(void) {
1500
    __asm__ ("lq \$2, 0(\$2)");
1501
    return 0;
1502
}
1503
EOF
1504

    
1505
# ---
1506
# big/little-endian test
1507
if ! enabled cross_compile; then
1508
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1509
#include <inttypes.h>
1510
int main(int argc, char ** argv){
1511
        volatile uint32_t i=0x01234567;
1512
        return (*((uint8_t*)(&i))) == 0x67;
1513
}
1514
EOF
1515
else
1516
    # programs cannot be launched if cross compiling, so make a static guess
1517
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1518
        bigendian="yes"
1519
    fi
1520
fi
1521

    
1522
# ---
1523
# check availability of some header files
1524

    
1525
check_header malloc.h
1526
check_func memalign
1527

    
1528
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1529
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1530
fi
1531

    
1532
check_header byteswap.h
1533

    
1534
check_func mkstemp
1535
check_func gethrtime
1536

    
1537
check_header termios.h
1538
check_header conio.h
1539

    
1540
check_header arpa/inet.h
1541
check_header winsock2.h
1542

    
1543
check_func inet_aton
1544
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1545

    
1546
# ffserver uses poll(),
1547
# if it's not found we can emulate it using select().
1548
if enabled ffserver; then
1549
    check_header sys/poll.h
1550
fi
1551

    
1552
# check for some common methods of building with pthread support
1553
# do this before the optional library checks as some of them require pthreads
1554
if enabled pthreads; then
1555
    if check_func pthread_create; then
1556
        :
1557
    elif check_func pthread_create -pthread; then
1558
        add_cflags -pthread
1559
        add_ldflags -pthread
1560
    elif check_func pthread_create -pthreads; then
1561
        add_cflags -pthreads
1562
        add_ldflags -pthreads
1563
    elif ! check_lib pthread.h pthread_create -lpthread; then
1564
        die "ERROR: can't find pthreads library"
1565
    fi
1566
fi
1567

    
1568
for thread in $THREADS_LIST; do
1569
    if enabled $thread; then
1570
        if test -n "$thread_type"; then
1571
            die "ERROR: Only one thread type must be selected."
1572
        else
1573
            thread_type="$thread"
1574
        fi
1575
    fi
1576
done
1577

    
1578
# test for lrintf in math.h
1579
check_exec <<EOF && lrintf=yes || lrintf=no
1580
#define _ISOC9X_SOURCE  1
1581
#include <math.h>
1582
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1583
EOF
1584

    
1585
enabled_any libamr_nb libamr_wb && enable libamr
1586

    
1587
# these are off by default, so fail if requested and not available
1588
enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1589
enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1590
enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1591
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1592
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1593
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1594
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1595
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1596
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1597
enabled libx264    && require x264 x264.h x264_encoder_open -lx264
1598
enabled libxvid    && require Xvid xvid.h xvid_global -lxvidcore
1599
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1600
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1601
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1602
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1603
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1604

    
1605
# disable the native AC-3 decoder if liba52 is enabled
1606
enabled liba52 && disable ac3_decoder
1607

    
1608
_restrict=
1609
for restrict_keyword in restrict __restrict__ __restrict; do
1610
    check_cc <<EOF && _restrict=$restrict_keyword && break
1611
void foo(char * $restrict_keyword p);
1612
EOF
1613
done
1614

    
1615
# dlopen/dlfcn.h probing
1616

    
1617
check_header dlfcn.h
1618

    
1619
if check_func dlopen; then
1620
    ldl=
1621
elif check_func dlopen -ldl; then
1622
    ldl=-ldl
1623
fi
1624

    
1625
check_func getrusage
1626
check_func2 windows.h GetProcessTimes
1627

    
1628
check_func fork
1629
check_func closesocket
1630

    
1631
test "$vhook" = "default" && vhook="$dlopen"
1632

    
1633
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1634

    
1635
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1636
    vhook="no"
1637
    echo
1638
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1639
    echo "Patches welcome."
1640
    echo
1641
fi
1642

    
1643
if enabled vhook; then
1644
    check_ldflags -rdynamic
1645
    check_ldflags -export-dynamic
1646
fi
1647

    
1648
enabled audio_beos && add_extralibs "-lmedia -lbe"
1649

    
1650
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1651
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1652

    
1653
##########################################
1654
# SDL check
1655

    
1656
sdl_too_old=no
1657
sdl=no
1658
SDL_CONFIG="${cross_prefix}sdl-config"
1659
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1660
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1661
    temp_cflags $sdl_cflags
1662
    temp_extralibs `"${SDL_CONFIG}" --libs`
1663
    if check_lib SDL.h SDL_Init; then
1664
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1665
        if test "$_sdlversion" -lt 121 ; then
1666
            sdl_too_old=yes
1667
        else
1668
            sdl=yes
1669
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1670
#include <SDL.h>
1671
int main(void){
1672
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1673
    int w = vi->current_w;
1674
    return 0;
1675
}
1676
EOF
1677
        fi
1678
    fi
1679
    restore_flags
1680
fi
1681

    
1682
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1683

    
1684
##########################################
1685
# IPv6 check
1686

    
1687
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1688
#include <sys/types.h>
1689
#include <sys/socket.h>
1690
#include <netinet/in.h>
1691
#include <netdb.h>
1692
int main( void ) {
1693
  struct sockaddr_storage saddr;
1694
  struct ipv6_mreq mreq6;
1695
  getaddrinfo(0,0,0,0);
1696
  getnameinfo(0,0,0,0,0,0,0);
1697
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1698
}
1699
EOF
1700

    
1701
enabled v4l  && check_header linux/videodev.h  || disable v4l
1702
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1703

    
1704
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1705
if enabled bktr; then
1706
    { check_header dev/bktr/ioctl_meteor.h &&
1707
      check_header dev/bktr/ioctl_bt848.h; } ||
1708
    { check_header machine/ioctl_meteor.h &&
1709
      check_header machine/ioctl_bt848.h; } ||
1710
    { check_header dev/video/meteor/ioctl_meteor.h &&
1711
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1712
    check_header dev/ic/bt8xx.h ||
1713
    disable bktr
1714
fi
1715

    
1716
enabled audio_oss &&
1717
    check_header sys/soundcard.h ||
1718
    check_header soundcard.h ||
1719
    disable audio_oss
1720

    
1721
# Deal with the x11 frame grabber
1722
enabled x11grab                         &&
1723
enabled gpl                             &&
1724
enabled x11_grab_device_demuxer         &&
1725
check_header X11/Xlib.h                 &&
1726
check_header X11/extensions/XShm.h      &&
1727
check_func XOpenDisplay -lX11           &&
1728
check_func XShmCreateImage -lX11 -lXext &&
1729
add_extralibs -lX11 -lXext              ||
1730
disable x11_grab_device_demuxer
1731

    
1732
enabled debug && add_cflags -g
1733

    
1734
# add some useful compiler flags if supported
1735
check_cflags -Wdeclaration-after-statement
1736
check_cflags -Wall
1737
check_cflags -Wno-switch
1738
check_cflags -Wdisabled-optimization
1739
check_cflags -Wpointer-arith
1740
check_cflags -Wredundant-decls
1741
check_cflags -Wno-pointer-sign
1742
enabled extra_warnings && check_cflags -Winline
1743

    
1744
# add some linker flags
1745
check_ldflags -Wl,--warn-common
1746
check_ldflags $LDLATEFLAGS
1747

    
1748
if enabled small; then
1749
    check_cflags -Os            # not all compilers support -Os
1750
    optimize="small"
1751
elif enabled optimize; then
1752
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1753
        add_cflags  "-O5"
1754
        add_ldflags "-O5"
1755
    else
1756
        add_cflags "-O3"
1757
    fi
1758
fi
1759

    
1760
# PIC flags for shared library objects where they are needed
1761
if enabled shared; then
1762
    # LIBOBJFLAGS may have already been set in the OS configuration
1763
    if test -z "$LIBOBJFLAGS" ; then
1764
        case "$arch" in
1765
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1766
        esac
1767
    fi
1768
fi
1769

    
1770
if enabled gprof; then
1771
    add_cflags  "-p"
1772
    add_ldflags "-p"
1773
fi
1774

    
1775
VHOOKCFLAGS="-fPIC"
1776

    
1777
# find if .align arg is power-of-two or not
1778
if test $asmalign_pot = "unknown"; then
1779
    asmalign_pot="no"
1780
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1781
fi
1782

    
1783
enabled_any $ENCODER_LIST  && enable encoders
1784
enabled_any $DECODER_LIST  && enable decoders
1785
enabled_any $MUXER_LIST    && enable muxers
1786
enabled_any $DEMUXER_LIST  && enable demuxers
1787
enabled_any $PROTOCOL_LIST && enable protocols
1788
enabled_any $BSF_LIST      && enable bsfs
1789

    
1790
enabled_any $THREADS_LIST  && enable threads
1791

    
1792
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1793
    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1794

    
1795
enabled libogg    && append pkg_requires "ogg >= 1.1"
1796
enabled libtheora && append pkg_requires "theora"
1797
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1798
enabled dc1394    && append pkg_requires "libraw1394"
1799

    
1800
echo "install prefix            $PREFIX"
1801
echo "source path               $source_path"
1802
echo "C compiler                $cc"
1803
echo "make                      $make"
1804
echo ".align is power-of-two    $asmalign_pot"
1805
echo "ARCH                      $arch ($cpu)"
1806
if test "$BUILDSUF" != ""; then
1807
    echo "build suffix              $BUILDSUF"
1808
fi
1809
echo "big-endian                ${bigendian-no}"
1810
if test $arch = "x86_32" -o $arch = "x86_64"; then
1811
    echo "MMX enabled               ${mmx-no}"
1812
    echo "CMOV enabled              ${cmov-no}"
1813
    echo "CMOV is fast              ${fast_cmov-no}"
1814
fi
1815
if test $arch = "armv4l"; then
1816
    echo "ARMv5TE enabled           ${armv5te-no}"
1817
    echo "ARMv6 enabled             ${armv6-no}"
1818
    echo "IWMMXT enabled            ${iwmmxt-no}"
1819
fi
1820
if test $arch = "mips"; then
1821
    echo "MMI enabled               ${mmi-no}"
1822
fi
1823
if test $arch = "powerpc"; then
1824
    echo "AltiVec enabled           ${altivec-no}"
1825
    echo "dcbzl available           ${dcbzl-no}"
1826
fi
1827
echo "gprof enabled             ${gprof-no}"
1828
echo "debug symbols             ${debug-no}"
1829
echo "strip symbols             ${dostrip-no}"
1830
echo "optimize                  ${optimize-no}"
1831
echo "static                    ${static-no}"
1832
echo "shared                    ${shared-no}"
1833
echo "postprocessing support    ${pp-no}"
1834
echo "software scaler enabled   ${swscaler-no}"
1835
echo "video hooking             ${vhook-no}"
1836
if enabled vhook; then
1837
    echo "Imlib2 support            ${imlib2-no}"
1838
    echo "FreeType support          ${freetype2-no}"
1839
fi
1840
echo "network support           ${network-no}"
1841
if enabled network; then
1842
    echo "IPv6 support              ${ipv6-no}"
1843
fi
1844
echo "threading support         ${thread_type-no}"
1845
echo "SDL support               ${sdl-no}"
1846
if enabled sdl_too_old; then
1847
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1848
fi
1849
echo "Sun medialib support      ${mlib-no}"
1850
echo "AVISynth enabled          ${avisynth-no}"
1851
echo "liba52 support            ${liba52-no}"
1852
echo "liba52 dlopened           ${liba52bin-no}"
1853
echo "libamr-nb support         ${libamr_nb-no}"
1854
echo "libamr-wb support         ${libamr_wb-no}"
1855
echo "libfaac enabled           ${libfaac-no}"
1856
echo "libfaad enabled           ${libfaad-no}"
1857
echo "libfaad dlopened          ${libfaadbin-no}"
1858
echo "libgsm enabled            ${libgsm-no}"
1859
echo "libmp3lame enabled        ${libmp3lame-no}"
1860
echo "libnut enabled            ${libnut-no}"
1861
echo "libogg enabled            ${libogg-no}"
1862
echo "libtheora enabled         ${libtheora-no}"
1863
echo "libvorbis enabled         ${libvorbis-no}"
1864
echo "x264 enabled              ${libx264-no}"
1865
echo "XviD enabled              ${libxvid-no}"
1866
echo "zlib enabled              ${zlib-no}"
1867
if ! enabled gpl; then
1868
    echo "License: LGPL"
1869
else
1870
    echo "License: GPL"
1871
fi
1872

    
1873
echo "Creating config.mak and config.h..."
1874

    
1875
echo "# Automatically generated by configure - do not modify!" > config.mak
1876
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1877
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1878

    
1879
echo "PREFIX=$PREFIX" >> config.mak
1880
echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1881
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1882
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1883
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1884
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1885
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1886
echo "MAKE=$make" >> config.mak
1887
echo "CC=$cc" >> config.mak
1888
echo "AR=$ar" >> config.mak
1889
echo "RANLIB=$ranlib" >> config.mak
1890
if enabled dostrip; then
1891
    echo "STRIP=$strip" >> config.mak
1892
else
1893
    echo "STRIP=echo ignoring strip" >> config.mak
1894
fi
1895

    
1896
echo "OPTFLAGS=$CFLAGS" >> config.mak
1897
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1898
echo "LDFLAGS=$LDFLAGS" >> config.mak
1899
echo "LDCONFIG=$LDCONFIG" >> config.mak
1900
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1901
echo "SHFLAGS=$SHFLAGS" >> config.mak
1902
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1903
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1904
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1905
echo "BUILD_STATIC=$static" >> config.mak
1906
echo "BUILDSUF=$BUILDSUF" >> config.mak
1907
echo "LIBPREF=$LIBPREF" >> config.mak
1908
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1909
echo "LIB=$LIB" >> config.mak
1910
echo "SLIBPREF=$SLIBPREF" >> config.mak
1911
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1912
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1913

    
1914
if enabled bigendian; then
1915
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1916
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1917
fi
1918
if enabled mmx; then
1919
  echo "#define __CPU__ 586" >> $TMPH
1920
fi
1921

    
1922
if enabled sdl; then
1923
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1924
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1925
fi
1926
if enabled texi2html; then
1927
  echo "BUILD_DOC=yes" >> config.mak
1928
fi
1929

    
1930
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1931
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1932
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1933
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1934
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1935

    
1936

    
1937

    
1938
if enabled shared; then
1939
  echo "BUILD_SHARED=yes" >> config.mak
1940
  echo "PIC=-fPIC -DPIC" >> config.mak
1941
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1942
  echo "SPPVERSION=$pp_version" >> config.mak
1943
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1944
  echo "LAVCVERSION=$lavc_version" >> config.mak
1945
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1946
  echo "LAVFVERSION=$lavf_version" >> config.mak
1947
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1948
  echo "LAVUVERSION=$lavu_version" >> config.mak
1949
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1950
  echo "SWSVERSION=$sws_version" >> config.mak
1951
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1952
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1953
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1954
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1955
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1956
fi
1957
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1958
echo "EXTRALIBS=$extralibs" >> config.mak
1959

    
1960
print_config ARCH_   $TMPH config.mak $ARCH_LIST
1961
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1962
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1963
                                      $DECODER_LIST  \
1964
                                      $ENCODER_LIST  \
1965
                                      $PARSER_LIST   \
1966
                                      $BSF_LIST      \
1967
                                      $DEMUXER_LIST  \
1968
                                      $MUXER_LIST    \
1969
                                      $PROTOCOL_LIST \
1970

    
1971
if test "$targetos" = darwin; then
1972
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1973
fi
1974

    
1975
echo "#define restrict $_restrict" >> $TMPH
1976

    
1977
if enabled small; then
1978
  echo "#define av_always_inline"  >> $TMPH
1979
fi
1980

    
1981
echo "SRC_PATH=\"$source_path\"" >> config.mak
1982
echo "SRC_PATH_BARE=$source_path" >> config.mak
1983
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1984

    
1985
# Apparently it's not possible to portably echo a backslash.
1986
if enabled asmalign_pot; then
1987
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1988
else
1989
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1990
fi
1991

    
1992

    
1993
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1994
if ! cmp -s $TMPH config.h; then
1995
        mv -f $TMPH config.h
1996
else
1997
        echo "config.h is unchanged"
1998
fi
1999

    
2000
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2001

    
2002
# build tree in object directory if source path is different from current one
2003
if enabled source_path_used; then
2004
    DIRS="\
2005
         doc \
2006
         libavformat \
2007
         libavcodec \
2008
         libavcodec/alpha \
2009
         libavcodec/armv4l \
2010
         libavcodec/bfin \
2011
         libavcodec/i386 \
2012
         libavcodec/sparc \
2013
         libavcodec/mlib \
2014
         libavcodec/ppc \
2015
         libpostproc \
2016
         libavutil \
2017
         libswscale \
2018
         tests \
2019
         tools \
2020
         vhook \
2021
         "
2022
    FILES="\
2023
          Makefile \
2024
          common.mak \
2025
          libavformat/Makefile \
2026
          libavcodec/Makefile \
2027
          libpostproc/Makefile \
2028
          libavutil/Makefile \
2029
          libswscale/Makefile \
2030
          doc/texi2pod.pl \
2031
          "
2032
    for dir in $DIRS ; do
2033
            mkdir -p $dir
2034
    done
2035
    for f in $FILES ; do
2036
        ln -sf "$source_path/$f" $f
2037
    done
2038
fi
2039

    
2040

    
2041
# build pkg-config files
2042
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2043

    
2044
pkgconfig_generate(){
2045
name=$1
2046
comment=$2
2047
version=$3
2048
libs=$4
2049
requires=$5
2050
include=$6
2051
cat <<EOF >$name.pc
2052
prefix=$PREFIX
2053
exec_prefix=\${prefix}
2054
libdir=\${exec_prefix}/lib
2055
includedir=\${prefix}/include
2056

    
2057
Name: $name
2058
Description: $comment
2059
Version: $version
2060
Requires: $requires
2061
Conflicts:
2062
Libs: -L\${libdir} $libs
2063
Cflags: -I\${includedir} -I\${includedir}/$include
2064
EOF
2065
}
2066

    
2067
pkgconfig_generate_uninstalled(){
2068
name=$1
2069
shortname=${name#lib}
2070
comment=$2
2071
version=$3
2072
libs=$4
2073
requires=$5
2074
cat <<EOF >$name-uninstalled.pc
2075
prefix=
2076
exec_prefix=
2077
libdir=\${pcfiledir}/$name
2078
includedir=\${pcfiledir}/$name
2079

    
2080
Name: $name
2081
Description: $comment
2082
Version: $version
2083
Requires: $requires
2084
Conflicts:
2085
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2086
Cflags: -I\${includedir}
2087
EOF
2088
}
2089

    
2090
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2091
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2092

    
2093
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2094
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2095

    
2096
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2097
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2098

    
2099
if enabled pp; then
2100
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2101
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2102
fi
2103

    
2104
if enabled swscaler; then
2105
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2106
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2107
else
2108
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2109
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2110
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2111
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2112
fi