Statistics
| Branch: | Revision:

ffmpeg / configure @ 5931bfc3

History | View | Annotate | Download (55.3 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
    dlfcn_h
459
    dlopen
460
    freetype2
461
    gprof
462
    imlib2
463
    inet_aton
464
    localtime_r
465
    lrintf
466
    malloc_h
467
    memalign
468
    mlib
469
    os2
470
    os2threads
471
    pthreads
472
    sdl
473
    sdl_video_size
474
    threads
475
    w32threads
476
'
477

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

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

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

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

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

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

    
848
FFMPEG_CONFIGURATION=" "
849
for opt do
850
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
851
done
852

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

    
859
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
860

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

    
1061
if test "$logging" != no; then
1062
    test "$logging" = yes || logfile="$logging"
1063
    echo "# $0 $@" >$logfile
1064
    set >>$logfile
1065
else
1066
    logfile=/dev/null
1067
fi
1068

    
1069
if test "$mingw32" = "yes" -o "$wince" = "yes"; then
1070
    if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
1071
        cat <<EOF
1072
You can only build one library type at once on MinGW.
1073
Specify --disable-static --enable-shared to only build
1074
the shared libraries. To build only the static libraries
1075
you do not need to pass additional options.
1076
EOF
1077
        exit 1
1078
    fi
1079
    video4linux="no"
1080
    video4linux2="no"
1081
    audio_oss="no"
1082
    dv1394="no"
1083
    dc1394="no"
1084
    ffserver="no"
1085
    network="no"
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" && test "$libogg" = "no"; then
1120
    echo "libogg must be enabled to enable libvorbis."
1121
    fail="yes"
1122
fi
1123

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

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

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

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

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

    
1150
    if test "$faad" != "no" -o "$faadbin" != "no"; then
1151
        if check_header faad.h; then
1152
            check_cc << EOF
1153
                #include <faad.h>
1154
                #ifndef FAAD2_VERSION
1155
                ok faad1
1156
                #endif
1157
                int main( void ) { return 0; }
1158
EOF
1159
            if test $? = 0 ; then
1160
                echo "FAAD2 is under GPL and --enable-gpl is not specified."
1161
                fail="yes"
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
        echo "The X11 grabber is under GPL and --enable-gpl is not specified."
1172
        fail="yes"
1173
    fi
1174

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

    
1181
if test "$fail" = "yes"; then
1182
    exit 1
1183
fi
1184

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

    
1194
test -z "$need_memalign" && need_memalign="$mmx"
1195

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

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

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

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

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

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

    
1339
# check for assembler specific support
1340

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

    
1352
# check for SIMD availability
1353

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

    
1365
check_header altivec.h
1366

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

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

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

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

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

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

    
1438
# ---
1439
# check availability of some header files
1440

    
1441
check_header malloc.h
1442
check_func memalign
1443

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

    
1449
check_header byteswap.h
1450

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

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

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

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

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

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

    
1530

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

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

    
1545
# dlopen/dlfcn.h probing
1546

    
1547
check_header dlfcn.h
1548

    
1549
if check_func dlopen; then
1550
    ldl=
1551
elif check_func dlopen -ldl; then
1552
    ldl=-ldl
1553
fi
1554

    
1555
if test "$vhook" = "default"; then
1556
    vhook="$dlopen"
1557
fi
1558

    
1559
if enabled_any vhook a52bin faadbin; then
1560
    add_extralibs $ldl
1561
fi
1562

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

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

    
1576
if enabled audio_beos; then
1577
    add_extralibs "-lmedia -lbe"
1578
fi
1579

    
1580
##########################################
1581
# imlib check
1582

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

    
1591
##########################################
1592
# FreeType check
1593

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

    
1607
##########################################
1608
# SDL check
1609

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

    
1640
enabled sdl || ffplay=no
1641

    
1642
##########################################
1643
# texi2html check
1644

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

    
1650
##########################################
1651
# IPv6 check
1652

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

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

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

    
1687
enabled debug && add_cflags -g
1688

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

    
1698
# add some linker flags
1699
check_ldflags $LDLATEFLAGS
1700

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

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

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

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

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

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

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

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

    
1812
echo "Creating config.mak and config.h..."
1813

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

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

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

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

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

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

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

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

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

    
1933

    
1934

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

    
1957
enabled_any $ENCODER_LIST && enable encoders
1958
enabled_any $DECODER_LIST && enable decoders
1959
enabled_any $MUXER_LIST   && enable muxers
1960
enabled_any $DEMUXER_LIST && enable demuxers
1961

    
1962
enabled_any pthreads beosthreads os2threads w32threads && enable threads
1963

    
1964
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1965
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1966

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

    
1971
echo "#define restrict $_restrict" >> $TMPH
1972

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

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

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

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

    
1993

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

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

    
2014
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2015

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

    
2060

    
2061
# build pkg-config files
2062

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

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

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

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

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

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

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

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

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