X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=25120337de3191b62371c5b9636dbf71dc83d1ec;hb=5109c381628d53e4fbfa8605e40290e86291e498;hp=2f2c2dc58cf74b32371e9a5bc4deb324d323891e;hpb=923586a58f37deedeb01f742e4804bc36736a6bc;p=ffmpeg diff --git a/configure b/configure index 2f2c2dc58cf..25120337de3 100755 --- a/configure +++ b/configure @@ -239,6 +239,7 @@ External library support: --enable-libiec61883 enable iec61883 via libiec61883 [no] --enable-libilbc enable iLBC de/encoding via libilbc [no] --enable-libjack enable JACK audio sound server [no] + --enable-libklvanc enable Kernel Labs VANC processing [no] --enable-libkvazaar enable HEVC encoding via libkvazaar [no] --enable-liblensfun enable lensfun lens correction [no] --enable-libmodplug enable ModPlug via libmodplug [no] @@ -280,6 +281,7 @@ External library support: --enable-libx264 enable H.264 encoding via x264 [no] --enable-libx265 enable HEVC encoding via x265 [no] --enable-libxavs enable AVS encoding via xavs [no] + --enable-libxavs2 enable AVS2 encoding via xavs2 [no] --enable-libxcb enable X11 grabbing using XCB [autodetect] --enable-libxcb-shm enable X11 grabbing shm communication [autodetect] --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect] @@ -676,13 +678,10 @@ disable_sanitized(){ do_enable_deep(){ for var; do enabled $var && continue - eval sel="\$${var}_select" - eval sgs="\$${var}_suggest" - pushvar var sgs - enable_deep $sel - popvar sgs - enable_deep_weak $sgs - popvar var + set -- $var + eval enable_deep \$${var}_select + var=$1 + eval enable_deep_weak \$${var}_suggest done } @@ -694,9 +693,9 @@ enable_deep(){ enable_deep_weak(){ for var; do disabled $var && continue - pushvar var + set -- $var do_enable_deep $var - popvar var + var=$1 enable_weak $var done } @@ -756,40 +755,49 @@ is_in(){ return 1 } +# The cfg loop is very hot (several thousands iterations), and in bash also +# potentialy quite slow. Try to abort the iterations early, preferably without +# calling functions. 70%+ of the time cfg is already done or without deps. check_deps(){ for cfg; do - enabled ${cfg}_checking && die "Circular dependency for $cfg." - disabled ${cfg}_checking && continue - enable ${cfg}_checking - - eval dep_all="\$${cfg}_deps" - eval dep_any="\$${cfg}_deps_any" - eval dep_con="\$${cfg}_conflict" - eval dep_sel="\$${cfg}_select" - eval dep_sgs="\$${cfg}_suggest" - eval dep_ifa="\$${cfg}_if" - eval dep_ifn="\$${cfg}_if_any" - - pushvar cfg 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; } - [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; } - enabled_all $dep_all || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not all dependencies are satisfied: $dep_all"; } - enabled_any $dep_any || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not any dependency is satisfied: $dep_any"; } - disabled_all $dep_con || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some conflicting dependencies are unsatisfied: $dep_con"; } - disabled_any $dep_sel && { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some selected dependency is unsatisfied: $dep_sel"; } - - enabled $cfg && enable_deep_weak $dep_sel $dep_sgs - - for dep in $dep_all $dep_any $dep_sel $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 + eval [ x\$${cfg}_checking = xdone ] && continue + eval [ x\$${cfg}_checking = xinprogress ] && die "Circular dependency for $cfg." + + eval " + dep_all=\$${cfg}_deps + dep_any=\$${cfg}_deps_any + dep_con=\$${cfg}_conflict + dep_sel=\$${cfg}_select + dep_sgs=\$${cfg}_suggest + dep_ifa=\$${cfg}_if + dep_ifn=\$${cfg}_if_any + " + + # most of the time here $cfg has no deps - avoid costly no-op work + if [ "$dep_all$dep_any$dep_con$dep_sel$dep_sgs$dep_ifa$dep_ifn" ]; then + eval ${cfg}_checking=inprogress + + set -- $cfg "$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 + cfg=$1; dep_all=$2; dep_any=$3; dep_con=$4; dep_sel=$5 dep_sgs=$6; dep_ifa=$7; dep_ifn=$8 + + [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; } + [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; } + enabled_all $dep_all || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not all dependencies are satisfied: $dep_all"; } + enabled_any $dep_any || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not any dependency is satisfied: $dep_any"; } + disabled_all $dep_con || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some conflicting dependencies are unsatisfied: $dep_con"; } + disabled_any $dep_sel && { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some selected dependency is unsatisfied: $dep_sel"; } + + enabled $cfg && enable_deep_weak $dep_sel $dep_sgs + + for dep in $dep_all $dep_any $dep_sel $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 + eval ${cfg}_checking=done done } @@ -893,14 +901,14 @@ add_cxxflags(){ append CXXFLAGS $($cflags_filter "$@") } -add_asflags(){ - append ASFLAGS $($asflags_filter "$@") -} - add_objcflags(){ append OBJCFLAGS $($objcflags_filter "$@") } +add_asflags(){ + append ASFLAGS $($asflags_filter "$@") +} + add_ldflags(){ append LDFLAGS $($ldflags_filter "$@") } @@ -913,14 +921,14 @@ add_ldsoflags(){ append LDSOFLAGS $($ldflags_filter "$@") } -add_stripflags(){ - append ASMSTRIPFLAGS "$@" -} - add_extralibs(){ prepend extralibs $($ldflags_filter "$@") } +add_stripflags(){ + append ASMSTRIPFLAGS "$@" +} + add_host_cppflags(){ append host_cppflags "$@" } @@ -949,12 +957,32 @@ test_stat(){ stat "$1" >> $logfile 2>&1 } +cc_e(){ + eval printf '%s\\n' $CC_E +} + cc_o(){ eval printf '%s\\n' $CC_O } -cc_e(){ - eval printf '%s\\n' $CC_E +as_o(){ + eval printf '%s\\n' $AS_O +} + +x86asm_o(){ + eval printf '%s\\n' $X86ASM_O +} + +ld_o(){ + eval printf '%s\\n' $LD_O +} + +hostcc_e(){ + eval printf '%s\\n' $HOSTCC_E +} + +hostcc_o(){ + eval printf '%s\\n' $HOSTCC_O } test_cc(){ @@ -985,10 +1013,6 @@ test_cpp(){ test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC } -as_o(){ - eval printf '%s\\n' $AS_O -} - test_as(){ log test_as "$@" cat > $TMPS @@ -996,10 +1020,6 @@ test_as(){ test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS } -x86asm_o(){ - eval printf '%s\\n' $X86ASM_O -} - test_x86asm(){ log test_x86asm "$@" echo "$1" > $TMPASM @@ -1071,10 +1091,6 @@ check_x86asm(){ test_x86asm "$@" && enable $name } -ld_o(){ - eval printf '%s\\n' $LD_O -} - test_ld(){ log test_ld "$@" type=$1 @@ -1185,8 +1201,8 @@ check_stripflags(){ test_stripflags "$@" && add_stripflags "$@" } -check_header(){ - log check_header "$@" +check_headers(){ + log check_headers "$@" headers=$1 shift disable_sanitized $headers @@ -1478,8 +1494,7 @@ require(){ require_cc(){ log require_cc "$@" name="$1" - shift - test_code cc "$@" || die "ERROR: $name failed" + check_cc "$@" || die "ERROR: $name failed" } require_cpp(){ @@ -1490,16 +1505,16 @@ require_cpp(){ check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found" } -require_header(){ - log require_header "$@" +require_headers(){ + log require_headers "$@" headers="$1" - check_header "$@" || die "ERROR: $headers not found" + check_headers "$@" || die "ERROR: $headers not found" } require_cpp_condition(){ log require_cpp_condition "$@" - condition="$2" - test_cpp_condition "$@" || die "ERROR: $condition not satisfied" + condition="$3" + check_cpp_condition "$@" || die "ERROR: $condition not satisfied" } require_pkg_config(){ @@ -1508,14 +1523,6 @@ require_pkg_config(){ check_pkg_config "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message" } -hostcc_e(){ - eval printf '%s\\n' $HOSTCC_E -} - -hostcc_o(){ - eval printf '%s\\n' $HOSTCC_O -} - test_host_cc(){ log test_host_cc "$@" cat > $TMPC @@ -1661,6 +1668,7 @@ EXTERNAL_LIBRARY_GPL_LIST=" libx264 libx265 libxavs + libxavs2 libxvid " @@ -1715,6 +1723,7 @@ EXTERNAL_LIBRARY_LIST=" libiec61883 libilbc libjack + libklvanc libkvazaar libmodplug libmp3lame @@ -1812,16 +1821,17 @@ FEATURE_LIST=" swscale_alpha " +# this list should be kept in linking order LIBRARY_LIST=" - avcodec avdevice avfilter + swscale + postproc avformat + avcodec + swresample avresample avutil - postproc - swresample - swscale " LICENSE_LIST=" @@ -2694,6 +2704,7 @@ msmpeg4v3_decoder_select="h263_decoder" msmpeg4v3_encoder_select="h263_encoder" mss2_decoder_select="mpegvideo qpeldsp vc1_decoder" mts2_decoder_select="mss34dsp" +mwsc_decoder_deps="zlib" mxpeg_decoder_select="mjpeg_decoder" nellymoser_decoder_select="mdct sinewin" nellymoser_encoder_select="audio_frame_queue mdct sinewin" @@ -2712,6 +2723,7 @@ qdm2_decoder_select="mdct rdft mpegaudiodsp" ra_144_decoder_select="audiodsp" ra_144_encoder_select="audio_frame_queue lpc audiodsp" ralf_decoder_select="golomb" +rasc_decoder_deps="zlib" rawvideo_decoder_select="bswapdsp" rscc_decoder_deps="zlib" rtjpeg_decoder_select="me_cmp" @@ -2730,6 +2742,7 @@ sonic_decoder_select="golomb rangecoder" sonic_encoder_select="golomb rangecoder" sonic_ls_encoder_select="golomb rangecoder" sp5x_decoder_select="mjpeg_decoder" +speedhq_decoder_select="mpegvideo" srgc_decoder_deps="zlib" svq1_decoder_select="hpeldsp" svq1_encoder_select="hpeldsp me_cmp mpegvideoenc" @@ -2764,6 +2777,7 @@ vp6f_decoder_select="vp6_decoder" vp7_decoder_select="h264pred videodsp vp8dsp" vp8_decoder_select="h264pred videodsp vp8dsp" vp9_decoder_select="videodsp vp9_parser vp9_superframe_split_bsf" +wcmv_decoder_deps="zlib" webp_decoder_select="vp8_decoder exif" wmalossless_decoder_select="llauddsp" wmapro_decoder_select="mdct sinewin wma_freqs" @@ -2915,6 +2929,7 @@ hwupload_cuda_filter_deps="ffnvcodec" scale_npp_filter_deps="ffnvcodec libnpp" scale_cuda_filter_deps="cuda_sdk" thumbnail_cuda_filter_deps="cuda_sdk" +transpose_npp_filter_deps="ffnvcodec libnpp" amf_deps_any="libdl LoadLibrary" nvenc_deps="ffnvcodec" @@ -3123,6 +3138,7 @@ libx264rgb_encoder_deps="libx264 x264_csp_bgr" libx264rgb_encoder_select="libx264_encoder" libx265_encoder_deps="libx265" libxavs_encoder_deps="libxavs" +libxavs2_encoder_deps="libxavs2" libxvid_encoder_deps="libxvid" libzvbi_teletext_decoder_deps="libzvbi" vapoursynth_demuxer_deps="vapoursynth" @@ -3225,6 +3241,7 @@ decklink_deps_any="libdl LoadLibrary" decklink_indev_deps="decklink threads" decklink_indev_extralibs="-lstdc++" decklink_outdev_deps="decklink threads" +decklink_outdev_suggest="libklvanc" decklink_outdev_extralibs="-lstdc++" libndi_newtek_indev_deps="libndi_newtek" libndi_newtek_indev_extralibs="-lndi" @@ -3279,18 +3296,8 @@ httpproxy_protocol_suggest="zlib" https_protocol_select="tls_protocol" https_protocol_suggest="zlib" icecast_protocol_select="http_protocol" -librtmp_protocol_deps="librtmp" -librtmpe_protocol_deps="librtmp" -librtmps_protocol_deps="librtmp" -librtmpt_protocol_deps="librtmp" -librtmpte_protocol_deps="librtmp" -libsmbclient_protocol_deps="libsmbclient gplv3" -libssh_protocol_deps="libssh" -libtls_conflict="openssl gnutls mbedtls" mmsh_protocol_select="http_protocol" mmst_protocol_select="network" -libsrt_protocol_deps="libsrt" -libsrt_protocol_select="network" rtmp_protocol_conflict="librtmp_protocol" rtmp_protocol_select="tcp_protocol" rtmp_protocol_suggest="zlib" @@ -3319,6 +3326,18 @@ udplite_protocol_select="network" unix_protocol_deps="sys_un_h" unix_protocol_select="network" +# external library protocols +librtmp_protocol_deps="librtmp" +librtmpe_protocol_deps="librtmp" +librtmps_protocol_deps="librtmp" +librtmpt_protocol_deps="librtmp" +librtmpte_protocol_deps="librtmp" +libsmbclient_protocol_deps="libsmbclient gplv3" +libsrt_protocol_deps="libsrt" +libsrt_protocol_select="network" +libssh_protocol_deps="libssh" +libtls_conflict="openssl gnutls mbedtls" + # filters afftfilt_filter_deps="avcodec" afftfilt_filter_select="fft" @@ -3332,6 +3351,8 @@ atempo_filter_select="rdft" avgblur_opencl_filter_deps="opencl" azmq_filter_deps="libzmq" blackframe_filter_deps="gpl" +bm3d_filter_deps="avcodec" +bm3d_filter_select="dct" boxblur_filter_deps="gpl" boxblur_opencl_filter_deps="opencl gpl" bs2b_filter_deps="libbs2b" @@ -3483,7 +3504,7 @@ vaapi_transcode_example_deps="avcodec avformat avutil h264_vaapi_encoder" cpu_init_extralibs="pthreads_extralibs" cws2fws_extralibs="zlib_extralibs" -# libraries, in linking order +# libraries, in any order avcodec_deps="avutil" avcodec_suggest="libm" avcodec_select="null_bsf" @@ -4811,15 +4832,24 @@ elif enabled mips; then disable mipsfpu disable mipsdsp disable mipsdspr2 + # When gcc version less than 5.3.0, add -fno-expensive-optimizations flag. + if [ $cc == gcc ]; then + gcc_version=$(gcc -dumpversion) + if [ "$(echo "$gcc_version 5.3.0" | tr " " "\n" | sort -rV | head -n 1)" == "$gcc_version" ]; then + expensive_optimization_flag="" + else + expensive_optimization_flag="-fno-expensive-optimizations" + fi + fi case $cpu in loongson3*) - cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations" + cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag" ;; loongson2e) - cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations" + cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag" ;; loongson2f) - cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations" + cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag" ;; esac ;; @@ -5135,7 +5165,7 @@ case $target_os in enabled x86_64 && objformat="macho64" || objformat="macho32" enabled_any pic shared x86_64 || { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; } - check_header dispatch/dispatch.h && + check_headers dispatch/dispatch.h && add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore' if test -n "$sysroot"; then is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot @@ -5620,7 +5650,7 @@ elif enabled mips; then enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float' enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64' - enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_header msa.h || disable msa + enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_headers msa.h || disable msa enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp' enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2' @@ -5765,9 +5795,9 @@ if ! disabled network; then check_type "sys/types.h sys/socket.h" socklen_t # Prefer arpa/inet.h over winsock2 - if check_header arpa/inet.h ; then + if check_headers arpa/inet.h ; then check_func closesocket - elif check_header winsock2.h ; then + elif check_headers winsock2.h ; then check_func_headers winsock2.h closesocket -lws2 && network_extralibs="-lws2" || { check_func_headers winsock2.h closesocket -lws2_32 && @@ -5855,29 +5885,29 @@ check_func_headers glob.h glob enabled xlib && check_lib xlib "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext -check_header direct.h -check_header dirent.h -check_header dxgidebug.h -check_header dxva.h -check_header dxva2api.h -D_WIN32_WINNT=0x0600 -check_header io.h -check_header linux/perf_event.h -check_header libcrystalhd/libcrystalhd_if.h -check_header malloc.h -check_header net/udplite.h -check_header poll.h -check_header sys/param.h -check_header sys/resource.h -check_header sys/select.h -check_header sys/time.h -check_header sys/un.h -check_header termios.h -check_header unistd.h -check_header valgrind/valgrind.h +check_headers direct.h +check_headers dirent.h +check_headers dxgidebug.h +check_headers dxva.h +check_headers dxva2api.h -D_WIN32_WINNT=0x0600 +check_headers io.h +check_headers linux/perf_event.h +check_headers libcrystalhd/libcrystalhd_if.h +check_headers malloc.h +check_headers net/udplite.h +check_headers poll.h +check_headers sys/param.h +check_headers sys/resource.h +check_headers sys/select.h +check_headers sys/time.h +check_headers sys/un.h +check_headers termios.h +check_headers unistd.h +check_headers valgrind/valgrind.h check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox -check_header windows.h -check_header X11/extensions/XvMClib.h -check_header asm/types.h +check_headers windows.h +check_headers X11/extensions/XvMClib.h +check_headers asm/types.h # it seems there are versions of clang in some distros that try to use the # gcc headers, which explodes for stdatomic @@ -6012,14 +6042,14 @@ done # these are off by default, so fail if requested and not available enabled cuda_sdk && require cuda_sdk cuda.h cuCtxCreate -lcuda enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint -enabled decklink && { require_header DeckLinkAPI.h && +enabled decklink && { require_headers DeckLinkAPI.h && { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a060100" || die "ERROR: Decklink API version must be >= 10.6.1."; } } -enabled libndi_newtek && require_header Processing.NDI.Lib.h -enabled frei0r && require_header frei0r.h +enabled libndi_newtek && require_headers Processing.NDI.Lib.h +enabled frei0r && require_headers frei0r.h enabled gmp && require gmp gmp.h mpz_export -lgmp enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init -enabled jni && { [ $target_os = "android" ] && check_header jni.h && enabled pthreads || die "ERROR: jni not found"; } -enabled ladspa && require_header ladspa.h +enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; } +enabled ladspa && require_headers ladspa.h enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 @@ -6049,6 +6079,7 @@ enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break; done || die "ERROR: libgsm not found"; } enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs +enabled libklvanc && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get enabled liblensfun && require_pkg_config liblensfun lensfun lensfun.h lf_db_new # While it may appear that require is being used as a pkg-config @@ -6063,12 +6094,12 @@ enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_load || require libmysofa mysofa.h mysofa_load -lmysofa $zlib_extralibs; } -enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc || - check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc || +enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei || + check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc -lnppidei || die "ERROR: libnpp not found"; } enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -enabled libopencv && { check_header opencv2/core/core_c.h && +enabled libopencv && { check_headers opencv2/core/core_c.h && { check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader || require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } || require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; } @@ -6095,7 +6126,7 @@ enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnap enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init -enabled libsrt && require_pkg_config libsrt "srt >= 1.2.0" srt/srt.h srt_socket +enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg @@ -6141,11 +6172,12 @@ enabled libwebp && { enabled libx264 && { check_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode || { require libx264 "stdint.h x264.h" x264_encoder_encode "-lx264 $pthreads_extralibs $libm_extralibs" && warn "using libx264 without pkg-config"; } } && - require_cpp_condition x264.h "X264_BUILD >= 118" && + require_cpp_condition libx264 x264.h "X264_BUILD >= 118" && check_cpp_condition libx262 x264.h "X264_MPEG2" enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get && - require_cpp_condition x265.h "X265_BUILD >= 68" + require_cpp_condition libx265 x265.h "X265_BUILD >= 68" enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs" +enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.2.77" "stdint.h xavs2.h" xavs2_api_get enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version enabled libzmq && require_pkg_config libzmq libzmq zmq.h zmq_ctx_new @@ -6183,9 +6215,9 @@ enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" || die "ERROR: opengl not found." } -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 ; } || +enabled omx && require_headers OMX_Core.h +enabled omx_rpi && { check_headers OMX_Core.h || + { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_headers 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 || @@ -6263,8 +6295,8 @@ pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout # check V4L2 codecs available in the API -check_header linux/fb.h -check_header linux/videodev2.h +check_headers linux/fb.h +check_headers linux/videodev2.h test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;" check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;" @@ -6277,7 +6309,7 @@ check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;" check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;" check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;" -check_header sys/videoio.h +check_headers sys/videoio.h test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete check_lib user32 "windows.h winuser.h" GetShellWindow -luser32 @@ -6289,10 +6321,10 @@ check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" check_type "dshow.h" IBaseFilter # check for ioctl_meteor.h, ioctl_bt848.h and alternatives -check_header "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" || - check_header "machine/ioctl_meteor.h machine/ioctl_bt848.h" || - check_header "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" || - check_header "dev/ic/bt8xx.h" +check_headers "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" || + check_headers "machine/ioctl_meteor.h machine/ioctl_bt848.h" || + check_headers "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" || + check_headers "dev/ic/bt8xx.h" if check_struct sys/soundcard.h audio_buf_info bytes; then enable_sanitized sys/soundcard.h @@ -6829,12 +6861,13 @@ done enabled zlib && add_cppflags -DZLIB_CONST -# conditional library dependencies, in linking order +# conditional library dependencies, in any order enabled afftfilt_filter && prepend avfilter_deps "avcodec" enabled afir_filter && prepend avfilter_deps "avcodec" enabled amovie_filter && prepend avfilter_deps "avformat avcodec" enabled aresample_filter && prepend avfilter_deps "swresample" enabled atempo_filter && prepend avfilter_deps "avcodec" +enabled bm3d_filter && prepend avfilter_deps "avcodec" enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec" enabled convolve_filter && prepend avfilter_deps "avcodec" enabled deconvolve_filter && prepend avfilter_deps "avcodec" @@ -6872,11 +6905,36 @@ enabled sdl2_outdev && add_cflags $(filter_out '-Dmain=SDL_main' $sdl2_cflag enabled opus_decoder && prepend avcodec_deps "swresample" +# reorder the items at var $1 to align with the items order at var $2 . +# die if an item at $1 is not at $2 . +reorder_by(){ + eval rb_in=\$$1 + eval rb_ordered=\$$2 + + for rb in $rb_in; do + is_in $rb $rb_ordered || die "$rb at \$$1 is not at \$$2" + done + + rb_out= + for rb in $rb_ordered; do + is_in $rb $rb_in && rb_out="$rb_out$rb " + done + eval $1=\$rb_out +} + +# deps-expand fflib $1: N x {append all expanded deps; unique} +# within a set of N items, N expansions are enough to expose a cycle. expand_deps(){ - lib_deps=${1}_deps - eval "deps=\$$lib_deps" - append $lib_deps $(map 'eval echo \$${v}_deps' $deps) - unique $lib_deps + unique ${1}_deps # required for the early break test. + for dummy in $LIBRARY_LIST; do # N iteratios + eval deps=\$${1}_deps + append ${1}_deps $(map 'eval echo \$${v}_deps' $deps) + unique ${1}_deps + eval '[ ${#deps} = ${#'${1}_deps'} ]' && break # doesn't expand anymore + done + + eval is_in $1 \$${1}_deps && die "Dependency cycle at ${1}_deps" + reorder_by ${1}_deps LIBRARY_LIST # linking order is expected later } #we have to remove gpl from the deps here as some code assumes all lib deps are libs