Statistics
| Branch: | Revision:

ffmpeg / configure @ 30f35ab0

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
    flags_saved || return
295
    CFLAGS="$SAVE_CFLAGS"
296
    LDFLAGS="$SAVE_LDFLAGS"
297
    extralibs="$SAVE_extralibs"
298
    unset SAVE_CFLAGS
299
    unset SAVE_LDFLAGS
300
    unset SAVE_extralibs
301
}
302

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
529
TARGET_LIST='
530
    altivec
531
    armv5te
532
    iwmmxt
533
    mmi
534
    mmx
535
'
536

    
537
flashsv_decoder_deps="zlib"
538
flashsv_encoder_deps="zlib"
539
mpeg_xvmc_decoder_deps="xvmc"
540
png_decoder_deps="zlib"
541
png_encoder_deps="zlib"
542
x264_encoder_deps="x264"
543
xvid_encoder_deps="xvid"
544
zmbv_decoder_deps="zlib"
545
zmbv_encoder_deps="zlib"
546

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

    
563
audio_demuxer_deps_any="audio_oss audio_beos"
564
audio_muxer_deps_any="audio_oss audio_beos"
565
dc1394_demuxer_deps="dc1394"
566
dv1394_demuxer_deps="dv1394"
567
gxf_muxer_deps="gpl"
568
libnut_demuxer_deps="libnut"
569
libnut_muxer_deps="libnut"
570
ogg_muxer_deps="libogg"
571
redir_demuxer_deps="network"
572
rtp_muxer_deps="network"
573
rtsp_demuxer_deps="network"
574
sdp_demuxer_deps="network"
575
v4l2_demuxer_deps="video4linux2"
576
video_grab_device_demuxer_deps_any="video4linux bktr"
577
x11_grab_device_demuxer_deps="x11grab"
578

    
579
# set temporary file name
580
if test ! -z "$TMPDIR" ; then
581
    TMPDIR1="${TMPDIR}"
582
elif test ! -z "$TEMPDIR" ; then
583
    TMPDIR1="${TEMPDIR}"
584
else
585
    TMPDIR1="/tmp"
586
fi
587

    
588
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
589
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
590
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
591
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
592
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
593

    
594
# default parameters
595

    
596
logging="yes"
597
logfile="config.err"
598

    
599
# installation paths
600
PREFIX="/usr/local"
601
libdir='${PREFIX}/lib'
602
shlibdir="$libdir"
603
incdir='${PREFIX}/include/ffmpeg'
604
mandir='${PREFIX}/man'
605
bindir='${PREFIX}/bin'
606

    
607
# toolchain
608
cross_prefix=""
609
cross_compile="no"
610
cc="gcc"
611
ar="ar"
612
ranlib="ranlib"
613
make="make"
614
strip="strip"
615
asmalign_pot="unknown"
616

    
617
# machine
618
arch=`uname -m`
619
cpu="generic"
620
powerpc_perf="no"
621
mmx="default"
622
cmov="no"
623
fast_cmov="no"
624
armv5te="default"
625
armv6="default"
626
iwmmxt="default"
627
altivec="default"
628
dcbzl="no"
629
mmi="default"
630
bigendian="no"
631

    
632
case "$arch" in
633
  i386|i486|i586|i686|i86pc|BePC)
634
    arch="x86_32"
635
  ;;
636
  x86_64|amd64)
637
    arch="x86_32"
638
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
639
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
640
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
641
        arch="x86_64"
642
      fi
643
    fi
644
  ;;
645
  # armv4l is a subset of armv[567]*l
646
  arm|armv[4567]*l)
647
    arch="armv4l"
648
  ;;
649
  alpha)
650
    arch="alpha"
651
  ;;
652
  "Power Macintosh"|ppc|ppc64|powerpc)
653
    arch="powerpc"
654
  ;;
655
  mips|mipsel|IP*)
656
    arch="mips"
657
  ;;
658
  sun4u|sparc64)
659
    arch="sparc64"
660
  ;;
661
  sparc)
662
    arch="sparc"
663
  ;;
664
  sh4)
665
    arch="sh4"
666
  ;;
667
  parisc|parisc64)
668
    arch="parisc"
669
  ;;
670
  s390|s390x)
671
    arch="s390"
672
  ;;
673
  m68k)
674
    arch="m68k"
675
  ;;
676
  ia64)
677
    arch="ia64"
678
  ;;
679
  bfin)
680
    arch="bfin"
681
  ;;
682
  *)
683
    arch="unknown"
684
  ;;
685
esac
686

    
687
# OS
688
beos_netserver="no"
689
mingw32="no"
690
os2="no"
691
wince="no"
692

    
693
# non-library system interfaces
694
audio_beos="no"
695
audio_oss="yes"
696
bktr="yes"
697
dv1394="yes"
698
video4linux2="yes"
699
video4linux="yes"
700

    
701
# libraries
702
amr_if2="no"
703
amr_nb="no"
704
amr_nb_fixed="no"
705
amr_wb="no"
706
avisynth="no"
707
dc1394="no"
708
dlfcn_h="no"
709
dlopen="no"
710
liba52="no"
711
liba52bin="no"
712
libdts="no"
713
libfaac="no"
714
libfaad2="no"
715
libfaad="no"
716
libfaadbin="no"
717
libgsm="no"
718
libmp3lame="no"
719
libnut="no"
720
libogg="no"
721
libtheora="no"
722
libvorbis="no"
723
mlib="no"
724
x11grab="no"
725
x264="no"
726
xvid="no"
727
zlib="yes"
728

    
729
# configurable options
730
debug="yes"
731
dostrip="yes"
732
extrawarnings="no"
733
ffmpeg="yes"
734
ffplay="yes"
735
ffserver="yes"
736
gpl="no"
737
gprof="no"
738
ipv6="yes"
739
lshared="no"
740
lstatic="yes"
741
memalign_hack="no"
742
mpegaudio_hp="yes"
743
network="yes"
744
optimize="yes"
745
pp="no"
746
protocols="yes"
747
swscaler="no"
748
vhook="default"
749

    
750
# threading
751
beosthreads="no"
752
os2threads="no"
753
pthreads="no"
754
w32threads="no"
755
thread_type="no"
756

    
757
# build settings
758
extralibs="-lm"
759
SHFLAGS='-shared -Wl,-soname,$@'
760
VHOOKSHFLAGS='$(SHFLAGS)'
761
LIBOBJFLAGS=""
762
FFLDFLAGS=-Wl,--warn-common
763
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
764
FFSERVERLDFLAGS=-Wl,-E
765
LDCONFIG="ldconfig"
766
LIBPREF="lib"
767
LIBSUF=".a"
768
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
769
SLIBPREF="lib"
770
SLIBSUF=".so"
771
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
772
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
773
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
774
EXESUF=""
775
BUILDSUF=""
776
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
777

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

    
912
# find source path
913
source_path="`dirname \"$0\"`"
914
source_path_used="yes"
915
if test -z "$source_path" -o "$source_path" = "." ; then
916
    source_path="`pwd`"
917
    source_path_used="no"
918
else
919
    source_path="`cd \"$source_path\"; pwd`"
920
    echo "$source_path" | grep -q '[[:blank:]]' &&
921
      die "Out of tree builds are impossible with whitespace in source path."
922
fi
923

    
924
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
925
    show_help
926
fi
927

    
928
FFMPEG_CONFIGURATION="$@"
929

    
930
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
931
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
932
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
933
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
934
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
935

    
936
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
937

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

    
1147
if ! disabled logging ; then
1148
    enabled logging || logfile="$logging"
1149
    echo "# $0 $@" >$logfile
1150
    set >>$logfile
1151
else
1152
    logfile=/dev/null
1153
fi
1154

    
1155
if enabled_any mingw32 wince; then
1156
    if enabled_all lshared lstatic; then
1157
        cat <<EOF
1158
You can only build one library type at once on MinGW.
1159
Specify --disable-static --enable-shared to only build
1160
the shared libraries. To build only the static libraries
1161
you do not need to pass additional options.
1162
EOF
1163
        exit 1
1164
    fi
1165
    dv1394="no"
1166
    dc1394="no"
1167
    ffserver="no"
1168
    network="no"
1169
    if enabled wince; then
1170
        protocols="no"
1171
    fi
1172
    SLIBPREF=""
1173
    SLIBSUF=".dll"
1174
    EXESUF=".exe"
1175
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1176
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1177
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1178
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1179
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1180
fi
1181

    
1182
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1183
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1184

    
1185
test -n "$cross_prefix" && cross_compile=yes
1186
cc="${cross_prefix}${cc}"
1187
ar="${cross_prefix}${ar}"
1188
ranlib="${cross_prefix}${ranlib}"
1189
strip="${cross_prefix}${strip}"
1190

    
1191
# we need to build at least one lib type
1192
if disabled_all lstatic lshared; then
1193
    cat <<EOF
1194
At least one library type must be built.
1195
Specify --enable-static to build the static libraries or --enable-shared to
1196
build the shared libraries as well. To only build the shared libraries specify
1197
--disable-static in addition to --enable-shared.
1198
EOF
1199
    exit 1;
1200
fi
1201

    
1202
if disabled libogg; then
1203
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1204
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1205
fi
1206

    
1207
if enabled_any libfaad libfaadbin ; then
1208
    if check_header faad.h; then
1209
        check_cc << EOF
1210
#include <faad.h>
1211
#ifndef FAAD2_VERSION
1212
ok faad1
1213
#endif
1214
int main( void ) { return 0; }
1215
EOF
1216
        test $? = 0 && enable libfaad2
1217
    else
1218
        die "FAAD test failed."
1219
    fi
1220
fi
1221

    
1222

    
1223
if disabled gpl ; then
1224
    die_gpl_disabled(){
1225
        name=$1
1226
        shift
1227
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1228
    }
1229
    die_gpl_disabled "The Postprocessing code" pp
1230
    die_gpl_disabled "liba52"                  liba52 liba52bin
1231
    die_gpl_disabled "libxvidcore"             xvid
1232
    die_gpl_disabled "x264"                    x264
1233
    die_gpl_disabled "libdts"                  libdts
1234
    die_gpl_disabled "FAAD2"                   libfaad2
1235
    die_gpl_disabled "The X11 grabber"         x11grab
1236
    die_gpl_disabled "The software scaler"     swscaler
1237
fi
1238

    
1239
# compute MMX state
1240
if test $mmx = "default"; then
1241
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1242
        mmx="yes"
1243
    else
1244
        mmx="no"
1245
    fi
1246
fi
1247

    
1248
test -z "$need_memalign" && need_memalign="$mmx"
1249

    
1250
#Darwin CC versions
1251
needmdynamicnopic="no"
1252
if test $targetos = Darwin; then
1253
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1254
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1255
    else
1256
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1257
        case "$gcc_version" in
1258
            *2.95*)
1259
                add_cflags "-no-cpp-precomp -pipe"
1260
                ;;
1261
            *[34].*)
1262
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1263
                if disabled lshared; then
1264
                   needmdynamicnopic="yes"
1265
                fi
1266
                ;;
1267
            *)
1268
                add_cflags "-no-cpp-precomp -pipe"
1269
                if disabled lshared; then
1270
                   needmdynamicnopic="yes"
1271
                fi
1272
                ;;
1273
        esac
1274
    fi
1275
fi
1276

    
1277
disabled optimize || add_cflags -fomit-frame-pointer
1278

    
1279
# Can only do AltiVec on PowerPC
1280
if test $altivec = "default"; then
1281
    if test $arch = "powerpc"; then
1282
        altivec="yes"
1283
    else
1284
        altivec="no"
1285
    fi
1286
fi
1287

    
1288
# Add processor-specific flags
1289
POWERPCMODE="32bits"
1290
if test $cpu != "generic"; then
1291
    warn_altivec(){
1292
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1293
    }
1294
    case $cpu in
1295
        601|ppc601|PowerPC601)
1296
            add_cflags "-mcpu=601"
1297
            warn_altivec enabled PPC601
1298
        ;;
1299
        603*|ppc603*|PowerPC603*)
1300
            add_cflags "-mcpu=603"
1301
            warn_altivec enabled PPC603
1302
        ;;
1303
        604*|ppc604*|PowerPC604*)
1304
            add_cflags "-mcpu=604"
1305
            warn_altivec enabled PPC604
1306
        ;;
1307
        G3|g3|75*|ppc75*|PowerPC75*)
1308
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1309
            warn_altivec enabled PPC75x
1310
        ;;
1311
        G4|g4|745*|ppc745*|PowerPC745*)
1312
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1313
            warn_altivec disabled PPC745x
1314
        ;;
1315
        74*|ppc74*|PowerPC74*)
1316
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1317
            warn_altivec disabled PPC74xx
1318
        ;;
1319
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1320
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1321
            warn_altivec disabled PPC970
1322
            POWERPCMODE="64bits"
1323
        ;;
1324
        # targets that do NOT support conditional mov (cmov)
1325
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1326
            add_cflags "-march=$cpu"
1327
            cmov="no"
1328
        ;;
1329
        # targets that do support conditional mov (cmov)
1330
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1331
            add_cflags "-march=$cpu"
1332
            cmov="yes"
1333
            fast_cmov="yes"
1334
        ;;
1335
        # targets that do support conditional mov but on which it's slow
1336
        pentium4|prescott|nocona)
1337
            add_cflags "-march=$cpu"
1338
            cmov="yes"
1339
            fast_cmov="no"
1340
        ;;
1341
        sparc64)
1342
            add_cflags "-mcpu=v9"
1343
        ;;
1344
        *)
1345
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1346
        ;;
1347
    esac
1348
fi
1349

    
1350
gnu_make(){
1351
    $1 --version 2>&1 | grep -q GNU
1352
}
1353

    
1354
if ! gnu_make $make; then
1355
    gnu_make gmake && make=gmake || die "GNU make not found."
1356
fi
1357

    
1358
# make sure we can execute files in $TMPDIR
1359
cat >$TMPE 2>>$logfile <<EOF
1360
#! /bin/sh
1361
EOF
1362
chmod +x $TMPE >>$logfile 2>&1
1363
if ! $TMPE >>$logfile 2>&1; then
1364
    cat <<EOF
1365
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1366
variable to another directory and make sure that $TMPDIR1 is not mounted
1367
noexec.
1368
EOF
1369
    die "Sanity test failed."
1370
fi
1371
rm $TMPE
1372

    
1373
# compiler sanity check
1374
check_exec <<EOF
1375
int main(){
1376
    return 0;
1377
}
1378
EOF
1379
if test "$?" != 0; then
1380
    echo "$cc is unable to create an executable file."
1381
    if test -z "$cross_prefix" && disabled cross_compile ; then
1382
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1383
        echo "Only do this if you know what cross compiling means."
1384
    fi
1385
    die "C compiler test failed."
1386
fi
1387

    
1388
# check for assembler specific support
1389

    
1390
if test $arch = "powerpc"; then
1391
check_cc <<EOF && dcbzl=yes
1392
int main(void) {
1393
    register long zero = 0;
1394
    char data[1024];
1395
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1396
return 0;
1397
}
1398
EOF
1399
fi
1400

    
1401
# check for SIMD availability
1402

    
1403
# AltiVec flags: The FSF version of GCC differs from the Apple version
1404
if test $arch = "powerpc"; then
1405
    if enabled altivec; then
1406
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1407
            add_cflags "-faltivec"
1408
        else
1409
            add_cflags "-maltivec -mabi=altivec"
1410
        fi
1411
    fi
1412
fi
1413

    
1414
check_header altivec.h
1415

    
1416
# check if our compiler supports Motorola AltiVec C API
1417
if enabled altivec; then
1418
    if enabled altivec_h; then
1419
        inc_altivec_h="#include <altivec.h>"
1420
    else
1421
        inc_altivec_h=
1422
    fi
1423
    check_cc <<EOF || altivec=no
1424
$inc_altivec_h
1425
int main(void) {
1426
    vector signed int v1, v2, v3;
1427
    v1 = vec_add(v2,v3);
1428
    return 0;
1429
}
1430
EOF
1431
fi
1432

    
1433
# check armv5te instructions support
1434
if test $armv5te = "default" -a $arch = "armv4l"; then
1435
    armv5te=no
1436
    check_cc <<EOF && armv5te=yes
1437
        int main(void) {
1438
        __asm__ __volatile__ ("qadd r0, r0, r0");
1439
        }
1440
EOF
1441
fi
1442

    
1443
if test $armv6 = "default" -a $arch = "armv4l"; then
1444
    check_cc <<EOF && armv6=yes || armv6=no
1445
int main(void) {
1446
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1447
}
1448
EOF
1449
fi
1450

    
1451
# check iwmmxt support
1452
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1453
    iwmmxt=no
1454
    check_cc <<EOF && iwmmxt=yes
1455
        int main(void) {
1456
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1457
        }
1458
EOF
1459
fi
1460

    
1461
# mmi only available on mips
1462
if test $mmi = "default"; then
1463
    if test $arch = "mips"; then
1464
        mmi="yes"
1465
    else
1466
        mmi="no"
1467
    fi
1468
fi
1469

    
1470
# check if our compiler supports mmi
1471
enabled mmi && check_cc <<EOF || mmi="no"
1472
int main(void) {
1473
    __asm__ ("lq \$2, 0(\$2)");
1474
    return 0;
1475
}
1476
EOF
1477

    
1478
# ---
1479
# big/little-endian test
1480
if disabled cross_compile; then
1481
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1482
#include <inttypes.h>
1483
int main(int argc, char ** argv){
1484
        volatile uint32_t i=0x01234567;
1485
        return (*((uint8_t*)(&i))) == 0x67;
1486
}
1487
EOF
1488
else
1489
    # programs cannot be launched if cross compiling, so make a static guess
1490
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1491
        bigendian="yes"
1492
    fi
1493
fi
1494

    
1495
# ---
1496
# check availability of some header files
1497

    
1498
check_header malloc.h
1499
check_func memalign
1500

    
1501
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1502
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1503
fi
1504

    
1505
check_header byteswap.h
1506

    
1507
check_func inet_aton
1508
check_func localtime_r
1509
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1510

    
1511
# check for some common methods of building with pthread support
1512
# do this before the optional library checks as some of them require pthreads
1513
if enabled pthreads; then
1514
    if check_func pthread_create; then
1515
        :
1516
    elif check_func pthread_create -pthread; then
1517
        add_cflags -pthread
1518
        add_ldflags -pthread
1519
    elif check_func pthread_create -pthreads; then
1520
        add_cflags -pthreads
1521
        add_ldflags -pthreads
1522
    elif ! check_lib pthread.h pthread_create -lpthread; then
1523
        die "ERROR: can't find pthreads library"
1524
    fi
1525
fi
1526

    
1527
for thread in pthreads beosthreads os2threads w32threads; do
1528
    if enabled $thread; then
1529
        if ! disabled thread_type ; then
1530
            die "ERROR: Only one thread type must be selected."
1531
        else
1532
            thread_type="$thread"
1533
        fi
1534
    fi
1535
done
1536

    
1537
# these are off by default, so fail if requested and not available
1538
enabled libdts     && require libdts dts.h dts_init -ldts -lm
1539
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1540
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1541
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1542
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1543
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1544
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1545
enabled xvid       && require XviD xvid.h xvid_global -lxvidcore
1546
enabled x264       && require x264 x264.h x264_encoder_open -lx264
1547
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1548
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1549

    
1550
# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1551
# the generic test functions
1552
if enabled libfaac; then
1553
    save_flags
1554
    temp_extralibs -lfaac
1555
    check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1556
#include <stdint.h>
1557
#include <faac.h>
1558
int main(){
1559
    char *id, *cpr;
1560
    faacEncGetVersion(&id, &cpr);
1561
    return 0;
1562
}
1563
EOF
1564
    restore_flags
1565
fi
1566

    
1567
# Ugh, recent faad2 versions have renamed all functions and #define the
1568
# old names in faad.h.  Generic tests won't work.
1569
if enabled libfaad; then
1570
    save_flags
1571
    temp_extralibs -lfaad
1572
    check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1573
#include <faad.h>
1574
int main(){
1575
    faacDecOpen();
1576
    return 0;
1577
}
1578
EOF
1579
    restore_flags
1580
fi
1581

    
1582
# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1583
if enabled avisynth; then
1584
    save_flags
1585
    temp_extralibs -lvfw32
1586
    check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1587
#include <windows.h>
1588
#include <vfw.h>
1589
int main(){
1590
    AVIFileInit();
1591
    return 0;
1592
}
1593
EOF
1594
    restore_flags
1595
fi
1596

    
1597

    
1598
# test for lrintf in math.h
1599
check_exec <<EOF && lrintf=yes || lrintf=no
1600
#define _ISOC9X_SOURCE  1
1601
#include <math.h>
1602
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1603
EOF
1604

    
1605
_restrict=
1606
for restrict_keyword in restrict __restrict__ __restrict; do
1607
    check_cc <<EOF && _restrict=$restrict_keyword && break
1608
void foo(char * $restrict_keyword p);
1609
EOF
1610
done
1611

    
1612
# dlopen/dlfcn.h probing
1613

    
1614
check_header dlfcn.h
1615

    
1616
if check_func dlopen; then
1617
    ldl=
1618
elif check_func dlopen -ldl; then
1619
    ldl=-ldl
1620
fi
1621

    
1622
test "$vhook" = "default" && vhook="$dlopen"
1623

    
1624
enabled_any vhook liba52bin libfaadbin && add_extralibs $ldl
1625

    
1626
if test "$targetos" = "CYGWIN" && enabled lstatic ; then
1627
    vhook="no"
1628
    echo
1629
    echo "At the moment vhooks don't work on Cygwin static builds."
1630
    echo "Patches welcome."
1631
    echo
1632
fi
1633

    
1634
if enabled vhook; then
1635
    check_ldflags -rdynamic
1636
    check_ldflags -export-dynamic
1637
fi
1638

    
1639
enabled audio_beos && add_extralibs "-lmedia -lbe"
1640

    
1641
##########################################
1642
# imlib check
1643

    
1644
imlib2=no
1645
if imlib2-config --version >/dev/null 2>&1; then
1646
    temp_cflags `imlib2-config --cflags`
1647
    temp_extralibs `imlib2-config --libs`
1648
    check_lib Imlib2.h imlib_load_font && enable imlib2
1649
    restore_flags
1650
fi
1651

    
1652
##########################################
1653
# FreeType check
1654

    
1655
freetype2=no
1656
if freetype-config --version >/dev/null 2>&1; then
1657
    temp_cflags `freetype-config --cflags`
1658
    temp_extralibs `freetype-config --libs`
1659
    check_lib ft2build.h FT_Init_FreeType && enable freetype2
1660
    restore_flags
1661
fi
1662

    
1663
##########################################
1664
# SDL check
1665

    
1666
sdl_too_old=no
1667
sdl=no
1668
SDL_CONFIG="${cross_prefix}sdl-config"
1669
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1670
    temp_cflags `"${SDL_CONFIG}" --cflags`
1671
    temp_extralibs `"${SDL_CONFIG}" --libs`
1672
    check_ld <<EOF
1673
#include <SDL.h>
1674
#undef main /* We don't want SDL to override our main() */
1675
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
1676
EOF
1677
    if test $? = 0; then
1678
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1679
        if test "$_sdlversion" -lt 121 ; then
1680
            sdl_too_old=yes
1681
        else
1682
            sdl=yes
1683
            check_cc <<EOF && sdl_video_size=yes || sdl_video_size=no
1684
#include <SDL.h>
1685
int main(void){
1686
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1687
    int w = vi->current_w;
1688
    return 0;
1689
}
1690
EOF
1691
        fi
1692
    fi
1693
    restore_flags
1694
fi
1695

    
1696
enabled sdl || ffplay=no
1697

    
1698
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1699

    
1700
##########################################
1701
# IPv6 check
1702

    
1703
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1704
#include <sys/types.h>
1705
#include <sys/socket.h>
1706
#include <netinet/in.h>
1707
#include <netdb.h>
1708
int main( void ) {
1709
  struct sockaddr_storage saddr;
1710
  struct ipv6_mreq mreq6;
1711
  getaddrinfo(0,0,0,0);
1712
  getnameinfo(0,0,0,0,0,0,0);
1713
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1714
}
1715
EOF
1716

    
1717
enabled video4linux  && check_header linux/videodev.h  || disable video4linux
1718
enabled video4linux2 && check_header linux/videodev2.h || disable video4linux2
1719

    
1720
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1721
if enabled bktr; then
1722
    { check_header dev/bktr/ioctl_meteor.h &&
1723
      check_header dev/bktr/ioctl_bt848.h; } ||
1724
    { check_header machine/ioctl_meteor.h &&
1725
      check_header machine/ioctl_bt848.h; } ||
1726
    { check_header dev/video/meteor/ioctl_meteor.h &&
1727
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1728
    check_header dev/ic/bt8xx.h ||
1729
    disable bktr
1730
fi
1731

    
1732
enabled audio_oss &&
1733
    check_header sys/soundcard.h ||
1734
    check_header soundcard.h ||
1735
    disable audio_oss
1736

    
1737
# Deal with the x11 frame grabber
1738
enabled x11grab                         &&
1739
enabled gpl                             &&
1740
enabled x11_grab_device_demuxer         &&
1741
check_header X11/Xlib.h                 &&
1742
check_header X11/extensions/XShm.h      &&
1743
check_func XOpenDisplay -lX11           &&
1744
check_func XShmCreateImage -lX11 -lXext &&
1745
add_extralibs -lX11 -lXext              ||
1746
disable x11_grab_device_demuxer
1747

    
1748
enabled debug && add_cflags -g
1749

    
1750
# add some useful compiler flags if supported
1751
check_cflags -Wdeclaration-after-statement
1752
check_cflags -Wall
1753
check_cflags -Wno-switch
1754
check_cflags -Wdisabled-optimization
1755
check_cflags -Wpointer-arith
1756
check_cflags -Wredundant-decls
1757
check_cflags -Wno-pointer-sign
1758
enabled extrawarnings && check_cflags -Winline
1759

    
1760
# add some linker flags
1761
check_ldflags $LDLATEFLAGS
1762

    
1763
# not all compilers support -Os
1764
test "$optimize" = "small" && check_cflags -Os
1765

    
1766
if enabled optimize; then
1767
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1768
        add_cflags  "-O5"
1769
        add_ldflags "-O5"
1770
    else
1771
        add_cflags "-O3"
1772
    fi
1773
fi
1774

    
1775
# PIC flags for shared library objects where they are needed
1776
if enabled lshared; then
1777
    # LIBOBJFLAGS may have already been set in the OS configuration
1778
    if test -z "$LIBOBJFLAGS" ; then
1779
        case "$arch" in
1780
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1781
        esac
1782
    fi
1783
fi
1784

    
1785
if enabled gprof; then
1786
    add_cflags  "-p"
1787
    add_ldflags "-p"
1788
fi
1789

    
1790
VHOOKCFLAGS="-fPIC $CFLAGS"
1791
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1792

    
1793
# find if .align arg is power-of-two or not
1794
if test $asmalign_pot = "unknown"; then
1795
    asmalign_pot="no"
1796
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1797
fi
1798

    
1799
echo "install prefix            $PREFIX"
1800
echo "source path               $source_path"
1801
echo "C compiler                $cc"
1802
echo "make                      $make"
1803
echo ".align is power-of-two    $asmalign_pot"
1804
echo "ARCH                      $arch ($cpu)"
1805
if test "$BUILDSUF" != ""; then
1806
    echo "build suffix              $BUILDSUF"
1807
fi
1808
echo "big-endian                $bigendian"
1809
if test $arch = "x86_32" -o $arch = "x86_64"; then
1810
    echo "MMX enabled               $mmx"
1811
    echo "CMOV enabled              $cmov"
1812
    echo "CMOV is fast              $fast_cmov"
1813
fi
1814
if test $arch = "armv4l"; then
1815
    echo "ARMv5TE enabled           $armv5te"
1816
    echo "ARMv6 enabled             $armv6"
1817
    echo "IWMMXT enabled            $iwmmxt"
1818
fi
1819
if test $arch = "mips"; then
1820
    echo "MMI enabled               $mmi"
1821
fi
1822
if test $arch = "powerpc"; then
1823
    echo "AltiVec enabled           $altivec"
1824
    echo "dcbzl available           $dcbzl"
1825
fi
1826
echo "gprof enabled             $gprof"
1827
echo "debug symbols             $debug"
1828
echo "strip symbols             $dostrip"
1829
echo "optimize                  $optimize"
1830
echo "static                    $lstatic"
1831
echo "shared                    $lshared"
1832
echo "postprocessing support    $pp"
1833
echo "software scaler enabled   $swscaler"
1834
echo "video hooking             $vhook"
1835
if enabled vhook; then
1836
    echo "Imlib2 support            $imlib2"
1837
    echo "FreeType support          $freetype2"
1838
fi
1839
echo "network support           $network"
1840
if enabled network; then
1841
    echo "IPv6 support              $ipv6"
1842
fi
1843
echo "threading support         $thread_type"
1844
echo "SDL support               $sdl"
1845
if enabled sdl_too_old; then
1846
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1847
fi
1848
echo "Sun medialib support      $mlib"
1849
echo "AVISynth enabled          $avisynth"
1850
echo "liba52 support            $liba52"
1851
echo "liba52 dlopened           $liba52bin"
1852
echo "libdts support            $libdts"
1853
echo "libfaac enabled           $libfaac"
1854
echo "libfaad enabled           $libfaad"
1855
echo "faadbin enabled           $libfaadbin"
1856
echo "libgsm enabled            $libgsm"
1857
echo "libmp3lame enabled        $libmp3lame"
1858
echo "libnut enabled            $libnut"
1859
echo "libogg enabled            $libogg"
1860
echo "libtheora enabled         $libtheora"
1861
echo "libvorbis enabled         $libvorbis"
1862
echo "x264 enabled              $x264"
1863
echo "XviD enabled              $xvid"
1864
echo "zlib enabled              $zlib"
1865
echo "AMR-NB float support      $amr_nb"
1866
echo "AMR-NB fixed support      $amr_nb_fixed"
1867
echo "AMR-WB float support      $amr_wb"
1868
echo "AMR-WB IF2 support        $amr_if2"
1869
if disabled gpl; then
1870
    echo "License: LGPL"
1871
else
1872
    echo "License: GPL"
1873
fi
1874

    
1875
echo "Creating config.mak and config.h..."
1876

    
1877
echo "# Automatically generated by configure - do not modify!" > config.mak
1878
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1879
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1880

    
1881
echo "PREFIX=$PREFIX" >> config.mak
1882
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1883
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1884
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1885
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1886
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1887
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1888
echo "MAKE=$make" >> config.mak
1889
echo "CC=$cc" >> config.mak
1890
echo "AR=$ar" >> config.mak
1891
echo "RANLIB=$ranlib" >> config.mak
1892
if enabled dostrip; then
1893
    echo "STRIP=$strip" >> config.mak
1894
else
1895
    echo "STRIP=echo ignoring strip" >> config.mak
1896
fi
1897

    
1898
echo "OPTFLAGS=$CFLAGS" >> config.mak
1899
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1900
echo "LDFLAGS=$LDFLAGS" >> config.mak
1901
echo "LDCONFIG=$LDCONFIG" >> config.mak
1902
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1903
echo "SHFLAGS=$SHFLAGS" >> config.mak
1904
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1905
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1906
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1907
echo "BUILD_STATIC=$lstatic" >> config.mak
1908
echo "BUILDSUF=$BUILDSUF" >> config.mak
1909
echo "LIBPREF=$LIBPREF" >> config.mak
1910
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1911
if enabled lstatic; then
1912
  echo "LIB=$LIB" >> config.mak
1913
else # Some Make complain if this variable does not exist.
1914
  echo "LIB=" >> config.mak
1915
fi
1916
echo "SLIBPREF=$SLIBPREF" >> config.mak
1917
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1918
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1919
echo "TARGET_OS=$targetos" >> config.mak
1920

    
1921
ucarch=`toupper $arch`
1922
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1923
echo "#define ARCH_${ucarch} 1" >> $TMPH
1924

    
1925
# special cases
1926
case "$arch" in
1927
    x86_32|x86_64)
1928
        echo "TARGET_ARCH_X86=yes" >> config.mak
1929
        echo "#define ARCH_X86 1" >> $TMPH
1930
        ;;
1931
    powerpc)
1932
        if test "$POWERPCMODE" = "64bits"; then
1933
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1934
        fi
1935
        if enabled powerpc_perf; then
1936
            echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
1937
        fi
1938
        ;;
1939
    sparc64)
1940
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
1941
        echo "#define ARCH_SPARC 1" >> $TMPH
1942
        ;;
1943
esac
1944

    
1945
if enabled bigendian; then
1946
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1947
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1948
fi
1949
if enabled mmx; then
1950
  echo "#define __CPU__ 586" >> $TMPH
1951
fi
1952

    
1953
if enabled sdl; then
1954
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1955
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1956
fi
1957
if enabled texi2html; then
1958
  echo "BUILD_DOC=yes" >> config.mak
1959
fi
1960

    
1961
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1962
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1963
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1964
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1965
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1966

    
1967

    
1968

    
1969
if enabled lshared; then
1970
  echo "BUILD_SHARED=yes" >> config.mak
1971
  echo "PIC=-fPIC -DPIC" >> config.mak
1972
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1973
  echo "SPPVERSION=$pp_version" >> config.mak
1974
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1975
  echo "LAVCVERSION=$lavc_version" >> config.mak
1976
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1977
  echo "LAVFVERSION=$lavf_version" >> config.mak
1978
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1979
  echo "LAVUVERSION=$lavu_version" >> config.mak
1980
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1981
  echo "SWSVERSION=$sws_version" >> config.mak
1982
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1983
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1984
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1985
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1986
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1987
fi
1988
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1989
echo "EXTRALIBS=$extralibs" >> config.mak
1990

    
1991
enabled_any $ENCODER_LIST && enable encoders
1992
enabled_any $DECODER_LIST && enable decoders
1993
enabled_any $MUXER_LIST   && enable muxers
1994
enabled_any $DEMUXER_LIST && enable demuxers
1995

    
1996
enabled_any pthreads beosthreads os2threads w32threads && enable threads
1997

    
1998
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1999
    $DEMUXER_LIST $MUXER_LIST
2000

    
2001
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2002
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
2003
print_config TARGET_ $TMPH config.mak $TARGET_LIST
2004

    
2005
if test "$targetos" = "Darwin"; then
2006
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
2007
fi
2008

    
2009
echo "#define restrict $_restrict" >> $TMPH
2010

    
2011
if test "$optimize" = "small"; then
2012
  echo "#define always_inline"  >> $TMPH
2013
  echo "#define CONFIG_SMALL 1" >> $TMPH
2014
fi
2015

    
2016
echo "SRC_PATH=\"$source_path\"" >> config.mak
2017
echo "SRC_PATH_BARE=$source_path" >> config.mak
2018
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2019

    
2020
if enabled amr_if2; then
2021
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
2022
fi
2023

    
2024
# Apparently it's not possible to portably echo a backslash.
2025
if enabled asmalign_pot; then
2026
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2027
else
2028
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2029
fi
2030

    
2031

    
2032
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2033
    ucname="`toupper $codec`"
2034
    config_name="CONFIG_$ucname"
2035
    enabled_name="ENABLE_$ucname"
2036
    if enabled $codec; then
2037
        echo "#define $config_name 1" >> $TMPH
2038
        echo "#define $enabled_name 1" >> $TMPH
2039
        echo "$config_name=yes" >> config.mak
2040
    else
2041
        echo "#define $enabled_name 0" >> $TMPH
2042
    fi
2043
done
2044

    
2045
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2046
if ! cmp -s $TMPH config.h; then
2047
        mv -f $TMPH config.h
2048
else
2049
        echo "config.h is unchanged"
2050
fi
2051

    
2052
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2053

    
2054
# build tree in object directory if source path is different from current one
2055
if enabled source_path_used; then
2056
    DIRS="\
2057
         doc \
2058
         libavformat \
2059
         libavcodec \
2060
         libavcodec/alpha \
2061
         libavcodec/armv4l \
2062
         libavcodec/bfin \
2063
         libavcodec/i386 \
2064
         libavcodec/sparc \
2065
         libavcodec/mlib \
2066
         libavcodec/ppc \
2067
         libavcodec/liba52 \
2068
         libavcodec/amr \
2069
         libavcodec/amr_float \
2070
         libavcodec/amrwb_float \
2071
         libpostproc \
2072
         libavutil \
2073
         libswscale \
2074
         tests \
2075
         vhook \
2076
         "
2077
    FILES="\
2078
          Makefile \
2079
          common.mak \
2080
          libavformat/Makefile \
2081
          libavcodec/Makefile \
2082
          libpostproc/Makefile \
2083
          libavutil/Makefile \
2084
          libswscale/Makefile \
2085
          tests/Makefile \
2086
          vhook/Makefile \
2087
          doc/Makefile \
2088
          doc/texi2pod.pl \
2089
          "
2090
    for dir in $DIRS ; do
2091
            mkdir -p $dir
2092
    done
2093
    for f in $FILES ; do
2094
        ln -sf "$source_path/$f" $f
2095
    done
2096
fi
2097

    
2098

    
2099
# build pkg-config files
2100
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2101

    
2102
pkgconfig_generate(){
2103
name=$1
2104
comment=$2
2105
version=$3
2106
libs=$4
2107
requires=$5
2108
include=$6
2109
cat <<EOF >$name.pc
2110
prefix=$PREFIX
2111
exec_prefix=\${prefix}
2112
libdir=\${exec_prefix}/lib
2113
includedir=\${prefix}/include
2114

    
2115
Name: $name
2116
Description: $comment
2117
Version: $version
2118
Requires: $requires
2119
Conflicts:
2120
Libs: -L\${libdir} $libs
2121
Cflags: -I\${includedir} -I\${includedir}/$include
2122
EOF
2123
}
2124

    
2125
pkgconfig_generate_uninstalled(){
2126
name=$1
2127
shortname=${name#lib}
2128
comment=$2
2129
version=$3
2130
libs=$4
2131
requires=$5
2132
cat <<EOF >$name-uninstalled.pc
2133
prefix=
2134
exec_prefix=
2135
libdir=\${pcfiledir}/$name
2136
includedir=\${pcfiledir}/$name
2137

    
2138
Name: $name
2139
Description: $comment
2140
Version: $version
2141
Requires: $requires
2142
Conflicts:
2143
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2144
Cflags: -I\${includedir}
2145
EOF
2146
}
2147

    
2148
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2149
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2150

    
2151
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2152
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2153

    
2154
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2155
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2156

    
2157
if enabled pp; then
2158
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2159
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2160
fi
2161

    
2162
if enabled swscaler; then
2163
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2164
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2165
else
2166
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2167
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2168
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2169
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2170
fi