Statistics
| Branch: | Revision:

ffmpeg / configure @ 2e3bcd38

History | View | Annotate | Download (55.2 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-x11grab         enable X11 grabbing [default=no]"
92
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
93
  echo "                           and libraw1394 [default=no]"
94
  echo "  --enable-swscaler        software scaler support [default=no]"
95
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
96
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
97
  echo "                           and ffmpeg will be under GPL [default=no]"
98
  echo ""
99
  echo "Advanced options (experts only):"
100
  echo "  --source-path=PATH       path to source code [$source_path]"
101
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
102
  echo "  --cross-compile          assume a cross-compiler is used"
103
  echo "  --cc=CC                  use C compiler CC [$cc]"
104
  echo "  --make=MAKE              use specified make [$make]"
105
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
106
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
107
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
108
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
109
  echo "  --arch=ARCH              select architecture  [$arch]"
110
  echo "  --cpu=CPU                selects the minimum cpu required (affects
111
                                   instruction selection, may crash on older CPUs)"
112
  echo "  --powerpc-perf-enable    enable performance report on PPC"
113
  echo "                           (requires enabling PMC)"
114
  echo "  --disable-mmx            disable MMX usage"
115
  echo "  --disable-armv5te        disable armv5te usage"
116
  echo "  --disable-iwmmxt         disable iwmmxt usage"
117
  echo "  --disable-altivec        disable AltiVec usage"
118
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
119
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
120
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
121
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
122
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
123
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
124
  echo "  --disable-network        disable network support [default=no]"
125
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
126
  echo "  --disable-zlib           disable zlib [default=no]"
127
  echo "  --disable-vhook          disable video hooking support"
128
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
129
  echo "  --disable-debug          disable debugging symbols"
130
  echo "  --disable-opts           disable compiler optimizations"
131
  echo "  --enable-extra-warnings  enable more compiler warnings"
132
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
133
  echo "                           MPEG audio decoding [default=no]"
134
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
135
  echo "  --disable-ffmpeg         disable ffmpeg build"
136
  echo "  --disable-ffserver       disable ffserver build"
137
  echo "  --disable-ffplay         disable ffplay build"
138
  echo "  --enable-small           optimize for size instead of speed"
139
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
140
  echo "  --disable-strip          disable stripping of executables and shared libraries"
141
  echo "  --disable-encoder=NAME   disables encoder NAME"
142
  echo "  --enable-encoder=NAME    enables encoder NAME"
143
  echo "  --disable-decoder=NAME   disables decoder NAME"
144
  echo "  --enable-decoder=NAME    enables decoder NAME"
145
  echo "  --disable-encoders       disables all encoders"
146
  echo "  --disable-decoders       disables all decoders"
147
  echo "  --disable-muxer=NAME     disables muxer NAME"
148
  echo "  --enable-muxer=NAME      enables muxer NAME"
149
  echo "  --disable-muxers         disables all muxers"
150
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
151
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
152
  echo "  --disable-demuxers       disables all demuxers"
153
  echo "  --enable-parser=NAME     enables parser NAME"
154
  echo "  --disable-parser=NAME    disables parser NAME"
155
  echo "  --disable-parsers        disables all parsers"
156
  echo ""
157
  echo "NOTE: Object files are built at the place where configure is launched."
158
  exit 1
159
}
160

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
452
HAVE_LIST='
453
    altivec_h
454
    beosthreads
455
    byteswap_h
456
    dcbzl
457
    dlfcn_h
458
    dlopen
459
    freetype2
460
    gprof
461
    imlib2
462
    inet_aton
463
    localtime_r
464
    lrintf
465
    malloc_h
466
    memalign
467
    mlib
468
    os2
469
    os2threads
470
    pthreads
471
    sdl
472
    sdl_video_size
473
    threads
474
    w32threads
475
'
476

    
477
# set temporary file name
478
if test ! -z "$TMPDIR" ; then
479
    TMPDIR1="${TMPDIR}"
480
elif test ! -z "$TEMPDIR" ; then
481
    TMPDIR1="${TEMPDIR}"
482
else
483
    TMPDIR1="/tmp"
484
fi
485

    
486
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
487
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
488
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
489
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
490
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
491

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

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

    
830
# find source path
831
source_path="`dirname \"$0\"`"
832
source_path_used="yes"
833
if test -z "$source_path" -o "$source_path" = "." ; then
834
    source_path="`pwd`"
835
    source_path_used="no"
836
else
837
    source_path="`cd \"$source_path\"; pwd`"
838
    echo "$source_path" | grep -q '[[:blank:]]' &&
839
      die "Out of tree builds are impossible with whitespace in source path."
840
fi
841

    
842
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
843
    show_help
844
fi
845

    
846
FFMPEG_CONFIGURATION=" "
847
for opt do
848
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
849
done
850

    
851
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
852
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
853
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
854
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
855
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
856

    
857
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
858

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

    
1057
if test "$logging" != no; then
1058
    test "$logging" = yes || logfile="$logging"
1059
    echo "# $0 $@" >$logfile
1060
    set >>$logfile
1061
else
1062
    logfile=/dev/null
1063
fi
1064

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

    
1099
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1100
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1101

    
1102
test -n "$cross_prefix" && cross_compile=yes
1103
cc="${cross_prefix}${cc}"
1104
ar="${cross_prefix}${ar}"
1105
ranlib="${cross_prefix}${ranlib}"
1106
strip="${cross_prefix}${strip}"
1107

    
1108
# we need to build at least one lib type
1109
if test "$lstatic" = "no" && test "$lshared" = "no" ; then
1110
    cat <<EOF
1111
At least one library type must be built.
1112
Specify --enable-static to build the static libraries or --enable-shared to
1113
build the shared libraries as well. To only build the shared libraries specify
1114
--disable-static in addition to --enable-shared.
1115
EOF
1116
    exit 1;
1117
fi
1118

    
1119
if test "$libvorbis" = "yes" ; then
1120
    if test "$libogg" = "no"; then
1121
        echo "libogg must be enabled to enable Vorbis."
1122
        fail="yes"
1123
    fi
1124
fi
1125

    
1126
if test "$gpl" != "yes"; then
1127
    if test "$pp" != "no"; then
1128
        echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
1129
        fail="yes"
1130
    fi
1131

    
1132
    if test "$a52" != "no" -o "$a52bin" != "no"; then
1133
        echo "liba52 is under GPL and --enable-gpl is not specified."
1134
        fail="yes"
1135
    fi
1136

    
1137
    if test "$xvid" != "no"; then
1138
        echo "libxvidcore is under GPL and --enable-gpl is not specified."
1139
        fail="yes"
1140
    fi
1141

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

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

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

    
1172
    if test "$x11grab" != "no"; then
1173
        echo "The X11 grabber is under GPL and --enable-gpl is not specified."
1174
        fail="yes"
1175
    fi
1176

    
1177
    if test "$swscaler" != "no"; then
1178
        echo "The software scaler is under GPL and --enable-gpl is not specified."
1179
        fail="yes"
1180
    fi
1181
fi
1182

    
1183
if test "$fail" = "yes"; then
1184
    exit 1
1185
fi
1186

    
1187
# compute MMX state
1188
if test $mmx = "default"; then
1189
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1190
        mmx="yes"
1191
    else
1192
        mmx="no"
1193
    fi
1194
fi
1195

    
1196
test -z "$need_memalign" && need_memalign="$mmx"
1197

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

    
1225
if test $optimize != "no"; then
1226
    add_cflags "-fomit-frame-pointer"
1227
fi
1228

    
1229
# Can only do AltiVec on PowerPC
1230
if test $altivec = "default"; then
1231
    if test $arch = "powerpc"; then
1232
        altivec="yes"
1233
    else
1234
        altivec="no"
1235
    fi
1236
fi
1237

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

    
1311
# make sure we can execute files in $TMPDIR
1312
cat >$TMPE 2>>$logfile <<EOF
1313
#! /bin/sh
1314
EOF
1315
chmod +x $TMPE >>$logfile 2>&1
1316
if ! $TMPE >>$logfile 2>&1; then
1317
    cat <<EOF
1318
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1319
variable to another directory and make sure that $TMPDIR1 is not mounted
1320
noexec.
1321
EOF
1322
    die "Sanity test failed."
1323
fi
1324
rm $TMPE
1325

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

    
1341
# check for assembler specific support
1342

    
1343
if test $arch = "powerpc"; then
1344
check_cc <<EOF && dcbzl=yes
1345
int main(void) {
1346
    register long zero = 0;
1347
    char data[1024];
1348
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1349
return 0;
1350
}
1351
EOF
1352
fi
1353

    
1354
# check for SIMD availability
1355

    
1356
# AltiVec flags: The FSF version of GCC differs from the Apple version
1357
if test $arch = "powerpc"; then
1358
    if test $altivec = "yes"; then
1359
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1360
            add_cflags "-faltivec"
1361
        else
1362
            add_cflags "-maltivec -mabi=altivec"
1363
        fi
1364
    fi
1365
fi
1366

    
1367
check_header altivec.h
1368

    
1369
# check if our compiler supports Motorola AltiVec C API
1370
if test $altivec = "yes"; then
1371
    if test $altivec_h = "yes"; then
1372
        inc_altivec_h="#include <altivec.h>"
1373
    else
1374
        inc_altivec_h=
1375
    fi
1376
    check_cc <<EOF || altivec=no
1377
$inc_altivec_h
1378
int main(void) {
1379
    vector signed int v1, v2, v3;
1380
    v1 = vec_add(v2,v3);
1381
    return 0;
1382
}
1383
EOF
1384
fi
1385

    
1386
# check armv5te instructions support
1387
if test $armv5te = "default" -a $arch = "armv4l"; then
1388
    armv5te=no
1389
    check_cc <<EOF && armv5te=yes
1390
        int main(void) {
1391
        __asm__ __volatile__ ("qadd r0, r0, r0");
1392
        }
1393
EOF
1394
fi
1395

    
1396
# check iwmmxt support
1397
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1398
    iwmmxt=no
1399
    check_cc <<EOF && iwmmxt=yes
1400
        int main(void) {
1401
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1402
        }
1403
EOF
1404
fi
1405

    
1406
# mmi only available on mips
1407
if test $mmi = "default"; then
1408
    if test $arch = "mips"; then
1409
        mmi="yes"
1410
    else
1411
        mmi="no"
1412
    fi
1413
fi
1414

    
1415
# check if our compiler supports mmi
1416
enabled mmi && check_cc <<EOF || mmi="no"
1417
int main(void) {
1418
    __asm__ ("lq \$2, 0(\$2)");
1419
    return 0;
1420
}
1421
EOF
1422

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

    
1440
# ---
1441
# check availability of some header files
1442

    
1443
check_header malloc.h
1444
check_func memalign
1445

    
1446
if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
1447
        "$memalign_hack" != "yes"; then
1448
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1449
fi
1450

    
1451
check_header byteswap.h
1452

    
1453
check_func inet_aton
1454
check_func localtime_r
1455
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1456

    
1457
# check for some common methods of building with pthread support
1458
# do this before the optional library checks as some of them require pthreads
1459
if enabled pthreads; then
1460
    if check_func pthread_create; then
1461
        :
1462
    elif check_func pthread_create -pthread; then
1463
        add_cflags -pthread
1464
        add_ldflags -pthread
1465
    elif check_func pthread_create -pthreads; then
1466
        add_cflags -pthreads
1467
        add_ldflags -pthreads
1468
    elif ! check_lib pthread.h pthread_create -lpthread; then
1469
        die "ERROR: can't find pthreads library"
1470
    fi
1471
fi
1472

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

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

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

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

    
1532

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

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

    
1547
# dlopen/dlfcn.h probing
1548

    
1549
check_header dlfcn.h
1550

    
1551
if check_func dlopen; then
1552
    ldl=
1553
elif check_func dlopen -ldl; then
1554
    ldl=-ldl
1555
fi
1556

    
1557
if test "$vhook" = "default"; then
1558
    vhook="$dlopen"
1559
fi
1560

    
1561
if enabled_any vhook a52bin faadbin; then
1562
    add_extralibs $ldl
1563
fi
1564

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

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

    
1578
if enabled audio_beos; then
1579
    add_extralibs "-lmedia -lbe"
1580
fi
1581

    
1582
##########################################
1583
# imlib check
1584

    
1585
temp_extralibs -lImlib2
1586
check_ld <<EOF && imlib2=yes || imlib2=no
1587
#include <X11/Xlib.h>
1588
#include <Imlib2.h>
1589
int main( void ) { return (int) imlib_load_font("foo"); }
1590
EOF
1591
restore_flags
1592

    
1593
##########################################
1594
# FreeType check
1595

    
1596
freetype2=no
1597
if test "x$targetos" != "xBeOS"; then
1598
  if (freetype-config --version) >/dev/null 2>&1 ; then
1599
      temp_cflags `freetype-config --cflags`
1600
      temp_extralibs `freetype-config --libs`
1601
      check_ld <<EOF && freetype2=yes
1602
#include <ft2build.h>
1603
int main( void ) { return (int) FT_Init_FreeType(0); }
1604
EOF
1605
      restore_flags
1606
  fi
1607
fi
1608

    
1609
##########################################
1610
# SDL check
1611

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

    
1642
enabled sdl || ffplay=no
1643

    
1644
##########################################
1645
# texi2html check
1646

    
1647
texi2html=no
1648
if (texi2html -version) >/dev/null 2>&1; then
1649
texi2html=yes
1650
fi
1651

    
1652
##########################################
1653
# IPv6 check
1654

    
1655
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1656
#include <sys/types.h>
1657
#include <sys/socket.h>
1658
#include <netinet/in.h>
1659
#include <netdb.h>
1660
int main( void ) {
1661
  struct sockaddr_storage saddr;
1662
  struct ipv6_mreq mreq6;
1663
  getaddrinfo(0,0,0,0);
1664
  getnameinfo(0,0,0,0,0,0,0);
1665
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1666
}
1667
EOF
1668

    
1669
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1670
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1671
#include <sys/time.h>
1672
#include <asm/types.h>
1673
#include <linux/videodev2.h>
1674
int dummy = V4L2_PIX_FMT_YUV420;
1675
struct v4l2_buffer dummy1;
1676
EOF
1677

    
1678
# Deal with the x11 frame grabber
1679
enabled x11grab                         &&
1680
enabled gpl                             &&
1681
enabled x11_grab_device_demuxer         &&
1682
check_header X11/Xlib.h                 &&
1683
check_header X11/extensions/XShm.h      &&
1684
check_func XOpenDisplay -lX11           &&
1685
check_func XShmCreateImage -lX11 -lXext &&
1686
add_extralibs -lX11 -lXext              ||
1687
disable x11_grab_device_demuxer
1688

    
1689
enabled debug && add_cflags -g
1690

    
1691
# add some useful compiler flags if supported
1692
check_cflags -Wdeclaration-after-statement
1693
check_cflags -Wall
1694
check_cflags -Wno-switch
1695
check_cflags -Wdisabled-optimization
1696
check_cflags -Wpointer-arith
1697
check_cflags -Wredundant-decls
1698
enabled extrawarnings && check_cflags -Winline
1699

    
1700
# add some linker flags
1701
check_ldflags $LDLATEFLAGS
1702

    
1703
# not all compilers support -Os
1704
test "$optimize" = "small" && check_cflags -Os
1705

    
1706
if enabled optimize; then
1707
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1708
        add_cflags  "-O5"
1709
        add_ldflags "-O5"
1710
    else
1711
        add_cflags "-O3"
1712
    fi
1713
fi
1714

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

    
1725
if test "$gprof" = "yes" ; then
1726
    add_cflags  "-p"
1727
    add_ldflags "-p"
1728
fi
1729

    
1730
VHOOKCFLAGS="-fPIC $CFLAGS"
1731
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
1732

    
1733
# find if .align arg is power-of-two or not
1734
if test $asmalign_pot = "unknown"; then
1735
    asmalign_pot="no"
1736
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1737
fi
1738

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

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

    
1814
echo "Creating config.mak and config.h..."
1815

    
1816
echo "# Automatically generated by configure - do not modify!" > config.mak
1817
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1818
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
1819

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

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

    
1862
ucarch=`toupper $arch`
1863
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1864
echo "#define ARCH_${ucarch} 1" >> $TMPH
1865

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

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

    
1916
if test "$altivec" = "yes" ; then
1917
  echo "TARGET_ALTIVEC=yes" >> config.mak
1918
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1919
fi
1920

    
1921
if test "$sdl" = "yes" ; then
1922
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1923
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1924
fi
1925
if test "$texi2html" = "yes"; then
1926
  echo "BUILD_DOC=yes" >> config.mak
1927
fi
1928

    
1929
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1930
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1931
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1932
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1933
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1934

    
1935

    
1936

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

    
1959
enabled_any $ENCODER_LIST && enable encoders
1960
enabled_any $DECODER_LIST && enable decoders
1961
enabled_any $MUXER_LIST   && enable muxers
1962
enabled_any $DEMUXER_LIST && enable demuxers
1963

    
1964
enabled_any pthreads beosthreads os2threads w32threads && enable threads
1965

    
1966
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1967
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1968

    
1969
if test "$targetos" = "Darwin"; then
1970
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1971
fi
1972

    
1973
echo "#define restrict $_restrict" >> $TMPH
1974

    
1975
if test "$optimize" = "small"; then
1976
  echo "#define always_inline"  >> $TMPH
1977
  echo "#define CONFIG_SMALL 1" >> $TMPH
1978
fi
1979

    
1980
echo "SRC_PATH=\"$source_path\"" >> config.mak
1981
echo "SRC_PATH_BARE=$source_path" >> config.mak
1982
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1983

    
1984
if test "$amr_if2" = "yes" ; then
1985
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1986
fi
1987

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

    
1995

    
1996
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
1997
    ucname="`toupper $codec`"
1998
    config_name="CONFIG_$ucname"
1999
    enabled_name="ENABLE_$ucname"
2000
    if enabled $codec; then
2001
        echo "#define $config_name 1" >> $TMPH
2002
        echo "#define $enabled_name 1" >> $TMPH
2003
        echo "$config_name=yes" >> config.mak
2004
    else
2005
        echo "#define $enabled_name 0" >> $TMPH
2006
    fi
2007
done
2008

    
2009
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2010
if ! cmp -s $TMPH config.h; then
2011
        mv -f $TMPH config.h
2012
else
2013
        echo "config.h is unchanged"
2014
fi
2015

    
2016
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2017

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

    
2059

    
2060
# build pkg-config files
2061

    
2062
pkgconfig_generate(){
2063
name=$1
2064
comment=$2
2065
version=$3
2066
libs=$4
2067
requires=$5
2068
include=$6
2069
cat <<EOF >$name.pc
2070
prefix=$PREFIX
2071
exec_prefix=\${prefix}
2072
libdir=\${exec_prefix}/lib
2073
includedir=\${prefix}/include
2074

    
2075
Name: $name
2076
Description: $comment
2077
Version: $version
2078
Requires: $requires
2079
Conflicts:
2080
Libs: -L\${libdir} $libs
2081
Cflags: -I\${includedir} -I\${includedir}/$include
2082
EOF
2083
}
2084

    
2085
pkgconfig_generate_uninstalled(){
2086
name=$1
2087
shortname=${name#lib}
2088
comment=$2
2089
version=$3
2090
libs=$4
2091
requires=$5
2092
cat <<EOF >$name-uninstalled.pc
2093
prefix=
2094
exec_prefix=
2095
libdir=\${pcfiledir}/$name
2096
includedir=\${pcfiledir}/$name
2097

    
2098
Name: $name
2099
Description: $comment
2100
Version: $version
2101
Requires: $requires
2102
Conflicts:
2103
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2104
Cflags: -I\${includedir}
2105
EOF
2106
}
2107

    
2108
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2109
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2110

    
2111
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2112
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2113

    
2114
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2115
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2116

    
2117
if test "$pp" = "yes"; then
2118
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2119
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2120
fi
2121

    
2122
if test "$swscaler" != "no"; then
2123
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "$pkg_requires libavutil = $lavu_version" swscale
2124
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavutil = $lavu_version"
2125
else
2126
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2127
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2128
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2129
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2130
fi