Statistics
| Branch: | Revision:

ffmpeg / configure @ 20c516c6

History | View | Annotate | Download (55.6 KB)

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

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

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

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

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

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

    
53
show_help(){
54
  echo "Usage: configure [options]"
55
  echo "Options: [defaults in brackets after descriptions]"
56
  echo
57
  echo "Standard options:"
58
  echo "  --help                   print this message"
59
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
64
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
65
  echo "  --enable-mp3lame         enable MP3 encoding via libmp3lame [default=no]"
66
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
67
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
68
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [default=no]"
69
  echo "  --enable-faad            enable FAAD support via libfaad [default=no]"
70
  echo "  --enable-faadbin         build FAAD support with runtime linking [default=no]"
71
  echo "  --enable-faac            enable FAAC support via libfaac [default=no]"
72
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
73
  echo "  --enable-xvid            enable XviD support via xvidcore [default=no]"
74
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
75
  echo "  --enable-mingw32         enable MinGW native/cross Windows compile"
76
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
77
  echo "  --enable-a52             enable GPLed A52 support [default=no]"
78
  echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
79
  echo "  --enable-dts             enable GPLed DTS support [default=no]"
80
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
81
  echo "  --enable-static          build static libraries [default=yes]"
82
  echo "  --disable-static         do not build static libraries [default=no]"
83
  echo "  --enable-shared          build shared libraries [default=no]"
84
  echo "  --disable-shared         do not build shared libraries [default=yes]"
85
  echo "  --enable-amr_nb          enable amr_nb float audio codec"
86
  echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
87
  echo "  --enable-amr_wb          enable amr_wb float audio codec"
88
  echo "  --enable-amr_if2         enable amr_wb IF2 audio codec"
89
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
90
  echo "  --enable-pthreads        use pthreads [default=no]"
91
  echo "  --enable-w32threads      use Win32 threads [default=no]"
92
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
93
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
94
  echo "                           and libraw1394 [default=no]"
95
  echo "  --enable-swscaler        software scaler support [default=no]"
96
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
97
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
98
  echo "                           and ffmpeg will be under GPL [default=no]"
99
  echo ""
100
  echo "Advanced options (experts only):"
101
  echo "  --source-path=PATH       path to source code [$source_path]"
102
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
103
  echo "  --cross-compile          assume a cross-compiler is used"
104
  echo "  --cc=CC                  use C compiler CC [$cc]"
105
  echo "  --make=MAKE              use specified make [$make]"
106
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
107
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
108
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
109
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
110
  echo "  --arch=ARCH              select architecture  [$arch]"
111
  echo "  --cpu=CPU                selects the minimum cpu required (affects
112
                                   instruction selection, may crash on older CPUs)"
113
  echo "  --powerpc-perf-enable    enable performance report on PPC"
114
  echo "                           (requires enabling PMC)"
115
  echo "  --disable-mmx            disable MMX usage"
116
  echo "  --disable-armv5te        disable armv5te usage"
117
  echo "  --disable-iwmmxt         disable iwmmxt usage"
118
  echo "  --disable-altivec        disable AltiVec usage"
119
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
120
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
121
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
122
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
123
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
124
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
125
  echo "  --disable-network        disable network support [default=no]"
126
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
127
  echo "  --disable-zlib           disable zlib [default=no]"
128
  echo "  --disable-vhook          disable video hooking support"
129
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
130
  echo "  --disable-debug          disable debugging symbols"
131
  echo "  --disable-opts           disable compiler optimizations"
132
  echo "  --enable-extra-warnings  enable more compiler warnings"
133
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
134
  echo "                           MPEG audio decoding [default=no]"
135
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
136
  echo "  --disable-ffmpeg         disable ffmpeg build"
137
  echo "  --disable-ffserver       disable ffserver build"
138
  echo "  --disable-ffplay         disable ffplay build"
139
  echo "  --enable-small           optimize for size instead of speed"
140
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
141
  echo "  --disable-strip          disable stripping of executables and shared libraries"
142
  echo "  --disable-encoder=NAME   disables encoder NAME"
143
  echo "  --enable-encoder=NAME    enables encoder NAME"
144
  echo "  --disable-decoder=NAME   disables decoder NAME"
145
  echo "  --enable-decoder=NAME    enables decoder NAME"
146
  echo "  --disable-encoders       disables all encoders"
147
  echo "  --disable-decoders       disables all decoders"
148
  echo "  --disable-muxer=NAME     disables muxer NAME"
149
  echo "  --enable-muxer=NAME      enables muxer NAME"
150
  echo "  --disable-muxers         disables all muxers"
151
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
152
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
153
  echo "  --disable-demuxers       disables all demuxers"
154
  echo "  --enable-parser=NAME     enables parser NAME"
155
  echo "  --disable-parser=NAME    disables parser NAME"
156
  echo "  --disable-parsers        disables all parsers"
157
  echo ""
158
  echo "NOTE: Object files are built at the place where configure is launched."
159
  exit 1
160
}
161

    
162
log(){
163
    echo "$@" >>$logfile
164
}
165

    
166
log_file(){
167
    log BEGIN $1
168
    cat -n $1 >>$logfile
169
    log END $1
170
}
171

    
172
echolog(){
173
    log "$@"
174
    echo "$@"
175
}
176

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

    
199
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
200
toupper(){
201
    echo "$@" | tr '[a-z]' '[A-Z]'
202
}
203

    
204
set_all(){
205
    value=$1
206
    shift
207
    for var in $*; do
208
        eval $var=$value
209
    done
210
}
211

    
212
enable(){
213
    set_all yes $*
214
}
215

    
216
disable(){
217
    set_all no $*
218
}
219

    
220
enabled(){
221
    eval test "x\$$1" = "xyes"
222
}
223

    
224
enabled_all(){
225
    for opt; do
226
        enabled $opt || return 1
227
    done
228
}
229

    
230
enabled_any(){
231
    for opt; do
232
        enabled $opt && return 0
233
    done
234
}
235

    
236
print_config(){
237
    pfx=$1
238
    header=$2
239
    makefile=$3
240
    shift 3
241
    for cfg; do
242
        if enabled $cfg; then
243
            ucname="${pfx}`toupper $cfg`"
244
            echo "#define ${ucname} 1" >> $header
245
            echo "${ucname}=yes" >> $makefile
246
        fi
247
    done
248
}
249

    
250
flags_saved(){
251
    (: ${SAVE_CFLAGS?}) 2>/dev/null
252
}
253

    
254
save_flags(){
255
    flags_saved && return
256
    SAVE_CFLAGS="$CFLAGS"
257
    SAVE_LDFLAGS="$LDFLAGS"
258
    SAVE_extralibs="$extralibs"
259
}
260

    
261
restore_flags(){
262
    CFLAGS="$SAVE_CFLAGS"
263
    LDFLAGS="$SAVE_LDFLAGS"
264
    extralibs="$SAVE_extralibs"
265
    unset SAVE_CFLAGS
266
    unset SAVE_LDFLAGS
267
    unset SAVE_extralibs
268
}
269

    
270
temp_cflags(){
271
    save_flags
272
    CFLAGS="$CFLAGS $*"
273
}
274

    
275
temp_ldflags(){
276
    save_flags
277
    LDFLAGS="$LDFLAGS $*"
278
}
279

    
280
temp_extralibs(){
281
    save_flags
282
    extralibs="$extralibs $*"
283
}
284

    
285
append(){
286
    var=$1
287
    shift
288
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
289
    eval "$var=\"\$$var $*\""
290
}
291

    
292
add_cflags(){
293
    append CFLAGS "$@"
294
}
295

    
296
add_ldflags(){
297
    append LDFLAGS "$@"
298
}
299

    
300
add_extralibs(){
301
    append extralibs "$@"
302
}
303

    
304
check_cmd(){
305
    log "$@"
306
    "$@" >>$logfile 2>&1
307
}
308

    
309
check_cc(){
310
    log check_cc "$@"
311
    cat >$TMPC
312
    log_file $TMPC
313
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
314
}
315

    
316
check_cpp(){
317
    log check_cpp "$@"
318
    cat >$TMPC
319
    log_file $TMPC
320
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
321
}
322

    
323
check_ld(){
324
    log check_ld "$@"
325
    check_cc || return
326
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
327
}
328

    
329
check_cflags(){
330
    log check_cflags "$@"
331
    check_cc "$@" <<EOF && add_cflags "$@"
332
int x;
333
EOF
334
}
335

    
336
check_ldflags(){
337
    log check_ldflags "$@"
338
    check_ld "$@" <<EOF && add_ldflags "$@"
339
int main(){
340
    return 0;
341
}
342
EOF
343
}
344

    
345
check_header(){
346
    log check_header "$@"
347
    header=$1
348
    shift
349
    check_cpp "$@" <<EOF
350
#include <$header>
351
int x;
352
EOF
353
    err=$?
354
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
355
    test "$err" = 0 && enable $var || disable $var
356
    return $err
357
}
358

    
359
check_func(){
360
    log check_func "$@"
361
    func=$1
362
    shift
363
    check_ld "$@" <<EOF
364
extern int $func();
365
int main(){
366
    $func();
367
}
368
EOF
369
    err=$?
370
    test "$err" = 0 && enable $func || disable $func
371
    return $err
372
}
373

    
374
check_lib(){
375
    log check_lib "$@"
376
    header="$1"
377
    func="$2"
378
    shift 2
379
    temp_extralibs "$@"
380
    check_header $header && check_func $func && add_extralibs "$@"
381
    err=$?
382
    restore_flags
383
    return $err
384
}
385

    
386
check_exec(){
387
    check_ld "$@" && { test "$cross_compile" = yes || $TMPE >>$logfile 2>&1; }
388
}
389

    
390
require(){
391
    name="$1"
392
    header="$2"
393
    func="$3"
394
    shift 3
395
    check_lib $header $func "$@" || die "ERROR: $name not found"
396
}
397

    
398
apply(){
399
    file=$1
400
    shift
401
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
402
}
403

    
404
CONFIG_LIST='
405
    encoders
406
    decoders
407
    parsers
408
    muxers
409
    demuxers
410
    a52
411
    a52bin
412
    amr
413
    amr_nb
414
    amr_nb_fixed
415
    amr_wb
416
    audio_beos
417
    audio_oss
418
    avisynth
419
    beos_netserver
420
    bktr
421
    dc1394
422
    dts
423
    dv1394
424
    faac
425
    faad
426
    faadbin
427
    ffmpeg
428
    ffplay
429
    ffserver
430
    gpl
431
    ipv6
432
    libgsm
433
    libnut
434
    libogg
435
    libvorbis
436
    memalign_hack
437
    mp3lame
438
    mpegaudio_hp
439
    network
440
    pp
441
    protocols
442
    swscaler
443
    vhook
444
    video4linux
445
    video4linux2
446
    wince
447
    x11grab
448
    x264
449
    xvid
450
    zlib
451
'
452

    
453
HAVE_LIST='
454
    altivec_h
455
    beosthreads
456
    byteswap_h
457
    dcbzl
458
    dev_bktr_ioctl_bt848_h
459
    dev_bktr_ioctl_meteor_h
460
    dev_ic_bt8xx_h
461
    dev_video_meteor_ioctl_meteor_h
462
    dev_video_bktr_ioctl_bt848_h
463
    dlfcn_h
464
    dlopen
465
    freetype2
466
    gprof
467
    imlib2
468
    inet_aton
469
    localtime_r
470
    lrintf
471
    machine_ioctl_bt848_h
472
    machine_ioctl_meteor_h
473
    malloc_h
474
    memalign
475
    mlib
476
    os2
477
    os2threads
478
    pthreads
479
    sdl
480
    sdl_video_size
481
    threads
482
    w32threads
483
'
484

    
485
# set temporary file name
486
if test ! -z "$TMPDIR" ; then
487
    TMPDIR1="${TMPDIR}"
488
elif test ! -z "$TEMPDIR" ; then
489
    TMPDIR1="${TEMPDIR}"
490
else
491
    TMPDIR1="/tmp"
492
fi
493

    
494
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
495
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
496
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
497
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
498
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
499

    
500
# default parameters
501
logging="yes"
502
logfile="config.err"
503
PREFIX="/usr/local"
504
libdir='${PREFIX}/lib'
505
shlibdir="$libdir"
506
incdir='${PREFIX}/include/ffmpeg'
507
mandir='${PREFIX}/man'
508
bindir='${PREFIX}/bin'
509
cross_prefix=""
510
cross_compile="no"
511
cc="gcc"
512
ar="ar"
513
ranlib="ranlib"
514
make="make"
515
strip="strip"
516
arch=`uname -m`
517
cpu="generic"
518
powerpc_perf="no"
519
mmx="default"
520
cmov="no"
521
cmov_is_fast="no"
522
armv5te="default"
523
iwmmxt="default"
524
altivec="default"
525
dcbzl="no"
526
mmi="default"
527
case "$arch" in
528
  i386|i486|i586|i686|i86pc|BePC)
529
    arch="x86_32"
530
  ;;
531
  x86_64|amd64)
532
    arch="x86_32"
533
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
534
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
535
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
536
        arch="x86_64"
537
      fi
538
    fi
539
  ;;
540
  # armv4l is a subset of armv[567]*l
541
  arm|armv[4567]*l)
542
    arch="armv4l"
543
  ;;
544
  alpha)
545
    arch="alpha"
546
  ;;
547
  "Power Macintosh"|ppc|ppc64|powerpc)
548
    arch="powerpc"
549
  ;;
550
  mips|mipsel|IP*)
551
    arch="mips"
552
  ;;
553
  sun4u|sparc64)
554
    arch="sparc64"
555
  ;;
556
  sparc)
557
    arch="sparc"
558
  ;;
559
  sh4)
560
    arch="sh4"
561
  ;;
562
  parisc|parisc64)
563
    arch="parisc"
564
  ;;
565
  s390|s390x)
566
    arch="s390"
567
  ;;
568
  m68k)
569
    arch="m68k"
570
  ;;
571
  ia64)
572
    arch="ia64"
573
  ;;
574
  bfin)
575
    arch="bfin"
576
  ;;
577
  *)
578
    arch="unknown"
579
  ;;
580
esac
581
gprof="no"
582
video4linux="yes"
583
video4linux2="yes"
584
bktr="no"
585
audio_oss="yes"
586
audio_beos="no"
587
x11grab="no"
588
dv1394="yes"
589
dc1394="no"
590
network="yes"
591
ipv6="yes"
592
zlib="yes"
593
libgsm="no"
594
mp3lame="no"
595
libnut="no"
596
libogg="no"
597
libvorbis="no"
598
faad="no"
599
faadbin="no"
600
faac="no"
601
xvid="no"
602
x264="no"
603
a52="no"
604
a52bin="no"
605
dts="no"
606
pp="no"
607
mingw32="no"
608
wince="no"
609
os2="no"
610
lstatic="yes"
611
lshared="no"
612
optimize="yes"
613
debug="yes"
614
extrawarnings="no"
615
dostrip="yes"
616
installstrip="-s"
617
extralibs="-lm"
618
bigendian="no"
619
vhook="default"
620
avisynth="no"
621
dlfcn_h="no"
622
dlopen="no"
623
mpegaudio_hp="yes"
624
SHFLAGS='-shared -Wl,-soname,$@'
625
VHOOKSHFLAGS='$(SHFLAGS)'
626
beos_netserver="no"
627
protocols="yes"
628
ffmpeg="yes"
629
ffserver="yes"
630
ffplay="yes"
631
LIBOBJFLAGS=""
632
FFLDFLAGS=-Wl,--warn-common
633
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
634
FFSERVERLDFLAGS=-Wl,-E
635
LDCONFIG="ldconfig"
636
LIBPREF="lib"
637
LIBSUF=".a"
638
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
639
SLIBPREF="lib"
640
SLIBSUF=".so"
641
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
642
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
643
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
644
EXESUF=""
645
BUILDSUF=""
646
amr_nb="no"
647
amr_wb="no"
648
amr_nb_fixed="no"
649
amr_if2="no"
650
mlib="no"
651
pthreads="no"
652
w32threads="no"
653
swscaler="no"
654
gpl="no"
655
memalign_hack="no"
656
asmalign_pot="unknown"
657
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
658

    
659
# OS specific
660
targetos=`uname -s`
661
case $targetos in
662
BeOS)
663
PREFIX="/boot/home/config"
664
# helps building libavcodec
665
add_cflags "-DPIC -fomit-frame-pointer"
666
# 3 gcc releases known for BeOS, each with ugly bugs
667
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
668
case "$gcc_version" in
669
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
670
mmx="no"
671
;;
672
*20010315*) echo "BeBits gcc"
673
add_cflags "-fno-expensive-optimizations"
674
;;
675
esac
676
SHFLAGS=-nostart
677
# disable Linux things
678
audio_oss="no"
679
video4linux="no"
680
video4linux2="no"
681
dv1394="no"
682
# enable BeOS things
683
audio_beos="yes"
684
beosthreads="yes"
685
# no need for libm, but the inet stuff
686
# Check for BONE
687
if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
688
extralibs="-lbind -lsocket"
689
else
690
beos_netserver="yes"
691
extralibs="-lnet"
692
fi ;;
693
SunOS)
694
video4linux="no"
695
video4linux2="no"
696
audio_oss="no"
697
dv1394="no"
698
make="gmake"
699
FFLDFLAGS=""
700
FFSERVERLDFLAGS=""
701
SHFLAGS="-shared -Wl,-h,\$@"
702
add_extralibs "-lsocket -lnsl"
703
;;
704
NetBSD)
705
video4linux="no"
706
video4linux2="no"
707
bktr="yes"
708
audio_oss="yes"
709
dv1394="no"
710
make="gmake"
711
add_extralibs "-lossaudio"
712
;;
713
OpenBSD)
714
video4linux="no"
715
video4linux2="no"
716
bktr="yes"
717
audio_oss="yes"
718
dv1394="no"
719
need_memalign="no"
720
make="gmake"
721
LIBOBJFLAGS="\$(PIC)"
722
LDCONFIG="ldconfig -m \$(shlibdir)"
723
SHFLAGS='-shared'
724
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
725
SLIBNAME_WITH_VERSION='$(SLIBNAME)'
726
SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
727
add_extralibs "-lossaudio"
728
;;
729
FreeBSD)
730
video4linux="no"
731
video4linux2="no"
732
bktr="yes"
733
audio_oss="yes"
734
dv1394="no"
735
make="gmake"
736
need_memalign="no"
737
add_cflags "-pthread"
738
;;
739
GNU/kFreeBSD)
740
video4linux="no"
741
video4linux2="no"
742
bktr="yes"
743
audio_oss="yes"
744
dv1394="no"
745
add_cflags "-pthread"
746
;;
747
BSD/OS)
748
video4linux="no"
749
video4linux2="no"
750
bktr="yes"
751
audio_oss="yes"
752
dv1394="no"
753
extralibs="-lpoll -lgnugetopt -lm"
754
make="gmake"
755
strip="strip -d"
756
installstrip=""
757
;;
758
Darwin)
759
cc="cc"
760
video4linux="no"
761
video4linux2="no"
762
audio_oss="no"
763
dv1394="no"
764
need_memalign="no"
765
SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
766
VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
767
extralibs=""
768
strip="strip -x"
769
installstrip=""
770
FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
771
SLIBSUF=".dylib"
772
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
773
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
774
FFSERVERLDFLAGS=-Wl,-bind_at_load
775
;;
776
MINGW32*)
777
# Note: the rest of the mingw32 config is done afterwards as mingw32
778
# can be forced on the command line for Linux cross compilation.
779
mingw32="yes"
780
;;
781
CYGWIN*)
782
targetos=CYGWIN
783
shlibdir="$bindir"
784
video4linux="no"
785
video4linux2="no"
786
audio_oss="yes"
787
dv1394="no"
788
VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
789
VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
790
extralibs=""
791
EXESUF=".exe"
792
SLIBPREF="cyg"
793
SLIBSUF=".dll"
794
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
795
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
796
SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
797
;;
798
Linux)
799
LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
800
;;
801
IRIX*)
802
targetos=IRIX
803
ranlib="echo ignoring ranlib"
804
video4linux="no"
805
video4linux2="no"
806
audio_oss="no"
807
make="gmake"
808
;;
809
OS/2)
810
TMPE=$TMPE".exe"
811
ar="emxomfar -p128"
812
ranlib="echo ignoring ranlib"
813
strip="echo ignoring strip"
814
add_cflags "-Zomf"
815
FFLDFLAGS="-Zomf -Zstack 16384 -s"
816
SHFLAGS="-Zdll -Zomf"
817
FFSERVERLDFLAGS=""
818
LIBPREF=""
819
LIBSUF=".lib"
820
SLIBPREF=""
821
SLIBSUF=".dll"
822
EXESUF=".exe"
823
extralibs=""
824
pkg_requires=""
825
video4linux="no"
826
video4linux2="no"
827
audio_oss="no"
828
dv1394="no"
829
ffserver="no"
830
vhook="no"
831
os2="yes"
832
os2threads="yes"
833
;;
834
*)
835
targetos="${targetos}-UNKNOWN"
836
;;
837
esac
838

    
839
# find source path
840
source_path="`dirname \"$0\"`"
841
source_path_used="yes"
842
if test -z "$source_path" -o "$source_path" = "." ; then
843
    source_path="`pwd`"
844
    source_path_used="no"
845
else
846
    source_path="`cd \"$source_path\"; pwd`"
847
    echo "$source_path" | grep -q '[[:blank:]]' &&
848
      die "Out of tree builds are impossible with whitespace in source path."
849
fi
850

    
851
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
852
    show_help
853
fi
854

    
855
FFMPEG_CONFIGURATION=" "
856
for opt do
857
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
858
done
859

    
860
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
861
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
862
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
863
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
864
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
865

    
866
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
867

    
868
for opt do
869
  optval="${opt#*=}"
870
  case "$opt" in
871
  --log)
872
  ;;
873
  --log=*) logging="$optval"
874
  ;;
875
  --prefix=*) PREFIX="$optval"
876
  ;;
877
  --libdir=*) libdir="$optval"
878
  ;;
879
  --shlibdir=*) shlibdir="$optval"
880
  ;;
881
  --incdir=*) incdir="$optval"
882
  ;;
883
  --mandir=*) mandir="$optval"
884
  ;;
885
  --source-path=*) source_path="$optval"
886
  ;;
887
  --cross-prefix=*) cross_prefix="$optval"
888
  ;;
889
  --cross-compile) cross_compile=yes
890
  ;;
891
  --cc=*) cc="$optval"
892
  ;;
893
  --make=*) make="$optval"
894
  ;;
895
  --extra-cflags=*) add_cflags "$optval"
896
  ;;
897
  --extra-ldflags=*) add_ldflags "$optval"
898
  ;;
899
  --extra-libs=*) add_extralibs "$optval"
900
  ;;
901
  --build-suffix=*) BUILDSUF="$optval"
902
  ;;
903
  --arch=*) arch="$optval"
904
  ;;
905
  --cpu=*) cpu="$optval"
906
  ;;
907
  --powerpc-perf-enable) powerpc_perf="yes"
908
  ;;
909
  --disable-mmx) mmx="no"
910
  ;;
911
  --disable-armv5te) armv5te="no"
912
  ;;
913
  --disable-iwmmxt) iwmmxt="no"
914
  ;;
915
  --disable-altivec) altivec="no"
916
  ;;
917
  --enable-gprof) gprof="yes"
918
  ;;
919
  --disable-v4l) video4linux="no"
920
  ;;
921
  --disable-v4l2) video4linux2="no"
922
  ;;
923
  --disable-bktr) bktr="no"
924
  ;;
925
  --disable-audio-oss) audio_oss="no"
926
  ;;
927
  --disable-audio-beos) audio_beos="no"
928
  ;;
929
  --disable-dv1394) dv1394="no"
930
  ;;
931
  --disable-network) network="no"; ffserver="no"
932
  ;;
933
  --disable-ipv6) ipv6="no";
934
  ;;
935
  --disable-zlib) zlib="no"
936
  ;;
937
  --enable-a52) a52="yes"
938
  ;;
939
  --enable-a52bin) a52bin="yes"
940
  ;;
941
  --enable-dts) dts="yes"
942
  ;;
943
  --enable-pp) pp="yes"
944
  ;;
945
  --enable-libgsm) libgsm="yes"
946
  ;;
947
  --enable-mp3lame) mp3lame="yes"
948
  ;;
949
  --enable-libnut) libnut="yes"
950
  ;;
951
  --enable-libogg) libogg="yes"
952
    pkg_requires="$pkg_requires ogg >= 1.1"
953
  ;;
954
  --enable-vorbis) libvorbis="yes"
955
    pkg_requires="$pkg_requires vorbis vorbisenc"
956
  ;;
957
  --enable-faad) faad="yes"
958
  ;;
959
  --enable-faadbin) faadbin="yes"
960
  ;;
961
  --enable-faac) faac="yes"
962
  ;;
963
  --enable-xvid) xvid="yes"
964
  ;;
965
  --enable-x264) x264="yes"
966
  ;;
967
  --enable-avisynth) avisynth="yes";
968
  ;;
969
  --enable-x11grab) x11grab="yes";
970
  ;;
971
  --enable-dc1394) dc1394="yes"
972
    pkg_requires="$pkg_requires libraw1394"
973
  ;;
974
  --disable-vhook) vhook="no"
975
  ;;
976
  --enable-mingw32) mingw32="yes"
977
  ;;
978
  --enable-mingwce) wince="yes"
979
  ;;
980
  --enable-static) lstatic="yes"
981
  ;;
982
  --disable-static) lstatic="no"
983
  ;;
984
  --enable-shared) lshared="yes"
985
  ;;
986
  --disable-shared) lshared="no"
987
  ;;
988
  --disable-debug) debug="no"
989
  ;;
990
  --disable-opts) optimize="no"
991
  ;;
992
  --enable-extra-warnings) extrawarnings="yes"
993
  ;;
994
  --disable-mpegaudio-hp) mpegaudio_hp="no"
995
  ;;
996
  --disable-protocols) protocols="no"; network="no"; ffserver="no"
997
  ;;
998
  --disable-ffmpeg) ffmpeg="no"
999
  ;;
1000
  --disable-ffserver) ffserver="no"
1001
  ;;
1002
  --disable-ffplay) ffplay="no"
1003
  ;;
1004
  --enable-small) optimize="small"
1005
  ;;
1006
  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
1007
  ;;
1008
  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
1009
  ;;
1010
  --enable-amr_wb) amr="yes"; amr_wb="yes"
1011
  ;;
1012
  --enable-amr_if2) amr="yes"; amr_if2="yes"
1013
  ;;
1014
  --enable-sunmlib) mlib="yes"
1015
  ;;
1016
  --enable-pthreads) pthreads="yes"
1017
  ;;
1018
  --enable-w32threads) w32threads="yes"
1019
  ;;
1020
  --enable-swscaler) swscaler="yes"
1021
  ;;
1022
  --enable-gpl) gpl="yes"
1023
  ;;
1024
  --enable-memalign-hack) memalign_hack="yes"
1025
  ;;
1026
  --disable-strip) dostrip="no"
1027
  ;;
1028
  --enable-encoder=*) enable ${optval}_encoder
1029
  ;;
1030
  --enable-decoder=*) enable ${optval}_decoder
1031
  ;;
1032
  --disable-encoder=*) disable ${optval}_encoder
1033
  ;;
1034
  --disable-decoder=*) disable ${optval}_decoder
1035
  ;;
1036
  --disable-encoders) disable $ENCODER_LIST
1037
  ;;
1038
  --disable-decoders) disable $DECODER_LIST
1039
  ;;
1040
  --enable-muxer=*) enable ${optval}_muxer
1041
  ;;
1042
  --disable-muxer=*) disable ${optval}_muxer
1043
  ;;
1044
  --disable-muxers) disable $MUXER_LIST; ffserver="no"
1045
  ;;
1046
  --enable-demuxer=*) enable ${optval}_demuxer
1047
  ;;
1048
  --disable-demuxer=*) disable ${optval}_demuxer
1049
  ;;
1050
  --disable-demuxers) disable $DEMUXER_LIST
1051
  ;;
1052
  --enable-parser=*) enable ${optval}_parser
1053
  ;;
1054
  --disable-parser=*) disable ${optval}_parser
1055
  ;;
1056
  --disable-parsers) disable $PARSER_LIST
1057
  ;;
1058
  --help) show_help
1059
  ;;
1060
  *)
1061
  echo "Unknown option \"$opt\"."
1062
  echo "See $0 --help for available options."
1063
  exit 1
1064
  ;;
1065
  esac
1066
done
1067

    
1068
if test "$logging" != no; then
1069
    test "$logging" = yes || logfile="$logging"
1070
    echo "# $0 $@" >$logfile
1071
    set >>$logfile
1072
else
1073
    logfile=/dev/null
1074
fi
1075

    
1076
if test "$mingw32" = "yes" -o "$wince" = "yes"; then
1077
    if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
1078
        cat <<EOF
1079
You can only build one library type at once on MinGW.
1080
Specify --disable-static --enable-shared to only build
1081
the shared libraries. To build only the static libraries
1082
you do not need to pass additional options.
1083
EOF
1084
        exit 1
1085
    fi
1086
    video4linux="no"
1087
    video4linux2="no"
1088
    audio_oss="no"
1089
    dv1394="no"
1090
    dc1394="no"
1091
    ffserver="no"
1092
    network="no"
1093
    if test "$wince" = "yes"; then
1094
        protocols="no"
1095
    fi
1096
    SLIBPREF=""
1097
    SLIBSUF=".dll"
1098
    EXESUF=".exe"
1099
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1100
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1101
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1102
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1103
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1104
fi
1105

    
1106
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1107
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1108

    
1109
test -n "$cross_prefix" && cross_compile=yes
1110
cc="${cross_prefix}${cc}"
1111
ar="${cross_prefix}${ar}"
1112
ranlib="${cross_prefix}${ranlib}"
1113
strip="${cross_prefix}${strip}"
1114

    
1115
# we need to build at least one lib type
1116
if test "$lstatic" = "no" && test "$lshared" = "no" ; then
1117
    cat <<EOF
1118
At least one library type must be built.
1119
Specify --enable-static to build the static libraries or --enable-shared to
1120
build the shared libraries as well. To only build the shared libraries specify
1121
--disable-static in addition to --enable-shared.
1122
EOF
1123
    exit 1;
1124
fi
1125

    
1126
if test "$libvorbis" = "yes" && test "$libogg" = "no"; then
1127
    die "libogg must be enabled to enable libvorbis."
1128
fi
1129

    
1130
if test "$gpl" != "yes"; then
1131
    if test "$pp" != "no"; then
1132
        die "The Postprocessing code is under GPL and --enable-gpl is not specified."
1133
    fi
1134

    
1135
    if test "$a52" != "no" -o "$a52bin" != "no"; then
1136
        die "liba52 is under GPL and --enable-gpl is not specified."
1137
    fi
1138

    
1139
    if test "$xvid" != "no"; then
1140
        die "libxvidcore is under GPL and --enable-gpl is not specified."
1141
    fi
1142

    
1143
    if test "$x264" != "no"; then
1144
        die "x264 is under GPL and --enable-gpl is not specified."
1145
    fi
1146

    
1147
    if test "$dts" != "no"; then
1148
        die "libdts is under GPL and --enable-gpl is not specified."
1149
    fi
1150

    
1151
    if test "$faad" != "no" -o "$faadbin" != "no"; then
1152
        if check_header faad.h; then
1153
            check_cc << EOF
1154
                #include <faad.h>
1155
                #ifndef FAAD2_VERSION
1156
                ok faad1
1157
                #endif
1158
                int main( void ) { return 0; }
1159
EOF
1160
            if test $? = 0 ; then
1161
                die "FAAD2 is under GPL and --enable-gpl is not specified."
1162
            fi
1163
        else
1164
            faad="no"
1165
            faadbin="no"
1166
            echo "FAAD test failed."
1167
        fi
1168
    fi
1169

    
1170
    if test "$x11grab" != "no"; then
1171
        die "The X11 grabber is under GPL and --enable-gpl is not specified."
1172
    fi
1173

    
1174
    if test "$swscaler" != "no"; then
1175
        die "The software scaler is under GPL and --enable-gpl is not specified."
1176
    fi
1177
fi
1178

    
1179
# compute MMX state
1180
if test $mmx = "default"; then
1181
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1182
        mmx="yes"
1183
    else
1184
        mmx="no"
1185
    fi
1186
fi
1187

    
1188
test -z "$need_memalign" && need_memalign="$mmx"
1189

    
1190
#Darwin CC versions
1191
needmdynamicnopic="no"
1192
if test $targetos = Darwin; then
1193
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1194
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1195
    else
1196
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1197
        case "$gcc_version" in
1198
            *2.95*)
1199
                add_cflags "-no-cpp-precomp -pipe"
1200
                ;;
1201
            *[34].*)
1202
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1203
                if test "$lshared" = no; then
1204
                   needmdynamicnopic="yes"
1205
                fi
1206
                ;;
1207
            *)
1208
                add_cflags "-no-cpp-precomp -pipe"
1209
                if test "$lshared" = no; then
1210
                   needmdynamicnopic="yes"
1211
                fi
1212
                ;;
1213
        esac
1214
    fi
1215
fi
1216

    
1217
if test $optimize != "no"; then
1218
    add_cflags "-fomit-frame-pointer"
1219
fi
1220

    
1221
# Can only do AltiVec on PowerPC
1222
if test $altivec = "default"; then
1223
    if test $arch = "powerpc"; then
1224
        altivec="yes"
1225
    else
1226
        altivec="no"
1227
    fi
1228
fi
1229

    
1230
# Add processor-specific flags
1231
POWERPCMODE="32bits"
1232
if test $cpu != "generic"; then
1233
    case $cpu in
1234
        601|ppc601|PowerPC601)
1235
            add_cflags "-mcpu=601"
1236
            if test $altivec = "yes"; then
1237
                echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
1238
            fi
1239
        ;;
1240
        603*|ppc603*|PowerPC603*)
1241
            add_cflags "-mcpu=603"
1242
            if test $altivec = "yes"; then
1243
                echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
1244
            fi
1245
        ;;
1246
        604*|ppc604*|PowerPC604*)
1247
            add_cflags "-mcpu=604"
1248
            if test $altivec = "yes"; then
1249
                echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
1250
            fi
1251
        ;;
1252
        G3|g3|75*|ppc75*|PowerPC75*)
1253
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1254
            if test $altivec = "yes"; then
1255
                echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
1256
            fi
1257
        ;;
1258
        G4|g4|745*|ppc745*|PowerPC745*)
1259
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1260
            if test $altivec = "no"; then
1261
                echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
1262
            fi
1263
        ;;
1264
        74*|ppc74*|PowerPC74*)
1265
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1266
            if test $altivec = "no"; then
1267
                echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
1268
            fi
1269
        ;;
1270
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1271
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1272
            if test $altivec = "no"; then
1273
                echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
1274
            fi
1275
            POWERPCMODE="64bits"
1276
        ;;
1277
        # targets that do NOT support conditional mov (cmov)
1278
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1279
            add_cflags "-march=$cpu"
1280
            cmov="no"
1281
        ;;
1282
        # targets that do support conditional mov (cmov)
1283
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx)
1284
            add_cflags "-march=$cpu"
1285
            cmov="yes"
1286
            cmov_is_fast="yes"
1287
        ;;
1288
        # targets that do support conditional mov but on which it's slow
1289
        pentium4|prescott|nocona)
1290
            add_cflags "-march=$cpu"
1291
            cmov="yes"
1292
            cmov_is_fast="no"
1293
        ;;
1294
        sparc64)
1295
            add_cflags "-mcpu=v9"
1296
        ;;
1297
        *)
1298
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1299
        ;;
1300
    esac
1301
fi
1302

    
1303
# make sure we can execute files in $TMPDIR
1304
cat >$TMPE 2>>$logfile <<EOF
1305
#! /bin/sh
1306
EOF
1307
chmod +x $TMPE >>$logfile 2>&1
1308
if ! $TMPE >>$logfile 2>&1; then
1309
    cat <<EOF
1310
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1311
variable to another directory and make sure that $TMPDIR1 is not mounted
1312
noexec.
1313
EOF
1314
    die "Sanity test failed."
1315
fi
1316
rm $TMPE
1317

    
1318
# compiler sanity check
1319
check_exec <<EOF
1320
int main(){
1321
    return 0;
1322
}
1323
EOF
1324
if test "$?" != 0; then
1325
    echo "$cc is unable to create an executable file."
1326
    if test -z "$cross_prefix" -a "$cross_compile" = no; then
1327
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1328
        echo "Only do this if you know what cross compiling means."
1329
    fi
1330
    die "C compiler test failed."
1331
fi
1332

    
1333
# check for assembler specific support
1334

    
1335
if test $arch = "powerpc"; then
1336
check_cc <<EOF && dcbzl=yes
1337
int main(void) {
1338
    register long zero = 0;
1339
    char data[1024];
1340
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1341
return 0;
1342
}
1343
EOF
1344
fi
1345

    
1346
# check for SIMD availability
1347

    
1348
# AltiVec flags: The FSF version of GCC differs from the Apple version
1349
if test $arch = "powerpc"; then
1350
    if test $altivec = "yes"; then
1351
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1352
            add_cflags "-faltivec"
1353
        else
1354
            add_cflags "-maltivec -mabi=altivec"
1355
        fi
1356
    fi
1357
fi
1358

    
1359
check_header altivec.h
1360

    
1361
# check if our compiler supports Motorola AltiVec C API
1362
if test $altivec = "yes"; then
1363
    if test $altivec_h = "yes"; then
1364
        inc_altivec_h="#include <altivec.h>"
1365
    else
1366
        inc_altivec_h=
1367
    fi
1368
    check_cc <<EOF || altivec=no
1369
$inc_altivec_h
1370
int main(void) {
1371
    vector signed int v1, v2, v3;
1372
    v1 = vec_add(v2,v3);
1373
    return 0;
1374
}
1375
EOF
1376
fi
1377

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

    
1388
# check iwmmxt support
1389
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1390
    iwmmxt=no
1391
    check_cc <<EOF && iwmmxt=yes
1392
        int main(void) {
1393
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1394
        }
1395
EOF
1396
fi
1397

    
1398
# mmi only available on mips
1399
if test $mmi = "default"; then
1400
    if test $arch = "mips"; then
1401
        mmi="yes"
1402
    else
1403
        mmi="no"
1404
    fi
1405
fi
1406

    
1407
# check if our compiler supports mmi
1408
enabled mmi && check_cc <<EOF || mmi="no"
1409
int main(void) {
1410
    __asm__ ("lq \$2, 0(\$2)");
1411
    return 0;
1412
}
1413
EOF
1414

    
1415
# ---
1416
# big/little-endian test
1417
if test "$cross_compile" = "no"; then
1418
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1419
#include <inttypes.h>
1420
int main(int argc, char ** argv){
1421
        volatile uint32_t i=0x01234567;
1422
        return (*((uint8_t*)(&i))) == 0x67;
1423
}
1424
EOF
1425
else
1426
    # programs cannot be launched if cross compiling, so make a static guess
1427
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1428
        bigendian="yes"
1429
    fi
1430
fi
1431

    
1432
# ---
1433
# check availability of some header files
1434

    
1435
check_header malloc.h
1436
check_func memalign
1437

    
1438
if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
1439
        "$memalign_hack" != "yes"; then
1440
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1441
fi
1442

    
1443
check_header byteswap.h
1444

    
1445
check_func inet_aton
1446
check_func localtime_r
1447
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1448

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

    
1465
# these are off by default, so fail if requested and not available
1466
enabled dts     && require libdts dts.h dts_init -ldts -lm
1467
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1468
enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1469
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1470
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1471
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1472
enabled xvid    && require XviD xvid.h xvid_global -lxvidcore
1473
enabled x264    && require x264 x264.h x264_encoder_open -lx264
1474
enabled dc1394  && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1475
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1476

    
1477
# Ugh, faac uses stdcall calling convention on win32 so we can't use
1478
# the generic test functions
1479
if enabled faac; then
1480
    save_flags
1481
    temp_extralibs -lfaac
1482
    check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1483
#include <stdint.h>
1484
#include <faac.h>
1485
int main(){
1486
    char *id, *cpr;
1487
    faacEncGetVersion(&id, &cpr);
1488
    return 0;
1489
}
1490
EOF
1491
    restore_flags
1492
fi
1493

    
1494
# Ugh, recent faad2 versions have renamed all functions and #define the
1495
# old names in faad.h.  Generic tests won't work.
1496
if enabled faad; then
1497
    save_flags
1498
    temp_extralibs -lfaad
1499
    check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1500
#include <faad.h>
1501
int main(){
1502
    faacDecOpen();
1503
    return 0;
1504
}
1505
EOF
1506
    restore_flags
1507
fi
1508

    
1509
# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1510
if enabled avisynth; then
1511
    save_flags
1512
    temp_extralibs -lvfw32
1513
    check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1514
#include <windows.h>
1515
#include <vfw.h>
1516
int main(){
1517
    AVIFileInit();
1518
    return 0;
1519
}
1520
EOF
1521
    restore_flags
1522
fi
1523

    
1524

    
1525
# test for lrintf in math.h
1526
check_exec <<EOF && lrintf=yes || lrintf=no
1527
#define _ISOC9X_SOURCE  1
1528
#include <math.h>
1529
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1530
EOF
1531

    
1532
_restrict=
1533
for restrict_keyword in restrict __restrict__ __restrict; do
1534
    check_cc <<EOF && _restrict=$restrict_keyword && break
1535
void foo(char * $restrict_keyword p);
1536
EOF
1537
done
1538

    
1539
# dlopen/dlfcn.h probing
1540

    
1541
check_header dlfcn.h
1542

    
1543
if check_func dlopen; then
1544
    ldl=
1545
elif check_func dlopen -ldl; then
1546
    ldl=-ldl
1547
fi
1548

    
1549
if test "$vhook" = "default"; then
1550
    vhook="$dlopen"
1551
fi
1552

    
1553
if enabled_any vhook a52bin faadbin; then
1554
    add_extralibs $ldl
1555
fi
1556

    
1557
if test "$targetos" = "CYGWIN" -a "$lstatic" = "yes" ; then
1558
    vhook="no"
1559
    echo
1560
    echo "At the moment vhooks don't work on Cygwin static builds."
1561
    echo "Patches welcome."
1562
    echo
1563
fi
1564

    
1565
if enabled vhook; then
1566
    check_ldflags -rdynamic
1567
    check_ldflags -export-dynamic
1568
fi
1569

    
1570
if enabled audio_beos; then
1571
    add_extralibs "-lmedia -lbe"
1572
fi
1573

    
1574
##########################################
1575
# imlib check
1576

    
1577
temp_extralibs -lImlib2
1578
check_ld <<EOF && imlib2=yes || imlib2=no
1579
#include <X11/Xlib.h>
1580
#include <Imlib2.h>
1581
int main( void ) { return (int) imlib_load_font("foo"); }
1582
EOF
1583
restore_flags
1584

    
1585
##########################################
1586
# FreeType check
1587

    
1588
freetype2=no
1589
if test "x$targetos" != "xBeOS"; then
1590
  if (freetype-config --version) >/dev/null 2>&1 ; then
1591
      temp_cflags `freetype-config --cflags`
1592
      temp_extralibs `freetype-config --libs`
1593
      check_ld <<EOF && freetype2=yes
1594
#include <ft2build.h>
1595
int main( void ) { return (int) FT_Init_FreeType(0); }
1596
EOF
1597
      restore_flags
1598
  fi
1599
fi
1600

    
1601
##########################################
1602
# SDL check
1603

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

    
1634
enabled sdl || ffplay=no
1635

    
1636
##########################################
1637
# texi2html check
1638

    
1639
texi2html=no
1640
if (texi2html -version) >/dev/null 2>&1; then
1641
texi2html=yes
1642
fi
1643

    
1644
##########################################
1645
# IPv6 check
1646

    
1647
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1648
#include <sys/types.h>
1649
#include <sys/socket.h>
1650
#include <netinet/in.h>
1651
#include <netdb.h>
1652
int main( void ) {
1653
  struct sockaddr_storage saddr;
1654
  struct ipv6_mreq mreq6;
1655
  getaddrinfo(0,0,0,0);
1656
  getnameinfo(0,0,0,0,0,0,0);
1657
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1658
}
1659
EOF
1660

    
1661
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1662
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1663
#include <sys/time.h>
1664
#include <asm/types.h>
1665
#include <linux/videodev2.h>
1666
int dummy = V4L2_PIX_FMT_YUV420;
1667
struct v4l2_buffer dummy1;
1668
EOF
1669

    
1670
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1671
if enabled bktr; then
1672
    check_header dev/bktr/ioctl_meteor.h
1673
    check_header dev/bktr/ioctl_bt848.h
1674

    
1675
    check_header machine/ioctl_meteor.h
1676
    check_header machine/ioctl_bt848.h
1677

    
1678
    check_header dev/video/meteor/ioctl_meteor.h
1679
    check_header dev/video/bktr/ioctl_bt848.h
1680

    
1681
    check_header dev/ic/bt8xx.h
1682
fi
1683

    
1684
# Deal with the x11 frame grabber
1685
enabled x11grab                         &&
1686
enabled gpl                             &&
1687
enabled x11_grab_device_demuxer         &&
1688
check_header X11/Xlib.h                 &&
1689
check_header X11/extensions/XShm.h      &&
1690
check_func XOpenDisplay -lX11           &&
1691
check_func XShmCreateImage -lX11 -lXext &&
1692
add_extralibs -lX11 -lXext              ||
1693
disable x11_grab_device_demuxer
1694

    
1695
enabled debug && add_cflags -g
1696

    
1697
# add some useful compiler flags if supported
1698
check_cflags -Wdeclaration-after-statement
1699
check_cflags -Wall
1700
check_cflags -Wno-switch
1701
check_cflags -Wdisabled-optimization
1702
check_cflags -Wpointer-arith
1703
check_cflags -Wredundant-decls
1704
enabled extrawarnings && check_cflags -Winline
1705

    
1706
# add some linker flags
1707
check_ldflags $LDLATEFLAGS
1708

    
1709
# not all compilers support -Os
1710
test "$optimize" = "small" && check_cflags -Os
1711

    
1712
if enabled optimize; then
1713
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1714
        add_cflags  "-O5"
1715
        add_ldflags "-O5"
1716
    else
1717
        add_cflags "-O3"
1718
    fi
1719
fi
1720

    
1721
# PIC flags for shared library objects where they are needed
1722
if test "$lshared" = "yes" ; then
1723
    # LIBOBJFLAGS may have already been set in the OS configuration
1724
    if test -z "$LIBOBJFLAGS" ; then
1725
        case "$arch" in
1726
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
1727
        esac
1728
    fi
1729
fi
1730

    
1731
if test "$gprof" = "yes" ; then
1732
    add_cflags  "-p"
1733
    add_ldflags "-p"
1734
fi
1735

    
1736
VHOOKCFLAGS="-fPIC $CFLAGS"
1737
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
1738

    
1739
# find if .align arg is power-of-two or not
1740
if test $asmalign_pot = "unknown"; then
1741
    asmalign_pot="no"
1742
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1743
fi
1744

    
1745
echo "install prefix   $PREFIX"
1746
echo "source path      $source_path"
1747
echo "C compiler       $cc"
1748
echo "make             $make"
1749
echo "ARCH             $arch ($cpu)"
1750
if test "$BUILDSUF" != ""; then
1751
    echo "build suffix     $BUILDSUF"
1752
fi
1753
echo "big-endian       $bigendian"
1754
if test $arch = "x86_32" -o $arch = "x86_64"; then
1755
    echo "MMX enabled      $mmx"
1756
    echo "CMOV enabled     $cmov"
1757
    echo "CMOV is fast     $cmov_is_fast"
1758
fi
1759
if test $arch = "armv4l"; then
1760
    echo "ARMv5TE enabled  $armv5te"
1761
    echo "IWMMXT enabled   $iwmmxt"
1762
fi
1763
if test $arch = "mips"; then
1764
    echo "MMI enabled      $mmi"
1765
fi
1766
if test $arch = "powerpc"; then
1767
    echo "AltiVec enabled  $altivec"
1768
    echo "dcbzl available  $dcbzl"
1769
fi
1770
echo "gprof enabled    $gprof"
1771
echo "zlib enabled     $zlib"
1772
echo "libgsm enabled   $libgsm"
1773
echo "mp3lame enabled  $mp3lame"
1774
echo "libnut enabled   $libnut"
1775
echo "libogg enabled   $libogg"
1776
echo "Vorbis enabled   $libvorbis"
1777
echo "FAAD enabled     $faad"
1778
echo "faadbin enabled  $faadbin"
1779
echo "FAAC enabled     $faac"
1780
echo "XviD enabled     $xvid"
1781
echo "x264 enabled     $x264"
1782
echo "a52 support      $a52"
1783
echo "a52 dlopened     $a52bin"
1784
echo "DTS support      $dts"
1785
echo "pp support       $pp"
1786
echo "Software Scaler enabled $swscaler"
1787
echo "AVISynth enabled $avisynth"
1788
echo "debug symbols    $debug"
1789
echo "strip symbols    $dostrip"
1790
echo "optimize         $optimize"
1791
echo "static           $lstatic"
1792
echo "shared           $lshared"
1793
echo "video hooking    $vhook"
1794
echo "SDL support      $sdl"
1795
if test $sdl_too_old = "yes"; then
1796
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1797
fi
1798

    
1799
if test "$vhook" = "yes"; then
1800
    echo "Imlib2 support   $imlib2"
1801
    echo "FreeType support $freetype2"
1802
fi
1803
echo "Sun medialib support"  $mlib
1804
echo "pthreads support"      $pthreads
1805
echo "AMR-NB float support"  $amr_nb
1806
echo "AMR-NB fixed support"  $amr_nb_fixed
1807
echo "AMR-WB float support"  $amr_wb
1808
echo "AMR-WB IF2 support"    $amr_if2
1809
echo "network support      $network"
1810
if test "$network" = "yes" ; then
1811
    echo "IPv6 support         $ipv6"
1812
fi
1813
echo ".align is power-of-two" $asmalign_pot
1814
if test "$gpl" = "no" ; then
1815
    echo "License: LGPL"
1816
else
1817
    echo "License: GPL"
1818
fi
1819

    
1820
echo "Creating config.mak and config.h..."
1821

    
1822
echo "# Automatically generated by configure - do not modify!" > config.mak
1823
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1824
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
1825

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

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

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

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

    
1892
if test "$bigendian" = "yes" ; then
1893
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1894
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1895
fi
1896
if test "$mmx" = "yes" ; then
1897
  echo "TARGET_MMX=yes" >> config.mak
1898
  echo "#define HAVE_MMX 1" >> $TMPH
1899
  echo "#define __CPU__ 586" >> $TMPH
1900
fi
1901
if test "$cmov" = "yes" ; then
1902
  echo "TARGET_CMOV=yes" >> config.mak
1903
  echo "#define HAVE_CMOV 1" >> $TMPH
1904
fi
1905
if test "$cmov_is_fast" = "yes" ; then
1906
  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
1907
  echo "#define CMOV_IS_FAST 1" >> $TMPH
1908
fi
1909
if test "$armv5te" = "yes" ; then
1910
  echo "TARGET_ARMV5TE=yes" >> config.mak
1911
  echo "#define HAVE_ARMV5TE 1" >> $TMPH
1912
fi
1913
if test "$iwmmxt" = "yes" ; then
1914
  echo "TARGET_IWMMXT=yes" >> config.mak
1915
  echo "#define HAVE_IWMMXT 1" >> $TMPH
1916
fi
1917
if test "$mmi" = "yes" ; then
1918
  echo "TARGET_MMI=yes" >> config.mak
1919
  echo "#define HAVE_MMI 1" >> $TMPH
1920
fi
1921

    
1922
if test "$altivec" = "yes" ; then
1923
  echo "TARGET_ALTIVEC=yes" >> config.mak
1924
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1925
fi
1926

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

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

    
1941

    
1942

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

    
1965
enabled_any $ENCODER_LIST && enable encoders
1966
enabled_any $DECODER_LIST && enable decoders
1967
enabled_any $MUXER_LIST   && enable muxers
1968
enabled_any $DEMUXER_LIST && enable demuxers
1969

    
1970
enabled_any pthreads beosthreads os2threads w32threads && enable threads
1971

    
1972
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1973
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1974

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

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

    
1981
if test "$optimize" = "small"; then
1982
  echo "#define always_inline"  >> $TMPH
1983
  echo "#define CONFIG_SMALL 1" >> $TMPH
1984
fi
1985

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

    
1990
if test "$amr_if2" = "yes" ; then
1991
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1992
fi
1993

    
1994
# Apparently it's not possible to portably echo a backslash.
1995
if test "$asmalign_pot" = "yes" ; then
1996
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1997
else
1998
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1999
fi
2000

    
2001

    
2002
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2003
    ucname="`toupper $codec`"
2004
    config_name="CONFIG_$ucname"
2005
    enabled_name="ENABLE_$ucname"
2006
    if enabled $codec; then
2007
        echo "#define $config_name 1" >> $TMPH
2008
        echo "#define $enabled_name 1" >> $TMPH
2009
        echo "$config_name=yes" >> config.mak
2010
    else
2011
        echo "#define $enabled_name 0" >> $TMPH
2012
    fi
2013
done
2014

    
2015
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2016
if ! cmp -s $TMPH config.h; then
2017
        mv -f $TMPH config.h
2018
else
2019
        echo "config.h is unchanged"
2020
fi
2021

    
2022
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2023

    
2024
# build tree in object directory if source path is different from current one
2025
if test "$source_path_used" = "yes" ; then
2026
    DIRS="\
2027
         doc \
2028
         libavformat \
2029
         libavcodec \
2030
         libavcodec/alpha \
2031
         libavcodec/armv4l \
2032
         libavcodec/bfin \
2033
         libavcodec/i386 \
2034
         libavcodec/sparc \
2035
         libavcodec/mlib \
2036
         libavcodec/ppc \
2037
         libavcodec/liba52 \
2038
         libavcodec/amr \
2039
         libavcodec/amr_float \
2040
         libavcodec/amrwb_float \
2041
         libpostproc \
2042
         libavutil \
2043
         libswscale \
2044
         tests \
2045
         vhook \
2046
         "
2047
    FILES="\
2048
          Makefile \
2049
          common.mak \
2050
          libavformat/Makefile \
2051
          libavcodec/Makefile \
2052
          libpostproc/Makefile \
2053
          libavutil/Makefile \
2054
          libswscale/Makefile \
2055
          tests/Makefile \
2056
          vhook/Makefile \
2057
          doc/Makefile \
2058
          doc/texi2pod.pl \
2059
          "
2060
    for dir in $DIRS ; do
2061
            mkdir -p $dir
2062
    done
2063
    for f in $FILES ; do
2064
        ln -sf "$source_path/$f" $f
2065
    done
2066
fi
2067

    
2068

    
2069
# build pkg-config files
2070

    
2071
pkgconfig_generate(){
2072
name=$1
2073
comment=$2
2074
version=$3
2075
libs=$4
2076
requires=$5
2077
include=$6
2078
cat <<EOF >$name.pc
2079
prefix=$PREFIX
2080
exec_prefix=\${prefix}
2081
libdir=\${exec_prefix}/lib
2082
includedir=\${prefix}/include
2083

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

    
2094
pkgconfig_generate_uninstalled(){
2095
name=$1
2096
shortname=${name#lib}
2097
comment=$2
2098
version=$3
2099
libs=$4
2100
requires=$5
2101
cat <<EOF >$name-uninstalled.pc
2102
prefix=
2103
exec_prefix=
2104
libdir=\${pcfiledir}/$name
2105
includedir=\${pcfiledir}/$name
2106

    
2107
Name: $name
2108
Description: $comment
2109
Version: $version
2110
Requires: $requires
2111
Conflicts:
2112
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2113
Cflags: -I\${includedir}
2114
EOF
2115
}
2116

    
2117
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2118
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2119

    
2120
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2121
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2122

    
2123
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2124
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2125

    
2126
if test "$pp" = "yes"; then
2127
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2128
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2129
fi
2130

    
2131
if test "$swscaler" != "no"; then
2132
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2133
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2134
else
2135
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2136
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2137
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2138
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2139
fi