Statistics
| Branch: | Revision:

ffmpeg / configure @ 8d3dc6ba

History | View | Annotate | Download (57.2 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 floating point audio codec"
103
  echo "  --enable-amr-nb-fixed    enable amr-nb fixed-point codec"
104
  echo "  --enable-amr-wb          enable amr-wb floating point audio codec"
105
  echo ""
106
  echo "Advanced options (experts only):"
107
  echo "  --source-path=PATH       path to source code [$source_path]"
108
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
109
  echo "  --cross-compile          assume a cross-compiler is used"
110
  echo "  --target-os=OS           compiler targets OS [$targetos]"
111
  echo "  --cc=CC                  use C compiler CC [$cc]"
112
  echo "  --make=MAKE              use specified make [$make]"
113
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
114
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
115
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
116
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
117
  echo "  --arch=ARCH              select architecture  [$arch]"
118
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
119
  echo "                           instruction selection, may crash on older CPUs)"
120
  echo "  --enable-powerpc-perf    enable performance report on PPC"
121
  echo "                           (requires enabling PMC)"
122
  echo "  --disable-mmx            disable MMX usage"
123
  echo "  --disable-armv5te        disable armv5te usage"
124
  echo "  --disable-armv6          disable armv6 usage"
125
  echo "  --disable-iwmmxt         disable iwmmxt usage"
126
  echo "  --disable-altivec        disable AltiVec usage"
127
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
128
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
129
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
130
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
131
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
132
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
133
  echo "  --disable-network        disable network support [default=no]"
134
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
135
  echo "  --disable-zlib           disable zlib [default=no]"
136
  echo "  --disable-vhook          disable video hooking support"
137
  echo "  --disable-debug          disable debugging symbols"
138
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
139
  echo "                           MPEG audio decoding [default=no]"
140
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
141
  echo "  --disable-ffmpeg         disable ffmpeg build"
142
  echo "  --disable-ffserver       disable ffserver build"
143
  echo "  --disable-ffplay         disable ffplay build"
144
  echo "  --enable-small           optimize for size instead of speed"
145
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
146
  echo "  --disable-encoder=NAME   disables encoder NAME"
147
  echo "  --enable-encoder=NAME    enables encoder NAME"
148
  echo "  --disable-decoder=NAME   disables decoder NAME"
149
  echo "  --enable-decoder=NAME    enables decoder NAME"
150
  echo "  --disable-encoders       disables all encoders"
151
  echo "  --disable-decoders       disables all decoders"
152
  echo "  --disable-muxer=NAME     disables muxer NAME"
153
  echo "  --enable-muxer=NAME      enables muxer NAME"
154
  echo "  --disable-muxers         disables all muxers"
155
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
156
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
157
  echo "  --disable-demuxers       disables all demuxers"
158
  echo "  --enable-parser=NAME     enables parser NAME"
159
  echo "  --disable-parser=NAME    disables parser NAME"
160
  echo "  --disable-parsers        disables all parsers"
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_nb_fixed
562
    amr_wb
563
    audio_beos
564
    audio_oss
565
    avisynth
566
    beos_netserver
567
    bktr
568
    dc1394
569
    dv1394
570
    ebp_available
571
    ebx_available
572
    ffmpeg
573
    ffplay
574
    ffserver
575
    gpl
576
    gprof
577
    ipv6
578
    liba52
579
    liba52bin
580
    libdts
581
    libfaac
582
    libfaad
583
    libfaadbin
584
    libgsm
585
    libmp3lame
586
    libnut
587
    libogg
588
    libtheora
589
    libvorbis
590
    memalign_hack
591
    mpegaudio_hp
592
    network
593
    powerpc_perf
594
    pp
595
    protocols
596
    swscaler
597
    vhook
598
    v4l
599
    v4l2
600
    wince
601
    x11grab
602
    x264
603
    xvid
604
    zlib
605
'
606

    
607
THREADS_LIST='
608
    beosthreads
609
    os2threads
610
    pthreads
611
    w32threads
612
'
613

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

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

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

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

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

    
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"
713
rtsp_demuxer_deps="network"
714
sdp_demuxer_deps="network"
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
ffplay_deps="sdl"
721
ffserver_deps="network protocols muxers"
722
network_deps="protocols"
723

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

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

    
739
# default parameters
740

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

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

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

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

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

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

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

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

    
839
# threading
840
beosthreads="no"
841
os2threads="no"
842
pthreads="no"
843
w32threads="no"
844
thread_type="no"
845

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

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

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

    
882
FFMPEG_CONFIGURATION="$@"
883

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

    
890
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
891

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

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

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

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

    
1201
add_extralibs $osextralibs
1202

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

    
1211
# Combine FFLDFLAGS and the LDFLAGS environment variable.
1212
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1213

    
1214
test -n "$cross_prefix" && cross_compile=yes
1215
cc="${cross_prefix}${cc}"
1216
ar="${cross_prefix}${ar}"
1217
ranlib="${cross_prefix}${ranlib}"
1218
strip="${cross_prefix}${strip}"
1219

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

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

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

    
1251

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

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

    
1277
test -z "$need_memalign" && need_memalign="$mmx"
1278

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

    
1303
disabled optimize || add_cflags -fomit-frame-pointer
1304

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

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

    
1380
gnu_make(){
1381
    $1 --version 2>&1 | grep -q GNU
1382
}
1383

    
1384
if ! gnu_make $make; then
1385
    gnu_make gmake && make=gmake || die "GNU make not found."
1386
fi
1387

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

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

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

    
1431
    # check wether EBX is available on x86
1432
    check_cc <<EOF && enable ebx_available
1433
int main(){
1434
    asm volatile ("":::"%ebx");
1435
}
1436
EOF
1437
fi
1438

    
1439
# check for assembler specific support
1440

    
1441
if test $arch = "powerpc"; then
1442
check_cc <<EOF && dcbzl=yes
1443
int main(void) {
1444
    register long zero = 0;
1445
    char data[1024];
1446
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1447
return 0;
1448
}
1449
EOF
1450
fi
1451

    
1452
# check for SIMD availability
1453

    
1454
# AltiVec flags: The FSF version of GCC differs from the Apple version
1455
if test $arch = "powerpc"; then
1456
    if enabled altivec; then
1457
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1458
            add_cflags "-faltivec"
1459
        else
1460
            add_cflags "-maltivec -mabi=altivec"
1461
        fi
1462
    fi
1463
fi
1464

    
1465
check_header altivec.h
1466

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

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

    
1494
if test $armv6 = "default" -a $arch = "armv4l"; then
1495
    check_cc <<EOF && armv6=yes || armv6=no
1496
int main(void) {
1497
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
1498
}
1499
EOF
1500
fi
1501

    
1502
# check iwmmxt support
1503
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1504
    iwmmxt=no
1505
    check_cc <<EOF && iwmmxt=yes
1506
        int main(void) {
1507
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
1508
        }
1509
EOF
1510
fi
1511

    
1512
# mmi only available on mips
1513
if test $mmi = "default"; then
1514
    if test $arch = "mips"; then
1515
        mmi="yes"
1516
    else
1517
        mmi="no"
1518
    fi
1519
fi
1520

    
1521
# check if our compiler supports mmi
1522
enabled mmi && check_cc <<EOF || mmi="no"
1523
int main(void) {
1524
    __asm__ ("lq \$2, 0(\$2)");
1525
    return 0;
1526
}
1527
EOF
1528

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

    
1546
# ---
1547
# check availability of some header files
1548

    
1549
check_header malloc.h
1550
check_func memalign
1551

    
1552
if disabled_all memalign memalign_hack && enabled need_memalign ; then
1553
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1554
fi
1555

    
1556
check_header byteswap.h
1557

    
1558
check_header arpa/inet.h
1559

    
1560
check_func inet_aton
1561
check_func localtime_r
1562
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1563

    
1564
# ffserver uses poll(),
1565
# if it's not found we can emulate it using select().
1566
if enabled ffserver; then
1567
    check_header sys/poll.h
1568
fi
1569

    
1570
# check for some common methods of building with pthread support
1571
# do this before the optional library checks as some of them require pthreads
1572
if enabled pthreads; then
1573
    if check_func pthread_create; then
1574
        :
1575
    elif check_func pthread_create -pthread; then
1576
        add_cflags -pthread
1577
        add_ldflags -pthread
1578
    elif check_func pthread_create -pthreads; then
1579
        add_cflags -pthreads
1580
        add_ldflags -pthreads
1581
    elif ! check_lib pthread.h pthread_create -lpthread; then
1582
        die "ERROR: can't find pthreads library"
1583
    fi
1584
fi
1585

    
1586
for thread in $THREADS_LIST; do
1587
    if enabled $thread; then
1588
        if ! disabled thread_type ; then
1589
            die "ERROR: Only one thread type must be selected."
1590
        else
1591
            thread_type="$thread"
1592
        fi
1593
    fi
1594
done
1595

    
1596
enabled_any amr_nb amr_nb_fixed amr_wb && enable amr
1597
enabled_all amr_nb amr_nb_fixed &&
1598
    die "Only one of amr_nb and amr_nb_fixed may be enabled."
1599

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

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

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

    
1633
# dlopen/dlfcn.h probing
1634

    
1635
check_header dlfcn.h
1636

    
1637
if check_func dlopen; then
1638
    ldl=
1639
elif check_func dlopen -ldl; then
1640
    ldl=-ldl
1641
fi
1642

    
1643
test "$vhook" = "default" && vhook="$dlopen"
1644

    
1645
enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1646

    
1647
if test "$targetos" = cygwin && enabled static ; then
1648
    vhook="no"
1649
    echo
1650
    echo "At the moment vhooks don't work on Cygwin static builds."
1651
    echo "Patches welcome."
1652
    echo
1653
fi
1654

    
1655
if enabled vhook; then
1656
    check_ldflags -rdynamic
1657
    check_ldflags -export-dynamic
1658
fi
1659

    
1660
enabled audio_beos && add_extralibs "-lmedia -lbe"
1661

    
1662
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1663
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1664

    
1665
##########################################
1666
# SDL check
1667

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

    
1694
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1695

    
1696
##########################################
1697
# IPv6 check
1698

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

    
1713
enabled v4l  && check_header linux/videodev.h  || disable v4l
1714
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1715

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

    
1728
enabled audio_oss &&
1729
    check_header sys/soundcard.h ||
1730
    check_header soundcard.h ||
1731
    disable audio_oss
1732

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

    
1744
enabled debug && add_cflags -g
1745

    
1746
# add some useful compiler flags if supported
1747
check_cflags -Wdeclaration-after-statement
1748
check_cflags -Wall
1749
check_cflags -Wno-switch
1750
check_cflags -Wdisabled-optimization
1751
check_cflags -Wpointer-arith
1752
check_cflags -Wredundant-decls
1753
check_cflags -Wno-pointer-sign
1754
enabled extra_warnings && check_cflags -Winline
1755

    
1756
# add some linker flags
1757
check_ldflags $LDLATEFLAGS
1758

    
1759
# not all compilers support -Os
1760
test "$optimize" = "small" && check_cflags -Os
1761

    
1762
if enabled optimize; then
1763
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1764
        add_cflags  "-O5"
1765
        add_ldflags "-O5"
1766
    else
1767
        add_cflags "-O3"
1768
    fi
1769
fi
1770

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

    
1781
if enabled gprof; then
1782
    add_cflags  "-p"
1783
    add_ldflags "-p"
1784
fi
1785

    
1786
VHOOKCFLAGS="-fPIC $CFLAGS"
1787
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1788

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

    
1795
enabled_any $ENCODER_LIST && enable encoders
1796
enabled_any $DECODER_LIST && enable decoders
1797
enabled_any $MUXER_LIST   && enable muxers
1798
enabled_any $DEMUXER_LIST && enable demuxers
1799

    
1800
enabled_any $THREADS_LIST && enable threads
1801

    
1802
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1803
    $DEMUXER_LIST $MUXER_LIST
1804

    
1805
enabled libogg    && append pkg_requires "ogg >= 1.1"
1806
enabled libtheora && append pkg_requires "theora"
1807
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1808
enabled dc1394    && append pkg_requires "libraw1394"
1809

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

    
1885
echo "Creating config.mak and config.h..."
1886

    
1887
echo "# Automatically generated by configure - do not modify!" > config.mak
1888
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1889
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1890

    
1891
echo "PREFIX=$PREFIX" >> config.mak
1892
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1893
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1894
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1895
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1896
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1897
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1898
echo "MAKE=$make" >> config.mak
1899
echo "CC=$cc" >> config.mak
1900
echo "AR=$ar" >> config.mak
1901
echo "RANLIB=$ranlib" >> config.mak
1902
if enabled dostrip; then
1903
    echo "STRIP=$strip" >> config.mak
1904
else
1905
    echo "STRIP=echo ignoring strip" >> config.mak
1906
fi
1907

    
1908
echo "OPTFLAGS=$CFLAGS" >> config.mak
1909
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1910
echo "LDFLAGS=$LDFLAGS" >> config.mak
1911
echo "LDCONFIG=$LDCONFIG" >> config.mak
1912
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1913
echo "SHFLAGS=$SHFLAGS" >> config.mak
1914
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1915
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1916
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1917
echo "BUILD_STATIC=$static" >> config.mak
1918
echo "BUILDSUF=$BUILDSUF" >> config.mak
1919
echo "LIBPREF=$LIBPREF" >> config.mak
1920
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1921
if enabled static; then
1922
  echo "LIB=$LIB" >> config.mak
1923
else # Some Make complain if this variable does not exist.
1924
  echo "LIB=" >> config.mak
1925
fi
1926
echo "SLIBPREF=$SLIBPREF" >> config.mak
1927
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1928
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1929

    
1930
ucarch=`toupper $arch`
1931
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1932
echo "#define ARCH_${ucarch} 1" >> $TMPH
1933

    
1934
# special cases
1935
case "$arch" in
1936
    x86_32|x86_64)
1937
        echo "TARGET_ARCH_X86=yes" >> config.mak
1938
        echo "#define ARCH_X86 1" >> $TMPH
1939
        ;;
1940
    powerpc)
1941
        if test "$POWERPCMODE" = "64bits"; then
1942
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1943
        fi
1944
        ;;
1945
    sparc64)
1946
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
1947
        echo "#define ARCH_SPARC 1" >> $TMPH
1948
        ;;
1949
esac
1950

    
1951
if enabled bigendian; then
1952
  echo "WORDS_BIGENDIAN=yes" >> config.mak
1953
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1954
fi
1955
if enabled mmx; then
1956
  echo "#define __CPU__ 586" >> $TMPH
1957
fi
1958

    
1959
if enabled sdl; then
1960
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1961
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1962
fi
1963
if enabled texi2html; then
1964
  echo "BUILD_DOC=yes" >> config.mak
1965
fi
1966

    
1967
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1968
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1969
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1970
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1971
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1972

    
1973

    
1974

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

    
1997
print_config HAVE_   $TMPH config.mak $HAVE_LIST
1998
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1999
print_config TARGET_ $TMPH config.mak $TARGET_LIST
2000

    
2001
if test "$targetos" = darwin; then
2002
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
2003
fi
2004

    
2005
echo "#define restrict $_restrict" >> $TMPH
2006

    
2007
if test "$optimize" = "small"; then
2008
  echo "#define always_inline"  >> $TMPH
2009
  echo "#define CONFIG_SMALL 1" >> $TMPH
2010
fi
2011

    
2012
echo "SRC_PATH=\"$source_path\"" >> config.mak
2013
echo "SRC_PATH_BARE=$source_path" >> config.mak
2014
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2015

    
2016
# Apparently it's not possible to portably echo a backslash.
2017
if enabled asmalign_pot; then
2018
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2019
else
2020
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2021
fi
2022

    
2023

    
2024
for part in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2025
    ucname="`toupper $part`"
2026
    config_name="CONFIG_$ucname"
2027
    enabled_name="ENABLE_$ucname"
2028
    if enabled $part; then
2029
        echo "#define $config_name 1" >> $TMPH
2030
        echo "#define $enabled_name 1" >> $TMPH
2031
        echo "$config_name=yes" >> config.mak
2032
    else
2033
        echo "#define $enabled_name 0" >> $TMPH
2034
    fi
2035
done
2036

    
2037
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2038
if ! cmp -s $TMPH config.h; then
2039
        mv -f $TMPH config.h
2040
else
2041
        echo "config.h is unchanged"
2042
fi
2043

    
2044
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2045

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

    
2087

    
2088
# build pkg-config files
2089
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2090

    
2091
pkgconfig_generate(){
2092
name=$1
2093
comment=$2
2094
version=$3
2095
libs=$4
2096
requires=$5
2097
include=$6
2098
cat <<EOF >$name.pc
2099
prefix=$PREFIX
2100
exec_prefix=\${prefix}
2101
libdir=\${exec_prefix}/lib
2102
includedir=\${prefix}/include
2103

    
2104
Name: $name
2105
Description: $comment
2106
Version: $version
2107
Requires: $requires
2108
Conflicts:
2109
Libs: -L\${libdir} $libs
2110
Cflags: -I\${includedir} -I\${includedir}/$include
2111
EOF
2112
}
2113

    
2114
pkgconfig_generate_uninstalled(){
2115
name=$1
2116
shortname=${name#lib}
2117
comment=$2
2118
version=$3
2119
libs=$4
2120
requires=$5
2121
cat <<EOF >$name-uninstalled.pc
2122
prefix=
2123
exec_prefix=
2124
libdir=\${pcfiledir}/$name
2125
includedir=\${pcfiledir}/$name
2126

    
2127
Name: $name
2128
Description: $comment
2129
Version: $version
2130
Requires: $requires
2131
Conflicts:
2132
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2133
Cflags: -I\${includedir}
2134
EOF
2135
}
2136

    
2137
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2138
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2139

    
2140
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2141
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2142

    
2143
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2144
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2145

    
2146
if enabled pp; then
2147
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2148
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2149
fi
2150

    
2151
if enabled swscaler; then
2152
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2153
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2154
else
2155
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2156
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2157
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
2158
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2159
fi