Statistics
| Branch: | Revision:

ffmpeg / configure @ 754e97fa

History | View | Annotate | Download (54.8 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) -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
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1096
fi
1097

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

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

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

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

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

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

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

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

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

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

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

    
1177
if test "$fail" = "yes"; then
1178
    exit 1
1179
fi
1180

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

    
1190
test -z "$need_memalign" && need_memalign="$mmx"
1191

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

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

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

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

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

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

    
1335
# check for assembler specific support
1336

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

    
1348
# check for SIMD availability
1349

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

    
1361
check_header altivec.h
1362

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

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

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

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

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

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

    
1434
# ---
1435
# check availability of some header files
1436

    
1437
check_header malloc.h
1438
check_func memalign
1439

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

    
1445
check_header byteswap.h
1446

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

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

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

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

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

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

    
1526

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

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

    
1541
# dlopen/dlfcn.h probing
1542

    
1543
check_header dlfcn.h
1544

    
1545
if check_func dlopen; then
1546
    ldl=
1547
elif check_func dlopen -ldl; then
1548
    ldl=-ldl
1549
fi
1550

    
1551
if test "$vhook" = "default"; then
1552
    vhook="$dlopen"
1553
fi
1554

    
1555
if enabled_any vhook a52bin faadbin; then
1556
    add_extralibs $ldl
1557
fi
1558

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

    
1567
if enabled vhook; then
1568
    check_ldflags -rdynamic
1569
    check_ldflags -export-dynamic
1570
fi
1571

    
1572
if enabled audio_beos; then
1573
    add_extralibs "-lmedia -lbe"
1574
fi
1575

    
1576
##########################################
1577
# imlib check
1578

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

    
1587
##########################################
1588
# FreeType check
1589

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

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

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

    
1636
enabled sdl || ffplay=no
1637

    
1638
##########################################
1639
# texi2html check
1640

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

    
1646
##########################################
1647
# IPv6 check
1648

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

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

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

    
1683
enabled debug && add_cflags -g
1684

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

    
1694
# add some linker flags
1695
check_ldflags $LDLATEFLAGS
1696

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

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

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

    
1719
if test "$gprof" = "yes" ; then
1720
    add_cflags  "-p"
1721
    add_ldflags "-p"
1722
fi
1723

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

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

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

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

    
1808
echo "Creating config.mak and config.h..."
1809

    
1810
echo "# Automatically generated by configure - do not modify!" > config.mak
1811
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1812
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
1813

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

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

    
1856
ucarch=`toupper $arch`
1857
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1858
echo "#define ARCH_${ucarch} 1" >> $TMPH
1859

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

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

    
1910
if test "$altivec" = "yes" ; then
1911
  echo "TARGET_ALTIVEC=yes" >> config.mak
1912
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1913
fi
1914

    
1915
if test "$sdl" = "yes" ; then
1916
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1917
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1918
fi
1919
if test "$texi2html" = "yes"; then
1920
  echo "BUILD_DOC=yes" >> config.mak
1921
fi
1922

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

    
1929

    
1930

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

    
1952
enabled_any $ENCODER_LIST && enable encoders
1953
enabled_any $DECODER_LIST && enable decoders
1954
enabled_any $MUXER_LIST   && enable muxers
1955
enabled_any $DEMUXER_LIST && enable demuxers
1956

    
1957
enabled_any pthreads beosthreads os2threads w32threads && enable threads
1958

    
1959
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1960
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1961

    
1962
if test "$targetos" = "Darwin"; then
1963
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1964
fi
1965

    
1966
echo "#define restrict $_restrict" >> $TMPH
1967

    
1968
if test "$optimize" = "small"; then
1969
  echo "#define always_inline"  >> $TMPH
1970
  echo "#define CONFIG_SMALL 1" >> $TMPH
1971
fi
1972

    
1973
echo "SRC_PATH=\"$source_path\"" >> config.mak
1974
echo "SRC_PATH_BARE=$source_path" >> config.mak
1975
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1976

    
1977
if test "$amr_if2" = "yes" ; then
1978
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1979
fi
1980

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

    
1988

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

    
2002
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2003
if ! cmp -s $TMPH config.h; then
2004
        mv -f $TMPH config.h
2005
else
2006
        echo "config.h is unchanged"
2007
fi
2008

    
2009
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2010

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

    
2052

    
2053
# build pkg-config files
2054

    
2055
pkgconfig_generate(){
2056
name=$1
2057
comment=$2
2058
version=$3
2059
libs=$4
2060
requires=$5
2061
include=$6
2062
cat <<EOF >$name.pc
2063
prefix=$PREFIX
2064
exec_prefix=\${prefix}
2065
libdir=\${exec_prefix}/lib
2066
includedir=\${prefix}/include
2067

    
2068
Name: $name
2069
Description: $comment
2070
Version: $version
2071
Requires: $requires
2072
Conflicts:
2073
Libs: -L\${libdir} $libs
2074
Cflags: -I\${includedir} -I\${includedir}/$include
2075
EOF
2076
}
2077

    
2078
pkgconfig_generate_uninstalled(){
2079
name=$1
2080
shortname=${name#lib}
2081
comment=$2
2082
version=$3
2083
libs=$4
2084
requires=$5
2085
cat <<EOF >$name-uninstalled.pc
2086
prefix=
2087
exec_prefix=
2088
libdir=\${pcfiledir}/$name
2089
includedir=\${pcfiledir}/$name
2090

    
2091
Name: $name
2092
Description: $comment
2093
Version: $version
2094
Requires: $requires
2095
Conflicts:
2096
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2097
Cflags: -I\${includedir}
2098
EOF
2099
}
2100

    
2101
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2102
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2103

    
2104
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2105
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2106

    
2107
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2108
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2109

    
2110
pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2111
pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2112

    
2113
if test "$swscaler" != "no"; then
2114
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "$pkg_requires libavutil = $lavu_version" swscale
2115
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavutil = $lavu_version"
2116
else
2117
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2118
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2119
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2120
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2121
fi