@ -610,7 +610,7 @@ is_in(){
return 1
}
do_ check_deps(){
check_deps(){
for cfg; do
enabled ${cfg}_checking && die "Circular dependency for $cfg."
disabled ${cfg}_checking && continue
@ -626,7 +626,7 @@ do_check_deps(){
eval dep_ifn="\$${cfg}_if_any"
pushvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
do_ check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
popvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
[ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
@ -639,24 +639,17 @@ do_check_deps(){
if enabled $cfg; then
enable_deep $dep_sel
enable_deep_weak $dep_sgs
for dep in $dep_all $dep_any $dep_sgs; do
# filter out library deps, these do not belong in extralibs
is_in $dep $LIBRARY_LIST && continue
enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
done
fi
disable ${cfg}_checking
done
}
check_deps(){
unset allopts
do_check_deps "$@"
for cfg in $allopts; do
enabled $cfg || continue
eval dep_extralibs="\$${cfg}_extralibs"
test -n "$dep_extralibs" && add_extralibs $dep_extralibs
done
}
print_config(){
pfx=$1
files=$2
@ -711,6 +704,15 @@ unique(){
eval "$var=\"${uniq_list}\""
}
resolve(){
var=$1
tmpvar=
for entry in $(eval echo \$$var); do
tmpvar="$tmpvar $(eval echo \$${entry})"
done
eval "$var=\"${tmpvar}\""
}
add_cppflags(){
append CPPFLAGS "$@"
}
@ -1015,7 +1017,7 @@ check_lib(){
shift 3
disable $name
check_func_headers "$headers" "$funcs" "$@" &&
enable $name && add_extralibs " $@"
enable $name && eval ${name}_extralibs="\ $@"
}
check_pkg_config(){
@ -1033,7 +1035,7 @@ check_pkg_config(){
check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
enable $name &&
add_cflags "$pkg_cflags" &&
add_extralibs " $pkg_libs"
eval $(sanitize_var_name ${name}_extralibs)="\ $pkg_libs"
}
check_exec(){
@ -1252,6 +1254,12 @@ EXAMPLE_LIST="
transcode_aac_example
"
# catchall list of things that require external libs to link
EXTRALIBS_LIST="
cpu_init
cws2fws
"
HWACCEL_LIBRARY_NONFREE_LIST="
cuda
libnpp
@ -2497,6 +2505,10 @@ output_example_deps="avcodec avformat avresample avutil swscale"
qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
transcode_aac_example_deps="avcodec avformat avresample"
# EXTRALIBS_LIST
cpu_init_extralibs="pthreads_extralibs"
cws2fws_extralibs="zlib_extralibs"
# libraries, in linking order
avcodec_deps="avutil"
avcodec_select="null_bsf"
@ -2507,15 +2519,25 @@ avformat_suggest="network"
avresample_deps="avutil"
swscale_deps="avutil"
avcodec_extralibs="pthreads_extralibs libm_extralibs"
avdevice_extralibs="libm_extralibs"
avformat_extralibs="libm_extralibs"
avfilter_extralibs="pthreads_extralibs libm_extralibs"
avresample_extralibs="libm_extralibs"
avutil_extralibs="clock_gettime_extralibs cuda_extralibs libm_extralibs libmfx_extralibs nanosleep_extralibs user32_extralibs vaapi_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs wincrypt_extralibs"
swscale_extralibs="libm_extralibs"
# programs
avconv_deps="avcodec avfilter avformat avresample swscale"
avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
fps_filter null_filter resample_filter scale_filter
trim_filter"
avconv_suggest="dxva2_lib ole32 psapi shell32"
avplay_deps="avcodec avfilter avformat avresample sdl"
avplay_extralibs='$sdl_extralibs'
avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
avplay_suggest="shell32"
avprobe_deps="avcodec avformat"
avprobe_suggest="shell32"
# documentation
pod2man_deps="doc"
@ -2573,6 +2595,9 @@ enable valgrind_backtrace
# By default, enable only those hwaccels that have no external dependencies.
enable d3d11va dxva2 vda vdpau
# internal components are enabled by default
enable $EXTRALIBS_LIST
# Avoid external, non-system, libraries getting enabled by dependency resolution
disable $EXTERNAL_LIBRARY_LIST
@ -2669,20 +2694,36 @@ find_things_extern(){
BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
ALL_COMPONENTS ="
AVCODEC_COMPONENTS_LIST ="
$BSF_LIST
$DECODER_LIST
$DEMUXER_LIST
$ENCODER_LIST
$FILTER_LIST
$HWACCEL_LIST
$PARSER_LIST
"
AVDEVICE_COMPONENTS_LIST="
$INDEV_LIST
$MUXER_LIST
$OUTDEV_LIST
$PARSER_LIST
"
AVFILTER_COMPONENTS_LIST="
$FILTER_LIST
"
AVFORMAT_COMPONENTS_LIST="
$DEMUXER_LIST
$MUXER_LIST
$PROTOCOL_LIST
"
ALL_COMPONENTS="
$AVCODEC_COMPONENTS_LIST
$AVDEVICE_COMPONENTS_LIST
$AVFILTER_COMPONENTS_LIST
$AVFORMAT_COMPONENTS_LIST
"
for n in $COMPONENT_LIST; do
v=$(toupper ${n%s})_LIST
eval enable \$$v
@ -4525,7 +4566,7 @@ check_func ${malloc_prefix}posix_memalign && enable posix_memalign
check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
check_func_headers time.h clock_gettime ||
{ check_lib clock_gettime time.h clock_gettime -lrt && LIBRT="-lrt"; }
check_lib clock_gettime time.h clock_gettime -lrt
check_func fcntl
check_func fork
@ -4638,14 +4679,14 @@ disabled bzlib || check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
# On some systems dynamic loading requires no extra linker flags
check_lib libdl dlfcn.h dlopen || check_lib libdl dlfcn.h dlopen -ldl
check_lib libm math.h sin -lm && LIBM="-lm"
check_lib libm math.h sin -lm
atan2f_args=2
ldexpf_args=2
powf_args=2
for func in $MATH_FUNCS; do
eval check_mathfunc $func \${${func}_args:-1} $LIBM
eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs
done
# these are off by default, so fail if requested and not available
@ -4716,10 +4757,10 @@ enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_co
check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
die "ERROR: mmal not found" &&
check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
enabled omx && require_header OMX_Core.h
enabled omx_rpi && { check_header OMX_Core.h ||
{ ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_header OMX_Core.h ; } ||
die "ERROR: OpenMAX IL headers not found"; }
enabled omx && require_header OMX_Core.h
die "ERROR: OpenMAX IL headers not found"; } && enable omx
enabled openssl && { { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
check_pkg_config openssl openssl openssl/ssl.h SSL_library_init; } ||
check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
@ -5069,6 +5110,43 @@ check_deps $CONFIG_LIST \
$HAVE_LIST \
$ALL_COMPONENTS \
flatten_extralibs(){
unset nested_entries
list_name=$1
eval list=\$${1}
for entry in $list; do
entry_copy=$entry
resolve entry_copy
append nested_entries $(filter '*_extralibs' $entry_copy)
flat_entries=$(filter_out '*_extralibs' $entry_copy)
eval $entry="\$flat_entries"
done
append $list_name "$nested_entries"
resolve nested_entries
if test -n "$(filter '*_extralibs' $nested_entries)"; then
flatten_extralibs $list_name
fi
}
for linkunit in $LIBRARY_LIST; do
unset current_extralibs
eval components=\$$(toupper ${linkunit})_COMPONENTS_LIST
for comp in ${components}; do
enabled $comp || continue
comp_extralibs="${comp}_extralibs"
append current_extralibs $comp_extralibs
done
eval prepend ${linkunit}_extralibs $current_extralibs
done
for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
flatten_extralibs ${linkunit}_extralibs
unique ${linkunit}_extralibs
resolve ${linkunit}_extralibs
eval ${linkunit}_extralibs=\$\(\$ldflags_filter \$${linkunit}_extralibs\)
done
map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
for thread in $THREADS_LIST; do
@ -5313,7 +5391,6 @@ TARGET_PATH=$target_path
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
CFLAGS-avplay=$sdl_cflags
CFLAGS_HEADERS=$CFLAGS_HEADERS
ZLIB=$($ldflags_filter -lz)
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
COMPAT_OBJS=$compat_objs
@ -5335,12 +5412,9 @@ EOF
map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> avbuild/config.mak' $LIBRARY_LIST
print_program_extralibs(){
eval "program_extralibs=\$${1}_extralibs"
eval echo "EXTRALIBS-${1}=${program_extralibs}" >> avbuild/config.mak
}
map 'print_program_extralibs $v' $PROGRAM_LIST
for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
eval echo "EXTRALIBS-${entry}=\$${entry}_extralibs" >> avbuild/config.mak
done
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
@ -5422,13 +5496,13 @@ incdir=$incdir
source_path=${source_path}
LIBPREF=${LIBPREF}
LIBSUF=${LIBSUF}
extralibs_avutil="$LIBRT $LIBM "
extralibs_avcodec="$extralibs"
extralibs_avformat="$extralibs"
extralibs_avdevice="$extralibs"
extralibs_avfilter="$extralibs"
extralibs_avresample="$LIBM "
extralibs_swscale="$LIBM "
extralibs_avutil="$avutil_extralibs "
extralibs_avcodec="$avcodec_ extralibs"
extralibs_avformat="$avformat_ extralibs"
extralibs_avdevice="$avdevice_ extralibs"
extralibs_avfilter="$avfilter_ extralibs"
extralibs_avresample="$avresample_extralibs "
extralibs_swscale="$swscale_extralibs "
EOF
for lib in $LIBRARY_LIST; do