Statistics
| Branch: | Revision:

ffmpeg / configure @ 079dd4ba

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

    
169
log(){
170
    echo "$@" >>$logfile
171
}
172

    
173
log_file(){
174
    log BEGIN $1
175
    cat -n $1 >>$logfile
176
    log END $1
177
}
178

    
179
echolog(){
180
    log "$@"
181
    echo "$@"
182
}
183

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

    
206
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
207
toupper(){
208
    echo "$@" | tr '[a-z]' '[A-Z]'
209
}
210

    
211
set_all(){
212
    value=$1
213
    shift
214
    for var in $*; do
215
        eval $var=$value
216
    done
217
}
218

    
219
enable(){
220
    set_all yes $*
221
}
222

    
223
disable(){
224
    set_all no $*
225
}
226

    
227
enabled(){
228
    eval test "x\$$1" = "xyes"
229
}
230

    
231
disabled(){
232
    eval test "x\$$1" = "xno"
233
}
234

    
235
enabled_all(){
236
    for opt; do
237
        enabled $opt || return 1
238
    done
239
}
240

    
241
disabled_all(){
242
    for opt; do
243
        disabled $opt || return 1
244
    done
245
}
246

    
247
enabled_any(){
248
    for opt; do
249
        enabled $opt && return 0
250
    done
251
}
252

    
253
disabled_any(){
254
    for opt; do
255
        disabled $opt && return 0
256
    done
257
}
258

    
259
check_deps(){
260
    for cfg; do
261
        eval dep_all="\$${cfg}_deps"
262
        eval dep_any="\$${cfg}_deps_any"
263
        enabled_all $dep_all || disable $cfg
264
        enabled_any $dep_any || disable $cfg
265
    done
266
}
267

    
268
print_config(){
269
    pfx=$1
270
    header=$2
271
    makefile=$3
272
    shift 3
273
    for cfg; do
274
        if enabled $cfg; then
275
            ucname="${pfx}`toupper $cfg`"
276
            echo "#define ${ucname} 1" >> $header
277
            echo "${ucname}=yes" >> $makefile
278
        fi
279
    done
280
}
281

    
282
flags_saved(){
283
    (: ${SAVE_CFLAGS?}) 2>/dev/null
284
}
285

    
286
save_flags(){
287
    flags_saved && return
288
    SAVE_CFLAGS="$CFLAGS"
289
    SAVE_LDFLAGS="$LDFLAGS"
290
    SAVE_extralibs="$extralibs"
291
}
292

    
293
restore_flags(){
294
    CFLAGS="$SAVE_CFLAGS"
295
    LDFLAGS="$SAVE_LDFLAGS"
296
    extralibs="$SAVE_extralibs"
297
    unset SAVE_CFLAGS
298
    unset SAVE_LDFLAGS
299
    unset SAVE_extralibs
300
}
301

    
302
temp_cflags(){
303
    save_flags
304
    CFLAGS="$CFLAGS $*"
305
}
306

    
307
temp_ldflags(){
308
    save_flags
309
    LDFLAGS="$LDFLAGS $*"
310
}
311

    
312
temp_extralibs(){
313
    save_flags
314
    extralibs="$extralibs $*"
315
}
316

    
317
append(){
318
    var=$1
319
    shift
320
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
321
    eval "$var=\"\$$var $*\""
322
}
323

    
324
add_cflags(){
325
    append CFLAGS "$@"
326
}
327

    
328
add_ldflags(){
329
    append LDFLAGS "$@"
330
}
331

    
332
add_extralibs(){
333
    append extralibs "$@"
334
}
335

    
336
check_cmd(){
337
    log "$@"
338
    "$@" >>$logfile 2>&1
339
}
340

    
341
check_cc(){
342
    log check_cc "$@"
343
    cat >$TMPC
344
    log_file $TMPC
345
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
346
}
347

    
348
check_cpp(){
349
    log check_cpp "$@"
350
    cat >$TMPC
351
    log_file $TMPC
352
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
353
}
354

    
355
check_ld(){
356
    log check_ld "$@"
357
    check_cc || return
358
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
359
}
360

    
361
check_cflags(){
362
    log check_cflags "$@"
363
    check_cc "$@" <<EOF && add_cflags "$@"
364
int x;
365
EOF
366
}
367

    
368
check_ldflags(){
369
    log check_ldflags "$@"
370
    check_ld "$@" <<EOF && add_ldflags "$@"
371
int main(){
372
    return 0;
373
}
374
EOF
375
}
376

    
377
check_header(){
378
    log check_header "$@"
379
    header=$1
380
    shift
381
    check_cpp "$@" <<EOF
382
#include <$header>
383
int x;
384
EOF
385
    err=$?
386
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
387
    test "$err" = 0 && enable $var || disable $var
388
    return $err
389
}
390

    
391
check_func(){
392
    log check_func "$@"
393
    func=$1
394
    shift
395
    check_ld "$@" <<EOF
396
extern int $func();
397
int main(){
398
    $func();
399
}
400
EOF
401
    err=$?
402
    test "$err" = 0 && enable $func || disable $func
403
    return $err
404
}
405

    
406
check_lib(){
407
    log check_lib "$@"
408
    header="$1"
409
    func="$2"
410
    shift 2
411
    temp_extralibs "$@"
412
    check_header $header && check_func $func && add_extralibs "$@"
413
    err=$?
414
    restore_flags
415
    return $err
416
}
417

    
418
check_exec(){
419
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
420
}
421

    
422
require(){
423
    name="$1"
424
    header="$2"
425
    func="$3"
426
    shift 3
427
    check_lib $header $func "$@" || die "ERROR: $name not found"
428
}
429

    
430
apply(){
431
    file=$1
432
    shift
433
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
434
}
435

    
436
CONFIG_LIST='
437
    encoders
438
    decoders
439
    parsers
440
    muxers
441
    demuxers
442
    amr
443
    amr_nb
444
    amr_nb_fixed
445
    amr_wb
446
    audio_beos
447
    audio_oss
448
    avisynth
449
    beos_netserver
450
    bktr
451
    dc1394
452
    dv1394
453
    ffmpeg
454
    ffplay
455
    ffserver
456
    gpl
457
    ipv6
458
    liba52
459
    liba52bin
460
    libdts
461
    libfaac
462
    libfaad
463
    libfaadbin
464
    libgsm
465
    libmp3lame
466
    libnut
467
    libogg
468
    libtheora
469
    libvorbis
470
    memalign_hack
471
    mpegaudio_hp
472
    network
473
    pp
474
    protocols
475
    swscaler
476
    vhook
477
    video4linux
478
    video4linux2
479
    wince
480
    x11grab
481
    x264
482
    xvid
483
    zlib
484
'
485

    
486
HAVE_LIST='
487
    altivec
488
    altivec_h
489
    armv5te
490
    armv6
491
    beosthreads
492
    byteswap_h
493
    cmov
494
    dcbzl
495
    dev_bktr_ioctl_bt848_h
496
    dev_bktr_ioctl_meteor_h
497
    dev_ic_bt8xx_h
498
    dev_video_meteor_ioctl_meteor_h
499
    dev_video_bktr_ioctl_bt848_h
500
    dlfcn_h
501
    dlopen
502
    fast_cmov
503
    freetype2
504
    gprof
505
    imlib2
506
    inet_aton
507
    iwmmxt
508
    localtime_r
509
    lrintf
510
    machine_ioctl_bt848_h
511
    machine_ioctl_meteor_h
512
    malloc_h
513
    memalign
514
    mlib
515
    mmi
516
    mmx
517
    os2
518
    os2threads
519
    pthreads
520
    sdl
521
    sdl_video_size
522
    threads
523
    w32threads
524
'
525

    
526
TARGET_LIST='
527
    altivec
528
    armv5te
529
    iwmmxt
530
    mmi
531
    mmx
532
'
533

    
534
flashsv_decoder_deps="zlib"
535
flashsv_encoder_deps="zlib"
536
mpeg_xvmc_decoder_deps="xvmc"
537
png_decoder_deps="zlib"
538
png_encoder_deps="zlib"
539
x264_encoder_deps="x264"
540
xvid_encoder_deps="xvid"
541
zmbv_decoder_deps="zlib"
542
zmbv_encoder_deps="zlib"
543

    
544
aac_decoder_deps="libfaad"
545
mpeg4aac_decoder_deps="libfaad"
546
ac3_decoder_deps="liba52"
547
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
548
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
549
amr_wb_decoder_deps="amr_wb"
550
amr_wb_encoder_deps="amr_wb"
551
dts_decoder_deps="libdts"
552
faac_encoder_deps="libfaac"
553
libgsm_decoder_deps="libgsm"
554
libgsm_encoder_deps="libgsm"
555
libtheora_encoder_deps="libtheora"
556
mp3lame_encoder_deps="libmp3lame"
557
oggvorbis_decoder_deps="libvorbis"
558
oggvorbis_encoder_deps="libvorbis"
559

    
560
audio_demuxer_deps_any="audio_oss audio_beos"
561
audio_muxer_deps_any="audio_oss audio_beos"
562
dc1394_demuxer_deps="dc1394"
563
dv1394_demuxer_deps="dv1394"
564
gxf_muxer_deps="gpl"
565
nut_muxer_deps="libnut"
566
ogg_muxer_deps="libogg"
567
redir_demuxer_deps="network"
568
rtp_muxer_deps="network"
569
rtsp_demuxer_deps="network"
570
sdp_demuxer_deps="network"
571
v4l2_demuxer_deps="video4linux2"
572
video_grab_device_demuxer_deps_any="video4linux bktr"
573
x11_grab_device_demuxer_deps="x11grab"
574

    
575
# set temporary file name
576
if test ! -z "$TMPDIR" ; then
577
    TMPDIR1="${TMPDIR}"
578
elif test ! -z "$TEMPDIR" ; then
579
    TMPDIR1="${TEMPDIR}"
580
else
581
    TMPDIR1="/tmp"
582
fi
583

    
584
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
585
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
586
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
587
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
588
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
589

    
590
# default parameters
591
logging="yes"
592
logfile="config.err"
593
PREFIX="/usr/local"
594
libdir='${PREFIX}/lib'
595
shlibdir="$libdir"
596
incdir='${PREFIX}/include/ffmpeg'
597
mandir='${PREFIX}/man'
598
bindir='${PREFIX}/bin'
599
cross_prefix=""
600
cross_compile="no"
601
cc="gcc"
602
ar="ar"
603
ranlib="ranlib"
604
make="make"
605
strip="strip"
606
arch=`uname -m`
607
cpu="generic"
608
powerpc_perf="no"
609
mmx="default"
610
cmov="no"
611
fast_cmov="no"
612
armv5te="default"
613
armv6="default"
614
iwmmxt="default"
615
altivec="default"
616
dcbzl="no"
617
mmi="default"
618
case "$arch" in
619
  i386|i486|i586|i686|i86pc|BePC)
620
    arch="x86_32"
621
  ;;
622
  x86_64|amd64)
623
    arch="x86_32"
624
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
625
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
626
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
627
        arch="x86_64"
628
      fi
629
    fi
630
  ;;
631
  # armv4l is a subset of armv[567]*l
632
  arm|armv[4567]*l)
633
    arch="armv4l"
634
  ;;
635
  alpha)
636
    arch="alpha"
637
  ;;
638
  "Power Macintosh"|ppc|ppc64|powerpc)
639
    arch="powerpc"
640
  ;;
641
  mips|mipsel|IP*)
642
    arch="mips"
643
  ;;
644
  sun4u|sparc64)
645
    arch="sparc64"
646
  ;;
647
  sparc)
648
    arch="sparc"
649
  ;;
650
  sh4)
651
    arch="sh4"
652
  ;;
653
  parisc|parisc64)
654
    arch="parisc"
655
  ;;
656
  s390|s390x)
657
    arch="s390"
658
  ;;
659
  m68k)
660
    arch="m68k"
661
  ;;
662
  ia64)
663
    arch="ia64"
664
  ;;
665
  bfin)
666
    arch="bfin"
667
  ;;
668
  *)
669
    arch="unknown"
670
  ;;
671
esac
672
gprof="no"
673
video4linux="yes"
674
video4linux2="yes"
675
bktr="no"
676
audio_oss="yes"
677
audio_beos="no"
678
x11grab="no"
679
dv1394="yes"
680
dc1394="no"
681
network="yes"
682
ipv6="yes"
683
zlib="yes"
684
liba52="no"
685
liba52bin="no"
686
libdts="no"
687
libfaac="no"
688
libfaad="no"
689
libfaad2="no"
690
libfaadbin="no"
691
libgsm="no"
692
libmp3lame="no"
693
libnut="no"
694
libogg="no"
695
libtheora="no"
696
libvorbis="no"
697
xvid="no"
698
x264="no"
699
pp="no"
700
mingw32="no"
701
wince="no"
702
os2="no"
703
lstatic="yes"
704
lshared="no"
705
optimize="yes"
706
debug="yes"
707
extrawarnings="no"
708
dostrip="yes"
709
extralibs="-lm"
710
bigendian="no"
711
vhook="default"
712
avisynth="no"
713
dlfcn_h="no"
714
dlopen="no"
715
mpegaudio_hp="yes"
716
SHFLAGS='-shared -Wl,-soname,$@'
717
VHOOKSHFLAGS='$(SHFLAGS)'
718
beos_netserver="no"
719
protocols="yes"
720
ffmpeg="yes"
721
ffserver="yes"
722
ffplay="yes"
723
LIBOBJFLAGS=""
724
FFLDFLAGS=-Wl,--warn-common
725
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
726
FFSERVERLDFLAGS=-Wl,-E
727
LDCONFIG="ldconfig"
728
LIBPREF="lib"
729
LIBSUF=".a"
730
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
731
SLIBPREF="lib"
732
SLIBSUF=".so"
733
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
734
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
735
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
736
EXESUF=""
737
BUILDSUF=""
738
amr_nb="no"
739
amr_wb="no"
740
amr_nb_fixed="no"
741
amr_if2="no"
742
mlib="no"
743
beosthreads="no"
744
os2threads="no"
745
pthreads="no"
746
w32threads="no"
747
thread_type="no"
748
swscaler="no"
749
gpl="no"
750
memalign_hack="no"
751
asmalign_pot="unknown"
752
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
753

    
754
# OS specific
755
targetos=`uname -s`
756
case $targetos in
757
BeOS)
758
PREFIX="/boot/home/config"
759
# helps building libavcodec
760
add_cflags "-DPIC -fomit-frame-pointer"
761
# 3 gcc releases known for BeOS, each with ugly bugs
762
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
763
case "$gcc_version" in
764
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
765
mmx="no"
766
;;
767
*20010315*) echo "BeBits gcc"
768
add_cflags "-fno-expensive-optimizations"
769
;;
770
esac
771
SHFLAGS=-nostart
772
# disable Linux things
773
audio_oss="no"
774
video4linux="no"
775
video4linux2="no"
776
dv1394="no"
777
# enable BeOS things
778
audio_beos="yes"
779
# no need for libm, but the inet stuff
780
# Check for BONE
781
if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
782
extralibs="-lbind -lsocket"
783
else
784
beos_netserver="yes"
785
extralibs="-lnet"
786
fi ;;
787
SunOS)
788
video4linux="no"
789
video4linux2="no"
790
audio_oss="no"
791
dv1394="no"
792
make="gmake"
793
FFLDFLAGS=""
794
FFSERVERLDFLAGS=""
795
SHFLAGS="-shared -Wl,-h,\$@"
796
add_extralibs "-lsocket -lnsl"
797
;;
798
NetBSD)
799
video4linux="no"
800
video4linux2="no"
801
bktr="yes"
802
audio_oss="yes"
803
dv1394="no"
804
make="gmake"
805
add_extralibs "-lossaudio"
806
;;
807
OpenBSD)
808
video4linux="no"
809
video4linux2="no"
810
bktr="yes"
811
audio_oss="yes"
812
dv1394="no"
813
need_memalign="no"
814
make="gmake"
815
LIBOBJFLAGS="\$(PIC)"
816
LDCONFIG="ldconfig -m \$(shlibdir)"
817
SHFLAGS='-shared'
818
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
819
SLIBNAME_WITH_VERSION='$(SLIBNAME)'
820
SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
821
add_extralibs "-lossaudio"
822
;;
823
FreeBSD)
824
video4linux="no"
825
video4linux2="no"
826
bktr="yes"
827
audio_oss="yes"
828
dv1394="no"
829
make="gmake"
830
need_memalign="no"
831
add_cflags "-pthread"
832
;;
833
GNU/kFreeBSD)
834
video4linux="no"
835
video4linux2="no"
836
bktr="yes"
837
audio_oss="yes"
838
dv1394="no"
839
add_cflags "-pthread"
840
;;
841
BSD/OS)
842
video4linux="no"
843
video4linux2="no"
844
bktr="yes"
845
audio_oss="yes"
846
dv1394="no"
847
extralibs="-lpoll -lgnugetopt -lm"
848
make="gmake"
849
strip="strip -d"
850
;;
851
Darwin)
852
cc="cc"
853
video4linux="no"
854
video4linux2="no"
855
audio_oss="no"
856
dv1394="no"
857
need_memalign="no"
858
SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
859
VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
860
extralibs=""
861
strip="strip -x"
862
FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
863
SLIBSUF=".dylib"
864
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
865
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
866
FFSERVERLDFLAGS=-Wl,-bind_at_load
867
;;
868
MINGW32*)
869
# Note: the rest of the mingw32 config is done afterwards as mingw32
870
# can be forced on the command line for Linux cross compilation.
871
mingw32="yes"
872
;;
873
CYGWIN*)
874
targetos=CYGWIN
875
shlibdir="$bindir"
876
video4linux="no"
877
video4linux2="no"
878
audio_oss="yes"
879
dv1394="no"
880
VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
881
VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
882
extralibs=""
883
EXESUF=".exe"
884
SLIBPREF="cyg"
885
SLIBSUF=".dll"
886
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
887
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
888
SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
889
;;
890
Linux)
891
LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
892
;;
893
IRIX*)
894
targetos=IRIX
895
ranlib="echo ignoring ranlib"
896
video4linux="no"
897
video4linux2="no"
898
audio_oss="no"
899
make="gmake"
900
;;
901
OS/2)
902
TMPE=$TMPE".exe"
903
ar="emxomfar -p128"
904
ranlib="echo ignoring ranlib"
905
strip="echo ignoring strip"
906
add_cflags "-Zomf"
907
FFLDFLAGS="-Zomf -Zstack 16384 -s"
908
SHFLAGS="-Zdll -Zomf"
909
FFSERVERLDFLAGS=""
910
LIBPREF=""
911
LIBSUF=".lib"
912
SLIBPREF=""
913
SLIBSUF=".dll"
914
EXESUF=".exe"
915
extralibs=""
916
pkg_requires=""
917
video4linux="no"
918
video4linux2="no"
919
audio_oss="no"
920
dv1394="no"
921
ffserver="no"
922
vhook="no"
923
os2="yes"
924
;;
925
*)
926
targetos="${targetos}-UNKNOWN"
927
;;
928
esac
929

    
930
# find source path
931
source_path="`dirname \"$0\"`"
932
source_path_used="yes"
933
if test -z "$source_path" -o "$source_path" = "." ; then
934
    source_path="`pwd`"
935
    source_path_used="no"
936
else
937
    source_path="`cd \"$source_path\"; pwd`"
938
    echo "$source_path" | grep -q '[[:blank:]]' &&
939
      die "Out of tree builds are impossible with whitespace in source path."
940
fi
941

    
942
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
943
    show_help
944
fi
945

    
946
FFMPEG_CONFIGURATION="$@"
947

    
948
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
949
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
950
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
951
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
952
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
953

    
954
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
955

    
956
for opt do
957
  optval="${opt#*=}"
958
  case "$opt" in
959
  --log)
960
  ;;
961
  --log=*) logging="$optval"
962
  ;;
963
  --prefix=*) PREFIX="$optval"
964
  ;;
965
  --libdir=*) libdir="$optval"
966
  ;;
967
  --shlibdir=*) shlibdir="$optval"
968
  ;;
969
  --incdir=*) incdir="$optval"
970
  ;;
971
  --mandir=*) mandir="$optval"
972
  ;;
973
  --source-path=*) source_path="$optval"
974
  ;;
975
  --cross-prefix=*) cross_prefix="$optval"
976
  ;;
977
  --cross-compile) cross_compile=yes
978
  ;;
979
  --cc=*) cc="$optval"
980
  ;;
981
  --make=*) make="$optval"
982
  ;;
983
  --extra-cflags=*) add_cflags "$optval"
984
  ;;
985
  --extra-ldflags=*) add_ldflags "$optval"
986
  ;;
987
  --extra-libs=*) add_extralibs "$optval"
988
  ;;
989
  --build-suffix=*) BUILDSUF="$optval"
990
  ;;
991
  --arch=*) arch="$optval"
992
  ;;
993
  --cpu=*) cpu="$optval"
994
  ;;
995
  --powerpc-perf-enable) powerpc_perf="yes"
996
  ;;
997
  --disable-mmx) mmx="no"
998
  ;;
999
  --disable-armv5te) armv5te="no"
1000
  ;;
1001
  --disable-armv6) armv6="no"
1002
  ;;
1003
  --disable-iwmmxt) iwmmxt="no"
1004
  ;;
1005
  --disable-altivec) altivec="no"
1006
  ;;
1007
  --enable-gprof) gprof="yes"
1008
  ;;
1009
  --disable-v4l) video4linux="no"
1010
  ;;
1011
  --disable-v4l2) video4linux2="no"
1012
  ;;
1013
  --disable-bktr) bktr="no"
1014
  ;;
1015
  --disable-audio-oss) audio_oss="no"
1016
  ;;
1017
  --disable-audio-beos) audio_beos="no"
1018
  ;;
1019
  --disable-dv1394) dv1394="no"
1020
  ;;
1021
  --disable-network) network="no"; ffserver="no"
1022
  ;;
1023
  --disable-ipv6) ipv6="no";
1024
  ;;
1025
  --disable-zlib) zlib="no"
1026
  ;;
1027
  --enable-a52) liba52="yes"
1028
  ;;
1029
  --enable-a52bin) liba52bin="yes"
1030
  ;;
1031
  --enable-dts) libdts="yes"
1032
  ;;
1033
  --enable-pp) pp="yes"
1034
  ;;
1035
  --enable-libgsm) libgsm="yes"
1036
  ;;
1037
  --enable-mp3lame) libmp3lame="yes"
1038
  ;;
1039
  --enable-libnut) libnut="yes"
1040
  ;;
1041
  --enable-libogg) libogg="yes"
1042
    pkg_requires="$pkg_requires ogg >= 1.1"
1043
  ;;
1044
  --enable-libtheora) libtheora="yes"
1045
    pkg_requires="$pkg_requires theora"
1046
  ;;
1047
  --enable-vorbis) libvorbis="yes"
1048
    pkg_requires="$pkg_requires vorbis vorbisenc"
1049
  ;;
1050
  --enable-faad) libfaad="yes"
1051
  ;;
1052
  --enable-faadbin) libfaadbin="yes"
1053
  ;;
1054
  --enable-faac) libfaac="yes"
1055
  ;;
1056
  --enable-xvid) xvid="yes"
1057
  ;;
1058
  --enable-x264) x264="yes"
1059
  ;;
1060
  --enable-avisynth) avisynth="yes";
1061
  ;;
1062
  --enable-x11grab) x11grab="yes";
1063
  ;;
1064
  --enable-dc1394) dc1394="yes"
1065
    pkg_requires="$pkg_requires libraw1394"
1066
  ;;
1067
  --disable-vhook) vhook="no"
1068
  ;;
1069
  --enable-mingw32) mingw32="yes"
1070
  ;;
1071
  --enable-mingwce) wince="yes"
1072
  ;;
1073
  --enable-static) lstatic="yes"
1074
  ;;
1075
  --disable-static) lstatic="no"
1076
  ;;
1077
  --enable-shared) lshared="yes"
1078
  ;;
1079
  --disable-shared) lshared="no"
1080
  ;;
1081
  --disable-debug) debug="no"
1082
  ;;
1083
  --disable-opts) optimize="no"
1084
  ;;
1085
  --enable-extra-warnings) extrawarnings="yes"
1086
  ;;
1087
  --disable-mpegaudio-hp) mpegaudio_hp="no"
1088
  ;;
1089
  --disable-protocols) protocols="no"; network="no"; ffserver="no"
1090
  ;;
1091
  --disable-ffmpeg) ffmpeg="no"
1092
  ;;
1093
  --disable-ffserver) ffserver="no"
1094
  ;;
1095
  --disable-ffplay) ffplay="no"
1096
  ;;
1097
  --enable-small) optimize="small"
1098
  ;;
1099
  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
1100
  ;;
1101
  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
1102
  ;;
1103
  --enable-amr_wb) amr="yes"; amr_wb="yes"
1104
  ;;
1105
  --enable-amr_if2) amr="yes"; amr_if2="yes"
1106
  ;;
1107
  --enable-sunmlib) mlib="yes"
1108
  ;;
1109
  --enable-pthreads) pthreads="yes"
1110
  ;;
1111
  --enable-w32threads) w32threads="yes"
1112
  ;;
1113
  --enable-beosthreads) beosthreads="yes"
1114
  ;;
1115
  --enable-os2threads) os2threads="yes"
1116
  ;;
1117
  --enable-swscaler) swscaler="yes"
1118
  ;;
1119
  --enable-gpl) gpl="yes"
1120
  ;;
1121
  --enable-memalign-hack) memalign_hack="yes"
1122
  ;;
1123
  --disable-strip) dostrip="no"
1124
  ;;
1125
  --enable-encoder=*) enable ${optval}_encoder
1126
  ;;
1127
  --enable-decoder=*) enable ${optval}_decoder
1128
  ;;
1129
  --disable-encoder=*) disable ${optval}_encoder
1130
  ;;
1131
  --disable-decoder=*) disable ${optval}_decoder
1132
  ;;
1133
  --disable-encoders) disable $ENCODER_LIST
1134
  ;;
1135
  --disable-decoders) disable $DECODER_LIST
1136
  ;;
1137
  --enable-muxer=*) enable ${optval}_muxer
1138
  ;;
1139
  --disable-muxer=*) disable ${optval}_muxer
1140
  ;;
1141
  --disable-muxers) disable $MUXER_LIST; ffserver="no"
1142
  ;;
1143
  --enable-demuxer=*) enable ${optval}_demuxer
1144
  ;;
1145
  --disable-demuxer=*) disable ${optval}_demuxer
1146
  ;;
1147
  --disable-demuxers) disable $DEMUXER_LIST
1148
  ;;
1149
  --enable-parser=*) enable ${optval}_parser
1150
  ;;
1151
  --disable-parser=*) disable ${optval}_parser
1152
  ;;
1153
  --disable-parsers) disable $PARSER_LIST
1154
  ;;
1155
  --help) show_help
1156
  ;;
1157
  *)
1158
  echo "Unknown option \"$opt\"."
1159
  echo "See $0 --help for available options."
1160
  exit 1
1161
  ;;
1162
  esac
1163
done
1164

    
1165
if ! disabled logging ; then
1166
    enabled logging || logfile="$logging"
1167
    echo "# $0 $@" >$logfile
1168
    set >>$logfile
1169
else
1170
    logfile=/dev/null
1171
fi
1172

    
1173
if enabled_any mingw32 wince; then
1174
    if enabled_all lshared lstatic; then
1175
        cat <<EOF
1176
You can only build one library type at once on MinGW.
1177
Specify --disable-static --enable-shared to only build
1178
the shared libraries. To build only the static libraries
1179
you do not need to pass additional options.
1180
EOF
1181
        exit 1
1182
    fi
1183
    video4linux="no"
1184
    video4linux2="no"
1185
    audio_oss="no"
1186
    dv1394="no"
1187
    dc1394="no"
1188
    ffserver="no"
1189
    network="no"
1190
    if enabled wince; then
1191
        protocols="no"
1192
    fi
1193
    SLIBPREF=""
1194
    SLIBSUF=".dll"
1195
    EXESUF=".exe"
1196
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1197
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1198
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1199
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1200
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1201
fi
1202

    
1203
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1204
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1205

    
1206
test -n "$cross_prefix" && cross_compile=yes
1207
cc="${cross_prefix}${cc}"
1208
ar="${cross_prefix}${ar}"
1209
ranlib="${cross_prefix}${ranlib}"
1210
strip="${cross_prefix}${strip}"
1211

    
1212
# we need to build at least one lib type
1213
if disabled_all lstatic lshared; then
1214
    cat <<EOF
1215
At least one library type must be built.
1216
Specify --enable-static to build the static libraries or --enable-shared to
1217
build the shared libraries as well. To only build the shared libraries specify
1218
--disable-static in addition to --enable-shared.
1219
EOF
1220
    exit 1;
1221
fi
1222

    
1223
if enabled libtheora && disabled libogg; then
1224
    die "libogg must be enabled to enable libtheora."
1225
fi
1226

    
1227
if enabled libvorbis && disabled libogg; then
1228
    die "libogg must be enabled to enable libvorbis."
1229
fi
1230

    
1231
if enabled_any libfaad libfaadbin ; then
1232
    if check_header faad.h; then
1233
        check_cc << EOF
1234
#include <faad.h>
1235
#ifndef FAAD2_VERSION
1236
ok faad1
1237
#endif
1238
int main( void ) { return 0; }
1239
EOF
1240
        test $? = 0 && enable libfaad2
1241
    else
1242
        die "FAAD test failed."
1243
    fi
1244
fi
1245

    
1246

    
1247
if disabled gpl ; then
1248
    die_gpl_disabled(){
1249
        name=$1
1250
        shift
1251
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1252
    }
1253
    die_gpl_disabled "The Postprocessing code" pp
1254
    die_gpl_disabled "liba52"                  liba52 liba52bin
1255
    die_gpl_disabled "libxvidcore"             xvid
1256
    die_gpl_disabled "x264"                    x264
1257
    die_gpl_disabled "libdts"                  libdts
1258
    die_gpl_disabled "FAAD2"                   libfaad2
1259
    die_gpl_disabled "The X11 grabber"         x11grab
1260
    die_gpl_disabled "The software scaler"     swscaler
1261
fi
1262

    
1263
# compute MMX state
1264
if test $mmx = "default"; then
1265
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1266
        mmx="yes"
1267
    else
1268
        mmx="no"
1269
    fi
1270
fi
1271

    
1272
test -z "$need_memalign" && need_memalign="$mmx"
1273

    
1274
#Darwin CC versions
1275
needmdynamicnopic="no"
1276
if test $targetos = Darwin; then
1277
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1278
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1279
    else
1280
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1281
        case "$gcc_version" in
1282
            *2.95*)
1283
                add_cflags "-no-cpp-precomp -pipe"
1284
                ;;
1285
            *[34].*)
1286
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1287
                if disabled lshared; then
1288
                   needmdynamicnopic="yes"
1289
                fi
1290
                ;;
1291
            *)
1292
                add_cflags "-no-cpp-precomp -pipe"
1293
                if disabled lshared; then
1294
                   needmdynamicnopic="yes"
1295
                fi
1296
                ;;
1297
        esac
1298
    fi
1299
fi
1300

    
1301
if ! disabled optimize ; then
1302
    add_cflags "-fomit-frame-pointer"
1303
fi
1304

    
1305
# Can only do AltiVec on PowerPC
1306
if test $altivec = "default"; then
1307
    if test $arch = "powerpc"; then
1308
        altivec="yes"
1309
    else
1310
        altivec="no"
1311
    fi
1312
fi
1313

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

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

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

    
1409
# check for assembler specific support
1410

    
1411
if test $arch = "powerpc"; then
1412
check_cc <<EOF && dcbzl=yes
1413
int main(void) {
1414
    register long zero = 0;
1415
    char data[1024];
1416
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1417
return 0;
1418
}
1419
EOF
1420
fi
1421

    
1422
# check for SIMD availability
1423

    
1424
# AltiVec flags: The FSF version of GCC differs from the Apple version
1425
if test $arch = "powerpc"; then
1426
    if enabled altivec; then
1427
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1428
            add_cflags "-faltivec"
1429
        else
1430
            add_cflags "-maltivec -mabi=altivec"
1431
        fi
1432
    fi
1433
fi
1434

    
1435
check_header altivec.h
1436

    
1437
# check if our compiler supports Motorola AltiVec C API
1438
if enabled altivec; then
1439
    if enabled altivec_h; then
1440
        inc_altivec_h="#include <altivec.h>"
1441
    else
1442
        inc_altivec_h=
1443
    fi
1444
    check_cc <<EOF || altivec=no
1445
$inc_altivec_h
1446
int main(void) {
1447
    vector signed int v1, v2, v3;
1448
    v1 = vec_add(v2,v3);
1449
    return 0;
1450
}
1451
EOF
1452
fi
1453

    
1454
# check armv5te instructions support
1455
if test $armv5te = "default" -a $arch = "armv4l"; then
1456
    armv5te=no
1457
    check_cc <<EOF && armv5te=yes
1458
        int main(void) {
1459
        __asm__ __volatile__ ("qadd r0, r0, r0");
1460
        }
1461
EOF
1462
fi
1463

    
1464
if test $armv6 = "default" -a $arch = "armv4l"; then
1465
    check_cc <<EOF && armv6=yes || armv6=no
1466
int main(void) {
1467
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1468
}
1469
EOF
1470
fi
1471

    
1472
# check iwmmxt support
1473
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1474
    iwmmxt=no
1475
    check_cc <<EOF && iwmmxt=yes
1476
        int main(void) {
1477
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1478
        }
1479
EOF
1480
fi
1481

    
1482
# mmi only available on mips
1483
if test $mmi = "default"; then
1484
    if test $arch = "mips"; then
1485
        mmi="yes"
1486
    else
1487
        mmi="no"
1488
    fi
1489
fi
1490

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

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

    
1516
# ---
1517
# check availability of some header files
1518

    
1519
check_header malloc.h
1520
check_func memalign
1521

    
1522
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1523
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1524
fi
1525

    
1526
check_header byteswap.h
1527

    
1528
check_func inet_aton
1529
check_func localtime_r
1530
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
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 pthreads beosthreads os2threads w32threads; do
1549
    if enabled $thread; then
1550
        if ! disabled thread_type ; then
1551
            die "ERROR: Only one thread type must be selected."
1552
        else
1553
            thread_type="$thread"
1554
        fi
1555
    fi
1556
done
1557

    
1558
# these are off by default, so fail if requested and not available
1559
enabled libdts     && require libdts dts.h dts_init -ldts -lm
1560
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1561
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1562
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1563
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1564
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1565
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1566
enabled xvid       && require XviD xvid.h xvid_global -lxvidcore
1567
enabled x264       && require x264 x264.h x264_encoder_open -lx264
1568
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1569
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1570

    
1571
# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1572
# the generic test functions
1573
if enabled libfaac; then
1574
    save_flags
1575
    temp_extralibs -lfaac
1576
    check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1577
#include <stdint.h>
1578
#include <faac.h>
1579
int main(){
1580
    char *id, *cpr;
1581
    faacEncGetVersion(&id, &cpr);
1582
    return 0;
1583
}
1584
EOF
1585
    restore_flags
1586
fi
1587

    
1588
# Ugh, recent faad2 versions have renamed all functions and #define the
1589
# old names in faad.h.  Generic tests won't work.
1590
if enabled libfaad; then
1591
    save_flags
1592
    temp_extralibs -lfaad
1593
    check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1594
#include <faad.h>
1595
int main(){
1596
    faacDecOpen();
1597
    return 0;
1598
}
1599
EOF
1600
    restore_flags
1601
fi
1602

    
1603
# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1604
if enabled avisynth; then
1605
    save_flags
1606
    temp_extralibs -lvfw32
1607
    check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1608
#include <windows.h>
1609
#include <vfw.h>
1610
int main(){
1611
    AVIFileInit();
1612
    return 0;
1613
}
1614
EOF
1615
    restore_flags
1616
fi
1617

    
1618

    
1619
# test for lrintf in math.h
1620
check_exec <<EOF && lrintf=yes || lrintf=no
1621
#define _ISOC9X_SOURCE  1
1622
#include <math.h>
1623
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1624
EOF
1625

    
1626
_restrict=
1627
for restrict_keyword in restrict __restrict__ __restrict; do
1628
    check_cc <<EOF && _restrict=$restrict_keyword && break
1629
void foo(char * $restrict_keyword p);
1630
EOF
1631
done
1632

    
1633
# dlopen/dlfcn.h probing
1634

    
1635
check_header dlfcn.h
1636

    
1637
if check_func dlopen; then
1638
    ldl=
1639
elif check_func dlopen -ldl; then
1640
    ldl=-ldl
1641
fi
1642

    
1643
if test "$vhook" = "default"; then
1644
    vhook="$dlopen"
1645
fi
1646

    
1647
if enabled_any vhook liba52bin libfaadbin; then
1648
    add_extralibs $ldl
1649
fi
1650

    
1651
if test "$targetos" = "CYGWIN" -a "$lstatic" = "yes" ; then
1652
    vhook="no"
1653
    echo
1654
    echo "At the moment vhooks don't work on Cygwin static builds."
1655
    echo "Patches welcome."
1656
    echo
1657
fi
1658

    
1659
if enabled vhook; then
1660
    check_ldflags -rdynamic
1661
    check_ldflags -export-dynamic
1662
fi
1663

    
1664
if enabled audio_beos; then
1665
    add_extralibs "-lmedia -lbe"
1666
fi
1667

    
1668
##########################################
1669
# imlib check
1670

    
1671
imlib2=no
1672
if (imlib2-config --version) >/dev/null 2>&1 ; then
1673
    temp_cflags `imlib2-config --cflags`
1674
    temp_extralibs `imlib2-config --libs`
1675
    check_ld <<EOF && imlib2=yes
1676
#include <Imlib2.h>
1677
int main( void ) { return (int) imlib_load_font("foo"); }
1678
EOF
1679
    restore_flags
1680
fi
1681

    
1682
##########################################
1683
# FreeType check
1684

    
1685
freetype2=no
1686
if test "x$targetos" != "xBeOS"; then
1687
  if (freetype-config --version) >/dev/null 2>&1 ; then
1688
      temp_cflags `freetype-config --cflags`
1689
      temp_extralibs `freetype-config --libs`
1690
      check_ld <<EOF && freetype2=yes
1691
#include <ft2build.h>
1692
int main( void ) { return (int) FT_Init_FreeType(0); }
1693
EOF
1694
      restore_flags
1695
  fi
1696
fi
1697

    
1698
##########################################
1699
# SDL check
1700

    
1701
sdl_too_old=no
1702
sdl=no
1703
SDL_CONFIG="${cross_prefix}sdl-config"
1704
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1705
    temp_cflags `"${SDL_CONFIG}" --cflags`
1706
    temp_extralibs `"${SDL_CONFIG}" --libs`
1707
    check_ld <<EOF
1708
#include <SDL.h>
1709
#undef main /* We don't want SDL to override our main() */
1710
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
1711
EOF
1712
    if test $? = 0; then
1713
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1714
        if test "$_sdlversion" -lt 121 ; then
1715
            sdl_too_old=yes
1716
        else
1717
            sdl=yes
1718
            check_cc <<EOF && sdl_video_size=yes || sdl_video_size=no
1719
#include <SDL.h>
1720
int main(void){
1721
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1722
    int w = vi->current_w;
1723
    return 0;
1724
}
1725
EOF
1726
        fi
1727
    fi
1728
    restore_flags
1729
fi
1730

    
1731
enabled sdl || ffplay=no
1732

    
1733
##########################################
1734
# texi2html check
1735

    
1736
texi2html=no
1737
if (texi2html -version) >/dev/null 2>&1; then
1738
texi2html=yes
1739
fi
1740

    
1741
##########################################
1742
# IPv6 check
1743

    
1744
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1745
#include <sys/types.h>
1746
#include <sys/socket.h>
1747
#include <netinet/in.h>
1748
#include <netdb.h>
1749
int main( void ) {
1750
  struct sockaddr_storage saddr;
1751
  struct ipv6_mreq mreq6;
1752
  getaddrinfo(0,0,0,0);
1753
  getnameinfo(0,0,0,0,0,0,0);
1754
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1755
}
1756
EOF
1757

    
1758
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1759
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1760
#include <sys/time.h>
1761
#include <asm/types.h>
1762
#include <linux/videodev2.h>
1763
int dummy = V4L2_PIX_FMT_YUV420;
1764
struct v4l2_buffer dummy1;
1765
EOF
1766

    
1767
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1768
if enabled bktr; then
1769
    check_header dev/bktr/ioctl_meteor.h
1770
    check_header dev/bktr/ioctl_bt848.h
1771

    
1772
    check_header machine/ioctl_meteor.h
1773
    check_header machine/ioctl_bt848.h
1774

    
1775
    check_header dev/video/meteor/ioctl_meteor.h
1776
    check_header dev/video/bktr/ioctl_bt848.h
1777

    
1778
    check_header dev/ic/bt8xx.h
1779
fi
1780

    
1781
# Deal with the x11 frame grabber
1782
enabled x11grab                         &&
1783
enabled gpl                             &&
1784
enabled x11_grab_device_demuxer         &&
1785
check_header X11/Xlib.h                 &&
1786
check_header X11/extensions/XShm.h      &&
1787
check_func XOpenDisplay -lX11           &&
1788
check_func XShmCreateImage -lX11 -lXext &&
1789
add_extralibs -lX11 -lXext              ||
1790
disable x11_grab_device_demuxer
1791

    
1792
enabled debug && add_cflags -g
1793

    
1794
# add some useful compiler flags if supported
1795
check_cflags -Wdeclaration-after-statement
1796
check_cflags -Wall
1797
check_cflags -Wno-switch
1798
check_cflags -Wdisabled-optimization
1799
check_cflags -Wpointer-arith
1800
check_cflags -Wredundant-decls
1801
check_cflags -Wno-pointer-sign
1802
enabled extrawarnings && check_cflags -Winline
1803

    
1804
# add some linker flags
1805
check_ldflags $LDLATEFLAGS
1806

    
1807
# not all compilers support -Os
1808
test "$optimize" = "small" && check_cflags -Os
1809

    
1810
if enabled optimize; then
1811
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1812
        add_cflags  "-O5"
1813
        add_ldflags "-O5"
1814
    else
1815
        add_cflags "-O3"
1816
    fi
1817
fi
1818

    
1819
# PIC flags for shared library objects where they are needed
1820
if enabled lshared; then
1821
    # LIBOBJFLAGS may have already been set in the OS configuration
1822
    if test -z "$LIBOBJFLAGS" ; then
1823
        case "$arch" in
1824
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
1825
        esac
1826
    fi
1827
fi
1828

    
1829
if enabled gprof; then
1830
    add_cflags  "-p"
1831
    add_ldflags "-p"
1832
fi
1833

    
1834
VHOOKCFLAGS="-fPIC $CFLAGS"
1835
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1836

    
1837
# find if .align arg is power-of-two or not
1838
if test $asmalign_pot = "unknown"; then
1839
    asmalign_pot="no"
1840
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1841
fi
1842

    
1843
echo "install prefix            $PREFIX"
1844
echo "source path               $source_path"
1845
echo "C compiler                $cc"
1846
echo "make                      $make"
1847
echo ".align is power-of-two    $asmalign_pot"
1848
echo "ARCH                      $arch ($cpu)"
1849
if test "$BUILDSUF" != ""; then
1850
    echo "build suffix              $BUILDSUF"
1851
fi
1852
echo "big-endian                $bigendian"
1853
if test $arch = "x86_32" -o $arch = "x86_64"; then
1854
    echo "MMX enabled               $mmx"
1855
    echo "CMOV enabled              $cmov"
1856
    echo "CMOV is fast              $fast_cmov"
1857
fi
1858
if test $arch = "armv4l"; then
1859
    echo "ARMv5TE enabled           $armv5te"
1860
    echo "ARMv6 enabled             $armv6"
1861
    echo "IWMMXT enabled            $iwmmxt"
1862
fi
1863
if test $arch = "mips"; then
1864
    echo "MMI enabled               $mmi"
1865
fi
1866
if test $arch = "powerpc"; then
1867
    echo "AltiVec enabled           $altivec"
1868
    echo "dcbzl available           $dcbzl"
1869
fi
1870
echo "gprof enabled             $gprof"
1871
echo "debug symbols             $debug"
1872
echo "strip symbols             $dostrip"
1873
echo "optimize                  $optimize"
1874
echo "static                    $lstatic"
1875
echo "shared                    $lshared"
1876
echo "postprocessing support    $pp"
1877
echo "software scaler enabled   $swscaler"
1878
echo "video hooking             $vhook"
1879
if enabled vhook; then
1880
    echo "Imlib2 support            $imlib2"
1881
    echo "FreeType support          $freetype2"
1882
fi
1883
echo "network support           $network"
1884
if enabled network; then
1885
    echo "IPv6 support              $ipv6"
1886
fi
1887
echo "threading support         $thread_type"
1888
echo "SDL support               $sdl"
1889
if enabled sdl_too_old; then
1890
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1891
fi
1892
echo "Sun medialib support      $mlib"
1893
echo "AVISynth enabled          $avisynth"
1894
echo "liba52 support            $liba52"
1895
echo "liba52 dlopened           $liba52bin"
1896
echo "libdts support            $libdts"
1897
echo "libfaac enabled           $libfaac"
1898
echo "libfaad enabled           $libfaad"
1899
echo "faadbin enabled           $libfaadbin"
1900
echo "libgsm enabled            $libgsm"
1901
echo "libmp3lame enabled        $libmp3lame"
1902
echo "libnut enabled            $libnut"
1903
echo "libogg enabled            $libogg"
1904
echo "libtheora enabled         $libtheora"
1905
echo "libvorbis enabled         $libvorbis"
1906
echo "x264 enabled              $x264"
1907
echo "XviD enabled              $xvid"
1908
echo "zlib enabled              $zlib"
1909
echo "AMR-NB float support      $amr_nb"
1910
echo "AMR-NB fixed support      $amr_nb_fixed"
1911
echo "AMR-WB float support      $amr_wb"
1912
echo "AMR-WB IF2 support        $amr_if2"
1913
if disabled gpl; then
1914
    echo "License: LGPL"
1915
else
1916
    echo "License: GPL"
1917
fi
1918

    
1919
echo "Creating config.mak and config.h..."
1920

    
1921
echo "# Automatically generated by configure - do not modify!" > config.mak
1922
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1923
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1924

    
1925
echo "PREFIX=$PREFIX" >> config.mak
1926
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1927
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1928
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1929
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1930
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1931
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1932
echo "MAKE=$make" >> config.mak
1933
echo "CC=$cc" >> config.mak
1934
echo "AR=$ar" >> config.mak
1935
echo "RANLIB=$ranlib" >> config.mak
1936
if enabled dostrip; then
1937
    echo "STRIP=$strip" >> config.mak
1938
else
1939
    echo "STRIP=echo ignoring strip" >> config.mak
1940
fi
1941

    
1942
echo "OPTFLAGS=$CFLAGS" >> config.mak
1943
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1944
echo "LDFLAGS=$LDFLAGS" >> config.mak
1945
echo "LDCONFIG=$LDCONFIG" >> config.mak
1946
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1947
echo "SHFLAGS=$SHFLAGS" >> config.mak
1948
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1949
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1950
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1951
echo "BUILD_STATIC=$lstatic" >> config.mak
1952
echo "BUILDSUF=$BUILDSUF" >> config.mak
1953
echo "LIBPREF=$LIBPREF" >> config.mak
1954
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1955
if enabled lstatic; then
1956
  echo "LIB=$LIB" >> config.mak
1957
else # Some Make complain if this variable does not exist.
1958
  echo "LIB=" >> config.mak
1959
fi
1960
echo "SLIBPREF=$SLIBPREF" >> config.mak
1961
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1962
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1963
echo "TARGET_OS=$targetos" >> config.mak
1964

    
1965
ucarch=`toupper $arch`
1966
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1967
echo "#define ARCH_${ucarch} 1" >> $TMPH
1968

    
1969
# special cases
1970
case "$arch" in
1971
    x86_32|x86_64)
1972
        echo "TARGET_ARCH_X86=yes" >> config.mak
1973
        echo "#define ARCH_X86 1" >> $TMPH
1974
        ;;
1975
    powerpc)
1976
        if test "$POWERPCMODE" = "64bits"; then
1977
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1978
        fi
1979
        if enabled powerpc_perf; then
1980
            echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
1981
        fi
1982
        ;;
1983
    sparc64)
1984
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
1985
        echo "#define ARCH_SPARC 1" >> $TMPH
1986
        ;;
1987
esac
1988

    
1989
if enabled bigendian; then
1990
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1991
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1992
fi
1993
if enabled mmx; then
1994
  echo "#define __CPU__ 586" >> $TMPH
1995
fi
1996

    
1997
if enabled sdl; then
1998
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1999
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2000
fi
2001
if enabled texi2html; then
2002
  echo "BUILD_DOC=yes" >> config.mak
2003
fi
2004

    
2005
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
2006
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
2007
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
2008
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
2009
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
2010

    
2011

    
2012

    
2013
if enabled lshared; then
2014
  echo "BUILD_SHARED=yes" >> config.mak
2015
  echo "PIC=-fPIC -DPIC" >> config.mak
2016
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
2017
  echo "SPPVERSION=$pp_version" >> config.mak
2018
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
2019
  echo "LAVCVERSION=$lavc_version" >> config.mak
2020
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
2021
  echo "LAVFVERSION=$lavf_version" >> config.mak
2022
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
2023
  echo "LAVUVERSION=$lavu_version" >> config.mak
2024
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
2025
  echo "SWSVERSION=$sws_version" >> config.mak
2026
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
2027
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2028
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2029
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2030
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2031
fi
2032
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2033
echo "EXTRALIBS=$extralibs" >> config.mak
2034

    
2035
enabled_any $ENCODER_LIST && enable encoders
2036
enabled_any $DECODER_LIST && enable decoders
2037
enabled_any $MUXER_LIST   && enable muxers
2038
enabled_any $DEMUXER_LIST && enable demuxers
2039

    
2040
enabled_any pthreads beosthreads os2threads w32threads && enable threads
2041

    
2042
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
2043
    $DEMUXER_LIST $MUXER_LIST
2044

    
2045
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2046
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
2047
print_config TARGET_ $TMPH config.mak $TARGET_LIST
2048

    
2049
if test "$targetos" = "Darwin"; then
2050
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
2051
fi
2052

    
2053
echo "#define restrict $_restrict" >> $TMPH
2054

    
2055
if test "$optimize" = "small"; then
2056
  echo "#define always_inline"  >> $TMPH
2057
  echo "#define CONFIG_SMALL 1" >> $TMPH
2058
fi
2059

    
2060
echo "SRC_PATH=\"$source_path\"" >> config.mak
2061
echo "SRC_PATH_BARE=$source_path" >> config.mak
2062
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2063

    
2064
if enabled amr_if2; then
2065
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
2066
fi
2067

    
2068
# Apparently it's not possible to portably echo a backslash.
2069
if enabled asmalign_pot; then
2070
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2071
else
2072
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2073
fi
2074

    
2075

    
2076
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2077
    ucname="`toupper $codec`"
2078
    config_name="CONFIG_$ucname"
2079
    enabled_name="ENABLE_$ucname"
2080
    if enabled $codec; then
2081
        echo "#define $config_name 1" >> $TMPH
2082
        echo "#define $enabled_name 1" >> $TMPH
2083
        echo "$config_name=yes" >> config.mak
2084
    else
2085
        echo "#define $enabled_name 0" >> $TMPH
2086
    fi
2087
done
2088

    
2089
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2090
if ! cmp -s $TMPH config.h; then
2091
        mv -f $TMPH config.h
2092
else
2093
        echo "config.h is unchanged"
2094
fi
2095

    
2096
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2097

    
2098
# build tree in object directory if source path is different from current one
2099
if enabled source_path_used; then
2100
    DIRS="\
2101
         doc \
2102
         libavformat \
2103
         libavcodec \
2104
         libavcodec/alpha \
2105
         libavcodec/armv4l \
2106
         libavcodec/bfin \
2107
         libavcodec/i386 \
2108
         libavcodec/sparc \
2109
         libavcodec/mlib \
2110
         libavcodec/ppc \
2111
         libavcodec/liba52 \
2112
         libavcodec/amr \
2113
         libavcodec/amr_float \
2114
         libavcodec/amrwb_float \
2115
         libpostproc \
2116
         libavutil \
2117
         libswscale \
2118
         tests \
2119
         vhook \
2120
         "
2121
    FILES="\
2122
          Makefile \
2123
          common.mak \
2124
          libavformat/Makefile \
2125
          libavcodec/Makefile \
2126
          libpostproc/Makefile \
2127
          libavutil/Makefile \
2128
          libswscale/Makefile \
2129
          tests/Makefile \
2130
          vhook/Makefile \
2131
          doc/Makefile \
2132
          doc/texi2pod.pl \
2133
          "
2134
    for dir in $DIRS ; do
2135
            mkdir -p $dir
2136
    done
2137
    for f in $FILES ; do
2138
        ln -sf "$source_path/$f" $f
2139
    done
2140
fi
2141

    
2142

    
2143
# build pkg-config files
2144
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2145

    
2146
pkgconfig_generate(){
2147
name=$1
2148
comment=$2
2149
version=$3
2150
libs=$4
2151
requires=$5
2152
include=$6
2153
cat <<EOF >$name.pc
2154
prefix=$PREFIX
2155
exec_prefix=\${prefix}
2156
libdir=\${exec_prefix}/lib
2157
includedir=\${prefix}/include
2158

    
2159
Name: $name
2160
Description: $comment
2161
Version: $version
2162
Requires: $requires
2163
Conflicts:
2164
Libs: -L\${libdir} $libs
2165
Cflags: -I\${includedir} -I\${includedir}/$include
2166
EOF
2167
}
2168

    
2169
pkgconfig_generate_uninstalled(){
2170
name=$1
2171
shortname=${name#lib}
2172
comment=$2
2173
version=$3
2174
libs=$4
2175
requires=$5
2176
cat <<EOF >$name-uninstalled.pc
2177
prefix=
2178
exec_prefix=
2179
libdir=\${pcfiledir}/$name
2180
includedir=\${pcfiledir}/$name
2181

    
2182
Name: $name
2183
Description: $comment
2184
Version: $version
2185
Requires: $requires
2186
Conflicts:
2187
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2188
Cflags: -I\${includedir}
2189
EOF
2190
}
2191

    
2192
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2193
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2194

    
2195
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2196
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2197

    
2198
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2199
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2200

    
2201
if enabled pp; then
2202
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2203
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2204
fi
2205

    
2206
if enabled swscaler; then
2207
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2208
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2209
else
2210
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2211
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2212
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2213
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2214
fi