Statistics
| Branch: | Revision:

ffmpeg / configure @ 23aee960

History | View | Annotate | Download (56.9 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-wb          enable amr-wb floating point audio codec"
103
  echo ""
104
  echo "Advanced options (experts only):"
105
  echo "  --source-path=PATH       path to source code [$source_path]"
106
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
107
  echo "  --cross-compile          assume a cross-compiler is used"
108
  echo "  --target-os=OS           compiler targets OS [$targetos]"
109
  echo "  --cc=CC                  use C compiler CC [$cc]"
110
  echo "  --make=MAKE              use specified make [$make]"
111
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
112
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
113
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
114
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
115
  echo "  --arch=ARCH              select architecture  [$arch]"
116
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
117
  echo "                           instruction selection, may crash on older CPUs)"
118
  echo "  --enable-powerpc-perf    enable performance report on PPC"
119
  echo "                           (requires enabling PMC)"
120
  echo "  --disable-mmx            disable MMX usage"
121
  echo "  --disable-armv5te        disable armv5te usage"
122
  echo "  --disable-armv6          disable armv6 usage"
123
  echo "  --disable-iwmmxt         disable iwmmxt usage"
124
  echo "  --disable-altivec        disable AltiVec usage"
125
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
126
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
127
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
128
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
129
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
130
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
131
  echo "  --disable-network        disable network support [default=no]"
132
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
133
  echo "  --disable-zlib           disable zlib [default=no]"
134
  echo "  --disable-vhook          disable video hooking support"
135
  echo "  --disable-debug          disable debugging symbols"
136
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
137
  echo "                           MPEG audio decoding [default=no]"
138
  echo "  --disable-ffmpeg         disable ffmpeg build"
139
  echo "  --disable-ffserver       disable ffserver build"
140
  echo "  --disable-ffplay         disable ffplay build"
141
  echo "  --enable-small           optimize for size instead of speed"
142
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
143
  echo "  --disable-encoder=NAME   disables encoder NAME"
144
  echo "  --enable-encoder=NAME    enables encoder NAME"
145
  echo "  --disable-decoder=NAME   disables decoder NAME"
146
  echo "  --enable-decoder=NAME    enables decoder NAME"
147
  echo "  --disable-encoders       disables all encoders"
148
  echo "  --disable-decoders       disables all decoders"
149
  echo "  --disable-muxer=NAME     disables muxer NAME"
150
  echo "  --enable-muxer=NAME      enables muxer NAME"
151
  echo "  --disable-muxers         disables all muxers"
152
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
153
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
154
  echo "  --disable-demuxers       disables all demuxers"
155
  echo "  --enable-parser=NAME     enables parser NAME"
156
  echo "  --disable-parser=NAME    disables parser NAME"
157
  echo "  --disable-parsers        disables all parsers"
158
  echo "  --enable-protocol=NAME   enables protocol NAME"
159
  echo "  --disable-protocol=NAME  disables protocol NAME"
160
  echo "  --disable-protocols      disables all protocols"
161
  echo
162
  echo "Developer options (useful when working on FFmpeg itself):"
163
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
164
  echo "  --disable-opts           disable compiler optimizations"
165
  echo "  --enable-extra-warnings  enable more compiler warnings"
166
  echo "  --disable-strip          disable stripping of executables and shared libraries"
167
  echo ""
168
  echo "NOTE: Object files are built at the place where configure is launched."
169
  exit 1
170
}
171

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
553
CONFIG_LIST='
554
    encoders
555
    decoders
556
    parsers
557
    muxers
558
    demuxers
559
    amr
560
    amr_nb
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
    fast_unaligned
632
    freetype2
633
    imlib2
634
    inet_aton
635
    iwmmxt
636
    localtime_r
637
    lrintf
638
    machine_ioctl_bt848_h
639
    machine_ioctl_meteor_h
640
    malloc_h
641
    memalign
642
    mlib
643
    mmi
644
    mmx
645
    os2
646
    sdl
647
    sdl_video_size
648
    soundcard_h
649
    sys_poll_h
650
    sys_soundcard_h
651
    threads
652
"
653

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

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

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

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

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

    
720
http_protocol_deps="network"
721
rtp_protocol_deps="udp_protocol"
722
tcp_protocol_deps="network"
723
udp_protocol_deps="network"
724

    
725
ffplay_deps="sdl"
726
ffserver_deps="muxers rtp_protocol"
727

    
728
# set temporary file name
729
if test ! -z "$TMPDIR" ; then
730
    TMPDIR1="${TMPDIR}"
731
elif test ! -z "$TEMPDIR" ; then
732
    TMPDIR1="${TEMPDIR}"
733
else
734
    TMPDIR1="/tmp"
735
fi
736

    
737
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
738
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
739
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
740
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
741
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
742

    
743
# default parameters
744

    
745
logging="yes"
746
logfile="config.err"
747

    
748
# installation paths
749
PREFIX="/usr/local"
750
libdir='${PREFIX}/lib'
751
shlibdir="$libdir"
752
incdir='${PREFIX}/include/ffmpeg'
753
mandir='${PREFIX}/man'
754
bindir='${PREFIX}/bin'
755

    
756
# toolchain
757
cross_prefix=""
758
cross_compile="no"
759
cc="gcc"
760
ar="ar"
761
ranlib="ranlib"
762
make="make"
763
strip="strip"
764
asmalign_pot="unknown"
765

    
766
# machine
767
arch=`uname -m`
768
cpu="generic"
769
powerpc_perf="no"
770
mmx="default"
771
cmov="no"
772
fast_cmov="no"
773
fast_unaligned="no"
774
armv5te="default"
775
armv6="default"
776
iwmmxt="default"
777
altivec="default"
778
dcbzl="no"
779
mmi="default"
780
bigendian="no"
781

    
782
# OS
783
targetos=$(tolower $(uname -s))
784
beos_netserver="no"
785
os2="no"
786

    
787
# non-library system interfaces
788
audio_beos="default"
789
audio_oss="yes"
790
bktr="yes"
791
dv1394="yes"
792
v4l2="yes"
793
v4l="yes"
794

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

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

    
842
# threading
843
beosthreads="no"
844
os2threads="no"
845
pthreads="no"
846
w32threads="no"
847
thread_type="no"
848

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

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

    
881
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
882
    show_help
883
fi
884

    
885
FFMPEG_CONFIGURATION="$@"
886

    
887
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
888
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
889
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
890
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
891
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
892
PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
893

    
894
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST
895

    
896
die_unknown(){
897
    echo "Unknown option \"$1\"."
898
    echo "See $0 --help for available options."
899
    exit 1
900
}
901

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

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

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

    
1204
add_extralibs $osextralibs
1205

    
1206
if ! disabled logging ; then
1207
    enabled logging || logfile="$logging"
1208
    echo "# $0 $@" >$logfile
1209
    set >>$logfile
1210
else
1211
    logfile=/dev/null
1212
fi
1213

    
1214
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1215
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1216

    
1217
test -n "$cross_prefix" && cross_compile=yes
1218
cc="${cross_prefix}${cc}"
1219
ar="${cross_prefix}${ar}"
1220
ranlib="${cross_prefix}${ranlib}"
1221
strip="${cross_prefix}${strip}"
1222

    
1223
# we need to build at least one lib type
1224
if disabled_all static shared; then
1225
    cat <<EOF
1226
At least one library type must be built.
1227
Specify --enable-static to build the static libraries or --enable-shared to
1228
build the shared libraries as well. To only build the shared libraries specify
1229
--disable-static in addition to --enable-shared.
1230
EOF
1231
    exit 1;
1232
fi
1233

    
1234
if disabled libogg; then
1235
    enabled libtheora && die "libogg must be enabled to enable libtheora."
1236
    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1237
fi
1238

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

    
1254

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

    
1271
# compute MMX state
1272
if test $mmx = "default"; then
1273
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1274
        mmx="yes"
1275
    else
1276
        mmx="no"
1277
    fi
1278
fi
1279

    
1280
test -z "$need_memalign" && need_memalign="$mmx"
1281

    
1282
#Darwin CC versions
1283
needmdynamicnopic="no"
1284
if test $targetos = darwin; then
1285
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1286
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1287
    else
1288
        add_cflags "-no-cpp-precomp -pipe"
1289
        check_cflags "-force_cpusubtype_ALL"
1290
        check_cflags "-Wno-sign-compare"
1291
        disabled shared && needmdynamicnopic="yes"
1292
    fi
1293
fi
1294
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1295

    
1296
disabled optimize || add_cflags -fomit-frame-pointer
1297

    
1298
# Can only do AltiVec on PowerPC
1299
if test $altivec = "default"; then
1300
    if test $arch = "powerpc"; then
1301
        altivec="yes"
1302
    else
1303
        altivec="no"
1304
    fi
1305
fi
1306

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

    
1373
gnu_make(){
1374
    $1 --version 2>&1 | grep -q GNU
1375
}
1376

    
1377
if ! gnu_make $make; then
1378
    gnu_make gmake && make=gmake || die "GNU make not found."
1379
fi
1380

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

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

    
1411
if test $arch = "x86_32" -o $arch = "x86_64"; then
1412
    # check whether EBP is available on x86
1413
    # As 'i' is stored on the stack, this program will crash
1414
    # if the base pointer is used to access it because the
1415
    # base pointer is cleared in the inline assembly code.
1416
    check_exec_crash <<EOF && enable ebp_available
1417
    volatile int i=0;
1418
    asm volatile (
1419
        "xorl %%ebp, %%ebp"
1420
    ::: "%ebp");
1421
    return i;
1422
EOF
1423

    
1424
    # check wether EBX is available on x86
1425
    check_cc <<EOF && enable ebx_available
1426
int main(){
1427
    asm volatile ("":::"%ebx");
1428
}
1429
EOF
1430
fi
1431

    
1432
# check for assembler specific support
1433

    
1434
if test $arch = "powerpc"; then
1435
check_cc <<EOF && dcbzl=yes
1436
int main(void) {
1437
    register long zero = 0;
1438
    char data[1024];
1439
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1440
return 0;
1441
}
1442
EOF
1443
fi
1444

    
1445
# check for SIMD availability
1446

    
1447
# AltiVec flags: The FSF version of GCC differs from the Apple version
1448
if test $arch = "powerpc"; then
1449
    if enabled altivec; then
1450
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1451
            add_cflags "-faltivec"
1452
        else
1453
            add_cflags "-maltivec -mabi=altivec"
1454
        fi
1455
    fi
1456
fi
1457

    
1458
check_header altivec.h
1459

    
1460
# check if our compiler supports Motorola AltiVec C API
1461
if enabled altivec; then
1462
    if enabled altivec_h; then
1463
        inc_altivec_h="#include <altivec.h>"
1464
    else
1465
        inc_altivec_h=
1466
    fi
1467
    check_cc <<EOF || altivec=no
1468
$inc_altivec_h
1469
int main(void) {
1470
    vector signed int v1, v2, v3;
1471
    v1 = vec_add(v2,v3);
1472
    return 0;
1473
}
1474
EOF
1475
fi
1476

    
1477
# check armv5te instructions support
1478
if test $armv5te = "default" -a $arch = "armv4l"; then
1479
    armv5te=no
1480
    check_cc <<EOF && armv5te=yes
1481
        int main(void) {
1482
        __asm__ __volatile__ ("qadd r0, r0, r0");
1483
        }
1484
EOF
1485
fi
1486

    
1487
if test $armv6 = "default" -a $arch = "armv4l"; then
1488
    check_cc <<EOF && armv6=yes || armv6=no
1489
int main(void) {
1490
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1491
}
1492
EOF
1493
fi
1494

    
1495
# check iwmmxt support
1496
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1497
    iwmmxt=no
1498
    check_cc <<EOF && iwmmxt=yes
1499
        int main(void) {
1500
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1501
        }
1502
EOF
1503
fi
1504

    
1505
# mmi only available on mips
1506
if test $mmi = "default"; then
1507
    if test $arch = "mips"; then
1508
        mmi="yes"
1509
    else
1510
        mmi="no"
1511
    fi
1512
fi
1513

    
1514
# check if our compiler supports mmi
1515
enabled mmi && check_cc <<EOF || mmi="no"
1516
int main(void) {
1517
    __asm__ ("lq \$2, 0(\$2)");
1518
    return 0;
1519
}
1520
EOF
1521

    
1522
# ---
1523
# big/little-endian test
1524
if disabled cross_compile; then
1525
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1526
#include <inttypes.h>
1527
int main(int argc, char ** argv){
1528
        volatile uint32_t i=0x01234567;
1529
        return (*((uint8_t*)(&i))) == 0x67;
1530
}
1531
EOF
1532
else
1533
    # programs cannot be launched if cross compiling, so make a static guess
1534
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1535
        bigendian="yes"
1536
    fi
1537
fi
1538

    
1539
# ---
1540
# check availability of some header files
1541

    
1542
check_header malloc.h
1543
check_func memalign
1544

    
1545
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1546
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1547
fi
1548

    
1549
check_header byteswap.h
1550

    
1551
check_header arpa/inet.h
1552

    
1553
check_func inet_aton
1554
check_func localtime_r
1555
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1556

    
1557
# ffserver uses poll(),
1558
# if it's not found we can emulate it using select().
1559
if enabled ffserver; then
1560
    check_header sys/poll.h
1561
fi
1562

    
1563
# check for some common methods of building with pthread support
1564
# do this before the optional library checks as some of them require pthreads
1565
if enabled pthreads; then
1566
    if check_func pthread_create; then
1567
        :
1568
    elif check_func pthread_create -pthread; then
1569
        add_cflags -pthread
1570
        add_ldflags -pthread
1571
    elif check_func pthread_create -pthreads; then
1572
        add_cflags -pthreads
1573
        add_ldflags -pthreads
1574
    elif ! check_lib pthread.h pthread_create -lpthread; then
1575
        die "ERROR: can't find pthreads library"
1576
    fi
1577
fi
1578

    
1579
for thread in $THREADS_LIST; do
1580
    if enabled $thread; then
1581
        if ! disabled thread_type ; then
1582
            die "ERROR: Only one thread type must be selected."
1583
        else
1584
            thread_type="$thread"
1585
        fi
1586
    fi
1587
done
1588

    
1589
enabled_any amr_nb amr_wb && enable amr
1590

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

    
1610
# test for lrintf in math.h
1611
check_exec <<EOF && lrintf=yes || lrintf=no
1612
#define _ISOC9X_SOURCE  1
1613
#include <math.h>
1614
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1615
EOF
1616

    
1617
_restrict=
1618
for restrict_keyword in restrict __restrict__ __restrict; do
1619
    check_cc <<EOF && _restrict=$restrict_keyword && break
1620
void foo(char * $restrict_keyword p);
1621
EOF
1622
done
1623

    
1624
# dlopen/dlfcn.h probing
1625

    
1626
check_header dlfcn.h
1627

    
1628
if check_func dlopen; then
1629
    ldl=
1630
elif check_func dlopen -ldl; then
1631
    ldl=-ldl
1632
fi
1633

    
1634
test "$vhook" = "default" && vhook="$dlopen"
1635

    
1636
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1637

    
1638
if test "$targetos" = cygwin && enabled static ; then
1639
    vhook="no"
1640
    echo
1641
    echo "At the moment vhooks don't work on Cygwin static builds."
1642
    echo "Patches welcome."
1643
    echo
1644
fi
1645

    
1646
if enabled vhook; then
1647
    check_ldflags -rdynamic
1648
    check_ldflags -export-dynamic
1649
fi
1650

    
1651
enabled audio_beos && add_extralibs "-lmedia -lbe"
1652

    
1653
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1654
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1655

    
1656
##########################################
1657
# SDL check
1658

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

    
1685
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1686

    
1687
##########################################
1688
# IPv6 check
1689

    
1690
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1691
#include <sys/types.h>
1692
#include <sys/socket.h>
1693
#include <netinet/in.h>
1694
#include <netdb.h>
1695
int main( void ) {
1696
  struct sockaddr_storage saddr;
1697
  struct ipv6_mreq mreq6;
1698
  getaddrinfo(0,0,0,0);
1699
  getnameinfo(0,0,0,0,0,0,0);
1700
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1701
}
1702
EOF
1703

    
1704
enabled v4l  && check_header linux/videodev.h  || disable v4l
1705
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1706

    
1707
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1708
if enabled bktr; then
1709
    { check_header dev/bktr/ioctl_meteor.h &&
1710
      check_header dev/bktr/ioctl_bt848.h; } ||
1711
    { check_header machine/ioctl_meteor.h &&
1712
      check_header machine/ioctl_bt848.h; } ||
1713
    { check_header dev/video/meteor/ioctl_meteor.h &&
1714
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1715
    check_header dev/ic/bt8xx.h ||
1716
    disable bktr
1717
fi
1718

    
1719
enabled audio_oss &&
1720
    check_header sys/soundcard.h ||
1721
    check_header soundcard.h ||
1722
    disable audio_oss
1723

    
1724
# Deal with the x11 frame grabber
1725
enabled x11grab                         &&
1726
enabled gpl                             &&
1727
enabled x11_grab_device_demuxer         &&
1728
check_header X11/Xlib.h                 &&
1729
check_header X11/extensions/XShm.h      &&
1730
check_func XOpenDisplay -lX11           &&
1731
check_func XShmCreateImage -lX11 -lXext &&
1732
add_extralibs -lX11 -lXext              ||
1733
disable x11_grab_device_demuxer
1734

    
1735
enabled debug && add_cflags -g
1736

    
1737
# add some useful compiler flags if supported
1738
check_cflags -Wdeclaration-after-statement
1739
check_cflags -Wall
1740
check_cflags -Wno-switch
1741
check_cflags -Wdisabled-optimization
1742
check_cflags -Wpointer-arith
1743
check_cflags -Wredundant-decls
1744
check_cflags -Wno-pointer-sign
1745
enabled extra_warnings && check_cflags -Winline
1746

    
1747
# add some linker flags
1748
check_ldflags $LDLATEFLAGS
1749

    
1750
# not all compilers support -Os
1751
test "$optimize" = "small" && check_cflags -Os
1752

    
1753
if enabled optimize; then
1754
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1755
        add_cflags  "-O5"
1756
        add_ldflags "-O5"
1757
    else
1758
        add_cflags "-O3"
1759
    fi
1760
fi
1761

    
1762
# PIC flags for shared library objects where they are needed
1763
if enabled shared; then
1764
    # LIBOBJFLAGS may have already been set in the OS configuration
1765
    if test -z "$LIBOBJFLAGS" ; then
1766
        case "$arch" in
1767
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1768
        esac
1769
    fi
1770
fi
1771

    
1772
if enabled gprof; then
1773
    add_cflags  "-p"
1774
    add_ldflags "-p"
1775
fi
1776

    
1777
VHOOKCFLAGS="-fPIC `echo $CFLAGS | sed s/-mdynamic-no-pic//`"
1778

    
1779
# find if .align arg is power-of-two or not
1780
if test $asmalign_pot = "unknown"; then
1781
    asmalign_pot="no"
1782
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1783
fi
1784

    
1785
enabled_any $ENCODER_LIST  && enable encoders
1786
enabled_any $DECODER_LIST  && enable decoders
1787
enabled_any $MUXER_LIST    && enable muxers
1788
enabled_any $DEMUXER_LIST  && enable demuxers
1789
enabled_any $PROTOCOL_LIST && enable protocols
1790

    
1791
enabled_any $THREADS_LIST  && enable threads
1792

    
1793
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1794
    $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1795

    
1796
enabled libogg    && append pkg_requires "ogg >= 1.1"
1797
enabled libtheora && append pkg_requires "theora"
1798
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1799
enabled dc1394    && append pkg_requires "libraw1394"
1800

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

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

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

    
1941
if enabled bigendian; then
1942
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1943
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1944
fi
1945
if enabled mmx; then
1946
  echo "#define __CPU__ 586" >> $TMPH
1947
fi
1948

    
1949
if enabled sdl; then
1950
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1951
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1952
fi
1953
if enabled texi2html; then
1954
  echo "BUILD_DOC=yes" >> config.mak
1955
fi
1956

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

    
1963

    
1964

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

    
1987
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1988
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1989
print_config TARGET_ $TMPH config.mak $TARGET_LIST
1990

    
1991
if test "$targetos" = darwin; then
1992
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1993
fi
1994

    
1995
echo "#define restrict $_restrict" >> $TMPH
1996

    
1997
if test "$optimize" = "small"; then
1998
  echo "#define always_inline"  >> $TMPH
1999
  echo "#define CONFIG_SMALL 1" >> $TMPH
2000
fi
2001

    
2002
echo "SRC_PATH=\"$source_path\"" >> config.mak
2003
echo "SRC_PATH_BARE=$source_path" >> config.mak
2004
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2005

    
2006
# Apparently it's not possible to portably echo a backslash.
2007
if enabled asmalign_pot; then
2008
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2009
else
2010
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2011
fi
2012

    
2013

    
2014
for part in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST; do
2015
    ucname="`toupper $part`"
2016
    config_name="CONFIG_$ucname"
2017
    enabled_name="ENABLE_$ucname"
2018
    if enabled $part; then
2019
        echo "#define $config_name 1" >> $TMPH
2020
        echo "#define $enabled_name 1" >> $TMPH
2021
        echo "$config_name=yes" >> config.mak
2022
    else
2023
        echo "#define $enabled_name 0" >> $TMPH
2024
    fi
2025
done
2026

    
2027
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2028
if ! cmp -s $TMPH config.h; then
2029
        mv -f $TMPH config.h
2030
else
2031
        echo "config.h is unchanged"
2032
fi
2033

    
2034
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2035

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

    
2076

    
2077
# build pkg-config files
2078
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2079

    
2080
pkgconfig_generate(){
2081
name=$1
2082
comment=$2
2083
version=$3
2084
libs=$4
2085
requires=$5
2086
include=$6
2087
cat <<EOF >$name.pc
2088
prefix=$PREFIX
2089
exec_prefix=\${prefix}
2090
libdir=\${exec_prefix}/lib
2091
includedir=\${prefix}/include
2092

    
2093
Name: $name
2094
Description: $comment
2095
Version: $version
2096
Requires: $requires
2097
Conflicts:
2098
Libs: -L\${libdir} $libs
2099
Cflags: -I\${includedir} -I\${includedir}/$include
2100
EOF
2101
}
2102

    
2103
pkgconfig_generate_uninstalled(){
2104
name=$1
2105
shortname=${name#lib}
2106
comment=$2
2107
version=$3
2108
libs=$4
2109
requires=$5
2110
cat <<EOF >$name-uninstalled.pc
2111
prefix=
2112
exec_prefix=
2113
libdir=\${pcfiledir}/$name
2114
includedir=\${pcfiledir}/$name
2115

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

    
2126
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2127
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2128

    
2129
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2130
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2131

    
2132
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2133
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2134

    
2135
if enabled pp; then
2136
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2137
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2138
fi
2139

    
2140
if enabled swscaler; then
2141
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2142
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2143
else
2144
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2145
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2146
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2147
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2148
fi