configure 140 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 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
  --docdir=DIR             install documentation in DIR [PREFIX/share/doc/libav]
85 86 87 88 89
  --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]

90
Licensing options:
91 92 93 94 95
  --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]
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
  --disable-all            disable building components, libraries and programs
105

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

Component options:
  --disable-doc            do not build documentation
115 116 117
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
118
  --disable-avutil         disable libavutil build
119
  --disable-swscale        disable libswscale build
120
  --disable-avfilter       disable video filter support [no]
Justin Ruggles's avatar
Justin Ruggles committed
121
  --disable-avresample     disable libavresample build [no]
122
  --disable-pthreads       disable pthreads [auto]
123
  --disable-w32threads     disable Win32 threads [auto]
124
  --disable-network        disable network support [no]
125
  --disable-dct            disable DCT code
126
  --disable-error-resilience disable error resilience code
127
  --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
  --disable-fft            disable FFT code
132 133

Hardware accelerators:
134
  --enable-dxva2           enable DXVA2 code
135
  --enable-vaapi           enable VAAPI code
136
  --enable-vda             enable VDA code
137
  --enable-vdpau           enable VDPAU code
138 139

Individual component options:
140
  --disable-everything     disable all components listed below
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
  --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
165
  --enable-indev=NAME      enable input device NAME
166 167
  --disable-indev=NAME     disable input device NAME
  --disable-indevs         disable input devices
168 169
  --enable-outdev=NAME     enable output device NAME
  --disable-outdev=NAME    disable output device NAME
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:
Diego Biurrun's avatar
Diego Biurrun committed
177
  --enable-avisynth        enable reading of AviSynth script files [no]
178
  --enable-bzlib           enable bzlib [autodetect]
Stefano Sabatini's avatar
Stefano Sabatini committed
179
  --enable-frei0r          enable frei0r video filtering
180
  --enable-gnutls          enable gnutls [no]
181
  --enable-libbs2b         enable bs2b DSP library [no]
182
  --enable-libcdio         enable audio CD grabbing with libcdio
183 184
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
185
  --enable-libfaac         enable AAC encoding via libfaac [no]
Martin Storsjö's avatar
Martin Storsjö committed
186
  --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
187
  --enable-libfreetype     enable libfreetype [no]
188
  --enable-libgsm          enable GSM de/encoding via libgsm [no]
189
  --enable-libilbc         enable iLBC de/encoding via libilbc [no]
190
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
191 192 193
  --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]
194
  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
195
  --enable-libopus         enable Opus de/encoding via libopus [no]
196
  --enable-libpulse        enable Pulseaudio input via libpulse [no]
197
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
198 199
  --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
  --enable-libspeex        enable Speex de/encoding via libspeex [no]
200
  --enable-libtheora       enable Theora encoding via libtheora [no]
Paul B Mahol's avatar
Paul B Mahol committed
201
  --enable-libtwolame      enable MP2 encoding via libtwolame [no]
202
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
203
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
204
  --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
205
  --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
206
  --enable-libwavpack      enable wavpack encoding via libwavpack [no]
Justin Ruggles's avatar
Justin Ruggles committed
207
  --enable-libwebp         enable WebP encoding via libwebp [no]
208
  --enable-libx264         enable H.264 encoding via x264 [no]
Derek Buitenhuis's avatar
Derek Buitenhuis committed
209
  --enable-libx265         enable HEVC encoding via x265 [no]
210
  --enable-libxavs         enable AVS encoding via xavs [no]
211 212
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
213
  --enable-openssl         enable openssl [no]
214
  --enable-x11grab         enable X11 grabbing [no]
215 216
  --enable-zlib            enable zlib [autodetect]

217 218 219 220
Toolchain options:
  --arch=ARCH              select architecture [$arch]
  --cpu=CPU                select the minimum required CPU (affects
                           instruction selection, may crash on older CPUs)
221 222 223 224 225 226 227
  --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
228
  --target-samples=DIR     path to samples directory on target
229
  --toolchain=NAME         set tool defaults according to NAME
230
  --nm=NM                  use nm tool
231
  --ar=AR                  use archive tool AR [$ar_default]
232 233
  --as=AS                  use assembler AS [$as_default]
  --cc=CC                  use C compiler CC [$cc_default]
234
  --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
235
  --ld=LD                  use linker LD
236
  --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
237
  --pkg-config-flags=FLAGS pass additional flags to pkgconf []
238 239
  --host-cc=HOSTCC         use host C compiler HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
240
  --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
241
  --host-ld=HOSTLD         use host linker HOSTLD
242 243
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  --host-libs=HLIBS        use libs HLIBS when linking for host
244
  --host-os=OS             compiler host OS [$target_os]
245 246 247 248
  --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 []
249
  --optflags=OPTFLAGS      override optimization-related compiler flags
250
  --build-suffix=SUFFIX    library name suffix []
251
  --enable-pic             build position-independent code
252
  --enable-thumb           compile for Thumb instruction set
253 254 255 256
  --enable-lto             use link-time optimization

Advanced options (experts only):
  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
257 258 259 260 261 262
  --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
263
  --enable-sram            allow use of on-chip SRAM
264 265

Optimization options (experts only):
266
  --disable-asm            disable all assembly optimizations
267 268 269 270
  --disable-altivec        disable AltiVec optimizations
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
271
  --disable-mmxext         disable MMXEXT optimizations
272
  --disable-sse            disable SSE optimizations
273 274
  --disable-sse2           disable SSE2 optimizations
  --disable-sse3           disable SSE3 optimizations
275
  --disable-ssse3          disable SSSE3 optimizations
276 277
  --disable-sse4           disable SSE4 optimizations
  --disable-sse42          disable SSE4.2 optimizations
Mans Rullgard's avatar
Mans Rullgard committed
278
  --disable-avx            disable AVX optimizations
279
  --disable-xop            disable XOP optimizations
280
  --disable-fma3           disable FMA3 optimizations
281
  --disable-fma4           disable FMA4 optimizations
282
  --disable-avx2           disable AVX2 optimizations
283 284 285
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
286
  --disable-vfp            disable VFP optimizations
287
  --disable-neon           disable NEON optimizations
288 289
  --disable-inline-asm     disable use of inline assembly
  --disable-yasm           disable use of nasm/yasm assembly
290

291
Developer options (useful when working on Libav itself):
292 293 294 295
  --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
296
  --samples=PATH           location of test samples for FATE, if not set use
297
                           \$LIBAV_SAMPLES at make invocation time.
298 299
  --enable-neon-clobber-test check NEON registers for clobbering (should be
                           used only for debugging purposes)
300 301
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
302 303 304 305 306 307 308 309
  --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
310 311 312

NOTE: Object files are built at the place where configure is launched.
EOF
313
  exit 0
314
}
315

316 317
quotes='""'

318
log(){
319
    echo "$@" >> $logfile
320 321
}

322
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
323
    log BEGIN $1
324
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
325 326 327
    log END $1
}

328
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
329
    log "$@"
330
    echo "$@"
331 332
}

333 334 335 336 337
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

338 339 340
die(){
    echolog "$@"
    cat <<EOF
341

342
If you think configure made a mistake, make sure you are using the latest
Lou Logan's avatar
Lou Logan committed
343
version from Git.  If the latest version fails, report the problem to the
344
libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
345
EOF
346
    if disabled logging; then
347
        cat <<EOF
348 349
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
350 351
EOF
    else
352
        cat <<EOF
353 354
Include the log file "$logfile" produced by configure as this will help
solving the problem.
355 356
EOF
    fi
357 358 359
    exit 1
}

360
# Avoid locale weirdness, besides we really just want to translate ASCII.
361
toupper(){
362
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
363 364
}

Måns Rullgård's avatar
Måns Rullgård committed
365
tolower(){
366
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
Måns Rullgård's avatar
Måns Rullgård committed
367 368
}

369 370 371 372
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

373 374
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
375
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
376 377 378
    echo "$v"
}

379 380 381 382
cleanws(){
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
}

383 384 385 386
filter(){
    pat=$1
    shift
    for v; do
387
        eval "case $v in $pat) echo $v ;; esac"
388 389 390
    done
}

391 392 393 394 395 396 397 398
filter_out(){
    pat=$1
    shift
    for v; do
        eval "case $v in $pat) ;; *) echo $v ;; esac"
    done
}

399 400 401
map(){
    m=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
402
    for v; do eval $m; done
403 404
}

405 406 407 408 409 410
add_suffix(){
    suffix=$1
    shift
    for v; do echo ${v}${suffix}; done
}

411 412 413 414 415 416 417 418
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

419 420 421 422 423 424 425 426
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

427 428 429 430
sanitize_var_name(){
    echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
}

431 432 433
set_safe(){
    var=$1
    shift
434
    eval $(sanitize_var_name "$var")='$*'
435 436 437
}

get_safe(){
438
    eval echo \$$(sanitize_var_name "$1")
439 440
}

441
pushvar(){
442 443 444 445
    for pvar in $*; do
        eval level=\${${pvar}_level:=0}
        eval ${pvar}_${level}="\$$pvar"
        eval ${pvar}_level=$(($level+1))
446 447 448 449
    done
}

popvar(){
450 451
    for pvar in $*; do
        eval level=\${${pvar}_level:-0}
452 453
        test $level = 0 && continue
        eval level=$(($level-1))
454 455 456
        eval $pvar="\${${pvar}_${level}}"
        eval ${pvar}_level=$level
        eval unset ${pvar}_${level}
457 458 459
    done
}

460 461 462 463 464 465 466 467
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

468 469 470 471 472 473 474 475
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

476
enable_safe(){
477 478 479
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
480 481 482
}

disable_safe(){
483 484 485
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
486 487
}

488 489 490 491
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
492 493
        eval sgs="\$${var}_suggest"
        pushvar var sgs
494
        enable_deep $sel
495 496
        popvar sgs
        enable_deep_weak $sgs
497 498 499 500 501 502 503 504 505
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

506
enable_deep_weak(){
507 508 509 510 511 512 513
    for var; do
        disabled $var && continue
        pushvar var
        do_enable_deep $var
        popvar var
        enable_weak $var
    done
514 515
}

516
enabled(){
517 518
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
519 520
}

521
disabled(){
522 523
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
524 525
}

526 527 528 529 530 531
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

532 533 534 535 536 537
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

538 539 540 541 542 543
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

544 545 546 547
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
548
    return 1
549 550
}

551 552
set_default(){
    for opt; do
553
        eval : \${$opt:=\$${opt}_default}
554 555 556
    done
}

557 558 559 560 561 562 563 564 565
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

566
do_check_deps(){
567
    for cfg; do
568
        cfg="${cfg#!}"
569 570 571
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking
572
        append allopts $cfg
573

574 575
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
576
        eval dep_sel="\$${cfg}_select"
577
        eval dep_sgs="\$${cfg}_suggest"
578 579
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
580

581
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
582
        do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
583
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
584

585 586
        [ -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
587 588
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
589
        disabled_any $dep_sel && disable $cfg
590

591
        if enabled $cfg; then
592
            enable_deep $dep_sel
593
            enable_deep_weak $dep_sgs
594 595
        fi

596
        disable ${cfg}_checking
597 598 599
    done
}

600 601 602 603 604 605 606 607 608 609 610 611
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
}

612 613
print_config(){
    pfx=$1
614 615
    files=$2
    shift 2
616 617 618 619 620 621 622 623 624 625 626 627 628 629
    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\$/) {
630
                    n = -v ? \"\" : \"!\";
631 632 633 634
                    printf(\"%s%s=yes\\n\", n, c) >>file;
                }
            }
        }"
635 636
}

637 638 639 640
print_enabled(){
    suf=$1
    shift
    for v; do
641
        enabled $v && printf "%s\n" ${v%$suf};
642 643 644
    done
}

645 646 647 648 649 650
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

651 652 653 654 655 656
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

657 658 659 660 661 662 663 664 665
unique(){
    var=$1
    uniq_list=""
    for tok in $(eval echo \$$var); do
        uniq_list="$(filter_out $tok $uniq_list) $tok"
    done
    eval "$var=\"${uniq_list}\""
}

666
add_cppflags(){
667
    append CPPFLAGS "$@"
668 669
}

670
add_cflags(){
671
    append CFLAGS $($cflags_filter "$@")
672 673
}

674
add_asflags(){
675
    append ASFLAGS $($asflags_filter "$@")
676 677
}

678
add_ldflags(){
679
    append LDFLAGS $($ldflags_filter "$@")
680 681
}

682 683 684 685
add_stripflags(){
    append STRIPFLAGS "$@"
}

686
add_extralibs(){
687
    prepend extralibs $($ldflags_filter "$@")
688 689
}

690 691 692 693
add_host_cppflags(){
    append host_cppflags "$@"
}

694 695 696 697 698 699 700 701
add_host_cflags(){
    append host_cflags $($host_cflags_filter "$@")
}

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

702 703 704 705 706 707
add_compat(){
    append compat_objs $1
    shift
    map 'add_cppflags -D$v' "$@"
}

708
check_cmd(){
Måns Rullgård's avatar
Måns Rullgård committed
709
    log "$@"
710
    "$@" >> $logfile 2>&1
711 712
}

713 714 715 716
cc_o(){
    eval printf '%s\\n' $CC_O
}

717 718 719 720
cc_e(){
    eval printf '%s\\n' $CC_E
}

721
check_cc(){
722
    log check_cc "$@"
723
    cat > $TMPC
724
    log_file $TMPC
725
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
726 727 728 729
}

check_cpp(){
    log check_cpp "$@"
730
    cat > $TMPC
731
    log_file $TMPC
732
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
733 734
}

735 736 737 738
as_o(){
    eval printf '%s\\n' $AS_O
}

739 740
check_as(){
    log check_as "$@"
741 742 743
    cat > $TMPS
    log_file $TMPS
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
744 745
}

746 747
check_inline_asm(){
    log check_inline_asm "$@"
748
    name="$1"
749
    code="$2"
750
    shift 2
751
    disable $name
752
    check_cc "$@" <<EOF && enable $name
753
void foo(void){ __asm__ volatile($code); }
754 755 756
EOF
}

757 758 759 760 761 762
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
763 764 765 766 767 768 769 770
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

771 772 773 774
ld_o(){
    eval printf '%s\\n' $LD_O
}

775
check_ld(){
776
    log check_ld "$@"
777 778
    flags=$(filter_out '-l*' "$@")
    libs=$(filter '-l*' "$@")
779
    check_cc $($cflags_filter $flags) || return
780 781
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
782
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
783 784
}

785 786 787 788 789 790 791
print_include(){
    hdr=$1
    test "${hdr%.h}" = "${hdr}" &&
        echo "#include $hdr"    ||
        echo "#include <$hdr>"
}

792 793 794 795 796 797 798 799
check_code(){
    log check_code "$@"
    check=$1
    headers=$2
    code=$3
    shift 3
    {
        for hdr in $headers; do
800
            print_include $hdr
801 802 803 804 805
        done
        echo "int main(void) { $code; return 0; }"
    } | check_$check "$@"
}

806 807
check_cppflags(){
    log check_cppflags "$@"
808
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
809 810 811 812
int x;
EOF
}

813 814
test_cflags(){
    log test_cflags "$@"
815
    set -- $($cflags_filter "$@")
816
    check_cc "$@" <<EOF
817 818 819 820
int x;
EOF
}

821 822 823 824 825
check_cflags(){
    log check_cflags "$@"
    test_cflags "$@" && add_cflags "$@"
}

826 827 828
test_ldflags(){
    log test_ldflags "$@"
    check_ld "$@" <<EOF
829
int main(void){ return 0; }
830 831 832
EOF
}

833 834 835 836 837
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

838 839 840 841 842 843 844 845 846 847 848 849 850 851
test_stripflags(){
    log test_stripflags "$@"
    # call check_cc to get a fresh TMPO
    check_cc <<EOF
int main(void) { return 0; }
EOF
    check_cmd $strip $STRIPFLAGS "$@" $TMPO
}

check_stripflags(){
    log check_stripflags "$@"
    test_stripflags "$@" && add_stripflags "$@"
}

852
check_header(){
853
    log check_header "$@"
854 855
    header=$1
    shift
856 857
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
858 859 860 861 862 863
#include <$header>
int x;
EOF
}

check_func(){
864
    log check_func "$@"
865 866
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
867 868
    disable $func
    check_ld "$@" <<EOF && enable $func
869
extern int $func();
870
int main(void){ $func(); }
871 872 873
EOF
}

874
check_mathfunc(){
875
    log check_mathfunc "$@"
876
    func=$1
877 878 879
    narg=$2
    shift 2
    test $narg = 2 && args="f, g" || args="f"
880 881 882
    disable $func
    check_ld "$@" <<EOF && enable $func
#include <math.h>
883
float foo(float f, float g) { return $func($args); }
884
int main(void){ return 0; }
885 886 887
EOF
}

888 889
check_func_headers(){
    log check_func_headers "$@"
890
    headers=$1
891
    funcs=$2
892
    shift 2
893 894
    {
        for hdr in $headers; do
895
            print_include $hdr
896 897 898 899 900 901
        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
902 903
}

904 905 906 907
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
908
    shift 2