configure 111 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
}

Måns Rullgård's avatar
Måns Rullgård committed
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
typo  
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."
Diego Biurrun's avatar
Diego Biurrun committed
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
show_help(){
58 59 60 61
cat <<EOF
Usage: configure [options]
Options: [defaults in brackets after descriptions]

62
Help options:
63
  --help                   print this message
64 65 66 67 68 69 70 71 72 73 74 75 76
  --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:
77
  --logfile=FILE           log tests and output to FILE [config.log]
78 79 80
  --disable-logging        do not log configure debug information
  --prefix=PREFIX          install in PREFIX [$prefix]
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
81
  --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
82 83 84 85 86
  --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]

87
Licensing options:
88 89 90 91 92
  --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]
93 94 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

Component options:
103
  --disable-doc            do not build documentation
104
  --disable-avconv         disable avconv build
Anton Khirnov's avatar
Anton Khirnov committed
105
  --disable-avplay         disable avplay build
Anton Khirnov's avatar
Anton Khirnov committed
106
  --disable-avprobe        disable avprobe build
Anton Khirnov's avatar
Anton Khirnov committed
107
  --disable-avserver       disable avserver build
108 109 110 111
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
  --disable-swscale        disable libswscale build
112
  --disable-avfilter       disable video filter support [no]
Justin Ruggles's avatar
Justin Ruggles committed
113
  --disable-avresample     disable libavresample build [no]
114
  --disable-pthreads       disable pthreads [auto]
115
  --disable-w32threads     disable Win32 threads [auto]
116 117
  --enable-x11grab         enable X11 grabbing [no]
  --disable-network        disable network support [no]
118
  --disable-dct            disable DCT code
119 120
  --disable-dwt            disable DWT code
  --disable-lsp            disable LSP code
121 122
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
123 124
  --disable-fft            disable FFT code
  --enable-dxva2           enable DXVA2 code
125
  --enable-vaapi           enable VAAPI code
126
  --enable-vda             enable VDA code
127
  --enable-vdpau           enable VDPAU code
128 129

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

Optimization options (experts only):
241
  --disable-asm            disable all assembler optimizations
242 243 244 245
  --disable-altivec        disable AltiVec optimizations
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
246
  --disable-mmxext         disable MMXEXT optimizations
247
  --disable-sse            disable SSE optimizations
248 249
  --disable-sse2           disable SSE2 optimizations
  --disable-sse3           disable SSE3 optimizations
250
  --disable-ssse3          disable SSSE3 optimizations
251 252
  --disable-sse4           disable SSE4 optimizations
  --disable-sse42          disable SSE4.2 optimizations
Mans Rullgard's avatar
Mans Rullgard committed
253
  --disable-avx            disable AVX optimizations
254
  --disable-fma4           disable FMA4 optimizations
255 256 257 258 259
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
  --disable-armvfp         disable ARM VFP optimizations
  --disable-mmi            disable MMI optimizations
260
  --disable-neon           disable NEON optimizations
261 262 263
  --disable-vis            disable VIS optimizations
  --disable-yasm           disable use of yasm assembler

264
Developer options (useful when working on Libav itself):
265 266 267 268
  --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
269
  --samples=PATH           location of test samples for FATE, if not set use
270
                           \$LIBAV_SAMPLES at make invocation time.
271 272
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
273 274 275 276 277 278 279 280
  --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
281 282 283

NOTE: Object files are built at the place where configure is launched.
EOF
284
  exit 0
285
}
286

287 288
quotes='""'

289
log(){
290
    echo "$@" >> $logfile
291 292
}

293
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
294
    log BEGIN $1
295
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
296 297 298
    log END $1
}

299
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
300
    log "$@"
301
    echo "$@"
302 303
}

304 305 306 307 308
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

309 310 311
die(){
    echolog "$@"
    cat <<EOF
312

313
If you think configure made a mistake, make sure you are using the latest
Lou Logan's avatar
Lou Logan committed
314
version from Git.  If the latest version fails, report the problem to the
315
libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
316
EOF
317
    if disabled logging; then
318
        cat <<EOF
319 320
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
321 322 323
EOF
    else
cat <<EOF
324 325
Include the log file "$logfile" produced by configure as this will help
solving the problem.
326 327
EOF
    fi
328 329 330
    exit 1
}

331
# Avoid locale weirdness, besides we really just want to translate ASCII.
332
toupper(){
333
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
334 335
}

Måns Rullgård's avatar
Måns Rullgård committed
336
tolower(){
337
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
Måns Rullgård's avatar
Måns Rullgård committed
338 339
}

340 341 342 343
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

344 345
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
346
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
347 348 349
    echo "$v"
}

350 351 352 353
cleanws(){
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
}

354 355 356 357
filter(){
    pat=$1
    shift
    for v; do
358
        eval "case $v in $pat) echo $v ;; esac"
359 360 361
    done
}

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

370 371 372
map(){
    m=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
373
    for v; do eval $m; done
374 375
}

376 377 378 379 380 381
add_suffix(){
    suffix=$1
    shift
    for v; do echo ${v}${suffix}; done
}

382 383 384 385 386 387 388 389
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

390 391 392 393 394 395 396 397
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

398 399 400 401 402 403 404 405 406 407
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')
}

408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
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
}

427 428 429 430 431 432 433 434
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

435 436 437 438 439 440 441 442
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

443
enable_safe(){
444 445 446
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
447 448 449
}

disable_safe(){
450 451 452
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
453 454
}

455 456 457 458
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
459 460
        eval sgs="\$${var}_suggest"
        pushvar var sgs
461
        enable_deep $sel
462 463
        popvar sgs
        enable_deep_weak $sgs
464 465 466 467 468 469 470 471 472
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

473 474 475 476 477
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

478
enabled(){
479 480
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
481 482
}

483
disabled(){
484 485
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
486 487
}

488 489 490 491 492 493
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

494 495 496 497 498 499
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

500 501 502 503 504 505
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

506 507 508 509
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
510
    return 1
511 512
}

513 514
set_default(){
    for opt; do
515
        eval : \${$opt:=\$${opt}_default}
516 517 518
    done
}

519 520 521 522 523 524 525 526 527
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

528 529
check_deps(){
    for cfg; do
530
        cfg="${cfg#!}"
531 532 533 534
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

535 536
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
537
        eval dep_sel="\$${cfg}_select"
538
        eval dep_sgs="\$${cfg}_suggest"
539 540
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
541

542 543 544
        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
545

546 547
        [ -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
548 549
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
550
        disabled_any $dep_sel && disable $cfg
551

552 553 554
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
555
            enable_deep $dep_sel
556
            enable_deep_weak $dep_sgs
557 558
        fi

559
        disable ${cfg}_checking
560 561 562
    done
}

563 564 565 566 567 568 569 570 571 572
print_config_h(){
    enabled $1 && v=1 || v=0
    echo "#define $2 $v"
}

print_config_mak(){
    enabled $1 && v= || v=!
    echo "$v$2=yes"
}

573
print_config_asm(){
574 575
    enabled $1 && v=1 || v=0
    echo "%define $2 $v"
576 577
}

578 579
print_config(){
    pfx=$1
580 581
    files=$2
    shift 2
582
    for cfg; do
583
        ucname="$(toupper $cfg)"
584 585 586
        for f in $files; do
            "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
        done
587
    done
588 589
}

590 591 592 593 594 595 596 597 598
print_enabled(){
    test "$1" = -n && end=" " && shift || end="\n"
    suf=$1
    shift
    for v; do
        enabled $v && printf "%s$end" ${v%$suf};
    done
}

599 600 601 602 603 604
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

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

611
add_cppflags(){
612
    append CPPFLAGS "$@"
613 614
}

615
add_cflags(){
616
    append CFLAGS $($cflags_filter "$@")
617 618
}

619
add_asflags(){
620
    append ASFLAGS $($asflags_filter "$@")
621 622
}

623
add_ldflags(){
624
    append LDFLAGS $($ldflags_filter "$@")
625 626 627
}

add_extralibs(){
628
    prepend extralibs $($ldflags_filter "$@")
629 630
}

631 632 633 634 635 636 637 638
add_host_cflags(){
    append host_cflags $($host_cflags_filter "$@")
}

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

639
check_cmd(){
Måns Rullgård's avatar
Måns Rullgård committed
640
    log "$@"
641
    "$@" >> $logfile 2>&1
642 643
}

644 645 646 647
cc_o(){
    eval printf '%s\\n' $CC_O
}

648 649 650 651
cc_e(){
    eval printf '%s\\n' $CC_E
}

652
check_cc(){
653
    log check_cc "$@"
654
    cat > $TMPC
655
    log_file $TMPC
656
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
657 658 659 660
}

check_cpp(){
    log check_cpp "$@"
661
    cat > $TMPC
662
    log_file $TMPC
663
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
664 665
}

666 667 668 669
as_o(){
    eval printf '%s\\n' $AS_O
}

670 671 672 673
check_as(){
    log check_as "$@"
    cat > $TMPC
    log_file $TMPC
674
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
675 676
}

677 678
check_inline_asm(){
    log check_inline_asm "$@"
679
    name="$1"
680
    code="$2"
681
    shift 2
682 683
    disable $name
    check_as "$@" <<EOF && enable $name
684
void foo(void){ __asm__ volatile($code); }
685 686 687
EOF
}

Loren Merritt's avatar
Loren Merritt committed
688 689 690 691 692 693 694 695
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

696 697 698 699
ld_o(){
    eval printf '%s\\n' $LD_O
}

700
check_ld(){
701
    log check_ld "$@"
702 703 704 705 706
    flags=''
    libs=''
    for f; do
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
    done
707
    check_cc $($cflags_filter $flags) || return
708 709
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
710
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
711 712
}

713 714 715 716 717 718 719 720 721 722 723 724 725 726
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 "$@"
}

727 728
check_cppflags(){
    log check_cppflags "$@"
729
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
730 731 732 733
int x;
EOF
}

734
check_cflags(){
735
    log check_cflags "$@"
736
    set -- $($cflags_filter "$@")
737
    check_cc "$@" <<EOF && append CFLAGS "$@"
738 739 740 741
int x;
EOF
}

742 743 744
test_ldflags(){
    log test_ldflags "$@"
    check_ld "$@" <<EOF
745
int main(void){ return 0; }
746 747 748
EOF
}

749 750 751 752 753
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

754
check_header(){
755
    log check_header "$@"
756 757
    header=$1
    shift
758 759
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
760 761 762 763 764 765
#include <$header>
int x;
EOF
}

check_func(){
766
    log check_func "$@"
767 768
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
769 770
    disable $func
    check_ld "$@" <<EOF && enable $func
771
extern int $func();
772
int main(void){ $func(); }
773 774 775
EOF
}

776
check_mathfunc(){
777
    log check_mathfunc "$@"
778 779 780 781 782
    func=$1
    shift
    disable $func
    check_ld "$@" <<EOF && enable $func
#include <math.h>
783 784
float foo(float f) { return $func(f); }
int main(void){ return 0; }
785 786 787
EOF
}

788 789
check_func_headers(){
    log check_func_headers "$@"
790
    headers=$1
791
    funcs=$2
792
    shift 2
793 794 795 796 797 798 799 800 801
    {
        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
802 803
}

804 805 806 807
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
808
    shift 2
809
    check_cpp "$@" <<EOF
810 811 812 813 814 815 816
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

817 818 819 820 821
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
822
    check_header $header && check_func $func "$@" && add_extralibs "$@"
823 824
}

825 826 827
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
828
    funcs="$2"
829
    shift 2
830
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
831 832
}

833 834 835 836 837 838 839 840 841 842 843 844 845 846
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
}

847
check_exec(){
848
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
849 850
}

851
check_exec_crash(){
852
    code=$(cat)
853 854 855 856 857 858 859

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

860
    (check_exec "$@") >> $logfile 2>&1 <<EOF
861 862 863 864
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
Diego Biurrun's avatar
Diego Biurrun committed
865
int main(void){
866 867 868 869 870 871 872 873 874 875 876
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

877 878 879 880 881
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
882
    disable_safe "$type"
883
    check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
884 885
}

886 887 888 889 890 891 892
check_struct(){
    log check_type "$@"
    headers=$1
    struct=$2
    member=$3
    shift 3
    disable_safe "${struct}_${member}"
893 894
    check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
        enable_safe "${struct}_${member}"
895 896
}

897 898 899 900 901 902
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
903 904
}

905 906 907 908 909 910 911 912
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

913 914 915 916 917 918 919
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)
}

920 921 922 923
hostcc_o(){
    eval printf '%s\\n' $HOSTCC_O
}

924 925 926 927
check_host_cc(){
    log check_host_cc "$@"
    cat > $TMPC
    log_file $TMPC
928
    check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
929 930 931 932
}

check_host_cflags(){
    log check_host_cflags "$@"
933
    set -- $($host_cflags_filter "$@")
934 935 936 937 938
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

939 940 941 942 943 944
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

945
cp_if_changed(){
946 947 948
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
    cp -f "$1" "$2"
949 950
}

951 952 953
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

954 955 956 957 958
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
959
    filters
960
    hwaccels
961
    indevs
962
    muxers
963
    outdevs
964 965 966 967
    parsers
    protocols
"

968 969 970 971 972 973 974
PROGRAM_LIST="
    avconv
    avplay
    avprobe
    avserver
"

975 976
CONFIG_LI