Statistics
| Branch: | Revision:

ffmpeg / configure @ c08fb000

History | View | Annotate | Download (56.9 KB)

1
#!/bin/sh
2
#
3
# FFmpeg configure script
4
#
5
# Copyright (c) 2000, 2001, 2002 Fabrice Bellard
6
# Copyright (c) 2005-2006 Diego Biurrun
7
# Copyright (c) 2005-2006 Mans Rullgard
8
#
9

    
10
# make sure we are running under a compatible shell
11
# try to make this part work with most shells
12

    
13
try_exec(){
14
    echo "Trying shell $1"
15
    type "$1" >/dev/null 2>&1 && exec "$@"
16
}
17

    
18
unset foo
19
(: ${foo%%bar}) 2>/dev/null
20
E1="$?"
21

    
22
(: ${foo?}) 2>/dev/null
23
E2="$?"
24

    
25
if test "$E1" != 0 || test "$E2" = 0; then
26
    echo "Broken shell detected.  Trying alternatives."
27
    export FF_CONF_EXEC
28
    if test "0$FF_CONF_EXEC" -lt 1; then
29
        FF_CONF_EXEC=1
30
        try_exec bash "$0" "$@"
31
    fi
32
    if test "0$FF_CONF_EXEC" -lt 2; then
33
        FF_CONF_EXEC=2
34
        try_exec ksh "$0" "$@"
35
    fi
36
    if test "0$FF_CONF_EXEC" -lt 3; then
37
        FF_CONF_EXEC=3
38
        try_exec /usr/xpg4/bin/sh "$0" "$@"
39
    fi
40
    echo "No compatible shell script interpreter found."
41
    echo "This configure script requires a POSIX-compatible shell"
42
    echo "such as bash or ksh."
43
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
44
    echo "Instead, install a working POSIX-compatible shell."
45
    echo "Disabling this configure test will create a broken FFmpeg."
46
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
47
        echo "This bash version ($BASH_VERSION) is broken on your platform."
48
        echo "Upgrade to a later version if available."
49
    fi
50
    exit 1
51
fi
52

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
743
# default parameters
744

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

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

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

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

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

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

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

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

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

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

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

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

    
885
FFMPEG_CONFIGURATION="$@"
886

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

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

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

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

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

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

    
1204
add_extralibs $osextralibs
1205

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

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

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

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

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

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

    
1254

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1431
# check for assembler specific support
1432

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

    
1444
# check for SIMD availability
1445

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

    
1457
check_header altivec.h
1458

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

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

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

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

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

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

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

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

    
1541
check_header malloc.h
1542
check_func memalign
1543

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

    
1548
check_header byteswap.h
1549

    
1550
check_header arpa/inet.h
1551

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

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

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

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

    
1588
enabled_any amr_nb amr_wb && enable amr
1589

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

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

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

    
1623
# dlopen/dlfcn.h probing
1624

    
1625
check_header dlfcn.h
1626

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

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

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

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

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

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

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

    
1655
##########################################
1656
# SDL check
1657

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

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

    
1686
##########################################
1687
# IPv6 check
1688

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

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

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

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

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

    
1734
enabled debug && add_cflags -g
1735

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

    
1746
# add some linker flags
1747
check_ldflags $LDLATEFLAGS
1748

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

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

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

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

    
1776
VHOOKCFLAGS="-fPIC $CFLAGS"
1777
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1778

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

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

    
1791
enabled_any $THREADS_LIST && enable threads
1792

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

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

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

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

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

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

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

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

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

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

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

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

    
1963

    
1964

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

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

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

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

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

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

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

    
2013

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

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

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

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

    
2076

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

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

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

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

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

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

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

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

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

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