Statistics
| Branch: | Revision:

ffmpeg / configure @ 0aca87c6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
489
require(){
490
    name="$1"
491
    header="$2"
492
    func="$3"
493
    shift 3
494
    check_lib $header $func "$@" || die "ERROR: $name not found"
495
}
496

    
497
require2(){
498
    name="$1"
499
    headers="$2"
500
    func="$3"
501
    shift 3
502
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
503
}
504

    
505
check_foo_config(){
506
    cfg=$1
507
    pkg=$2
508
    header=$3
509
    func=$4
510
    shift 4
511
    disable $cfg
512
    check_cmd ${pkg}-config --version
513
    err=$?
514
    if test "$err" = 0; then
515
        temp_cflags `${pkg}-config --cflags`
516
        temp_extralibs `${pkg}-config --libs`
517
        check_lib "$@" $header $func && enable $cfg
518
    fi
519
    return $err
520
}
521

    
522
apply(){
523
    file=$1
524
    shift
525
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
526
}
527

    
528
CONFIG_LIST='
529
    encoders
530
    decoders
531
    parsers
532
    muxers
533
    demuxers
534
    amr
535
    amr_nb
536
    amr_nb_fixed
537
    amr_wb
538
    audio_beos
539
    audio_oss
540
    avisynth
541
    beos_netserver
542
    bktr
543
    dc1394
544
    dv1394
545
    ffmpeg
546
    ffplay
547
    ffserver
548
    gpl
549
    gprof
550
    ipv6
551
    liba52
552
    liba52bin
553
    libdts
554
    libfaac
555
    libfaad
556
    libfaadbin
557
    libgsm
558
    libmp3lame
559
    libnut
560
    libogg
561
    libtheora
562
    libvorbis
563
    memalign_hack
564
    mpegaudio_hp
565
    network
566
    powerpc_perf
567
    pp
568
    protocols
569
    swscaler
570
    vhook
571
    v4l
572
    v4l2
573
    wince
574
    x11grab
575
    x264
576
    xvid
577
    zlib
578
'
579

    
580
THREADS_LIST='
581
    beosthreads
582
    os2threads
583
    pthreads
584
    w32threads
585
'
586

    
587
HAVE_LIST="
588
    $THREADS_LIST
589
    altivec
590
    altivec_h
591
    armv5te
592
    armv6
593
    byteswap_h
594
    cmov
595
    dcbzl
596
    dev_bktr_ioctl_bt848_h
597
    dev_bktr_ioctl_meteor_h
598
    dev_ic_bt8xx_h
599
    dev_video_meteor_ioctl_meteor_h
600
    dev_video_bktr_ioctl_bt848_h
601
    dlfcn_h
602
    dlopen
603
    fast_64bit
604
    fast_cmov
605
    freetype2
606
    imlib2
607
    inet_aton
608
    iwmmxt
609
    localtime_r
610
    lrintf
611
    machine_ioctl_bt848_h
612
    machine_ioctl_meteor_h
613
    malloc_h
614
    memalign
615
    mlib
616
    mmi
617
    mmx
618
    os2
619
    sdl
620
    sdl_video_size
621
    soundcard_h
622
    sys_poll_h
623
    sys_soundcard_h
624
    threads
625
"
626

    
627
TARGET_LIST='
628
    altivec
629
    armv5te
630
    armv6
631
    iwmmxt
632
    mmi
633
    mmx
634
'
635

    
636
CMDLINE_SELECT="
637
    $CONFIG_LIST
638
    $TARGET_LIST
639
    $THREADS_LIST
640
    amr_if2
641
    debug
642
    extra_warnings
643
    shared
644
    static
645
"
646

    
647
flashsv_decoder_deps="zlib"
648
flashsv_encoder_deps="zlib"
649
mpeg_xvmc_decoder_deps="xvmc"
650
png_decoder_deps="zlib"
651
png_encoder_deps="zlib"
652
x264_encoder_deps="x264"
653
xvid_encoder_deps="xvid"
654
zmbv_decoder_deps="zlib"
655
zmbv_encoder_deps="zlib"
656

    
657
aac_decoder_deps="libfaad"
658
mpeg4aac_decoder_deps="libfaad"
659
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
660
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
661
amr_wb_decoder_deps="amr_wb"
662
amr_wb_encoder_deps="amr_wb"
663
dts_decoder_deps="libdts"
664
faac_encoder_deps="libfaac"
665
liba52_decoder_deps="liba52"
666
libgsm_decoder_deps="libgsm"
667
libgsm_encoder_deps="libgsm"
668
libgsm_ms_decoder_deps="libgsm"
669
libgsm_ms_encoder_deps="libgsm"
670
libtheora_encoder_deps="libtheora"
671
mp3lame_encoder_deps="libmp3lame"
672
oggvorbis_decoder_deps="libvorbis"
673
oggvorbis_encoder_deps="libvorbis"
674

    
675
audio_demuxer_deps_any="audio_oss audio_beos"
676
audio_muxer_deps_any="audio_oss audio_beos"
677
dc1394_demuxer_deps="dc1394"
678
dv1394_demuxer_deps="dv1394"
679
gxf_muxer_deps="gpl"
680
libnut_demuxer_deps="libnut"
681
libnut_muxer_deps="libnut"
682
ogg_muxer_deps="libogg"
683
redir_demuxer_deps="network"
684
rtp_muxer_deps="network"
685
rtsp_demuxer_deps="network"
686
sdp_demuxer_deps="network"
687
v4l2_demuxer_deps="v4l2"
688
video_grab_device_demuxer_deps_any="v4l bktr"
689
x11_grab_device_demuxer_deps="x11grab"
690

    
691
ffplay_deps="sdl"
692
ffserver_deps="network protocols muxers"
693
network_deps="protocols"
694

    
695
# set temporary file name
696
if test ! -z "$TMPDIR" ; then
697
    TMPDIR1="${TMPDIR}"
698
elif test ! -z "$TEMPDIR" ; then
699
    TMPDIR1="${TEMPDIR}"
700
else
701
    TMPDIR1="/tmp"
702
fi
703

    
704
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
705
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
706
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
707
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
708
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
709

    
710
# default parameters
711

    
712
logging="yes"
713
logfile="config.err"
714

    
715
# installation paths
716
PREFIX="/usr/local"
717
libdir='${PREFIX}/lib'
718
shlibdir="$libdir"
719
incdir='${PREFIX}/include/ffmpeg'
720
mandir='${PREFIX}/man'
721
bindir='${PREFIX}/bin'
722

    
723
# toolchain
724
cross_prefix=""
725
cross_compile="no"
726
cc="gcc"
727
ar="ar"
728
ranlib="ranlib"
729
make="make"
730
strip="strip"
731
asmalign_pot="unknown"
732

    
733
# machine
734
arch=`uname -m`
735
cpu="generic"
736
powerpc_perf="no"
737
mmx="default"
738
cmov="no"
739
fast_cmov="no"
740
armv5te="default"
741
armv6="default"
742
iwmmxt="default"
743
altivec="default"
744
dcbzl="no"
745
mmi="default"
746
bigendian="no"
747

    
748
# OS
749
targetos=`uname -s`
750
beos_netserver="no"
751
os2="no"
752
wince="no"
753

    
754
# non-library system interfaces
755
audio_beos="default"
756
audio_oss="yes"
757
bktr="yes"
758
dv1394="yes"
759
v4l2="yes"
760
v4l="yes"
761

    
762
# libraries
763
amr_if2="no"
764
amr_nb="no"
765
amr_nb_fixed="no"
766
amr_wb="no"
767
avisynth="no"
768
dc1394="no"
769
dlfcn_h="no"
770
dlopen="no"
771
liba52="no"
772
liba52bin="no"
773
libdts="no"
774
libfaac="no"
775
libfaad2="no"
776
libfaad="no"
777
libfaadbin="no"
778
libgsm="no"
779
libmp3lame="no"
780
libnut="no"
781
libogg="no"
782
libtheora="no"
783
libvorbis="no"
784
mlib="no"
785
x11grab="no"
786
x264="no"
787
xvid="no"
788
zlib="yes"
789

    
790
# configurable options
791
debug="yes"
792
dostrip="yes"
793
extra_warnings="no"
794
ffmpeg="yes"
795
ffplay="yes"
796
ffserver="yes"
797
gpl="no"
798
gprof="no"
799
ipv6="yes"
800
shared="no"
801
static="yes"
802
memalign_hack="no"
803
mpegaudio_hp="yes"
804
network="yes"
805
optimize="yes"
806
pp="no"
807
protocols="yes"
808
swscaler="no"
809
vhook="default"
810

    
811
# threading
812
beosthreads="no"
813
os2threads="no"
814
pthreads="no"
815
w32threads="no"
816
thread_type="no"
817

    
818
# build settings
819
SHFLAGS='-shared -Wl,-soname,$@'
820
VHOOKSHFLAGS='$(SHFLAGS)'
821
LIBOBJFLAGS=""
822
FFLDFLAGS=-Wl,--warn-common
823
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
824
FFSERVERLDFLAGS=-Wl,-E
825
LDCONFIG="ldconfig"
826
LIBPREF="lib"
827
LIBSUF=".a"
828
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
829
SLIBPREF="lib"
830
SLIBSUF=".so"
831
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
832
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
833
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
834
EXESUF=""
835
BUILDSUF=""
836
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
837

    
838
# find source path
839
source_path="`dirname \"$0\"`"
840
source_path_used="yes"
841
if test -z "$source_path" -o "$source_path" = "." ; then
842
    source_path="`pwd`"
843
    source_path_used="no"
844
else
845
    source_path="`cd \"$source_path\"; pwd`"
846
    echo "$source_path" | grep -q '[[:blank:]]' &&
847
      die "Out of tree builds are impossible with whitespace in source path."
848
fi
849

    
850
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
851
    show_help
852
fi
853

    
854
FFMPEG_CONFIGURATION="$@"
855

    
856
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
857
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
858
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
859
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
860
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
861

    
862
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
863

    
864
die_unknown(){
865
    echo "Unknown option \"$1\"."
866
    echo "See $0 --help for available options."
867
    exit 1
868
}
869

    
870
for opt do
871
  optval="${opt#*=}"
872
  case "$opt" in
873
  --log)
874
  ;;
875
  --log=*) logging="$optval"
876
  ;;
877
  --prefix=*) PREFIX="$optval"
878
  ;;
879
  --libdir=*) libdir="$optval"
880
  ;;
881
  --shlibdir=*) shlibdir="$optval"
882
  ;;
883
  --incdir=*) incdir="$optval"
884
  ;;
885
  --mandir=*) mandir="$optval"
886
  ;;
887
  --source-path=*) source_path="$optval"
888
  ;;
889
  --cross-prefix=*) cross_prefix="$optval"
890
  ;;
891
  --cross-compile) cross_compile="yes"
892
  ;;
893
  --target-os=*) targetos="$optval"
894
  ;;
895
  --cc=*) cc="$optval"
896
  ;;
897
  --make=*) make="$optval"
898
  ;;
899
  --extra-cflags=*) add_cflags "$optval"
900
  ;;
901
  --extra-ldflags=*) add_ldflags "$optval"
902
  ;;
903
  --extra-libs=*) add_extralibs "$optval"
904
  ;;
905
  --build-suffix=*) BUILDSUF="$optval"
906
  ;;
907
  --arch=*) arch="$optval"
908
  ;;
909
  --cpu=*) cpu="$optval"
910
  ;;
911
  --enable-mingwce) wince="yes"
912
  ;;
913
  --disable-opts) optimize="no"
914
  ;;
915
  --enable-small) optimize="small"
916
  ;;
917
  --enable-sunmlib) mlib="yes"
918
  ;;
919
  --disable-strip) dostrip="no"
920
  ;;
921
  --disable-encoders) disable $ENCODER_LIST
922
  ;;
923
  --disable-decoders) disable $DECODER_LIST
924
  ;;
925
  --disable-muxers) disable $MUXER_LIST
926
  ;;
927
  --disable-demuxers) disable $DEMUXER_LIST
928
  ;;
929
  --disable-parsers) disable $PARSER_LIST
930
  ;;
931
  --enable-*=*|--disable-*=*)
932
  eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
933
  case "$thing" in
934
      encoder|decoder|muxer|demuxer|parser) $action ${optval}_${thing} ;;
935
      *) die_unknown "$opt" ;;
936
  esac
937
  ;;
938
  --enable-?*|--disable-?*)
939
  eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
940
  echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
941
  $action $option
942
  ;;
943
  --help) show_help
944
  ;;
945
  *)
946
  die_unknown $opt
947
  ;;
948
  esac
949
done
950

    
951
case "$arch" in
952
  i386|i486|i586|i686|i86pc|BePC)
953
    arch="x86_32"
954
  ;;
955
  x86_64|amd64)
956
    arch="x86_32"
957
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
958
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
959
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
960
        arch="x86_64"
961
        enable fast_64bit
962
      fi
963
    fi
964
  ;;
965
  # armv4l is a subset of armv[567]*l
966
  arm|armv[4567]*l)
967
    arch="armv4l"
968
  ;;
969
  alpha)
970
    arch="alpha"
971
    enable fast_64bit
972
  ;;
973
  "Power Macintosh"|ppc|powerpc)
974
    arch="powerpc"
975
  ;;
976
  ppc64)
977
    arch="powerpc"
978
    enable fast_64bit
979
  ;;
980
  mips|mipsel|IP*)
981
    arch="mips"
982
  ;;
983
  sun4u|sparc64)
984
    arch="sparc64"
985
    enable fast_64bit
986
  ;;
987
  sparc)
988
    arch="sparc"
989
  ;;
990
  sh4)
991
    arch="sh4"
992
  ;;
993
  parisc)
994
    arch="parisc"
995
  ;;
996
  parisc64)
997
    arch="parisc"
998
    enable fast_64bit
999
  ;;
1000
  s390|s390x)
1001
    arch="s390"
1002
  ;;
1003
  m68k)
1004
    arch="m68k"
1005
  ;;
1006
  ia64)
1007
    arch="ia64"
1008
    enable fast_64bit
1009
  ;;
1010
  bfin)
1011
    arch="bfin"
1012
  ;;
1013
  *)
1014
    arch="unknown"
1015
  ;;
1016
esac
1017

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

    
1172
add_extralibs $osextralibs
1173

    
1174
if ! disabled logging ; then
1175
    enabled logging || logfile="$logging"
1176
    echo "# $0 $@" >$logfile
1177
    set >>$logfile
1178
else
1179
    logfile=/dev/null
1180
fi
1181

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

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

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

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

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

    
1222

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

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

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

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

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

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

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

    
1354
gnu_make(){
1355
    $1 --version 2>&1 | grep -q GNU
1356
}
1357

    
1358
if ! gnu_make $make; then
1359
    gnu_make gmake && make=gmake || die "GNU make not found."
1360
fi
1361

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

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

    
1392
# check for assembler specific support
1393

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

    
1405
# check for SIMD availability
1406

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

    
1418
check_header altivec.h
1419

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

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

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

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

    
1465
# mmi only available on mips
1466
if test $mmi = "default"; then
1467
    if test $arch = "mips"; then
1468
        mmi="yes"
1469
    else
1470
        mmi="no"
1471
    fi
1472
fi
1473

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

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

    
1499
# ---
1500
# check availability of some header files
1501

    
1502
check_header malloc.h
1503
check_func memalign
1504

    
1505
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1506
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1507
fi
1508

    
1509
check_header byteswap.h
1510

    
1511
check_func inet_aton
1512
check_func localtime_r
1513
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1514

    
1515
# ffserver uses poll(),
1516
# if it's not found we can emulate it using select().
1517
if enabled ffserver; then
1518
    check_header sys/poll.h
1519
fi
1520

    
1521
# check for some common methods of building with pthread support
1522
# do this before the optional library checks as some of them require pthreads
1523
if enabled pthreads; then
1524
    if check_func pthread_create; then
1525
        :
1526
    elif check_func pthread_create -pthread; then
1527
        add_cflags -pthread
1528
        add_ldflags -pthread
1529
    elif check_func pthread_create -pthreads; then
1530
        add_cflags -pthreads
1531
        add_ldflags -pthreads
1532
    elif ! check_lib pthread.h pthread_create -lpthread; then
1533
        die "ERROR: can't find pthreads library"
1534
    fi
1535
fi
1536

    
1537
for thread in $THREADS_LIST; do
1538
    if enabled $thread; then
1539
        if ! disabled thread_type ; then
1540
            die "ERROR: Only one thread type must be selected."
1541
        else
1542
            thread_type="$thread"
1543
        fi
1544
    fi
1545
done
1546

    
1547
enabled_any amr_nb amr_nb_fixed amr_wb amr_if2 && enable amr
1548
enabled_all amr_nb amr_nb_fixed &&
1549
    die "Only one of amr_nb and amr_nb_fixed may be enabled."
1550

    
1551
# these are off by default, so fail if requested and not available
1552
enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1553
enabled libdts     && require libdts dts.h dts_init -ldts -lm
1554
enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1555
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1556
enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1557
enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1558
enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1559
enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1560
enabled xvid       && require XviD xvid.h xvid_global -lxvidcore
1561
enabled x264       && require x264 x264.h x264_encoder_open -lx264
1562
enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1563
enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1564
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1565
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1566
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1567

    
1568
# test for lrintf in math.h
1569
check_exec <<EOF && lrintf=yes || lrintf=no
1570
#define _ISOC9X_SOURCE  1
1571
#include <math.h>
1572
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1573
EOF
1574

    
1575
_restrict=
1576
for restrict_keyword in restrict __restrict__ __restrict; do
1577
    check_cc <<EOF && _restrict=$restrict_keyword && break
1578
void foo(char * $restrict_keyword p);
1579
EOF
1580
done
1581

    
1582
# dlopen/dlfcn.h probing
1583

    
1584
check_header dlfcn.h
1585

    
1586
if check_func dlopen; then
1587
    ldl=
1588
elif check_func dlopen -ldl; then
1589
    ldl=-ldl
1590
fi
1591

    
1592
test "$vhook" = "default" && vhook="$dlopen"
1593

    
1594
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1595

    
1596
if test "$targetos" = "CYGWIN" && enabled static ; then
1597
    vhook="no"
1598
    echo
1599
    echo "At the moment vhooks don't work on Cygwin static builds."
1600
    echo "Patches welcome."
1601
    echo
1602
fi
1603

    
1604
if enabled vhook; then
1605
    check_ldflags -rdynamic
1606
    check_ldflags -export-dynamic
1607
fi
1608

    
1609
enabled audio_beos && add_extralibs "-lmedia -lbe"
1610

    
1611
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1612
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1613

    
1614
##########################################
1615
# SDL check
1616

    
1617
sdl_too_old=no
1618
sdl=no
1619
SDL_CONFIG="${cross_prefix}sdl-config"
1620
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1621
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
1622
    temp_cflags $sdl_cflags
1623
    temp_extralibs `"${SDL_CONFIG}" --libs`
1624
    if check_lib SDL.h SDL_Init; then
1625
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1626
        if test "$_sdlversion" -lt 121 ; then
1627
            sdl_too_old=yes
1628
        else
1629
            sdl=yes
1630
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1631
#include <SDL.h>
1632
int main(void){
1633
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1634
    int w = vi->current_w;
1635
    return 0;
1636
}
1637
EOF
1638
        fi
1639
    fi
1640
    restore_flags
1641
fi
1642

    
1643
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1644

    
1645
##########################################
1646
# IPv6 check
1647

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

    
1662
enabled v4l  && check_header linux/videodev.h  || disable v4l
1663
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1664

    
1665
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1666
if enabled bktr; then
1667
    { check_header dev/bktr/ioctl_meteor.h &&
1668
      check_header dev/bktr/ioctl_bt848.h; } ||
1669
    { check_header machine/ioctl_meteor.h &&
1670
      check_header machine/ioctl_bt848.h; } ||
1671
    { check_header dev/video/meteor/ioctl_meteor.h &&
1672
      check_header dev/video/bktr/ioctl_bt848.h; } ||
1673
    check_header dev/ic/bt8xx.h ||
1674
    disable bktr
1675
fi
1676

    
1677
enabled audio_oss &&
1678
    check_header sys/soundcard.h ||
1679
    check_header soundcard.h ||
1680
    disable audio_oss
1681

    
1682
# Deal with the x11 frame grabber
1683
enabled x11grab                         &&
1684
enabled gpl                             &&
1685
enabled x11_grab_device_demuxer         &&
1686
check_header X11/Xlib.h                 &&
1687
check_header X11/extensions/XShm.h      &&
1688
check_func XOpenDisplay -lX11           &&
1689
check_func XShmCreateImage -lX11 -lXext &&
1690
add_extralibs -lX11 -lXext              ||
1691
disable x11_grab_device_demuxer
1692

    
1693
enabled debug && add_cflags -g
1694

    
1695
# add some useful compiler flags if supported
1696
check_cflags -Wdeclaration-after-statement
1697
check_cflags -Wall
1698
check_cflags -Wno-switch
1699
check_cflags -Wdisabled-optimization
1700
check_cflags -Wpointer-arith
1701
check_cflags -Wredundant-decls
1702
check_cflags -Wno-pointer-sign
1703
enabled extra_warnings && check_cflags -Winline
1704

    
1705
# add some linker flags
1706
check_ldflags $LDLATEFLAGS
1707

    
1708
# not all compilers support -Os
1709
test "$optimize" = "small" && check_cflags -Os
1710

    
1711
if enabled optimize; then
1712
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1713
        add_cflags  "-O5"
1714
        add_ldflags "-O5"
1715
    else
1716
        add_cflags "-O3"
1717
    fi
1718
fi
1719

    
1720
# PIC flags for shared library objects where they are needed
1721
if enabled shared; then
1722
    # LIBOBJFLAGS may have already been set in the OS configuration
1723
    if test -z "$LIBOBJFLAGS" ; then
1724
        case "$arch" in
1725
            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1726
        esac
1727
    fi
1728
fi
1729

    
1730
if enabled gprof; then
1731
    add_cflags  "-p"
1732
    add_ldflags "-p"
1733
fi
1734

    
1735
VHOOKCFLAGS="-fPIC $CFLAGS"
1736
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1737

    
1738
# find if .align arg is power-of-two or not
1739
if test $asmalign_pot = "unknown"; then
1740
    asmalign_pot="no"
1741
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1742
fi
1743

    
1744
enabled_any $ENCODER_LIST && enable encoders
1745
enabled_any $DECODER_LIST && enable decoders
1746
enabled_any $MUXER_LIST   && enable muxers
1747
enabled_any $DEMUXER_LIST && enable demuxers
1748

    
1749
enabled_any $THREADS_LIST && enable threads
1750

    
1751
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1752
    $DEMUXER_LIST $MUXER_LIST
1753

    
1754
enabled libogg    && append pkg_requires "ogg >= 1.1"
1755
enabled libtheora && append pkg_requires "theora"
1756
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1757
enabled dc1394    && append pkg_requires "libraw1394"
1758

    
1759
echo "install prefix            $PREFIX"
1760
echo "source path               $source_path"
1761
echo "C compiler                $cc"
1762
echo "make                      $make"
1763
echo ".align is power-of-two    $asmalign_pot"
1764
echo "ARCH                      $arch ($cpu)"
1765
if test "$BUILDSUF" != ""; then
1766
    echo "build suffix              $BUILDSUF"
1767
fi
1768
echo "big-endian                $bigendian"
1769
if test $arch = "x86_32" -o $arch = "x86_64"; then
1770
    echo "MMX enabled               $mmx"
1771
    echo "CMOV enabled              $cmov"
1772
    echo "CMOV is fast              $fast_cmov"
1773
fi
1774
if test $arch = "armv4l"; then
1775
    echo "ARMv5TE enabled           $armv5te"
1776
    echo "ARMv6 enabled             $armv6"
1777
    echo "IWMMXT enabled            $iwmmxt"
1778
fi
1779
if test $arch = "mips"; then
1780
    echo "MMI enabled               $mmi"
1781
fi
1782
if test $arch = "powerpc"; then
1783
    echo "AltiVec enabled           $altivec"
1784
    echo "dcbzl available           $dcbzl"
1785
fi
1786
echo "gprof enabled             $gprof"
1787
echo "debug symbols             $debug"
1788
echo "strip symbols             $dostrip"
1789
echo "optimize                  $optimize"
1790
echo "static                    $static"
1791
echo "shared                    $shared"
1792
echo "postprocessing support    $pp"
1793
echo "software scaler enabled   $swscaler"
1794
echo "video hooking             $vhook"
1795
if enabled vhook; then
1796
    echo "Imlib2 support            $imlib2"
1797
    echo "FreeType support          $freetype2"
1798
fi
1799
echo "network support           $network"
1800
if enabled network; then
1801
    echo "IPv6 support              $ipv6"
1802
fi
1803
echo "threading support         $thread_type"
1804
echo "SDL support               $sdl"
1805
if enabled sdl_too_old; then
1806
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1807
fi
1808
echo "Sun medialib support      $mlib"
1809
echo "AVISynth enabled          $avisynth"
1810
echo "liba52 support            $liba52"
1811
echo "liba52 dlopened           $liba52bin"
1812
echo "libdts support            $libdts"
1813
echo "libfaac enabled           $libfaac"
1814
echo "libfaad enabled           $libfaad"
1815
echo "faadbin enabled           $libfaadbin"
1816
echo "libgsm enabled            $libgsm"
1817
echo "libmp3lame enabled        $libmp3lame"
1818
echo "libnut enabled            $libnut"
1819
echo "libogg enabled            $libogg"
1820
echo "libtheora enabled         $libtheora"
1821
echo "libvorbis enabled         $libvorbis"
1822
echo "x264 enabled              $x264"
1823
echo "XviD enabled              $xvid"
1824
echo "zlib enabled              $zlib"
1825
echo "AMR-NB float support      $amr_nb"
1826
echo "AMR-NB fixed support      $amr_nb_fixed"
1827
echo "AMR-WB float support      $amr_wb"
1828
echo "AMR-WB IF2 support        $amr_if2"
1829
if disabled gpl; then
1830
    echo "License: LGPL"
1831
else
1832
    echo "License: GPL"
1833
fi
1834

    
1835
echo "Creating config.mak and config.h..."
1836

    
1837
echo "# Automatically generated by configure - do not modify!" > config.mak
1838
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1839
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1840

    
1841
echo "PREFIX=$PREFIX" >> config.mak
1842
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1843
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1844
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1845
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1846
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1847
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1848
echo "MAKE=$make" >> config.mak
1849
echo "CC=$cc" >> config.mak
1850
echo "AR=$ar" >> config.mak
1851
echo "RANLIB=$ranlib" >> config.mak
1852
if enabled dostrip; then
1853
    echo "STRIP=$strip" >> config.mak
1854
else
1855
    echo "STRIP=echo ignoring strip" >> config.mak
1856
fi
1857

    
1858
echo "OPTFLAGS=$CFLAGS" >> config.mak
1859
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1860
echo "LDFLAGS=$LDFLAGS" >> config.mak
1861
echo "LDCONFIG=$LDCONFIG" >> config.mak
1862
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1863
echo "SHFLAGS=$SHFLAGS" >> config.mak
1864
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1865
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1866
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1867
echo "BUILD_STATIC=$static" >> config.mak
1868
echo "BUILDSUF=$BUILDSUF" >> config.mak
1869
echo "LIBPREF=$LIBPREF" >> config.mak
1870
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1871
if enabled static; then
1872
  echo "LIB=$LIB" >> config.mak
1873
else # Some Make complain if this variable does not exist.
1874
  echo "LIB=" >> config.mak
1875
fi
1876
echo "SLIBPREF=$SLIBPREF" >> config.mak
1877
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1878
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1879

    
1880
ucarch=`toupper $arch`
1881
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1882
echo "#define ARCH_${ucarch} 1" >> $TMPH
1883

    
1884
# special cases
1885
case "$arch" in
1886
    x86_32|x86_64)
1887
        echo "TARGET_ARCH_X86=yes" >> config.mak
1888
        echo "#define ARCH_X86 1" >> $TMPH
1889
        ;;
1890
    powerpc)
1891
        if test "$POWERPCMODE" = "64bits"; then
1892
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1893
        fi
1894
        ;;
1895
    sparc64)
1896
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
1897
        echo "#define ARCH_SPARC 1" >> $TMPH
1898
        ;;
1899
esac
1900

    
1901
if enabled bigendian; then
1902
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1903
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1904
fi
1905
if enabled mmx; then
1906
  echo "#define __CPU__ 586" >> $TMPH
1907
fi
1908

    
1909
if enabled sdl; then
1910
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1911
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1912
fi
1913
if enabled texi2html; then
1914
  echo "BUILD_DOC=yes" >> config.mak
1915
fi
1916

    
1917
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1918
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1919
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1920
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1921
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1922

    
1923

    
1924

    
1925
if enabled shared; then
1926
  echo "BUILD_SHARED=yes" >> config.mak
1927
  echo "PIC=-fPIC -DPIC" >> config.mak
1928
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1929
  echo "SPPVERSION=$pp_version" >> config.mak
1930
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1931
  echo "LAVCVERSION=$lavc_version" >> config.mak
1932
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1933
  echo "LAVFVERSION=$lavf_version" >> config.mak
1934
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1935
  echo "LAVUVERSION=$lavu_version" >> config.mak
1936
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1937
  echo "SWSVERSION=$sws_version" >> config.mak
1938
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1939
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1940
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1941
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1942
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1943
fi
1944
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1945
echo "EXTRALIBS=$extralibs" >> config.mak
1946

    
1947
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1948
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1949
print_config TARGET_ $TMPH config.mak $TARGET_LIST
1950

    
1951
if test "$targetos" = "Darwin"; then
1952
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
1953
fi
1954

    
1955
echo "#define restrict $_restrict" >> $TMPH
1956

    
1957
if test "$optimize" = "small"; then
1958
  echo "#define always_inline"  >> $TMPH
1959
  echo "#define CONFIG_SMALL 1" >> $TMPH
1960
fi
1961

    
1962
echo "SRC_PATH=\"$source_path\"" >> config.mak
1963
echo "SRC_PATH_BARE=$source_path" >> config.mak
1964
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1965

    
1966
if enabled amr_if2; then
1967
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1968
fi
1969

    
1970
# Apparently it's not possible to portably echo a backslash.
1971
if enabled asmalign_pot; then
1972
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1973
else
1974
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1975
fi
1976

    
1977

    
1978
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
1979
    ucname="`toupper $codec`"
1980
    config_name="CONFIG_$ucname"
1981
    enabled_name="ENABLE_$ucname"
1982
    if enabled $codec; then
1983
        echo "#define $config_name 1" >> $TMPH
1984
        echo "#define $enabled_name 1" >> $TMPH
1985
        echo "$config_name=yes" >> config.mak
1986
    else
1987
        echo "#define $enabled_name 0" >> $TMPH
1988
    fi
1989
done
1990

    
1991
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1992
if ! cmp -s $TMPH config.h; then
1993
        mv -f $TMPH config.h
1994
else
1995
        echo "config.h is unchanged"
1996
fi
1997

    
1998
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1999

    
2000
# build tree in object directory if source path is different from current one
2001
if enabled source_path_used; then
2002
    DIRS="\
2003
         doc \
2004
         libavformat \
2005
         libavcodec \
2006
         libavcodec/alpha \
2007
         libavcodec/armv4l \
2008
         libavcodec/bfin \
2009
         libavcodec/i386 \
2010
         libavcodec/sparc \
2011
         libavcodec/mlib \
2012
         libavcodec/ppc \
2013
         libavcodec/amr \
2014
         libavcodec/amr_float \
2015
         libavcodec/amrwb_float \
2016
         libpostproc \
2017
         libavutil \
2018
         libswscale \
2019
         tests \
2020
         vhook \
2021
         "
2022
    FILES="\
2023
          Makefile \
2024
          common.mak \
2025
          libavformat/Makefile \
2026
          libavcodec/Makefile \
2027
          libpostproc/Makefile \
2028
          libavutil/Makefile \
2029
          libswscale/Makefile \
2030
          tests/Makefile \
2031
          vhook/Makefile \
2032
          doc/Makefile \
2033
          doc/texi2pod.pl \
2034
          "
2035
    for dir in $DIRS ; do
2036
            mkdir -p $dir
2037
    done
2038
    for f in $FILES ; do
2039
        ln -sf "$source_path/$f" $f
2040
    done
2041
fi
2042

    
2043

    
2044
# build pkg-config files
2045
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2046

    
2047
pkgconfig_generate(){
2048
name=$1
2049
comment=$2
2050
version=$3
2051
libs=$4
2052
requires=$5
2053
include=$6
2054
cat <<EOF >$name.pc
2055
prefix=$PREFIX
2056
exec_prefix=\${prefix}
2057
libdir=\${exec_prefix}/lib
2058
includedir=\${prefix}/include
2059

    
2060
Name: $name
2061
Description: $comment
2062
Version: $version
2063
Requires: $requires
2064
Conflicts:
2065
Libs: -L\${libdir} $libs
2066
Cflags: -I\${includedir} -I\${includedir}/$include
2067
EOF
2068
}
2069

    
2070
pkgconfig_generate_uninstalled(){
2071
name=$1
2072
shortname=${name#lib}
2073
comment=$2
2074
version=$3
2075
libs=$4
2076
requires=$5
2077
cat <<EOF >$name-uninstalled.pc
2078
prefix=
2079
exec_prefix=
2080
libdir=\${pcfiledir}/$name
2081
includedir=\${pcfiledir}/$name
2082

    
2083
Name: $name
2084
Description: $comment
2085
Version: $version
2086
Requires: $requires
2087
Conflicts:
2088
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2089
Cflags: -I\${includedir}
2090
EOF
2091
}
2092

    
2093
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2094
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2095

    
2096
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2097
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2098

    
2099
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2100
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2101

    
2102
if enabled pp; then
2103
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2104
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2105
fi
2106

    
2107
if enabled swscaler; then
2108
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2109
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2110
else
2111
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2112
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2113
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2114
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2115
fi