Statistics
| Branch: | Revision:

ffmpeg / configure @ 245626d0

History | View | Annotate | Download (56.7 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-static          build static libraries [default=yes]"
66
  echo "  --disable-static         do not build static libraries [default=no]"
67
  echo "  --enable-shared          build shared libraries [default=no]"
68
  echo "  --disable-shared         do not build shared libraries [default=yes]"
69
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
70
  echo "                           and ffmpeg will be under GPL [default=no]"
71
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
72
  echo "  --enable-swscaler        software scaler support [default=no]"
73
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
74
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
75
  echo "  --enable-pthreads        use pthreads [default=no]"
76
  echo "  --enable-w32threads      use Win32 threads [default=no]"
77
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
78
  echo
79
  echo "External library support:"
80
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
81
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
82
  echo "                           and libraw1394 [default=no]"
83
  echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
84
  echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
85
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
86
  echo "  --enable-libdts          enable GPLed libdts support [default=no]"
87
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
88
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
89
  echo "  --enable-libfaadbin      build FAAD support with runtime linking [default=no]"
90
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
91
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
92
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
93
  echo "                           native demuxer exists [default=no]"
94
  echo "  --enable-libogg          enable Ogg muxing via libogg [default=no]"
95
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
96
  echo "  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,"
97
  echo "                           native implementations exist [default=no]"
98
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
99
  echo "  --enable-xvid            enable Xvid encoding via xvidcore,"
100
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
101
  echo "  --enable-amr-nb          enable amr-nb floating point audio codec"
102
  echo "  --enable-amr-nb-fixed    enable amr-nb fixed-point codec"
103
  echo "  --enable-amr-wb          enable amr-wb floating point audio codec"
104
  echo ""
105
  echo "Advanced options (experts only):"
106
  echo "  --source-path=PATH       path to source code [$source_path]"
107
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
108
  echo "  --cross-compile          assume a cross-compiler is used"
109
  echo "  --target-os=OS           compiler targets OS [$targetos]"
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
  echo "                           instruction selection, may crash on older CPUs)"
119
  echo "  --enable-powerpc-perf    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 "  --disable-debug          disable debugging symbols"
137
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
138
  echo "                           MPEG audio decoding [default=no]"
139
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
140
  echo "  --disable-ffmpeg         disable ffmpeg build"
141
  echo "  --disable-ffserver       disable ffserver build"
142
  echo "  --disable-ffplay         disable ffplay build"
143
  echo "  --enable-small           optimize for size instead of speed"
144
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
145
  echo "  --disable-encoder=NAME   disables encoder NAME"
146
  echo "  --enable-encoder=NAME    enables encoder NAME"
147
  echo "  --disable-decoder=NAME   disables decoder NAME"
148
  echo "  --enable-decoder=NAME    enables decoder NAME"
149
  echo "  --disable-encoders       disables all encoders"
150
  echo "  --disable-decoders       disables all decoders"
151
  echo "  --disable-muxer=NAME     disables muxer NAME"
152
  echo "  --enable-muxer=NAME      enables muxer NAME"
153
  echo "  --disable-muxers         disables all muxers"
154
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
155
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
156
  echo "  --disable-demuxers       disables all demuxers"
157
  echo "  --enable-parser=NAME     enables parser NAME"
158
  echo "  --disable-parser=NAME    disables parser NAME"
159
  echo "  --disable-parsers        disables all parsers"
160
  echo
161
  echo "Developer options (useful when working on FFmpeg itself):"
162
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
163
  echo "  --disable-opts           disable compiler optimizations"
164
  echo "  --enable-extra-warnings  enable more compiler warnings"
165
  echo "  --disable-strip          disable stripping of executables and shared libraries"
166
  echo ""
167
  echo "NOTE: Object files are built at the place where configure is launched."
168
  exit 1
169
}
170

    
171
log(){
172
    echo "$@" >>$logfile
173
}
174

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

    
181
echolog(){
182
    log "$@"
183
    echo "$@"
184
}
185

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

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

    
213
tolower(){
214
    echo "$@" | tr '[A-Z]' '[a-z]'
215
}
216

    
217
set_all(){
218
    value=$1
219
    shift
220
    for var in $*; do
221
        eval $var=$value
222
    done
223
}
224

    
225
pushvar(){
226
    for var in $*; do
227
        eval level=\${${var}_level:=0}
228
        eval ${var}_${level}="\$$var"
229
        eval ${var}_level=$(($level+1))
230
    done
231
}
232

    
233
popvar(){
234
    for var in $*; do
235
        eval level=\${${var}_level:-0}
236
        test $level = 0 && continue
237
        eval level=$(($level-1))
238
        eval $var="\${${var}_${level}}"
239
        eval ${var}_level=$level
240
        eval unset ${var}_${level}
241
    done
242
}
243

    
244
enable(){
245
    set_all yes $*
246
}
247

    
248
disable(){
249
    set_all no $*
250
}
251

    
252
enabled(){
253
    eval test "x\$$1" = "xyes"
254
}
255

    
256
disabled(){
257
    eval test "x\$$1" = "xno"
258
}
259

    
260
enabled_all(){
261
    for opt; do
262
        enabled $opt || return 1
263
    done
264
}
265

    
266
disabled_all(){
267
    for opt; do
268
        disabled $opt || return 1
269
    done
270
}
271

    
272
enabled_any(){
273
    for opt; do
274
        enabled $opt && return 0
275
    done
276
}
277

    
278
disabled_any(){
279
    for opt; do
280
        disabled $opt && return 0
281
    done
282
}
283

    
284
check_deps(){
285
    for cfg; do
286
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
287
        disabled ${cfg}_checking && continue
288
        enable ${cfg}_checking
289

    
290
        eval dep_all="\$${cfg}_deps"
291
        eval dep_any="\$${cfg}_deps_any"
292

    
293
        pushvar cfg dep_all dep_any
294
        check_deps $dep_all $dep_any
295
        popvar cfg dep_all dep_any
296

    
297
        enabled_all $dep_all || disable $cfg
298
        enabled_any $dep_any || disable $cfg
299

    
300
        disable ${cfg}_checking
301
    done
302
}
303

    
304
print_config(){
305
    pfx=$1
306
    header=$2
307
    makefile=$3
308
    shift 3
309
    for cfg; do
310
        if enabled $cfg; then
311
            ucname="${pfx}`toupper $cfg`"
312
            echo "#define ${ucname} 1" >> $header
313
            echo "${ucname}=yes" >> $makefile
314
        fi
315
    done
316
}
317

    
318
flags_saved(){
319
    (: ${SAVE_CFLAGS?}) 2>/dev/null
320
}
321

    
322
save_flags(){
323
    flags_saved && return
324
    SAVE_CFLAGS="$CFLAGS"
325
    SAVE_LDFLAGS="$LDFLAGS"
326
    SAVE_extralibs="$extralibs"
327
}
328

    
329
restore_flags(){
330
    flags_saved || return
331
    CFLAGS="$SAVE_CFLAGS"
332
    LDFLAGS="$SAVE_LDFLAGS"
333
    extralibs="$SAVE_extralibs"
334
    unset SAVE_CFLAGS
335
    unset SAVE_LDFLAGS
336
    unset SAVE_extralibs
337
}
338

    
339
temp_cflags(){
340
    save_flags
341
    CFLAGS="$CFLAGS $*"
342
}
343

    
344
temp_ldflags(){
345
    save_flags
346
    LDFLAGS="$LDFLAGS $*"
347
}
348

    
349
temp_extralibs(){
350
    save_flags
351
    extralibs="$extralibs $*"
352
}
353

    
354
append(){
355
    var=$1
356
    shift
357
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
358
    eval "$var=\"\$$var $*\""
359
}
360

    
361
add_cflags(){
362
    append CFLAGS "$@"
363
}
364

    
365
add_ldflags(){
366
    append LDFLAGS "$@"
367
}
368

    
369
add_extralibs(){
370
    append extralibs "$@"
371
}
372

    
373
check_cmd(){
374
    log "$@"
375
    "$@" >>$logfile 2>&1
376
}
377

    
378
check_cc(){
379
    log check_cc "$@"
380
    cat >$TMPC
381
    log_file $TMPC
382
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
383
}
384

    
385
check_cpp(){
386
    log check_cpp "$@"
387
    cat >$TMPC
388
    log_file $TMPC
389
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
390
}
391

    
392
check_ld(){
393
    log check_ld "$@"
394
    check_cc || return
395
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
396
}
397

    
398
check_cflags(){
399
    log check_cflags "$@"
400
    check_cc "$@" <<EOF && add_cflags "$@"
401
int x;
402
EOF
403
}
404

    
405
check_ldflags(){
406
    log check_ldflags "$@"
407
    check_ld "$@" <<EOF && add_ldflags "$@"
408
int main(){
409
    return 0;
410
}
411
EOF
412
}
413

    
414
check_header(){
415
    log check_header "$@"
416
    header=$1
417
    shift
418
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
419
    disable $var
420
    check_cpp "$@" <<EOF && enable $var
421
#include <$header>
422
int x;
423
EOF
424
}
425

    
426
check_func(){
427
    log check_func "$@"
428
    func=$1
429
    shift
430
    disable $func
431
    check_ld "$@" <<EOF && enable $func
432
extern int $func();
433
int main(){
434
    $func();
435
}
436
EOF
437
}
438

    
439
check_func2(){
440
    log check_func2 "$@"
441
    headers=$1
442
    func=$2
443
    shift 2
444
    disable $func
445
    incs=""
446
    for hdr in $headers; do
447
        incs="$incs
448
#include <$hdr>"
449
    done
450
    check_ld "$@" <<EOF && enable $func
451
$incs
452
int main(){
453
    (void) $func;
454
    return 0;
455
}
456
EOF
457
}
458

    
459
check_lib(){
460
    log check_lib "$@"
461
    header="$1"
462
    func="$2"
463
    shift 2
464
    temp_extralibs "$@"
465
    check_header $header && check_func $func && add_extralibs "$@"
466
    err=$?
467
    restore_flags
468
    return $err
469
}
470

    
471
check_lib2(){
472
    log check_lib2 "$@"
473
    headers="$1"
474
    func="$2"
475
    shift 2
476
    temp_extralibs "$@"
477
    check_func2 "$headers" $func && add_extralibs "$@"
478
    err=$?
479
    restore_flags
480
    return $err
481
}
482

    
483
check_exec(){
484
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
485
}
486

    
487
check_exec_crash(){
488
    code=`cat`
489

    
490
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
491
    # are safe but may not be available everywhere.  Thus we use
492
    # raise(SIGTERM) instead.  The check is run in a subshell so we
493
    # can redirect the "Terminated" message from the shell.  SIGBUS
494
    # is not defined by standard C so it is used conditionally.
495

    
496
    (check_exec "$@") >>$logfile 2>&1 <<EOF
497
#include <signal.h>
498
static void sighandler(int sig){
499
    raise(SIGTERM);
500
}
501
int main(){
502
    signal(SIGILL, sighandler);
503
    signal(SIGFPE, sighandler);
504
    signal(SIGSEGV, sighandler);
505
#ifdef SIGBUS
506
    signal(SIGBUS, sighandler);
507
#endif
508
    { $code }
509
}
510
EOF
511
}
512

    
513
require(){
514
    name="$1"
515
    header="$2"
516
    func="$3"
517
    shift 3
518
    check_lib $header $func "$@" || die "ERROR: $name not found"
519
}
520

    
521
require2(){
522
    name="$1"
523
    headers="$2"
524
    func="$3"
525
    shift 3
526
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
527
}
528

    
529
check_foo_config(){
530
    cfg=$1
531
    pkg=$2
532
    header=$3
533
    func=$4
534
    shift 4
535
    disable $cfg
536
    check_cmd ${pkg}-config --version
537
    err=$?
538
    if test "$err" = 0; then
539
        temp_cflags `${pkg}-config --cflags`
540
        temp_extralibs `${pkg}-config --libs`
541
        check_lib "$@" $header $func && enable $cfg
542
    fi
543
    return $err
544
}
545

    
546
apply(){
547
    file=$1
548
    shift
549
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
550
}
551

    
552
CONFIG_LIST='
553
    encoders
554
    decoders
555
    parsers
556
    muxers
557
    demuxers
558
    amr
559
    amr_nb
560
    amr_nb_fixed
561
    amr_wb
562
    audio_beos
563
    audio_oss
564
    avisynth
565
    beos_netserver
566
    bktr
567
    dc1394
568
    dv1394
569
    ffmpeg
570
    ffplay
571
    ffserver
572
    gpl
573
    gprof
574
    ipv6
575
    liba52
576
    liba52bin
577
    libdts
578
    libfaac
579
    libfaad
580
    libfaadbin
581
    libgsm
582
    libmp3lame
583
    libnut
584
    libogg
585
    libtheora
586
    libvorbis
587
    memalign_hack
588
    mpegaudio_hp
589
    network
590
    powerpc_perf
591
    pp
592
    protocols
593
    swscaler
594
    vhook
595
    v4l
596
    v4l2
597
    x11grab
598
    x264
599
    xvid
600
    zlib
601
'
602

    
603
THREADS_LIST='
604
    beosthreads
605
    os2threads
606
    pthreads
607
    w32threads
608
'
609

    
610
HAVE_LIST="
611
    $THREADS_LIST
612
    altivec
613
    altivec_h
614
    armv5te
615
    armv6
616
    arpa_inet_h
617
    byteswap_h
618
    cmov
619
    dcbzl
620
    dev_bktr_ioctl_bt848_h
621
    dev_bktr_ioctl_meteor_h
622
    dev_ic_bt8xx_h
623
    dev_video_meteor_ioctl_meteor_h
624
    dev_video_bktr_ioctl_bt848_h
625
    dlfcn_h
626
    dlopen
627
    ebp_available
628
    ebx_available
629
    fast_64bit
630
    fast_cmov
631
    freetype2
632
    imlib2
633
    inet_aton
634
    iwmmxt
635
    localtime_r
636
    lrintf
637
    machine_ioctl_bt848_h
638
    machine_ioctl_meteor_h
639
    malloc_h
640
    memalign
641
    mlib
642
    mmi
643
    mmx
644
    os2
645
    sdl
646
    sdl_video_size
647
    soundcard_h
648
    sys_poll_h
649
    sys_soundcard_h
650
    threads
651
"
652

    
653
TARGET_LIST='
654
    altivec
655
    armv5te
656
    armv6
657
    iwmmxt
658
    mmi
659
    mmx
660
'
661

    
662
CMDLINE_SELECT="
663
    $CONFIG_LIST
664
    $TARGET_LIST
665
    $THREADS_LIST
666
    debug
667
    extra_warnings
668
    shared
669
    static
670
"
671

    
672
dxa_decoder_deps="zlib"
673
flashsv_decoder_deps="zlib"
674
flashsv_encoder_deps="zlib"
675
mpeg_xvmc_decoder_deps="xvmc"
676
png_decoder_deps="zlib"
677
png_encoder_deps="zlib"
678
x264_encoder_deps="x264"
679
xvid_encoder_deps="xvid"
680
zmbv_decoder_deps="zlib"
681
zmbv_encoder_deps="zlib"
682

    
683
aac_decoder_deps="libfaad"
684
mpeg4aac_decoder_deps="libfaad"
685
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
686
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
687
amr_wb_decoder_deps="amr_wb"
688
amr_wb_encoder_deps="amr_wb"
689
dts_decoder_deps="libdts"
690
faac_encoder_deps="libfaac"
691
liba52_decoder_deps="liba52"
692
libgsm_decoder_deps="libgsm"
693
libgsm_encoder_deps="libgsm"
694
libgsm_ms_decoder_deps="libgsm"
695
libgsm_ms_encoder_deps="libgsm"
696
libtheora_encoder_deps="libtheora"
697
mp3lame_encoder_deps="libmp3lame"
698
oggvorbis_decoder_deps="libvorbis"
699
oggvorbis_encoder_deps="libvorbis"
700

    
701
ac3_demuxer_deps="ac3_parser"
702
audio_demuxer_deps_any="audio_oss audio_beos"
703
audio_muxer_deps_any="audio_oss audio_beos"
704
dc1394_demuxer_deps="dc1394"
705
dv1394_demuxer_deps="dv1394"
706
gxf_muxer_deps="gpl"
707
libnut_demuxer_deps="libnut"
708
libnut_muxer_deps="libnut"
709
ogg_muxer_deps="libogg"
710
redir_demuxer_deps="network"
711
rtp_muxer_deps="network"
712
rtsp_demuxer_deps="network"
713
sdp_demuxer_deps="network"
714
v4l2_demuxer_deps="v4l2"
715
video_grab_bktr_demuxer_deps="bktr"
716
video_grab_v4l_demuxer_deps="v4l"
717
x11_grab_device_demuxer_deps="x11grab"
718

    
719
ffplay_deps="sdl"
720
ffserver_deps="network protocols muxers"
721
network_deps="protocols"
722

    
723
# set temporary file name
724
if test ! -z "$TMPDIR" ; then
725
    TMPDIR1="${TMPDIR}"
726
elif test ! -z "$TEMPDIR" ; then
727
    TMPDIR1="${TEMPDIR}"
728
else
729
    TMPDIR1="/tmp"
730
fi
731

    
732
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
733
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
734
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
735
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
736
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
737

    
738
# default parameters
739

    
740
logging="yes"
741
logfile="config.err"
742

    
743
# installation paths
744
PREFIX="/usr/local"
745
libdir='${PREFIX}/lib'
746
shlibdir="$libdir"
747
incdir='${PREFIX}/include/ffmpeg'
748
mandir='${PREFIX}/man'
749
bindir='${PREFIX}/bin'
750

    
751
# toolchain
752
cross_prefix=""
753
cross_compile="no"
754
cc="gcc"
755
ar="ar"
756
ranlib="ranlib"
757
make="make"
758
strip="strip"
759
asmalign_pot="unknown"
760

    
761
# machine
762
arch=`uname -m`
763
cpu="generic"
764
powerpc_perf="no"
765
mmx="default"
766
cmov="no"
767
fast_cmov="no"
768
armv5te="default"
769
armv6="default"
770
iwmmxt="default"
771
altivec="default"
772
dcbzl="no"
773
mmi="default"
774
bigendian="no"
775

    
776
# OS
777
targetos=$(tolower $(uname -s))
778
beos_netserver="no"
779
os2="no"
780

    
781
# non-library system interfaces
782
audio_beos="default"
783
audio_oss="yes"
784
bktr="yes"
785
dv1394="yes"
786
v4l2="yes"
787
v4l="yes"
788

    
789
# libraries
790
amr_nb="no"
791
amr_nb_fixed="no"
792
amr_wb="no"
793
avisynth="no"
794
dc1394="no"
795
dlfcn_h="no"
796
dlopen="no"
797
liba52="no"
798
liba52bin="no"
799
libdts="no"
800
libfaac="no"
801
libfaad2="no"
802
libfaad="no"
803
libfaadbin="no"
804
libgsm="no"
805
libmp3lame="no"
806
libnut="no"
807
libogg="no"
808
libtheora="no"
809
libvorbis="no"
810
mlib="no"
811
x11grab="no"
812
x264="no"
813
xvid="no"
814
zlib="yes"
815

    
816
# configurable options
817
debug="yes"
818
dostrip="yes"
819
extra_warnings="no"
820
ffmpeg="yes"
821
ffplay="yes"
822
ffserver="yes"
823
gpl="no"
824
gprof="no"
825
ipv6="yes"
826
shared="no"
827
static="yes"
828
memalign_hack="no"
829
mpegaudio_hp="yes"
830
network="yes"
831
optimize="yes"
832
pp="no"
833
protocols="yes"
834
swscaler="no"
835
vhook="default"
836

    
837
# threading
838
beosthreads="no"
839
os2threads="no"
840
pthreads="no"
841
w32threads="no"
842
thread_type="no"
843

    
844
# build settings
845
SHFLAGS='-shared -Wl,-soname,$@'
846
VHOOKSHFLAGS='$(SHFLAGS)'
847
LIBOBJFLAGS=""
848
FFLDFLAGS=-Wl,--warn-common
849
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
850
FFSERVERLDFLAGS=-Wl,-E
851
LDCONFIG="ldconfig"
852
LIBPREF="lib"
853
LIBSUF=".a"
854
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
855
SLIBPREF="lib"
856
SLIBSUF=".so"
857
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
858
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
859
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
860
EXESUF=""
861
BUILDSUF=""
862
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
863

    
864
# find source path
865
source_path="`dirname \"$0\"`"
866
source_path_used="yes"
867
if test -z "$source_path" -o "$source_path" = "." ; then
868
    source_path="`pwd`"
869
    source_path_used="no"
870
else
871
    source_path="`cd \"$source_path\"; pwd`"
872
    echo "$source_path" | grep -q '[[:blank:]]' &&
873
      die "Out of tree builds are impossible with whitespace in source path."
874
fi
875

    
876
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
877
    show_help
878
fi
879

    
880
FFMPEG_CONFIGURATION="$@"
881

    
882
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
883
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
884
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
885
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
886
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
887

    
888
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
889

    
890
die_unknown(){
891
    echo "Unknown option \"$1\"."
892
    echo "See $0 --help for available options."
893
    exit 1
894
}
895

    
896
for opt do
897
  optval="${opt#*=}"
898
  case "$opt" in
899
  --log)
900
  ;;
901
  --log=*) logging="$optval"
902
  ;;
903
  --prefix=*) PREFIX="$optval"
904
  ;;
905
  --libdir=*) libdir="$optval"
906
  ;;
907
  --shlibdir=*) shlibdir="$optval"
908
  ;;
909
  --incdir=*) incdir="$optval"
910
  ;;
911
  --mandir=*) mandir="$optval"
912
  ;;
913
  --source-path=*) source_path="$optval"
914
  ;;
915
  --cross-prefix=*) cross_prefix="$optval"
916
  ;;
917
  --cross-compile) cross_compile="yes"
918
  ;;
919
  --target-os=*) targetos="$optval"
920
  ;;
921
  --cc=*) cc="$optval"
922
  ;;
923
  --make=*) make="$optval"
924
  ;;
925
  --extra-cflags=*) add_cflags "$optval"
926
  ;;
927
  --extra-ldflags=*) add_ldflags "$optval"
928
  ;;
929
  --extra-libs=*) add_extralibs "$optval"
930
  ;;
931
  --build-suffix=*) BUILDSUF="$optval"
932
  ;;
933
  --arch=*) arch="$optval"
934
  ;;
935
  --cpu=*) cpu="$optval"
936
  ;;
937
  --disable-opts) optimize="no"
938
  ;;
939
  --enable-small) optimize="small"
940
  ;;
941
  --enable-sunmlib) mlib="yes"
942
  ;;
943
  --disable-strip) dostrip="no"
944
  ;;
945
  --disable-encoders) disable $ENCODER_LIST
946
  ;;
947
  --disable-decoders) disable $DECODER_LIST
948
  ;;
949
  --disable-muxers) disable $MUXER_LIST
950
  ;;
951
  --disable-demuxers) disable $DEMUXER_LIST
952
  ;;
953
  --disable-parsers) disable $PARSER_LIST
954
  ;;
955
  --enable-*=*|--disable-*=*)
956
  eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
957
  case "$thing" in
958
      encoder|decoder|muxer|demuxer|parser) $action ${optval}_${thing} ;;
959
      *) die_unknown "$opt" ;;
960
  esac
961
  ;;
962
  --enable-?*|--disable-?*)
963
  eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
964
  echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
965
  $action $option
966
  ;;
967
  --help) show_help
968
  ;;
969
  *)
970
  die_unknown $opt
971
  ;;
972
  esac
973
done
974

    
975
case "$arch" in
976
  i386|i486|i586|i686|i86pc|BePC)
977
    arch="x86_32"
978
  ;;
979
  x86_64|amd64)
980
    arch="x86_32"
981
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
982
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
983
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
984
        arch="x86_64"
985
        enable fast_64bit
986
      fi
987
    fi
988
  ;;
989
  # armv4l is a subset of armv[567]*l
990
  arm|armv[4567]*l)
991
    arch="armv4l"
992
  ;;
993
  alpha)
994
    arch="alpha"
995
    enable fast_64bit
996
  ;;
997
  "Power Macintosh"|ppc|powerpc)
998
    arch="powerpc"
999
  ;;
1000
  ppc64)
1001
    arch="powerpc"
1002
    enable fast_64bit
1003
  ;;
1004
  mips|mipsel|IP*)
1005
    arch="mips"
1006
  ;;
1007
  sun4u|sparc64)
1008
    arch="sparc64"
1009
    enable fast_64bit
1010
  ;;
1011
  sparc)
1012
    arch="sparc"
1013
  ;;
1014
  sh4)
1015
    arch="sh4"
1016
  ;;
1017
  parisc)
1018
    arch="parisc"
1019
  ;;
1020
  parisc64)
1021
    arch="parisc"
1022
    enable fast_64bit
1023
  ;;
1024
  s390|s390x)
1025
    arch="s390"
1026
  ;;
1027
  m68k)
1028
    arch="m68k"
1029
  ;;
1030
  ia64)
1031
    arch="ia64"
1032
    enable fast_64bit
1033
  ;;
1034
  bfin)
1035
    arch="bfin"
1036
  ;;
1037
  *)
1038
    arch="unknown"
1039
  ;;
1040
esac
1041

    
1042
# OS specific
1043
osextralibs="-lm"
1044
case $targetos in
1045
  beos|haiku|zeta)
1046
    PREFIX="$HOME/config"
1047
    # helps building libavcodec
1048
    add_cflags "-DPIC -fomit-frame-pointer"
1049
    # 3 gcc releases known for BeOS, each with ugly bugs
1050
    gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1051
    case "$gcc_version" in
1052
      2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1053
        mmx="no"
1054
        ;;
1055
      *20010315*) echo "BeBits gcc"
1056
        add_cflags "-fno-expensive-optimizations"
1057
        ;;
1058
    esac
1059
    LDCONFIG="echo ignoring ldconfig"
1060
    SHFLAGS=-nostart
1061
    # disable Linux things
1062
    dv1394="no"
1063
    # enable BeOS things
1064
    disabled audio_beos || enable_audio_beos
1065
    # no need for libm, but the inet stuff
1066
    # Check for BONE
1067
    # XXX: actually should check for NOT net_server
1068
    if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1069
        osextralibs="-lbind -lsocket"
1070
    else
1071
        beos_netserver="yes"
1072
        osextralibs="-lnet"
1073
    fi ;;
1074
  sunos)
1075
    dv1394="no"
1076
    FFLDFLAGS=""
1077
    FFSERVERLDFLAGS=""
1078
    SHFLAGS="-shared -Wl,-h,\$@"
1079
    add_extralibs "-lsocket -lnsl"
1080
    ;;
1081
  netbsd)
1082
    dv1394="no"
1083
    add_extralibs "-lossaudio"
1084
    ;;
1085
  openbsd)
1086
    dv1394="no"
1087
    need_memalign="no"
1088
    LIBOBJFLAGS="\$(PIC)"
1089
    LDCONFIG="ldconfig -m \$(shlibdir)"
1090
    SHFLAGS='-shared'
1091
    SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
1092
    SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1093
    SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1094
    add_extralibs "-lossaudio"
1095
    ;;
1096
  freebsd)
1097
    dv1394="no"
1098
    need_memalign="no"
1099
    add_cflags "-pthread"
1100
    ;;
1101
  gnu/kfreebsd)
1102
    dv1394="no"
1103
    add_cflags "-pthread"
1104
    ;;
1105
  bsd/os)
1106
    dv1394="no"
1107
    osextralibs="-lpoll -lgnugetopt -lm"
1108
    strip="strip -d"
1109
    ;;
1110
  darwin)
1111
    dv1394="no"
1112
    need_memalign="no"
1113
    SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
1114
    VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
1115
    osextralibs=""
1116
    strip="strip -x"
1117
    FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1118
    SLIBSUF=".dylib"
1119
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
1120
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
1121
    FFSERVERLDFLAGS=-Wl,-bind_at_load
1122
    ;;
1123
  mingw32*)
1124
    targetos=mingw32
1125
    if enabled_all shared static; then
1126
        cat <<EOF
1127
You can only build one library type at once on MinGW.
1128
Specify --disable-static --enable-shared to only build
1129
the shared libraries. To build only the static libraries
1130
you do not need to pass additional options.
1131
EOF
1132
        exit 1
1133
    fi
1134
    dv1394="no"
1135
    ffserver="no"
1136
    network="no"
1137
    SLIBPREF=""
1138
    SLIBSUF=".dll"
1139
    EXESUF=".exe"
1140
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1141
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1142
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1143
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1144
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1145
    add_extralibs -lws2_32
1146
    ;;
1147
  cygwin*)
1148
    targetos=cygwin
1149
    shlibdir="$bindir"
1150
    dv1394="no"
1151
    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libswscale -L$(BUILD_ROOT)/libavutil'
1152
    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lswscale$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1153
    osextralibs=""
1154
    EXESUF=".exe"
1155
    SLIBPREF="cyg"
1156
    SLIBSUF=".dll"
1157
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1158
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1159
    SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
1160
    ;;
1161
  linux)
1162
    LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1163
    ;;
1164
  irix*)
1165
    targetos=irix
1166
    ranlib="echo ignoring ranlib"
1167
    ;;
1168
  os/2)
1169
    TMPE=$TMPE".exe"
1170
    ar="emxomfar -p128"
1171
    ranlib="echo ignoring ranlib"
1172
    strip="echo ignoring strip"
1173
    add_cflags "-Zomf"
1174
    FFLDFLAGS="-Zomf -Zstack 16384 -s"
1175
    SHFLAGS="-Zdll -Zomf"
1176
    FFSERVERLDFLAGS=""
1177
    LIBPREF=""
1178
    LIBSUF=".lib"
1179
    SLIBPREF=""
1180
    SLIBSUF=".dll"
1181
    EXESUF=".exe"
1182
    osextralibs=""
1183
    pkg_requires=""
1184
    dv1394="no"
1185
    ffserver="no"
1186
    vhook="no"
1187
    os2="yes"
1188
    ;;
1189
  *)
1190
    targetos="${targetos}-UNKNOWN"
1191
    ;;
1192
esac
1193

    
1194
add_extralibs $osextralibs
1195

    
1196
if ! disabled logging ; then
1197
    enabled logging || logfile="$logging"
1198
    echo "# $0 $@" >$logfile
1199
    set >>$logfile
1200
else
1201
    logfile=/dev/null
1202
fi
1203

    
1204
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1205
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1206

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

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

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

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

    
1244

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

    
1261
# compute MMX state
1262
if test $mmx = "default"; then
1263
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1264
        mmx="yes"
1265
    else
1266
        mmx="no"
1267
    fi
1268
fi
1269

    
1270
test -z "$need_memalign" && need_memalign="$mmx"
1271

    
1272
#Darwin CC versions
1273
needmdynamicnopic="no"
1274
if test $targetos = darwin; then
1275
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1276
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1277
    else
1278
        add_cflags "-no-cpp-precomp -pipe"
1279
        check_cflags "-force_cpusubtype_ALL"
1280
        check_cflags "-Wno-sign-compare"
1281
        disabled shared && needmdynamicnopic="yes"
1282
    fi
1283
fi
1284

    
1285
disabled optimize || add_cflags -fomit-frame-pointer
1286

    
1287
# Can only do AltiVec on PowerPC
1288
if test $altivec = "default"; then
1289
    if test $arch = "powerpc"; then
1290
        altivec="yes"
1291
    else
1292
        altivec="no"
1293
    fi
1294
fi
1295

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

    
1362
gnu_make(){
1363
    $1 --version 2>&1 | grep -q GNU
1364
}
1365

    
1366
if ! gnu_make $make; then
1367
    gnu_make gmake && make=gmake || die "GNU make not found."
1368
fi
1369

    
1370
# make sure we can execute files in $TMPDIR
1371
cat >$TMPE 2>>$logfile <<EOF
1372
#! /bin/sh
1373
EOF
1374
chmod +x $TMPE >>$logfile 2>&1
1375
if ! $TMPE >>$logfile 2>&1; then
1376
    cat <<EOF
1377
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1378
variable to another directory and make sure that $TMPDIR1 is not mounted
1379
noexec.
1380
EOF
1381
    die "Sanity test failed."
1382
fi
1383
rm $TMPE
1384

    
1385
# compiler sanity check
1386
check_exec <<EOF
1387
int main(){
1388
    return 0;
1389
}
1390
EOF
1391
if test "$?" != 0; then
1392
    echo "$cc is unable to create an executable file."
1393
    if test -z "$cross_prefix" && disabled cross_compile ; then
1394
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1395
        echo "Only do this if you know what cross compiling means."
1396
    fi
1397
    die "C compiler test failed."
1398
fi
1399

    
1400
if test $arch = "x86_32" -o $arch = "x86_64"; then
1401
    # check whether EBP is available on x86
1402
    # As 'i' is stored on the stack, this program will crash
1403
    # if the base pointer is used to access it because the
1404
    # base pointer is cleared in the inline assembly code.
1405
    check_exec_crash <<EOF && enable ebp_available
1406
    volatile int i=0;
1407
    asm volatile (
1408
        "xorl %%ebp, %%ebp"
1409
    ::: "%ebp");
1410
    return i;
1411
EOF
1412

    
1413
    # check wether EBX is available on x86
1414
    check_cc <<EOF && enable ebx_available
1415
int main(){
1416
    asm volatile ("":::"%ebx");
1417
}
1418
EOF
1419
fi
1420

    
1421
# check for assembler specific support
1422

    
1423
if test $arch = "powerpc"; then
1424
check_cc <<EOF && dcbzl=yes
1425
int main(void) {
1426
    register long zero = 0;
1427
    char data[1024];
1428
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1429
return 0;
1430
}
1431
EOF
1432
fi
1433

    
1434
# check for SIMD availability
1435

    
1436
# AltiVec flags: The FSF version of GCC differs from the Apple version
1437
if test $arch = "powerpc"; then
1438
    if enabled altivec; then
1439
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1440
            add_cflags "-faltivec"
1441
        else
1442
            add_cflags "-maltivec -mabi=altivec"
1443
        fi
1444
    fi
1445
fi
1446

    
1447
check_header altivec.h
1448

    
1449
# check if our compiler supports Motorola AltiVec C API
1450
if enabled altivec; then
1451
    if enabled altivec_h; then
1452
        inc_altivec_h="#include <altivec.h>"
1453
    else
1454
        inc_altivec_h=
1455
    fi
1456
    check_cc <<EOF || altivec=no
1457
$inc_altivec_h
1458
int main(void) {
1459
    vector signed int v1, v2, v3;
1460
    v1 = vec_add(v2,v3);
1461
    return 0;
1462
}
1463
EOF
1464
fi
1465

    
1466
# check armv5te instructions support
1467
if test $armv5te = "default" -a $arch = "armv4l"; then
1468
    armv5te=no
1469
    check_cc <<EOF && armv5te=yes
1470
        int main(void) {
1471
        __asm__ __volatile__ ("qadd r0, r0, r0");
1472
        }
1473
EOF
1474
fi
1475

    
1476
if test $armv6 = "default" -a $arch = "armv4l"; then
1477
    check_cc <<EOF && armv6=yes || armv6=no
1478
int main(void) {
1479
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1480
}
1481
EOF
1482
fi
1483

    
1484
# check iwmmxt support
1485
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1486
    iwmmxt=no
1487
    check_cc <<EOF && iwmmxt=yes
1488
        int main(void) {
1489
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1490
        }
1491
EOF
1492
fi
1493

    
1494
# mmi only available on mips
1495
if test $mmi = "default"; then
1496
    if test $arch = "mips"; then
1497
        mmi="yes"
1498
    else
1499
        mmi="no"
1500
    fi
1501
fi
1502

    
1503
# check if our compiler supports mmi
1504
enabled mmi && check_cc <<EOF || mmi="no"
1505
int main(void) {
1506
    __asm__ ("lq \$2, 0(\$2)");
1507
    return 0;
1508
}
1509
EOF
1510

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

    
1528
# ---
1529
# check availability of some header files
1530

    
1531
check_header malloc.h
1532
check_func memalign
1533

    
1534
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1535
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1536
fi
1537

    
1538
check_header byteswap.h
1539

    
1540
check_header arpa/inet.h
1541

    
1542
check_func inet_aton
1543
check_func localtime_r
1544
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1545

    
1546
# ffserver uses poll(),
1547
# if it's not found we can emulate it using select().
1548
if enabled ffserver; then
1549
    check_header sys/poll.h
1550
fi
1551

    
1552
# check for some common methods of building with pthread support
1553
# do this before the optional library checks as some of them require pthreads
1554
if enabled pthreads; then
1555
    if check_func pthread_create; then
1556
        :
1557
    elif check_func pthread_create -pthread; then
1558
        add_cflags -pthread
1559
        add_ldflags -pthread
1560
    elif check_func pthread_create -pthreads; then
1561
        add_cflags -pthreads
1562
        add_ldflags -pthreads
1563
    elif ! check_lib pthread.h pthread_create -lpthread; then
1564
        die "ERROR: can't find pthreads library"
1565
    fi
1566
fi
1567

    
1568
for thread in $THREADS_LIST; do
1569
    if enabled $thread; then
1570
        if ! disabled thread_type ; then
1571
            die "ERROR: Only one thread type must be selected."
1572
        else
1573
            thread_type="$thread"
1574
        fi
1575
    fi
1576
done
1577

    
1578
enabled_any amr_nb amr_nb_fixed amr_wb && enable amr
1579
enabled_all amr_nb amr_nb_fixed &&
1580
    die "Only one of amr_nb and amr_nb_fixed may be enabled."
1581

    
1582
# these are off by default, so fail if requested and not available
1583
enabled amr_nb     && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1584
enabled amr_wb     && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1585
enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1586
enabled libdts     && require libdts dts.h dts_init -ldts -lm
1587
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1588
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1589
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1590
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1591
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1592
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1593
enabled xvid       && require XviD xvid.h xvid_global -lxvidcore
1594
enabled x264       && require x264 x264.h x264_encoder_open -lx264
1595
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1596
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1597
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1598
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1599
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1600

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

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

    
1615
# dlopen/dlfcn.h probing
1616

    
1617
check_header dlfcn.h
1618

    
1619
if check_func dlopen; then
1620
    ldl=
1621
elif check_func dlopen -ldl; then
1622
    ldl=-ldl
1623
fi
1624

    
1625
test "$vhook" = "default" && vhook="$dlopen"
1626

    
1627
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1628

    
1629
if test "$targetos" = cygwin && enabled static ; then
1630
    vhook="no"
1631
    echo
1632
    echo "At the moment vhooks don't work on Cygwin static builds."
1633
    echo "Patches welcome."
1634
    echo
1635
fi
1636

    
1637
if enabled vhook; then
1638
    check_ldflags -rdynamic
1639
    check_ldflags -export-dynamic
1640
fi
1641

    
1642
enabled audio_beos && add_extralibs "-lmedia -lbe"
1643

    
1644
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1645
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1646

    
1647
##########################################
1648
# SDL check
1649

    
1650
sdl_too_old=no
1651
sdl=no
1652
SDL_CONFIG="${cross_prefix}sdl-config"
1653
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1654
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1655
    temp_cflags $sdl_cflags
1656
    temp_extralibs `"${SDL_CONFIG}" --libs`
1657
    if check_lib SDL.h SDL_Init; then
1658
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1659
        if test "$_sdlversion" -lt 121 ; then
1660
            sdl_too_old=yes
1661
        else
1662
            sdl=yes
1663
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1664
#include <SDL.h>
1665
int main(void){
1666
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1667
    int w = vi->current_w;
1668
    return 0;
1669
}
1670
EOF
1671
        fi
1672
    fi
1673
    restore_flags
1674
fi
1675

    
1676
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1677

    
1678
##########################################
1679
# IPv6 check
1680

    
1681
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1682
#include <sys/types.h>
1683
#include <sys/socket.h>
1684
#include <netinet/in.h>
1685
#include <netdb.h>
1686
int main( void ) {
1687
  struct sockaddr_storage saddr;
1688
  struct ipv6_mreq mreq6;
1689
  getaddrinfo(0,0,0,0);
1690
  getnameinfo(0,0,0,0,0,0,0);
1691
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1692
}
1693
EOF
1694

    
1695
enabled v4l  && check_header linux/videodev.h  || disable v4l
1696
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1697

    
1698
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1699
if enabled bktr; then
1700
    { check_header dev/bktr/ioctl_meteor.h &&
1701
      check_header dev/bktr/ioctl_bt848.h; } ||
1702
    { check_header machine/ioctl_meteor.h &&
1703
      check_header machine/ioctl_bt848.h; } ||
1704
    { check_header dev/video/meteor/ioctl_meteor.h &&
1705
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1706
    check_header dev/ic/bt8xx.h ||
1707
    disable bktr
1708
fi
1709

    
1710
enabled audio_oss &&
1711
    check_header sys/soundcard.h ||
1712
    check_header soundcard.h ||
1713
    disable audio_oss
1714

    
1715
# Deal with the x11 frame grabber
1716
enabled x11grab                         &&
1717
enabled gpl                             &&
1718
enabled x11_grab_device_demuxer         &&
1719
check_header X11/Xlib.h                 &&
1720
check_header X11/extensions/XShm.h      &&
1721
check_func XOpenDisplay -lX11           &&
1722
check_func XShmCreateImage -lX11 -lXext &&
1723
add_extralibs -lX11 -lXext              ||
1724
disable x11_grab_device_demuxer
1725

    
1726
enabled debug && add_cflags -g
1727

    
1728
# add some useful compiler flags if supported
1729
check_cflags -Wdeclaration-after-statement
1730
check_cflags -Wall
1731
check_cflags -Wno-switch
1732
check_cflags -Wdisabled-optimization
1733
check_cflags -Wpointer-arith
1734
check_cflags -Wredundant-decls
1735
check_cflags -Wno-pointer-sign
1736
enabled extra_warnings && check_cflags -Winline
1737

    
1738
# add some linker flags
1739
check_ldflags $LDLATEFLAGS
1740

    
1741
# not all compilers support -Os
1742
test "$optimize" = "small" && check_cflags -Os
1743

    
1744
if enabled optimize; then
1745
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1746
        add_cflags  "-O5"
1747
        add_ldflags "-O5"
1748
    else
1749
        add_cflags "-O3"
1750
    fi
1751
fi
1752

    
1753
# PIC flags for shared library objects where they are needed
1754
if enabled shared; then
1755
    # LIBOBJFLAGS may have already been set in the OS configuration
1756
    if test -z "$LIBOBJFLAGS" ; then
1757
        case "$arch" in
1758
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1759
        esac
1760
    fi
1761
fi
1762

    
1763
if enabled gprof; then
1764
    add_cflags  "-p"
1765
    add_ldflags "-p"
1766
fi
1767

    
1768
VHOOKCFLAGS="-fPIC $CFLAGS"
1769
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1770

    
1771
# find if .align arg is power-of-two or not
1772
if test $asmalign_pot = "unknown"; then
1773
    asmalign_pot="no"
1774
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1775
fi
1776

    
1777
enabled_any $ENCODER_LIST && enable encoders
1778
enabled_any $DECODER_LIST && enable decoders
1779
enabled_any $MUXER_LIST   && enable muxers
1780
enabled_any $DEMUXER_LIST && enable demuxers
1781

    
1782
enabled_any $THREADS_LIST && enable threads
1783

    
1784
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1785
    $DEMUXER_LIST $MUXER_LIST
1786

    
1787
enabled libogg    && append pkg_requires "ogg >= 1.1"
1788
enabled libtheora && append pkg_requires "theora"
1789
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1790
enabled dc1394    && append pkg_requires "libraw1394"
1791

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

    
1867
echo "Creating config.mak and config.h..."
1868

    
1869
echo "# Automatically generated by configure - do not modify!" > config.mak
1870
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1871
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1872

    
1873
echo "PREFIX=$PREFIX" >> config.mak
1874
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1875
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1876
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1877
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1878
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1879
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1880
echo "MAKE=$make" >> config.mak
1881
echo "CC=$cc" >> config.mak
1882
echo "AR=$ar" >> config.mak
1883
echo "RANLIB=$ranlib" >> config.mak
1884
if enabled dostrip; then
1885
    echo "STRIP=$strip" >> config.mak
1886
else
1887
    echo "STRIP=echo ignoring strip" >> config.mak
1888
fi
1889

    
1890
echo "OPTFLAGS=$CFLAGS" >> config.mak
1891
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1892
echo "LDFLAGS=$LDFLAGS" >> config.mak
1893
echo "LDCONFIG=$LDCONFIG" >> config.mak
1894
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1895
echo "SHFLAGS=$SHFLAGS" >> config.mak
1896
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1897
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1898
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1899
echo "BUILD_STATIC=$static" >> config.mak
1900
echo "BUILDSUF=$BUILDSUF" >> config.mak
1901
echo "LIBPREF=$LIBPREF" >> config.mak
1902
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1903
if enabled static; then
1904
  echo "LIB=$LIB" >> config.mak
1905
else # Some Make complain if this variable does not exist.
1906
  echo "LIB=" >> config.mak
1907
fi
1908
echo "SLIBPREF=$SLIBPREF" >> config.mak
1909
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1910
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1911

    
1912
ucarch=`toupper $arch`
1913
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1914
echo "#define ARCH_${ucarch} 1" >> $TMPH
1915

    
1916
# special cases
1917
case "$arch" in
1918
    x86_32|x86_64)
1919
        echo "TARGET_ARCH_X86=yes" >> config.mak
1920
        echo "#define ARCH_X86 1" >> $TMPH
1921
        ;;
1922
    powerpc)
1923
        if test "$POWERPCMODE" = "64bits"; then
1924
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1925
        fi
1926
        ;;
1927
    sparc64)
1928
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
1929
        echo "#define ARCH_SPARC 1" >> $TMPH
1930
        ;;
1931
esac
1932

    
1933
if enabled bigendian; then
1934
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1935
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1936
fi
1937
if enabled mmx; then
1938
  echo "#define __CPU__ 586" >> $TMPH
1939
fi
1940

    
1941
if enabled sdl; then
1942
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1943
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1944
fi
1945
if enabled texi2html; then
1946
  echo "BUILD_DOC=yes" >> config.mak
1947
fi
1948

    
1949
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1950
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1951
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1952
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1953
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1954

    
1955

    
1956

    
1957
if enabled shared; then
1958
  echo "BUILD_SHARED=yes" >> config.mak
1959
  echo "PIC=-fPIC -DPIC" >> config.mak
1960
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1961
  echo "SPPVERSION=$pp_version" >> config.mak
1962
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1963
  echo "LAVCVERSION=$lavc_version" >> config.mak
1964
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1965
  echo "LAVFVERSION=$lavf_version" >> config.mak
1966
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1967
  echo "LAVUVERSION=$lavu_version" >> config.mak
1968
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1969
  echo "SWSVERSION=$sws_version" >> config.mak
1970
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1971
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1972
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1973
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1974
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1975
fi
1976
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1977
echo "EXTRALIBS=$extralibs" >> config.mak
1978

    
1979
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1980
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1981
print_config TARGET_ $TMPH config.mak $TARGET_LIST
1982

    
1983
if test "$targetos" = darwin; then
1984
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1985
fi
1986

    
1987
echo "#define restrict $_restrict" >> $TMPH
1988

    
1989
if test "$optimize" = "small"; then
1990
  echo "#define always_inline"  >> $TMPH
1991
  echo "#define CONFIG_SMALL 1" >> $TMPH
1992
fi
1993

    
1994
echo "SRC_PATH=\"$source_path\"" >> config.mak
1995
echo "SRC_PATH_BARE=$source_path" >> config.mak
1996
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1997

    
1998
# Apparently it's not possible to portably echo a backslash.
1999
if enabled asmalign_pot; then
2000
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2001
else
2002
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2003
fi
2004

    
2005

    
2006
for part in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2007
    ucname="`toupper $part`"
2008
    config_name="CONFIG_$ucname"
2009
    enabled_name="ENABLE_$ucname"
2010
    if enabled $part; then
2011
        echo "#define $config_name 1" >> $TMPH
2012
        echo "#define $enabled_name 1" >> $TMPH
2013
        echo "$config_name=yes" >> config.mak
2014
    else
2015
        echo "#define $enabled_name 0" >> $TMPH
2016
    fi
2017
done
2018

    
2019
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2020
if ! cmp -s $TMPH config.h; then
2021
        mv -f $TMPH config.h
2022
else
2023
        echo "config.h is unchanged"
2024
fi
2025

    
2026
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2027

    
2028
# build tree in object directory if source path is different from current one
2029
if enabled source_path_used; then
2030
    DIRS="\
2031
         doc \
2032
         libavformat \
2033
         libavcodec \
2034
         libavcodec/alpha \
2035
         libavcodec/armv4l \
2036
         libavcodec/bfin \
2037
         libavcodec/i386 \
2038
         libavcodec/sparc \
2039
         libavcodec/mlib \
2040
         libavcodec/ppc \
2041
         libavcodec/amr \
2042
         libpostproc \
2043
         libavutil \
2044
         libswscale \
2045
         tests \
2046
         vhook \
2047
         "
2048
    FILES="\
2049
          Makefile \
2050
          common.mak \
2051
          libavformat/Makefile \
2052
          libavcodec/Makefile \
2053
          libpostproc/Makefile \
2054
          libavutil/Makefile \
2055
          libswscale/Makefile \
2056
          tests/Makefile \
2057
          vhook/Makefile \
2058
          doc/Makefile \
2059
          doc/texi2pod.pl \
2060
          "
2061
    for dir in $DIRS ; do
2062
            mkdir -p $dir
2063
    done
2064
    for f in $FILES ; do
2065
        ln -sf "$source_path/$f" $f
2066
    done
2067
fi
2068

    
2069

    
2070
# build pkg-config files
2071
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2072

    
2073
pkgconfig_generate(){
2074
name=$1
2075
comment=$2
2076
version=$3
2077
libs=$4
2078
requires=$5
2079
include=$6
2080
cat <<EOF >$name.pc
2081
prefix=$PREFIX
2082
exec_prefix=\${prefix}
2083
libdir=\${exec_prefix}/lib
2084
includedir=\${prefix}/include
2085

    
2086
Name: $name
2087
Description: $comment
2088
Version: $version
2089
Requires: $requires
2090
Conflicts:
2091
Libs: -L\${libdir} $libs
2092
Cflags: -I\${includedir} -I\${includedir}/$include
2093
EOF
2094
}
2095

    
2096
pkgconfig_generate_uninstalled(){
2097
name=$1
2098
shortname=${name#lib}
2099
comment=$2
2100
version=$3
2101
libs=$4
2102
requires=$5
2103
cat <<EOF >$name-uninstalled.pc
2104
prefix=
2105
exec_prefix=
2106
libdir=\${pcfiledir}/$name
2107
includedir=\${pcfiledir}/$name
2108

    
2109
Name: $name
2110
Description: $comment
2111
Version: $version
2112
Requires: $requires
2113
Conflicts:
2114
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2115
Cflags: -I\${includedir}
2116
EOF
2117
}
2118

    
2119
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2120
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2121

    
2122
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2123
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2124

    
2125
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2126
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2127

    
2128
if enabled pp; then
2129
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2130
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2131
fi
2132

    
2133
if enabled swscaler; then
2134
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2135
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2136
else
2137
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2138
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2139
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2140
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2141
fi