Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
#!/bin/sh
2
#
3
# FFmpeg configure script
4
#
5
# Copyright (c) 2000-2002 Fabrice Bellard
6
# Copyright (c) 2005-2008 Diego Biurrun
7
# Copyright (c) 2005-2008 Mans Rullgard
8
#
9
 
10
# Prevent locale nonsense from breaking basic text processing.
11
LC_ALL=C
12
export LC_ALL
13
 
14
# make sure we are running under a compatible shell
15
# try to make this part work with most shells
16
 
17
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
E1="$?"
25
 
26
(: ${foo?}) 2> /dev/null
27
E2="$?"
28
 
29
if test "$E1" != 0 || test "$E2" = 0; then
30
    echo "Broken shell detected.  Trying alternatives."
31
    export FF_CONF_EXEC
32
    if test "0$FF_CONF_EXEC" -lt 1; then
33
        FF_CONF_EXEC=1
34
        try_exec bash "$0" "$@"
35
    fi
36
    if test "0$FF_CONF_EXEC" -lt 2; then
37
        FF_CONF_EXEC=2
38
        try_exec ksh "$0" "$@"
39
    fi
40
    if test "0$FF_CONF_EXEC" -lt 3; then
41
        FF_CONF_EXEC=3
42
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43
    fi
44
    echo "No compatible shell script interpreter found."
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 FFMPEG, 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 FFmpeg."
50
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51
        echo "This bash version ($BASH_VERSION) is broken on your platform."
52
        echo "Upgrade to a later version if available."
53
    fi
54
    exit 1
55
fi
56
 
57
test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
 
59
show_help(){
60
    cat <
61
Usage: configure [options]
62
Options: [defaults in brackets after descriptions]
63
 
64
Help options:
65
  --help                   print this message
66
  --list-decoders          show all available decoders
67
  --list-encoders          show all available encoders
68
  --list-hwaccels          show all available hardware accelerators
69
  --list-demuxers          show all available demuxers
70
  --list-muxers            show all available muxers
71
  --list-parsers           show all available parsers
72
  --list-protocols         show all available protocols
73
  --list-bsfs              show all available bitstream filters
74
  --list-indevs            show all available input devices
75
  --list-outdevs           show all available output devices
76
  --list-filters           show all available filters
77
 
78
Standard options:
79
  --logfile=FILE           log tests and output to FILE [config.log]
80
  --disable-logging        do not log configure debug information
81
  --fatal-warnings         fail if any configure warning is generated
82
  --prefix=PREFIX          install in PREFIX [$prefix]
83
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
84
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85
  --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
86
  --libdir=DIR             install libs in DIR [PREFIX/lib]
87
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
88
  --incdir=DIR             install includes in DIR [PREFIX/include]
89
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
90
 
91
Licensing options:
92
  --enable-gpl             allow use of GPL code, the resulting libs
93
                           and binaries will be under GPL [no]
94
  --enable-version3        upgrade (L)GPL to version 3 [no]
95
  --enable-nonfree         allow use of nonfree code, the resulting libs
96
                           and binaries will be unredistributable [no]
97
 
98
Configuration options:
99
  --disable-static         do not build static libraries [no]
100
  --enable-shared          build shared libraries [no]
101
  --enable-small           optimize for size instead of speed
102
  --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
103
  --enable-gray            enable full grayscale support (slower color)
104
  --disable-swscale-alpha  disable alpha channel support in swscale
105
  --disable-all            disable building components, libraries and programs
106
  --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
107
  --enable-incompatible-fork-abi  enable incompatible Libav fork ABI (deprecated) [no]
108
 
109
Program options:
110
  --disable-programs       do not build command line programs
111
  --disable-ffmpeg         disable ffmpeg build
112
  --disable-ffplay         disable ffplay build
113
  --disable-ffprobe        disable ffprobe build
114
  --disable-ffserver       disable ffserver build
115
 
116
Documentation options:
117
  --disable-doc            do not build documentation
118
  --disable-htmlpages      do not build HTML documentation pages
119
  --disable-manpages       do not build man documentation pages
120
  --disable-podpages       do not build POD documentation pages
121
  --disable-txtpages       do not build text documentation pages
122
 
123
Component options:
124
  --disable-avdevice       disable libavdevice build
125
  --disable-avcodec        disable libavcodec build
126
  --disable-avformat       disable libavformat build
127
  --disable-avutil         disable libavutil build
128
  --disable-swresample     disable libswresample build
129
  --disable-swscale        disable libswscale build
130
  --disable-postproc       disable libpostproc build
131
  --disable-avfilter       disable libavfilter build
132
  --enable-avresample      enable libavresample build [no]
133
  --disable-pthreads       disable pthreads [auto]
134
  --disable-w32threads     disable Win32 threads [auto]
135
  --disable-os2threads     disable OS/2 threads [auto]
136
  --disable-network        disable network support [no]
137
  --disable-dct            disable DCT code
138
  --disable-dwt            disable DWT code
139
  --disable-error-resilience disable error resilience code
140
  --disable-lsp            disable LSP code
141
  --disable-lzo            disable LZO decoder code
142
  --disable-mdct           disable MDCT code
143
  --disable-rdft           disable RDFT code
144
  --disable-fft            disable FFT code
145
 
146
Hardware accelerators:
147
  --disable-dxva2          disable DXVA2 code [autodetect]
148
  --disable-vaapi          disable VAAPI code [autodetect]
149
  --enable-vda             enable VDA code
150
  --disable-vdpau          disable VDPAU code [autodetect]
151
 
152
Individual component options:
153
  --disable-everything     disable all components listed below
154
  --disable-encoder=NAME   disable encoder NAME
155
  --enable-encoder=NAME    enable encoder NAME
156
  --disable-encoders       disable all encoders
157
  --disable-decoder=NAME   disable decoder NAME
158
  --enable-decoder=NAME    enable decoder NAME
159
  --disable-decoders       disable all decoders
160
  --disable-hwaccel=NAME   disable hwaccel NAME
161
  --enable-hwaccel=NAME    enable hwaccel NAME
162
  --disable-hwaccels       disable all hwaccels
163
  --disable-muxer=NAME     disable muxer NAME
164
  --enable-muxer=NAME      enable muxer NAME
165
  --disable-muxers         disable all muxers
166
  --disable-demuxer=NAME   disable demuxer NAME
167
  --enable-demuxer=NAME    enable demuxer NAME
168
  --disable-demuxers       disable all demuxers
169
  --enable-parser=NAME     enable parser NAME
170
  --disable-parser=NAME    disable parser NAME
171
  --disable-parsers        disable all parsers
172
  --enable-bsf=NAME        enable bitstream filter NAME
173
  --disable-bsf=NAME       disable bitstream filter NAME
174
  --disable-bsfs           disable all bitstream filters
175
  --enable-protocol=NAME   enable protocol NAME
176
  --disable-protocol=NAME  disable protocol NAME
177
  --disable-protocols      disable all protocols
178
  --enable-indev=NAME      enable input device NAME
179
  --disable-indev=NAME     disable input device NAME
180
  --disable-indevs         disable input devices
181
  --enable-outdev=NAME     enable output device NAME
182
  --disable-outdev=NAME    disable output device NAME
183
  --disable-outdevs        disable output devices
184
  --disable-devices        disable all devices
185
  --enable-filter=NAME     enable filter NAME
186
  --disable-filter=NAME    disable filter NAME
187
  --disable-filters        disable all filters
188
 
189
External library support:
190
  --enable-avisynth        enable reading of AviSynth script files [no]
191
  --disable-bzlib          disable bzlib [autodetect]
192
  --enable-fontconfig      enable fontconfig
193
  --enable-frei0r          enable frei0r video filtering
194
  --enable-gnutls          enable gnutls [no]
195
  --disable-iconv          disable iconv [autodetect]
196
  --enable-ladspa          enable LADSPA audio filtering
197
  --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
198
  --enable-libass          enable libass subtitles rendering [no]
199
  --enable-libbluray       enable BluRay reading using libbluray [no]
200
  --enable-libcaca         enable textual display using libcaca
201
  --enable-libcelt         enable CELT decoding via libcelt [no]
202
  --enable-libcdio         enable audio CD grabbing with libcdio
203
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
204
                           and libraw1394 [no]
205
  --enable-libfaac         enable AAC encoding via libfaac [no]
206
  --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
207
  --enable-libflite        enable flite (voice synthesis) support via libflite [no]
208
  --enable-libfreetype     enable libfreetype [no]
209
  --enable-libgme          enable Game Music Emu via libgme [no]
210
  --enable-libgsm          enable GSM de/encoding via libgsm [no]
211
  --enable-libiec61883     enable iec61883 via libiec61883 [no]
212
  --enable-libilbc         enable iLBC de/encoding via libilbc [no]
213
  --enable-libmodplug      enable ModPlug via libmodplug [no]
214
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
215
  --enable-libnut          enable NUT (de)muxing via libnut,
216
                           native (de)muxer exists [no]
217
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
218
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
219
  --enable-libopencv       enable video filtering via libopencv [no]
220
  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
221
  --enable-libopus         enable Opus decoding via libopus [no]
222
  --enable-libpulse        enable Pulseaudio input via libpulse [no]
223
  --enable-libquvi         enable quvi input via libquvi [no]
224
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
225
  --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
226
  --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
227
  --enable-libsoxr         enable Include libsoxr resampling [no]
228
  --enable-libspeex        enable Speex de/encoding via libspeex [no]
229
  --enable-libssh          enable SFTP protocol via libssh [no]
230
  --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
231
  --enable-libtheora       enable Theora encoding via libtheora [no]
232
  --enable-libtwolame      enable MP2 encoding via libtwolame [no]
233
  --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
234
  --enable-libv4l2         enable libv4l2/v4l-utils [no]
235
  --enable-libvidstab      enable video stabilization using vid.stab [no]
236
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
237
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
238
  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
239
                           native implementation exists [no]
240
  --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
241
  --enable-libwavpack      enable wavpack encoding via libwavpack [no]
242
  --enable-libx264         enable H.264 encoding via x264 [no]
243
  --enable-libxavs         enable AVS encoding via xavs [no]
244
  --enable-libxvid         enable Xvid encoding via xvidcore,
245
                           native MPEG-4/Xvid encoder exists [no]
246
  --enable-libzmq          enable message passing via libzmq [no]
247
  --enable-libzvbi         enable teletext support via libzvbi [no]
248
  --enable-openal          enable OpenAL 1.1 capture support [no]
249
  --enable-opencl          enable OpenCL code
250
  --enable-openssl         enable openssl [no]
251
  --enable-x11grab         enable X11 grabbing [no]
252
  --disable-zlib           disable zlib [autodetect]
253
 
254
Advanced options (experts only):
255
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
256
  --enable-cross-compile   assume a cross-compiler is used
257
  --sysroot=PATH           root of cross-build tree
258
  --sysinclude=PATH        location of cross-build system headers
259
  --target-os=OS           compiler targets OS [$target_os]
260
  --target-exec=CMD        command to run executables on target
261
  --target-path=DIR        path to view of build directory on target
262
  --target-samples=DIR     path to samples directory on target
263
  --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
264
  --toolchain=NAME         set tool defaults according to NAME
265
  --nm=NM                  use nm tool NM [$nm_default]
266
  --ar=AR                  use archive tool AR [$ar_default]
267
  --as=AS                  use assembler AS [$as_default]
268
  --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
269
  --cc=CC                  use C compiler CC [$cc_default]
270
  --cxx=CXX                use C compiler CXX [$cxx_default]
271
  --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
272
  --ld=LD                  use linker LD [$ld_default]
273
  --host-cc=HOSTCC         use host C compiler HOSTCC
274
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
275
  --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
276
  --host-ld=HOSTLD         use host linker HOSTLD
277
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
278
  --host-libs=HLIBS        use libs HLIBS when linking for host
279
  --host-os=OS             compiler host OS [$target_os]
280
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
281
  --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
282
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
283
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
284
  --extra-version=STRING   version string suffix []
285
  --optflags=OPTFLAGS      override optimization-related compiler flags
286
  --build-suffix=SUFFIX    library name suffix []
287
  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
288
  --progs-suffix=SUFFIX    program name suffix []
289
  --arch=ARCH              select architecture [$arch]
290
  --cpu=CPU                select the minimum required CPU (affects
291
                           instruction selection, may crash on older CPUs)
292
  --enable-pic             build position-independent code
293
  --enable-sram            allow use of on-chip SRAM
294
  --enable-thumb           compile for Thumb instruction set
295
  --disable-symver         disable symbol versioning
296
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
297
  --disable-safe-bitstream-reader
298
                           disable buffer boundary checking in bitreaders
299
                           (faster, but may crash)
300
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
301
  --enable-lto             use link-time optimization
302
 
303
Optimization options (experts only):
304
  --disable-asm            disable all assembler optimizations
305
  --disable-altivec        disable AltiVec optimizations
306
  --disable-amd3dnow       disable 3DNow! optimizations
307
  --disable-amd3dnowext    disable 3DNow! extended optimizations
308
  --disable-mmx            disable MMX optimizations
309
  --disable-mmxext         disable MMXEXT optimizations
310
  --disable-sse            disable SSE optimizations
311
  --disable-sse2           disable SSE2 optimizations
312
  --disable-sse3           disable SSE3 optimizations
313
  --disable-ssse3          disable SSSE3 optimizations
314
  --disable-sse4           disable SSE4 optimizations
315
  --disable-sse42          disable SSE4.2 optimizations
316
  --disable-avx            disable AVX optimizations
317
  --disable-fma4           disable FMA4 optimizations
318
  --disable-avx2           disable AVX2 optimizations
319
  --disable-armv5te        disable armv5te optimizations
320
  --disable-armv6          disable armv6 optimizations
321
  --disable-armv6t2        disable armv6t2 optimizations
322
  --disable-vfp            disable VFP optimizations
323
  --disable-neon           disable NEON optimizations
324
  --disable-vis            disable VIS optimizations
325
  --disable-inline-asm     disable use of inline assembler
326
  --disable-yasm           disable use of yasm assembler
327
  --disable-mips32r2       disable MIPS32R2 optimizations
328
  --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
329
  --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
330
  --disable-mipsfpu        disable floating point MIPS optimizations
331
  --disable-fast-unaligned consider unaligned accesses slow
332
 
333
Developer options (useful when working on FFmpeg itself):
334
  --disable-debug          disable debugging symbols
335
  --enable-debug=LEVEL     set the debug level [$debuglevel]
336
  --disable-optimizations  disable compiler optimizations
337
  --enable-extra-warnings  enable more compiler warnings
338
  --disable-stripping      disable stripping of executables and shared libraries
339
  --assert-level=level     0(default), 1 or 2, amount of assertion testing,
340
                           2 causes a slowdown at runtime.
341
  --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
342
  --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
343
                           leaks and errors, using the specified valgrind binary.
344
                           Cannot be combined with --target-exec
345
  --enable-ftrapv          Trap arithmetic overflows
346
  --samples=PATH           location of test samples for FATE, if not set use
347
                           \$FATE_SAMPLES at make invocation time.
348
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
349
                           should be used only for debugging purposes)
350
  --enable-random          randomly enable/disable components
351
  --disable-random
352
  --enable-random=LIST     randomly enable/disable specific components or
353
  --disable-random=LIST    component groups. LIST is a comma-separated list
354
                           of NAME[:PROB] entries where NAME is a component
355
                           (group) and PROB the probability associated with
356
                           NAME (default 0.5).
357
  --random-seed=VALUE      seed value for --enable/disable-random
358
 
359
NOTE: Object files are built at the place where configure is launched.
360
EOF
361
  exit 0
362
}
363
 
364
quotes='""'
365
 
366
log(){
367
    echo "$@" >> $logfile
368
}
369
 
370
log_file(){
371
    log BEGIN $1
372
    pr -n -t $1 >> $logfile
373
    log END $1
374
}
375
 
376
echolog(){
377
    log "$@"
378
    echo "$@"
379
}
380
 
381
warn(){
382
    log "WARNING: $*"
383
    WARNINGS="${WARNINGS}WARNING: $*\n"
384
}
385
 
386
die(){
387
    echolog "$@"
388
    cat <
389
 
390
If you think configure made a mistake, make sure you are using the latest
391
version from Git.  If the latest version fails, report the problem to the
392
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
393
EOF
394
    if disabled logging; then
395
        cat <
396
Rerun configure with logging enabled (do not use --disable-logging), and
397
include the log this produces with your report.
398
EOF
399
    else
400
        cat <
401
Include the log file "$logfile" produced by configure as this will help
402
solving the problem.
403
EOF
404
    fi
405
    exit 1
406
}
407
 
408
# Avoid locale weirdness, besides we really just want to translate ASCII.
409
toupper(){
410
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
411
}
412
 
413
tolower(){
414
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
415
}
416
 
417
c_escape(){
418
    echo "$*" | sed 's/["\\]/\\\0/g'
419
}
420
 
421
sh_quote(){
422
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
423
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
424
    echo "$v"
425
}
426
 
427
cleanws(){
428
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\r//g'
429
}
430
 
431
filter(){
432
    pat=$1
433
    shift
434
    for v; do
435
        eval "case $v in $pat) echo $v ;; esac"
436
    done
437
}
438
 
439
filter_out(){
440
    pat=$1
441
    shift
442
    for v; do
443
        eval "case $v in $pat) ;; *) echo $v ;; esac"
444
    done
445
}
446
 
447
map(){
448
    m=$1
449
    shift
450
    for v; do eval $m; done
451
}
452
 
453
add_suffix(){
454
    suffix=$1
455
    shift
456
    for v; do echo ${v}${suffix}; done
457
}
458
 
459
set_all(){
460
    value=$1
461
    shift
462
    for var in $*; do
463
        eval $var=$value
464
    done
465
}
466
 
467
set_weak(){
468
    value=$1
469
    shift
470
    for var; do
471
        eval : \${$var:=$value}
472
    done
473
}
474
 
475
sanitize_var_name(){
476
    echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
477
}
478
 
479
set_safe(){
480
    var=$1
481
    shift
482
    eval $(sanitize_var_name "$var")='$*'
483
}
484
 
485
get_safe(){
486
    eval echo \$$(sanitize_var_name "$1")
487
}
488
 
489
pushvar(){
490
    for pvar in $*; do
491
        eval level=\${${pvar}_level:=0}
492
        eval ${pvar}_${level}="\$$pvar"
493
        eval ${pvar}_level=$(($level+1))
494
    done
495
}
496
 
497
popvar(){
498
    for pvar in $*; do
499
        eval level=\${${pvar}_level:-0}
500
        test $level = 0 && continue
501
        eval level=$(($level-1))
502
        eval $pvar="\${${pvar}_${level}}"
503
        eval ${pvar}_level=$level
504
        eval unset ${pvar}_${level}
505
    done
506
}
507
 
508
enable(){
509
    set_all yes $*
510
}
511
 
512
disable(){
513
    set_all no $*
514
}
515
 
516
enable_weak(){
517
    set_weak yes $*
518
}
519
 
520
disable_weak(){
521
    set_weak no $*
522
}
523
 
524
enable_safe(){
525
    for var; do
526
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
527
    done
528
}
529
 
530
disable_safe(){
531
    for var; do
532
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
533
    done
534
}
535
 
536
do_enable_deep(){
537
    for var; do
538
        enabled $var && continue
539
        eval sel="\$${var}_select"
540
        eval sgs="\$${var}_suggest"
541
        pushvar var sgs
542
        enable_deep $sel
543
        popvar sgs
544
        enable_deep_weak $sgs
545
        popvar var
546
    done
547
}
548
 
549
enable_deep(){
550
    do_enable_deep $*
551
    enable $*
552
}
553
 
554
enable_deep_weak(){
555
    for var; do
556
        disabled $var && continue
557
        pushvar var
558
        do_enable_deep $var
559
        popvar var
560
        enable_weak $var
561
    done
562
}
563
 
564
enabled(){
565
    test "${1#!}" = "$1" && op== || op=!=
566
    eval test "x\$${1#!}" $op "xyes"
567
}
568
 
569
disabled(){
570
    test "${1#!}" = "$1" && op== || op=!=
571
    eval test "x\$${1#!}" $op "xno"
572
}
573
 
574
enabled_all(){
575
    for opt; do
576
        enabled $opt || return 1
577
    done
578
}
579
 
580
disabled_all(){
581
    for opt; do
582
        disabled $opt || return 1
583
    done
584
}
585
 
586
enabled_any(){
587
    for opt; do
588
        enabled $opt && return 0
589
    done
590
}
591
 
592
disabled_any(){
593
    for opt; do
594
        disabled $opt && return 0
595
    done
596
    return 1
597
}
598
 
599
set_default(){
600
    for opt; do
601
        eval : \${$opt:=\$${opt}_default}
602
    done
603
}
604
 
605
is_in(){
606
    value=$1
607
    shift
608
    for var in $*; do
609
        [ $var = $value ] && return 0
610
    done
611
    return 1
612
}
613
 
614
do_check_deps(){
615
    for cfg; do
616
        cfg="${cfg#!}"
617
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
618
        disabled ${cfg}_checking && continue
619
        enable ${cfg}_checking
620
        append allopts $cfg
621
 
622
        eval dep_all="\$${cfg}_deps"
623
        eval dep_any="\$${cfg}_deps_any"
624
        eval dep_sel="\$${cfg}_select"
625
        eval dep_sgs="\$${cfg}_suggest"
626
        eval dep_ifa="\$${cfg}_if"
627
        eval dep_ifn="\$${cfg}_if_any"
628
 
629
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
630
        do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
631
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
632
 
633
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
634
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
635
        enabled_all  $dep_all || disable $cfg
636
        enabled_any  $dep_any || disable $cfg
637
        disabled_any $dep_sel && disable $cfg
638
 
639
        if enabled $cfg; then
640
            enable_deep $dep_sel
641
            enable_deep_weak $dep_sgs
642
        fi
643
 
644
        disable ${cfg}_checking
645
    done
646
}
647
 
648
check_deps(){
649
    unset allopts
650
 
651
    do_check_deps "$@"
652
 
653
    for cfg in $allopts; do
654
        enabled $cfg || continue
655
        eval dep_extralibs="\$${cfg}_extralibs"
656
        test -n "$dep_extralibs" && add_extralibs $dep_extralibs
657
    done
658
}
659
 
660
print_config(){
661
    pfx=$1
662
    files=$2
663
    shift 2
664
    map 'eval echo "$v \${$v:-no}"' "$@" |
665
    awk "BEGIN { split(\"$files\", files) }
666
        {
667
            c = \"$pfx\" toupper(\$1);
668
            v = \$2;
669
            sub(/yes/, 1, v);
670
            sub(/no/,  0, v);
671
            for (f in files) {
672
                file = files[f];
673
                if (file ~ /\\.h\$/) {
674
                    printf(\"#define %s %d\\n\", c, v) >>file;
675
                } else if (file ~ /\\.asm\$/) {
676
                    printf(\"%%define %s %d\\n\", c, v) >>file;
677
                } else if (file ~ /\\.mak\$/) {
678
                    n = -v ? \"\" : \"!\";
679
                    printf(\"%s%s=yes\\n\", n, c) >>file;
680
                } else if (file ~ /\\.texi\$/) {
681
                    pre = -v ? \"\" : \"@c \";
682
                    yesno = \$2;
683
                    c2 = tolower(c);
684
                    gsub(/_/, \"-\", c2);
685
                    printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
686
                }
687
            }
688
        }"
689
}
690
 
691
print_enabled(){
692
    suf=$1
693
    shift
694
    for v; do
695
        enabled $v && printf "%s\n" ${v%$suf};
696
    done
697
}
698
 
699
append(){
700
    var=$1
701
    shift
702
    eval "$var=\"\$$var $*\""
703
}
704
 
705
prepend(){
706
    var=$1
707
    shift
708
    eval "$var=\"$* \$$var\""
709
}
710
 
711
add_cppflags(){
712
    append CPPFLAGS "$@"
713
}
714
 
715
add_cflags(){
716
    append CFLAGS $($cflags_filter "$@")
717
}
718
 
719
add_cxxflags(){
720
    append CXXFLAGS $($cflags_filter "$@")
721
}
722
 
723
add_asflags(){
724
    append ASFLAGS $($asflags_filter "$@")
725
}
726
 
727
add_ldflags(){
728
    append LDFLAGS $($ldflags_filter "$@")
729
}
730
 
731
add_extralibs(){
732
    prepend extralibs $($ldflags_filter "$@")
733
}
734
 
735
add_host_cppflags(){
736
    append host_cppflags "$@"
737
}
738
 
739
add_host_cflags(){
740
    append host_cflags $($host_cflags_filter "$@")
741
}
742
 
743
add_host_ldflags(){
744
    append host_ldflags $($host_ldflags_filter "$@")
745
}
746
 
747
add_compat(){
748
    append compat_objs $1
749
    shift
750
    map 'add_cppflags -D$v' "$@"
751
}
752
 
753
check_cmd(){
754
    log "$@"
755
    "$@" >> $logfile 2>&1
756
}
757
 
758
cc_o(){
759
    eval printf '%s\\n' $CC_O
760
}
761
 
762
cc_e(){
763
    eval printf '%s\\n' $CC_E
764
}
765
 
766
check_cc(){
767
    log check_cc "$@"
768
    cat > $TMPC
769
    log_file $TMPC
770
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
771
}
772
 
773
check_cxx(){
774
    log check_cxx "$@"
775
    cat > $TMPCPP
776
    log_file $TMPCPP
777
    check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
778
}
779
 
780
check_cpp(){
781
    log check_cpp "$@"
782
    cat > $TMPC
783
    log_file $TMPC
784
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
785
}
786
 
787
as_o(){
788
    eval printf '%s\\n' $AS_O
789
}
790
 
791
check_as(){
792
    log check_as "$@"
793
    cat > $TMPS
794
    log_file $TMPS
795
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
796
}
797
 
798
check_inline_asm(){
799
    log check_inline_asm "$@"
800
    name="$1"
801
    code="$2"
802
    shift 2
803
    disable $name
804
    check_cc "$@" <
805
void foo(void){ __asm__ volatile($code); }
806
EOF
807
}
808
 
809
check_insn(){
810
    log check_insn "$@"
811
    check_inline_asm ${1}_inline "\"$2\""
812
    echo "$2" | check_as && enable ${1}_external || disable ${1}_external
813
}
814
 
815
check_yasm(){
816
    log check_yasm "$@"
817
    echo "$1" > $TMPS
818
    log_file $TMPS
819
    shift 1
820
    check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
821
}
822
 
823
ld_o(){
824
    eval printf '%s\\n' $LD_O
825
}
826
 
827
check_ld(){
828
    log check_ld "$@"
829
    type=$1
830
    shift 1
831
    flags=$(filter_out '-l*|*.so' $@)
832
    libs=$(filter '-l*|*.so' $@)
833
    check_$type $($cflags_filter $flags) || return
834
    flags=$($ldflags_filter $flags)
835
    libs=$($ldflags_filter $libs)
836
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
837
}
838
 
839
check_code(){
840
    log check_code "$@"
841
    check=$1
842
    headers=$2
843
    code=$3
844
    shift 3
845
    {
846
        for hdr in $headers; do
847
            echo "#include <$hdr>"
848
        done
849
        echo "int main(void) { $code; return 0; }"
850
    } | check_$check "$@"
851
}
852
 
853
check_cppflags(){
854
    log check_cppflags "$@"
855
    check_cc "$@" <
856
int x;
857
EOF
858
}
859
 
860
check_cflags(){
861
    log check_cflags "$@"
862
    set -- $($cflags_filter "$@")
863
    check_cc "$@" <
864
int x;
865
EOF
866
}
867
 
868
check_cxxflags(){
869
    log check_cxxflags "$@"
870
    set -- $($cflags_filter "$@")
871
    check_cxx "$@" <
872
int x;
873
EOF
874
}
875
 
876
test_ldflags(){
877
    log test_ldflags "$@"
878
    check_ld "cc" "$@" <
879
int main(void){ return 0; }
880
EOF
881
}
882
 
883
check_ldflags(){
884
    log check_ldflags "$@"
885
    test_ldflags "$@" && add_ldflags "$@"
886
}
887
 
888
check_header(){
889
    log check_header "$@"
890
    header=$1
891
    shift
892
    disable_safe $header
893
    check_cpp "$@" <
894
#include <$header>
895
int x;
896
EOF
897
}
898
 
899
check_func(){
900
    log check_func "$@"
901
    func=$1
902
    shift
903
    disable $func
904
    check_ld "cc" "$@" <
905
extern int $func();
906
int main(void){ $func(); }
907
EOF
908
}
909
 
910
check_mathfunc(){
911
    log check_mathfunc "$@"
912
    func=$1
913
    narg=$2
914
    shift 2
915
    test $narg = 2 && args="f, g" || args="f"
916
    disable $func
917
    check_ld "cc" "$@" <
918
#include 
919
float foo(float f, float g) { return $func($args); }
920
int main(void){ return (int) foo; }
921
EOF
922
}
923
 
924
check_func_headers(){
925
    log check_func_headers "$@"
926
    headers=$1
927
    funcs=$2
928
    shift 2
929
    {
930
        for hdr in $headers; do
931
            echo "#include <$hdr>"
932
        done
933
        for func in $funcs; do
934
            echo "long check_$func(void) { return (long) $func; }"
935
        done
936
        echo "int main(void) { return 0; }"
937
    } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
938
}
939
 
940
check_class_headers_cpp(){
941
    log check_class_headers_cpp "$@"
942
    headers=$1
943
    classes=$2
944
    shift 2
945
    {
946
        for hdr in $headers; do
947
            echo "#include <$hdr>"
948
        done
949
        echo "int main(void) { "
950
        i=1
951
        for class in $classes; do
952
            echo "$class obj$i;"
953
            i=$(expr $i + 1)
954
        done
955
        echo "return 0; }"
956
    } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
957
}
958
 
959
check_cpp_condition(){
960
    log check_cpp_condition "$@"
961
    header=$1
962
    condition=$2
963
    shift 2
964
    check_cpp "$@" <
965
#include <$header>
966
#if !($condition)
967
#error "unsatisfied condition: $condition"
968
#endif
969
EOF
970
}
971
 
972
check_lib(){
973
    log check_lib "$@"
974
    header="$1"
975
    func="$2"
976
    shift 2
977
    check_header $header && check_func $func "$@" && add_extralibs "$@"
978
}
979
 
980
check_lib2(){
981
    log check_lib2 "$@"
982
    headers="$1"
983
    funcs="$2"
984
    shift 2
985
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
986
}
987
 
988
check_lib_cpp(){
989
    log check_lib_cpp "$@"
990
    headers="$1"
991
    classes="$2"
992
    shift 2
993
    check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
994
}
995
 
996
check_pkg_config(){
997
    log check_pkg_config "$@"
998
    pkg="$1"
999
    headers="$2"
1000
    funcs="$3"
1001
    shift 3
1002
    check_cmd $pkg_config --exists --print-errors $pkg || return
1003
    pkg_cflags=$($pkg_config --cflags $pkg)
1004
    pkg_libs=$($pkg_config --libs $pkg)
1005
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1006
        set_safe ${pkg}_cflags $pkg_cflags   &&
1007
        set_safe ${pkg}_libs   $pkg_libs
1008
}
1009
 
1010
check_exec(){
1011
    check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1012
}
1013
 
1014
check_exec_crash(){
1015
    code=$(cat)
1016
 
1017
    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1018
    # are safe but may not be available everywhere.  Thus we use
1019
    # raise(SIGTERM) instead.  The check is run in a subshell so we
1020
    # can redirect the "Terminated" message from the shell.  SIGBUS
1021
    # is not defined by standard C so it is used conditionally.
1022
 
1023
    (check_exec "$@") >> $logfile 2>&1 <
1024
#include 
1025
static void sighandler(int sig){
1026
    raise(SIGTERM);
1027
}
1028
int foo(void){
1029
    $code
1030
}
1031
int (*func_ptr)(void) = foo;
1032
int main(void){
1033
    signal(SIGILL, sighandler);
1034
    signal(SIGFPE, sighandler);
1035
    signal(SIGSEGV, sighandler);
1036
#ifdef SIGBUS
1037
    signal(SIGBUS, sighandler);
1038
#endif
1039
    return func_ptr();
1040
}
1041
EOF
1042
}
1043
 
1044
check_type(){
1045
    log check_type "$@"
1046
    headers=$1
1047
    type=$2
1048
    shift 2
1049
    disable_safe "$type"
1050
    check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1051
}
1052
 
1053
check_struct(){
1054
    log check_struct "$@"
1055
    headers=$1
1056
    struct=$2
1057
    member=$3
1058
    shift 3
1059
    disable_safe "${struct}_${member}"
1060
    check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1061
        enable_safe "${struct}_${member}"
1062
}
1063
 
1064
check_builtin(){
1065
    log check_builtin "$@"
1066
    name=$1
1067
    headers=$2
1068
    builtin=$3
1069
    shift 3
1070
    disable "$name"
1071
    check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1072
}
1073
 
1074
require(){
1075
    name="$1"
1076
    header="$2"
1077
    func="$3"
1078
    shift 3
1079
    check_lib $header $func "$@" || die "ERROR: $name not found"
1080
}
1081
 
1082
require2(){
1083
    name="$1"
1084
    headers="$2"
1085
    func="$3"
1086
    shift 3
1087
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1088
}
1089
 
1090
require_cpp(){
1091
    name="$1"
1092
    headers="$2"
1093
    classes="$3"
1094
    shift 3
1095
    check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1096
}
1097
 
1098
require_pkg_config(){
1099
    pkg="$1"
1100
    check_pkg_config "$@" || die "ERROR: $pkg not found"
1101
    add_cflags    $(get_safe ${pkg}_cflags)
1102
    add_extralibs $(get_safe ${pkg}_libs)
1103
}
1104
 
1105
hostcc_o(){
1106
    eval printf '%s\\n' $HOSTCC_O
1107
}
1108
 
1109
check_host_cc(){
1110
    log check_host_cc "$@"
1111
    cat > $TMPC
1112
    log_file $TMPC
1113
    check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1114
}
1115
 
1116
check_host_cppflags(){
1117
    log check_host_cppflags "$@"
1118
    check_host_cc "$@" <
1119
int x;
1120
EOF
1121
}
1122
 
1123
check_host_cflags(){
1124
    log check_host_cflags "$@"
1125
    set -- $($host_cflags_filter "$@")
1126
    check_host_cc "$@" <
1127
int x;
1128
EOF
1129
}
1130
 
1131
apply(){
1132
    file=$1
1133
    shift
1134
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1135
}
1136
 
1137
cp_if_changed(){
1138
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1139
    mkdir -p "$(dirname $2)"
1140
    $cp_f "$1" "$2"
1141
}
1142
 
1143
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
1144
# system-dependent things.
1145
 
1146
COMPONENT_LIST="
1147
    bsfs
1148
    decoders
1149
    demuxers
1150
    encoders
1151
    filters
1152
    hwaccels
1153
    indevs
1154
    muxers
1155
    outdevs
1156
    parsers
1157
    protocols
1158
"
1159
 
1160
EXTERNAL_LIBRARY_LIST="
1161
    avisynth
1162
    bzlib
1163
    crystalhd
1164
    fontconfig
1165
    frei0r
1166
    gnutls
1167
    iconv
1168
    ladspa
1169
    libaacplus
1170
    libass
1171
    libbluray
1172
    libcaca
1173
    libcdio
1174
    libcelt
1175
    libdc1394
1176
    libfaac
1177
    libfdk_aac
1178
    libflite
1179
    libfreetype
1180
    libgme
1181
    libgsm
1182
    libiec61883
1183
    libilbc
1184
    libmodplug
1185
    libmp3lame
1186
    libnut
1187
    libopencore_amrnb
1188
    libopencore_amrwb
1189
    libopencv
1190
    libopenjpeg
1191
    libopus
1192
    libpulse
1193
    libquvi
1194
    librtmp
1195
    libschroedinger
1196
    libshine
1197
    libsoxr
1198
    libspeex
1199
    libssh
1200
    libstagefright_h264
1201
    libtheora
1202
    libtwolame
1203
    libutvideo
1204
    libv4l2
1205
    libvidstab
1206
    libvo_aacenc
1207
    libvo_amrwbenc
1208
    libvorbis
1209
    libvpx
1210
    libwavpack
1211
    libx264
1212
    libxavs
1213
    libxvid
1214
    libzmq
1215
    libzvbi
1216
    openal
1217
    opencl
1218
    openssl
1219
    x11grab
1220
    zlib
1221
"
1222
 
1223
DOCUMENT_LIST="
1224
    doc
1225
    htmlpages
1226
    manpages
1227
    podpages
1228
    txtpages
1229
"
1230
 
1231
HWACCEL_LIST="
1232
    dxva2
1233
    vaapi
1234
    vda
1235
    vdpau
1236
"
1237
 
1238
LIBRARY_LIST="
1239
    avcodec
1240
    avdevice
1241
    avfilter
1242
    avformat
1243
    avresample
1244
    avutil
1245
    postproc
1246
    swresample
1247
    swscale
1248
"
1249
 
1250
PROGRAM_LIST="
1251
    ffplay
1252
    ffprobe
1253
    ffserver
1254
    ffmpeg
1255
"
1256
 
1257
CONFIG_LIST="
1258
    $COMPONENT_LIST
1259
    $DOCUMENT_LIST
1260
    $EXTERNAL_LIBRARY_LIST
1261
    $HWACCEL_LIST
1262
    $LIBRARY_LIST
1263
    $PROGRAM_LIST
1264
    dct
1265
    dwt
1266
    error_resilience
1267
    fast_unaligned
1268
    fft
1269
    ftrapv
1270
    gpl
1271
    gray
1272
    hardcoded_tables
1273
    incompatible_libav_abi
1274
    incompatible_fork_abi
1275
    lsp
1276
    lzo
1277
    mdct
1278
    memalign_hack
1279
    memory_poisoning
1280
    network
1281
    nonfree
1282
    pic
1283
    rdft
1284
    runtime_cpudetect
1285
    safe_bitstream_reader
1286
    shared
1287
    small
1288
    sram
1289
    static
1290
    swscale_alpha
1291
    thumb
1292
    version3
1293
    xmm_clobber_test
1294
"
1295
 
1296
THREADS_LIST='
1297
    pthreads
1298
    w32threads
1299
    os2threads
1300
'
1301
 
1302
ATOMICS_LIST='
1303
    atomics_gcc
1304
    atomics_suncc
1305
    atomics_win32
1306
'
1307
 
1308
ARCH_LIST='
1309
    aarch64
1310
    alpha
1311
    arm
1312
    avr32
1313
    avr32_ap
1314
    avr32_uc
1315
    bfin
1316
    ia64
1317
    m68k
1318
    mips
1319
    mips64
1320
    parisc
1321
    ppc
1322
    ppc64
1323
    s390
1324
    sh4
1325
    sparc
1326
    sparc64
1327
    tilegx
1328
    tilepro
1329
    tomi
1330
    x86
1331
    x86_32
1332
    x86_64
1333
'
1334
 
1335
ARCH_EXT_LIST_ARM='
1336
    armv5te
1337
    armv6
1338
    armv6t2
1339
    neon
1340
    vfp
1341
    vfpv3
1342
'
1343
 
1344
ARCH_EXT_LIST_X86='
1345
    amd3dnow
1346
    amd3dnowext
1347
    avx
1348
    avx2
1349
    fma4
1350
    i686
1351
    mmx
1352
    mmxext
1353
    sse
1354
    sse2
1355
    sse3
1356
    sse4
1357
    sse42
1358
    ssse3
1359
'
1360
 
1361
ARCH_EXT_LIST="
1362
    $ARCH_EXT_LIST_ARM
1363
    $ARCH_EXT_LIST_X86
1364
    altivec
1365
    ppc4xx
1366
    vis
1367
    mipsfpu
1368
    mips32r2
1369
    mipsdspr1
1370
    mipsdspr2
1371
"
1372
 
1373
HAVE_LIST_CMDLINE='
1374
    inline_asm
1375
    symver
1376
    yasm
1377
'
1378
 
1379
HAVE_LIST_PUB='
1380
    bigendian
1381
    fast_unaligned
1382
    incompatible_libav_abi
1383
    incompatible_fork_abi
1384
'
1385
 
1386
MATH_FUNCS="
1387
    atanf
1388
    atan2f
1389
    cbrt
1390
    cbrtf
1391
    cosf
1392
    exp2
1393
    exp2f
1394
    expf
1395
    isinf
1396
    isnan
1397
    ldexpf
1398
    llrint
1399
    llrintf
1400
    log2
1401
    log2f
1402
    log10f
1403
    lrint
1404
    lrintf
1405
    powf
1406
    rint
1407
    round
1408
    roundf
1409
    sinf
1410
    trunc
1411
    truncf
1412
"
1413
 
1414
HAVE_LIST="
1415
    $ARCH_EXT_LIST
1416
    $(add_suffix _external $ARCH_EXT_LIST)
1417
    $(add_suffix _inline   $ARCH_EXT_LIST)
1418
    $HAVE_LIST_CMDLINE
1419
    $HAVE_LIST_PUB
1420
    $THREADS_LIST
1421
    $ATOMICS_LIST
1422
    $MATH_FUNCS
1423
    access
1424
    aligned_malloc
1425
    aligned_stack
1426
    alsa_asoundlib_h
1427
    altivec_h
1428
    arpa_inet_h
1429
    asm_mod_q
1430
    asm_mod_y
1431
    asm_types_h
1432
    atomic_cas_ptr
1433
    atomics_native
1434
    attribute_may_alias
1435
    attribute_packed
1436
    cdio_paranoia_h
1437
    cdio_paranoia_paranoia_h
1438
    CL_cl_h
1439
    clock_gettime
1440
    closesocket
1441
    CommandLineToArgvW
1442
    cpunop
1443
    CryptGenRandom
1444
    dcbzl
1445
    dev_bktr_ioctl_bt848_h
1446
    dev_bktr_ioctl_meteor_h
1447
    dev_ic_bt8xx_h
1448
    dev_video_bktr_ioctl_bt848_h
1449
    dev_video_meteor_ioctl_meteor_h
1450
    direct_h
1451
    dlfcn_h
1452
    dlopen
1453
    dos_paths
1454
    dxva_h
1455
    ebp_available
1456
    ebx_available
1457
    fast_64bit
1458
    fast_clz
1459
    fast_cmov
1460
    fcntl
1461
    fork
1462
    getaddrinfo
1463
    gethrtime
1464
    getrusage
1465
    glob
1466
    gnu_as
1467
    ibm_asm
1468
    inet_aton
1469
    io_h
1470
    inline_asm_labels
1471
    isatty
1472
    jack_port_get_latency_range
1473
    kbhit
1474
    ldbrx
1475
    libdc1394_1
1476
    libdc1394_2
1477
    local_aligned_16
1478
    local_aligned_8
1479
    localtime_r
1480
    loongson
1481
    lzo1x_999_compress
1482
    machine_ioctl_bt848_h
1483
    machine_ioctl_meteor_h
1484
    machine_rw_barrier
1485
    makeinfo
1486
    malloc_h
1487
    memalign
1488
    mkstemp
1489
    mm_empty
1490
    mmap
1491
    msvcrt
1492
    nanosleep
1493
    openjpeg_1_5_openjpeg_h
1494
    PeekNamedPipe
1495
    perl
1496
    pod2man
1497
    poll_h
1498
    posix_memalign
1499
    pragma_deprecated
1500
    pthread_cancel
1501
    rdtsc
1502
    rsync_contimeout
1503
    sarestart
1504
    sched_getaffinity
1505
    sdl
1506
    SetConsoleTextAttribute
1507
    setmode
1508
    setrlimit
1509
    Sleep
1510
    sndio_h
1511
    socklen_t
1512
    soundcard_h
1513
    strerror_r
1514
    struct_addrinfo
1515
    struct_group_source_req
1516
    struct_ip_mreq_source
1517
    struct_ipv6_mreq
1518
    struct_pollfd
1519
    struct_rusage_ru_maxrss
1520
    struct_sctp_event_subscribe
1521
    struct_sockaddr_in6
1522
    struct_sockaddr_sa_len
1523
    struct_sockaddr_storage
1524
    struct_stat_st_mtim_tv_nsec
1525
    struct_v4l2_frmivalenum_discrete
1526
    symver_asm_label
1527
    symver_gnu_asm
1528
    sync_val_compare_and_swap
1529
    sysconf
1530
    sysctl
1531
    sys_mman_h
1532
    sys_param_h
1533
    sys_resource_h
1534
    sys_select_h
1535
    sys_soundcard_h
1536
    sys_time_h
1537
    sys_un_h
1538
    sys_videoio_h
1539
    termios_h
1540
    texi2html
1541
    threads
1542
    unistd_h
1543
    usleep
1544
    vfp_args
1545
    winsock2_h
1546
    xform_asm
1547
    xmm_clobbers
1548
"
1549
 
1550
# options emitted with CONFIG_ prefix but not available on the command line
1551
CONFIG_EXTRA="
1552
    aandcttables
1553
    ac3dsp
1554
    audio_frame_queue
1555
    dsputil
1556
    exif
1557
    frame_thread_encoder
1558
    gcrypt
1559
    golomb
1560
    gplv3
1561
    h264chroma
1562
    h264dsp
1563
    h264pred
1564
    h264qpel
1565
    hpeldsp
1566
    huffman
1567
    lgplv3
1568
    lpc
1569
    mpegaudio
1570
    mpegaudiodsp
1571
    mpegvideo
1572
    mpegvideoenc
1573
    nettle
1574
    rangecoder
1575
    riffdec
1576
    riffenc
1577
    rtpdec
1578
    rtpenc_chain
1579
    sinewin
1580
    videodsp
1581
    vp3dsp
1582
"
1583
 
1584
CMDLINE_SELECT="
1585
    $ARCH_EXT_LIST
1586
    $CONFIG_LIST
1587
    $HAVE_LIST_CMDLINE
1588
    $THREADS_LIST
1589
    asm
1590
    cross_compile
1591
    debug
1592
    extra_warnings
1593
    logging
1594
    lto
1595
    optimizations
1596
    stripping
1597
"
1598
 
1599
PATHS_LIST='
1600
    bindir
1601
    datadir
1602
    docdir
1603
    incdir
1604
    libdir
1605
    mandir
1606
    prefix
1607
    shlibdir
1608
'
1609
 
1610
CMDLINE_SET="
1611
    $PATHS_LIST
1612
    ar
1613
    arch
1614
    as
1615
    assert_level
1616
    build_suffix
1617
    cc
1618
    cpu
1619
    cross_prefix
1620
    cxx
1621
    dep_cc
1622
    extra_version
1623
    host_cc
1624
    host_cflags
1625
    host_ld
1626
    host_ldflags
1627
    host_libs
1628
    host_os
1629
    install
1630
    ld
1631
    logfile
1632
    malloc_prefix
1633
    nm
1634
    optflags
1635
    pkg_config
1636
    progs_suffix
1637
    random_seed
1638
    samples
1639
    strip
1640
    sysinclude
1641
    sysroot
1642
    target_exec
1643
    target_os
1644
    target_path
1645
    target_samples
1646
    tempprefix
1647
    toolchain
1648
    valgrind
1649
    yasmexe
1650
"
1651
 
1652
CMDLINE_APPEND="
1653
    extra_cflags
1654
    extra_cxxflags
1655
    host_cppflags
1656
"
1657
 
1658
# code dependency declarations
1659
 
1660
# architecture extensions
1661
 
1662
armv5te_deps="arm"
1663
armv6_deps="arm"
1664
armv6t2_deps="arm"
1665
neon_deps="arm"
1666
vfp_deps="arm"
1667
vfpv3_deps="vfp"
1668
 
1669
map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1670
 
1671
mipsfpu_deps="mips"
1672
mips32r2_deps="mips"
1673
mipsdspr1_deps="mips"
1674
mipsdspr2_deps="mips"
1675
 
1676
altivec_deps="ppc"
1677
ppc4xx_deps="ppc"
1678
 
1679
vis_deps="sparc"
1680
 
1681
cpunop_deps="i686"
1682
x86_64_select="i686"
1683
x86_64_suggest="fast_cmov"
1684
 
1685
amd3dnow_deps="mmx"
1686
amd3dnowext_deps="amd3dnow"
1687
mmx_deps="x86"
1688
mmxext_deps="mmx"
1689
sse_deps="mmxext"
1690
sse2_deps="sse"
1691
sse3_deps="sse2"
1692
ssse3_deps="sse3"
1693
sse4_deps="ssse3"
1694
sse42_deps="sse4"
1695
avx_deps="sse42"
1696
fma4_deps="avx"
1697
avx2_deps="avx"
1698
 
1699
mmx_external_deps="yasm"
1700
mmx_inline_deps="inline_asm"
1701
mmx_suggest="mmx_external mmx_inline"
1702
 
1703
for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1704
    eval dep=\$${ext}_deps
1705
    eval ${ext}_external_deps='"${dep}_external"'
1706
    eval ${ext}_inline_deps='"${dep}_inline"'
1707
    eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1708
done
1709
 
1710
aligned_stack_if_any="ppc x86"
1711
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1712
fast_clz_if_any="alpha avr32 mips ppc x86"
1713
fast_unaligned_if_any="ppc x86"
1714
 
1715
inline_asm_deps="!tms470"
1716
need_memalign="altivec neon sse"
1717
 
1718
symver_if_any="symver_asm_label symver_gnu_asm"
1719
 
1720
log2_deps="!msvcrt"
1721
 
1722
# subsystems
1723
dct_select="rdft"
1724
error_resilience_select="dsputil"
1725
frame_thread_encoder_deps="encoders threads"
1726
lpc_select="dsputil"
1727
mdct_select="fft"
1728
rdft_select="fft"
1729
mpegaudio_select="mpegaudiodsp"
1730
mpegaudiodsp_select="dct"
1731
mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1732
mpegvideoenc_select="mpegvideo"
1733
 
1734
# decoders / encoders
1735
aac_decoder_select="mdct sinewin"
1736
aac_encoder_select="audio_frame_queue mdct sinewin"
1737
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1738
ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1739
ac3_encoder_select="mdct ac3dsp dsputil"
1740
ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1741
aic_decoder_select="dsputil golomb"
1742
alac_encoder_select="lpc"
1743
als_decoder_select="dsputil"
1744
amrnb_decoder_select="lsp"
1745
amrwb_decoder_select="lsp"
1746
amv_decoder_select="dsputil hpeldsp exif"
1747
amv_encoder_select="aandcttables"
1748
ape_decoder_select="dsputil"
1749
asv1_decoder_select="dsputil"
1750
asv1_encoder_select="dsputil"
1751
asv2_decoder_select="dsputil"
1752
asv2_encoder_select="dsputil"
1753
atrac1_decoder_select="mdct sinewin"
1754
atrac3_decoder_select="mdct"
1755
avrn_decoder_select="exif"
1756
bink_decoder_select="dsputil hpeldsp"
1757
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1758
binkaudio_rdft_decoder_select="mdct rdft sinewin"
1759
cavs_decoder_select="dsputil golomb h264chroma videodsp"
1760
cllc_decoder_select="dsputil"
1761
comfortnoise_encoder_select="lpc"
1762
cook_decoder_select="dsputil mdct sinewin"
1763
cscd_decoder_select="lzo"
1764
cscd_decoder_suggest="zlib"
1765
dca_decoder_select="mdct"
1766
dirac_decoder_select="dsputil dwt golomb videodsp"
1767
dnxhd_decoder_select="dsputil"
1768
dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1769
dvvideo_decoder_select="dsputil"
1770
dvvideo_encoder_select="dsputil"
1771
dxa_decoder_select="zlib"
1772
eac3_decoder_select="ac3_decoder"
1773
eac3_encoder_select="ac3_encoder"
1774
eamad_decoder_select="aandcttables dsputil mpegvideo"
1775
eatgq_decoder_select="aandcttables"
1776
eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1777
exr_decoder_select="zlib"
1778
ffv1_decoder_select="dsputil golomb rangecoder"
1779
ffv1_encoder_select="dsputil rangecoder"
1780
ffvhuff_decoder_select="dsputil"
1781
ffvhuff_encoder_select="dsputil huffman"
1782
flac_decoder_select="golomb"
1783
flac_encoder_select="dsputil golomb lpc"
1784
flashsv_decoder_select="zlib"
1785
flashsv_encoder_select="zlib"
1786
flashsv2_encoder_select="zlib"
1787
flashsv2_decoder_select="zlib"
1788
flv_decoder_select="h263_decoder"
1789
flv_encoder_select="h263_encoder"
1790
fourxm_decoder_select="dsputil"
1791
fraps_decoder_select="dsputil huffman"
1792
g2m_decoder_select="dsputil zlib"
1793
g729_decoder_select="dsputil"
1794
h261_decoder_select="error_resilience mpegvideo"
1795
h261_encoder_select="aandcttables mpegvideoenc"
1796
h263_decoder_select="error_resilience h263_parser mpegvideo"
1797
h263_encoder_select="aandcttables mpegvideoenc"
1798
h263i_decoder_select="h263_decoder"
1799
h263p_encoder_select="h263_encoder"
1800
h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1801
h264_decoder_suggest="error_resilience"
1802
hevc_decoder_select="dsputil golomb videodsp"
1803
huffyuv_decoder_select="dsputil"
1804
huffyuv_encoder_select="dsputil huffman"
1805
iac_decoder_select="dsputil fft mdct sinewin"
1806
imc_decoder_select="dsputil fft mdct sinewin"
1807
indeo3_decoder_select="hpeldsp"
1808
interplay_video_decoder_select="hpeldsp"
1809
jpegls_decoder_select="dsputil golomb hpeldsp exif"
1810
jpegls_encoder_select="golomb"
1811
jv_decoder_select="dsputil"
1812
lagarith_decoder_select="dsputil"
1813
ljpeg_encoder_select="aandcttables mpegvideoenc"
1814
loco_decoder_select="golomb"
1815
mdec_decoder_select="dsputil error_resilience mpegvideo"
1816
metasound_decoder_select="lsp mdct sinewin"
1817
mimic_decoder_select="dsputil hpeldsp"
1818
mjpeg_decoder_select="dsputil hpeldsp exif"
1819
mjpegb_decoder_select="dsputil hpeldsp exif"
1820
mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
1821
mlp_decoder_select="dsputil mlp_parser"
1822
motionpixels_decoder_select="dsputil"
1823
mp1_decoder_select="mpegaudio"
1824
mp1float_decoder_select="mpegaudio"
1825
mp2_decoder_select="mpegaudio"
1826
mp2float_decoder_select="mpegaudio"
1827
mp3_decoder_select="mpegaudio"
1828
mp3adu_decoder_select="mpegaudio"
1829
mp3adufloat_decoder_select="mpegaudio"
1830
mp3float_decoder_select="mpegaudio"
1831
mp3on4_decoder_select="mpegaudio"
1832
mp3on4float_decoder_select="mpegaudio"
1833
mpc7_decoder_select="dsputil mpegaudiodsp"
1834
mpc8_decoder_select="dsputil mpegaudiodsp"
1835
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1836
mpeg_xvmc_decoder_select="mpeg2video_decoder"
1837
mpeg1video_decoder_select="error_resilience mpegvideo"
1838
mpeg1video_encoder_select="aandcttables mpegvideoenc"
1839
mpeg2video_decoder_select="error_resilience mpegvideo"
1840
mpeg2video_encoder_select="aandcttables mpegvideoenc"
1841
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1842
mpeg4_encoder_select="h263_encoder"
1843
msmpeg4v1_decoder_select="h263_decoder"
1844
msmpeg4v2_decoder_select="h263_decoder"
1845
msmpeg4v2_encoder_select="h263_encoder"
1846
msmpeg4v3_decoder_select="h263_decoder"
1847
msmpeg4v3_encoder_select="h263_encoder"
1848
mss2_decoder_select="error_resilience vc1_decoder"
1849
mxpeg_decoder_select="dsputil hpeldsp exif"
1850
nellymoser_decoder_select="mdct sinewin"
1851
nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1852
nuv_decoder_select="dsputil lzo"
1853
png_decoder_select="zlib"
1854
png_encoder_select="dsputil zlib"
1855
prores_decoder_select="dsputil"
1856
prores_encoder_select="dsputil"
1857
qcelp_decoder_select="lsp"
1858
qdm2_decoder_select="mdct rdft mpegaudiodsp"
1859
ra_144_encoder_select="audio_frame_queue lpc"
1860
ralf_decoder_select="golomb"
1861
rtjpeg_decoder_select="dsputil"
1862
rv10_decoder_select="error_resilience h263_decoder"
1863
rv10_encoder_select="h263_encoder"
1864
rv20_decoder_select="error_resilience h263_decoder"
1865
rv20_encoder_select="h263_encoder"
1866
rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1867
rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1868
shorten_decoder_select="golomb"
1869
sipr_decoder_select="lsp"
1870
snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
1871
snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
1872
sonic_decoder_select="golomb"
1873
sonic_encoder_select="golomb"
1874
sonic_ls_encoder_select="golomb"
1875
sp5x_decoder_select="dsputil hpeldsp exif"
1876
svq1_decoder_select="hpeldsp"
1877
svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1878
svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
1879
svq3_decoder_suggest="error_resilience zlib"
1880
tak_decoder_select="dsputil"
1881
theora_decoder_select="vp3_decoder"
1882
tiff_decoder_suggest="zlib"
1883
tiff_encoder_suggest="zlib"
1884
thp_decoder_select="dsputil hpeldsp exif"
1885
truehd_decoder_select="mlp_parser"
1886
truemotion2_decoder_select="dsputil"
1887
truespeech_decoder_select="dsputil"
1888
tscc_decoder_select="zlib"
1889
twinvq_decoder_select="mdct lsp sinewin"
1890
utvideo_decoder_select="dsputil"
1891
utvideo_encoder_select="dsputil huffman"
1892
vble_decoder_select="dsputil"
1893
vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel"
1894
vc1image_decoder_select="vc1_decoder"
1895
vorbis_decoder_select="mdct"
1896
vorbis_encoder_select="mdct"
1897
vp3_decoder_select="hpeldsp vp3dsp videodsp"
1898
vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1899
vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1900
vp6a_decoder_select="vp6_decoder"
1901
vp6f_decoder_select="vp6_decoder"
1902
vp8_decoder_select="h264pred videodsp"
1903
vp9_decoder_select="videodsp"
1904
webp_decoder_select="vp8_decoder"
1905
wmapro_decoder_select="mdct sinewin"
1906
wmav1_decoder_select="mdct sinewin"
1907
wmav1_encoder_select="mdct sinewin"
1908
wmav2_decoder_select="mdct sinewin"
1909
wmav2_encoder_select="mdct sinewin"
1910
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1911
wmv1_decoder_select="h263_decoder"
1912
wmv1_encoder_select="h263_encoder"
1913
wmv2_decoder_select="h263_decoder videodsp"
1914
wmv2_encoder_select="h263_encoder"
1915
wmv3_decoder_select="vc1_decoder"
1916
wmv3image_decoder_select="wmv3_decoder"
1917
zerocodec_decoder_select="zlib"
1918
zlib_decoder_select="zlib"
1919
zlib_encoder_select="zlib"
1920
zmbv_decoder_select="zlib"
1921
zmbv_encoder_select="zlib"
1922
 
1923
# hardware accelerators
1924
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1925
dxva2_deps="dxva2api_h"
1926
vaapi_deps="va_va_h"
1927
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1928
vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1929
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1930
 
1931
h263_vaapi_hwaccel_deps="vaapi"
1932
h263_vaapi_hwaccel_select="h263_decoder"
1933
h263_vdpau_hwaccel_deps="vdpau"
1934
h263_vdpau_hwaccel_select="h263_decoder"
1935
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1936
h264_dxva2_hwaccel_deps="dxva2"
1937
h264_dxva2_hwaccel_select="h264_decoder"
1938
h264_vaapi_hwaccel_deps="vaapi"
1939
h264_vaapi_hwaccel_select="h264_decoder"
1940
h264_vda_decoder_deps="vda"
1941
h264_vda_decoder_select="h264_decoder"
1942
h264_vda_hwaccel_deps="vda"
1943
h264_vda_hwaccel_select="h264_decoder"
1944
h264_vdpau_decoder_deps="vdpau"
1945
h264_vdpau_decoder_select="h264_decoder"
1946
h264_vdpau_hwaccel_deps="vdpau"
1947
h264_vdpau_hwaccel_select="h264_decoder"
1948
mpeg_vdpau_decoder_deps="vdpau"
1949
mpeg_vdpau_decoder_select="mpeg2video_decoder"
1950
mpeg1_vdpau_decoder_deps="vdpau"
1951
mpeg1_vdpau_decoder_select="mpeg1video_decoder"
1952
mpeg1_vdpau_hwaccel_deps="vdpau"
1953
mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1954
mpeg2_crystalhd_decoder_select="crystalhd"
1955
mpeg2_dxva2_hwaccel_deps="dxva2"
1956
mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1957
mpeg2_vaapi_hwaccel_deps="vaapi"
1958
mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1959
mpeg2_vdpau_hwaccel_deps="vdpau"
1960
mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1961
mpeg4_crystalhd_decoder_select="crystalhd"
1962
mpeg4_vaapi_hwaccel_deps="vaapi"
1963
mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1964
mpeg4_vdpau_decoder_deps="vdpau"
1965
mpeg4_vdpau_decoder_select="mpeg4_decoder"
1966
mpeg4_vdpau_hwaccel_deps="vdpau"
1967
mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1968
msmpeg4_crystalhd_decoder_select="crystalhd"
1969
vc1_crystalhd_decoder_select="crystalhd"
1970
vc1_dxva2_hwaccel_deps="dxva2"
1971
vc1_dxva2_hwaccel_select="vc1_decoder"
1972
vc1_vaapi_hwaccel_deps="vaapi"
1973
vc1_vaapi_hwaccel_select="vc1_decoder"
1974
vc1_vdpau_decoder_deps="vdpau"
1975
vc1_vdpau_decoder_select="vc1_decoder"
1976
vc1_vdpau_hwaccel_deps="vdpau"
1977
vc1_vdpau_hwaccel_select="vc1_decoder"
1978
wmv3_crystalhd_decoder_select="crystalhd"
1979
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1980
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1981
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1982
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1983
 
1984
# parsers
1985
h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1986
mpeg4video_parser_select="error_resilience mpegvideo"
1987
mpegvideo_parser_select="error_resilience mpegvideo"
1988
vc1_parser_select="mpegvideo"
1989
 
1990
# external libraries
1991
libaacplus_encoder_deps="libaacplus"
1992
libcelt_decoder_deps="libcelt"
1993
libfaac_encoder_deps="libfaac"
1994
libfaac_encoder_select="audio_frame_queue"
1995
libfdk_aac_decoder_deps="libfdk_aac"
1996
libfdk_aac_encoder_deps="libfdk_aac"
1997
libfdk_aac_encoder_select="audio_frame_queue"
1998
libgme_demuxer_deps="libgme"
1999
libgsm_decoder_deps="libgsm"
2000
libgsm_encoder_deps="libgsm"
2001
libgsm_ms_decoder_deps="libgsm"
2002
libgsm_ms_encoder_deps="libgsm"
2003
libilbc_decoder_deps="libilbc"
2004
libilbc_encoder_deps="libilbc"
2005
libmodplug_demuxer_deps="libmodplug"
2006
libmp3lame_encoder_deps="libmp3lame"
2007
libmp3lame_encoder_select="audio_frame_queue"
2008
libopencore_amrnb_decoder_deps="libopencore_amrnb"
2009
libopencore_amrnb_encoder_deps="libopencore_amrnb"
2010
libopencore_amrnb_encoder_select="audio_frame_queue"
2011
libopencore_amrwb_decoder_deps="libopencore_amrwb"
2012
libopenjpeg_decoder_deps="libopenjpeg"
2013
libopenjpeg_encoder_deps="libopenjpeg"
2014
libopus_decoder_deps="libopus"
2015
libopus_encoder_deps="libopus"
2016
libopus_encoder_select="audio_frame_queue"
2017
libquvi_demuxer_deps="libquvi"
2018
libschroedinger_decoder_deps="libschroedinger"
2019
libschroedinger_encoder_deps="libschroedinger"
2020
libshine_encoder_deps="libshine"
2021
libshine_encoder_select="audio_frame_queue"
2022
libspeex_decoder_deps="libspeex"
2023
libspeex_encoder_deps="libspeex"
2024
libspeex_encoder_select="audio_frame_queue"
2025
libstagefright_h264_decoder_deps="libstagefright_h264"
2026
libtheora_encoder_deps="libtheora"
2027
libtwolame_encoder_deps="libtwolame"
2028
libvo_aacenc_encoder_deps="libvo_aacenc"
2029
libvo_aacenc_encoder_select="audio_frame_queue"
2030
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2031
libvorbis_decoder_deps="libvorbis"
2032
libvorbis_encoder_deps="libvorbis"
2033
libvorbis_encoder_select="audio_frame_queue"
2034
libvpx_vp8_decoder_deps="libvpx"
2035
libvpx_vp8_encoder_deps="libvpx"
2036
libvpx_vp9_decoder_deps="libvpx"
2037
libvpx_vp9_encoder_deps="libvpx"
2038
libwavpack_encoder_deps="libwavpack"
2039
libx264_encoder_deps="libx264"
2040
libx264rgb_encoder_deps="libx264"
2041
libxavs_encoder_deps="libxavs"
2042
libxvid_encoder_deps="libxvid"
2043
libutvideo_decoder_deps="libutvideo"
2044
libutvideo_encoder_deps="libutvideo"
2045
libzvbi_teletext_decoder_deps="libzvbi"
2046
 
2047
# demuxers / muxers
2048
ac3_demuxer_select="ac3_parser"
2049
asf_demuxer_select="riffdec"
2050
asf_muxer_select="riffenc"
2051
asf_stream_muxer_select="asf_muxer"
2052
avi_demuxer_select="riffdec"
2053
avi_muxer_select="riffenc"
2054
avisynth_demuxer_deps="avisynth"
2055
avisynth_demuxer_select="riffdec"
2056
caf_demuxer_select="riffdec"
2057
dirac_demuxer_select="dirac_parser"
2058
dts_demuxer_select="dca_parser"
2059
dtshd_demuxer_select="dca_parser"
2060
dxa_demuxer_select="riffdec"
2061
eac3_demuxer_select="ac3_parser"
2062
f4v_muxer_select="mov_muxer"
2063
flac_demuxer_select="flac_parser"
2064
hls_muxer_select="mpegts_muxer"
2065
ipod_muxer_select="mov_muxer"
2066
ismv_muxer_select="mov_muxer"
2067
libnut_demuxer_deps="libnut"
2068
libnut_muxer_deps="libnut"
2069
matroska_audio_muxer_select="matroska_muxer"
2070
matroska_demuxer_select="riffdec"
2071
matroska_demuxer_suggest="bzlib lzo zlib"
2072
matroska_muxer_select="riffenc"
2073
mmf_muxer_select="riffenc"
2074
mov_demuxer_select="riffdec"
2075
mov_demuxer_suggest="zlib"
2076
mov_muxer_select="riffenc rtpenc_chain"
2077
mp3_demuxer_select="mpegaudio_parser"
2078
mp4_muxer_select="mov_muxer"
2079
mpegts_muxer_select="adts_muxer latm_muxer"
2080
mpegtsraw_demuxer_select="mpegts_demuxer"
2081
mxf_d10_muxer_select="mxf_muxer"
2082
nut_muxer_select="riffenc"
2083
nuv_demuxer_select="riffdec"
2084
ogg_demuxer_select="golomb"
2085
psp_muxer_select="mov_muxer"
2086
rtp_demuxer_select="sdp_demuxer"
2087
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2088
rtsp_demuxer_select="http_protocol rtpdec"
2089
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2090
sap_demuxer_select="sdp_demuxer"
2091
sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2092
sdp_demuxer_select="rtpdec"
2093
smoothstreaming_muxer_select="ismv_muxer"
2094
spdif_muxer_select="aac_parser"
2095
tak_demuxer_select="tak_parser"
2096
tg2_muxer_select="mov_muxer"
2097
tgp_muxer_select="mov_muxer"
2098
vobsub_demuxer_select="mpegps_demuxer"
2099
w64_demuxer_select="wav_demuxer"
2100
w64_muxer_select="wav_muxer"
2101
wav_demuxer_select="riffdec"
2102
wav_muxer_select="riffenc"
2103
webm_muxer_select="riffenc"
2104
wtv_demuxer_select="riffdec"
2105
xmv_demuxer_select="riffdec"
2106
xwma_demuxer_select="riffdec"
2107
 
2108
# indevs / outdevs
2109
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2110
alsa_outdev_deps="alsa_asoundlib_h"
2111
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2112
caca_outdev_deps="libcaca"
2113
dshow_indev_deps="IBaseFilter"
2114
dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2115
dv1394_indev_deps="dv1394"
2116
dv1394_indev_select="dv_demuxer"
2117
fbdev_indev_deps="linux_fb_h"
2118
fbdev_outdev_deps="linux_fb_h"
2119
iec61883_indev_deps="libiec61883"
2120
jack_indev_deps="jack_jack_h sem_timedwait"
2121
lavfi_indev_deps="avfilter"
2122
libcdio_indev_deps="libcdio"
2123
libdc1394_indev_deps="libdc1394"
2124
libv4l2_indev_deps="libv4l2"
2125
openal_indev_deps="openal"
2126
oss_indev_deps_any="soundcard_h sys_soundcard_h"
2127
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2128
pulse_indev_deps="libpulse"
2129
pulse_outdev_deps="libpulse"
2130
sdl_outdev_deps="sdl"
2131
sndio_indev_deps="sndio_h"
2132
sndio_outdev_deps="sndio_h"
2133
v4l_indev_deps="linux_videodev_h"
2134
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2135
v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2136
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2137
vfwcap_indev_extralibs="-lavicap32"
2138
xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2139
xv_outdev_extralibs="-lXv -lX11 -lXext"
2140
x11grab_indev_deps="x11grab"
2141
 
2142
# protocols
2143
bluray_protocol_deps="libbluray"
2144
ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2145
ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2146
ffrtmpcrypt_protocol_select="tcp_protocol"
2147
ffrtmphttp_protocol_deps="!librtmp_protocol"
2148
ffrtmphttp_protocol_select="http_protocol"
2149
ftp_protocol_select="tcp_protocol"
2150
gopher_protocol_select="network"
2151
httpproxy_protocol_select="tcp_protocol"
2152
http_protocol_select="tcp_protocol"
2153
https_protocol_select="tls_protocol"
2154
librtmp_protocol_deps="librtmp"
2155
librtmpe_protocol_deps="librtmp"
2156
librtmps_protocol_deps="librtmp"
2157
librtmpt_protocol_deps="librtmp"
2158
librtmpte_protocol_deps="librtmp"
2159
libssh_protocol_deps="libssh"
2160
mmsh_protocol_select="http_protocol"
2161
mmst_protocol_select="network"
2162
rtmp_protocol_deps="!librtmp_protocol"
2163
rtmp_protocol_select="tcp_protocol"
2164
rtmpe_protocol_select="ffrtmpcrypt_protocol"
2165
rtmps_protocol_deps="!librtmp_protocol"
2166
rtmps_protocol_select="tls_protocol"
2167
rtmpt_protocol_select="ffrtmphttp_protocol"
2168
rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2169
rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2170
rtp_protocol_select="udp_protocol"
2171
sctp_protocol_deps="struct_sctp_event_subscribe"
2172
sctp_protocol_select="network"
2173
srtp_protocol_select="rtp_protocol"
2174
tcp_protocol_select="network"
2175
tls_protocol_deps_any="openssl gnutls"
2176
tls_protocol_select="tcp_protocol"
2177
udp_protocol_select="network"
2178
unix_protocol_deps="sys_un_h"
2179
unix_protocol_select="network"
2180
 
2181
# filters
2182
aconvert_filter_deps="swresample"
2183
amovie_filter_deps="avcodec avformat"
2184
aresample_filter_deps="swresample"
2185
ass_filter_deps="libass"
2186
asyncts_filter_deps="avresample"
2187
atempo_filter_deps="avcodec"
2188
atempo_filter_select="rdft"
2189
azmq_filter_deps="libzmq"
2190
blackframe_filter_deps="gpl"
2191
boxblur_filter_deps="gpl"
2192
colormatrix_filter_deps="gpl"
2193
cropdetect_filter_deps="gpl"
2194
dctdnoiz_filter_deps="avcodec"
2195
dctdnoiz_filter_select="fft"
2196
delogo_filter_deps="gpl"
2197
deshake_filter_deps="avcodec"
2198
deshake_filter_select="dsputil"
2199
drawtext_filter_deps="libfreetype"
2200
ebur128_filter_deps="gpl"
2201
flite_filter_deps="libflite"
2202
frei0r_filter_deps="frei0r dlopen"
2203
frei0r_filter_extralibs='$ldl'
2204
frei0r_src_filter_deps="frei0r dlopen"
2205
frei0r_src_filter_extralibs='$ldl'
2206
geq_filter_deps="gpl"
2207
histeq_filter_deps="gpl"
2208
hqdn3d_filter_deps="gpl"
2209
interlace_filter_deps="gpl"
2210
kerndeint_filter_deps="gpl"
2211
ladspa_filter_deps="ladspa dlopen"
2212
mcdeint_filter_deps="avcodec gpl"
2213
movie_filter_deps="avcodec avformat"
2214
mp_filter_deps="gpl avcodec swscale inline_asm"
2215
mpdecimate_filter_deps="gpl avcodec"
2216
mptestsrc_filter_deps="gpl"
2217
negate_filter_deps="lut_filter"
2218
perspective_filter_deps="gpl"
2219
resample_filter_deps="avresample"
2220
ocv_filter_deps="libopencv"
2221
owdenoise_filter_deps="gpl"
2222
pan_filter_deps="swresample"
2223
phase_filter_deps="gpl"
2224
pp_filter_deps="gpl postproc"
2225
pullup_filter_deps="gpl"
2226
removelogo_filter_deps="avcodec avformat swscale"
2227
sab_filter_deps="gpl swscale"
2228
scale_filter_deps="swscale"
2229
smartblur_filter_deps="gpl swscale"
2230
showspectrum_filter_deps="avcodec"
2231
showspectrum_filter_select="rdft"
2232
spp_filter_deps="gpl avcodec"
2233
spp_filter_select="fft"
2234
stereo3d_filter_deps="gpl"
2235
subtitles_filter_deps="avformat avcodec libass"
2236
super2xsai_filter_deps="gpl"
2237
tinterlace_filter_deps="gpl"
2238
vidstabdetect_filter_deps="libvidstab"
2239
vidstabtransform_filter_deps="libvidstab"
2240
yadif_filter_deps="gpl"
2241
pixfmts_super2xsai_test_deps="super2xsai_filter"
2242
tinterlace_merge_test_deps="tinterlace_filter"
2243
tinterlace_pad_test_deps="tinterlace_filter"
2244
zmq_filter_deps="libzmq"
2245
 
2246
# libraries
2247
avcodec_deps="avutil"
2248
avdevice_deps="avutil avcodec avformat"
2249
avfilter_deps="avutil"
2250
avformat_deps="avutil avcodec"
2251
avresample_deps="avutil"
2252
postproc_deps="avutil gpl"
2253
swscale_deps="avutil"
2254
 
2255
# programs
2256
ffmpeg_deps="avcodec avfilter avformat swresample"
2257
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2258
               null_filter
2259
               setpts_filter trim_filter"
2260
ffplay_deps="avcodec avformat swscale swresample sdl"
2261
ffplay_select="rdft crop_filter"
2262
ffprobe_deps="avcodec avformat"
2263
ffserver_deps="avformat fork sarestart"
2264
ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2265
ffserver_extralibs='$ldl'
2266
 
2267
# documentation
2268
podpages_deps="perl"
2269
manpages_deps="perl pod2man"
2270
htmlpages_deps="texi2html"
2271
txtpages_deps="makeinfo"
2272
doc_deps_any="manpages htmlpages podpages txtpages"
2273
 
2274
# default parameters
2275
 
2276
logfile="config.log"
2277
 
2278
# installation paths
2279
prefix_default="/usr/local"
2280
bindir_default='${prefix}/bin'
2281
datadir_default='${prefix}/share/ffmpeg'
2282
docdir_default='${prefix}/share/doc/ffmpeg'
2283
incdir_default='${prefix}/include'
2284
libdir_default='${prefix}/lib'
2285
mandir_default='${prefix}/share/man'
2286
shlibdir_default="$libdir_default"
2287
 
2288
# toolchain
2289
ar_default="ar"
2290
cc_default="gcc"
2291
cxx_default="g++"
2292
host_cc_default="gcc"
2293
cp_f="cp -f"
2294
install="install"
2295
ln_s="ln -s -f"
2296
nm_default="nm -g"
2297
objformat="elf"
2298
pkg_config_default=pkg-config
2299
ranlib="ranlib"
2300
strip_default="strip"
2301
yasmexe_default="yasm"
2302
 
2303
nogas=":"
2304
 
2305
# machine
2306
arch_default=$(uname -m)
2307
cpu="generic"
2308
 
2309
# OS
2310
target_os_default=$(tolower $(uname -s))
2311
host_os=$target_os_default
2312
 
2313
# configurable options
2314
enable $PROGRAM_LIST
2315
enable $DOCUMENT_LIST
2316
enable $(filter_out avresample $LIBRARY_LIST)
2317
enable stripping
2318
 
2319
enable asm
2320
enable debug
2321
enable doc
2322
enable optimizations
2323
enable runtime_cpudetect
2324
enable safe_bitstream_reader
2325
enable static
2326
enable swscale_alpha
2327
 
2328
# Enable hwaccels by default.
2329
enable dxva2 vaapi vdpau
2330
 
2331
# build settings
2332
SHFLAGS='-shared -Wl,-soname,$$(@F)'
2333
LIBPREF="lib"
2334
LIBSUF=".a"
2335
FULLNAME='$(NAME)$(BUILDSUF)'
2336
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2337
SLIBPREF="lib"
2338
SLIBSUF=".so"
2339
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2340
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2341
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2342
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2343
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2344
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2345
 
2346
asflags_filter=echo
2347
cflags_filter=echo
2348
ldflags_filter=echo
2349
 
2350
AS_C='-c'
2351
AS_O='-o $@'
2352
CC_C='-c'
2353
CC_E='-E -o $@'
2354
CC_O='-o $@'
2355
CXX_C='-c'
2356
CXX_O='-o $@'
2357
LD_O='-o $@'
2358
LD_LIB='-l%'
2359
LD_PATH='-L'
2360
HOSTCC_C='-c'
2361
HOSTCC_O='-o $@'
2362
HOSTLD_O='-o $@'
2363
 
2364
host_cflags='-O3 -g'
2365
host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2366
host_libs='-lm'
2367
host_cflags_filter=echo
2368
host_ldflags_filter=echo
2369
 
2370
target_path='$(CURDIR)'
2371
 
2372
# since the object filename is not given with the -MM flag, the compiler
2373
# is only able to print the basename, and we must add the path ourselves
2374
DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2375
DEPFLAGS='-MM'
2376
 
2377
# find source path
2378
if test -f configure; then
2379
    source_path=.
2380
else
2381
    source_path=$(cd $(dirname "$0"); pwd)
2382
    echo "$source_path" | grep -q '[[:blank:]]' &&
2383
        die "Out of tree builds are impossible with whitespace in source path."
2384
    test -e "$source_path/config.h" &&
2385
        die "Out of tree builds are impossible with config.h in source dir."
2386
fi
2387
 
2388
for v in "$@"; do
2389
    r=${v#*=}
2390
    l=${v%"$r"}
2391
    r=$(sh_quote "$r")
2392
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2393
done
2394
 
2395
find_things(){
2396
    thing=$1
2397
    pattern=$2
2398
    file=$source_path/$3
2399
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2400
}
2401
 
2402
ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2403
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2404
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2405
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2406
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2407
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2408
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2409
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2410
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2411
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2412
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2413
 
2414
ALL_COMPONENTS="
2415
    $BSF_LIST
2416
    $DECODER_LIST
2417
    $DEMUXER_LIST
2418
    $ENCODER_LIST
2419
    $FILTER_LIST
2420
    $HWACCEL_LIST
2421
    $INDEV_LIST
2422
    $MUXER_LIST
2423
    $OUTDEV_LIST
2424
    $PARSER_LIST
2425
    $PROTOCOL_LIST
2426
"
2427
 
2428
for n in $COMPONENT_LIST; do
2429
    v=$(toupper ${n%s})_LIST
2430
    eval enable \$$v
2431
    eval ${n}_if_any="\$$v"
2432
done
2433
 
2434
enable $ARCH_EXT_LIST
2435
 
2436
die_unknown(){
2437
    echo "Unknown option \"$1\"."
2438
    echo "See $0 --help for available options."
2439
    exit 1
2440
}
2441
 
2442
print_3_columns() {
2443
    cat | tr ' ' '\n' | sort | pr -r -3 -t
2444
}
2445
 
2446
show_list() {
2447
    suffix=_$1
2448
    shift
2449
    echo $* | sed s/$suffix//g | print_3_columns
2450
    exit 0
2451
}
2452
 
2453
rand_list(){
2454
    IFS=', '
2455
    set -- $*
2456
    unset IFS
2457
    for thing; do
2458
        comp=${thing%:*}
2459
        prob=${thing#$comp}
2460
        prob=${prob#:}
2461
        is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2462
        echo "prob ${prob:-0.5}"
2463
        printf '%s\n' $comp
2464
    done
2465
}
2466
 
2467
do_random(){
2468
    action=$1
2469
    shift
2470
    random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2471
    $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2472
}
2473
 
2474
for opt do
2475
    optval="${opt#*=}"
2476
    case "$opt" in
2477
        --extra-ldflags=*)
2478
            add_ldflags $optval
2479
        ;;
2480
        --extra-libs=*)
2481
            add_extralibs $optval
2482
        ;;
2483
        --disable-devices)
2484
            disable $INDEV_LIST $OUTDEV_LIST
2485
        ;;
2486
        --enable-debug=*)
2487
            debuglevel="$optval"
2488
        ;;
2489
        --disable-programs)
2490
            disable $PROGRAM_LIST
2491
        ;;
2492
        --disable-everything)
2493
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2494
        ;;
2495
        --disable-all)
2496
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2497
            disable $LIBRARY_LIST $PROGRAM_LIST doc
2498
        ;;
2499
        --enable-random|--disable-random)
2500
            action=${opt%%-random}
2501
            do_random ${action#--} $COMPONENT_LIST
2502
        ;;
2503
        --enable-random=*|--disable-random=*)
2504
            action=${opt%%-random=*}
2505
            do_random ${action#--} $optval
2506
        ;;
2507
        --enable-*=*|--disable-*=*)
2508
            eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2509
            is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2510
            eval list=\$$(toupper $thing)_LIST
2511
            name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2512
            list=$(filter "$name" $list)
2513
            [ "$list" = "" ] && warn "Option $opt did not match anything"
2514
            $action $list
2515
        ;;
2516
        --enable-?*|--disable-?*)
2517
            eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2518
            if is_in $option $COMPONENT_LIST; then
2519
                test $action = disable && action=unset
2520
                eval $action \$$(toupper ${option%s})_LIST
2521
            elif is_in $option $CMDLINE_SELECT; then
2522
                $action $option
2523
            else
2524
                die_unknown $opt
2525
            fi
2526
        ;;
2527
        --list-*)
2528
            NAME="${opt#--list-}"
2529
            is_in $NAME $COMPONENT_LIST || die_unknown $opt
2530
            NAME=${NAME%s}
2531
            eval show_list $NAME \$$(toupper $NAME)_LIST
2532
        ;;
2533
        --help|-h) show_help
2534
        ;;
2535
        --fatal-warnings) enable fatal_warnings
2536
        ;;
2537
        *)
2538
            optname="${opt%%=*}"
2539
            optname="${optname#--}"
2540
            optname=$(echo "$optname" | sed 's/-/_/g')
2541
            if is_in $optname $CMDLINE_SET; then
2542
                eval $optname='$optval'
2543
            elif is_in $optname $CMDLINE_APPEND; then
2544
                append $optname "$optval"
2545
            else
2546
                die_unknown $opt
2547
            fi
2548
        ;;
2549
    esac
2550
done
2551
 
2552
disabled logging && logfile=/dev/null
2553
 
2554
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2555
set >> $logfile
2556
 
2557
test -n "$cross_prefix" && enable cross_compile
2558
 
2559
if enabled cross_compile; then
2560
    test -n "$arch" && test -n "$target_os" ||
2561
        die "Must specify target arch and OS when cross-compiling"
2562
fi
2563
 
2564
ar_default="${cross_prefix}${ar_default}"
2565
cc_default="${cross_prefix}${cc_default}"
2566
cxx_default="${cross_prefix}${cxx_default}"
2567
nm_default="${cross_prefix}${nm_default}"
2568
pkg_config_default="${cross_prefix}${pkg_config_default}"
2569
ranlib="${cross_prefix}${ranlib}"
2570
strip_default="${cross_prefix}${strip_default}"
2571
 
2572
sysinclude_default="${sysroot}/usr/include"
2573
 
2574
test -n "$valgrind" && toolchain="valgrind-memcheck"
2575
 
2576
case "$toolchain" in
2577
    clang-asan)
2578
        cc_default="clang"
2579
        add_cflags  -fsanitize=address
2580
        add_ldflags -fsanitize=address
2581
    ;;
2582
    clang-tsan)
2583
        cc_default="clang"
2584
        add_cflags  -fsanitize=thread -pie
2585
        add_ldflags -fsanitize=thread -pie
2586
    ;;
2587
    gcc-asan)
2588
        cc_default="gcc"
2589
        add_cflags  -fsanitize=address
2590
        add_ldflags -fsanitize=address
2591
    ;;
2592
    gcc-tsan)
2593
        cc_default="gcc"
2594
        add_cflags  -fsanitize=thread -pie -fPIC
2595
        add_ldflags -fsanitize=thread -pie -fPIC
2596
    ;;
2597
    valgrind-massif)
2598
        target_exec_default=${valgrind:-"valgrind"}
2599
        target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
2600
    ;;
2601
    valgrind-memcheck)
2602
        target_exec_default=${valgrind:-"valgrind"}
2603
        target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
2604
    ;;
2605
    msvc)
2606
        cc_default="c99wrap cl"
2607
        ld_default="c99wrap link"
2608
        nm_default="dumpbin -symbols"
2609
        ar_default="lib"
2610
        target_os_default="win32"
2611
    ;;
2612
    icl)
2613
        cc_default="c99wrap -noconv icl"
2614
        ld_default="c99wrap xilink"
2615
        nm_default="dumpbin -symbols"
2616
        ar_default="xilib"
2617
        target_os_default="win32"
2618
    ;;
2619
    gcov)
2620
        add_cflags  -fprofile-arcs -ftest-coverage
2621
        add_ldflags -fprofile-arcs -ftest-coverage
2622
    ;;
2623
    ?*)
2624
        die "Unknown toolchain $toolchain"
2625
    ;;
2626
esac
2627
 
2628
set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2629
enabled cross_compile || host_cc_default=$cc
2630
set_default host_cc
2631
 
2632
if ! $pkg_config --version >/dev/null 2>&1; then
2633
    warn "$pkg_config not found, library detection may fail."
2634
    pkg_config=false
2635
fi
2636
 
2637
exesuf() {
2638
    case $1 in
2639
        mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2640
    esac
2641
}
2642
 
2643
EXESUF=$(exesuf $target_os)
2644
HOSTEXESUF=$(exesuf $host_os)
2645
 
2646
# set temporary file name
2647
: ${TMPDIR:=$TEMPDIR}
2648
: ${TMPDIR:=$TMP}
2649
: ${TMPDIR:=/tmp}
2650
 
2651
if [ -n "$tempprefix" ] ; then
2652
    mktemp(){
2653
        echo $tempprefix.${HOSTNAME}.${UID}
2654
    }
2655
elif ! check_cmd mktemp -u XXXXXX; then
2656
    # simple replacement for missing mktemp
2657
    # NOT SAFE FOR GENERAL USE
2658
    mktemp(){
2659
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2660
    }
2661
fi
2662
 
2663
tmpfile(){
2664
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2665
        (set -C; exec > $tmp) 2>/dev/null ||
2666
        die "Unable to create temporary file in $TMPDIR."
2667
    append TMPFILES $tmp
2668
    eval $1=$tmp
2669
}
2670
 
2671
trap 'rm -f -- $TMPFILES' EXIT
2672
 
2673
tmpfile TMPASM .asm
2674
tmpfile TMPC   .c
2675
tmpfile TMPCPP .cpp
2676
tmpfile TMPE   $EXESUF
2677
tmpfile TMPH   .h
2678
tmpfile TMPO   .o
2679
tmpfile TMPS   .S
2680
tmpfile TMPSH  .sh
2681
tmpfile TMPV   .ver
2682
 
2683
unset -f mktemp
2684
 
2685
chmod +x $TMPE
2686
 
2687
# make sure we can execute files in $TMPDIR
2688
cat > $TMPSH 2>> $logfile <
2689
#! /bin/sh
2690
EOF
2691
chmod +x $TMPSH >> $logfile 2>&1
2692
if ! $TMPSH >> $logfile 2>&1; then
2693
    cat <
2694
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2695
variable to another directory and make sure that it is not mounted noexec.
2696
EOF
2697
    die "Sanity test failed."
2698
fi
2699
 
2700
ccc_flags(){
2701
    for flag; do
2702
        case $flag in
2703
            -std=c99)           echo -c99                       ;;
2704
            -mcpu=*)            echo -arch ${flag#*=}           ;;
2705
            -mieee)             echo -ieee                      ;;
2706
            -O*|-fast)          echo $flag                      ;;
2707
            -fno-math-errno)    echo -assume nomath_errno       ;;
2708
            -g)                 echo -g3                        ;;
2709
            -Wall)              echo -msg_enable level2         ;;
2710
            -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2711
            -Wl,*)              echo $flag                      ;;
2712
            -f*|-W*)                                            ;;
2713
            *)                  echo $flag                      ;;
2714
        esac
2715
   done
2716
}
2717
 
2718
cparser_flags(){
2719
    for flag; do
2720
        case $flag in
2721
            -Wno-switch)             echo -Wno-switch-enum ;;
2722
            -Wno-format-zero-length) ;;
2723
            -Wdisabled-optimization) ;;
2724
            -Wno-pointer-sign)       echo -Wno-other ;;
2725
            *)                       echo $flag ;;
2726
        esac
2727
    done
2728
}
2729
 
2730
msvc_common_flags(){
2731
    for flag; do
2732
        case $flag in
2733
            # In addition to specifying certain flags under the compiler
2734
            # specific filters, they must be specified here as well or else the
2735
            # generic catch all at the bottom will print the original flag.
2736
            -Wall)                ;;
2737
            -std=c99)             ;;
2738
            # Common flags
2739
            -fomit-frame-pointer) ;;
2740
            -g)                   echo -Z7 ;;
2741
            -fno-math-errno)      ;;
2742
            -fno-common)          ;;
2743
            -fno-signed-zeros)    ;;
2744
            -fPIC)                ;;
2745
            -mthumb)              ;;
2746
            -march=*)             ;;
2747
            -lz)                  echo zlib.lib ;;
2748
            -lavifil32)           echo vfw32.lib ;;
2749
            -lavicap32)           echo vfw32.lib user32.lib ;;
2750
            -l*)                  echo ${flag#-l}.lib ;;
2751
            *)                    echo $flag ;;
2752
        esac
2753
    done
2754
}
2755
 
2756
msvc_flags(){
2757
    msvc_common_flags "$@"
2758
    for flag; do
2759
        case $flag in
2760
            -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2761
                                       -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2762
                                       -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2763
                                       -wd4554 \
2764
                                       -wd4273 ;;
2765
        esac
2766
    done
2767
}
2768
 
2769
icl_flags(){
2770
    msvc_common_flags "$@"
2771
    for flag; do
2772
        case $flag in
2773
            # Despite what Intel's documentation says -Wall, which is supported
2774
            # on Windows, does enable remarks so disable them here.
2775
            -Wall)                echo $flag -Qdiag-disable:remark ;;
2776
            -std=c99)             echo -Qstd=c99 ;;
2777
        esac
2778
    done
2779
}
2780
 
2781
pgi_flags(){
2782
    for flag; do
2783
        case $flag in
2784
            -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2785
            -fomit-frame-pointer) echo -Mnoframe ;;
2786
            -g)                   echo -gopt ;;
2787
            *)                    echo $flag ;;
2788
        esac
2789
    done
2790
}
2791
 
2792
suncc_flags(){
2793
    for flag; do
2794
        case $flag in
2795
            -march=*|-mcpu=*)
2796
                case "${flag#*=}" in
2797
                    native)                   echo -xtarget=native       ;;
2798
                    v9|niagara)               echo -xarch=sparc          ;;
2799
                    ultrasparc)               echo -xarch=sparcvis       ;;
2800
                    ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2801
                    i586|pentium)             echo -xchip=pentium        ;;
2802
                    i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2803
                    pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2804
                    pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2805
                    pentium4*)          echo -xtarget=pentium4           ;;
2806
                    prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2807
                    *-sse3)             echo -xarch=sse3                 ;;
2808
                    core2)              echo -xarch=ssse3 -xchip=core2   ;;
2809
                    corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2810
                    corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2811
                    amdfam10|barcelona)        echo -xtarget=barcelona   ;;
2812
                    bdver*)                    echo -xarch=avx           ;;
2813
                    athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2814
                    k8|opteron|athlon64|athlon-fx)
2815
                                               echo -xarch=sse2a         ;;
2816
                    athlon*)                   echo -xarch=pentium_proa  ;;
2817
                esac
2818
                ;;
2819
            -std=c99)             echo -xc99              ;;
2820
            -fomit-frame-pointer) echo -xregs=frameptr    ;;
2821
            -fPIC)                echo -KPIC -xcode=pic32 ;;
2822
            -W*,*)                echo $flag              ;;
2823
            -f*-*|-W*|-mimpure-text)                      ;;
2824
            -shared)              echo -G                 ;;
2825
            *)                    echo $flag              ;;
2826
        esac
2827
    done
2828
}
2829
 
2830
tms470_flags(){
2831
    for flag; do
2832
        case $flag in
2833
            -march=*|-mcpu=*)
2834
                case "${flag#*=}" in
2835
                    armv7-a|cortex-a*)      echo -mv=7a8 ;;
2836
                    armv7-r|cortex-r*)      echo -mv=7r4 ;;
2837
                    armv7-m|cortex-m*)      echo -mv=7m3 ;;
2838
                    armv6*|arm11*)          echo -mv=6   ;;
2839
                    armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2840
                                            echo -mv=5e  ;;
2841
                    armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2842
                esac
2843
                ;;
2844
            -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2845
            -mfpu=vfp)      echo --float_support=vfpv2        ;;
2846
            -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2847
            -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2848
            -msoft-float)   echo --float_support=vfplib       ;;
2849
            -O[0-3]|-mf=*)  echo $flag                        ;;
2850
            -g)             echo -g -mn                       ;;
2851
            -pds=*)         echo $flag                        ;;
2852
            -D*|-I*)        echo $flag                        ;;
2853
            --gcc|--abi=*)  echo $flag                        ;;
2854
            -me)            echo $flag                        ;;
2855
        esac
2856
    done
2857
}
2858
 
2859
probe_cc(){
2860
    pfx=$1
2861
    _cc=$2
2862
 
2863
    unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2864
    unset _ld_o _ldflags _ld_lib _ld_path
2865
    unset _depflags _DEPCMD _DEPFLAGS
2866
    _flags_filter=echo
2867
 
2868
    if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
2869
        true # no-op to avoid reading stdin in following checks
2870
    elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2871
        _type=llvm_gcc
2872
        gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2873
        _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2874
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2875
        _cflags_speed='-O3'
2876
        _cflags_size='-Os'
2877
    elif $_cc -v 2>&1 | grep -qi ^gcc; then
2878
        _type=gcc
2879
        gcc_version=$($_cc --version | head -n1)
2880
        gcc_basever=$($_cc -dumpversion)
2881
        gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2882
        gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2883
        _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2884
        if ! $_cc -dumpversion | grep -q '^2\.'; then
2885
            _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2886
        fi
2887
        _cflags_speed='-O3'
2888
        _cflags_size='-Os'
2889
    elif $_cc --version 2>/dev/null | grep -q ^icc; then
2890
        _type=icc
2891
        _ident=$($_cc --version | head -n1)
2892
        _depflags='-MMD'
2893
        _cflags_speed='-O3'
2894
        _cflags_size='-Os'
2895
        _cflags_noopt='-O1'
2896
    elif $_cc -v 2>&1 | grep -q xlc; then
2897
        _type=xlc
2898
        _ident=$($_cc -qversion 2>/dev/null | head -n1)
2899
        _cflags_speed='-O5'
2900
        _cflags_size='-O5 -qcompact'
2901
    elif $_cc -V 2>/dev/null | grep -q Compaq; then
2902
        _type=ccc
2903
        _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2904
        _DEPFLAGS='-M'
2905
        _cflags_speed='-fast'
2906
        _cflags_size='-O1'
2907
        _flags_filter=ccc_flags
2908
    elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2909
        test -d "$sysroot" || die "No valid sysroot specified."
2910
        _type=armcc
2911
        _ident=$($_cc --vsn | head -n1)
2912
        armcc_conf="$PWD/armcc.conf"
2913
        $_cc --arm_linux_configure                 \
2914
             --arm_linux_config_file="$armcc_conf" \
2915
             --configure_sysroot="$sysroot"        \
2916
             --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2917
             die "Error creating armcc configuration file."
2918
        $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2919
        _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2920
        as_default="${cross_prefix}gcc"
2921
        _depflags='-MMD'
2922
        _cflags_speed='-O3'
2923
        _cflags_size='-Os'
2924
    elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2925
        _type=tms470
2926
        _ident=$($_cc -version | head -n1 | tr -s ' ')
2927
        _flags='--gcc --abi=eabi -me'
2928
        _cc_e='-ppl -fe=$@'
2929
        _cc_o='-fe=$@'
2930
        _depflags='-ppa -ppd=$(@:.o=.d)'
2931
        _cflags_speed='-O3 -mf=5'
2932
        _cflags_size='-O3 -mf=2'
2933
        _flags_filter=tms470_flags
2934
    elif $_cc -v 2>&1 | grep -q clang; then
2935
        _type=clang
2936
        _ident=$($_cc --version | head -n1)
2937
        _depflags='-MMD'
2938
        _cflags_speed='-O3'
2939
        _cflags_size='-Os'
2940
    elif $_cc -V 2>&1 | grep -q Sun; then
2941
        _type=suncc
2942
        _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2943
        _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2944
        _DEPFLAGS='-xM1 -xc99'
2945
        _ldflags='-std=c99'
2946
        _cflags_speed='-O5'
2947
        _cflags_size='-O5 -xspace'
2948
        _flags_filter=suncc_flags
2949
    elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2950
        _type=pathscale
2951
        _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2952
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2953
        _cflags_speed='-O2'
2954
        _cflags_size='-Os'
2955
        _flags_filter='filter_out -Wdisabled-optimization'
2956
    elif $_cc -v 2>&1 | grep -q Open64; then
2957
        _type=open64
2958
        _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2959
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2960
        _cflags_speed='-O2'
2961
        _cflags_size='-Os'
2962
        _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2963
    elif $_cc -V 2>&1 | grep -q Portland; then
2964
        _type=pgi
2965
        _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2966
        opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2967
        _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2968
        _cflags_size="-O2 -Munroll=c:1 $opt_common"
2969
        _cflags_noopt="-O"
2970
        _flags_filter=pgi_flags
2971
    elif $_cc 2>&1 | grep -q Microsoft; then
2972
        _type=msvc
2973
        _ident=$($cc 2>&1 | head -n1)
2974
        _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2975
        _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2976
        _cflags_speed="-O2"
2977
        _cflags_size="-O1"
2978
        # Nonstandard output options, to avoid msys path conversion issues.
2979
        # Relies on wrapper to remap it.
2980
        if $_cc 2>&1 | grep -q Linker; then
2981
            _ld_o='-out $@'
2982
        else
2983
            _ld_o='-Fe$@'
2984
        fi
2985
        _cc_o='-Fo $@'
2986
        _cc_e='-P -Fi $@'
2987
        _flags_filter=msvc_flags
2988
        _ld_lib='lib%.a'
2989
        _ld_path='-libpath:'
2990
        _flags='-nologo'
2991
        _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2992
        if [ $pfx = hostcc ]; then
2993
            append _cflags -Dsnprintf=_snprintf
2994
        fi
2995
        disable stripping
2996
    elif $_cc 2>&1 | grep -q Intel; then
2997
        _type=icl
2998
        _ident=$($cc 2>&1 | head -n1)
2999
        _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3000
        # Not only is O3 broken on 13.x+ but it is slower on all previous
3001
        # versions (tested) as well.
3002
        _cflags_speed="-O2"
3003
        _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3004
        # Nonstandard output options, to avoid msys path conversion issues.
3005
        # Relies on wrapper to remap it.
3006
        if $_cc 2>&1 | grep -q Linker; then
3007
            _ld_o='-out $@'
3008
        else
3009
            _ld_o='-Fe$@'
3010
        fi
3011
        _cc_o='-Fo $@'
3012
        _cc_e='-P'
3013
        _flags_filter=icl_flags
3014
        _ld_lib='lib%.a'
3015
        _ld_path='-libpath:'
3016
        # -Qdiag-error to make icl error when seeing certain unknown arguments
3017
        _flags='-nologo -Qdiag-error:4044,10157'
3018
        # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3019
        # with MSVC which enables it by default.
3020
        _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3021
        if [ $pfx = hostcc ]; then
3022
            append _cflags -Dsnprintf=_snprintf
3023
        fi
3024
    elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3025
        _type=cparser
3026
        _ident=$($_cc --version | head -n1)
3027
        _depflags='-MMD'
3028
        _cflags_speed='-O4'
3029
        _cflags_size='-O2'
3030
        _flags_filter=cparser_flags
3031
    fi
3032
 
3033
    eval ${pfx}_type=\$_type
3034
    eval ${pfx}_ident=\$_ident
3035
}
3036
 
3037
set_ccvars(){
3038
    eval ${1}_C=\${_cc_c-\${${1}_C}}
3039
    eval ${1}_E=\${_cc_e-\${${1}_E}}
3040
    eval ${1}_O=\${_cc_o-\${${1}_O}}
3041
 
3042
    if [ -n "$_depflags" ]; then
3043
        eval ${1}_DEPFLAGS=\$_depflags
3044
    else
3045
        eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3046
        eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3047
        eval DEP${1}FLAGS=\$_flags
3048
    fi
3049
}
3050
 
3051
probe_cc cc "$cc"
3052
cflags_filter=$_flags_filter
3053
cflags_speed=$_cflags_speed
3054
cflags_size=$_cflags_size
3055
cflags_noopt=$_cflags_noopt
3056
add_cflags $_flags $_cflags
3057
cc_ldflags=$_ldflags
3058
set_ccvars CC
3059
 
3060
probe_cc hostcc "$host_cc"
3061
host_cflags_filter=$_flags_filter
3062
add_host_cflags  $_flags $_cflags
3063
set_ccvars HOSTCC
3064
 
3065
test -n "$cc_type" && enable $cc_type ||
3066
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3067
 
3068
: ${as_default:=$cc}
3069
: ${dep_cc_default:=$cc}
3070
: ${ld_default:=$cc}
3071
: ${host_ld_default:=$host_cc}
3072
set_default ar as dep_cc ld host_ld
3073
 
3074
probe_cc as "$as"
3075
asflags_filter=$_flags_filter
3076
add_asflags $_flags $_cflags
3077
set_ccvars AS
3078
 
3079
probe_cc ld "$ld"
3080
ldflags_filter=$_flags_filter
3081
add_ldflags $_flags $_ldflags
3082
test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3083
LD_O=${_ld_o-$LD_O}
3084
LD_LIB=${_ld_lib-$LD_LIB}
3085
LD_PATH=${_ld_path-$LD_PATH}
3086
 
3087
probe_cc hostld "$host_ld"
3088
host_ldflags_filter=$_flags_filter
3089
add_host_ldflags $_flags $_ldflags
3090
HOSTLD_O=${_ld_o-$HOSTLD_O}
3091
 
3092
if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3093
    probe_cc depcc "$dep_cc"
3094
    CCDEP=${_DEPCMD:-$DEPCMD}
3095
    CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3096
    DEPCCFLAGS=$_flags
3097
fi
3098
 
3099
if $ar 2>&1 | grep -q Microsoft; then
3100
    arflags="-nologo"
3101
    ar_o='-out:$@'
3102
elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3103
    arflags="rq"
3104
    ar_o='$@'
3105
elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3106
    arflags='-Xany -r -c'
3107
    ar_o='$@'
3108
else
3109
    arflags="rc"
3110
    ar_o='$@'
3111
fi
3112
 
3113
add_cflags $extra_cflags
3114
add_cxxflags $extra_cxxflags
3115
add_asflags $extra_cflags
3116
 
3117
if test -n "$sysroot"; then
3118
    case "$cc_type" in
3119
        gcc|llvm_gcc|clang)
3120
            add_cppflags --sysroot="$sysroot"
3121
            add_ldflags --sysroot="$sysroot"
3122
        ;;
3123
        tms470)
3124
            add_cppflags -I"$sysinclude"
3125
            add_ldflags  --sysroot="$sysroot"
3126
        ;;
3127
    esac
3128
fi
3129
 
3130
if test "$cpu" = host; then
3131
    enabled cross_compile &&
3132
        die "--cpu=host makes no sense when cross-compiling."
3133
 
3134
    case "$cc_type" in
3135
        gcc|llvm_gcc)
3136
            check_native(){
3137
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3138
                sed -n "/cc1.*$1=/{
3139
                            s/.*$1=\\([^ ]*\\).*/\\1/
3140
                            p
3141
                            q
3142
                        }" $TMPE
3143
            }
3144
            cpu=$(check_native -march || check_native -mcpu)
3145
        ;;
3146
    esac
3147
 
3148
    test "${cpu:-host}" = host &&
3149
        die "--cpu=host not supported with compiler $cc"
3150
fi
3151
 
3152
# Deal with common $arch aliases
3153
case "$arch" in
3154
    aarch64|arm64)
3155
        arch="aarch64"
3156
    ;;
3157
    arm*|iPad*|iPhone*)
3158
        arch="arm"
3159
    ;;
3160
    mips*|IP*)
3161
        arch="mips"
3162
    ;;
3163
    parisc*|hppa*)
3164
        arch="parisc"
3165
    ;;
3166
    "Power Macintosh"|ppc*|powerpc*)
3167
        arch="ppc"
3168
    ;;
3169
    s390|s390x)
3170
        arch="s390"
3171
    ;;
3172
    sh4|sh)
3173
        arch="sh4"
3174
    ;;
3175
    sun4u|sparc*)
3176
        arch="sparc"
3177
    ;;
3178
    tilegx|tile-gx)
3179
        arch="tilegx"
3180
    ;;
3181
    i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3182
        arch="x86"
3183
    ;;
3184
esac
3185
 
3186
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3187
enable $arch
3188
 
3189
# Add processor-specific flags
3190
if enabled aarch64; then
3191
 
3192
    case $cpu in
3193
        armv*)
3194
            cpuflags="-march=$cpu"
3195
        ;;
3196
        *)
3197
            cpuflags="-mcpu=$cpu"
3198
        ;;
3199
    esac
3200
 
3201
elif enabled alpha; then
3202
 
3203
    cpuflags="-mcpu=$cpu"
3204
 
3205
elif enabled arm; then
3206
 
3207
    check_arm_arch() {
3208
        check_cpp_condition stddef.h \
3209
            "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3210
            $cpuflags
3211
    }
3212
 
3213
    probe_arm_arch() {
3214
        if   check_arm_arch 4;        then echo armv4;
3215
        elif check_arm_arch 4T;       then echo armv4t;
3216
        elif check_arm_arch 5;        then echo armv5;
3217
        elif check_arm_arch 5E;       then echo armv5e;
3218
        elif check_arm_arch 5T;       then echo armv5t;
3219
        elif check_arm_arch 5TE;      then echo armv5te;
3220
        elif check_arm_arch 5TEJ;     then echo armv5te;
3221
        elif check_arm_arch 6;        then echo armv6;
3222
        elif check_arm_arch 6J;       then echo armv6j;
3223
        elif check_arm_arch 6K;       then echo armv6k;
3224
        elif check_arm_arch 6Z;       then echo armv6z;
3225
        elif check_arm_arch 6ZK;      then echo armv6zk;
3226
        elif check_arm_arch 6T2;      then echo armv6t2;
3227
        elif check_arm_arch 7;        then echo armv7;
3228
        elif check_arm_arch 7A  7_A;  then echo armv7-a;
3229
        elif check_arm_arch 7R  7_R;  then echo armv7-r;
3230
        elif check_arm_arch 7M  7_M;  then echo armv7-m;
3231
        elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3232
        elif check_arm_arch 8A  8_A;  then echo armv8-a;
3233
        fi
3234
    }
3235
 
3236
    [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3237
 
3238
    case $cpu in
3239
        armv*)
3240
            cpuflags="-march=$cpu"
3241
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3242
        ;;
3243
        *)
3244
            cpuflags="-mcpu=$cpu"
3245
            case $cpu in
3246
                cortex-a*)                               subarch=armv7a  ;;
3247
                cortex-r*)                               subarch=armv7r  ;;
3248
                cortex-m*)                 enable thumb; subarch=armv7m  ;;
3249
                arm11*)                                  subarch=armv6   ;;
3250
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3251
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3252
                *)                             subarch=$(probe_arm_arch) ;;
3253
            esac
3254
        ;;
3255
    esac
3256
 
3257
    case "$subarch" in
3258
        armv5t*)    enable fast_clz                ;;
3259
        armv[6-8]*) enable fast_clz fast_unaligned ;;
3260
    esac
3261
 
3262
elif enabled avr32; then
3263
 
3264
    case $cpu in
3265
        ap7[02]0[0-2])
3266
            subarch="avr32_ap"
3267
            cpuflags="-mpart=$cpu"
3268
        ;;
3269
        ap)
3270
            subarch="avr32_ap"
3271
            cpuflags="-march=$cpu"
3272
        ;;
3273
        uc3[ab]*)
3274
            subarch="avr32_uc"
3275
            cpuflags="-mcpu=$cpu"
3276
        ;;
3277
        uc)
3278
            subarch="avr32_uc"
3279
            cpuflags="-march=$cpu"
3280
        ;;
3281
    esac
3282
 
3283
elif enabled bfin; then
3284
 
3285
    cpuflags="-mcpu=$cpu"
3286
 
3287
elif enabled mips; then
3288
 
3289
    cpuflags="-march=$cpu"
3290
 
3291
    case $cpu in
3292
        24kc)
3293
            disable mipsfpu
3294
            disable mipsdspr1
3295
            disable mipsdspr2
3296
        ;;
3297
        24kf*)
3298
            disable mipsdspr1
3299
            disable mipsdspr2
3300
        ;;
3301
        24kec|34kc|1004kc)
3302
            disable mipsfpu
3303
            disable mipsdspr2
3304
        ;;
3305
        24kef*|34kf*|1004kf*)
3306
            disable mipsdspr2
3307
        ;;
3308
        74kc)
3309
            disable mipsfpu
3310
        ;;
3311
    esac
3312
 
3313
elif enabled ppc; then
3314
 
3315
    case $(tolower $cpu) in
3316
        601|ppc601|powerpc601)
3317
            cpuflags="-mcpu=601"
3318
            disable altivec
3319
        ;;
3320
        603*|ppc603*|powerpc603*)
3321
            cpuflags="-mcpu=603"
3322
            disable altivec
3323
        ;;
3324
        604*|ppc604*|powerpc604*)
3325
            cpuflags="-mcpu=604"
3326
            disable altivec
3327
        ;;
3328
        g3|75*|ppc75*|powerpc75*)
3329
            cpuflags="-mcpu=750"
3330
            disable altivec
3331
        ;;
3332
        g4|745*|ppc745*|powerpc745*)
3333
            cpuflags="-mcpu=7450"
3334
        ;;
3335
        74*|ppc74*|powerpc74*)
3336
            cpuflags="-mcpu=7400"
3337
        ;;
3338
        g5|970|ppc970|powerpc970)
3339
            cpuflags="-mcpu=970"
3340
        ;;
3341
        power[3-7]*)
3342
            cpuflags="-mcpu=$cpu"
3343
        ;;
3344
        cell)
3345
            cpuflags="-mcpu=cell"
3346
            enable ldbrx
3347
        ;;
3348
        e500mc)
3349
            cpuflags="-mcpu=e500mc"
3350
            disable altivec
3351
        ;;
3352
        e500v2)
3353
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3354
            disable altivec
3355
        ;;
3356
        e500)
3357
            cpuflags="-mcpu=8540 -mhard-float"
3358
            disable altivec
3359
        ;;
3360
    esac
3361
 
3362
elif enabled sparc; then
3363
 
3364
    case $cpu in
3365
        cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3366
            cpuflags="-mcpu=$cpu"
3367
            disable vis
3368
        ;;
3369
        ultrasparc*|niagara[234])
3370
            cpuflags="-mcpu=$cpu"
3371
        ;;
3372
    esac
3373
 
3374
elif enabled x86; then
3375
 
3376
    case $cpu in
3377
        i[345]86|pentium)
3378
            cpuflags="-march=$cpu"
3379
            disable mmx
3380
        ;;
3381
        # targets that do NOT support nopl and conditional mov (cmov)
3382
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3383
            cpuflags="-march=$cpu"
3384
            disable i686
3385
        ;;
3386
        # targets that do support nopl and conditional mov (cmov)
3387
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3388
            cpuflags="-march=$cpu"
3389
            enable i686
3390
            enable fast_cmov
3391
        ;;
3392
        # targets that do support conditional mov but on which it's slow
3393
        pentium4|pentium4m|prescott|nocona)
3394
            cpuflags="-march=$cpu"
3395
            enable i686
3396
            disable fast_cmov
3397
        ;;
3398
    esac
3399
 
3400
fi
3401
 
3402
if [ "$cpu" != generic ]; then
3403
    add_cflags  $cpuflags
3404
    add_asflags $cpuflags
3405
fi
3406
 
3407
# compiler sanity check
3408
check_exec <
3409
int main(void){ return 0; }
3410
EOF
3411
if test "$?" != 0; then
3412
    echo "$cc is unable to create an executable file."
3413
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
3414
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3415
        echo "Only do this if you know what cross compiling means."
3416
    fi
3417
    die "C compiler test failed."
3418
fi
3419
 
3420
add_cppflags -D_ISOC99_SOURCE
3421
add_cxxflags -D__STDC_CONSTANT_MACROS
3422
check_cflags -std=c99
3423
check_cc -D_FILE_OFFSET_BITS=64 <
3424
#include 
3425
EOF
3426
check_cc -D_LARGEFILE_SOURCE <
3427
#include 
3428
EOF
3429
 
3430
check_host_cflags -std=c99
3431
check_host_cflags -Wall
3432
 
3433
check_64bit(){
3434
    arch32=$1
3435
    arch64=$2
3436
    expr=$3
3437
    check_code cc "" "int test[2*($expr) - 1]" &&
3438
        subarch=$arch64 || subarch=$arch32
3439
}
3440
 
3441
case "$arch" in
3442
    aarch64|alpha|ia64)
3443
        spic=$shared
3444
    ;;
3445
    mips)
3446
        check_64bit mips mips64 '_MIPS_SIM > 1'
3447
        spic=$shared
3448
    ;;
3449
    parisc)
3450
        check_64bit parisc parisc64 'sizeof(void *) > 4'
3451
        spic=$shared
3452
    ;;
3453
    ppc)
3454
        check_64bit ppc ppc64 'sizeof(void *) > 4'
3455
        spic=$shared
3456
    ;;
3457
    sparc)
3458
        check_64bit sparc sparc64 'sizeof(void *) > 4'
3459
        spic=$shared
3460
    ;;
3461
    x86)
3462
        check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3463
        if test "$subarch" = "x86_64"; then
3464
            spic=$shared
3465
        fi
3466
    ;;
3467
    ppc)
3468
        check_cc <
3469
        int test[(int)sizeof(char*) - 7];
3470
EOF
3471
    ;;
3472
esac
3473
 
3474
enable $subarch
3475
enabled spic && enable_weak pic
3476
 
3477
# OS specific
3478
case $target_os in
3479
    aix)
3480
        SHFLAGS=-shared
3481
        add_cppflags '-I\$(SRC_PATH)/compat/aix'
3482
        enabled shared && add_ldflags -Wl,-brtl
3483
        ;;
3484
    haiku)
3485
        prefix_default="/boot/common"
3486
        network_extralibs="-lnetwork"
3487
        host_libs=
3488
        ;;
3489
    sunos)
3490
        SHFLAGS='-shared -Wl,-h,$$(@F)'
3491
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3492
        network_extralibs="-lsocket -lnsl"
3493
        add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3494
        # When using suncc to build, the Solaris linker will mark
3495
        # an executable with each instruction set encountered by
3496
        # the Solaris assembler.  As our libraries contain their own
3497
        # guards for processor-specific code, instead suppress
3498
        # generation of the HWCAPS ELF section on Solaris x86 only.
3499
        enabled_all suncc x86 &&
3500
            echo "hwcap_1 = OVERRIDE;" > mapfile &&
3501
            add_ldflags -Wl,-M,mapfile
3502
        nm_default='nm -P -g'
3503
        ;;
3504
    netbsd)
3505
        disable symver
3506
        oss_indev_extralibs="-lossaudio"
3507
        oss_outdev_extralibs="-lossaudio"
3508
        enabled gcc || check_ldflags -Wl,-zmuldefs
3509
        ;;
3510
    openbsd|bitrig)
3511
        disable symver
3512
        SHFLAGS='-shared'
3513
        SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3514
        SLIB_INSTALL_LINKS=
3515
        oss_indev_extralibs="-lossaudio"
3516
        oss_outdev_extralibs="-lossaudio"
3517
        ;;
3518
    dragonfly)
3519
        disable symver
3520
        ;;
3521
    freebsd)
3522
        ;;
3523
    bsd/os)
3524
        add_extralibs -lpoll -lgnugetopt
3525
        strip="strip -d"
3526
        ;;
3527
    darwin)
3528
        gas="gas-preprocessor.pl $cc"
3529
        enabled ppc && add_asflags -force_cpusubtype_ALL
3530
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3531
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3532
        strip="${strip} -x"
3533
        add_ldflags -Wl,-dynamic,-search_paths_first
3534
        SLIBSUF=".dylib"
3535
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3536
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3537
        objformat="macho"
3538
        enabled x86_64 && objformat="macho64"
3539
        enabled_any pic shared ||
3540
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3541
        ;;
3542
    mingw32*)
3543
        if test $target_os = "mingw32ce"; then
3544
            disable network
3545
        else
3546
            target_os=mingw32
3547
        fi
3548
        LIBTARGET=i386
3549
        if enabled x86_64; then
3550
            LIBTARGET="i386:x86-64"
3551
        elif enabled arm; then
3552
            LIBTARGET=arm-wince
3553
        fi
3554
        check_ldflags -Wl,--nxcompat
3555
        check_ldflags -Wl,--dynamicbase
3556
        shlibdir_default="$bindir_default"
3557
        SLIBPREF=""
3558
        SLIBSUF=".dll"
3559
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3560
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3561
        dlltool="${cross_prefix}dlltool"
3562
        if check_cmd lib.exe -list; then
3563
            SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3564
            if enabled x86_64; then
3565
                LIBTARGET=x64
3566
            fi
3567
        elif check_cmd $dlltool --version; then
3568
            SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3569
        fi
3570
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3571
        SLIB_INSTALL_LINKS=
3572
        SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3573
        SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3574
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
3575
        objformat="win32"
3576
        ranlib=:
3577
        enable dos_paths
3578
        ;;
3579
    win32|win64)
3580
        if enabled shared; then
3581
            # Link to the import library instead of the normal static library
3582
            # for shared libs.
3583
            LD_LIB='%.lib'
3584
            # Cannot build both shared and static libs with MSVC or icl.
3585
            disable static
3586
        fi
3587
        shlibdir_default="$bindir_default"
3588
        SLIBPREF=""
3589
        SLIBSUF=".dll"
3590
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3591
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3592
        SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3593
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3594
        SLIB_INSTALL_LINKS=
3595
        SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3596
        SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3597
        SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3598
        objformat="win32"
3599
        ranlib=:
3600
        enable dos_paths
3601
        ;;
3602
    cygwin*)
3603
        target_os=cygwin
3604
        shlibdir_default="$bindir_default"
3605
        SLIBPREF="cyg"
3606
        SLIBSUF=".dll"
3607
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3608
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3609
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3610
        SLIB_INSTALL_LINKS=
3611
        SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3612
        SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3613
        objformat="win32"
3614
        enable dos_paths
3615
        ;;
3616
    *-dos|freedos|opendos)
3617
        network_extralibs="-lsocket"
3618
        objformat="coff"
3619
        enable dos_paths
3620
        add_cppflags -U__STRICT_ANSI__
3621
        ;;
3622
    linux)
3623
        enable dv1394
3624
        ;;
3625
    irix*)
3626
        target_os=irix
3627
        ranlib="echo ignoring ranlib"
3628
        ;;
3629
    os/2*)
3630
        strip="lxlite -CS"
3631
        ln_s="cp -f"
3632
        objformat="aout"
3633
        add_cppflags -D_GNU_SOURCE
3634
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3635
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3636
        LIBSUF="_s.a"
3637
        SLIBPREF=""
3638
        SLIBSUF=".dll"
3639
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3640
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3641
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3642
            echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3643
            echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3644
            echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3645
            echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3646
            emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3647
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3648
            emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3649
        SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3650
        enable dos_paths
3651
        enable_weak os2threads
3652
        ;;
3653
    gnu/kfreebsd)
3654
        add_cppflags -D_BSD_SOURCE
3655
        ;;
3656
    gnu)
3657
        ;;
3658
    qnx)
3659
        add_cppflags -D_QNX_SOURCE
3660
        network_extralibs="-lsocket"
3661
        ;;
3662
    symbian)
3663
        SLIBSUF=".dll"
3664
        enable dos_paths
3665
        add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3666
        add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3667
        add_ldflags -Wl,--target1-abs,--no-undefined \
3668
                    -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3669
                    -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3670
        add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3671
                      -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3672
                      -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3673
        ;;
3674
    osf1)
3675
        add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3676
        ;;
3677
    minix)
3678
        ;;
3679
    plan9)
3680
        add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3681
                     -D_REENTRANT_SOURCE        \
3682
                     -D_RESEARCH_SOURCE         \
3683
                     -DFD_SETSIZE=96            \
3684
                     -DHAVE_SOCK_OPTS
3685
        add_compat strtod.o strtod=avpriv_strtod
3686
        network_extralibs='-lbsd'
3687
        exeobjs=compat/plan9/main.o
3688
        disable ffserver
3689
        cp_f='cp'
3690
        ;;
3691
    none)
3692
        ;;
3693
    *)
3694
        die "Unknown OS '$target_os'."
3695
        ;;
3696
esac
3697
 
3698
# determine libc flavour
3699
 
3700
# uclibc defines __GLIBC__, so it needs to be checked before glibc.
3701
if check_cpp_condition features.h "defined __UCLIBC__"; then
3702
    libc_type=uclibc
3703
    add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3704
elif check_cpp_condition features.h "defined __GLIBC__"; then
3705
    libc_type=glibc
3706
    add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3707
# MinGW headers can be installed on Cygwin, so check for newlib first.
3708
elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3709
    libc_type=newlib
3710
    add_cppflags -U__STRICT_ANSI__
3711
elif check_header _mingw.h; then
3712
    libc_type=mingw
3713
    check_cpp_condition _mingw.h \
3714
        "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3715
            (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3716
        die "ERROR: MinGW runtime version must be >= 3.15."
3717
    add_cppflags -U__STRICT_ANSI__
3718
    if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3719
            __MINGW64_VERSION_MAJOR < 3"; then
3720
        add_compat msvcrt/snprintf.o
3721
        add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3722
    else
3723
        add_cppflags -D__USE_MINGW_ANSI_STDIO=1
3724
    fi
3725
elif check_func_headers stdlib.h _get_doserrno; then
3726
    libc_type=msvcrt
3727
    add_compat strtod.o strtod=avpriv_strtod
3728
    add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3729
                                 _snprintf=avpriv_snprintf  \
3730
                                 vsnprintf=avpriv_vsnprintf
3731
    # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3732
    # 0x601 by default unless something else is set by the user.
3733
    # This can easily lead to us detecting functions only present
3734
    # in such new versions and producing binaries requiring windows 7.0.
3735
    # Therefore explicitly set the default to XP unless the user has
3736
    # set something else on the command line.
3737
    check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3738
elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3739
    libc_type=klibc
3740
elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3741
    libc_type=bionic
3742
    add_compat strtod.o strtod=avpriv_strtod
3743
fi
3744
 
3745
test -n "$libc_type" && enable $libc_type
3746
 
3747
# hacks for compiler/libc/os combinations
3748
 
3749
if enabled_all tms470 glibc; then
3750
    CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3751
    add_cppflags -D__USER_LABEL_PREFIX__=
3752
    add_cppflags -D__builtin_memset=memset
3753
    add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3754
    add_cflags   -pds=48    # incompatible redefinition of macro
3755
fi
3756
 
3757
if enabled_all ccc glibc; then
3758
    add_ldflags -Wl,-z,now  # calls to libots crash without this
3759
fi
3760
 
3761
esc(){
3762
    echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3763
}
3764
 
3765
echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3766
 
3767
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3768
 
3769
set_default $PATHS_LIST
3770
set_default nm
3771
 
3772
# we need to build at least one lib type
3773
if ! enabled_any static shared; then
3774
    cat <
3775
At least one library type must be built.
3776
Specify --enable-static to build the static libraries or --enable-shared to
3777
build the shared libraries as well. To only build the shared libraries specify
3778
--disable-static in addition to --enable-shared.
3779
EOF
3780
    exit 1;
3781
fi
3782
 
3783
# backward compatibility layer for incompatible_libav/fork_abi
3784
enabled incompatible_fork_abi  && enable incompatible_libav_abi
3785
enabled incompatible_libav_abi && enable incompatible_fork_abi
3786
 
3787
die_license_disabled() {
3788
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3789
}
3790
 
3791
die_license_disabled_gpl() {
3792
    enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3793
}
3794
 
3795
die_license_disabled gpl frei0r
3796
die_license_disabled gpl libcdio
3797
die_license_disabled gpl libutvideo
3798
die_license_disabled gpl libvidstab
3799
die_license_disabled gpl libx264
3800
die_license_disabled gpl libxavs
3801
die_license_disabled gpl libxvid
3802
die_license_disabled gpl libzvbi
3803
die_license_disabled gpl x11grab
3804
 
3805
die_license_disabled nonfree libaacplus
3806
die_license_disabled nonfree libfaac
3807
enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3808
enabled gpl && die_license_disabled_gpl nonfree openssl
3809
 
3810
die_license_disabled version3 libopencore_amrnb
3811
die_license_disabled version3 libopencore_amrwb
3812
die_license_disabled version3 libvo_aacenc
3813
die_license_disabled version3 libvo_amrwbenc
3814
 
3815
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3816
 
3817
disabled optimizations || check_cflags -fomit-frame-pointer
3818
 
3819
enable_weak_pic() {
3820
    disabled pic && return
3821
    enable pic
3822
    add_cppflags -DPIC
3823
    case "$target_os" in
3824
    mingw*|cygwin*)
3825
        ;;
3826
    *)
3827
        add_cflags -fPIC
3828
        ;;
3829
    esac
3830
    add_asflags  -fPIC
3831
}
3832
 
3833
enabled pic && enable_weak_pic
3834
 
3835
check_cc <
3836
int ff_extern;
3837
EOF
3838
sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3839
extern_prefix=${sym%%ff_extern*}
3840
 
3841
check_cc <
3842
void foo(void) { __asm__ volatile ("" ::); }
3843
EOF
3844
 
3845
_restrict=
3846
for restrict_keyword in restrict __restrict__ __restrict; do
3847
    check_cc <
3848
void foo(char * $restrict_keyword p);
3849
EOF
3850
done
3851
 
3852
check_cc <
3853
void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3854
EOF
3855
 
3856
check_cc <
3857
struct { int x; } __attribute__((packed)) x;
3858
EOF
3859
 
3860
check_cc <
3861
union { int x; } __attribute__((may_alias)) x;
3862
EOF
3863
 
3864
check_cc <
3865
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3866
EOF
3867
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3868
 
3869
check_inline_asm inline_asm_labels '"1:\n"'
3870
 
3871
if enabled alpha; then
3872
 
3873
    check_cflags -mieee
3874
 
3875
elif enabled arm; then
3876
 
3877
    check_cpp_condition stddef.h "defined __thumb__" && check_cc <
3878
float func(float a, float b){ return a+b; }
3879
EOF
3880
 
3881
    enabled thumb && check_cflags -mthumb || check_cflags -marm
3882
    nogas=die
3883
 
3884
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3885
        enable vfp_args
3886
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3887
        case "${cross_prefix:-$cc}" in
3888
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3889
            *) check_ld "cc" <
3890
__asm__ (".eabi_attribute 28, 1");
3891
int main(void) { return 0; }
3892
EOF
3893
        esac
3894
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3895
    fi
3896
 
3897
    enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3898
    enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3899
    enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3900
    enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3901
    enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3902
    enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3903
 
3904
    [ $target_os = linux ] ||
3905
        map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3906
            $ARCH_EXT_LIST_ARM
3907
 
3908
    check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3909
    check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3910
 
3911
    [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3912
 
3913
elif enabled mips; then
3914
 
3915
    check_inline_asm loongson '"dmult.g $1, $2, $3"'
3916
    enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3917
     check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3918
    enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3919
     check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3920
    enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3921
     check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3922
    enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3923
     check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3924
 
3925
elif enabled parisc; then
3926
 
3927
    if enabled gcc; then
3928
        case $($cc -dumpversion) in
3929
            4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3930
        esac
3931
    fi
3932
 
3933
elif enabled ppc; then
3934
 
3935
    enable local_aligned_8 local_aligned_16
3936
 
3937
    check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3938
    check_inline_asm ibm_asm   '"add 0, 0, 0"'
3939
    check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3940
    check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3941
 
3942
    # AltiVec flags: The FSF version of GCC differs from the Apple version
3943
    if enabled altivec; then
3944
        if ! enabled_any pic ppc64; then
3945
            nogas=warn
3946
        fi
3947
        check_cflags -maltivec -mabi=altivec &&
3948
        { check_header altivec.h && inc_altivec_h="#include " ; } ||
3949
        check_cflags -faltivec
3950
 
3951
        # check if our compiler supports Motorola AltiVec C API
3952
        check_cc <
3953
$inc_altivec_h
3954
int main(void) {
3955
    vector signed int v1 = (vector signed int) { 0 };
3956
    vector signed int v2 = (vector signed int) { 1 };
3957
    v1 = vec_add(v1, v2);
3958
    return 0;
3959
}
3960
EOF
3961
 
3962
        enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3963
    fi
3964
 
3965
elif enabled sparc; then
3966
 
3967
    enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3968
 
3969
elif enabled x86; then
3970
 
3971
    check_builtin rdtsc    intrin.h   "__rdtsc()"
3972
    check_builtin mm_empty mmintrin.h "_mm_empty()"
3973
 
3974
    enable local_aligned_8 local_aligned_16
3975
 
3976
    # check whether EBP is available on x86
3977
    # As 'i' is stored on the stack, this program will crash
3978
    # if the base pointer is used to access it because the
3979
    # base pointer is cleared in the inline assembly code.
3980
    check_exec_crash <
3981
volatile int i=0;
3982
__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3983
return i;
3984
EOF
3985
 
3986
    # check whether EBX is available on x86
3987
    check_inline_asm ebx_available '""::"b"(0)' &&
3988
        check_inline_asm ebx_available '"":::"%ebx"'
3989
 
3990
    # check whether xmm clobbers are supported
3991
    check_inline_asm xmm_clobbers '"":::"%xmm0"'
3992
 
3993
    # check whether binutils is new enough to compile SSSE3/MMXEXT
3994
    enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3995
    enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3996
 
3997
    if ! disabled_any asm mmx yasm; then
3998
        if check_cmd $yasmexe --version; then
3999
            enabled x86_64 && yasm_extra="-m amd64"
4000
            yasm_debug="-g dwarf2"
4001
        elif check_cmd nasm -v; then
4002
            yasmexe=nasm
4003
            yasm_debug="-g -F dwarf"
4004
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
4005
        fi
4006
 
4007
        YASMFLAGS="-f $objformat $yasm_extra"
4008
        enabled pic               && append YASMFLAGS "-DPIC"
4009
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4010
        case "$objformat" in
4011
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4012
        esac
4013
 
4014
        check_yasm "movbe ecx, [5]" && enable yasm ||
4015
            die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4016
        check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external avresample
4017
        check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4018
        check_yasm "CPU amdnop" && enable cpunop
4019
    fi
4020
 
4021
    case "$cpu" in
4022
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4023
            disable fast_clz
4024
        ;;
4025
    esac
4026
 
4027
fi
4028
 
4029
if enabled asm; then
4030
    as=${gas:=$as}
4031
    check_as <
4032
        $nogas "GNU assembler not found, install gas-preprocessor"
4033
.macro m n
4034
\n: .int 0
4035
.endm
4036
m x
4037
EOF
4038
fi
4039
 
4040
check_ldflags -Wl,--as-needed
4041
 
4042
if check_func dlopen; then
4043
    ldl=
4044
elif check_func dlopen -ldl; then
4045
    ldl=-ldl
4046
fi
4047
 
4048
if ! disabled network; then
4049
    check_type "sys/types.h sys/socket.h" socklen_t
4050
    check_type netdb.h "struct addrinfo"
4051
    check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4052
    check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4053
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4054
    check_type netinet/in.h "struct sockaddr_in6"
4055
    check_type poll.h "struct pollfd"
4056
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4057
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4058
    check_type netinet/sctp.h "struct sctp_event_subscribe"
4059
    check_func getaddrinfo $network_extralibs
4060
    check_func getservbyport $network_extralibs
4061
    # Prefer arpa/inet.h over winsock2
4062
    if check_header arpa/inet.h ; then
4063
        check_func closesocket
4064
    elif check_header winsock2.h ; then
4065
        check_func_headers winsock2.h closesocket -lws2 &&
4066
            network_extralibs="-lws2" ||
4067
        { check_func_headers winsock2.h closesocket -lws2_32 &&
4068
            network_extralibs="-lws2_32"; }
4069
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4070
        check_type ws2tcpip.h socklen_t
4071
        check_type ws2tcpip.h "struct addrinfo"
4072
        check_type ws2tcpip.h "struct group_source_req"
4073
        check_type ws2tcpip.h "struct ip_mreq_source"
4074
        check_type ws2tcpip.h "struct ipv6_mreq"
4075
        check_type winsock2.h "struct pollfd"
4076
        check_type ws2tcpip.h "struct sockaddr_in6"
4077
        check_type ws2tcpip.h "struct sockaddr_storage"
4078
        check_struct winsock2.h "struct sockaddr" sa_len
4079
    else
4080
        disable network
4081
    fi
4082
fi
4083
 
4084
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4085
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
4086
 
4087
check_func  access
4088
check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
4089
check_func  fcntl
4090
check_func  fork
4091
check_func_headers stdlib.h getenv
4092
check_func  gethrtime
4093
check_func  getopt
4094
check_func  getrusage
4095
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4096
check_func  gettimeofday
4097
check_func  inet_aton $network_extralibs
4098
check_func  isatty
4099
check_func  localtime_r
4100
check_func  ${malloc_prefix}memalign            && enable memalign
4101
check_func  mkstemp
4102
check_func  mmap
4103
check_func  mprotect
4104
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4105
check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4106
check_func  setrlimit
4107
check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4108
check_func  strerror_r
4109
check_func  sched_getaffinity
4110
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4111
check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4112
check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4113
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4114
check_builtin sarestart signal.h "SA_RESTART"
4115
check_func  sysconf
4116
check_func  sysctl
4117
check_func  usleep
4118
check_func_headers conio.h kbhit
4119
check_func_headers windows.h PeekNamedPipe
4120
check_func_headers io.h setmode
4121
check_func_headers lzo/lzo1x.h lzo1x_999_compress
4122
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4123
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4124
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4125
check_func_headers windows.h GetProcessAffinityMask
4126
check_func_headers windows.h GetProcessTimes
4127
check_func_headers windows.h GetSystemTimeAsFileTime
4128
check_func_headers windows.h MapViewOfFile
4129
check_func_headers windows.h SetConsoleTextAttribute
4130
check_func_headers windows.h Sleep
4131
check_func_headers windows.h VirtualAlloc
4132
check_func_headers glob.h glob
4133
check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4134
 
4135
check_header cl/cl.h
4136
check_header direct.h
4137
check_header dlfcn.h
4138
check_header dxva.h
4139
check_header dxva2api.h -D_WIN32_WINNT=0x0600
4140
check_header io.h
4141
check_header libcrystalhd/libcrystalhd_if.h
4142
check_header malloc.h
4143
check_header poll.h
4144
check_header sys/mman.h
4145
check_header sys/param.h
4146
check_header sys/resource.h
4147
check_header sys/select.h
4148
check_header sys/time.h
4149
check_header sys/un.h
4150
check_header termios.h
4151
check_header unistd.h
4152
check_header vdpau/vdpau.h
4153
check_header vdpau/vdpau_x11.h
4154
check_header VideoDecodeAcceleration/VDADecoder.h
4155
check_header windows.h
4156
check_header X11/extensions/XvMClib.h
4157
check_header asm/types.h
4158
 
4159
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4160
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4161
 
4162
if ! disabled w32threads && ! enabled pthreads; then
4163
    check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4164
fi
4165
 
4166
# check for some common methods of building with pthread support
4167
# do this before the optional library checks as some of them require pthreads
4168
if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4169
    enable pthreads
4170
    if check_func pthread_create; then
4171
        :
4172
    elif check_func pthread_create -pthread; then
4173
        add_cflags -pthread
4174
        add_extralibs -pthread
4175
    elif check_func pthread_create -pthreads; then
4176
        add_cflags -pthreads
4177
        add_extralibs -pthreads
4178
    elif check_func pthread_create -lpthreadGC2; then
4179
        add_extralibs -lpthreadGC2
4180
    elif ! check_lib pthread.h pthread_create -lpthread; then
4181
        disable pthreads
4182
    fi
4183
fi
4184
 
4185
for thread in $THREADS_LIST; do
4186
    if enabled $thread; then
4187
        test -n "$thread_type" &&
4188
            die "ERROR: Only one thread type must be selected." ||
4189
            thread_type="$thread"
4190
    fi
4191
done
4192
 
4193
if enabled pthreads; then
4194
  check_func pthread_cancel
4195
fi
4196
 
4197
enabled sync_val_compare_and_swap && enable atomics_gcc
4198
enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
4199
enabled MemoryBarrier && enable atomics_win32
4200
 
4201
check_lib math.h sin -lm && LIBM="-lm"
4202
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4203
 
4204
atan2f_args=2
4205
ldexpf_args=2
4206
powf_args=2
4207
 
4208
for func in $MATH_FUNCS; do
4209
    eval check_mathfunc $func \${${func}_args:-1}
4210
done
4211
 
4212
# these are off by default, so fail if requested and not available
4213
enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4214
                               { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4215
                               die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4216
enabled fontconfig        && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4217
enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4218
enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4219
enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4220
enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4221
enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4222
enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4223
enabled libbluray         && require libbluray libbluray/bluray.h bd_open -lbluray
4224
enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4225
                             { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4226
                               die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4227
enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4228
enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4229
enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4230
flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
4231
enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4232
enabled libfreetype       && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
4233
enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4234
enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4235
                                   check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4236
                               done || die "ERROR: libgsm not found"; }
4237
enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4238
enabled libmodplug        && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4239
enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4240
enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4241
enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4242
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4243
enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4244
enabled libopenjpeg       && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
4245
                               check_lib openjpeg.h opj_version -lopenjpeg ||
4246
                               die "ERROR: libopenjpeg not found"; }
4247
enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4248
enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4249
enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
4250
enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4251
enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4252
enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
4253
enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
4254
enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
4255
enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
4256
enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4257
    media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4258
    media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4259
enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4260
enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
4261
                             { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4262
                               die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4263
enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4264
enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4265
enabled libvidstab        && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4266
enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4267
enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4268
enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4269
enabled libvpx            && {
4270
    enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4271
                                    die "ERROR: libvpx decoder version must be >=0.9.1"; }
4272
    enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
4273
                                    die "ERROR: libvpx encoder version must be >=0.9.7"; }
4274
    enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4275
    enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4276
enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4277
enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
4278
                             { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4279
                               die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4280
enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4281
enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4282
enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
4283
enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4284
enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
4285
                               check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
4286
                               die "ERROR: openal not found"; } &&
4287
                             { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
4288
                               die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4289
enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
4290
                               check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
4291
                               die "ERROR: opencl not found"; } &&
4292
                             { ! enabled_any w32threads os2threads ||
4293
                               die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4294
                             { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
4295
                               check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
4296
                               die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4297
enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4298
                               check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4299
                               check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4300
                               die "ERROR: openssl not found"; }
4301
 
4302
if enabled gnutls; then
4303
    { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4304
    { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4305
fi
4306
 
4307
# libdc1394 check
4308
if enabled libdc1394; then
4309
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4310
        enable libdc1394_2; } ||
4311
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4312
        enable libdc1394_1; } ||
4313
    die "ERROR: No version of libdc1394 found "
4314
fi
4315
 
4316
SDL_CONFIG="${cross_prefix}sdl-config"
4317
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4318
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4319
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4320
    enable sdl
4321
else
4322
  if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4323
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
4324
    sdl_libs=$("${SDL_CONFIG}" --libs)
4325
    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4326
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4327
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4328
    enable sdl
4329
  fi
4330
fi
4331
enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4332
 
4333
texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4334
makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
4335
perl --version > /dev/null 2>&1 && enable perl || disable perl
4336
pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4337
rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4338
 
4339
check_header linux/fb.h
4340
check_header linux/videodev.h
4341
check_header linux/videodev2.h
4342
check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4343
 
4344
check_header sys/videoio.h
4345
 
4346
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4347
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4348
# w32api 3.12 had it defined wrong
4349
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4350
 
4351
check_type "dshow.h" IBaseFilter
4352
 
4353
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4354
{ check_header dev/bktr/ioctl_meteor.h &&
4355
  check_header dev/bktr/ioctl_bt848.h; } ||
4356
{ check_header machine/ioctl_meteor.h &&
4357
  check_header machine/ioctl_bt848.h; } ||
4358
{ check_header dev/video/meteor/ioctl_meteor.h &&
4359
  check_header dev/video/bktr/ioctl_bt848.h; } ||
4360
check_header dev/ic/bt8xx.h
4361
 
4362
check_header sndio.h
4363
if check_struct sys/soundcard.h audio_buf_info bytes; then
4364
    enable_safe sys/soundcard.h
4365
else
4366
    check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <
4367
    #include 
4368
    audio_buf_info abc;
4369
EOF
4370
fi
4371
check_header soundcard.h
4372
 
4373
enabled_any alsa_indev alsa_outdev &&
4374
    check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4375
 
4376
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4377
    check_func jack_port_get_latency_range -ljack
4378
 
4379
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4380
 
4381
if enabled libcdio; then
4382
    check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4383
    check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4384
    die "ERROR: libcdio-paranoia not found"
4385
fi
4386
 
4387
enabled x11grab                                           &&
4388
require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
4389
require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4390
require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4391
 
4392
enabled vaapi &&
4393
    check_lib va/va.h vaInitialize -lva ||
4394
    disable vaapi
4395
 
4396
enabled vdpau &&
4397
    check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4398
    disable vdpau
4399
 
4400
# Funny iconv installations are not unusual, so check it after all flags have been set
4401
disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4402
 
4403
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4404
 
4405
# add some useful compiler flags if supported
4406
check_cflags -Wdeclaration-after-statement
4407
check_cflags -Wall
4408
check_cflags -Wno-parentheses
4409
check_cflags -Wno-switch
4410
check_cflags -Wno-format-zero-length
4411
check_cflags -Wdisabled-optimization
4412
check_cflags -Wpointer-arith
4413
check_cflags -Wredundant-decls
4414
check_cflags -Wno-pointer-sign
4415
check_cflags -Wwrite-strings
4416
check_cflags -Wtype-limits
4417
check_cflags -Wundef
4418
check_cflags -Wmissing-prototypes
4419
check_cflags -Wno-pointer-to-int-cast
4420
check_cflags -Wstrict-prototypes
4421
enabled extra_warnings && check_cflags -Winline
4422
 
4423
# add some linker flags
4424
check_ldflags -Wl,--warn-common
4425
check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4426
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4427
 
4428
enabled xmm_clobber_test &&
4429
    check_ldflags -Wl,--wrap,avcodec_open2              \
4430
                  -Wl,--wrap,avcodec_decode_audio4      \
4431
                  -Wl,--wrap,avcodec_decode_video2      \
4432
                  -Wl,--wrap,avcodec_decode_subtitle2   \
4433
                  -Wl,--wrap,avcodec_encode_audio2      \
4434
                  -Wl,--wrap,avcodec_encode_video       \
4435
                  -Wl,--wrap,avcodec_encode_video2      \
4436
                  -Wl,--wrap,avcodec_encode_subtitle    \
4437
                  -Wl,--wrap,sws_scale ||
4438
    disable xmm_clobber_test
4439
 
4440
echo "X{};" > $TMPV
4441
if test_ldflags -Wl,--version-script,$TMPV; then
4442
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4443
    check_cc <
4444
void ff_foo(void) __asm__ ("av_foo@VERSION");
4445
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4446
EOF
4447
    check_cc <
4448
__asm__(".symver ff_foo,av_foo@VERSION");
4449
void ff_foo(void) {}
4450
EOF
4451
fi
4452
 
4453
if [ -z "$optflags" ]; then
4454
    if enabled small; then
4455
        optflags=$cflags_size
4456
    elif enabled optimizations; then
4457
        optflags=$cflags_speed
4458
    else
4459
        optflags=$cflags_noopt
4460
    fi
4461
fi
4462
 
4463
check_optflags(){
4464
    check_cflags "$@"
4465
    enabled lto && check_ldflags "$@"
4466
}
4467
 
4468
 
4469
if enabled lto; then
4470
    test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4471
    check_cflags  -flto
4472
    check_ldflags -flto $cpuflags
4473
fi
4474
 
4475
check_optflags $optflags
4476
check_optflags -fno-math-errno
4477
check_optflags -fno-signed-zeros
4478
 
4479
enabled ftrapv && check_cflags -ftrapv
4480
 
4481
check_cc -mno-red-zone <
4482
int x;
4483
EOF
4484
 
4485
 
4486
if enabled icc; then
4487
    # Just warnings, no remarks
4488
    check_cflags -w1
4489
    # -wd: Disable following warnings
4490
    # 144, 167, 556: -Wno-pointer-sign
4491
    # 188: enumerated type mixed with another type
4492
    # 1292: attribute "foo" ignored
4493
    # 1419: external declaration in primary source file
4494
    # 10006: ignoring unknown option -fno-signed-zeros
4495
    # 10148: ignoring unknown option -Wno-parentheses
4496
    # 10156: ignoring option '-W'; no argument required
4497
    check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
4498
    # 11030: Warning unknown option --as-needed
4499
    # 10156: ignoring option '-export'; no argument required
4500
    check_ldflags -wd10156,11030
4501
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4502
    enable ebp_available
4503
    if enabled x86_32; then
4504
        icc_version=$($cc -dumpversion)
4505
        test ${icc_version%%.*} -ge 11 &&
4506
            check_cflags -falign-stack=maintain-16-byte ||
4507
            disable aligned_stack
4508
    fi
4509
elif enabled ccc; then
4510
    # disable some annoying warnings
4511
    add_cflags -msg_disable bitnotint
4512
    add_cflags -msg_disable mixfuncvoid
4513
    add_cflags -msg_disable nonstandcast
4514
    add_cflags -msg_disable unsupieee
4515
elif enabled gcc; then
4516
    check_optflags -fno-tree-vectorize
4517
    check_cflags -Werror=implicit-function-declaration
4518
    check_cflags -Werror=missing-prototypes
4519
    check_cflags -Werror=return-type
4520
    check_cflags -Werror=vla
4521
elif enabled llvm_gcc; then
4522
    check_cflags -mllvm -stack-alignment=16
4523
elif enabled clang; then
4524
    check_cflags -mllvm -stack-alignment=16
4525
    check_cflags -Qunused-arguments
4526
    check_cflags -Werror=implicit-function-declaration
4527
    check_cflags -Werror=missing-prototypes
4528
    check_cflags -Werror=return-type
4529
elif enabled cparser; then
4530
    add_cflags -Wno-missing-variable-declarations
4531
    add_cflags -Wno-empty-statement
4532
elif enabled armcc; then
4533
    # 2523: use of inline assembler is deprecated
4534
    add_cflags -W${armcc_opt},--diag_suppress=2523
4535
    add_cflags -W${armcc_opt},--diag_suppress=1207
4536
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4537
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4538
    add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4539
    add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4540
elif enabled tms470; then
4541
    add_cflags -pds=824 -pds=837
4542
elif enabled pathscale; then
4543
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4544
elif enabled_any msvc icl; then
4545
    enabled x86_32 && disable aligned_stack
4546
    enabled_all x86_32 debug && add_cflags -Oy-
4547
    enabled debug && add_ldflags -debug
4548
    enable pragma_deprecated
4549
    if enabled icl; then
4550
        # -Qansi-alias is basically -fstrict-aliasing, but does not work
4551
        # (correctly) on icl 13.x.
4552
        check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4553
            add_cflags -Qansi-alias
4554
        # icl will pass the inline asm tests but inline asm is currently
4555
        # not supported (build will fail)
4556
        disabled inline_asm || warn "inline asm disabled due to issues with it in ICL"
4557
        disable inline_asm
4558
    fi
4559
fi
4560
 
4561
case $target_os in
4562
    osf1)
4563
        enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4564
    ;;
4565
    plan9)
4566
        add_cppflags -Dmain=plan9_main
4567
    ;;
4568
esac
4569
 
4570
enable frame_thread_encoder
4571
enabled_any $THREADS_LIST      && enable threads
4572
enabled_any $ATOMICS_LIST      && enable atomics_native
4573
 
4574
enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
4575
 
4576
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4577
 
4578
check_deps $CONFIG_LIST       \
4579
           $CONFIG_EXTRA      \
4580
           $HAVE_LIST         \
4581
           $ALL_COMPONENTS    \
4582
 
4583
 
4584
if test $target_os = "haiku"; then
4585
    disable memalign
4586
    disable posix_memalign
4587
fi
4588
 
4589
! enabled_any memalign posix_memalign aligned_malloc &&
4590
    enabled_any $need_memalign && enable memalign_hack
4591
 
4592
# add_dep lib dep
4593
# -> enable ${lib}_deps_${dep}
4594
# -> add $dep to ${lib}_deps only once
4595
add_dep() {
4596
    lib=$1
4597
    dep=$2
4598
    enabled "${lib}_deps_${dep}" && return 0
4599
    enable  "${lib}_deps_${dep}"
4600
    prepend "${lib}_deps" $dep
4601
}
4602
 
4603
# merge deps lib components
4604
# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4605
merge_deps() {
4606
    lib=$1
4607
    shift
4608
    for comp in $*; do
4609
        enabled $comp || continue
4610
        eval "dep=\"\$${comp}_deps\""
4611
        for d in $dep; do
4612
            add_dep $lib $d
4613
        done
4614
    done
4615
}
4616
 
4617
merge_deps libavfilter $FILTER_LIST
4618
 
4619
echo "install prefix            $prefix"
4620
echo "source path               $source_path"
4621
echo "C compiler                $cc"
4622
echo "ARCH                      $arch ($cpu)"
4623
if test "$build_suffix" != ""; then
4624
    echo "build suffix              $build_suffix"
4625
fi
4626
if test "$progs_suffix" != ""; then
4627
    echo "progs suffix              $progs_suffix"
4628
fi
4629
if test "$extra_version" != ""; then
4630
    echo "version string suffix     $extra_version"
4631
fi
4632
echo "big-endian                ${bigendian-no}"
4633
echo "runtime cpu detection     ${runtime_cpudetect-no}"
4634
if enabled x86; then
4635
    echo "${yasmexe}                      ${yasm-no}"
4636
    echo "MMX enabled               ${mmx-no}"
4637
    echo "MMXEXT enabled            ${mmxext-no}"
4638
    echo "3DNow! enabled            ${amd3dnow-no}"
4639
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
4640
    echo "SSE enabled               ${sse-no}"
4641
    echo "SSSE3 enabled             ${ssse3-no}"
4642
    echo "AVX enabled               ${avx-no}"
4643
    echo "FMA4 enabled              ${fma4-no}"
4644
    echo "i686 features enabled     ${i686-no}"
4645
    echo "CMOV is fast              ${fast_cmov-no}"
4646
    echo "EBX available             ${ebx_available-no}"
4647
    echo "EBP available             ${ebp_available-no}"
4648
fi
4649
if enabled arm; then
4650
    echo "ARMv5TE enabled           ${armv5te-no}"
4651
    echo "ARMv6 enabled             ${armv6-no}"
4652
    echo "ARMv6T2 enabled           ${armv6t2-no}"
4653
    echo "VFP enabled               ${vfp-no}"
4654
    echo "NEON enabled              ${neon-no}"
4655
    echo "THUMB enabled             ${thumb-no}"
4656
fi
4657
if enabled mips; then
4658
    echo "MIPS FPU enabled          ${mipsfpu-no}"
4659
    echo "MIPS32R2 enabled          ${mips32r2-no}"
4660
    echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
4661
    echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4662
fi
4663
if enabled ppc; then
4664
    echo "AltiVec enabled           ${altivec-no}"
4665
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
4666
    echo "dcbzl available           ${dcbzl-no}"
4667
fi
4668
if enabled sparc; then
4669
    echo "VIS enabled               ${vis-no}"
4670
fi
4671
echo "debug symbols             ${debug-no}"
4672
echo "strip symbols             ${stripping-no}"
4673
echo "optimize for size         ${small-no}"
4674
echo "optimizations             ${optimizations-no}"
4675
echo "static                    ${static-no}"
4676
echo "shared                    ${shared-no}"
4677
echo "postprocessing support    ${postproc-no}"
4678
echo "new filter support        ${avfilter-no}"
4679
echo "network support           ${network-no}"
4680
echo "threading support         ${thread_type-no}"
4681
echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4682
echo "SDL support               ${sdl-no}"
4683
echo "opencl enabled            ${opencl-no}"
4684
echo "libzvbi enabled           ${libzvbi-no}"
4685
echo "texi2html enabled         ${texi2html-no}"
4686
echo "perl enabled              ${perl-no}"
4687
echo "pod2man enabled           ${pod2man-no}"
4688
echo "makeinfo enabled          ${makeinfo-no}"
4689
test -n "$random_seed" &&
4690
    echo "random seed               ${random_seed}"
4691
echo
4692
 
4693
echo "External libraries:"
4694
print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4695
echo
4696
 
4697
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4698
    echo "Enabled ${type}s:"
4699
    eval list=\$$(toupper $type)_LIST
4700
    print_enabled '_*' $list | print_3_columns
4701
    echo
4702
done
4703
 
4704
license="LGPL version 2.1 or later"
4705
if enabled nonfree; then
4706
    license="nonfree and unredistributable"
4707
elif enabled gplv3; then
4708
    license="GPL version 3 or later"
4709
elif enabled lgplv3; then
4710
    license="LGPL version 3 or later"
4711
elif enabled gpl; then
4712
    license="GPL version 2 or later"
4713
fi
4714
 
4715
echo "License: $license"
4716
 
4717
echo "Creating config.mak, config.h, and doc/config.texi..."
4718
 
4719
test -e Makefile || $ln_s "$source_path/Makefile" .
4720
 
4721
enabled stripping || strip="echo skipping strip"
4722
 
4723
config_files="$TMPH config.mak doc/config.texi"
4724
 
4725
cat > config.mak <
4726
# Automatically generated by configure - do not modify!
4727
ifndef FFMPEG_CONFIG_MAK
4728
FFMPEG_CONFIG_MAK=1
4729
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4730
prefix=$prefix
4731
LIBDIR=\$(DESTDIR)$libdir
4732
SHLIBDIR=\$(DESTDIR)$shlibdir
4733
INCDIR=\$(DESTDIR)$incdir
4734
BINDIR=\$(DESTDIR)$bindir
4735
DATADIR=\$(DESTDIR)$datadir
4736
DOCDIR=\$(DESTDIR)$docdir
4737
MANDIR=\$(DESTDIR)$mandir
4738
SRC_PATH=$source_path
4739
ifndef MAIN_MAKEFILE
4740
SRC_PATH:=\$(SRC_PATH:.%=..%)
4741
endif
4742
CC_IDENT=$cc_ident
4743
ARCH=$arch
4744
CC=$cc
4745
CXX=$cxx
4746
AS=$as
4747
LD=$ld
4748
DEPCC=$dep_cc
4749
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4750
DEPAS=$as
4751
DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4752
YASM=$yasmexe
4753
DEPYASM=$yasmexe
4754
AR=$ar
4755
ARFLAGS=$arflags
4756
AR_O=$ar_o
4757
RANLIB=$ranlib
4758
STRIP=$strip
4759
CP=cp -p
4760
LN_S=$ln_s
4761
CPPFLAGS=$CPPFLAGS
4762
CFLAGS=$CFLAGS
4763
CXXFLAGS=$CXXFLAGS
4764
ASFLAGS=$ASFLAGS
4765
AS_C=$AS_C
4766
AS_O=$AS_O
4767
CC_C=$CC_C
4768
CC_E=$CC_E
4769
CC_O=$CC_O
4770
CXX_C=$CXX_C
4771
CXX_O=$CXX_O
4772
LD_O=$LD_O
4773
LD_LIB=$LD_LIB
4774
LD_PATH=$LD_PATH
4775
DLLTOOL=$dlltool
4776
LDFLAGS=$LDFLAGS
4777
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4778
YASMFLAGS=$YASMFLAGS
4779
BUILDSUF=$build_suffix
4780
PROGSSUF=$progs_suffix
4781
FULLNAME=$FULLNAME
4782
LIBPREF=$LIBPREF
4783
LIBSUF=$LIBSUF
4784
LIBNAME=$LIBNAME
4785
SLIBPREF=$SLIBPREF
4786
SLIBSUF=$SLIBSUF
4787
EXESUF=$EXESUF
4788
EXTRA_VERSION=$extra_version
4789
CCDEP=$CCDEP
4790
CXXDEP=$CXXDEP
4791
CCDEP_FLAGS=$CCDEP_FLAGS
4792
ASDEP=$ASDEP
4793
ASDEP_FLAGS=$ASDEP_FLAGS
4794
CC_DEPFLAGS=$CC_DEPFLAGS
4795
AS_DEPFLAGS=$AS_DEPFLAGS
4796
HOSTCC=$host_cc
4797
HOSTLD=$host_ld
4798
HOSTCFLAGS=$host_cflags
4799
HOSTCPPFLAGS=$host_cppflags
4800
HOSTEXESUF=$HOSTEXESUF
4801
HOSTLDFLAGS=$host_ldflags
4802
HOSTLIBS=$host_libs
4803
DEPHOSTCC=$host_cc
4804
DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4805
HOSTCCDEP=$HOSTCCDEP
4806
HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4807
HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4808
HOSTCC_C=$HOSTCC_C
4809
HOSTCC_O=$HOSTCC_O
4810
HOSTLD_O=$HOSTLD_O
4811
TARGET_EXEC=$target_exec $target_exec_args
4812
TARGET_PATH=$target_path
4813
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4814
LIBS-ffplay=$sdl_libs
4815
CFLAGS-ffplay=$sdl_cflags
4816
ZLIB=$($ldflags_filter -lz)
4817
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4818
EXTRALIBS=$extralibs
4819
COMPAT_OBJS=$compat_objs
4820
EXEOBJS=$exeobjs
4821
INSTALL=$install
4822
LIBTARGET=${LIBTARGET}
4823
SLIBNAME=${SLIBNAME}
4824
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4825
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4826
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4827
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4828
SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4829
SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4830
SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4831
SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4832
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4833
NOREDZONE_FLAGS=$noredzone_flags
4834
EOF
4835
 
4836
get_version(){
4837
    lcname=lib${1}
4838
    name=$(toupper $lcname)
4839
    file=$source_path/$lcname/version.h
4840
    eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4841
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4842
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4843
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4844
    eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4845
}
4846
 
4847
map 'get_version $v' $LIBRARY_LIST
4848
 
4849
cat > $TMPH <
4850
/* Automatically generated by configure - do not modify! */
4851
#ifndef FFMPEG_CONFIG_H
4852
#define FFMPEG_CONFIG_H
4853
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4854
#define FFMPEG_LICENSE "$(c_escape $license)"
4855
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4856
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
4857
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4858
#define av_restrict $_restrict
4859
#define EXTERN_PREFIX "${extern_prefix}"
4860
#define EXTERN_ASM ${extern_prefix}
4861
#define SLIBSUF "$SLIBSUF"
4862
#define HAVE_MMX2 HAVE_MMXEXT
4863
EOF
4864
 
4865
test -n "$assert_level" &&
4866
    echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4867
 
4868
test -n "$malloc_prefix" &&
4869
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4870
 
4871
if enabled yasm; then
4872
    append config_files $TMPASM
4873
    printf '' >$TMPASM
4874
fi
4875
 
4876
enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
4877
 
4878
 
4879
mkdir -p doc
4880
echo "@c auto-generated by configure" > doc/config.texi
4881
 
4882
print_config ARCH_   "$config_files" $ARCH_LIST
4883
print_config HAVE_   "$config_files" $HAVE_LIST
4884
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4885
                                     $CONFIG_EXTRA      \
4886
                                     $ALL_COMPONENTS    \
4887
 
4888
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4889
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4890
 
4891
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4892
cp_if_changed $TMPH config.h
4893
touch .config
4894
 
4895
enabled yasm && cp_if_changed $TMPASM config.asm
4896
 
4897
cat > $TMPH <
4898
/* Generated by ffconf */
4899
#ifndef AVUTIL_AVCONFIG_H
4900
#define AVUTIL_AVCONFIG_H
4901
EOF
4902
 
4903
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4904
 
4905
echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4906
 
4907
cp_if_changed $TMPH libavutil/avconfig.h
4908
 
4909
if test -n "$WARNINGS"; then
4910
    printf "\n$WARNINGS"
4911
    enabled fatal_warnings && exit 1
4912
fi
4913
 
4914
# build pkg-config files
4915
 
4916
pkgconfig_generate(){
4917
    name=$1
4918
    shortname=${name#lib}${build_suffix}
4919
    comment=$2
4920
    version=$3
4921
    libs=$4
4922
    requires=$5
4923
    enabled ${name#lib} || return 0
4924
    mkdir -p $name
4925
    cat < $name/$name${build_suffix}.pc
4926
prefix=$prefix
4927
exec_prefix=\${prefix}
4928
libdir=$libdir
4929
includedir=$incdir
4930
 
4931
Name: $name
4932
Description: $comment
4933
Version: $version
4934
Requires: $(enabled shared || echo $requires)
4935
Requires.private: $(enabled shared && echo $requires)
4936
Conflicts:
4937
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4938
Libs.private: $(enabled shared && echo $libs)
4939
Cflags: -I\${includedir}
4940
EOF
4941
 
4942
mkdir -p doc/examples/pc-uninstalled
4943
includedir=${source_path}
4944
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4945
    cat < doc/examples/pc-uninstalled/$name.pc
4946
prefix=
4947
exec_prefix=
4948
libdir=\${pcfiledir}/../../../$name
4949
includedir=${includedir}
4950
 
4951
Name: $name
4952
Description: $comment
4953
Version: $version
4954
Requires: $requires
4955
Conflicts:
4956
Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
4957
Cflags: -I\${includedir}
4958
EOF
4959
}
4960
 
4961
lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4962
enabled libavfilter_deps_avcodec    && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION,"
4963
enabled libavfilter_deps_avformat   && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION,"
4964
enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION,"
4965
enabled libavfilter_deps_swscale    && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION,"
4966
enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION,"
4967
enabled libavfilter_deps_postproc   && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION,"
4968
lavfi_libs=${lavfi_libs%, }
4969
 
4970
lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
4971
enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
4972
 
4973
pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBM"
4974
pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4975
pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION"
4976
pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs" "$lavd_libs"
4977
pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs" "$lavfi_libs"
4978
pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""           "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4979
pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4980
pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4981
pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4982
 
4983
fix_ffmpeg_remote(){
4984
    git_remote_from=$1
4985
    git_remote_to=$2
4986
    fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4987
    if [ "$fixme_remote" != "" ]; then
4988
        echolog "
4989
Outdated domain in git config, the official domain for ffmpeg git is since
4990
November 2011, source.ffmpeg.org, both the old and the new point to the same
4991
repository and server. To update it enter the following commands:
4992
"
4993
        for remote in $fixme_remote; do
4994
            echolog "git remote set-url $remote $git_remote_to"
4995
        done
4996
    fi
4997
}
4998
 
4999
if test -f "$source_path/.git/config"; then
5000
    remote_from=git.videolan.org
5001
    remote_to=source.ffmpeg.org
5002
    fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
5003
    fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
5004
fi