Statistics
| Branch: | Revision:

ffmpeg / configure @ 0a622b98

History | View | Annotate | Download (56 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-mingw32         enable MinGW native/cross Windows compile"
66
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
67
  echo "  --enable-static          build static libraries [default=yes]"
68
  echo "  --disable-static         do not build static libraries [default=no]"
69
  echo "  --enable-shared          build shared libraries [default=no]"
70
  echo "  --disable-shared         do not build shared libraries [default=yes]"
71
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
72
  echo "                           and ffmpeg will be under GPL [default=no]"
73
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
74
  echo "  --enable-swscaler        software scaler support [default=no]"
75
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
76
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
77
  echo "  --enable-pthreads        use pthreads [default=no]"
78
  echo "  --enable-w32threads      use Win32 threads [default=no]"
79
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
80
  echo
81
  echo "External library support:"
82
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
83
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
84
  echo "                           and libraw1394 [default=no]"
85
  echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
86
  echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
87
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
88
  echo "  --enable-libdts          enable GPLed libdts support [default=no]"
89
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
90
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
91
  echo "  --enable-libfaadbin      build FAAD support with runtime linking [default=no]"
92
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
93
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
94
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
95
  echo "                           native demuxer exists [default=no]"
96
  echo "  --enable-libogg          enable Ogg muxing via libogg [default=no]"
97
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
98
  echo "  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,"
99
  echo "                           native implementations exist [default=no]"
100
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
101
  echo "  --enable-xvid            enable Xvid encoding via xvidcore,"
102
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
103
  echo "  --enable-amr_nb          enable amr_nb float audio codec"
104
  echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
105
  echo "  --enable-amr_wb          enable amr_wb float audio codec"
106
  echo "  --enable-amr_if2         enable amr_wb IF2 audio codec"
107
  echo ""
108
  echo "Advanced options (experts only):"
109
  echo "  --source-path=PATH       path to source code [$source_path]"
110
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
111
  echo "  --cross-compile          assume a cross-compiler is used"
112
  echo "  --target-os=OS           compiler targets OS [$targetos]"
113
  echo "  --cc=CC                  use C compiler CC [$cc]"
114
  echo "  --make=MAKE              use specified make [$make]"
115
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
116
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
117
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
118
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
119
  echo "  --arch=ARCH              select architecture  [$arch]"
120
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
121
  echo "                           instruction selection, may crash on older CPUs)"
122
  echo "  --enable-powerpc-perf    enable performance report on PPC"
123
  echo "                           (requires enabling PMC)"
124
  echo "  --disable-mmx            disable MMX usage"
125
  echo "  --disable-armv5te        disable armv5te usage"
126
  echo "  --disable-armv6          disable armv6 usage"
127
  echo "  --disable-iwmmxt         disable iwmmxt usage"
128
  echo "  --disable-altivec        disable AltiVec usage"
129
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
130
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
131
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
132
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
133
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
134
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
135
  echo "  --disable-network        disable network support [default=no]"
136
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
137
  echo "  --disable-zlib           disable zlib [default=no]"
138
  echo "  --disable-vhook          disable video hooking support"
139
  echo "  --disable-debug          disable debugging symbols"
140
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
141
  echo "                           MPEG audio decoding [default=no]"
142
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
143
  echo "  --disable-ffmpeg         disable ffmpeg build"
144
  echo "  --disable-ffserver       disable ffserver build"
145
  echo "  --disable-ffplay         disable ffplay build"
146
  echo "  --enable-small           optimize for size instead of speed"
147
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
148
  echo "  --disable-encoder=NAME   disables encoder NAME"
149
  echo "  --enable-encoder=NAME    enables encoder NAME"
150
  echo "  --disable-decoder=NAME   disables decoder NAME"
151
  echo "  --enable-decoder=NAME    enables decoder NAME"
152
  echo "  --disable-encoders       disables all encoders"
153
  echo "  --disable-decoders       disables all decoders"
154
  echo "  --disable-muxer=NAME     disables muxer NAME"
155
  echo "  --enable-muxer=NAME      enables muxer NAME"
156
  echo "  --disable-muxers         disables all muxers"
157
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
158
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
159
  echo "  --disable-demuxers       disables all demuxers"
160
  echo "  --enable-parser=NAME     enables parser NAME"
161
  echo "  --disable-parser=NAME    disables parser NAME"
162
  echo "  --disable-parsers        disables all parsers"
163
  echo
164
  echo "Developer options (useful when working on FFmpeg itself):"
165
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
166
  echo "  --disable-opts           disable compiler optimizations"
167
  echo "  --enable-extra-warnings  enable more compiler warnings"
168
  echo "  --disable-strip          disable stripping of executables and shared libraries"
169
  echo ""
170
  echo "NOTE: Object files are built at the place where configure is launched."
171
  exit 1
172
}
173

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

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

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

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

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

    
216
set_all(){
217
    value=$1
218
    shift
219
    for var in $*; do
220
        eval $var=$value
221
    done
222
}
223

    
224
pushvar(){
225
    for var in $*; do
226
        eval level=\${${var}_level:=0}
227
        eval ${var}_${level}="\$$var"
228
        eval ${var}_level=$(($level+1))
229
    done
230
}
231

    
232
popvar(){
233
    for var in $*; do
234
        eval level=\${${var}_level:-0}
235
        test $level = 0 && continue
236
        eval level=$(($level-1))
237
        eval $var="\${${var}_${level}}"
238
        eval ${var}_level=$level
239
        eval unset ${var}_${level}
240
    done
241
}
242

    
243
enable(){
244
    set_all yes $*
245
}
246

    
247
disable(){
248
    set_all no $*
249
}
250

    
251
enabled(){
252
    eval test "x\$$1" = "xyes"
253
}
254

    
255
disabled(){
256
    eval test "x\$$1" = "xno"
257
}
258

    
259
enabled_all(){
260
    for opt; do
261
        enabled $opt || return 1
262
    done
263
}
264

    
265
disabled_all(){
266
    for opt; do
267
        disabled $opt || return 1
268
    done
269
}
270

    
271
enabled_any(){
272
    for opt; do
273
        enabled $opt && return 0
274
    done
275
}
276

    
277
disabled_any(){
278
    for opt; do
279
        disabled $opt && return 0
280
    done
281
}
282

    
283
check_deps(){
284
    for cfg; do
285
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
286
        disabled ${cfg}_checking && continue
287
        enable ${cfg}_checking
288

    
289
        eval dep_all="\$${cfg}_deps"
290
        eval dep_any="\$${cfg}_deps_any"
291

    
292
        pushvar cfg dep_all dep_any
293
        check_deps $dep_all $dep_any
294
        popvar cfg dep_all dep_any
295

    
296
        enabled_all $dep_all || disable $cfg
297
        enabled_any $dep_any || disable $cfg
298

    
299
        disable ${cfg}_checking
300
    done
301
}
302

    
303
print_config(){
304
    pfx=$1
305
    header=$2
306
    makefile=$3
307
    shift 3
308
    for cfg; do
309
        if enabled $cfg; then
310
            ucname="${pfx}`toupper $cfg`"
311
            echo "#define ${ucname} 1" >> $header
312
            echo "${ucname}=yes" >> $makefile
313
        fi
314
    done
315
}
316

    
317
flags_saved(){
318
    (: ${SAVE_CFLAGS?}) 2>/dev/null
319
}
320

    
321
save_flags(){
322
    flags_saved && return
323
    SAVE_CFLAGS="$CFLAGS"
324
    SAVE_LDFLAGS="$LDFLAGS"
325
    SAVE_extralibs="$extralibs"
326
}
327

    
328
restore_flags(){
329
    flags_saved || return
330
    CFLAGS="$SAVE_CFLAGS"
331
    LDFLAGS="$SAVE_LDFLAGS"
332
    extralibs="$SAVE_extralibs"
333
    unset SAVE_CFLAGS
334
    unset SAVE_LDFLAGS
335
    unset SAVE_extralibs
336
}
337

    
338
temp_cflags(){
339
    save_flags
340
    CFLAGS="$CFLAGS $*"
341
}
342

    
343
temp_ldflags(){
344
    save_flags
345
    LDFLAGS="$LDFLAGS $*"
346
}
347

    
348
temp_extralibs(){
349
    save_flags
350
    extralibs="$extralibs $*"
351
}
352

    
353
append(){
354
    var=$1
355
    shift
356
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
357
    eval "$var=\"\$$var $*\""
358
}
359

    
360
add_cflags(){
361
    append CFLAGS "$@"
362
}
363

    
364
add_ldflags(){
365
    append LDFLAGS "$@"
366
}
367

    
368
add_extralibs(){
369
    append extralibs "$@"
370
}
371

    
372
check_cmd(){
373
    log "$@"
374
    "$@" >>$logfile 2>&1
375
}
376

    
377
check_cc(){
378
    log check_cc "$@"
379
    cat >$TMPC
380
    log_file $TMPC
381
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
382
}
383

    
384
check_cpp(){
385
    log check_cpp "$@"
386
    cat >$TMPC
387
    log_file $TMPC
388
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
389
}
390

    
391
check_ld(){
392
    log check_ld "$@"
393
    check_cc || return
394
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
395
}
396

    
397
check_cflags(){
398
    log check_cflags "$@"
399
    check_cc "$@" <<EOF && add_cflags "$@"
400
int x;
401
EOF
402
}
403

    
404
check_ldflags(){
405
    log check_ldflags "$@"
406
    check_ld "$@" <<EOF && add_ldflags "$@"
407
int main(){
408
    return 0;
409
}
410
EOF
411
}
412

    
413
check_header(){
414
    log check_header "$@"
415
    header=$1
416
    shift
417
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
418
    disable $var
419
    check_cpp "$@" <<EOF && enable $var
420
#include <$header>
421
int x;
422
EOF
423
}
424

    
425
check_func(){
426
    log check_func "$@"
427
    func=$1
428
    shift
429
    disable $func
430
    check_ld "$@" <<EOF && enable $func
431
extern int $func();
432
int main(){
433
    $func();
434
}
435
EOF
436
}
437

    
438
check_lib(){
439
    log check_lib "$@"
440
    header="$1"
441
    func="$2"
442
    shift 2
443
    temp_extralibs "$@"
444
    check_header $header && check_func $func && add_extralibs "$@"
445
    err=$?
446
    restore_flags
447
    return $err
448
}
449

    
450
check_exec(){
451
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
452
}
453

    
454
require(){
455
    name="$1"
456
    header="$2"
457
    func="$3"
458
    shift 3
459
    check_lib $header $func "$@" || die "ERROR: $name not found"
460
}
461

    
462
apply(){
463
    file=$1
464
    shift
465
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
466
}
467

    
468
CONFIG_LIST='
469
    encoders
470
    decoders
471
    parsers
472
    muxers
473
    demuxers
474
    amr
475
    amr_nb
476
    amr_nb_fixed
477
    amr_wb
478
    audio_beos
479
    audio_oss
480
    avisynth
481
    beos_netserver
482
    bktr
483
    dc1394
484
    dv1394
485
    ffmpeg
486
    ffplay
487
    ffserver
488
    gpl
489
    gprof
490
    ipv6
491
    liba52
492
    liba52bin
493
    libdts
494
    libfaac
495
    libfaad
496
    libfaadbin
497
    libgsm
498
    libmp3lame
499
    libnut
500
    libogg
501
    libtheora
502
    libvorbis
503
    memalign_hack
504
    mpegaudio_hp
505
    network
506
    powerpc_perf
507
    pp
508
    protocols
509
    swscaler
510
    vhook
511
    v4l
512
    v4l2
513
    wince
514
    x11grab
515
    x264
516
    xvid
517
    zlib
518
'
519

    
520
HAVE_LIST='
521
    altivec
522
    altivec_h
523
    armv5te
524
    armv6
525
    beosthreads
526
    byteswap_h
527
    cmov
528
    dcbzl
529
    dev_bktr_ioctl_bt848_h
530
    dev_bktr_ioctl_meteor_h
531
    dev_ic_bt8xx_h
532
    dev_video_meteor_ioctl_meteor_h
533
    dev_video_bktr_ioctl_bt848_h
534
    dlfcn_h
535
    dlopen
536
    fast_cmov
537
    freetype2
538
    imlib2
539
    inet_aton
540
    iwmmxt
541
    localtime_r
542
    lrintf
543
    machine_ioctl_bt848_h
544
    machine_ioctl_meteor_h
545
    malloc_h
546
    memalign
547
    mlib
548
    mmi
549
    mmx
550
    os2
551
    os2threads
552
    pthreads
553
    sdl
554
    sdl_video_size
555
    soundcard_h
556
    sys_poll_h
557
    sys_soundcard_h
558
    threads
559
    w32threads
560
'
561

    
562
TARGET_LIST='
563
    altivec
564
    armv5te
565
    armv6
566
    iwmmxt
567
    mmi
568
    mmx
569
'
570

    
571
CMDLINE_SELECT="
572
    $CONFIG_LIST
573
    $TARGET_LIST
574
    amr_if2
575
    debug
576
    extra_warnings
577
    mingw32
578
    shared
579
    static
580
    beosthreads
581
    os2threads
582
    pthreads
583
    w32threads
584
"
585

    
586
flashsv_decoder_deps="zlib"
587
flashsv_encoder_deps="zlib"
588
mpeg_xvmc_decoder_deps="xvmc"
589
png_decoder_deps="zlib"
590
png_encoder_deps="zlib"
591
x264_encoder_deps="x264"
592
xvid_encoder_deps="xvid"
593
zmbv_decoder_deps="zlib"
594
zmbv_encoder_deps="zlib"
595

    
596
aac_decoder_deps="libfaad"
597
mpeg4aac_decoder_deps="libfaad"
598
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
599
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
600
amr_wb_decoder_deps="amr_wb"
601
amr_wb_encoder_deps="amr_wb"
602
dts_decoder_deps="libdts"
603
faac_encoder_deps="libfaac"
604
liba52_decoder_deps="liba52"
605
libgsm_decoder_deps="libgsm"
606
libgsm_encoder_deps="libgsm"
607
libtheora_encoder_deps="libtheora"
608
mp3lame_encoder_deps="libmp3lame"
609
oggvorbis_decoder_deps="libvorbis"
610
oggvorbis_encoder_deps="libvorbis"
611

    
612
audio_demuxer_deps_any="audio_oss audio_beos"
613
audio_muxer_deps_any="audio_oss audio_beos"
614
dc1394_demuxer_deps="dc1394"
615
dv1394_demuxer_deps="dv1394"
616
gxf_muxer_deps="gpl"
617
libnut_demuxer_deps="libnut"
618
libnut_muxer_deps="libnut"
619
ogg_muxer_deps="libogg"
620
redir_demuxer_deps="network"
621
rtp_muxer_deps="network"
622
rtsp_demuxer_deps="network"
623
sdp_demuxer_deps="network"
624
v4l2_demuxer_deps="v4l2"
625
video_grab_device_demuxer_deps_any="v4l bktr"
626
x11_grab_device_demuxer_deps="x11grab"
627

    
628
ffplay_deps="sdl"
629
ffserver_deps="network protocols muxers"
630
network_deps="protocols"
631

    
632
# set temporary file name
633
if test ! -z "$TMPDIR" ; then
634
    TMPDIR1="${TMPDIR}"
635
elif test ! -z "$TEMPDIR" ; then
636
    TMPDIR1="${TEMPDIR}"
637
else
638
    TMPDIR1="/tmp"
639
fi
640

    
641
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
642
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
643
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
644
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
645
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
646

    
647
# default parameters
648

    
649
logging="yes"
650
logfile="config.err"
651

    
652
# installation paths
653
PREFIX="/usr/local"
654
libdir='${PREFIX}/lib'
655
shlibdir="$libdir"
656
incdir='${PREFIX}/include/ffmpeg'
657
mandir='${PREFIX}/man'
658
bindir='${PREFIX}/bin'
659

    
660
# toolchain
661
cross_prefix=""
662
cross_compile="no"
663
cc="gcc"
664
ar="ar"
665
ranlib="ranlib"
666
make="make"
667
strip="strip"
668
asmalign_pot="unknown"
669

    
670
# machine
671
arch=`uname -m`
672
cpu="generic"
673
powerpc_perf="no"
674
mmx="default"
675
cmov="no"
676
fast_cmov="no"
677
armv5te="default"
678
armv6="default"
679
iwmmxt="default"
680
altivec="default"
681
dcbzl="no"
682
mmi="default"
683
bigendian="no"
684

    
685
# OS
686
targetos=`uname -s`
687
beos_netserver="no"
688
mingw32="no"
689
os2="no"
690
wince="no"
691

    
692
# non-library system interfaces
693
audio_beos="default"
694
audio_oss="yes"
695
bktr="yes"
696
dv1394="yes"
697
v4l2="yes"
698
v4l="yes"
699

    
700
# libraries
701
amr_if2="no"
702
amr_nb="no"
703
amr_nb_fixed="no"
704
amr_wb="no"
705
avisynth="no"
706
dc1394="no"
707
dlfcn_h="no"
708
dlopen="no"
709
liba52="no"
710
liba52bin="no"
711
libdts="no"
712
libfaac="no"
713
libfaad2="no"
714
libfaad="no"
715
libfaadbin="no"
716
libgsm="no"
717
libmp3lame="no"
718
libnut="no"
719
libogg="no"
720
libtheora="no"
721
libvorbis="no"
722
mlib="no"
723
x11grab="no"
724
x264="no"
725
xvid="no"
726
zlib="yes"
727

    
728
# configurable options
729
debug="yes"
730
dostrip="yes"
731
extra_warnings="no"
732
ffmpeg="yes"
733
ffplay="yes"
734
ffserver="yes"
735
gpl="no"
736
gprof="no"
737
ipv6="yes"
738
shared="no"
739
static="yes"
740
memalign_hack="no"
741
mpegaudio_hp="yes"
742
network="yes"
743
optimize="yes"
744
pp="no"
745
protocols="yes"
746
swscaler="no"
747
vhook="default"
748

    
749
# threading
750
beosthreads="no"
751
os2threads="no"
752
pthreads="no"
753
w32threads="no"
754
thread_type="no"
755

    
756
# build settings
757
SHFLAGS='-shared -Wl,-soname,$@'
758
VHOOKSHFLAGS='$(SHFLAGS)'
759
LIBOBJFLAGS=""
760
FFLDFLAGS=-Wl,--warn-common
761
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
762
FFSERVERLDFLAGS=-Wl,-E
763
LDCONFIG="ldconfig"
764
LIBPREF="lib"
765
LIBSUF=".a"
766
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
767
SLIBPREF="lib"
768
SLIBSUF=".so"
769
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
770
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
771
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
772
EXESUF=""
773
BUILDSUF=""
774
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
775

    
776
# find source path
777
source_path="`dirname \"$0\"`"
778
source_path_used="yes"
779
if test -z "$source_path" -o "$source_path" = "." ; then
780
    source_path="`pwd`"
781
    source_path_used="no"
782
else
783
    source_path="`cd \"$source_path\"; pwd`"
784
    echo "$source_path" | grep -q '[[:blank:]]' &&
785
      die "Out of tree builds are impossible with whitespace in source path."
786
fi
787

    
788
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
789
    show_help
790
fi
791

    
792
FFMPEG_CONFIGURATION="$@"
793

    
794
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
795
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
796
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
797
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
798
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
799

    
800
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
801

    
802
die_unknown(){
803
    echo "Unknown option \"$1\"."
804
    echo "See $0 --help for available options."
805
    exit 1
806
}
807

    
808
for opt do
809
  optval="${opt#*=}"
810
  case "$opt" in
811
  --log)
812
  ;;
813
  --log=*) logging="$optval"
814
  ;;
815
  --prefix=*) PREFIX="$optval"
816
  ;;
817
  --libdir=*) libdir="$optval"
818
  ;;
819
  --shlibdir=*) shlibdir="$optval"
820
  ;;
821
  --incdir=*) incdir="$optval"
822
  ;;
823
  --mandir=*) mandir="$optval"
824
  ;;
825
  --source-path=*) source_path="$optval"
826
  ;;
827
  --cross-prefix=*) cross_prefix="$optval"
828
  ;;
829
  --cross-compile) cross_compile="yes"
830
  ;;
831
  --target-os=*) targetos="$optval"
832
  ;;
833
  --cc=*) cc="$optval"
834
  ;;
835
  --make=*) make="$optval"
836
  ;;
837
  --extra-cflags=*) add_cflags "$optval"
838
  ;;
839
  --extra-ldflags=*) add_ldflags "$optval"
840
  ;;
841
  --extra-libs=*) add_extralibs "$optval"
842
  ;;
843
  --build-suffix=*) BUILDSUF="$optval"
844
  ;;
845
  --arch=*) arch="$optval"
846
  ;;
847
  --cpu=*) cpu="$optval"
848
  ;;
849
  --enable-mingwce) wince="yes"
850
  ;;
851
  --disable-opts) optimize="no"
852
  ;;
853
  --enable-small) optimize="small"
854
  ;;
855
  --enable-sunmlib) mlib="yes"
856
  ;;
857
  --disable-strip) dostrip="no"
858
  ;;
859
  --disable-encoders) disable $ENCODER_LIST
860
  ;;
861
  --disable-decoders) disable $DECODER_LIST
862
  ;;
863
  --disable-muxers) disable $MUXER_LIST
864
  ;;
865
  --disable-demuxers) disable $DEMUXER_LIST
866
  ;;
867
  --disable-parsers) disable $PARSER_LIST
868
  ;;
869
  --enable-*=*|--disable-*=*)
870
  eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
871
  case "$thing" in
872
      encoder|decoder|muxer|demuxer|parser) $action ${optval}_${thing} ;;
873
      *) die_unknown "$opt" ;;
874
  esac
875
  ;;
876
  --enable-?*|--disable-?*)
877
  eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
878
  echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
879
  $action $option
880
  ;;
881
  --help) show_help
882
  ;;
883
  *)
884
  die_unknown $opt
885
  ;;
886
  esac
887
done
888

    
889
case "$arch" in
890
  i386|i486|i586|i686|i86pc|BePC)
891
    arch="x86_32"
892
  ;;
893
  x86_64|amd64)
894
    arch="x86_32"
895
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
896
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
897
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
898
        arch="x86_64"
899
      fi
900
    fi
901
  ;;
902
  # armv4l is a subset of armv[567]*l
903
  arm|armv[4567]*l)
904
    arch="armv4l"
905
  ;;
906
  alpha)
907
    arch="alpha"
908
  ;;
909
  "Power Macintosh"|ppc|ppc64|powerpc)
910
    arch="powerpc"
911
  ;;
912
  mips|mipsel|IP*)
913
    arch="mips"
914
  ;;
915
  sun4u|sparc64)
916
    arch="sparc64"
917
  ;;
918
  sparc)
919
    arch="sparc"
920
  ;;
921
  sh4)
922
    arch="sh4"
923
  ;;
924
  parisc|parisc64)
925
    arch="parisc"
926
  ;;
927
  s390|s390x)
928
    arch="s390"
929
  ;;
930
  m68k)
931
    arch="m68k"
932
  ;;
933
  ia64)
934
    arch="ia64"
935
  ;;
936
  bfin)
937
    arch="bfin"
938
  ;;
939
  *)
940
    arch="unknown"
941
  ;;
942
esac
943

    
944
# OS specific
945
osextralibs="-lm"
946
case $targetos in
947
  BeOS|Haiku|Zeta)
948
    PREFIX="$HOME/config"
949
    # helps building libavcodec
950
    add_cflags "-DPIC -fomit-frame-pointer"
951
    # 3 gcc releases known for BeOS, each with ugly bugs
952
    gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
953
    case "$gcc_version" in
954
      2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
955
        mmx="no"
956
        ;;
957
      *20010315*) echo "BeBits gcc"
958
        add_cflags "-fno-expensive-optimizations"
959
        ;;
960
    esac
961
    LDCONFIG="echo ignoring ldconfig"
962
    SHFLAGS=-nostart
963
    # disable Linux things
964
    dv1394="no"
965
    # enable BeOS things
966
    disabled audio_beos || enable_audio_beos
967
    # no need for libm, but the inet stuff
968
    # Check for BONE
969
    # XXX: actually should check for NOT net_server
970
    if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
971
        osextralibs="-lbind -lsocket"
972
    else
973
        beos_netserver="yes"
974
        osextralibs="-lnet"
975
    fi ;;
976
  SunOS)
977
    dv1394="no"
978
    FFLDFLAGS=""
979
    FFSERVERLDFLAGS=""
980
    SHFLAGS="-shared -Wl,-h,\$@"
981
    add_extralibs "-lsocket -lnsl"
982
    ;;
983
  NetBSD)
984
    dv1394="no"
985
    add_extralibs "-lossaudio"
986
    ;;
987
  OpenBSD)
988
    dv1394="no"
989
    need_memalign="no"
990
    LIBOBJFLAGS="\$(PIC)"
991
    LDCONFIG="ldconfig -m \$(shlibdir)"
992
    SHFLAGS='-shared'
993
    SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
994
    SLIBNAME_WITH_VERSION='$(SLIBNAME)'
995
    SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
996
    add_extralibs "-lossaudio"
997
    ;;
998
  FreeBSD)
999
    dv1394="no"
1000
    need_memalign="no"
1001
    add_cflags "-pthread"
1002
    ;;
1003
  GNU/kFreeBSD)
1004
    dv1394="no"
1005
    add_cflags "-pthread"
1006
    ;;
1007
  BSD/OS)
1008
    dv1394="no"
1009
    osextralibs="-lpoll -lgnugetopt -lm"
1010
    strip="strip -d"
1011
    ;;
1012
  Darwin)
1013
    cc="cc"
1014
    dv1394="no"
1015
    need_memalign="no"
1016
    SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
1017
    VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
1018
    osextralibs=""
1019
    strip="strip -x"
1020
    FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1021
    SLIBSUF=".dylib"
1022
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
1023
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
1024
    FFSERVERLDFLAGS=-Wl,-bind_at_load
1025
    ;;
1026
  MINGW32*)
1027
    mingw32="yes"
1028
    if enabled_all shared static; then
1029
        cat <<EOF
1030
You can only build one library type at once on MinGW.
1031
Specify --disable-static --enable-shared to only build
1032
the shared libraries. To build only the static libraries
1033
you do not need to pass additional options.
1034
EOF
1035
        exit 1
1036
    fi
1037
    dv1394="no"
1038
    ffserver="no"
1039
    network="no"
1040
    if enabled wince; then
1041
        protocols="no"
1042
    fi
1043
    SLIBPREF=""
1044
    SLIBSUF=".dll"
1045
    EXESUF=".exe"
1046
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1047
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1048
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1049
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1050
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1051
    ;;
1052
  CYGWIN*)
1053
    targetos=CYGWIN
1054
    shlibdir="$bindir"
1055
    dv1394="no"
1056
    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1057
    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1058
    osextralibs=""
1059
    EXESUF=".exe"
1060
    SLIBPREF="cyg"
1061
    SLIBSUF=".dll"
1062
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1063
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1064
    SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
1065
    ;;
1066
  Linux)
1067
    LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1068
    ;;
1069
  IRIX*)
1070
    targetos=IRIX
1071
    ranlib="echo ignoring ranlib"
1072
    ;;
1073
  OS/2)
1074
    TMPE=$TMPE".exe"
1075
    ar="emxomfar -p128"
1076
    ranlib="echo ignoring ranlib"
1077
    strip="echo ignoring strip"
1078
    add_cflags "-Zomf"
1079
    FFLDFLAGS="-Zomf -Zstack 16384 -s"
1080
    SHFLAGS="-Zdll -Zomf"
1081
    FFSERVERLDFLAGS=""
1082
    LIBPREF=""
1083
    LIBSUF=".lib"
1084
    SLIBPREF=""
1085
    SLIBSUF=".dll"
1086
    EXESUF=".exe"
1087
    osextralibs=""
1088
    pkg_requires=""
1089
    dv1394="no"
1090
    ffserver="no"
1091
    vhook="no"
1092
    os2="yes"
1093
    ;;
1094
  *)
1095
    targetos="${targetos}-UNKNOWN"
1096
    ;;
1097
esac
1098

    
1099
add_extralibs $osextralibs
1100

    
1101
if ! disabled logging ; then
1102
    enabled logging || logfile="$logging"
1103
    echo "# $0 $@" >$logfile
1104
    set >>$logfile
1105
else
1106
    logfile=/dev/null
1107
fi
1108

    
1109
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1110
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1111

    
1112
test -n "$cross_prefix" && cross_compile=yes
1113
cc="${cross_prefix}${cc}"
1114
ar="${cross_prefix}${ar}"
1115
ranlib="${cross_prefix}${ranlib}"
1116
strip="${cross_prefix}${strip}"
1117

    
1118
# we need to build at least one lib type
1119
if disabled_all static shared; then
1120
    cat <<EOF
1121
At least one library type must be built.
1122
Specify --enable-static to build the static libraries or --enable-shared to
1123
build the shared libraries as well. To only build the shared libraries specify
1124
--disable-static in addition to --enable-shared.
1125
EOF
1126
    exit 1;
1127
fi
1128

    
1129
if disabled libogg; then
1130
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1131
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1132
fi
1133

    
1134
if enabled_any libfaad libfaadbin ; then
1135
    if check_header faad.h; then
1136
        check_cc << EOF
1137
#include <faad.h>
1138
#ifndef FAAD2_VERSION
1139
ok faad1
1140
#endif
1141
int main( void ) { return 0; }
1142
EOF
1143
        test $? = 0 && enable libfaad2
1144
    else
1145
        die "FAAD test failed."
1146
    fi
1147
fi
1148

    
1149

    
1150
if disabled gpl ; then
1151
    die_gpl_disabled(){
1152
        name=$1
1153
        shift
1154
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1155
    }
1156
    die_gpl_disabled "The Postprocessing code" pp
1157
    die_gpl_disabled "liba52"                  liba52
1158
    die_gpl_disabled "libxvidcore"             xvid
1159
    die_gpl_disabled "x264"                    x264
1160
    die_gpl_disabled "libdts"                  libdts
1161
    die_gpl_disabled "FAAD2"                   libfaad2
1162
    die_gpl_disabled "The X11 grabber"         x11grab
1163
    die_gpl_disabled "The software scaler"     swscaler
1164
fi
1165

    
1166
# compute MMX state
1167
if test $mmx = "default"; then
1168
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1169
        mmx="yes"
1170
    else
1171
        mmx="no"
1172
    fi
1173
fi
1174

    
1175
test -z "$need_memalign" && need_memalign="$mmx"
1176

    
1177
#Darwin CC versions
1178
needmdynamicnopic="no"
1179
if test $targetos = Darwin; then
1180
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1181
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1182
    else
1183
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1184
        case "$gcc_version" in
1185
            *2.95*)
1186
                add_cflags "-no-cpp-precomp -pipe"
1187
                ;;
1188
            *[34].*)
1189
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1190
                if disabled shared; then
1191
                   needmdynamicnopic="yes"
1192
                fi
1193
                ;;
1194
            *)
1195
                add_cflags "-no-cpp-precomp -pipe"
1196
                if disabled shared; then
1197
                   needmdynamicnopic="yes"
1198
                fi
1199
                ;;
1200
        esac
1201
    fi
1202
fi
1203

    
1204
disabled optimize || add_cflags -fomit-frame-pointer
1205

    
1206
# Can only do AltiVec on PowerPC
1207
if test $altivec = "default"; then
1208
    if test $arch = "powerpc"; then
1209
        altivec="yes"
1210
    else
1211
        altivec="no"
1212
    fi
1213
fi
1214

    
1215
# Add processor-specific flags
1216
POWERPCMODE="32bits"
1217
if test $cpu != "generic"; then
1218
    warn_altivec(){
1219
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1220
    }
1221
    case $cpu in
1222
        601|ppc601|PowerPC601)
1223
            add_cflags "-mcpu=601"
1224
            warn_altivec enabled PPC601
1225
        ;;
1226
        603*|ppc603*|PowerPC603*)
1227
            add_cflags "-mcpu=603"
1228
            warn_altivec enabled PPC603
1229
        ;;
1230
        604*|ppc604*|PowerPC604*)
1231
            add_cflags "-mcpu=604"
1232
            warn_altivec enabled PPC604
1233
        ;;
1234
        G3|g3|75*|ppc75*|PowerPC75*)
1235
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1236
            warn_altivec enabled PPC75x
1237
        ;;
1238
        G4|g4|745*|ppc745*|PowerPC745*)
1239
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1240
            warn_altivec disabled PPC745x
1241
        ;;
1242
        74*|ppc74*|PowerPC74*)
1243
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1244
            warn_altivec disabled PPC74xx
1245
        ;;
1246
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1247
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1248
            warn_altivec disabled PPC970
1249
            POWERPCMODE="64bits"
1250
        ;;
1251
        # targets that do NOT support conditional mov (cmov)
1252
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1253
            add_cflags "-march=$cpu"
1254
            cmov="no"
1255
        ;;
1256
        # targets that do support conditional mov (cmov)
1257
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1258
            add_cflags "-march=$cpu"
1259
            cmov="yes"
1260
            fast_cmov="yes"
1261
        ;;
1262
        # targets that do support conditional mov but on which it's slow
1263
        pentium4|prescott|nocona)
1264
            add_cflags "-march=$cpu"
1265
            cmov="yes"
1266
            fast_cmov="no"
1267
        ;;
1268
        sparc64)
1269
            add_cflags "-mcpu=v9"
1270
        ;;
1271
        *)
1272
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1273
        ;;
1274
    esac
1275
fi
1276

    
1277
gnu_make(){
1278
    $1 --version 2>&1 | grep -q GNU
1279
}
1280

    
1281
if ! gnu_make $make; then
1282
    gnu_make gmake && make=gmake || die "GNU make not found."
1283
fi
1284

    
1285
# make sure we can execute files in $TMPDIR
1286
cat >$TMPE 2>>$logfile <<EOF
1287
#! /bin/sh
1288
EOF
1289
chmod +x $TMPE >>$logfile 2>&1
1290
if ! $TMPE >>$logfile 2>&1; then
1291
    cat <<EOF
1292
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1293
variable to another directory and make sure that $TMPDIR1 is not mounted
1294
noexec.
1295
EOF
1296
    die "Sanity test failed."
1297
fi
1298
rm $TMPE
1299

    
1300
# compiler sanity check
1301
check_exec <<EOF
1302
int main(){
1303
    return 0;
1304
}
1305
EOF
1306
if test "$?" != 0; then
1307
    echo "$cc is unable to create an executable file."
1308
    if test -z "$cross_prefix" && disabled cross_compile ; then
1309
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1310
        echo "Only do this if you know what cross compiling means."
1311
    fi
1312
    die "C compiler test failed."
1313
fi
1314

    
1315
# check for assembler specific support
1316

    
1317
if test $arch = "powerpc"; then
1318
check_cc <<EOF && dcbzl=yes
1319
int main(void) {
1320
    register long zero = 0;
1321
    char data[1024];
1322
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1323
return 0;
1324
}
1325
EOF
1326
fi
1327

    
1328
# check for SIMD availability
1329

    
1330
# AltiVec flags: The FSF version of GCC differs from the Apple version
1331
if test $arch = "powerpc"; then
1332
    if enabled altivec; then
1333
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1334
            add_cflags "-faltivec"
1335
        else
1336
            add_cflags "-maltivec -mabi=altivec"
1337
        fi
1338
    fi
1339
fi
1340

    
1341
check_header altivec.h
1342

    
1343
# check if our compiler supports Motorola AltiVec C API
1344
if enabled altivec; then
1345
    if enabled altivec_h; then
1346
        inc_altivec_h="#include <altivec.h>"
1347
    else
1348
        inc_altivec_h=
1349
    fi
1350
    check_cc <<EOF || altivec=no
1351
$inc_altivec_h
1352
int main(void) {
1353
    vector signed int v1, v2, v3;
1354
    v1 = vec_add(v2,v3);
1355
    return 0;
1356
}
1357
EOF
1358
fi
1359

    
1360
# check armv5te instructions support
1361
if test $armv5te = "default" -a $arch = "armv4l"; then
1362
    armv5te=no
1363
    check_cc <<EOF && armv5te=yes
1364
        int main(void) {
1365
        __asm__ __volatile__ ("qadd r0, r0, r0");
1366
        }
1367
EOF
1368
fi
1369

    
1370
if test $armv6 = "default" -a $arch = "armv4l"; then
1371
    check_cc <<EOF && armv6=yes || armv6=no
1372
int main(void) {
1373
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1374
}
1375
EOF
1376
fi
1377

    
1378
# check iwmmxt support
1379
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1380
    iwmmxt=no
1381
    check_cc <<EOF && iwmmxt=yes
1382
        int main(void) {
1383
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1384
        }
1385
EOF
1386
fi
1387

    
1388
# mmi only available on mips
1389
if test $mmi = "default"; then
1390
    if test $arch = "mips"; then
1391
        mmi="yes"
1392
    else
1393
        mmi="no"
1394
    fi
1395
fi
1396

    
1397
# check if our compiler supports mmi
1398
enabled mmi && check_cc <<EOF || mmi="no"
1399
int main(void) {
1400
    __asm__ ("lq \$2, 0(\$2)");
1401
    return 0;
1402
}
1403
EOF
1404

    
1405
# ---
1406
# big/little-endian test
1407
if disabled cross_compile; then
1408
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1409
#include <inttypes.h>
1410
int main(int argc, char ** argv){
1411
        volatile uint32_t i=0x01234567;
1412
        return (*((uint8_t*)(&i))) == 0x67;
1413
}
1414
EOF
1415
else
1416
    # programs cannot be launched if cross compiling, so make a static guess
1417
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1418
        bigendian="yes"
1419
    fi
1420
fi
1421

    
1422
# ---
1423
# check availability of some header files
1424

    
1425
check_header malloc.h
1426
check_func memalign
1427

    
1428
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1429
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1430
fi
1431

    
1432
check_header byteswap.h
1433

    
1434
check_func inet_aton
1435
check_func localtime_r
1436
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1437

    
1438
# ffserver uses poll(),
1439
# if it's not found we can emulate it using select().
1440
if enabled ffserver; then
1441
    check_header sys/poll.h
1442
fi
1443

    
1444
# check for some common methods of building with pthread support
1445
# do this before the optional library checks as some of them require pthreads
1446
if enabled pthreads; then
1447
    if check_func pthread_create; then
1448
        :
1449
    elif check_func pthread_create -pthread; then
1450
        add_cflags -pthread
1451
        add_ldflags -pthread
1452
    elif check_func pthread_create -pthreads; then
1453
        add_cflags -pthreads
1454
        add_ldflags -pthreads
1455
    elif ! check_lib pthread.h pthread_create -lpthread; then
1456
        die "ERROR: can't find pthreads library"
1457
    fi
1458
fi
1459

    
1460
for thread in pthreads beosthreads os2threads w32threads; do
1461
    if enabled $thread; then
1462
        if ! disabled thread_type ; then
1463
            die "ERROR: Only one thread type must be selected."
1464
        else
1465
            thread_type="$thread"
1466
        fi
1467
    fi
1468
done
1469

    
1470
enabled_any amr_nb amr_nb_fixed amr_wb amr_if2 && enable amr
1471
enabled_all amr_nb amr_nb_fixed &&
1472
    die "Only one of amr_nb and amr_nb_fixed may be enabled."
1473

    
1474
# these are off by default, so fail if requested and not available
1475
enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1476
enabled libdts     && require libdts dts.h dts_init -ldts -lm
1477
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1478
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1479
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1480
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1481
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1482
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1483
enabled xvid       && require XviD xvid.h xvid_global -lxvidcore
1484
enabled x264       && require x264 x264.h x264_encoder_open -lx264
1485
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1486
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1487

    
1488
# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1489
# the generic test functions
1490
if enabled libfaac; then
1491
    save_flags
1492
    temp_extralibs -lfaac
1493
    check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1494
#include <stdint.h>
1495
#include <faac.h>
1496
int main(){
1497
    char *id, *cpr;
1498
    faacEncGetVersion(&id, &cpr);
1499
    return 0;
1500
}
1501
EOF
1502
    restore_flags
1503
fi
1504

    
1505
# Ugh, recent faad2 versions have renamed all functions and #define the
1506
# old names in faad.h.  Generic tests won't work.
1507
if enabled libfaad; then
1508
    save_flags
1509
    temp_extralibs -lfaad
1510
    check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1511
#include <faad.h>
1512
int main(){
1513
    faacDecOpen();
1514
    return 0;
1515
}
1516
EOF
1517
    restore_flags
1518
fi
1519

    
1520
# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1521
if enabled avisynth; then
1522
    save_flags
1523
    temp_extralibs -lvfw32
1524
    check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1525
#include <windows.h>
1526
#include <vfw.h>
1527
int main(){
1528
    AVIFileInit();
1529
    return 0;
1530
}
1531
EOF
1532
    restore_flags
1533
fi
1534

    
1535

    
1536
# test for lrintf in math.h
1537
check_exec <<EOF && lrintf=yes || lrintf=no
1538
#define _ISOC9X_SOURCE  1
1539
#include <math.h>
1540
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1541
EOF
1542

    
1543
_restrict=
1544
for restrict_keyword in restrict __restrict__ __restrict; do
1545
    check_cc <<EOF && _restrict=$restrict_keyword && break
1546
void foo(char * $restrict_keyword p);
1547
EOF
1548
done
1549

    
1550
# dlopen/dlfcn.h probing
1551

    
1552
check_header dlfcn.h
1553

    
1554
if check_func dlopen; then
1555
    ldl=
1556
elif check_func dlopen -ldl; then
1557
    ldl=-ldl
1558
fi
1559

    
1560
test "$vhook" = "default" && vhook="$dlopen"
1561

    
1562
enabled_any vhook liba52bin libfaadbin && add_extralibs $ldl
1563

    
1564
if test "$targetos" = "CYGWIN" && enabled static ; then
1565
    vhook="no"
1566
    echo
1567
    echo "At the moment vhooks don't work on Cygwin static builds."
1568
    echo "Patches welcome."
1569
    echo
1570
fi
1571

    
1572
if enabled vhook; then
1573
    check_ldflags -rdynamic
1574
    check_ldflags -export-dynamic
1575
fi
1576

    
1577
enabled audio_beos && add_extralibs "-lmedia -lbe"
1578

    
1579
enabled mingw32 && add_extralibs -lws2_32
1580

    
1581
##########################################
1582
# imlib check
1583

    
1584
imlib2=no
1585
if imlib2-config --version >/dev/null 2>&1; then
1586
    temp_cflags `imlib2-config --cflags`
1587
    temp_extralibs `imlib2-config --libs`
1588
    check_lib Imlib2.h imlib_load_font && enable imlib2
1589
    restore_flags
1590
fi
1591

    
1592
##########################################
1593
# FreeType check
1594

    
1595
freetype2=no
1596
if freetype-config --version >/dev/null 2>&1; then
1597
    temp_cflags `freetype-config --cflags`
1598
    temp_extralibs `freetype-config --libs`
1599
    check_lib ft2build.h FT_Init_FreeType && enable freetype2
1600
    restore_flags
1601
fi
1602

    
1603
##########################################
1604
# SDL check
1605

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

    
1632
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1633

    
1634
##########################################
1635
# IPv6 check
1636

    
1637
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1638
#include <sys/types.h>
1639
#include <sys/socket.h>
1640
#include <netinet/in.h>
1641
#include <netdb.h>
1642
int main( void ) {
1643
  struct sockaddr_storage saddr;
1644
  struct ipv6_mreq mreq6;
1645
  getaddrinfo(0,0,0,0);
1646
  getnameinfo(0,0,0,0,0,0,0);
1647
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1648
}
1649
EOF
1650

    
1651
enabled v4l  && check_header linux/videodev.h  || disable v4l
1652
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1653

    
1654
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1655
if enabled bktr; then
1656
    { check_header dev/bktr/ioctl_meteor.h &&
1657
      check_header dev/bktr/ioctl_bt848.h; } ||
1658
    { check_header machine/ioctl_meteor.h &&
1659
      check_header machine/ioctl_bt848.h; } ||
1660
    { check_header dev/video/meteor/ioctl_meteor.h &&
1661
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1662
    check_header dev/ic/bt8xx.h ||
1663
    disable bktr
1664
fi
1665

    
1666
enabled audio_oss &&
1667
    check_header sys/soundcard.h ||
1668
    check_header soundcard.h ||
1669
    disable audio_oss
1670

    
1671
# Deal with the x11 frame grabber
1672
enabled x11grab                         &&
1673
enabled gpl                             &&
1674
enabled x11_grab_device_demuxer         &&
1675
check_header X11/Xlib.h                 &&
1676
check_header X11/extensions/XShm.h      &&
1677
check_func XOpenDisplay -lX11           &&
1678
check_func XShmCreateImage -lX11 -lXext &&
1679
add_extralibs -lX11 -lXext              ||
1680
disable x11_grab_device_demuxer
1681

    
1682
enabled debug && add_cflags -g
1683

    
1684
# add some useful compiler flags if supported
1685
check_cflags -Wdeclaration-after-statement
1686
check_cflags -Wall
1687
check_cflags -Wno-switch
1688
check_cflags -Wdisabled-optimization
1689
check_cflags -Wpointer-arith
1690
check_cflags -Wredundant-decls
1691
check_cflags -Wno-pointer-sign
1692
enabled extra_warnings && check_cflags -Winline
1693

    
1694
# add some linker flags
1695
check_ldflags $LDLATEFLAGS
1696

    
1697
# not all compilers support -Os
1698
test "$optimize" = "small" && check_cflags -Os
1699

    
1700
if enabled optimize; then
1701
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1702
        add_cflags  "-O5"
1703
        add_ldflags "-O5"
1704
    else
1705
        add_cflags "-O3"
1706
    fi
1707
fi
1708

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

    
1719
if enabled gprof; then
1720
    add_cflags  "-p"
1721
    add_ldflags "-p"
1722
fi
1723

    
1724
VHOOKCFLAGS="-fPIC $CFLAGS"
1725
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1726

    
1727
# find if .align arg is power-of-two or not
1728
if test $asmalign_pot = "unknown"; then
1729
    asmalign_pot="no"
1730
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1731
fi
1732

    
1733
enabled_any $ENCODER_LIST && enable encoders
1734
enabled_any $DECODER_LIST && enable decoders
1735
enabled_any $MUXER_LIST   && enable muxers
1736
enabled_any $DEMUXER_LIST && enable demuxers
1737

    
1738
enabled_any pthreads beosthreads os2threads w32threads && enable threads
1739

    
1740
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1741
    $DEMUXER_LIST $MUXER_LIST
1742

    
1743
enabled libogg    && append pkg_requires "ogg >= 1.1"
1744
enabled libtheora && append pkg_requires "theora"
1745
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1746
enabled dc1394    && append pkg_requires "libraw1394"
1747

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

    
1824
echo "Creating config.mak and config.h..."
1825

    
1826
echo "# Automatically generated by configure - do not modify!" > config.mak
1827
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1828
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1829

    
1830
echo "PREFIX=$PREFIX" >> config.mak
1831
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1832
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1833
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1834
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1835
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1836
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1837
echo "MAKE=$make" >> config.mak
1838
echo "CC=$cc" >> config.mak
1839
echo "AR=$ar" >> config.mak
1840
echo "RANLIB=$ranlib" >> config.mak
1841
if enabled dostrip; then
1842
    echo "STRIP=$strip" >> config.mak
1843
else
1844
    echo "STRIP=echo ignoring strip" >> config.mak
1845
fi
1846

    
1847
echo "OPTFLAGS=$CFLAGS" >> config.mak
1848
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1849
echo "LDFLAGS=$LDFLAGS" >> config.mak
1850
echo "LDCONFIG=$LDCONFIG" >> config.mak
1851
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1852
echo "SHFLAGS=$SHFLAGS" >> config.mak
1853
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1854
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1855
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1856
echo "BUILD_STATIC=$static" >> config.mak
1857
echo "BUILDSUF=$BUILDSUF" >> config.mak
1858
echo "LIBPREF=$LIBPREF" >> config.mak
1859
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1860
if enabled static; then
1861
  echo "LIB=$LIB" >> config.mak
1862
else # Some Make complain if this variable does not exist.
1863
  echo "LIB=" >> config.mak
1864
fi
1865
echo "SLIBPREF=$SLIBPREF" >> config.mak
1866
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1867
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1868
echo "TARGET_OS=$targetos" >> config.mak
1869

    
1870
ucarch=`toupper $arch`
1871
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1872
echo "#define ARCH_${ucarch} 1" >> $TMPH
1873

    
1874
# special cases
1875
case "$arch" in
1876
    x86_32|x86_64)
1877
        echo "TARGET_ARCH_X86=yes" >> config.mak
1878
        echo "#define ARCH_X86 1" >> $TMPH
1879
        ;;
1880
    powerpc)
1881
        if test "$POWERPCMODE" = "64bits"; then
1882
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1883
        fi
1884
        ;;
1885
    sparc64)
1886
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
1887
        echo "#define ARCH_SPARC 1" >> $TMPH
1888
        ;;
1889
esac
1890

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

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

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

    
1913

    
1914

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

    
1937
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1938
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1939
print_config TARGET_ $TMPH config.mak $TARGET_LIST
1940

    
1941
if test "$targetos" = "Darwin"; then
1942
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1943
fi
1944

    
1945
echo "#define restrict $_restrict" >> $TMPH
1946

    
1947
if test "$optimize" = "small"; then
1948
  echo "#define always_inline"  >> $TMPH
1949
  echo "#define CONFIG_SMALL 1" >> $TMPH
1950
fi
1951

    
1952
echo "SRC_PATH=\"$source_path\"" >> config.mak
1953
echo "SRC_PATH_BARE=$source_path" >> config.mak
1954
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1955

    
1956
if enabled amr_if2; then
1957
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1958
fi
1959

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

    
1967

    
1968
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
1969
    ucname="`toupper $codec`"
1970
    config_name="CONFIG_$ucname"
1971
    enabled_name="ENABLE_$ucname"
1972
    if enabled $codec; then
1973
        echo "#define $config_name 1" >> $TMPH
1974
        echo "#define $enabled_name 1" >> $TMPH
1975
        echo "$config_name=yes" >> config.mak
1976
    else
1977
        echo "#define $enabled_name 0" >> $TMPH
1978
    fi
1979
done
1980

    
1981
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1982
if ! cmp -s $TMPH config.h; then
1983
        mv -f $TMPH config.h
1984
else
1985
        echo "config.h is unchanged"
1986
fi
1987

    
1988
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1989

    
1990
# build tree in object directory if source path is different from current one
1991
if enabled source_path_used; then
1992
    DIRS="\
1993
         doc \
1994
         libavformat \
1995
         libavcodec \
1996
         libavcodec/alpha \
1997
         libavcodec/armv4l \
1998
         libavcodec/bfin \
1999
         libavcodec/i386 \
2000
         libavcodec/sparc \
2001
         libavcodec/mlib \
2002
         libavcodec/ppc \
2003
         libavcodec/amr \
2004
         libavcodec/amr_float \
2005
         libavcodec/amrwb_float \
2006
         libpostproc \
2007
         libavutil \
2008
         libswscale \
2009
         tests \
2010
         vhook \
2011
         "
2012
    FILES="\
2013
          Makefile \
2014
          common.mak \
2015
          libavformat/Makefile \
2016
          libavcodec/Makefile \
2017
          libpostproc/Makefile \
2018
          libavutil/Makefile \
2019
          libswscale/Makefile \
2020
          tests/Makefile \
2021
          vhook/Makefile \
2022
          doc/Makefile \
2023
          doc/texi2pod.pl \
2024
          "
2025
    for dir in $DIRS ; do
2026
            mkdir -p $dir
2027
    done
2028
    for f in $FILES ; do
2029
        ln -sf "$source_path/$f" $f
2030
    done
2031
fi
2032

    
2033

    
2034
# build pkg-config files
2035
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2036

    
2037
pkgconfig_generate(){
2038
name=$1
2039
comment=$2
2040
version=$3
2041
libs=$4
2042
requires=$5
2043
include=$6
2044
cat <<EOF >$name.pc
2045
prefix=$PREFIX
2046
exec_prefix=\${prefix}
2047
libdir=\${exec_prefix}/lib
2048
includedir=\${prefix}/include
2049

    
2050
Name: $name
2051
Description: $comment
2052
Version: $version
2053
Requires: $requires
2054
Conflicts:
2055
Libs: -L\${libdir} $libs
2056
Cflags: -I\${includedir} -I\${includedir}/$include
2057
EOF
2058
}
2059

    
2060
pkgconfig_generate_uninstalled(){
2061
name=$1
2062
shortname=${name#lib}
2063
comment=$2
2064
version=$3
2065
libs=$4
2066
requires=$5
2067
cat <<EOF >$name-uninstalled.pc
2068
prefix=
2069
exec_prefix=
2070
libdir=\${pcfiledir}/$name
2071
includedir=\${pcfiledir}/$name
2072

    
2073
Name: $name
2074
Description: $comment
2075
Version: $version
2076
Requires: $requires
2077
Conflicts:
2078
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2079
Cflags: -I\${includedir}
2080
EOF
2081
}
2082

    
2083
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2084
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2085

    
2086
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2087
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2088

    
2089
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2090
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2091

    
2092
if enabled pp; then
2093
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2094
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2095
fi
2096

    
2097
if enabled swscaler; then
2098
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2099
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2100
else
2101
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2102
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2103
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2104
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2105
fi