Statistics
| Branch: | Revision:

ffmpeg / configure @ 54118497

History | View | Annotate | Download (57.4 KB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
946
FFMPEG_CONFIGURATION=" "
947
for opt do
948
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
949
done
950

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

    
957
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
958

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

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

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

    
1206
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1207
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1208

    
1209
test -n "$cross_prefix" && cross_compile=yes
1210
cc="${cross_prefix}${cc}"
1211
ar="${cross_prefix}${ar}"
1212
ranlib="${cross_prefix}${ranlib}"
1213
strip="${cross_prefix}${strip}"
1214

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

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

    
1230
if enabled libvorbis && disabled libogg; then
1231
    die "libogg must be enabled to enable libvorbis."
1232
fi
1233

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

    
1249

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

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

    
1275
test -z "$need_memalign" && need_memalign="$mmx"
1276

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

    
1304
if ! disabled optimize ; then
1305
    add_cflags "-fomit-frame-pointer"
1306
fi
1307

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

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

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

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

    
1412
# check for assembler specific support
1413

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

    
1425
# check for SIMD availability
1426

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

    
1438
check_header altivec.h
1439

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

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

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

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

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

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

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

    
1519
# ---
1520
# check availability of some header files
1521

    
1522
check_header malloc.h
1523
check_func memalign
1524

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

    
1529
check_header byteswap.h
1530

    
1531
check_func inet_aton
1532
check_func localtime_r
1533
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1534

    
1535
# check for some common methods of building with pthread support
1536
# do this before the optional library checks as some of them require pthreads
1537
if enabled pthreads; then
1538
    if check_func pthread_create; then
1539
        :
1540
    elif check_func pthread_create -pthread; then
1541
        add_cflags -pthread
1542
        add_ldflags -pthread
1543
    elif check_func pthread_create -pthreads; then
1544
        add_cflags -pthreads
1545
        add_ldflags -pthreads
1546
    elif ! check_lib pthread.h pthread_create -lpthread; then
1547
        die "ERROR: can't find pthreads library"
1548
    fi
1549
fi
1550

    
1551
for thread in pthreads beosthreads os2threads w32threads; do
1552
    if enabled $thread; then
1553
        if ! disabled thread_type ; then
1554
            die "ERROR: Only one thread type must be selected."
1555
        else
1556
            thread_type="$thread"
1557
        fi
1558
    fi
1559
done
1560

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

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

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

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

    
1621

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

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

    
1636
# dlopen/dlfcn.h probing
1637

    
1638
check_header dlfcn.h
1639

    
1640
if check_func dlopen; then
1641
    ldl=
1642
elif check_func dlopen -ldl; then
1643
    ldl=-ldl
1644
fi
1645

    
1646
if test "$vhook" = "default"; then
1647
    vhook="$dlopen"
1648
fi
1649

    
1650
if enabled_any vhook liba52bin libfaadbin; then
1651
    add_extralibs $ldl
1652
fi
1653

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

    
1662
if enabled vhook; then
1663
    check_ldflags -rdynamic
1664
    check_ldflags -export-dynamic
1665
fi
1666

    
1667
if enabled audio_beos; then
1668
    add_extralibs "-lmedia -lbe"
1669
fi
1670

    
1671
##########################################
1672
# imlib check
1673

    
1674
temp_extralibs -lImlib2
1675
check_ld <<EOF && imlib2=yes || imlib2=no
1676
#include <X11/Xlib.h>
1677
#include <Imlib2.h>
1678
int main( void ) { return (int) imlib_load_font("foo"); }
1679
EOF
1680
restore_flags
1681

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

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

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

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

    
1731
enabled sdl || ffplay=no
1732

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

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

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

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

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

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

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

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

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

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

    
1792
enabled debug && add_cflags -g
1793

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

    
1804
# add some linker flags
1805
check_ldflags $LDLATEFLAGS
1806

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2011

    
2012

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

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

    
2040
enabled_any pthreads beosthreads os2threads w32threads && enable threads
2041

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

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

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

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

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

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

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

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

    
2075

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

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

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

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

    
2142

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

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

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

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

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

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

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

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

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

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