configure 115 KB
Newer Older
1
#!/bin/sh
2
#
3
# Libav configure script
4
#
Diego Biurrun's avatar
Diego Biurrun committed
5 6 7
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
8
#
9

10
# Prevent locale nonsense from breaking basic text processing.
11 12
LC_ALL=C
export LC_ALL
13

14
# make sure we are running under a compatible shell
15 16 17
# try to make this part work with most shells

try_exec(){
18
    echo "Trying shell $1"
19
    type "$1" > /dev/null 2>&1 && exec "$@"
20 21
}

22
unset foo
23
(: ${foo%%bar}) 2> /dev/null
24 25
E1="$?"

26
(: ${foo?}) 2> /dev/null
27 28 29 30
E2="$?"

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

57 58
test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH

59
show_help(){
60
    cat <<EOF
61 62 63
Usage: configure [options]
Options: [defaults in brackets after descriptions]

64
Help options:
65
  --help                   print this message
66 67 68 69 70 71 72 73 74 75 76 77 78
  --list-decoders          show all available decoders
  --list-encoders          show all available encoders
  --list-hwaccels          show all available hardware accelerators
  --list-demuxers          show all available demuxers
  --list-muxers            show all available muxers
  --list-parsers           show all available parsers
  --list-protocols         show all available protocols
  --list-bsfs              show all available bitstream filters
  --list-indevs            show all available input devices
  --list-outdevs           show all available output devices
  --list-filters           show all available filters

Standard options:
79
  --logfile=FILE           log tests and output to FILE [config.log]
80 81 82
  --disable-logging        do not log configure debug information
  --prefix=PREFIX          install in PREFIX [$prefix]
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
83
  --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
84 85 86 87 88
  --libdir=DIR             install libs in DIR [PREFIX/lib]
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
  --incdir=DIR             install includes in DIR [PREFIX/include]
  --mandir=DIR             install man page in DIR [PREFIX/share/man]

89
Licensing options:
90 91 92 93 94
  --enable-gpl             allow use of GPL code, the resulting libs
                           and binaries will be under GPL [no]
  --enable-version3        upgrade (L)GPL to version 3 [no]
  --enable-nonfree         allow use of nonfree code, the resulting libs
                           and binaries will be unredistributable [no]
95 96 97 98 99 100 101 102 103

Configuration options:
  --disable-static         do not build static libraries [no]
  --enable-shared          build shared libraries [no]
  --enable-small           optimize for size instead of speed
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
  --enable-gray            enable full grayscale support (slower color)
  --disable-swscale-alpha  disable alpha channel support in swscale

104 105
Program options:
  --disable-programs       do not build command line programs
106
  --disable-avconv         disable avconv build
Anton Khirnov's avatar
Anton Khirnov committed
107
  --disable-avplay         disable avplay build
108
  --disable-avprobe        disable avprobe build
109
  --disable-avserver       disable avserver build
110 111 112

Component options:
  --disable-doc            do not build documentation
113 114 115 116
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
  --disable-swscale        disable libswscale build
117
  --disable-avfilter       disable video filter support [no]
Justin Ruggles's avatar
Justin Ruggles committed
118
  --disable-avresample     disable libavresample build [no]
119
  --disable-pthreads       disable pthreads [auto]
120
  --disable-w32threads     disable Win32 threads [auto]
121 122
  --enable-x11grab         enable X11 grabbing [no]
  --disable-network        disable network support [no]
123
  --disable-dct            disable DCT code
124 125
  --disable-dwt            disable DWT code
  --disable-lsp            disable LSP code
126
  --disable-lzo            disable LZO decoder code
127 128
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
129 130
  --disable-fft            disable FFT code
  --enable-dxva2           enable DXVA2 code
131
  --enable-vaapi           enable VAAPI code
132
  --enable-vda             enable VDA code
133
  --enable-vdpau           enable VDPAU code
134 135

Individual component options:
136
  --disable-everything     disable all components listed below
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
  --disable-encoder=NAME   disable encoder NAME
  --enable-encoder=NAME    enable encoder NAME
  --disable-encoders       disable all encoders
  --disable-decoder=NAME   disable decoder NAME
  --enable-decoder=NAME    enable decoder NAME
  --disable-decoders       disable all decoders
  --disable-hwaccel=NAME   disable hwaccel NAME
  --enable-hwaccel=NAME    enable hwaccel NAME
  --disable-hwaccels       disable all hwaccels
  --disable-muxer=NAME     disable muxer NAME
  --enable-muxer=NAME      enable muxer NAME
  --disable-muxers         disable all muxers
  --disable-demuxer=NAME   disable demuxer NAME
  --enable-demuxer=NAME    enable demuxer NAME
  --disable-demuxers       disable all demuxers
  --enable-parser=NAME     enable parser NAME
  --disable-parser=NAME    disable parser NAME
  --disable-parsers        disable all parsers
  --enable-bsf=NAME        enable bitstream filter NAME
  --disable-bsf=NAME       disable bitstream filter NAME
  --disable-bsfs           disable all bitstream filters
  --enable-protocol=NAME   enable protocol NAME
  --disable-protocol=NAME  disable protocol NAME
  --disable-protocols      disable all protocols
161
  --enable-indev=NAME      enable input device NAME
162 163
  --disable-indev=NAME     disable input device NAME
  --disable-indevs         disable input devices
164 165
  --enable-outdev=NAME     enable output device NAME
  --disable-outdev=NAME    disable output device NAME
166 167 168 169 170 171 172 173 174
  --disable-outdevs        disable output devices
  --disable-devices        disable all devices
  --enable-filter=NAME     enable filter NAME
  --disable-filter=NAME    disable filter NAME
  --disable-filters        disable all filters

External library support:
  --enable-avisynth        enable reading of AVISynth script files [no]
  --enable-bzlib           enable bzlib [autodetect]
Stefano Sabatini's avatar
Stefano Sabatini committed
175
  --enable-frei0r          enable frei0r video filtering
176
  --enable-gnutls          enable gnutls [no]
177
  --enable-libcdio         enable audio CD grabbing with libcdio
178 179
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
180 181
  --enable-libfaac         enable AAC encoding via libfaac [no]
  --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
182
  --enable-libfreetype     enable libfreetype [no]
183
  --enable-libgsm          enable GSM de/encoding via libgsm [no]
184
  --enable-libilbc         enable iLBC de/encoding via libilbc [no]
185
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
186 187 188
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
  --enable-libopencv       enable video filtering via libopencv [no]
189
  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
190
  --enable-libopus         enable Opus decoding via libopus [no]
191
  --enable-libpulse        enable Pulseaudio input via libpulse [no]
192
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
193 194
  --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
  --enable-libspeex        enable Speex de/encoding via libspeex [no]
195
  --enable-libtheora       enable Theora encoding via libtheora [no]
196
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
197
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
198 199
  --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
  --enable-libvpx          enable VP8 de/encoding via libvpx [no]
200
  --enable-libx264         enable H.264 encoding via x264 [no]
201
  --enable-libxavs         enable AVS encoding via xavs [no]
202 203
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
204
  --enable-openssl         enable openssl [no]
205 206 207 208 209 210 211 212 213 214
  --enable-zlib            enable zlib [autodetect]

Advanced options (experts only):
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
  --enable-cross-compile   assume a cross-compiler is used
  --sysroot=PATH           root of cross-build tree
  --sysinclude=PATH        location of cross-build system headers
  --target-os=OS           compiler targets OS [$target_os]
  --target-exec=CMD        command to run executables on target
  --target-path=DIR        path to view of build directory on target
215
  --toolchain=NAME         set tool defaults according to NAME
216
  --nm=NM                  use nm tool
217
  --ar=AR                  use archive tool AR [$ar_default]
218 219
  --as=AS                  use assembler AS [$as_default]
  --cc=CC                  use C compiler CC [$cc_default]
220
  --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
221 222 223
  --ld=LD                  use linker LD
  --host-cc=HOSTCC         use host C compiler HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
224
  --host-ld=HOSTLD         use host linker HOSTLD
225 226
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  --host-libs=HLIBS        use libs HLIBS when linking for host
227
  --host-os=OS             compiler host OS [$target_os]
228 229 230 231
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
  --extra-version=STRING   version string suffix []
232
  --optflags=OPTFLAGS      override optimization-related compiler flags
233
  --build-suffix=SUFFIX    library name suffix []
234
  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
235 236 237
  --arch=ARCH              select architecture [$arch]
  --cpu=CPU                select the minimum required CPU (affects
                           instruction selection, may crash on older CPUs)
238 239
  --enable-pic             build position-independent code
  --enable-sram            allow use of on-chip SRAM
240
  --enable-thumb           compile for Thumb instruction set
241 242 243 244 245 246
  --disable-symver         disable symbol versioning
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
  --disable-safe-bitstream-reader
                           disable buffer boundary checking in bitreaders
                           (faster, but may crash)
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
247
  --enable-lto             use link-time optimization
248 249

Optimization options (experts only):
250
  --disable-asm            disable all assembler optimizations
251 252 253 254
  --disable-altivec        disable AltiVec optimizations
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
255
  --disable-mmxext         disable MMXEXT optimizations
256
  --disable-sse            disable SSE optimizations
257 258
  --disable-sse2           disable SSE2 optimizations
  --disable-sse3           disable SSE3 optimizations
259
  --disable-ssse3          disable SSSE3 optimizations
260 261
  --disable-sse4           disable SSE4 optimizations
  --disable-sse42          disable SSE4.2 optimizations
262
  --disable-avx            disable AVX optimizations
263
  --disable-fma4           disable FMA4 optimizations
264 265 266 267
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
  --disable-armvfp         disable ARM VFP optimizations
268
  --disable-neon           disable NEON optimizations
269
  --disable-vis            disable VIS optimizations
270
  --disable-inline-asm     disable use of inline assembler
271 272
  --disable-yasm           disable use of yasm assembler

273
Developer options (useful when working on Libav itself):
274 275 276 277
  --disable-debug          disable debugging symbols
  --enable-debug=LEVEL     set the debug level [$debuglevel]
  --disable-optimizations  disable compiler optimizations
  --enable-extra-warnings  enable more compiler warnings
278
  --samples=PATH           location of test samples for FATE, if not set use
279
                           \$LIBAV_SAMPLES at make invocation time.
280 281
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
282 283 284 285 286 287 288 289
  --enable-random          randomly enable/disable components
  --disable-random
  --enable-random=LIST     randomly enable/disable specific components or
  --disable-random=LIST    component groups. LIST is a comma-separated list
                           of NAME[:PROB] entries where NAME is a component
                           (group) and PROB the probability associated with
                           NAME (default 0.5).
  --random-seed=VALUE      seed value for --enable/disable-random
290 291 292

NOTE: Object files are built at the place where configure is launched.
EOF
293
  exit 0
294
}
295

296 297
quotes='""'

298
log(){
299
    echo "$@" >> $logfile
300 301
}

302
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
303
    log BEGIN $1
304
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
305 306 307
    log END $1
}

308
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
309
    log "$@"
310
    echo "$@"
311 312
}

313 314 315 316 317
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

318 319 320
die(){
    echolog "$@"
    cat <<EOF
321

322
If you think configure made a mistake, make sure you are using the latest
323
version from Git.  If the latest version fails, report the problem to the
324
libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
325
EOF
326
    if disabled logging; then
327
        cat <<EOF
328 329
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
330 331
EOF
    else
332
        cat <<EOF
333 334
Include the log file "$logfile" produced by configure as this will help
solving the problem.
335 336
EOF
    fi
337 338 339
    exit 1
}

340
# Avoid locale weirdness, besides we really just want to translate ASCII.
341
toupper(){
342
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
343 344
}

345
tolower(){
346
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
347 348
}

349 350 351 352
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

353 354
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
355
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
356 357 358
    echo "$v"
}

359 360 361 362
cleanws(){
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
}

363 364 365 366
filter(){
    pat=$1
    shift
    for v; do
367
        eval "case $v in $pat) echo $v ;; esac"
368 369 370
    done
}

371 372 373 374 375 376 377 378
filter_out(){
    pat=$1
    shift
    for v; do
        eval "case $v in $pat) ;; *) echo $v ;; esac"
    done
}

379 380 381
map(){
    m=$1
    shift
382
    for v; do eval $m; done
383 384
}

385 386 387 388 389 390
add_suffix(){
    suffix=$1
    shift
    for v; do echo ${v}${suffix}; done
}

391 392 393 394 395 396 397 398
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

399 400 401 402 403 404 405 406
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

407 408 409 410 411 412 413 414 415 416
set_safe(){
    var=$1
    shift
    eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
}

get_safe(){
    eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
}

417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
pushvar(){
    for var in $*; do
        eval level=\${${var}_level:=0}
        eval ${var}_${level}="\$$var"
        eval ${var}_level=$(($level+1))
    done
}

popvar(){
    for var in $*; do
        eval level=\${${var}_level:-0}
        test $level = 0 && continue
        eval level=$(($level-1))
        eval $var="\${${var}_${level}}"
        eval ${var}_level=$level
        eval unset ${var}_${level}
    done
}

436 437 438 439 440 441 442 443
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

444 445 446 447 448 449 450 451
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

452
enable_safe(){
453 454 455
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
456 457 458
}

disable_safe(){
459 460 461
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
462 463
}

464 465 466 467
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
468 469
        eval sgs="\$${var}_suggest"
        pushvar var sgs
470
        enable_deep $sel
471 472
        popvar sgs
        enable_deep_weak $sgs
473 474 475 476 477 478 479 480 481
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

482 483 484 485 486
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

487
enabled(){
488 489
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
490 491
}

492
disabled(){
493 494
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
495 496
}

497 498 499 500 501 502
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

503 504 505 506 507 508
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

509 510 511 512 513 514
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

515 516 517 518
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
519
    return 1
520 521
}

522 523
set_default(){
    for opt; do
524
        eval : \${$opt:=\$${opt}_default}
525 526 527
    done
}

528 529 530 531 532 533 534 535 536
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

537 538
check_deps(){
    for cfg; do
539
        cfg="${cfg#!}"
540 541 542 543
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

544 545
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
546
        eval dep_sel="\$${cfg}_select"
547
        eval dep_sgs="\$${cfg}_suggest"
548 549
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
550

551 552 553
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
554

555 556
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
Måns Rullgård's avatar
Måns Rullgård committed
557 558
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
559
        disabled_any $dep_sel && disable $cfg
560

561 562 563
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
564
            enable_deep $dep_sel
565
            enable_deep_weak $dep_sgs
566 567
        fi

568
        disable ${cfg}_checking
569 570 571
    done
}

572 573
print_config(){
    pfx=$1
574 575
    files=$2
    shift 2
576 577 578 579 580 581 582 583 584 585 586 587 588 589
    map 'eval echo "$v \${$v:-no}"' "$@" |
    awk "BEGIN { split(\"$files\", files) }
        {
            c = \"$pfx\" toupper(\$1);
            v = \$2;
            sub(/yes/, 1, v);
            sub(/no/,  0, v);
            for (f in files) {
                file = files[f];
                if (file ~ /\\.h\$/) {
                    printf(\"#define %s %d\\n\", c, v) >>file;
                } else if (file ~ /\\.asm\$/) {
                    printf(\"%%define %s %d\\n\", c, v) >>file;
                } else if (file ~ /\\.mak\$/) {
590
                    n = -v ? \"\" : \"!\";
591 592 593 594
                    printf(\"%s%s=yes\\n\", n, c) >>file;
                }
            }
        }"
595 596
}

597 598 599 600
print_enabled(){
    suf=$1
    shift
    for v; do
601
        enabled $v && printf "%s\n" ${v%$suf};
602 603 604
    done
}

605 606 607 608 609 610
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

611 612 613 614 615 616
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

617
add_cppflags(){
618
    append CPPFLAGS "$@"
619 620
}

621
add_cflags(){
622
    append CFLAGS $($cflags_filter "$@")
623 624
}

625
add_asflags(){
626
    append ASFLAGS $($asflags_filter "$@")
627 628
}

629
add_ldflags(){
630
    append LDFLAGS $($ldflags_filter "$@")
631 632 633
}

add_extralibs(){
634
    prepend extralibs $($ldflags_filter "$@")
635 636
}

637 638 639 640 641 642 643 644
add_host_cflags(){
    append host_cflags $($host_cflags_filter "$@")
}

add_host_ldflags(){
    append host_ldflags $($host_ldflags_filter "$@")
}

645 646 647 648 649 650
add_compat(){
    append compat_objs $1
    shift
    map 'add_cppflags -D$v' "$@"
}

651
check_cmd(){
652
    log "$@"
653
    "$@" >> $logfile 2>&1
654 655
}

656 657 658 659
cc_o(){
    eval printf '%s\\n' $CC_O
}

660 661 662 663
cc_e(){
    eval printf '%s\\n' $CC_E
}

664
check_cc(){
665
    log check_cc "$@"
666
    cat > $TMPC
667
    log_file $TMPC
668
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
669 670 671 672
}

check_cpp(){
    log check_cpp "$@"
673
    cat > $TMPC
674
    log_file $TMPC
675
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
676 677
}

678 679 680 681
as_o(){
    eval printf '%s\\n' $AS_O
}

682 683 684 685
check_as(){
    log check_as "$@"
    cat > $TMPC
    log_file $TMPC
686
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
687 688
}

689 690
check_inline_asm(){
    log check_inline_asm "$@"
691
    name="$1"
692
    code="$2"
693
    shift 2
694 695
    disable $name
    check_as "$@" <<EOF && enable $name
696
void foo(void){ __asm__ volatile($code); }
697 698 699
EOF
}

Loren Merritt's avatar
Loren Merritt committed
700 701 702 703 704 705 706 707
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

708 709 710 711
ld_o(){
    eval printf '%s\\n' $LD_O
}

712
check_ld(){
713
    log check_ld "$@"
714 715
    flags=$(filter_out '-l*' "$@")
    libs=$(filter '-l*' "$@")
716
    check_cc $($cflags_filter $flags) || return
717 718
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
719
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
720 721
}

722 723 724 725 726 727 728 729 730 731 732 733 734 735
check_code(){
    log check_code "$@"
    check=$1
    headers=$2
    code=$3
    shift 3
    {
        for hdr in $headers; do
            echo "#include <$hdr>"
        done
        echo "int main(void) { $code; return 0; }"
    } | check_$check "$@"
}

736 737
check_cppflags(){
    log check_cppflags "$@"
738
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
739 740 741 742
int x;
EOF
}

743
check_cflags(){
744
    log check_cflags "$@"
745
    set -- $($cflags_filter "$@")
746
    check_cc "$@" <<EOF && append CFLAGS "$@"
747 748 749 750
int x;
EOF
}

751 752 753
test_ldflags(){
    log test_ldflags "$@"
    check_ld "$@" <<EOF
754
int main(void){ return 0; }
755 756 757
EOF
}

758 759 760 761 762
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

763
check_header(){
764
    log check_header "$@"
765 766
    header=$1
    shift
767 768
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
769 770 771 772 773 774
#include <$header>
int x;
EOF
}

check_func(){
775
    log check_func "$@"
776 777
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
778 779
    disable $func
    check_ld "$@" <<EOF && enable $func
780
extern int $func();
781
int main(void){ $func(); }
782 783 784
EOF
}

785
check_mathfunc(){
786
    log check_mathfunc "$@"
787
    func=$1
788 789 790
    narg=$2
    shift 2
    test $narg = 2 && args="f, g" || args="f"
791 792 793
    disable $func
    check_ld "$@" <<EOF && enable $func
#include <math.h>
794
float foo(float f, float g) { return $func($args); }
795
int main(void){ return 0; }
796 797 798
EOF
}

799 800
check_func_headers(){
    log check_func_headers "$@"
801
    headers=$1
802
    funcs=$2
803
    shift 2
804 805 806 807 808 809 810 811 812
    {
        for hdr in $headers; do
            echo "#include <$hdr>"
        done
        for func in $funcs; do
            echo "long check_$func(void) { return (long) $func; }"
        done
        echo "int main(void) { return 0; }"
    } | check_ld "$@" && enable $funcs && enable_safe $headers
813 814
}

815 816 817 818
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
819
    shift 2
820
    check_cpp "$@" <<EOF
821 822 823 824 825 826 827
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

828 829 830 831 832
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
833
    check_header $header && check_func $func "$@" && add_extralibs "$@"
834 835
}

836 837 838
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
839
    funcs="$2"
840
    shift 2
841
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
842 843
}

844 845 846 847 848 849 850 851 852 853 854 855 856 857
check_pkg_config(){
    log check_pkg_config "$@"
    pkg="$1"
    headers="$2"
    funcs="$3"
    shift 3
    $pkg_config --exists $pkg || return
    pkg_cflags=$($pkg_config --cflags $pkg)
    pkg_libs=$($pkg_config --libs $pkg)
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
        set_safe ${pkg}_cflags $pkg_cflags   &&
        set_safe ${pkg}_libs   $pkg_libs
}

858
check_exec(){
859
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
860 861
}

862
check_exec_crash(){
863
    code=$(cat)
864 865 866 867 868 869 870

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

871
    (check_exec "$@") >> $logfile 2>&1 <<EOF
872 873 874 875
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
876 877 878
int foo(void){
    $code
}
Diego Biurrun's avatar
Diego Biurrun committed
879
int main(void){
880 881 882 883 884 885
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
886
    foo();
887 888 889 890
}
EOF
}

891 892 893 894 895
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
896
    disable_safe "$type"
897
    check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
898 899
}

900 901 902 903 904 905 906
check_struct(){
    log check_type "$@"
    headers=$1
    struct=$2
    member=$3
    shift 3
    disable_safe "${struct}_${member}"
907 908
    check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
        enable_safe "${struct}_${member}"
909 910
}

911 912 913 914 915 916
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
917 918
}

919 920 921 922 923 924 925 926
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

927 928 929 930 931 932 933
require_pkg_config(){
    pkg="$1"
    check_pkg_config "$@" || die "ERROR: $pkg not found"
    add_cflags    $(get_safe ${pkg}_cflags)
    add_extralibs $(get_safe ${pkg}_libs)
}

934 935 936 937
hostcc_o(){
    eval printf '%s\\n' $HOSTCC_O
}

938 939 940 941
check_host_cc(){
    log check_host_cc "$@"
    cat > $TMPC
    log_file $TMPC
942
    check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
943 944 945 946
}

check_host_cflags(){
    log check_host_cflags "$@"
947
    set -- $($host_cflags_filter "$@")
948 949 950 951 952
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

953 954 955 956 957 958
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

959
cp_if_changed(){
960 961
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
Mans Rullgard's avatar
Mans Rullgard committed
962
    $cp_f "$1" "$2"
963 964
}

965 966 967
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

968 969 970 971 972
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
973
    filters
974
    hwaccels
975
    indevs
976
    muxers
977
    outdevs
978 979 980 981
    parsers
    protocols
"

982 983 984 985 986 987 988
PROGRAM_LIST="
    avconv
    avplay
    avprobe
    avserver
"

989 990
CONFIG_LIST="
    $COMPONENT_LIST
991
    $PROGRAM_LIST
992 993
    avcodec
    avdevice
994
    avfilter
995
    avformat
Justin Ruggles's avatar
Justin Ruggles committed
996
    avresample
997
    avisynth
998
    bzlib
999
    dct
1000
    doc
1001
    dwt
1002
    dxva2
1003
    fft
Stefano Sabatini's avatar
Stefano Sabatini committed
1004
    frei0r
1005
    gnutls
1006
    gpl
1007
    gray
Aurelien Jacobs's avatar
Aurelien Jacobs committed
1008
    hardcoded_tables
1009
    libcdio
Ramiro Polla's avatar
Ramiro Polla committed
1010
    libdc1394
1011
    libfaac
1012
    libfdk_aac
1013
    libfreetype
1014
    libgsm
1015
    libilbc
1016
    libmp3lame
1017 1018
    libopencore_amrnb
    libopencore_amrwb
1019
    libopencv
1020
    libopenjpeg
1021
    libopus
1022
    libpulse
1023
    librtmp
1024
    libschroedinger
1025
    libspeex
1026
    libtheora
1027
    libvo_aacenc
1028
    libvo_amrwbenc
1029
    libvorbis
James Zern's avatar
James Zern committed
1030
    libvpx
1031
    libx264
1032
    libxavs
1033
    libxvid
1034
    lsp
1035
    lzo
1036
    mdct
1037 1038
    memalign_hack
    network
1039
    nonfree
1040
    openssl
1041
    pic
1042
    rdft
1043
    runtime_cpudetect
1044
    safe_bitstream_reader
1045
    shared
1046
    small
1047
    sram
1048
    static
1049
    swscale
1050
    swscale_alpha
1051
    thumb
1052
    vaapi
1053
    vda
1054
    vdpau
1055
    version3
1056
    xmm_clobber_test
1057
    x11grab
1058
    zlib
1059
"
1060

1061 1062 1063 1064 1065
THREADS_LIST='
    pthreads
    w32threads
'

1066
ARCH_LIST='
1067
    aarch64
1068
    alpha
1069
    arm
1070 1071 1072
    avr32
    avr32_ap
    avr32_uc
1073 1074 1075 1076
    bfin
    ia64
    m68k
    mips
1077
    mips64
1078
    parisc
1079
    ppc
1080
    ppc64
1081 1082 1083 1084
    s390
    sh4
    sparc
    sparc64
1085 1086
    tilegx
    tilepro
1087
    tomi
1088 1089 1090 1091 1092
    x86
    x86_32
    x86_64
'

1093
ARCH_EXT_LIST_X86='
1094
    amd3dnow
1095
    amd3dnowext
1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110
    avx
    fma4
    mmx
    mmxext
    sse
    sse2
    sse3
    sse4
    sse42
    ssse3
'

ARCH_EXT_LIST="
    $ARCH_EXT_LIST_X86
    altivec
1111
    armv5te
1112
    armv6
1113
    armv6t2
1114
    armvfp
1115
    neon
1116
    ppc4xx
Mans Rullgard's avatar
Mans Rullgard committed
1117
    vfpv3
1118
    vis
1119
"
1120

1121 1122 1123 1124 1125 1126
HAVE_LIST_CMDLINE='
    inline_asm
    symver
    yasm
'

1127 1128
HAVE_LIST_PUB='
    bigendian
1129
    fast_unaligned
1130 1131
'

1132
MATH_FUNCS="
1133 1134
    atanf
    atan2f
1135
    cbrtf
1136
    cosf
1137 1138
    exp2
    exp2f
1139
    expf
1140 1141
    isinf
    isnan
1142
    ldexpf
1143 1144 1145 1146
    llrint
    llrintf
    log2
    log2f
1147
    log10f
1148 1149
    lrint
    lrintf
1150
    powf
1151 1152 1153
    rint
    round
    roundf
1154
    sinf
1155 1156 1157 1158
    trunc
    truncf
"

1159 1160
HAVE_LIST="
    $ARCH_EXT_LIST
1161 1162
    $(add_suffix _external $ARCH_EXT_LIST)
    $(add_suffix _inline   $ARCH_EXT_LIST)
1163
    $HAVE_LIST_CMDLINE
1164
    $HAVE_LIST_PUB
1165
    $THREADS_LIST
1166
    $MATH_FUNCS
1167
    aligned_malloc
1168
    aligned_stack
1169
    alsa_asoundlib_h
1170
    altivec_h
1171
    arpa_inet_h
1172
    asm_mod_q
1173
    asm_mod_y
1174
    attribute_may_alias
1175
    attribute_packed
Alex Beregszaszi's avatar
Alex Beregszaszi committed
1176
    closesocket
1177
    cmov
1178
    cpunop
1179
    CryptGenRandom
1180
    dcbzl
1181 1182 1183 1184
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_bktr_ioctl_bt848_h
1185
    dev_video_meteor_ioctl_meteor_h
1186
    direct_h
1187
    dlfcn_h
1188
    dlopen
1189
    dos_paths
1190
    dxva_h
1191 1192
    ebp_available
    ebx_available
1193
    fast_64bit
1194
    fast_clz
1195
    fast_cmov
Måns Rullgård's avatar
Måns Rullgård committed
1196
    fcntl
Måns Rullgård's avatar
Måns Rullgård committed
1197
    fork
1198
    getaddrinfo
1199
    gethrtime
1200
    getopt
1201
    GetProcessAffinityMask
1202
    GetProcessMemoryInfo
1203
    GetProcessTimes
1204
    GetSystemTimeAsFileTime
Ramiro Polla's avatar
Ramiro Polla committed
1205
    getrusage
1206
    getservbyport
1207
    gettimeofday
1208
    gnu_as
1209
    ibm_asm
1210
    inet_aton
1211
    io_h
1212
    isatty
1213
    jack_port_get_latency_range
Måns Rullgård's avatar
Måns Rullgård committed
1214
    ldbrx
1215 1216
    libdc1394_1
    libdc1394_2
1217 1218
    local_aligned_16
    local_aligned_8
1219
    localtime_r
1220
    loongson
1221 1222
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
1223
    malloc_h
1224
    MapViewOfFile
1225
    memalign
1226
    mkstemp
1227
    mm_empty
1228
    mmap
1229
    mprotect
1230
    msvcrt
1231
    nanosleep
1232
    poll_h
1233
    posix_memalign
1234
    rdtsc
1235
    sched_getaffinity
1236 1237
    sdl
    sdl_video_size
1238