Statistics
| Branch: | Revision:

ffmpeg / configure @ 4e68cb8a

History | View | Annotate | Download (57.6 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
    gethrtime
681
    GetProcessTimes
682
    getrusage
683
    imlib2
684
    inet_aton
685
    lrintf
686
    machine_ioctl_bt848_h
687
    machine_ioctl_meteor_h
688
    malloc_h
689
    memalign
690
    mkstemp
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)/libavutil'
1167
    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1168
    if enabled swscaler; then
1169
        VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1170
        VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1171
    fi
1172
    ffserver="no"
1173
    network="no"
1174
    SLIBPREF=""
1175
    SLIBSUF=".dll"
1176
    EXESUF=".exe"
1177
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1178
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1179
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1180
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(SHLIBDIR)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1181
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base"
1182
    enabled network && add_extralibs -lws2_32
1183
    ;;
1184
  cygwin*)
1185
    targetos=cygwin
1186
    shlibdir="$bindir"
1187
    dv1394="no"
1188
    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1189
    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1190
    if enabled swscaler; then
1191
        VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1192
        VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1193
    fi
1194
    osextralibs=""
1195
    EXESUF=".exe"
1196
    SLIBPREF="cyg"
1197
    SLIBSUF=".dll"
1198
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1199
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1200
    SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a -Wl,--enable-auto-image-base'
1201
    ;;
1202
  linux)
1203
    LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1204
    ;;
1205
  irix*)
1206
    targetos=irix
1207
    ranlib="echo ignoring ranlib"
1208
    ;;
1209
  *)
1210
    targetos="${targetos}-UNKNOWN"
1211
    ;;
1212
esac
1213

    
1214
add_extralibs $osextralibs
1215

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

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

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

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

    
1244
if disabled static; then
1245
    LIB=""
1246
fi
1247

    
1248
if ! enabled libogg; then
1249
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1250
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1251
fi
1252

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

    
1268

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

    
1284
check_deps $ARCH_EXT_LIST
1285

    
1286
test -z "$need_memalign" && need_memalign="$mmx"
1287

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

    
1302
disabled optimize || add_cflags -fomit-frame-pointer
1303

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

    
1374
gnu_make(){
1375
    $1 --version 2>&1 | grep -q GNU
1376
}
1377

    
1378
if ! gnu_make $make; then
1379
    gnu_make gmake && make=gmake || die "GNU make not found."
1380
fi
1381

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

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

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

    
1425
    # check wether EBX is available on x86
1426
    check_cc <<EOF && enable ebx_available
1427
int main(){
1428
    asm volatile ("":::"%ebx");
1429
}
1430
EOF
1431

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

    
1440
# check for assembler specific support
1441

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

    
1453
# check for SIMD availability
1454

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

    
1463
    check_header altivec.h
1464

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

    
1481
# check armv5te instructions support
1482
enabled armv5te && check_cc <<EOF || disable armv5te
1483
int main(void) {
1484
    __asm__ __volatile__ ("qadd r0, r0, r0");
1485
}
1486
EOF
1487

    
1488
enabled armv6 && check_cc <<EOF || disable armv6
1489
int main(void) {
1490
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1491
}
1492
EOF
1493

    
1494
# check iwmmxt support
1495
enabled iwmmxt && check_cc <<EOF || disable iwmmxt
1496
int main(void) {
1497
    __asm__ __volatile__ ("wunpckelub wr6, wr4");
1498
}
1499
EOF
1500

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

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

    
1526
# ---
1527
# check availability of some header files
1528

    
1529
check_header malloc.h
1530
check_func memalign
1531

    
1532
if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1533
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1534
fi
1535

    
1536
check_header byteswap.h
1537

    
1538
check_func mkstemp
1539
check_func gethrtime
1540

    
1541
check_header termios.h
1542
check_header conio.h
1543

    
1544
check_header arpa/inet.h
1545
check_header winsock2.h
1546

    
1547
check_func inet_aton
1548
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1549

    
1550
# ffserver uses poll(),
1551
# if it's not found we can emulate it using select().
1552
if enabled ffserver; then
1553
    check_header sys/poll.h
1554
fi
1555

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

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

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

    
1589
enabled_any libamr_nb libamr_wb && enable libamr
1590

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

    
1609
# disable the native AC-3 decoder if liba52 is enabled
1610
enabled liba52 && disable ac3_decoder
1611

    
1612
_restrict=
1613
for restrict_keyword in restrict __restrict__ __restrict; do
1614
    check_cc <<EOF && _restrict=$restrict_keyword && break
1615
void foo(char * $restrict_keyword p);
1616
EOF
1617
done
1618

    
1619
# dlopen/dlfcn.h probing
1620

    
1621
check_header dlfcn.h
1622

    
1623
if check_func dlopen; then
1624
    ldl=
1625
elif check_func dlopen -ldl; then
1626
    ldl=-ldl
1627
fi
1628

    
1629
check_func getrusage
1630
check_func2 windows.h GetProcessTimes
1631

    
1632
check_func fork
1633
check_func closesocket ||
1634
    check_func2 winsock2.h closesocket
1635

    
1636
test "$vhook" = "default" && vhook="$dlopen"
1637

    
1638
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1639

    
1640
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1641
    vhook="no"
1642
    echo
1643
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1644
    echo "Patches welcome."
1645
    echo
1646
fi
1647

    
1648
if enabled vhook; then
1649
    check_ldflags -rdynamic
1650
    check_ldflags -export-dynamic
1651
fi
1652

    
1653
enabled audio_beos && add_extralibs "-lmedia -lbe"
1654

    
1655
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1656
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1657

    
1658
##########################################
1659
# SDL check
1660

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

    
1687
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1688

    
1689
##########################################
1690
# IPv6 check
1691

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

    
1706
enabled v4l  && check_header linux/videodev.h  || disable v4l
1707
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1708

    
1709
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1710
if enabled bktr; then
1711
    { check_header dev/bktr/ioctl_meteor.h &&
1712
      check_header dev/bktr/ioctl_bt848.h; } ||
1713
    { check_header machine/ioctl_meteor.h &&
1714
      check_header machine/ioctl_bt848.h; } ||
1715
    { check_header dev/video/meteor/ioctl_meteor.h &&
1716
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1717
    check_header dev/ic/bt8xx.h ||
1718
    disable bktr
1719
fi
1720

    
1721
enabled audio_oss &&
1722
    check_header sys/soundcard.h ||
1723
    check_header soundcard.h ||
1724
    disable audio_oss
1725

    
1726
# Deal with the x11 frame grabber
1727
enabled x11grab                         &&
1728
enabled gpl                             &&
1729
enabled x11_grab_device_demuxer         &&
1730
check_header X11/Xlib.h                 &&
1731
check_header X11/extensions/XShm.h      &&
1732
check_func XOpenDisplay -lX11           &&
1733
check_func XShmCreateImage -lX11 -lXext &&
1734
add_extralibs -lX11 -lXext              ||
1735
disable x11_grab_device_demuxer
1736

    
1737
enabled debug && add_cflags -g
1738

    
1739
# add some useful compiler flags if supported
1740
check_cflags -Wdeclaration-after-statement
1741
check_cflags -Wall
1742
check_cflags -Wno-switch
1743
check_cflags -Wdisabled-optimization
1744
check_cflags -Wpointer-arith
1745
check_cflags -Wredundant-decls
1746
check_cflags -Wno-pointer-sign
1747
enabled extra_warnings && check_cflags -Winline
1748

    
1749
# add some linker flags
1750
check_ldflags -Wl,--warn-common
1751
check_ldflags $LDLATEFLAGS
1752

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

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

    
1775
if enabled gprof; then
1776
    add_cflags  "-p"
1777
    add_ldflags "-p"
1778
fi
1779

    
1780
VHOOKCFLAGS="-fPIC"
1781

    
1782
# find if .align arg is power-of-two or not
1783
if test $asmalign_pot = "unknown"; then
1784
    asmalign_pot="no"
1785
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1786
fi
1787

    
1788
enabled_any $ENCODER_LIST  && enable encoders
1789
enabled_any $DECODER_LIST  && enable decoders
1790
enabled_any $MUXER_LIST    && enable muxers
1791
enabled_any $DEMUXER_LIST  && enable demuxers
1792
enabled_any $PROTOCOL_LIST && enable protocols
1793
enabled_any $BSF_LIST      && enable bsfs
1794

    
1795
enabled_any $THREADS_LIST  && enable threads
1796

    
1797
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1798
    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1799

    
1800
enabled libogg    && append pkg_requires "ogg >= 1.1"
1801
enabled libtheora && append pkg_requires "theora"
1802
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1803
enabled dc1394    && append pkg_requires "libraw1394"
1804

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

    
1878
echo "Creating config.mak and config.h..."
1879

    
1880
echo "# Automatically generated by configure - do not modify!" > config.mak
1881
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1882
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1883

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

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

    
1919
if enabled bigendian; then
1920
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1921
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1922
fi
1923
if enabled mmx; then
1924
  echo "#define __CPU__ 586" >> $TMPH
1925
fi
1926

    
1927
if enabled sdl; then
1928
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1929
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1930
fi
1931
if enabled texi2html; then
1932
  echo "BUILD_DOC=yes" >> config.mak
1933
fi
1934

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

    
1941

    
1942

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

    
1965
print_config ARCH_   $TMPH config.mak $ARCH_LIST
1966
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1967
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1968
                                      $DECODER_LIST  \
1969
                                      $ENCODER_LIST  \
1970
                                      $PARSER_LIST   \
1971
                                      $BSF_LIST      \
1972
                                      $DEMUXER_LIST  \
1973
                                      $MUXER_LIST    \
1974
                                      $PROTOCOL_LIST \
1975

    
1976
if test "$targetos" = darwin; then
1977
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1978
fi
1979

    
1980
echo "#define restrict $_restrict" >> $TMPH
1981

    
1982
if enabled small; then
1983
  echo "#define av_always_inline"  >> $TMPH
1984
fi
1985

    
1986
echo "SRC_PATH=\"$source_path\"" >> config.mak
1987
echo "SRC_PATH_BARE=$source_path" >> config.mak
1988
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1989

    
1990
# Apparently it's not possible to portably echo a backslash.
1991
if enabled asmalign_pot; then
1992
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1993
else
1994
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1995
fi
1996

    
1997

    
1998
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1999
if ! cmp -s $TMPH config.h; then
2000
        mv -f $TMPH config.h
2001
else
2002
        echo "config.h is unchanged"
2003
fi
2004

    
2005
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2006

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

    
2045

    
2046
# build pkg-config files
2047
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2048

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

    
2062
Name: $name
2063
Description: $comment
2064
Version: $version
2065
Requires: $requires
2066
Conflicts:
2067
Libs: -L\${libdir} $libs
2068
Cflags: -I\${includedir} -I\${includedir}/$include
2069
EOF
2070
}
2071

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

    
2085
Name: $name
2086
Description: $comment
2087
Version: $version
2088
Requires: $requires
2089
Conflicts:
2090
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2091
Cflags: -I\${includedir}
2092
EOF
2093
}
2094

    
2095
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2096
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2097

    
2098
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2099
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2100

    
2101
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2102
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2103

    
2104
if enabled pp; then
2105
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2106
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2107
fi
2108

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