Statistics
| Branch: | Revision:

ffmpeg / configure @ 3ae3b721

History | View | Annotate | Download (57.1 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
413
check_ld(){
414
    log check_ld "$@"
415
    check_cc || return
416
    flags=''
417
    libs=''
418
    for f; do
419
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
420
    done
421
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
422
}
423

    
424
check_cflags(){
425
    log check_cflags "$@"
426
    check_cc "$@" <<EOF && add_cflags "$@"
427
int x;
428
EOF
429
}
430

    
431
check_ldflags(){
432
    log check_ldflags "$@"
433
    check_ld "$@" <<EOF && add_ldflags "$@"
434
int main(){
435
    return 0;
436
}
437
EOF
438
}
439

    
440
check_header(){
441
    log check_header "$@"
442
    header=$1
443
    shift
444
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
445
    disable $var
446
    check_cpp "$@" <<EOF && enable $var
447
#include <$header>
448
int x;
449
EOF
450
}
451

    
452
check_func(){
453
    log check_func "$@"
454
    func=$1
455
    shift
456
    disable $func
457
    check_ld "$@" <<EOF && enable $func
458
extern int $func();
459
int main(){
460
    $func();
461
}
462
EOF
463
}
464

    
465
check_func2(){
466
    log check_func2 "$@"
467
    headers=$1
468
    func=$2
469
    shift 2
470
    disable $func
471
    incs=""
472
    for hdr in $headers; do
473
        incs="$incs
474
#include <$hdr>"
475
    done
476
    check_ld "$@" <<EOF && enable $func
477
$incs
478
int main(){
479
    (void) $func;
480
    return 0;
481
}
482
EOF
483
}
484

    
485
check_lib(){
486
    log check_lib "$@"
487
    header="$1"
488
    func="$2"
489
    shift 2
490
    temp_extralibs "$@"
491
    check_header $header && check_func $func && add_extralibs "$@"
492
    err=$?
493
    restore_flags
494
    return $err
495
}
496

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

    
509
check_exec(){
510
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
511
}
512

    
513
check_exec_crash(){
514
    code=`cat`
515

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

    
522
    (check_exec "$@") >>$logfile 2>&1 <<EOF
523
#include <signal.h>
524
static void sighandler(int sig){
525
    raise(SIGTERM);
526
}
527
int main(){
528
    signal(SIGILL, sighandler);
529
    signal(SIGFPE, sighandler);
530
    signal(SIGSEGV, sighandler);
531
#ifdef SIGBUS
532
    signal(SIGBUS, sighandler);
533
#endif
534
    { $code }
535
}
536
EOF
537
}
538

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

    
547
require2(){
548
    name="$1"
549
    headers="$2"
550
    func="$3"
551
    shift 3
552
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
553
}
554

    
555
check_foo_config(){
556
    cfg=$1
557
    pkg=$2
558
    header=$3
559
    func=$4
560
    shift 4
561
    disable $cfg
562
    check_cmd ${pkg}-config --version
563
    err=$?
564
    if test "$err" = 0; then
565
        temp_cflags `${pkg}-config --cflags`
566
        temp_extralibs `${pkg}-config --libs`
567
        check_lib "$@" $header $func && enable $cfg
568
    fi
569
    return $err
570
}
571

    
572
apply(){
573
    file=$1
574
    shift
575
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
576
}
577

    
578
COMPONENT_LIST="
579
    bsfs
580
    decoders
581
    demuxers
582
    encoders
583
    muxers
584
    parsers
585
    protocols
586
"
587

    
588
CONFIG_LIST="
589
    $COMPONENT_LIST
590
    avisynth
591
    beos_netserver
592
    ffmpeg
593
    ffplay
594
    ffserver
595
    gpl
596
    gprof
597
    gray
598
    ipv6
599
    liba52
600
    liba52bin
601
    libamr
602
    libamr_nb
603
    libamr_wb
604
    libdc1394
605
    libfaac
606
    libfaad
607
    libfaadbin
608
    libgsm
609
    libmp3lame
610
    libnut
611
    libogg
612
    libtheora
613
    libvorbis
614
    libx264
615
    libxvid
616
    memalign_hack
617
    mpegaudio_hp
618
    network
619
    powerpc_perf
620
    pp
621
    small
622
    swscaler
623
    vhook
624
    x11grab
625
    zlib
626
"
627

    
628
THREADS_LIST='
629
    beosthreads
630
    pthreads
631
    w32threads
632
'
633

    
634
ARCH_LIST='
635
    alpha
636
    armv4l
637
    bfin
638
    ia64
639
    m68k
640
    mips
641
    parisc
642
    powerpc
643
    s390
644
    sh4
645
    sparc
646
    sparc64
647
    x86
648
    x86_32
649
    x86_64
650
'
651

    
652
ARCH_EXT_LIST='
653
    altivec
654
    armv5te
655
    armv6
656
    iwmmxt
657
    mmi
658
    mmx
659
    ssse3
660
'
661

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

    
709
CMDLINE_SELECT="
710
    $ARCH_EXT_LIST
711
    $CONFIG_LIST
712
    $THREADS_LIST
713
    debug
714
    extra_warnings
715
    shared
716
    static
717
"
718

    
719
# code dependency declarations
720

    
721
# architecture extensions
722
altivec_deps="powerpc"
723
armv5te_deps="armv4l"
724
armv6_deps="armv4l"
725
iwmmxt_deps="armv4l"
726
mmi_deps="mips"
727
mmx_deps="x86"
728
ssse3_deps="x86"
729

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

    
754
# external libraries
755
liba52_decoder_deps="liba52"
756
liba52bin_decoder_extralibs='$ldl'
757
libamr_nb_decoder_deps="libamr_nb"
758
libamr_nb_encoder_deps="libamr_nb"
759
libamr_wb_decoder_deps="libamr_wb"
760
libamr_wb_encoder_deps="libamr_wb"
761
libfaac_encoder_deps="libfaac"
762
libfaad_decoder_deps="libfaad"
763
libfaadbin_decoder_extralibs='$ldl'
764
libgsm_decoder_deps="libgsm"
765
libgsm_encoder_deps="libgsm"
766
libgsm_ms_decoder_deps="libgsm"
767
libgsm_ms_encoder_deps="libgsm"
768
libmp3lame_encoder_deps="libmp3lame"
769
libtheora_encoder_deps="libtheora"
770
libvorbis_decoder_deps="libvorbis"
771
libvorbis_encoder_deps="libvorbis"
772
libx264_encoder_deps="libx264"
773
libxvid_encoder_deps="libxvid"
774
mpeg4aac_decoder_deps="libfaad"
775

    
776
# demuxers / muxers
777
ac3_demuxer_deps="ac3_parser"
778
audio_beos_demuxer_deps="audio_beos"
779
audio_beos_demuxer_extralibs="-lmedia -lbe"
780
audio_beos_muxer_deps="audio_beos"
781
audio_beos_muxer_extralibs="-lmedia -lbe"
782
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
783
dv1394_demuxer_deps="dv1394"
784
libdc1394_demuxer_deps="libdc1394"
785
libnut_demuxer_deps="libnut"
786
libnut_muxer_deps="libnut"
787
mp3_demuxer_deps="mpegaudio_parser"
788
ogg_muxer_deps="libogg"
789
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
790
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
791
redir_demuxer_deps="network"
792
rtp_muxer_deps="network mpegts_demuxer"
793
rtsp_demuxer_deps="rtp_protocol rtp_muxer"
794
sdp_demuxer_deps="rtsp_demuxer"
795
v4l2_demuxer_deps="linux_videodev2_h"
796
v4l_demuxer_deps="linux_videodev_h"
797
x11_grab_device_demuxer_deps="x11grab"
798
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
799

    
800
# protocols
801
http_protocol_deps="network"
802
rtp_protocol_deps="udp_protocol"
803
tcp_protocol_deps="network"
804
udp_protocol_deps="network"
805

    
806
# programs
807
ffplay_deps="sdl"
808
ffserver_deps="muxers rtp_protocol"
809
ffserver_extralibs='$ldl'
810
vhook_extralibs='$ldl'
811

    
812

    
813
# set temporary file name
814
if test ! -z "$TMPDIR" ; then
815
    TMPDIR1="${TMPDIR}"
816
elif test ! -z "$TEMPDIR" ; then
817
    TMPDIR1="${TEMPDIR}"
818
else
819
    TMPDIR1="/tmp"
820
fi
821

    
822
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
823
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
824
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
825
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
826
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
827

    
828
# default parameters
829

    
830
enable logging
831
logfile="config.err"
832

    
833
# installation paths
834
PREFIX="/usr/local"
835
libdir='$(PREFIX)/lib'
836
shlibdir="$libdir"
837
incdir='$(PREFIX)/include/ffmpeg'
838
mandir='$(PREFIX)/share/man'
839
bindir='$(PREFIX)/bin'
840

    
841
# toolchain
842
cc="gcc"
843
ar="ar"
844
ranlib="ranlib"
845
make="make"
846
strip="strip"
847
asmalign_pot="unknown"
848
ln_s="ln -sf"
849

    
850
# machine
851
arch=`uname -m`
852
cpu="generic"
853

    
854
# OS
855
targetos=$(tolower $(uname -s))
856

    
857
# libraries
858
enable zlib
859

    
860
# configurable options
861
enable debug
862
enable dostrip
863
enable ffmpeg
864
enable ffplay
865
enable ffserver
866
enable ipv6
867
enable static
868
enable mpegaudio_hp
869
enable network
870
enable optimize
871
enable protocols
872
vhook="default"
873

    
874
# build settings
875
SHFLAGS='-shared -Wl,-soname,$@'
876
VHOOKSHFLAGS='$(SHFLAGS)'
877
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
878
FFSERVERLDFLAGS=-Wl,-E
879
LDCONFIG="ldconfig"
880
LIBPREF="lib"
881
LIBSUF=".a"
882
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
883
SLIBPREF="lib"
884
SLIBSUF=".so"
885
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
886
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
887
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
888
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIB)"'
889

    
890
# find source path
891
source_path="`dirname \"$0\"`"
892
enable source_path_used
893
if test -z "$source_path" -o "$source_path" = "." ; then
894
    source_path="`pwd`"
895
    disable source_path_used
896
else
897
    source_path="`cd \"$source_path\"; pwd`"
898
    echo "$source_path" | grep -q '[[:blank:]]' &&
899
      die "Out of tree builds are impossible with whitespace in source path."
900
fi
901

    
902
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
903
    show_help
904
fi
905

    
906
FFMPEG_CONFIGURATION="$@"
907

    
908
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
909
DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
910
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
911
BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
912
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
913
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
914
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
915

    
916
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
917
enable $ARCH_EXT_LIST
918

    
919
die_unknown(){
920
    echo "Unknown option \"$1\"."
921
    echo "See $0 --help for available options."
922
    exit 1
923
}
924

    
925
show_list() {
926
    for part in $*; do
927
        echo $part | sed 's/_[^_]*$//'
928
    done | sort
929
    exit 0
930
}
931

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

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

    
1088
enable $arch
1089
enabled_any x86_32 x86_64 && enable x86
1090
enabled     sparc64       && enable sparc
1091

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

    
1207
add_extralibs $osextralibs
1208

    
1209
check_ldflags -lm
1210

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

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

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

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

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

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

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

    
1263

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

    
1279
check_deps $ARCH_EXT_LIST
1280

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

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

    
1295
disabled optimize || add_cflags -fomit-frame-pointer
1296

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

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

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

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

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

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

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

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

    
1433
# check for assembler specific support
1434

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

    
1446
# check for SIMD availability
1447

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

    
1454
    check_header altivec.h
1455

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

    
1470
# check armv5te instructions support
1471
enabled armv5te && check_cc <<EOF || disable armv5te
1472
int main(void) {
1473
    __asm__ __volatile__ ("qadd r0, r0, r0");
1474
}
1475
EOF
1476

    
1477
enabled armv6 && check_cc <<EOF || disable armv6
1478
int main(void) {
1479
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1480
}
1481
EOF
1482

    
1483
# check iwmmxt support
1484
enabled iwmmxt && check_cc <<EOF || disable iwmmxt
1485
int main(void) {
1486
    __asm__ __volatile__ ("wunpckelub wr6, wr4");
1487
}
1488
EOF
1489

    
1490
# check if our compiler supports mmi
1491
enabled mmi && check_cc <<EOF || disable mmi
1492
int main(void) {
1493
    __asm__ ("lq \$2, 0(\$2)");
1494
    return 0;
1495
}
1496
EOF
1497

    
1498
# ---
1499
# big/little-endian test
1500
check_cc <<EOF || die "endian test failed"
1501
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1502
EOF
1503
grep -q BIGE $TMPO && enable bigendian
1504

    
1505
# ---
1506
# check availability of some header files
1507

    
1508
check_header malloc.h
1509
check_func memalign
1510

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

    
1515
check_header byteswap.h
1516

    
1517
check_func mkstemp
1518
check_func gethrtime
1519

    
1520
check_header termios.h
1521
check_header conio.h
1522

    
1523
check_func inet_aton
1524
enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1525

    
1526
# ffserver uses poll(),
1527
# if it's not found we can emulate it using select().
1528
if enabled ffserver; then
1529
    check_header sys/poll.h
1530
fi
1531

    
1532
# check for some common methods of building with pthread support
1533
# do this before the optional library checks as some of them require pthreads
1534
if enabled pthreads; then
1535
    if check_func pthread_create; then
1536
        :
1537
    elif check_func pthread_create -pthread; then
1538
        add_cflags -pthread
1539
        add_ldflags -pthread
1540
    elif check_func pthread_create -pthreads; then
1541
        add_cflags -pthreads
1542
        add_ldflags -pthreads
1543
    elif ! check_lib pthread.h pthread_create -lpthread; then
1544
        die "ERROR: can't find pthreads library"
1545
    fi
1546
fi
1547

    
1548
for thread in $THREADS_LIST; do
1549
    if enabled $thread; then
1550
        test -n "$thread_type" &&
1551
            die "ERROR: Only one thread type must be selected." ||
1552
            thread_type="$thread"
1553
    fi
1554
done
1555

    
1556
# test for lrintf in math.h
1557
check_exec <<EOF && enable lrintf || disable lrintf
1558
#define _ISOC9X_SOURCE  1
1559
#include <math.h>
1560
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1561
EOF
1562

    
1563
enabled_any libamr_nb libamr_wb && enable libamr
1564

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

    
1583
# disable the native AC-3 decoder if liba52 is enabled
1584
enabled liba52 && disable ac3_decoder
1585

    
1586
_restrict=
1587
for restrict_keyword in restrict __restrict__ __restrict; do
1588
    check_cc <<EOF && _restrict=$restrict_keyword && break
1589
void foo(char * $restrict_keyword p);
1590
EOF
1591
done
1592

    
1593
# dlopen/dlfcn.h probing
1594

    
1595
check_header dlfcn.h
1596

    
1597
if check_func dlopen; then
1598
    ldl=
1599
elif check_func dlopen -ldl; then
1600
    ldl=-ldl
1601
fi
1602

    
1603
check_func getrusage
1604
check_func2 windows.h GetProcessTimes
1605

    
1606
check_func fork
1607

    
1608
test "$vhook" = "default" && vhook="$dlopen"
1609

    
1610
if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1611
    disable vhook
1612
    echo
1613
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1614
    echo "Patches welcome."
1615
    echo
1616
fi
1617

    
1618
if enabled vhook; then
1619
    check_ldflags -rdynamic
1620
    check_ldflags -export-dynamic
1621
fi
1622

    
1623
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1624
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1625

    
1626
##########################################
1627
# SDL check
1628

    
1629
disable sdl_too_old
1630
disable sdl
1631
SDL_CONFIG="${cross_prefix}sdl-config"
1632
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1633
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1634
    temp_cflags $sdl_cflags
1635
    temp_extralibs `"${SDL_CONFIG}" --libs`
1636
    if check_lib SDL.h SDL_Init; then
1637
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1638
        if test "$_sdlversion" -lt 121 ; then
1639
            enable sdl_too_old
1640
        else
1641
            enable sdl
1642
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1643
#include <SDL.h>
1644
int main(void){
1645
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1646
    int w = vi->current_w;
1647
    return 0;
1648
}
1649
EOF
1650
        fi
1651
    fi
1652
    restore_flags
1653
fi
1654

    
1655
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1656

    
1657
##########################################
1658
# Network check
1659

    
1660
if enabled network; then
1661
    # Prefer arpa/inet.h over winsock2
1662
    if check_header arpa/inet.h ; then
1663
        check_func closesocket
1664
    elif check_header winsock2.h ; then
1665
        add_extralibs -lws2_32
1666
        check_func2 winsock2.h closesocket
1667
    fi
1668
fi
1669

    
1670
##########################################
1671
# IPv6 check
1672

    
1673
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1674
#include <sys/types.h>
1675
#include <sys/socket.h>
1676
#include <netinet/in.h>
1677
#include <netdb.h>
1678
int main( void ) {
1679
  struct sockaddr_storage saddr;
1680
  struct ipv6_mreq mreq6;
1681
  getaddrinfo(0,0,0,0);
1682
  getnameinfo(0,0,0,0,0,0,0);
1683
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1684
}
1685
EOF
1686

    
1687
check_header linux/videodev.h
1688
check_header linux/videodev2.h
1689

    
1690
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1691
{ check_header dev/bktr/ioctl_meteor.h &&
1692
  check_header dev/bktr/ioctl_bt848.h; } ||
1693
{ check_header machine/ioctl_meteor.h &&
1694
  check_header machine/ioctl_bt848.h; } ||
1695
{ check_header dev/video/meteor/ioctl_meteor.h &&
1696
  check_header dev/video/bktr/ioctl_bt848.h; } ||
1697
check_header dev/ic/bt8xx.h
1698

    
1699
check_header sys/soundcard.h
1700
check_header soundcard.h
1701

    
1702
# Deal with the x11 frame grabber
1703
enabled x11grab                         &&
1704
enabled x11_grab_device_demuxer         &&
1705
check_header X11/Xlib.h                 &&
1706
check_header X11/extensions/XShm.h      &&
1707
check_func XOpenDisplay -lX11           &&
1708
check_func XShmCreateImage -lX11 -lXext ||
1709
disable x11_grab_device_demuxer
1710

    
1711
enabled debug && add_cflags -g
1712

    
1713
# add some useful compiler flags if supported
1714
check_cflags -Wdeclaration-after-statement
1715
check_cflags -Wall
1716
check_cflags -Wno-switch
1717
check_cflags -Wdisabled-optimization
1718
check_cflags -Wpointer-arith
1719
check_cflags -Wredundant-decls
1720
check_cflags -Wno-pointer-sign
1721
enabled extra_warnings && check_cflags -Winline
1722

    
1723
# add some linker flags
1724
check_ldflags -Wl,--warn-common
1725
check_ldflags $LDLATEFLAGS
1726

    
1727
if enabled small; then
1728
    check_cflags -Os            # not all compilers support -Os
1729
    optimize="small"
1730
elif enabled optimize; then
1731
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1732
        add_cflags  "-O5"
1733
        add_ldflags "-O5"
1734
    else
1735
        add_cflags "-O3"
1736
    fi
1737
fi
1738

    
1739
# PIC flags for shared library objects where they are needed
1740
if enabled shared; then
1741
    # LIBOBJFLAGS may have already been set in the OS configuration
1742
    if test -z "$LIBOBJFLAGS" ; then
1743
        case "$arch" in
1744
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1745
        esac
1746
    fi
1747
fi
1748

    
1749
if enabled gprof; then
1750
    add_cflags  "-p"
1751
    add_ldflags "-p"
1752
fi
1753

    
1754
VHOOKCFLAGS="-fPIC"
1755

    
1756
# find if .align arg is power-of-two or not
1757
if test $asmalign_pot = "unknown"; then
1758
    disable asmalign_pot
1759
    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1760
fi
1761

    
1762
enabled_any $ENCODER_LIST  && enable encoders
1763
enabled_any $DECODER_LIST  && enable decoders
1764
enabled_any $MUXER_LIST    && enable muxers
1765
enabled_any $DEMUXER_LIST  && enable demuxers
1766
enabled_any $PROTOCOL_LIST && enable protocols
1767
enabled_any $BSF_LIST      && enable bsfs
1768

    
1769
enabled_any $THREADS_LIST  && enable threads
1770

    
1771
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1772
    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1773

    
1774
enabled libdc1394 && append pkg_requires "libraw1394"
1775
enabled libogg    && append pkg_requires "ogg >= 1.1"
1776
enabled libtheora && append pkg_requires "theora"
1777
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1778

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

    
1853
echo "Creating config.mak and config.h..."
1854

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

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

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

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

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

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

    
1915

    
1916

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

    
1939
print_config ARCH_   $TMPH config.mak $ARCH_LIST
1940
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1941
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1942
                                      $DECODER_LIST  \
1943
                                      $ENCODER_LIST  \
1944
                                      $PARSER_LIST   \
1945
                                      $BSF_LIST      \
1946
                                      $DEMUXER_LIST  \
1947
                                      $MUXER_LIST    \
1948
                                      $PROTOCOL_LIST \
1949

    
1950
echo "#define restrict $_restrict" >> $TMPH
1951

    
1952
if enabled small; then
1953
  echo "#define av_always_inline"  >> $TMPH
1954
fi
1955

    
1956
echo "SRC_PATH=\"$source_path\"" >> config.mak
1957
echo "SRC_PATH_BARE=$source_path" >> config.mak
1958
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1959

    
1960
# Apparently it's not possible to portably echo a backslash.
1961
enabled asmalign_pot &&
1962
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
1963
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1964

    
1965

    
1966
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1967
cmp -s $TMPH config.h &&
1968
    echo "config.h is unchanged" ||
1969
    mv -f $TMPH config.h
1970

    
1971
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1972

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

    
2012

    
2013
# build pkg-config files
2014
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2015

    
2016
pkgconfig_generate(){
2017
name=$1
2018
comment=$2
2019
version=$3
2020
libs=$4
2021
requires=$5
2022
include=$6
2023
cat <<EOF >$name.pc
2024
prefix=$PREFIX
2025
exec_prefix=\${prefix}
2026
libdir=\${exec_prefix}/lib
2027
includedir=\${prefix}/include
2028

    
2029
Name: $name
2030
Description: $comment
2031
Version: $version
2032
Requires: $requires
2033
Conflicts:
2034
Libs: -L\${libdir} $libs
2035
Cflags: -I\${includedir} -I\${includedir}/$include
2036
EOF
2037
}
2038

    
2039
pkgconfig_generate_uninstalled(){
2040
name=$1
2041
shortname=${name#lib}
2042
comment=$2
2043
version=$3
2044
libs=$4
2045
requires=$5
2046
cat <<EOF >$name-uninstalled.pc
2047
prefix=
2048
exec_prefix=
2049
libdir=\${pcfiledir}/$name
2050
includedir=\${pcfiledir}/$name
2051

    
2052
Name: $name
2053
Description: $comment
2054
Version: $version
2055
Requires: $requires
2056
Conflicts:
2057
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2058
Cflags: -I\${includedir}
2059
EOF
2060
}
2061

    
2062
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2063
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2064

    
2065
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2066
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2067

    
2068
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2069
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2070

    
2071
if enabled pp; then
2072
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2073
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2074
fi
2075

    
2076
if enabled swscaler; then
2077
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2078
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2079
else
2080
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2081
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2082
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2083
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2084
fi