--prefix=PREFIX install in PREFIX [$prefix]
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/avconv]
+ --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [PREFIX/lib]
--incdir=DIR install includes in DIR [PREFIX/include]
--enable-libvorbis enable Vorbis encoding via libvorbis [no]
--enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
--enable-libwavpack enable wavpack encoding via libwavpack [no]
+ --enable-libwebp enable WebP encoding via libwebp [no]
--enable-libx264 enable H.264 encoding via x264 [no]
--enable-libxavs enable AVS encoding via xavs [no]
--enable-libxvid enable Xvid encoding via xvidcore,
--disable-sse42 disable SSE4.2 optimizations
--disable-avx disable AVX optimizations
--disable-fma4 disable FMA4 optimizations
+ --disable-avx2 disable AVX2 optimizations
--disable-armv5te disable armv5te optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
-libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
+libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
EOF
if disabled logging; then
cat <<EOF
append LDFLAGS $($ldflags_filter "$@")
}
+add_stripflags(){
+ append STRIPFLAGS "$@"
+}
+
add_extralibs(){
prepend extralibs $($ldflags_filter "$@")
}
check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
}
+print_include(){
+ hdr=$1
+ test "${hdr%.h}" = "${hdr}" &&
+ echo "#include $hdr" ||
+ echo "#include <$hdr>"
+}
+
check_code(){
log check_code "$@"
check=$1
shift 3
{
for hdr in $headers; do
- echo "#include <$hdr>"
+ print_include $hdr
done
echo "int main(void) { $code; return 0; }"
} | check_$check "$@"
EOF
}
-check_cflags(){
- log check_cflags "$@"
+test_cflags(){
+ log test_cflags "$@"
set -- $($cflags_filter "$@")
- check_cc "$@" <<EOF && append CFLAGS "$@"
+ check_cc "$@" <<EOF
int x;
EOF
}
+check_cflags(){
+ log check_cflags "$@"
+ test_cflags "$@" && add_cflags "$@"
+}
+
test_ldflags(){
log test_ldflags "$@"
check_ld "$@" <<EOF
test_ldflags "$@" && add_ldflags "$@"
}
+test_stripflags(){
+ log test_stripflags "$@"
+ # call check_cc to get a fresh TMPO
+ check_cc <<EOF
+int main(void) { return 0; }
+EOF
+ check_cmd $strip $STRIPFLAGS "$@" $TMPO
+}
+
+check_stripflags(){
+ log check_stripflags "$@"
+ test_stripflags "$@" && add_stripflags "$@"
+}
+
check_header(){
log check_header "$@"
header=$1
shift 2
{
for hdr in $headers; do
- echo "#include <$hdr>"
+ print_include $hdr
done
for func in $funcs; do
echo "long check_$func(void) { return (long) $func; }"
headers="$2"
funcs="$3"
shift 3
- $pkg_config --exists $pkg || return
+ check_cmd $pkg_config --exists --print-errors $pkg || return
pkg_cflags=$($pkg_config --cflags $pkg)
pkg_libs=$($pkg_config --libs $pkg)
check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
add_extralibs $(get_safe ${pkg}_libs)
}
+hostcc_e(){
+ eval printf '%s\\n' $HOSTCC_E
+}
+
hostcc_o(){
eval printf '%s\\n' $HOSTCC_O
}
check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
}
+check_host_cpp(){
+ log check_host_cpp "$@"
+ cat > $TMPC
+ log_file $TMPC
+ check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
+}
+
check_host_cppflags(){
log check_host_cppflags "$@"
check_host_cc "$@" <<EOF && append host_cppflags "$@"
EOF
}
+check_host_cpp_condition(){
+ log check_host_cpp_condition "$@"
+ header=$1
+ condition=$2
+ shift 2
+ check_host_cpp "$@" <<EOF
+#include <$header>
+#if !($condition)
+#error "unsatisfied condition: $condition"
+#endif
+EOF
+}
+
apply(){
file=$1
shift
protocols
"
+EXAMPLE_LIST="
+ output_example
+ transcode_aac_example
+"
+
EXTERNAL_LIBRARY_LIST="
avisynth
bzlib
libvorbis
libvpx
libwavpack
+ libwebp
libx264
libxavs
libxvid
CONFIG_LIST="
$COMPONENT_LIST
+ $EXAMPLE_LIST
$EXTERNAL_LIBRARY_LIST
$HWACCEL_LIST
$LIBRARY_LIST
memalign_hack
network
nonfree
+ pod2man
pic
rdft
runtime_cpudetect
sram
static
swscale_alpha
+ texi2html
thumb
version3
xmm_clobber_test
amd3dnow
amd3dnowext
avx
+ avx2
fma4
+ i686
mmx
mmxext
sse
gettimeofday
gnu_as
gsm_h
- i686
ibm_asm
inet_aton
io_h
isatty
jack_port_get_latency_range
ldbrx
+ libc_msvcrt
libdc1394_1
libdc1394_2
local_aligned_16
mm_empty
mmap
mprotect
- msvcrt
nanosleep
poll_h
posix_memalign
threads
unistd_h
usleep
+ vdpau_x11
vfp_args
VirtualAlloc
windows_h
winsock2_h
xform_asm
+ xlib
xmm_clobbers
"
gcrypt
golomb
gplv3
+ h263dsp
h264chroma
h264dsp
h264pred
PATHS_LIST='
bindir
datadir
+ docdir
incdir
libdir
mandir
vis_deps="sparc"
-x86_64_suggest="fast_cmov i686"
+cpunop_deps="i686"
+x86_64_select="i686"
+x86_64_suggest="fast_cmov"
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
sse42_deps="sse4"
avx_deps="sse42"
fma4_deps="avx"
+avx2_deps="avx"
mmx_external_deps="yasm"
mmx_inline_deps="inline_asm"
fast_clz_if_any="alpha avr32 mips ppc x86"
fast_unaligned_if_any="ppc x86"
-inline_asm_deps="!tms470"
need_memalign="altivec neon sse"
+# system capabilities
+log2_deps="!libc_msvcrt"
+
symver_if_any="symver_asm_label symver_gnu_asm"
-log2_deps="!msvcrt"
+# threading support
+atomics_gcc_if="sync_val_compare_and_swap"
+atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
+atomics_win32_if="MemoryBarrier"
+atomics_native_if_any="$ATOMICS_LIST"
+threads_if_any="$THREADS_LIST"
# subsystems
dct_select="rdft"
g2m_decoder_select="dsputil"
h261_decoder_select="error_resilience mpegvideo"
h261_encoder_select="aandcttables mpegvideoenc"
-h263_decoder_select="error_resilience h263_parser mpegvideo"
-h263_encoder_select="aandcttables mpegvideoenc"
+h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
+h263_encoder_select="aandcttables h263dsp mpegvideoenc"
h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
h264_decoder_suggest="error_resilience"
+hevc_decoder_select="dsputil golomb videodsp"
huffyuv_decoder_select="dsputil"
huffyuv_encoder_select="dsputil huffman"
iac_decoder_select="dsputil fft mdct sinewin"
qdm2_decoder_select="mdct rdft mpegaudiodsp"
ra_144_encoder_select="audio_frame_queue lpc"
ralf_decoder_select="golomb"
-rv10_decoder_select="error_resilience h263_decoder"
+rv10_decoder_select="error_resilience h263_decoder h263dsp"
rv10_encoder_select="h263_encoder"
-rv20_decoder_select="error_resilience h263_decoder"
+rv20_decoder_select="error_resilience h263_decoder h263dsp"
rv20_encoder_select="h263_encoder"
rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
vp8_decoder_select="h264pred videodsp"
+vp9_decoder_select="videodsp"
+webp_decoder_select="vp8_decoder"
wmapro_decoder_select="mdct sinewin"
wmav1_decoder_select="mdct sinewin"
wmav1_encoder_select="mdct sinewin"
libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx"
libwavpack_encoder_deps="libwavpack"
+libwebp_encoder_deps="libwebp"
libx264_encoder_deps="libx264"
libxavs_encoder_deps="libxavs"
libxvid_encoder_deps="libxvid"
dirac_demuxer_select="dirac_parser"
dxa_demuxer_select="riffdec"
eac3_demuxer_select="ac3_parser"
+f4v_muxer_select="mov_muxer"
flac_demuxer_select="flac_parser"
+hds_muxer_select="flv_muxer"
hls_muxer_select="mpegts_muxer"
ipod_muxer_select="mov_muxer"
ismv_muxer_select="mov_muxer"
scale_filter_deps="swscale"
yadif_filter_deps="gpl"
+# examples
+output_example_deps="avcodec avformat avutil swscale"
+transcode_aac_example_deps="avcodec avformat avresample"
+
# libraries
avcodec_deps="avutil"
avdevice_deps="avutil avcodec avformat"
avserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
avserver_extralibs='$ldl'
-doc_deps="texi2html"
+# documentation
+pod2man_deps="doc"
+texi2html_deps="doc"
# default parameters
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/avconv'
+docdir_default='${prefix}/share/doc/libav'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
objformat="elf"
pkg_config_default=pkg-config
ranlib="ranlib"
+strip="strip"
yasmexe="yasm"
nogas=":"
host_os=$target_os_default
# configurable options
-enable $LIBRARY_LIST $PROGRAM_LIST
+enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
enable asm
enable debug
LD_LIB='-l%'
LD_PATH='-L'
HOSTCC_C='-c'
+HOSTCC_E='-E -o $@'
HOSTCC_O='-o $@'
HOSTLD_O='-o $@'
-host_cflags='-O3 -g'
-host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
+host_cflags='-O3'
+host_cppflags='-D_ISOC99_SOURCE'
host_libs='-lm'
host_cflags_filter=echo
host_ldflags_filter=echo
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib="${cross_prefix}${ranlib}"
+strip="${cross_prefix}${strip}"
sysinclude_default="${sysroot}/usr/include"
target_exec_args="--track-origins=yes --leak-check=full"
;;
msvc)
- cc_default="c99wrap cl"
- ld_default="c99wrap link"
+ # Check whether the current MSVC version needs the C99 converter.
+ # From MSVC 2013 (compiler major version 18) onwards, it does actually
+ # support enough of C99 to build libav. Default to the new
+ # behaviour if the regexp was unable to match anything, since this
+ # successfully parses the version number of existing supported
+ # versions that require the converter (MSVC 2010 and 2012).
+ cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
+ if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
+ cc_default="cl"
+ else
+ cc_default="c99wrap cl"
+ fi
+ ld_default="link"
nm_default="dumpbin -symbols"
ar_default="lib"
target_os_default="win32"
+ # Use a relative path for TMPDIR. This makes sure all the
+ # ffconf temp files are written with a relative path, avoiding
+ # issues with msys/win32 path conversion for MSVC parameters
+ # such as -Fo<file> or -out:<file>.
+ TMPDIR=.
;;
icl)
- cc_default="c99wrap -noconv icl"
- ld_default="c99wrap xilink"
+ cc_default="icl"
+ ld_default="xilink"
nm_default="dumpbin -symbols"
ar_default="xilib"
target_os_default="win32"
+ TMPDIR=.
;;
gcov)
add_cflags -fprofile-arcs -ftest-coverage
add_ldflags -fprofile-arcs -ftest-coverage
;;
+ hardened)
+ add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
+ add_ldflags -Wl,-z,relro -Wl,-z,now
+ ;;
?*)
die "Unknown toolchain $toolchain"
;;
done
}
+cparser_flags(){
+ for flag; do
+ case $flag in
+ -Wno-switch) echo -Wno-switch-enum ;;
+ -Wno-format-zero-length) ;;
+ -Wdisabled-optimization) ;;
+ -Wno-pointer-sign) echo -Wno-other ;;
+ *) echo $flag ;;
+ esac
+ done
+}
+
msvc_common_flags(){
for flag; do
case $flag in
-Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
-wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
-wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
- -wd4996 -wd4273 ;;
+ -wd4273 ;;
esac
done
}
_DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
_cflags_speed="-O2"
_cflags_size="-O1"
- # Nonstandard output options, to avoid msys path conversion issues.
- # Relies on wrapper to remap it.
if $_cc 2>&1 | grep -q Linker; then
- _ld_o='-out $@'
+ _ld_o='-out:$@'
else
_ld_o='-Fe$@'
fi
- _cc_o='-Fo $@'
- _cc_e='-P -Fi $@'
+ _cc_o='-Fo$@'
+ _cc_e='-P -Fi$@'
_flags_filter=msvc_flags
_ld_lib='lib%.a'
_ld_path='-libpath:'
_flags='-nologo'
- _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
+ _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
if [ $pfx = hostcc ]; then
append _cflags -Dsnprintf=_snprintf
fi
# versions (tested) as well.
_cflags_speed="-O2"
_cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
- # Nonstandard output options, to avoid msys path conversion issues.
- # Relies on wrapper to remap it.
if $_cc 2>&1 | grep -q Linker; then
- _ld_o='-out $@'
+ _ld_o='-out:$@'
else
_ld_o='-Fe$@'
fi
- _cc_o='-Fo $@'
+ _cc_o='-Fo$@'
_cc_e='-P'
_flags_filter=icl_flags
_ld_lib='lib%.a'
if [ $pfx = hostcc ]; then
append _cflags -Dsnprintf=_snprintf
fi
+ elif $_cc --version 2>/dev/null | grep -q ^cparser; then
+ _type=cparser
+ _ident=$($_cc --version | head -n1)
+ _depflags='-MMD'
+ _cflags_speed='-O4'
+ _cflags_size='-O2'
+ _flags_filter=cparser_flags
fi
eval ${pfx}_type=\$_type
SHFLAGS='-shared -Wl,-h,$$(@F)'
enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
network_extralibs="-lsocket -lnsl"
- add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
# When using suncc to build, the Solaris linker will mark
# an executable with each instruction set encountered by
# the Solaris assembler. As our libraries contain their own
enable dos_paths
;;
win32|win64)
+ disable symver
if enabled shared; then
# Link to the import library instead of the normal static library
# for shared libs.
LD_LIB='%.lib'
- # Cannot build shared and static libs at the same time with MSVC.
+ # Cannot build both shared and static libs with MSVC or icl.
disable static
fi
shlibdir_default="$bindir_default"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
- SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
+ SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS=
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
# determine libc flavour
-# uclibc defines __GLIBC__, so it needs to be checked before glibc.
-if check_cpp_condition features.h "defined __UCLIBC__"; then
- libc_type=uclibc
- add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
-elif check_cpp_condition features.h "defined __GLIBC__"; then
- libc_type=glibc
- add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
-# MinGW headers can be installed on Cygwin, so check for newlib first.
-elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
- libc_type=newlib
- add_cppflags -U__STRICT_ANSI__
-elif check_header _mingw.h; then
- libc_type=mingw
- check_cpp_condition _mingw.h \
- "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
+probe_libc(){
+ pfx=$1
+ pfx_no_=${pfx%_}
+ # uclibc defines __GLIBC__, so it needs to be checked before glibc.
+ if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
+ eval ${pfx}libc_type=uclibc
+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
+ elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
+ eval ${pfx}libc_type=glibc
+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
+ # MinGW headers can be installed on Cygwin, so check for newlib first.
+ elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
+ eval ${pfx}libc_type=newlib
+ add_${pfx}cppflags -U__STRICT_ANSI__
+ # MinGW64 is backwards compatible with MinGW32, so check for it first.
+ elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
+ eval ${pfx}libc_type=mingw64
+ add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
+ eval test \$${pfx_no_}cc_type = "gcc" &&
+ add_${pfx}cppflags -D__printf__=__gnu_printf__
+ elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
+ check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
+ eval ${pfx}libc_type=mingw32
+ check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
(__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
- die "ERROR: MinGW runtime version must be >= 3.15."
- add_cppflags -U__STRICT_ANSI__
-elif check_func_headers stdlib.h _get_doserrno; then
- libc_type=msvcrt
- add_compat strtod.o strtod=avpriv_strtod
- add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
- _snprintf=avpriv_snprintf \
- vsnprintf=avpriv_vsnprintf
- # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
- # 0x601 by default unless something else is set by the user.
- # This can easily lead to us detecting functions only present
- # in such new versions and producing binaries requiring windows 7.0.
- # Therefore explicitly set the default to XP unless the user has
- # set something else on the command line.
- check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
-elif check_cpp_condition stddef.h "defined __KLIBC__"; then
- libc_type=klibc
-elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
- libc_type=bionic
- add_compat strtod.o strtod=avpriv_strtod
-fi
+ die "ERROR: MinGW32 runtime version must be >= 3.15."
+ add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
+ eval test \$${pfx_no_}cc_type = "gcc" &&
+ add_${pfx}cppflags -D__printf__=__gnu_printf__
+ elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
+ eval ${pfx}libc_type=msvcrt
+ # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
+ # 0x601 by default unless something else is set by the user.
+ # This can easily lead to us detecting functions only present
+ # in such new versions and producing binaries requiring windows 7.0.
+ # Therefore explicitly set the default to XP unless the user has
+ # set something else on the command line.
+ check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
+ add_${pfx}cppflags -D_WIN32_WINNT=0x0502
+ elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
+ eval ${pfx}libc_type=klibc
+ elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
+ eval ${pfx}libc_type=bionic
+ elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
+ eval ${pfx}libc_type=solaris
+ add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
+ fi
+}
-test -n "$libc_type" && enable $libc_type
+probe_libc
+test -n "$libc_type" && enable libc_$libc_type
+probe_libc host_
+test -n "$host_libc_type" && enable host_libc_$host_libc_type
+
+case $libc_type in
+ bionic)
+ add_compat strtod.o strtod=avpriv_strtod
+ ;;
+ msvcrt)
+ add_compat strtod.o strtod=avpriv_strtod
+ add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
+ _snprintf=avpriv_snprintf \
+ vsnprintf=avpriv_vsnprintf
+ ;;
+esac
# hacks for compiler/libc/os combinations
-if enabled_all tms470 glibc; then
+if enabled_all tms470 libc_glibc; then
CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
add_cppflags -D__USER_LABEL_PREFIX__=
add_cppflags -D__builtin_memset=memset
add_cflags -pds=48 # incompatible redefinition of macro
fi
-if enabled_all ccc glibc; then
+if enabled_all ccc libc_glibc; then
add_ldflags -Wl,-z,now # calls to libots crash without this
fi
elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
esac
- check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
- die "yasm not found, use --disable-yasm for a crippled build"
+ check_yasm "movbe ecx, [5]" && enable yasm ||
+ die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
- check_yasm "CPU amdnop" && enabled i686 && enable cpunop
+ check_yasm "CPU amdnop" && enable cpunop
fi
case "$cpu" in
check_header windows.h
check_header X11/extensions/XvMClib.h
-disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
-disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
-
if ! disabled w32threads && ! enabled pthreads; then
- check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
+ check_func_headers "windows.h process.h" _beginthreadex &&
+ enable w32threads || disable w32threads
fi
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if ! disabled pthreads && ! enabled w32threads; then
enable pthreads
- if check_func pthread_create; then
- :
- elif check_func pthread_create -pthread; then
+ if check_func pthread_join -pthread; then
add_cflags -pthread
add_extralibs -pthread
- elif check_func pthread_create -pthreads; then
+ elif check_func pthread_join -pthreads; then
add_cflags -pthreads
add_extralibs -pthreads
- elif check_func pthread_create -lpthreadGC2; then
+ elif check_func pthread_join -lpthreadGC2; then
add_extralibs -lpthreadGC2
- elif ! check_lib pthread.h pthread_create -lpthread; then
+ elif check_lib pthread.h pthread_join -lpthread; then
+ :
+ elif ! check_func pthread_join; then
disable pthreads
fi
fi
fi
done
-enabled sync_val_compare_and_swap && enable atomics_gcc
-enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
-enabled MemoryBarrier && enable atomics_win32
+disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
+disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
check_lib math.h sin -lm && LIBM="-lm"
enabled vaapi && require vaapi va/va.h vaInitialize -lva
done
# these are off by default, so fail if requested and not available
-enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
+enabled avisynth && { { check_header "avisynth/avisynth_c.h" && check_lib2 "windows.h" LoadLibrary; } ||
+ { check_header "avxsynth/avxsynth_c.h" && check_lib2 "dlfcn.h" dlopen -ldl; } ||
+ die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
+enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
{ check_cpp_condition x264.h "X264_BUILD >= 118" ||
die "ERROR: libx264 version must be >= 0.118."; }
enable sdl
fi
+pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
check_header linux/fb.h
check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
fi
+check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
+
enabled x11grab &&
-require X11 X11/Xlib.h XOpenDisplay -lX11 &&
require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
-require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
+require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
+{ enabled xlib || die "ERROR: Xlib not found"; }
enabled vdpau &&
check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
disable vdpau
+enabled vdpau && enabled xlib &&
+ check_lib2 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
+ enable vdpau_x11
+
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
check_cflags -Wall
-check_cflags -Wno-parentheses
-check_cflags -Wno-switch
-check_cflags -Wno-format-zero-length
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
-check_cflags -Wno-pointer-sign
check_cflags -Wcast-qual
check_cflags -Wwrite-strings
check_cflags -Wtype-limits
check_cflags -Wstrict-prototypes
enabled extra_warnings && check_cflags -Winline
+check_disable_warning(){
+ warning_flag=-W${1#-Wno-}
+ test_cflags $warning_flag && add_cflags $1
+}
+
+check_disable_warning -Wno-parentheses
+check_disable_warning -Wno-switch
+check_disable_warning -Wno-format-zero-length
+check_disable_warning -Wno-pointer-sign
+
# add some linker flags
check_ldflags -Wl,--warn-common
check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
+# add some strip flags
+# -wN '..@*' is more selective than -x, but not available everywhere.
+check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
+
enabled xmm_clobber_test &&
check_ldflags -Wl,--wrap,avcodec_open2 \
-Wl,--wrap,avcodec_decode_audio4 \
-Wl,--wrap,avcodec_decode_video2 \
-Wl,--wrap,avcodec_decode_subtitle2 \
-Wl,--wrap,avcodec_encode_audio2 \
- -Wl,--wrap,avcodec_encode_video \
+ -Wl,--wrap,avcodec_encode_video2 \
-Wl,--wrap,avcodec_encode_subtitle \
-Wl,--wrap,sws_scale ||
disable xmm_clobber_test
check_cflags -Werror=return-type
check_cflags -Werror=declaration-after-statement
check_cflags -Werror=vla
+ enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
elif enabled llvm_gcc; then
check_cflags -mllvm -stack-alignment=16
elif enabled clang; then
check_cflags -Werror=implicit-function-declaration
check_cflags -Werror=missing-prototypes
check_cflags -Werror=return-type
+elif enabled cparser; then
+ add_cflags -Wno-missing-variable-declarations
+ add_cflags -Wno-empty-statement
elif enabled armcc; then
# 2523: use of inline assembler is deprecated
add_cflags -W${armcc_opt},--diag_suppress=2523
add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
elif enabled tms470; then
add_cflags -pds=824 -pds=837
+ disable inline_asm
elif enabled pathscale; then
add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
elif enabled_any msvc icl; then
enabled x86_32 && disable aligned_stack
enabled_all x86_32 debug && add_cflags -Oy-
enabled debug && add_ldflags -debug
+ enable pragma_deprecated
if enabled icl; then
- # basically -fstrict-aliasing that does not work (correctly) on icl 13.x
- check_cpp_condition "windows.h" "__ICL < 1300" && add_cflags -Qansi-alias
+ # -Qansi-alias is basically -fstrict-aliasing, but does not work
+ # (correctly) on icl 13.x.
+ check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
+ add_cflags -Qansi-alias
# icl will pass the inline asm tests but inline asm is currently
# not supported (build will fail)
disable inline_asm
;;
esac
-enabled_any $THREADS_LIST && enable threads
-enabled_any $ATOMICS_LIST && enable atomics_native
-
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
check_deps $CONFIG_LIST \
echo "install prefix $prefix"
echo "source path $source_path"
echo "C compiler $cc"
+echo "C library $libc_type"
+if test "$host_cc" != "$cc"; then
+ echo "host C compiler $host_cc"
+ echo "host C library $host_libc_type"
+fi
echo "ARCH $arch ($cpu)"
if test "$build_suffix" != ""; then
echo "build suffix $build_suffix"
echo "Creating config.mak and config.h..."
-test -e Makefile || $ln_s "$source_path/Makefile" .
+test -e Makefile || echo "include $source_path/Makefile" > Makefile
config_files="$TMPH config.mak"
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
+DOCDIR=\$(DESTDIR)$docdir
MANDIR=\$(DESTDIR)$mandir
SRC_PATH=$source_path
CC_IDENT=$cc_ident
ARFLAGS=$arflags
AR_O=$ar_o
RANLIB=$ranlib
+STRIP=$strip
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
DLLTOOL=$dlltool
LDFLAGS=$LDFLAGS
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
+STRIPFLAGS=$STRIPFLAGS
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
FULLNAME=$FULLNAME