configure 119 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

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
103
  --disable-all            disable building components, libraries and programs
104

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

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

Individual component options:
138
  --disable-everything     disable all components listed below
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
  --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
163
  --enable-indev=NAME      enable input device NAME
164 165
  --disable-indev=NAME     disable input device NAME
  --disable-indevs         disable input devices
166 167
  --enable-outdev=NAME     enable output device NAME
  --disable-outdev=NAME    disable output device NAME
168 169 170 171 172 173 174 175 176
  --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
177
  --enable-frei0r          enable frei0r video filtering
178
  --enable-gnutls          enable gnutls [no]
179
  --enable-libcdio         enable audio CD grabbing with libcdio
180 181
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
182 183
  --enable-libfaac         enable AAC encoding via libfaac [no]
  --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
184
  --enable-libfreetype     enable libfreetype [no]
185
  --enable-libgsm          enable GSM de/encoding via libgsm [no]
186
  --enable-libilbc         enable iLBC de/encoding via libilbc [no]
187
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
188 189 190
  --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]
191
  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
192
  --enable-libopus         enable Opus decoding via libopus [no]
193
  --enable-libpulse        enable Pulseaudio input via libpulse [no]
194
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
195 196
  --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
  --enable-libspeex        enable Speex de/encoding via libspeex [no]
197
  --enable-libtheora       enable Theora encoding via libtheora [no]
198
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
199
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
200 201
  --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
  --enable-libvpx          enable VP8 de/encoding via libvpx [no]
202
  --enable-libx264         enable H.264 encoding via x264 [no]
203
  --enable-libxavs         enable AVS encoding via xavs [no]
204 205
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
206
  --enable-openssl         enable openssl [no]
207 208 209 210 211 212 213 214 215 216
  --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
217
  --toolchain=NAME         set tool defaults according to NAME
218
  --nm=NM                  use nm tool
219
  --ar=AR                  use archive tool AR [$ar_default]
220 221
  --as=AS                  use assembler AS [$as_default]
  --cc=CC                  use C compiler CC [$cc_default]
222
  --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
223 224 225
  --ld=LD                  use linker LD
  --host-cc=HOSTCC         use host C compiler HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
226
  --host-ld=HOSTLD         use host linker HOSTLD
227 228
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  --host-libs=HLIBS        use libs HLIBS when linking for host
229
  --host-os=OS             compiler host OS [$target_os]
230 231 232 233
  --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 []
234
  --optflags=OPTFLAGS      override optimization-related compiler flags
235
  --build-suffix=SUFFIX    library name suffix []
236
  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
237 238 239
  --arch=ARCH              select architecture [$arch]
  --cpu=CPU                select the minimum required CPU (affects
                           instruction selection, may crash on older CPUs)
240 241
  --enable-pic             build position-independent code
  --enable-sram            allow use of on-chip SRAM
242
  --enable-thumb           compile for Thumb instruction set
243 244 245 246 247 248
  --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
249
  --enable-lto             use link-time optimization
250 251

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

275
Developer options (useful when working on Libav itself):
276 277 278 279
  --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
280
  --samples=PATH           location of test samples for FATE, if not set use
281
                           \$LIBAV_SAMPLES at make invocation time.
282 283
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
284 285 286 287 288 289 290 291
  --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
292 293 294

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

298 299
quotes='""'

300
log(){
301
    echo "$@" >> $logfile
302 303
}

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

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

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

320 321 322
die(){
    echolog "$@"
    cat <<EOF
323

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

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

347
tolower(){
348
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
349 350
}

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

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

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

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

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

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

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

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

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

409 410 411 412 413 414 415 416 417 418
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')
}

419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437
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
}

438 439 440 441 442 443 444 445
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

446 447 448 449 450 451 452 453
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

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

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

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

enable_deep(){
    do_enable_deep $*
    enable $*
}

484 485 486 487 488
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

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

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

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

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

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

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

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

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

539
do_check_deps(){
540
    for cfg; do
541
        cfg="${cfg#!}"
542 543 544
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking
545
        append allopts $cfg
546

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

554
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
555
        do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
556
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
557

558 559
        [ -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
560 561
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
562
        disabled_any $dep_sel && disable $cfg
563

564
        if enabled $cfg; then
565
            enable_deep $dep_sel
566
            enable_deep_weak $dep_sgs
567 568
        fi

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

573 574 575 576 577 578 579 580 581 582 583 584
check_deps(){
    unset allopts

    do_check_deps "$@"

    for cfg in $allopts; do
        enabled $cfg || continue
        eval dep_extralibs="\$${cfg}_extralibs"
        test -n "$dep_extralibs" && add_extralibs $dep_extralibs
    done
}

585 586
print_config(){
    pfx=$1
587 588
    files=$2
    shift 2
589 590 591 592 593 594 595 596 597 598 599 600 601 602
    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\$/) {
603
                    n = -v ? \"\" : \"!\";
604 605 606 607
                    printf(\"%s%s=yes\\n\", n, c) >>file;
                }
            }
        }"
608 609
}

610 611 612 613
print_enabled(){
    suf=$1
    shift
    for v; do
614
        enabled $v && printf "%s\n" ${v%$suf};
615 616 617
    done
}

618 619 620 621 622 623
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

624 625 626 627 628 629
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

630
add_cppflags(){
631
    append CPPFLAGS "$@"
632 633
}

634
add_cflags(){
635
    append CFLAGS $($cflags_filter "$@")
636 637
}

638
add_asflags(){
639
    append ASFLAGS $($asflags_filter "$@")
640 641
}

642
add_ldflags(){
643
    append LDFLAGS $($ldflags_filter "$@")
644 645 646
}

add_extralibs(){
647
    prepend extralibs $($ldflags_filter "$@")
648 649
}

650 651 652 653 654 655 656 657
add_host_cflags(){
    append host_cflags $($host_cflags_filter "$@")
}

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

658 659 660 661 662 663
add_compat(){
    append compat_objs $1
    shift
    map 'add_cppflags -D$v' "$@"
}

664
check_cmd(){
665
    log "$@"
666
    "$@" >> $logfile 2>&1
667 668
}

669 670 671 672
cc_o(){
    eval printf '%s\\n' $CC_O
}

673 674 675 676
cc_e(){
    eval printf '%s\\n' $CC_E
}

677
check_cc(){
678
    log check_cc "$@"
679
    cat > $TMPC
680
    log_file $TMPC
681
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
682 683 684 685
}

check_cpp(){
    log check_cpp "$@"
686
    cat > $TMPC
687
    log_file $TMPC
688
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
689 690
}

691 692 693 694
as_o(){
    eval printf '%s\\n' $AS_O
}

695 696
check_as(){
    log check_as "$@"
697 698 699
    cat > $TMPS
    log_file $TMPS
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
700 701
}

702 703
check_inline_asm(){
    log check_inline_asm "$@"
704
    name="$1"
705
    code="$2"
706
    shift 2
707
    disable $name
708
    check_cc "$@" <<EOF && enable $name
709
void foo(void){ __asm__ volatile($code); }
710 711 712
EOF
}

713 714 715 716 717 718
check_insn(){
    log check_insn "$@"
    check_inline_asm ${1}_inline "\"$2\""
    echo "$2" | check_as && enable ${1}_external || disable ${1}_external
}

Loren Merritt's avatar
Loren Merritt committed
719 720 721 722 723 724 725 726
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

727 728 729 730
ld_o(){
    eval printf '%s\\n' $LD_O
}

731
check_ld(){
732
    log check_ld "$@"
733 734
    flags=$(filter_out '-l*' "$@")
    libs=$(filter '-l*' "$@")
735
    check_cc $($cflags_filter $flags) || return
736 737
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
738
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
739 740
}

741 742 743 744 745 746 747 748 749 750 751 752 753 754
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 "$@"
}

755 756
check_cppflags(){
    log check_cppflags "$@"
757
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
758 759 760 761
int x;
EOF
}

762
check_cflags(){
763
    log check_cflags "$@"
764
    set -- $($cflags_filter "$@")
765
    check_cc "$@" <<EOF && append CFLAGS "$@"
766 767 768 769
int x;
EOF
}

770 771 772
test_ldflags(){
    log test_ldflags "$@"
    check_ld "$@" <<EOF
773
int main(void){ return 0; }
774 775 776
EOF
}

777 778 779 780 781
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

782
check_header(){
783
    log check_header "$@"
784 785
    header=$1
    shift
786 787
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
788 789 790 791 792 793
#include <$header>
int x;
EOF
}

check_func(){
794
    log check_func "$@"
795 796
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
797 798
    disable $func
    check_ld "$@" <<EOF && enable $func
799
extern int $func();
800
int main(void){ $func(); }
801 802 803
EOF
}

804
check_mathfunc(){
805
    log check_mathfunc "$@"
806
    func=$1
807 808 809
    narg=$2
    shift 2
    test $narg = 2 && args="f, g" || args="f"
810 811 812
    disable $func
    check_ld "$@" <<EOF && enable $func
#include <math.h>
813
float foo(float f, float g) { return $func($args); }
814
int main(void){ return 0; }
815 816 817
EOF
}

818 819
check_func_headers(){
    log check_func_headers "$@"
820
    headers=$1
821
    funcs=$2
822
    shift 2
823 824 825 826 827 828 829 830 831
    {
        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
832 833
}

834 835 836 837
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
838
    shift 2
839
    check_cpp "$@" <<EOF
840 841 842 843 844 845 846
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

847 848 849 850 851
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
852
    check_header $header && check_func $func "$@" && add_extralibs "$@"
853 854
}

855 856 857
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
858
    funcs="$2"
859
    shift 2
860
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
861 862
}

863 864 865 866 867 868 869 870 871 872 873 874 875 876
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
}

877
check_exec(){
878
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
879 880
}

881
check_exec_crash(){
882
    code=$(cat)
883 884 885 886 887 888 889

    # 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.

890
    (check_exec "$@") >> $logfile 2>&1 <<EOF
891 892 893 894
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
895 896 897
int foo(void){
    $code
}
Diego Biurrun's avatar
Diego Biurrun committed
898
int main(void){
899 900 901 902 903 904
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
905
    foo();
906 907 908 909
}
EOF
}

910 911 912 913 914
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
915
    disable_safe "$type"
916
    check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
917 918
}

919 920 921 922 923 924 925
check_struct(){
    log check_type "$@"
    headers=$1
    struct=$2
    member=$3
    shift 3
    disable_safe "${struct}_${member}"
926 927
    check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
        enable_safe "${struct}_${member}"
928 929
}

930 931 932 933 934 935
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
936 937
}

938 939 940 941 942 943 944 945
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

946 947 948 949 950 951 952
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)
}

953 954 955 956
hostcc_o(){
    eval printf '%s\\n' $HOSTCC_O
}

957 958 959 960
check_host_cc(){
    log check_host_cc "$@"
    cat > $TMPC
    log_file $TMPC
961
    check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
962 963 964 965
}

check_host_cflags(){
    log check_host_cflags "$@"
966
    set -- $($host_cflags_filter "$@")
967 968 969 970 971
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

972 973 974 975 976 977
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

978
cp_if_changed(){
979 980
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
Mans Rullgard's avatar
Mans Rullgard committed
981
    $cp_f "$1" "$2"
982 983
}

984 985 986
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

987 988 989 990 991
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
992
    filters
993
    hwaccels
994
    indevs
995
    muxers
996
    outdevs
997 998 999 1000
    parsers
    protocols
"

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
LIBRARY_LIST="
    avcodec
    avdevice
    avfilter
    avformat
    avresample
    avutil
    swscale
"

1011 1012 1013 1014 1015 1016 1017
PROGRAM_LIST="
    avconv
    avplay
    avprobe
    avserver
"

1018 1019
CONFIG_LIST="
    $COMPONENT_LIST
1020
    $LIBRARY_LIST
1021
    $PROGRAM_LIST
1022
    avisynth
1023
    bzlib
1024
    dct
1025
    doc
1026
    dwt
1027
    dxva2
1028
    fft
Stefano Sabatini's avatar
Stefano Sabatini committed
1029
    frei0r
1030
    gnutls
1031
    gpl
1032
    gray
Aurelien Jacobs's avatar
Aurelien Jacobs committed
1033
    hardcoded_tables
1034
    libcdio
Ramiro Polla's avatar
Ramiro Polla committed
1035
    libdc1394
1036
    libfaac
1037
    libfdk_aac
1038
    libfreetype
1039
    libgsm
1040
    libilbc
1041
    libmp3lame
1042 1043
    libopencore_amrnb
    libopencore_amrwb
1044
    libopencv
1045
    libopenjpeg
1046
    libopus
1047
    libpulse
1048
    librtmp
1049
    libschroedinger
1050
    libspeex
1051
    libtheora
1052
    libvo_aacenc
1053
    libvo_amrwbenc
1054
    libvorbis
James Zern's avatar
James Zern committed
1055
    libvpx
1056
    libx264
1057
    libxavs
1058
    libxvid
1059
    lsp
1060
    lzo
1061
    mdct
1062 1063
    memalign_hack
    network
1064
    nonfree
1065
    openssl
1066
    pic
1067
    rdft
1068
    runtime_cpudetect
1069
    safe_bitstream_reader
1070
    shared
1071
    small
1072
    sram
1073
    static
1074
    swscale_alpha
1075
    thumb
1076
    vaapi
1077
    vda
1078
    vdpau
1079
    version3
1080
    xmm_clobber_test
1081
    x11grab
1082
    zlib
1083
"
1084

1085 1086 1087 1088 1089
THREADS_LIST='
    pthreads
    w32threads
'

1090
ARCH_LIST='
1091
    aarch64
1092
    alpha
1093
    arm
1094 1095 1096
    avr32
    avr32_ap
    avr32_uc
1097 1098 1099 1100
    bfin
    ia64
    m68k
    mips
1101
    mips64
1102
    parisc
1103
    ppc
1104
    ppc64
1105 1106 1107 1108
    s390
    sh4
    sparc
    sparc64
1109 1110
    tilegx
    tilepro
1111
    tomi
1112 1113 1114 1115 1116
    x86
    x86_32
    x86_64
'

1117 1118 1119 1120 1121
ARCH_EXT_LIST_ARM='
    armv5te
    armv6
    armv6t2
    neon
1122
    vfp
1123 1124 1125
    vfpv3
'

1126
ARCH_EXT_LIST_X86='
1127
    amd3dnow
1128
    amd3dnowext
1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141
    avx
    fma4
    mmx
    mmxext
    sse
    sse2
    sse3
    sse4
    sse42
    ssse3
'

ARCH_EXT_LIST="
1142
    $ARCH_EXT_LIST_ARM
1143 1144
    $ARCH_EXT_LIST_X86
    altivec
1145
    ppc4xx
1146
    vis
1147
"
1148

1149 1150 1151 1152 1153 1154
HAVE_LIST_CMDLINE='
    inline_asm
    symver
    yasm
'

1155 1156
HAVE_LIST_PUB='
    bigendian
1157
    fast_unaligned
1158 1159
'

1160
MATH_FUNCS="
1161 1162
    atanf
    atan2f
1163
    cbrtf
1164
    cosf
1165 1166
    exp2
    exp2f
1167
    expf
1168 1169
    isinf
    isnan
1170
    ldexpf
1171 1172 1173 1174
    llrint
    llrintf
    log2
    log2f
1175
    log10f
1176 1177
    lrint
    lrintf
1178
    powf
1179 1180 1181
    rint
    round
    roundf
1182
    sinf
1183 1184 1185 1186
    trunc
    truncf
"

1187 1188
HAVE_LIST="
    $ARCH_EXT_LIST
1189 1190
    $(add_suffix _external $ARCH_EXT_LIST)
    $(add_suffix _inline   $ARCH_EXT_LIST)
1191
    $HAVE_LIST_CMDLINE
1192
    $HAVE_LIST_PUB
1193
    $THREADS_LIST
1194
    $MATH_FUNCS
1195
    aligned_malloc
1196
    aligned_stack
1197
    alsa_asoundlib_h
1198
    altivec_h
1199
    arpa_inet_h
1200
    asm_mod_q
1201
    asm_mod_y
1202
    attribute_may_alias
1203
    attribute_packed
1204 1205
    cdio_paranoia_h
    cdio_paranoia_paranoia_h
Alex Beregszaszi's avatar
Alex Beregszaszi committed
1206
    closesocket
1207
    cmov
1208
    CommandLineToArgvW
1209
    cpunop
1210
    CryptGenRandom
1211
    dcbzl
1212 1213 1214 1215
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_bktr_ioctl_bt848_h
1216
    dev_video_meteor_ioctl_meteor_h
1217
    direct_h
1218
    dlfcn_h
1219
    dlopen
1220
    dos_paths
1221
    dxva_h
1222 1223
    ebp_available
    ebx_available
1224
    fast_64bit
1225
    fast_clz
1226
    fast_cmov
Måns Rullgård's avatar
Måns Rullgård committed
1227
    fcntl
Måns Rullgård's avatar
Måns Rullgård committed
1228
    fork
1229
    getaddrinfo
1230
    gethrtime
1231
    getopt
1232
    GetProcessAffinityMask
1233
    GetProcessMemoryInfo
1234
    GetProcessTimes
1235
    GetSystemTimeAsFileTime
Ramiro Polla's avatar
Ramiro Polla committed
1236
    getrusage
1237
    getservbyport
1238
    gettimeofday
1239
    gnu_as
1240
    ibm_asm
1241
    inet_aton
1242
    io_h
1243
    isatty
1244
    jack_port_get_latency_range
Måns Rullgård's avatar
Måns Rullgård committed
1245
    ldbrx
1246 1247
    libdc1394_1
    libdc1394_2
1248 1249
    local_aligned_16
    local_aligned_8
1250
    localtime_r
1251
    loongson
1252 1253