#!/bin/sh # # MythTV configure script, based on the FFmpeg configure script # # Copyright (c) 2000-2002 Fabrice Bellard # Copyright (c) 2005-2008 Diego Biurrun # Copyright (c) 2005-2008 Mans Rullgard # # Prevent locale nonsense from breaking basic text processing. LC_ALL=C export LC_ALL # make sure we are running under a compatible shell # try to make this part work with most shells try_exec(){ echo "Trying shell $1" type "$1" > /dev/null 2>&1 && exec "$@" } unset foo (: ${foo%%bar}) 2> /dev/null E1="$?" (: ${foo?}) 2> /dev/null E2="$?" if test "$E1" != 0 || test "$E2" = 0; then echo "Broken shell detected. Trying alternatives." export FF_CONF_EXEC if test "0$FF_CONF_EXEC" -lt 1; then FF_CONF_EXEC=1 try_exec bash "$0" "$@" fi if test "0$FF_CONF_EXEC" -lt 2; then FF_CONF_EXEC=2 try_exec ksh "$0" "$@" fi if test "0$FF_CONF_EXEC" -lt 3; then FF_CONF_EXEC=3 try_exec /usr/xpg4/bin/sh "$0" "$@" fi echo "No compatible shell script interpreter found." echo "This configure script requires a POSIX-compatible shell" echo "such as bash or ksh." echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH." echo "Instead, install a working POSIX-compatible shell." echo "Disabling this configure test will create a broken MythTV." if test "$BASH_VERSION" = '2.04.0(1)-release'; then echo "This bash version ($BASH_VERSION) is broken on your platform." echo "Upgrade to a later version if available." fi exit 1 fi test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH show_help(){ cat </dev/null 2>&1; then ncolors=$(tput colors) if test -n "$ncolors" && test $ncolors -ge 8; then bold_color=$(tput bold) warn_color=$(tput setaf 3) error_color=$(tput setaf 1) reset_color=$(tput sgr0) fi # 72 used instead of 80 since that's the default of pr ncols=$(tput cols) fi : ${ncols:=72} log(){ echo "$@" >> $logfile } log_file(){ log BEGIN $1 pr -n -t $1 >> $logfile log END $1 } warn(){ log "WARNING: $*" WARNINGS="${WARNINGS}WARNING: $*\n" } die(){ log "$@" echo "$error_color$bold_color$@$reset_color" cat <>file; } else if (file ~ /\\.asm\$/) { printf(\"%%define %s %d\\n\", c, v) >>file; } else if (file ~ /\\.mak\$/) { n = -v ? \"\" : \"!\"; printf(\"%s%s=yes\\n\", n, c) >>file; } else if (file ~ /\\.texi\$/) { pre = -v ? \"\" : \"@c \"; yesno = \$2; c2 = tolower(c); gsub(/_/, \"-\", c2); printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file; } } }" } print_enabled(){ suf=$1 shift for v; do enabled $v && printf "%s\n" ${v%$suf}; done } append(){ var=$1 shift eval "$var=\"\$$var $*\"" } prepend(){ var=$1 shift eval "$var=\"$* \$$var\"" } unique(){ var=$1 uniq_list="" for tok in $(eval echo \$$var); do uniq_list="$(filter_out $tok $uniq_list) $tok" done eval "$var=\"${uniq_list}\"" } add_cppflags(){ append CPPFLAGS "$@" } add_cflags(){ append CFLAGS $($cflags_filter "$@") } add_cxxflags(){ append ECXXFLAGS "$@" } add_asflags(){ append ASFLAGS $($asflags_filter "$@") } add_objcflags(){ append OBJCFLAGS $($objcflags_filter "$@") } add_ldflags(){ append LDFLAGS $($ldflags_filter "$@") } add_ldexeflags(){ append LDEXEFLAGS $($ldflags_filter "$@") } add_ldlibflags(){ append LDLIBFLAGS $($ldflags_filter "$@") } add_stripflags(){ append ASMSTRIPFLAGS "$@" } add_extralibs(){ prepend extralibs $($ldflags_filter "$@") } add_host_cppflags(){ append host_cppflags "$@" } add_host_cflags(){ append host_cflags $($host_cflags_filter "$@") } add_host_ldflags(){ append host_ldflags $($host_ldflags_filter "$@") } add_compat(){ append compat_objs $1 shift map 'add_cppflags -D$v' "$@" } check_cmd(){ log "$@" "$@" >> $logfile 2>&1 } check_stat(){ log check_stat "$@" stat "$1" >> $logfile 2>&1 } cc_o(){ eval printf '%s\\n' $CC_O } cc_e(){ eval printf '%s\\n' $CC_E } check_cc(){ log check_cc "$@" cat > $TMPC log_file $TMPC check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC } check_cxx(){ log check_cxx "$@" cat > $TMPCPP log_file $TMPCPP check_cmd $cxx $CPPFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP } check_ecxx(){ log check_cxx "$@" cat > $TMPCPP log_file $TMPCPP check_cmd $cxx $CPPFLAGS $CXXFLAGS $ECXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP } check_objcc(){ log check_objcc "$@" cat > $TMPM log_file $TMPM check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM } check_cpp(){ log check_cpp "$@" cat > $TMPC log_file $TMPC check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC } as_o(){ eval printf '%s\\n' $AS_O } check_as(){ log check_as "$@" cat > $TMPS log_file $TMPS check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS } check_inline_asm(){ log check_inline_asm "$@" name="$1" code="$2" shift 2 disable $name check_cc "$@" < $TMPS log_file $TMPS shift 1 check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS } ld_o(){ eval printf '%s\\n' $LD_O } check_ld(){ log check_ld "$@" type=$1 shift 1 flags=$(filter_out '-l*|*.so' $@) libs=$(filter '-l*|*.so' $@) check_$type $($cflags_filter $flags) || return flags=$($ldflags_filter $flags) libs=$($ldflags_filter $libs) 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 headers=$2 code=$3 shift 3 { for hdr in $headers; do print_include $hdr done echo "int main(void) { $code; return 0; }" } | check_$check "$@" } check_cppflags(){ log check_cppflags "$@" check_cc "$@" < int x; EOF } check_header_objcc(){ log check_header_objcc "$@" rm -f -- "$TMPO" header=$1 shift disable_safe $header { echo "#include <$header>" echo "int main(void) { return 0; }" } | check_objcc && check_stat "$TMPO" && enable_safe $headers } check_func(){ log check_func "$@" func=$1 shift disable $func check_ld "cc" "$@" < #include float foo(complex float f, complex float g) { return $func($args); } int main(void){ return (int) foo; } EOF } check_mathfunc(){ log check_mathfunc "$@" func=$1 narg=$2 shift 2 test $narg = 2 && args="f, g" || args="f" disable $func check_ld "cc" "$@" < float foo(float f, float g) { return $func($args); } int main(void){ return (int) foo; } EOF } check_func_headers(){ log check_func_headers "$@" headers=$1 funcs=$2 shift 2 { for hdr in $headers; do print_include $hdr done for func in $funcs; do echo "long check_$func(void) { return (long) $func; }" done echo "int main(void) { return 0; }" } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers } check_class_headers_cpp(){ log check_class_headers_cpp "$@" headers=$1 classes=$2 shift 2 { for hdr in $headers; do echo "#include <$hdr>" done echo "int main(void) { " i=1 for class in $classes; do echo "$class obj$i;" i=$(expr $i + 1) done echo "return 0; }" } | check_ld "cxx" "$@" && enable_safe $headers } check_cpp_condition(){ log check_cpp_condition "$@" header=$1 condition=$2 shift 2 check_cpp "$@" < #if !($condition) #error "unsatisfied condition: $condition" #endif EOF } check_lib(){ log check_lib "$@" header="$1" func="$2" shift 2 check_header $header && check_func $func "$@" && add_extralibs "$@" } check_lib2(){ log check_lib2 "$@" headers="$1" funcs="$2" shift 2 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@" } check_lib_cpp(){ log check_lib_cpp "$@" headers="$1" classes="$2" shift 2 check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@" } check_pkg_config(){ log check_pkg_config "$@" pkgandversion="$1" pkg="${1%% *}" headers="$2" funcs="$3" shift 3 check_cmd $pkg_config --exists --print-errors $pkgandversion || return pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg) pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg) check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" && set_safe "${pkg}_cflags" $pkg_cflags && set_safe "${pkg}_libs" $pkg_libs } check_exec(){ check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; } } check_exec_crash(){ code=$(cat) # exit() is not async signal safe. _Exit (C99) and _exit (POSIX) # are safe but may not be available everywhere. Thus we use # raise(SIGTERM) instead. The check is run in a subshell so we # can redirect the "Terminated" message from the shell. SIGBUS # is not defined by standard C so it is used conditionally. (check_exec "$@") >> $logfile 2>&1 < static void sighandler(int sig){ raise(SIGTERM); } int foo(void){ $code } int (*func_ptr)(void) = foo; int main(void){ signal(SIGILL, sighandler); signal(SIGFPE, sighandler); signal(SIGSEGV, sighandler); #ifdef SIGBUS signal(SIGBUS, sighandler); #endif return func_ptr(); } EOF } check_type(){ log check_type "$@" headers=$1 type=$2 shift 2 disable_safe "$type" check_code cc "$headers" "$type v" "$@" && enable_safe "$type" } check_struct(){ log check_struct "$@" headers=$1 struct=$2 member=$3 shift 3 disable_safe "${struct}_${member}" check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" && enable_safe "${struct}_${member}" } check_builtin(){ log check_builtin "$@" name=$1 headers=$2 builtin=$3 shift 3 disable "$name" check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name" } check_compile_assert(){ log check_compile_assert "$@" name=$1 headers=$2 condition=$3 shift 3 disable "$name" check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name" } require(){ name="$1" header="$2" func="$3" shift 3 check_lib $header $func "$@" || die "ERROR: $name not found" } require2(){ name="$1" headers="$2" func="$3" shift 3 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" } require_cpp(){ name="$1" headers="$2" classes="$3" shift 3 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found" } use_pkg_config(){ pkg="$1" check_pkg_config "$@" || return 1 add_cflags $(get_safe "${pkg}_cflags") add_extralibs $(get_safe "${pkg}_libs") } require_pkg_config(){ use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message" } require_libfreetype(){ log require_libfreetype "$@" pkg="freetype2" check_cmd $pkg_config --exists --print-errors $pkg \ || die "ERROR: $pkg not found" pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg) pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg) { echo "#include " echo "#include FT_FREETYPE_H" echo "long check_func(void) { return (long) FT_Init_FreeType; }" echo "int main(void) { return 0; }" } | check_ld "cc" $pkg_cflags $pkg_libs \ && set_safe "${pkg}_cflags" $pkg_cflags \ && set_safe "${pkg}_libs" $pkg_libs \ || die "ERROR: $pkg not found" add_cflags $(get_safe "${pkg}_cflags") add_extralibs $(get_safe "${pkg}_libs") } hostcc_e(){ eval printf '%s\\n' $HOSTCC_E } hostcc_o(){ eval printf '%s\\n' $HOSTCC_O } check_host_cc(){ log check_host_cc "$@" cat > $TMPC log_file $TMPC 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 $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC } check_host_cppflags(){ log check_host_cppflags "$@" check_host_cc "$@" < #if !($condition) #error "unsatisfied condition: $condition" #endif EOF } cp_if_changed(){ cmp -s "$1" "$2" && echo "$2 is unchanged" && return mkdir -p "$(dirname $2)" $cp_f "$1" "$2" } # MythTV Custom Tests disable_bindings_python(){ echo "WARNING: disabling Python bindings; missing $1" disable bindings_python } disable_bindings_perl(){ echo "WARNING: disabling Perl bindings; missing $1" disable bindings_perl } disable_bindings_php(){ echo "WARNING: disabling PHP bindings; missing $1" disable bindings_php } append_uniq(){ log append_uniq "$@" var=$1 shift for value; do eval tmpvar='$'$var echo "$tmpvar" | grep -q ".$value" || append $var $value done } add_cxxppflags(){ append CXXPPFLAGS $($cxxppflags_filter "$@") } is_python3() { log is_python3 check_cmd $python << EOF import sys if sys.version_info > (3,0): sys.exit(0) else: sys.exit(1) EOF } check_python(){ log check_python check_cmd $python <> $logfile 2>&1; } } check_foo_config(){ cfg=$1 pkg=$2 header=$3 func=$4 shift 4 disable $cfg check_cmd ${pkg}-config --version err=$? if test "$err" = 0; then backup_cflags=$CFLAGS temp_extralibs=$(${pkg}-config --libs) add_cflags $(${pkg}-config --cflags) check_lib "$@" $header $func $temp_extralibs && enable $cfg CFLAGS=$backup_cflags fi return $err } non_standard_header(){ test x"$1" != "x/usr/include" } x86_mmx_cpus="pentium-mmx,pentium2,pentium3,pentium3m,pentium-m" x86_mmx_cpus="$x86_mmx_cpus,pentium4,pentium4m,prescott" x86_mmx_cpus="$x86_mmx_cpus,athlon,athlon-xp,athlon-tbird,athlon-4,athlon-mp," x86_mmx_cpus="$x86_mmx_cpus,c3,c3-2,k6,k6-2,k6-3" x86_cpus="i386,i486,i586,i686,pentium,pentiumpro,${x86_mmx_cpus}" x86_64_cpus="x86-64,athlon64,k8,opteron,athlon64-sse3,k8-sse3,opteron-sse3" x86_64_cpus="$x86_64_cpus,barcelona,athlon-fx,nocona,core2" is_x86_cpu() { expr ",${x86_cpus}," : ".*,$1," > /dev/null } is_x86_64_cpu() { expr ",${x86_64_cpus}," : ".*,$1," > /dev/null } is_x86_mmx() { expr ",${x86_mmx_cpus}," : ".*,$1," > /dev/null || is_x86_64_cpu "$1" } # CONFIG_LIST contains configurable options, while HAVE_LIST is for # system-dependent things. AVCODEC_COMPONENTS=" bsfs decoders encoders hwaccels parsers " AVDEVICE_COMPONENTS=" indevs outdevs " AVFILTER_COMPONENTS=" filters " AVFORMAT_COMPONENTS=" demuxers muxers protocols " AVRESAMPLE_COMPONENTS="" AVUTIL_COMPONENTS="" COMPONENT_LIST=" $AVCODEC_COMPONENTS $AVDEVICE_COMPONENTS $AVFILTER_COMPONENTS $AVFORMAT_COMPONENTS $AVRESAMPLE_COMPONENTS $AVUTIL_COMPONENTS " EXAMPLE_LIST=" avio_reading_example avio_dir_cmd_example decoding_encoding_example demuxing_decoding_example extract_mvs_example filter_audio_example filtering_audio_example filtering_video_example metadata_example muxing_example qsvdec_example remuxing_example resampling_audio_example scaling_video_example transcode_aac_example transcoding_example " EXTERNAL_LIBRARY_LIST=" avisynth bzlib chromaprint crystalhd decklink frei0r gcrypt gmp gnutls iconv ladspa libass libbluray libbs2b libcaca libcdio libcelt libdc1394 libdcadec libfaac libfdk_aac libflite libfontconfig libfreetype libfribidi libgme libgsm libiec61883 libilbc libkvazaar libmfx libmodplug libmp3lame libnut libopencore_amrnb libopencore_amrwb libopencv libopenh264 libopenjpeg libopus libpulse librtmp librubberband libschroedinger libshine libsmbclient libsnappy libsoxr libspeex libssh libtesseract libtheora libtwolame libutvideo libv4l2 libvidstab libvo_amrwbenc libvorbis libvpx libwavpack libwebp libx264 libx265 libxavs libxcb libxcb_shm libxcb_shape libxcb_xfixes libxvid libzimg libzmq libzvbi lzma mmal netcdf nvenc openal opencl opengl openssl schannel sdl securetransport x11grab xlib zlib " DOCUMENT_LIST=" doc htmlpages manpages podpages txtpages " FEATURE_LIST=" ftrapv gray hardcoded_tables runtime_cpudetect safe_bitstream_reader shared small static swscale_alpha " HWACCEL_LIST=" d3d11va dxva2 vaapi vda vdpau videotoolbox xvmc openmax " LIBRARY_LIST=" avcodec avdevice avfilter avformat avresample avutil postproc swresample swscale " LICENSE_LIST=" gpl nonfree version3 " PROGRAM_LIST=" ffplay ffprobe ffserver ffmpeg " SUBSYSTEM_LIST=" dct dwt error_resilience faan fast_unaligned fft lsp lzo mdct pixelutils network rdft " CONFIG_LIST=" $COMPONENT_LIST $DOCUMENT_LIST $EXAMPLE_LIST $EXTERNAL_LIBRARY_LIST $FEATURE_LIST $HWACCEL_LIST $LICENSE_LIST $LIBRARY_LIST $PROGRAM_LIST $SUBSYSTEM_LIST fontconfig incompatible_libav_abi memalign_hack memory_poisoning neon_clobber_test pic pod2man raise_major thumb valgrind_backtrace xmm_clobber_test " THREADS_LIST=" pthreads os2threads w32threads " ATOMICS_LIST=" atomics_gcc atomics_suncc atomics_win32 " ARCH_LIST=" aarch64 alpha arm avr32 avr32_ap avr32_uc bfin ia64 m68k mips mips64 parisc ppc ppc64 s390 sh4 sparc sparc64 tilegx tilepro tomi x86 x86_32 x86_64 " ARCH_EXT_LIST_ARM=" armv5te armv6 armv6t2 armv8 neon vfp vfpv3 setend " ARCH_EXT_LIST_MIPS=" mipsfpu mips32r2 mips64r2 mips32r6 mips64r6 mipsdsp mipsdspr2 msa " ARCH_EXT_LIST_LOONGSON=" loongson2 loongson3 mmi " ARCH_EXT_LIST_X86_SIMD=" aesni amd3dnow amd3dnowext avx avx2 fma3 fma4 mmx mmxext sse sse2 sse3 sse4 sse42 ssse3 xop " ARCH_EXT_LIST_PPC=" altivec dcbzl ldbrx power8 ppc4xx vsx " ARCH_EXT_LIST_X86=" $ARCH_EXT_LIST_X86_SIMD cpunop i686 " ARCH_EXT_LIST=" $ARCH_EXT_LIST_ARM $ARCH_EXT_LIST_PPC $ARCH_EXT_LIST_X86 $ARCH_EXT_LIST_MIPS $ARCH_EXT_LIST_LOONGSON " ARCH_FEATURES=" aligned_stack fast_64bit fast_clz fast_cmov local_aligned_8 local_aligned_16 local_aligned_32 simd_align_16 " BUILTIN_LIST=" atomic_cas_ptr atomic_compare_exchange machine_rw_barrier MemoryBarrier mm_empty rdtsc sarestart sync_val_compare_and_swap " HAVE_LIST_CMDLINE=" inline_asm symver yasm " HAVE_LIST_PUB=" bigendian fast_unaligned incompatible_libav_abi " HEADERS_LIST=" alsa_asoundlib_h altivec_h arpa_inet_h asm_types_h cdio_paranoia_h cdio_paranoia_paranoia_h dev_bktr_ioctl_bt848_h dev_bktr_ioctl_meteor_h dev_ic_bt8xx_h dev_video_bktr_ioctl_bt848_h dev_video_meteor_ioctl_meteor_h direct_h dirent_h dlfcn_h d3d11_h dxva_h ES2_gl_h EGL_egl_h GLES2_gl2_h fcntl_h gsm_h io_h mach_mach_time_h machine_ioctl_bt848_h machine_ioctl_meteor_h malloc_h opencv2_core_core_c_h openjpeg_2_1_openjpeg_h openjpeg_2_0_openjpeg_h openjpeg_1_5_openjpeg_h OpenGL_gl3_h poll_h sndio_h soundcard_h sys_mman_h sys_param_h sys_resource_h sys_select_h sys_soundcard_h sys_time_h sys_un_h sys_videoio_h termios_h udplite_h unistd_h valgrind_valgrind_h windows_h winsock2_h " INTRINSICS_LIST=" intrinsics_neon " COMPLEX_FUNCS=" cabs cexp " MATH_FUNCS=" atanf atan2f cbrt cbrtf copysign cosf erf exp2 exp2f expf hypot isfinite isinf isnan ldexpf llrint llrintf log2 log2f log10f lrint lrintf powf rint round roundf sinf trunc truncf " SYSTEM_FUNCS=" access aligned_malloc arc4random clock_gettime closesocket CommandLineToArgvW CoTaskMemFree CryptGenRandom dlopen fcntl flt_lim fork getaddrinfo gethrtime getopt GetProcessAffinityMask GetProcessMemoryInfo GetProcessTimes getrusage GetSystemTimeAsFileTime gettimeofday glob glXGetProcAddress gmtime_r inet_aton isatty jack_port_get_latency_range kbhit localtime_r lstat lzo1x_999_compress mach_absolute_time MapViewOfFile memalign mkstemp mmap mprotect nanosleep PeekNamedPipe posix_memalign pthread_cancel sched_getaffinity SetConsoleTextAttribute SetConsoleCtrlHandler setmode setrlimit Sleep strerror_r sysconf sysctl usleep UTGetOSTypeFromString VirtualAlloc wglGetProcAddress eglGetProcAddress " TOOLCHAIN_FEATURES=" as_dn_directive as_func as_object_arch asm_mod_q attribute_may_alias attribute_packed ebp_available ebx_available gnu_as gnu_windres ibm_asm inline_asm_direct_symbol_refs inline_asm_labels inline_asm_nonlocal_labels pragma_deprecated rsync_contimeout symver_asm_label symver_gnu_asm vfp_args xform_asm xmm_clobbers " TYPES_LIST=" CONDITION_VARIABLE_Ptr socklen_t struct_addrinfo struct_group_source_req struct_ip_mreq_source struct_ipv6_mreq struct_pollfd struct_rusage_ru_maxrss struct_sctp_event_subscribe struct_sockaddr_in6 struct_sockaddr_sa_len struct_sockaddr_storage struct_stat_st_mtim_tv_nsec struct_v4l2_frmivalenum_discrete " HAVE_LIST=" $ARCH_EXT_LIST $(add_suffix _external $ARCH_EXT_LIST) $(add_suffix _inline $ARCH_EXT_LIST) $ARCH_FEATURES $ATOMICS_LIST $BUILTIN_LIST $COMPLEX_FUNCS $HAVE_LIST_CMDLINE $HAVE_LIST_PUB $HEADERS_LIST $INTRINSICS_LIST $MATH_FUNCS $SYSTEM_FUNCS $THREADS_LIST $TOOLCHAIN_FEATURES $TYPES_LIST atomics_native dos_paths dxva2_lib dxva2api_cobj libc_msvcrt libdc1394_1 libdc1394_2 makeinfo makeinfo_html perl pod2man sdl section_data_rel_ro texi2html threads vaapi_x11 vdpau_x11 winrt xlib " # options emitted with CONFIG_ prefix but not available on the command line CONFIG_EXTRA=" aandcttables ac3dsp audio_frame_queue audiodsp blockdsp bswapdsp cabac dirac_parse dvprofile exif faandct faanidct fdctdsp flacdsp fmtconvert frame_thread_encoder g722dsp golomb gplv3 h263dsp h264chroma h264dsp h264pred h264qpel hpeldsp huffman huffyuvdsp huffyuvencdsp idctdsp iirfilter imdct15 intrax8 ividsp jpegtables lgplv3 libx262 llauddsp llviddsp lpc lzf me_cmp mpeg_er mpegaudio mpegaudiodsp mpegvideo mpegvideoenc mss34dsp pixblockdsp qpeldsp qsv qsvdec qsvenc rangecoder riffdec riffenc rtpdec rtpenc_chain rv34dsp sinewin snappy startcode texturedsp texturedspenc tpeldsp videodsp vp3dsp vp56dsp vp8dsp wma_freqs wmv2dsp " MYTHTV_CONFIG_LIST=' backend bdjava bindings_perl bindings_python bindings_php crystalhd cygwin darwin disable_mmx_for_debugging dvb firewire frontend hdhomerun vbox ceton hdpvr ivtv asi joystick_menu libcec libcrypto libdns_sd libfftw3 libmpeg2external libxml2 lirc mheg opengl opengl_video opengl_themepainter qtwebkit qtscript qtdbus sdl taglib v4l2 v4l1 valgrind x11 xrandr xv profiletype debugtype mythlogserver systemd_notify ' MYTHTV_HAVE_LIST=' byteswap_h cpu_clips_negative cpu_clips_positive fe_can_2g_modulation ftime getifaddrs gettimeofday openmax_bellagio openmax_broadcom posix_fadvise libudev libuuid stdint_h sync_file_range sys_endian_h ' MYTHTV_LIST=' audio_pulse audio_pulseoutput audio_alsa audio_jack audio_oss ffmpeg_pthreads mac_bundle proc_opt silent_cc symbol_visibility ' USING_LIST=' appleremote bdjava bindings_perl bindings_python bindings_php darwin_da fontconfig freetype2 mythtranscode dxva2 opengl opengles vaapi vdpau openmax ' CMDLINE_SELECT=" $ARCH_EXT_LIST $CONFIG_LIST $HAVE_LIST_CMDLINE $THREADS_LIST asm cross_compile debug extra_warnings logging lto optimizations rpath stripping $MYTHTV_LIST $MYTHTV_CONFIG_LIST " PATHS_LIST=" bindir datadir docdir incdir libdir mandir pkgconfigdir prefix shlibdir " MYTHTV_PATHS_LIST=' dvb_path libcec_path runprefix x11_path libxml2_path firewiresdk_path ' MYTHTV_CMDLINE_SET=' logging python qmake qmakespecs samples source_path bdj_type JDK_HOME ' CMDLINE_SET=" $PATHS_LIST ar arch as assert_level build_suffix cc objcc cpu cross_prefix custom_allocator cxx dep_cc doxygen env extra_version gas host_cc host_cflags host_ld host_ldflags host_libs host_os install ld logfile malloc_prefix nm optflags pkg_config pkg_config_flags progs_suffix random_seed ranlib samples strip sws_max_filter_size sysinclude sysroot target_exec target_os target_path target_samples tempprefix toolchain valgrind yasmexe $MYTHTV_PATHS_LIST $MYTHTV_CMDLINE_SET " CMDLINE_APPEND=" extra_cflags extra_cxxflags extra_objcflags host_cppflags " # code dependency declarations # architecture extensions armv5te_deps="arm" armv6_deps="arm" armv6t2_deps="arm" armv7_a_deps="arm" armv8_deps="aarch64" neon_deps_any="aarch64 arm" intrinsics_neon_deps="neon" vfp_deps_any="aarch64 arm" vfpv3_deps="vfp" setend_deps="arm" map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM mipsfpu_deps="mips" mipsdsp_deps="mips" mipsdspr2_deps="mips" mips32r2_deps="mips" mips32r6_deps="mips" mips64r2_deps="mips" mips64r6_deps="mips" msa_deps="mips" mmi_deps="mips" altivec_deps="ppc" dcbzl_deps="ppc" ldbrx_deps="ppc" ppc4xx_deps="ppc" vsx_deps="altivec" power8_deps="vsx" cpunop_deps="i686" x86_64_select="i686" x86_64_suggest="fast_cmov" amd3dnow_deps="mmx" amd3dnowext_deps="amd3dnow" i686_deps="x86" mmx_deps="x86" mmxext_deps="mmx" sse_deps="mmxext" sse2_deps="sse" sse3_deps="sse2" ssse3_deps="sse3" sse4_deps="ssse3" sse42_deps="sse4" aesni_deps="sse42" avx_deps="sse42" xop_deps="avx" fma3_deps="avx" fma4_deps="avx" avx2_deps="avx" mmx_external_deps="yasm" mmx_inline_deps="inline_asm" mmx_suggest="mmx_external mmx_inline" for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do eval dep=\$${ext}_deps eval ${ext}_external_deps='"${dep}_external"' eval ${ext}_inline_deps='"${dep}_inline"' eval ${ext}_suggest='"${ext}_external ${ext}_inline"' done aligned_stack_if_any="aarch64 ppc x86" fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" fast_clz_if_any="aarch64 alpha avr32 mips ppc x86" fast_unaligned_if_any="aarch64 ppc x86" simd_align_16_if_any="altivec neon sse" # system capabilities symver_if_any="symver_asm_label symver_gnu_asm" valgrind_backtrace_deps="!optimizations valgrind_valgrind_h" # threading support atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange" atomics_suncc_if="atomic_cas_ptr machine_rw_barrier" atomics_win32_if="MemoryBarrier" atomics_native_if_any="$ATOMICS_LIST" w32threads_deps="atomics_native" threads_if_any="$THREADS_LIST" # subsystems dct_select="rdft" dirac_parse_select="golomb" error_resilience_select="me_cmp" faandct_deps="faan fdctdsp" faanidct_deps="faan idctdsp" frame_thread_encoder_deps="encoders threads" intrax8_select="error_resilience" mdct_select="fft" me_cmp_select="fdctdsp idctdsp pixblockdsp" mpeg_er_select="error_resilience" mpegaudio_select="mpegaudiodsp" mpegaudiodsp_select="dct" mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp" mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp" qsvdec_select="qsv" qsvenc_select="qsv" rdft_select="fft" # decoders / encoders aac_decoder_select="imdct15 mdct sinewin" aac_fixed_decoder_select="mdct sinewin" aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin" aac_latm_decoder_select="aac_decoder aac_latm_parser" ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct" ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct" ac3_encoder_select="ac3dsp audiodsp mdct me_cmp" ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp" adpcm_g722_decoder_select="g722dsp" adpcm_g722_encoder_select="g722dsp" aic_decoder_select="golomb idctdsp" alac_encoder_select="lpc" als_decoder_select="bswapdsp" amrnb_decoder_select="lsp" amrwb_decoder_select="lsp" amv_decoder_select="sp5x_decoder exif" amv_encoder_select="aandcttables jpegtables mpegvideoenc" ape_decoder_select="bswapdsp llauddsp" apng_decoder_select="zlib" apng_encoder_select="huffyuvencdsp zlib" asv1_decoder_select="blockdsp bswapdsp idctdsp" asv1_encoder_select="bswapdsp fdctdsp pixblockdsp" asv2_decoder_select="blockdsp bswapdsp idctdsp" asv2_encoder_select="bswapdsp fdctdsp pixblockdsp" atrac1_decoder_select="mdct sinewin" atrac3_decoder_select="mdct" atrac3p_decoder_select="mdct sinewin" avrn_decoder_select="exif jpegtables" bink_decoder_select="blockdsp hpeldsp" binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs" binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs" cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp" cllc_decoder_select="bswapdsp" comfortnoise_encoder_select="lpc" cook_decoder_select="audiodsp mdct sinewin" cscd_decoder_select="lzo" cscd_decoder_suggest="zlib" dca_decoder_select="mdct" dds_decoder_select="texturedsp" dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc" dnxhd_decoder_select="blockdsp idctdsp" dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp" dvvideo_decoder_select="dvprofile idctdsp" dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp" dxa_decoder_select="zlib" dxv_decoder_select="lzf texturedsp" eac3_decoder_select="ac3_decoder" eac3_encoder_select="ac3_encoder" eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo" eatgq_decoder_select="aandcttables" eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder" exr_decoder_select="zlib" ffv1_decoder_select="golomb rangecoder" ffv1_encoder_select="rangecoder" ffvhuff_decoder_select="huffyuv_decoder" ffvhuff_encoder_select="huffyuv_encoder" fic_decoder_select="golomb" flac_decoder_select="flacdsp golomb" flac_encoder_select="bswapdsp flacdsp golomb lpc" flashsv2_decoder_select="zlib" flashsv2_encoder_select="zlib" flashsv_decoder_select="zlib" flashsv_encoder_select="zlib" flv_decoder_select="h263_decoder" flv_encoder_select="h263_encoder" fourxm_decoder_select="blockdsp bswapdsp" fraps_decoder_select="bswapdsp huffman" g2m_decoder_select="blockdsp idctdsp jpegtables zlib" g729_decoder_select="audiodsp" h261_decoder_select="mpegvideo" h261_encoder_select="aandcttables mpegvideoenc" h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp" h263_encoder_select="aandcttables h263dsp mpegvideoenc" h263i_decoder_select="h263_decoder" h263p_decoder_select="h263_decoder" h263p_encoder_select="h263_encoder" h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp" h264_decoder_suggest="error_resilience" h264_qsv_decoder_deps="libmfx" h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel" h264_qsv_encoder_deps="libmfx" h264_qsv_encoder_select="qsvenc" hap_decoder_select="snappy texturedsp" hap_encoder_deps="libsnappy" hap_encoder_select="texturedspenc" hevc_decoder_select="bswapdsp cabac golomb videodsp" hevc_qsv_decoder_deps="libmfx" hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel" hevc_qsv_encoder_deps="libmfx" hevc_qsv_encoder_select="qsvenc" huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp" huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp" iac_decoder_select="imc_decoder" imc_decoder_select="bswapdsp fft mdct sinewin" indeo3_decoder_select="hpeldsp" indeo4_decoder_select="ividsp" indeo5_decoder_select="ividsp" interplay_video_decoder_select="hpeldsp" jpegls_decoder_select="golomb mjpeg_decoder" jpegls_encoder_select="golomb" jv_decoder_select="blockdsp" lagarith_decoder_select="huffyuvdsp" ljpeg_encoder_select="aandcttables idctdsp jpegtables" loco_decoder_select="golomb" mdec_decoder_select="blockdsp idctdsp mpegvideo" metasound_decoder_select="lsp mdct sinewin" mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp" mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables" mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc" mjpegb_decoder_select="mjpeg_decoder" mlp_decoder_select="mlp_parser" motionpixels_decoder_select="bswapdsp" mp1_decoder_select="mpegaudio" mp1float_decoder_select="mpegaudio" mp2_decoder_select="mpegaudio" mp2float_decoder_select="mpegaudio" mp3_decoder_select="mpegaudio" mp3adu_decoder_select="mpegaudio" mp3adufloat_decoder_select="mpegaudio" mp3float_decoder_select="mpegaudio" mp3on4_decoder_select="mpegaudio" mp3on4float_decoder_select="mpegaudio" mpc7_decoder_select="bswapdsp mpegaudiodsp" mpc8_decoder_select="mpegaudiodsp" mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" mpeg_xvmc_decoder_select="mpeg2video_decoder" mpegvideo_decoder_select="mpegvideo" mpeg1video_decoder_select="mpegvideo" mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp" mpeg2video_decoder_select="mpegvideo" mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp" mpeg2_qsv_decoder_deps="libmfx" mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel" mpeg2_qsv_encoder_deps="libmfx" mpeg2_qsv_encoder_select="qsvenc" mpeg4_decoder_select="h263_decoder mpeg4video_parser" mpeg4_encoder_select="h263_encoder" msa1_decoder_select="mss34dsp" msmpeg4v1_decoder_select="h263_decoder" msmpeg4v2_decoder_select="h263_decoder" msmpeg4v2_encoder_select="h263_encoder" msmpeg4v3_decoder_select="h263_decoder" msmpeg4v3_encoder_select="h263_encoder" mss2_decoder_select="vc1_decoder" mts2_decoder_select="mss34dsp" mxpeg_decoder_select="mjpeg_decoder" nellymoser_decoder_select="mdct sinewin" nellymoser_encoder_select="audio_frame_queue mdct sinewin" nuv_decoder_select="idctdsp lzo" on2avc_decoder_select="mdct" opus_decoder_deps="swresample" opus_decoder_select="imdct15" png_decoder_select="zlib" png_encoder_select="huffyuvencdsp zlib" prores_decoder_select="blockdsp idctdsp" prores_encoder_select="fdctdsp" qcelp_decoder_select="lsp" qdm2_decoder_select="mdct rdft mpegaudiodsp" ra_144_decoder_select="audiodsp" ra_144_encoder_select="audio_frame_queue lpc audiodsp" ralf_decoder_select="golomb" rawvideo_decoder_select="bswapdsp" rscc_decoder_select="zlib" rtjpeg_decoder_select="me_cmp" rv10_decoder_select="h263_decoder" rv10_encoder_select="h263_encoder" rv20_decoder_select="h263_decoder" rv20_encoder_select="h263_encoder" rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp" rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp" screenpresso_decoder_select="zlib" shorten_decoder_select="golomb" sipr_decoder_select="lsp" snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp" snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder" sonic_decoder_select="golomb rangecoder" sonic_encoder_select="golomb rangecoder" sonic_ls_encoder_select="golomb rangecoder" sp5x_decoder_select="mjpeg_decoder" svq1_decoder_select="hpeldsp" svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc" svq3_decoder_select="h264_decoder hpeldsp tpeldsp" svq3_decoder_suggest="zlib" tak_decoder_select="audiodsp" tdsc_decoder_select="zlib mjpeg_decoder" theora_decoder_select="vp3_decoder" thp_decoder_select="mjpeg_decoder" tiff_decoder_suggest="zlib lzma" tiff_encoder_suggest="zlib" truehd_decoder_select="mlp_parser" truemotion2_decoder_select="bswapdsp" truespeech_decoder_select="bswapdsp" tscc_decoder_select="zlib" twinvq_decoder_select="mdct lsp sinewin" txd_decoder_select="texturedsp" utvideo_decoder_select="bswapdsp" utvideo_encoder_select="bswapdsp huffman huffyuvencdsp" vble_decoder_select="huffyuvdsp" vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 qpeldsp startcode" vc1_qsv_decoder_deps="libmfx" vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel" vc1image_decoder_select="vc1_decoder" vorbis_decoder_select="mdct" vorbis_encoder_select="mdct" vp3_decoder_select="hpeldsp vp3dsp videodsp" vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp" vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp" vp6a_decoder_select="vp6_decoder" vp6f_decoder_select="vp6_decoder" vp7_decoder_select="h264pred videodsp vp8dsp" vp8_decoder_select="h264pred videodsp vp8dsp" vp9_decoder_select="videodsp vp9_parser" webp_decoder_select="vp8_decoder exif" wmalossless_decoder_select="llauddsp" wmapro_decoder_select="mdct sinewin wma_freqs" wmav1_decoder_select="mdct sinewin wma_freqs" wmav1_encoder_select="mdct sinewin wma_freqs" wmav2_decoder_select="mdct sinewin wma_freqs" wmav2_encoder_select="mdct sinewin wma_freqs" wmavoice_decoder_select="lsp rdft dct mdct sinewin" wmv1_decoder_select="h263_decoder" wmv1_encoder_select="h263_encoder" wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp wmv2dsp" wmv2_encoder_select="h263_encoder wmv2dsp" wmv3_decoder_select="vc1_decoder" wmv3image_decoder_select="wmv3_decoder" xma1_decoder_select="wmapro_decoder" xma2_decoder_select="wmapro_decoder" zerocodec_decoder_select="zlib" zlib_decoder_select="zlib" zlib_encoder_select="zlib" zmbv_decoder_select="zlib" zmbv_encoder_select="zlib" # hardware accelerators crystalhd_deps="libcrystalhd_libcrystalhd_if_h" d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext" dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode" vaapi_deps="va_va_h" vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads" vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" videotoolbox_deps="VideoToolbox_VideoToolbox_h pthreads" videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework QuartzCore -framework CoreVideo" xvmc_deps="X11_extensions_XvMClib_h" h263_vaapi_hwaccel_deps="vaapi" h263_vaapi_hwaccel_select="h263_decoder" h263_videotoolbox_hwaccel_deps="videotoolbox" h263_videotoolbox_hwaccel_select="h263_decoder" h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser" h264_d3d11va_hwaccel_deps="d3d11va" h264_d3d11va_hwaccel_select="h264_decoder" h264_dxva2_hwaccel_deps="dxva2" h264_dxva2_hwaccel_select="h264_decoder" h264_mmal_decoder_deps="mmal" h264_mmal_decoder_select="mmal" h264_mmal_hwaccel_deps="mmal" h264_qsv_hwaccel_deps="libmfx" h264_vaapi_hwaccel_deps="vaapi" h264_vaapi_hwaccel_select="h264_decoder" h264_vda_decoder_deps="vda" h264_vda_decoder_select="h264_decoder" h264_vda_hwaccel_deps="vda" h264_vda_hwaccel_select="h264_decoder" h264_vda_old_hwaccel_deps="vda" h264_vda_old_hwaccel_select="h264_decoder" h264_vdpau_decoder_deps="vdpau" h264_vdpau_decoder_select="h264_decoder" h264_vdpau_hwaccel_deps="vdpau" h264_vdpau_hwaccel_select="h264_decoder" h264_videotoolbox_hwaccel_deps="videotoolbox" h264_videotoolbox_hwaccel_select="h264_decoder" hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC" hevc_d3d11va_hwaccel_select="hevc_decoder" hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC" hevc_dxva2_hwaccel_select="hevc_decoder" hevc_qsv_hwaccel_deps="libmfx" hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC" hevc_vaapi_hwaccel_select="hevc_decoder" hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC" hevc_vdpau_hwaccel_select="hevc_decoder" mpeg_vdpau_decoder_deps="vdpau" mpeg_vdpau_decoder_select="mpeg2video_decoder" mpeg_xvmc_hwaccel_deps="xvmc" mpeg_xvmc_hwaccel_select="mpeg2video_decoder" mpeg1_vdpau_decoder_deps="vdpau" mpeg1_vdpau_decoder_select="mpeg1video_decoder" mpeg1_vdpau_hwaccel_deps="vdpau" mpeg1_vdpau_hwaccel_select="mpeg1video_decoder" mpeg1_videotoolbox_hwaccel_deps="videotoolbox" mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder" mpeg1_xvmc_hwaccel_deps="xvmc" mpeg1_xvmc_hwaccel_select="mpeg1video_decoder" mpeg2_crystalhd_decoder_select="crystalhd" mpeg2_d3d11va_hwaccel_deps="d3d11va" mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder" mpeg2_dxva2_hwaccel_deps="dxva2" mpeg2_dxva2_hwaccel_select="mpeg2video_decoder" mpeg2_mmal_decoder_deps="mmal" mpeg2_mmal_decoder_select="mmal" mpeg2_mmal_hwaccel_deps="mmal" mpeg2_qsv_hwaccel_deps="libmfx" mpeg2_qsv_hwaccel_select="qsvdec_mpeg2" mpeg2_vaapi_hwaccel_deps="vaapi" mpeg2_vaapi_hwaccel_select="mpeg2video_decoder" mpeg2_vdpau_hwaccel_deps="vdpau" mpeg2_vdpau_hwaccel_select="mpeg2video_decoder" mpeg2_videotoolbox_hwaccel_deps="videotoolbox" mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder" mpeg2_xvmc_hwaccel_deps="xvmc" mpeg2_xvmc_hwaccel_select="mpeg2video_decoder" mpeg4_crystalhd_decoder_select="crystalhd" mpeg4_mmal_decoder_deps="mmal" mpeg4_mmal_decoder_select="mmal" mpeg4_mmal_hwaccel_deps="mmal" mpeg4_vaapi_hwaccel_deps="vaapi" mpeg4_vaapi_hwaccel_select="mpeg4_decoder" mpeg4_vdpau_decoder_deps="vdpau" mpeg4_vdpau_decoder_select="mpeg4_decoder" mpeg4_vdpau_hwaccel_deps="vdpau" mpeg4_vdpau_hwaccel_select="mpeg4_decoder" mpeg4_videotoolbox_hwaccel_deps="videotoolbox" mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder" msmpeg4_crystalhd_decoder_select="crystalhd" vc1_crystalhd_decoder_select="crystalhd" vc1_d3d11va_hwaccel_deps="d3d11va" vc1_d3d11va_hwaccel_select="vc1_decoder" vc1_dxva2_hwaccel_deps="dxva2" vc1_dxva2_hwaccel_select="vc1_decoder" vc1_mmal_decoder_deps="mmal" vc1_mmal_decoder_select="mmal" vc1_mmal_hwaccel_deps="mmal" vc1_qsv_hwaccel_deps="libmfx" vc1_qsv_hwaccel_select="qsvdec_vc1" vc1_vaapi_hwaccel_deps="vaapi" vc1_vaapi_hwaccel_select="vc1_decoder" vc1_vdpau_decoder_deps="vdpau" vc1_vdpau_decoder_select="vc1_decoder" vc1_vdpau_hwaccel_deps="vdpau" vc1_vdpau_hwaccel_select="vc1_decoder" vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" vp9_d3d11va_hwaccel_select="vp9_decoder" vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" vp9_dxva2_hwaccel_select="vp9_decoder" vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9" vp9_vaapi_hwaccel_select="vp9_decoder" wmv3_crystalhd_decoder_select="crystalhd" wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel" wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel" wmv3_vdpau_decoder_select="vc1_vdpau_decoder" wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel" # parsers h264_parser_select="h264_decoder" hevc_parser_select="golomb" mpegvideo_parser_select="mpegvideo" mpeg4video_parser_select="h263dsp mpegvideo qpeldsp" vc1_parser_select="mpegvideo startcode vc1_decoder" # bitstream_filters mjpeg2jpeg_bsf_select="jpegtables" # external libraries chromaprint_muxer_deps="chromaprint" libcelt_decoder_deps="libcelt" libdcadec_decoder_deps="libdcadec" libfaac_encoder_deps="libfaac" libfaac_encoder_select="audio_frame_queue" libfdk_aac_decoder_deps="libfdk_aac" libfdk_aac_encoder_deps="libfdk_aac" libfdk_aac_encoder_select="audio_frame_queue" libgme_demuxer_deps="libgme" libgsm_decoder_deps="libgsm" libgsm_encoder_deps="libgsm" libgsm_ms_decoder_deps="libgsm" libgsm_ms_encoder_deps="libgsm" libilbc_decoder_deps="libilbc" libilbc_encoder_deps="libilbc" libkvazaar_encoder_deps="libkvazaar" libmodplug_demuxer_deps="libmodplug" libmp3lame_encoder_deps="libmp3lame" libmp3lame_encoder_select="audio_frame_queue" libopencore_amrnb_decoder_deps="libopencore_amrnb" libopencore_amrnb_encoder_deps="libopencore_amrnb" libopencore_amrnb_encoder_select="audio_frame_queue" libopencore_amrwb_decoder_deps="libopencore_amrwb" libopenh264_encoder_deps="libopenh264" libopenjpeg_decoder_deps="libopenjpeg" libopenjpeg_encoder_deps="libopenjpeg" libopus_decoder_deps="libopus" libopus_encoder_deps="libopus" libopus_encoder_select="audio_frame_queue" libschroedinger_decoder_deps="libschroedinger" libschroedinger_encoder_deps="libschroedinger" libshine_encoder_deps="libshine" libshine_encoder_select="audio_frame_queue" libspeex_decoder_deps="libspeex" libspeex_encoder_deps="libspeex" libspeex_encoder_select="audio_frame_queue" libtheora_encoder_deps="libtheora" libtwolame_encoder_deps="libtwolame" libutvideo_decoder_deps="libutvideo" libutvideo_encoder_deps="libutvideo" libvo_amrwbenc_encoder_deps="libvo_amrwbenc" libvorbis_decoder_deps="libvorbis" libvorbis_encoder_deps="libvorbis" libvorbis_encoder_select="audio_frame_queue" libvpx_vp8_decoder_deps="libvpx" libvpx_vp8_encoder_deps="libvpx" libvpx_vp9_decoder_deps="libvpx" libvpx_vp9_encoder_deps="libvpx" libwavpack_encoder_deps="libwavpack" libwebp_encoder_deps="libwebp" libwebp_anim_encoder_deps="libwebp" libx262_encoder_deps="libx262" libx264_encoder_deps="libx264" libx264rgb_encoder_deps="libx264" libx264rgb_encoder_select="libx264_encoder" libx265_encoder_deps="libx265" libxavs_encoder_deps="libxavs" libxvid_encoder_deps="libxvid" libzvbi_teletext_decoder_deps="libzvbi" nvenc_encoder_deps="nvenc" nvenc_h264_encoder_deps="nvenc" nvenc_hevc_encoder_deps="nvenc" # demuxers / muxers ac3_demuxer_select="ac3_parser" asf_demuxer_select="riffdec" asf_o_demuxer_select="riffdec" asf_muxer_select="riffenc" asf_stream_muxer_select="asf_muxer" avi_demuxer_select="riffdec exif" avi_muxer_select="riffenc" avisynth_demuxer_deps="avisynth" avisynth_demuxer_select="riffdec" caf_demuxer_select="riffdec" dash_muxer_select="mp4_muxer" dirac_demuxer_select="dirac_parser" dts_demuxer_select="dca_parser" dtshd_demuxer_select="dca_parser" dv_demuxer_select="dvprofile" dv_muxer_select="dvprofile" 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" image2_alias_pix_demuxer_select="image2_demuxer" image2_brender_pix_demuxer_select="image2_demuxer" ipod_muxer_select="mov_muxer" ismv_muxer_select="mov_muxer" libnut_demuxer_deps="libnut" libnut_muxer_deps="libnut" matroska_audio_muxer_select="matroska_muxer" matroska_demuxer_select="riffdec" matroska_demuxer_suggest="bzlib lzo zlib" matroska_muxer_select="riffenc" mmf_muxer_select="riffenc" mov_demuxer_select="riffdec" mov_demuxer_suggest="zlib" mov_muxer_select="riffenc rtpenc_chain" mp3_demuxer_select="mpegaudio_parser" mp4_muxer_select="mov_muxer" mpegts_muxer_select="adts_muxer latm_muxer" mpegtsraw_demuxer_select="mpegts_demuxer" mxf_d10_muxer_select="mxf_muxer" mxf_opatom_muxer_select="mxf_muxer" nut_muxer_select="riffenc" nuv_demuxer_select="riffdec" oga_muxer_select="ogg_muxer" ogg_demuxer_select="dirac_parse" opus_muxer_select="ogg_muxer" psp_muxer_select="mov_muxer" rtp_demuxer_select="sdp_demuxer" rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol" rtsp_demuxer_select="http_protocol rtpdec" rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain" sap_demuxer_select="sdp_demuxer" sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain" sdp_demuxer_select="rtpdec" smoothstreaming_muxer_select="ismv_muxer" spdif_muxer_select="aac_parser" spx_muxer_select="ogg_muxer" swf_demuxer_suggest="zlib" tak_demuxer_select="tak_parser" tg2_muxer_select="mov_muxer" tgp_muxer_select="mov_muxer" vobsub_demuxer_select="mpegps_demuxer" w64_demuxer_select="wav_demuxer" w64_muxer_select="wav_muxer" wav_demuxer_select="riffdec" wav_muxer_select="riffenc" webm_muxer_select="riffenc" wtv_demuxer_select="riffdec" wtv_muxer_select="riffenc" xmv_demuxer_select="riffdec" xwma_demuxer_select="riffdec" # indevs / outdevs alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp" alsa_outdev_deps="alsa_asoundlib_h" avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia" avfoundation_indev_select="avfoundation" bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h" caca_outdev_deps="libcaca" decklink_indev_deps="decklink pthreads" decklink_indev_extralibs="-lstdc++" decklink_outdev_deps="decklink pthreads" decklink_outdev_extralibs="-lstdc++" dshow_indev_deps="IBaseFilter" dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi" dv1394_indev_deps="dv1394" dv1394_indev_select="dv_demuxer" fbdev_indev_deps="linux_fb_h" fbdev_outdev_deps="linux_fb_h" gdigrab_indev_deps="CreateDIBSection" gdigrab_indev_extralibs="-lgdi32" gdigrab_indev_select="bmp_decoder" iec61883_indev_deps="libiec61883" jack_indev_deps="jack_jack_h sem_timedwait" lavfi_indev_deps="avfilter" libcdio_indev_deps="libcdio" libdc1394_indev_deps="libdc1394" libv4l2_indev_deps="libv4l2" openal_indev_deps="openal" opengl_outdev_deps="opengl" oss_indev_deps_any="soundcard_h sys_soundcard_h" oss_outdev_deps_any="soundcard_h sys_soundcard_h" pulse_indev_deps="libpulse" pulse_outdev_deps="libpulse" qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore" qtkit_indev_select="qtkit" sdl_outdev_deps="sdl" sndio_indev_deps="sndio_h" sndio_outdev_deps="sndio_h" v4l_indev_deps="linux_videodev_h" v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h" vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines" vfwcap_indev_extralibs="-lavicap32" x11grab_indev_deps="x11grab" x11grab_xcb_indev_deps="libxcb" xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute" xv_outdev_extralibs="-lXv -lX11 -lXext" # protocols async_protocol_deps="threads" bluray_protocol_deps="libbluray" ffrtmpcrypt_protocol_deps="!librtmp_protocol" ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl" ffrtmpcrypt_protocol_select="tcp_protocol" ffrtmphttp_protocol_deps="!librtmp_protocol" ffrtmphttp_protocol_select="http_protocol" ftp_protocol_select="tcp_protocol" gopher_protocol_select="network" http_protocol_select="tcp_protocol" httpproxy_protocol_select="tcp_protocol" https_protocol_select="tls_protocol" 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" mmsh_protocol_select="http_protocol" mmst_protocol_select="network" rtmp_protocol_deps="!librtmp_protocol" rtmp_protocol_select="tcp_protocol" rtmpe_protocol_select="ffrtmpcrypt_protocol" rtmps_protocol_deps="!librtmp_protocol" rtmps_protocol_select="tls_protocol" rtmpt_protocol_select="ffrtmphttp_protocol" rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol" rtmpts_protocol_select="ffrtmphttp_protocol https_protocol" rtp_protocol_select="udp_protocol" sctp_protocol_deps="struct_sctp_event_subscribe" sctp_protocol_select="network" srtp_protocol_select="rtp_protocol" tcp_protocol_select="network" tls_gnutls_protocol_deps="gnutls !tls_schannel_protocol !tls_securetransport_protocol" tls_gnutls_protocol_select="tcp_protocol" tls_openssl_protocol_deps="openssl !tls_schannel_protocol !tls_securetransport_protocol !tls_gnutls_protocol" tls_openssl_protocol_select="tcp_protocol" tls_schannel_protocol_deps="schannel" tls_schannel_protocol_select="tcp_protocol" tls_securetransport_protocol_deps="securetransport" tls_securetransport_protocol_select="tcp_protocol" tls_protocol_deps_any="tls_schannel_protocol tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol" udp_protocol_select="network" udplite_protocol_select="network" unix_protocol_deps="sys_un_h" unix_protocol_select="network" # filters afftfilt_filter_deps="avcodec" afftfilt_filter_select="fft" amovie_filter_deps="avcodec avformat" aresample_filter_deps="swresample" ass_filter_deps="libass" asyncts_filter_deps="avresample" atempo_filter_deps="avcodec" atempo_filter_select="rdft" azmq_filter_deps="libzmq" blackframe_filter_deps="gpl" boxblur_filter_deps="gpl" bs2b_filter_deps="libbs2b" colormatrix_filter_deps="gpl" cover_rect_filter_deps="avcodec avformat gpl" cropdetect_filter_deps="gpl" delogo_filter_deps="gpl" deshake_filter_select="pixelutils" drawtext_filter_deps="libfreetype" ebur128_filter_deps="gpl" eq_filter_deps="gpl" fftfilt_filter_deps="avcodec" fftfilt_filter_select="rdft" find_rect_filter_deps="avcodec avformat gpl" flite_filter_deps="libflite" frei0r_filter_deps="frei0r dlopen" frei0r_src_filter_deps="frei0r dlopen" fspp_filter_deps="gpl" geq_filter_deps="gpl" histeq_filter_deps="gpl" hqdn3d_filter_deps="gpl" interlace_filter_deps="gpl" kerndeint_filter_deps="gpl" ladspa_filter_deps="ladspa dlopen" mcdeint_filter_deps="avcodec gpl" movie_filter_deps="avcodec avformat" mpdecimate_filter_deps="gpl" mpdecimate_filter_select="pixelutils" mptestsrc_filter_deps="gpl" negate_filter_deps="lut_filter" nnedi_filter_deps="gpl" ocr_filter_deps="libtesseract" ocv_filter_deps="libopencv" owdenoise_filter_deps="gpl" pan_filter_deps="swresample" perspective_filter_deps="gpl" phase_filter_deps="gpl" pp7_filter_deps="gpl" pp_filter_deps="gpl postproc" pullup_filter_deps="gpl" removelogo_filter_deps="avcodec avformat swscale" repeatfields_filter_deps="gpl" resample_filter_deps="avresample" rubberband_filter_deps="librubberband" sab_filter_deps="gpl swscale" scale2ref_filter_deps="swscale" scale_filter_deps="swscale" select_filter_select="pixelutils" showcqt_filter_deps="avcodec avformat swscale" showcqt_filter_select="fft" showfreqs_filter_deps="avcodec" showfreqs_filter_select="fft" showspectrum_filter_deps="avcodec" showspectrum_filter_select="fft" showspectrumpic_filter_deps="avcodec" showspectrumpic_filter_select="fft" smartblur_filter_deps="gpl swscale" sofalizer_filter_deps="netcdf avcodec" sofalizer_filter_select="fft" spectrumsynth_filter_deps="avcodec" spectrumsynth_filter_select="fft" spp_filter_deps="gpl avcodec" spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp" stereo3d_filter_deps="gpl" subtitles_filter_deps="avformat avcodec libass" super2xsai_filter_deps="gpl" pixfmts_super2xsai_test_deps="super2xsai_filter" tinterlace_filter_deps="gpl" tinterlace_merge_test_deps="tinterlace_filter" tinterlace_pad_test_deps="tinterlace_filter" uspp_filter_deps="gpl avcodec" vidstabdetect_filter_deps="libvidstab" vidstabtransform_filter_deps="libvidstab" zmq_filter_deps="libzmq" zoompan_filter_deps="swscale" zscale_filter_deps="libzimg" # examples avcodec_example_deps="avcodec avutil" avio_dir_cmd="avformat avutil" avio_reading="avformat avcodec avutil" decoding_encoding_example_deps="avcodec avformat avutil" demuxing_decoding_example_deps="avcodec avformat avutil" extract_mvs_example_deps="avcodec avformat avutil" filter_audio_example_deps="avfilter avutil" filtering_audio_example_deps="avfilter avcodec avformat avutil" filtering_video_example_deps="avfilter avcodec avformat avutil" metadata_example_deps="avformat avutil" muxing_example_deps="avcodec avformat avutil swscale" qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11" remuxing_example_deps="avcodec avformat avutil" resampling_audio_example_deps="avutil swresample" scaling_video_example_deps="avutil swscale" transcode_aac_example_deps="avcodec avformat swresample" transcoding_example_deps="avfilter avcodec avformat avutil" # libraries, in linking order avcodec_deps="avutil" avdevice_deps="avformat avcodec avutil" avfilter_deps="avutil" avformat_deps="avcodec avutil" avresample_deps="avutil" postproc_deps="avutil gpl" swresample_deps="avutil" swscale_deps="avutil" # programs ffmpeg_deps="avcodec avfilter avformat swresample" ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter null_filter setpts_filter trim_filter" ffplay_deps="avcodec avformat swscale swresample sdl" ffplay_libs='$sdl_libs' ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter" ffprobe_deps="avcodec avformat" ffserver_deps="avformat fork sarestart" ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer" # mythtv dependencies audio_oss_deps_any="soundcard_h sys_soundcard_h" dvb_deps="backend" firewire_deps="backend" ivtv_deps="backend v4l2" hdpvr_deps="backend v4l2" hdhomerun_deps="backend" vbox_deps="backend" ceton_deps="backend" mpegtsraw_demuxer_deps="merge_libavformat_mpegts_c" mythtranscode_deps="backend frontend" opengl_deps_any="agl_h GL_gl_h EGL_egl_h GLES2_gl2_h darwin windows x11" opengles_deps="GLES2_gl2_h" opengl_video_deps="opengl" opengl_themepainter_deps="opengl" v4l2_deps="backend linux_videodev2_h" v4l1_deps="backend v4l2 linux_videodev_h" xrandr_deps="x11" xv_deps="x11" asi_deps="backend" </dev/null` processor_flags="" tune="generic" if test -f /proc/cpuinfo ; then if test x"$processor" = x"" -o x"$processor" = x"$arch_default" -o \ x"$processor" = x"unknown" ; then processor=`cat /proc/cpuinfo | grep "model name" | head -n 1` fi processor_flags=`cat /proc/cpuinfo | grep "flags" | head -n 1` fi # Mac OS X equivalent if test -f /usr/bin/hostinfo ; then arch=`arch` if test x"$arch" = x"ppc" -o x"$arch" = x"ppc64" ; then processor=`/usr/bin/hostinfo | grep "Processor type:"` processor=${processor#Processor type: *} processor=${processor% (*} tune=$processor else # 10.4 only: processor=`/usr/sbin/sysctl -n machdep.cpu.model_string 2>/dev/null` if test x"$processor" = x"" ; then # On 10.5, this contains the type of CPU also: processor=`/usr/sbin/sysctl -n machdep.cpu.brand_string` fi processor_flags=`/usr/sbin/sysctl -n machdep.cpu.features` processor_flags=`echo $processor_flags | tr "[A-Z]" "[a-z]"` fi fi # OS target_os_default=$(tolower $(uname -s)) host_os=$target_os_default # machine if test "$target_os_default" = aix; then arch_default=$(uname -p) strip_default="strip -X32_64" else arch_default=$(uname -m) fi cpu="generic" intrinsics="none" # configurable options enable $PROGRAM_LIST #enable $DOCUMENT_LIST #enable $EXAMPLE_LIST enable $(filter_out avresample $LIBRARY_LIST) enable stripping enable asm enable debug #enable doc enable faan faandct faanidct enable optimizations enable runtime_cpudetect enable safe_bitstream_reader #enable static enable swscale_alpha enable valgrind_backtrace sws_max_filter_size_default=256 set_default sws_max_filter_size # Enable hwaccels by default. enable d3d11va dxva2 vaapi vda vdpau videotoolbox xvmc enable xlib # mythtv settings enable shared enable gpl CONFIG_DEFINES="" CONFIG_INCLUDEPATH="" PROFILEFLAGS="" audio_pulse="default" audio_pulseoutput="default" audio_alsa="default" audio_jack="default" enable audio_oss enable bindings_perl enable bindings_python enable bindings_php enable dvb enable ffmpeg_pthreads enable firewire enable frontend enable hdhomerun enable vbox enable ceton enable hdpvr enable ivtv enable asi enable lamemp3 enable libass enable libcec enable libcrypto enable libdns_sd enable libxml2 enable lirc enable mheg enable mythtranscode enable opengl enable opengles enable opengl_video enable opengl_themepainter enable symbol_visibility enable v4l1 enable v4l2 enable x11 enable xrandr enable xv disable indevs disable sdl enable libfftw3 enable taglib disable mythlogserver enable exiv2 enable systemd_notify # mythtv paths dvb_path_default="${sysinclude:-$sysroot/usr/include}" x11_path_default="${sysinclude:-$sysroot/usr/include}/X11" libcec_path_default="${sysinclude:-$sysroot/usr/include}" libxml2_path_default="${sysinclude:-$sysroot/usr/include}/libxml2" firewiresdk_path_default="" # build settings SHFLAGS='-shared -Wl,-soname,$$(@F)' LIBPREF="libmyth" LIBSUF=".a" FULLNAME='$(NAME)$(BUILDSUF)' LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)' SLIBPREF="libmyth" SLIBSUF=".so" SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)' SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)' SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)' asflags_filter=echo cflags_filter=echo ldflags_filter=echo cxxppflags_filter=echo AS_C='-c' AS_O='-o $@' CC_C='-c' CC_E='-E -o $@' CC_O='-o $@' CXX_C='-c' CXX_O='-o $@' OBJCC_C='-c' OBJCC_E='-E -o $@' OBJCC_O='-o $@' LD_O='-o $@' LD_LIB='-l%' LD_MYTH_LIB='-lmyth%' LD_PATH='-L' HOSTCC_C='-c' HOSTCC_O='-o $@' HOSTLD_O='-o $@' host_libs='-lm' host_cflags_filter=echo host_ldflags_filter=echo target_path='$(CURDIR)' # since the object filename is not given with the -MM flag, the compiler # is only able to print the basename, and we must add the path ourselves DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)' DEPFLAGS='-MM' # find source path source_path="$(dirname "$0")" enable source_path_used if test -f configure; then source_path="$(pwd)" disable source_path_used else source_path="$(cd "$source_path"; pwd)" case "$source_path" in *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;; esac test -e "$source_path/config.h" && die "Out of tree builds are impossible with config.h in source dir." fi for v in "$@"; do r=${v#*=} l=${v%"$r"} r=$(sh_quote "$r") FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}" MYTHTV_CONFIGURATION="${MYTHTV_CONFIGURATION# } ${v}" done find_things(){ thing=$1 pattern=$2 file=$source_path/$3 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file" } ENCODER_LIST=$(find_things encoder ENC external/FFmpeg/libavcodec/allcodecs.c) DECODER_LIST=$(find_things decoder DEC external/FFmpeg/libavcodec/allcodecs.c) HWACCEL_LIST=$(find_things hwaccel HWACCEL external/FFmpeg/libavcodec/allcodecs.c) PARSER_LIST=$(find_things parser PARSER external/FFmpeg/libavcodec/allcodecs.c) BSF_LIST=$(find_things bsf BSF external/FFmpeg/libavcodec/allcodecs.c) MUXER_LIST=$(find_things muxer _MUX external/FFmpeg/libavformat/allformats.c) DEMUXER_LIST=$(find_things demuxer DEMUX external/FFmpeg/libavformat/allformats.c) OUTDEV_LIST=$(find_things outdev OUTDEV external/FFmpeg/libavdevice/alldevices.c) INDEV_LIST=$(find_things indev _IN external/FFmpeg/libavdevice/alldevices.c) PROTOCOL_LIST=$(find_things protocol PROTOCOL external/FFmpeg/libavformat/allformats.c) FILTER_LIST=$(find_things filter FILTER external/FFmpeg/libavfilter/allfilters.c) ALL_COMPONENTS=" $BSF_LIST $DECODER_LIST $DEMUXER_LIST $ENCODER_LIST $FILTER_LIST $HWACCEL_LIST $INDEV_LIST $MUXER_LIST $OUTDEV_LIST $PARSER_LIST $PROTOCOL_LIST " for n in $COMPONENT_LIST; do v=$(toupper ${n%s})_LIST eval enable \$$v eval ${n}_if_any="\$$v" done enable $ARCH_EXT_LIST die_unknown(){ echo "Unknown option \"$1\"." echo "See $0 --help for available options." exit 1 } print_in_columns() { cols=$(expr $ncols / 24) cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t } show_list() { suffix=_$1 shift echo $* | sed s/$suffix//g | print_in_columns exit 0 } rand_list(){ IFS=', ' set -- $* unset IFS for thing; do comp=${thing%:*} prob=${thing#$comp} prob=${prob#:} is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST echo "prob ${prob:-0.5}" printf '%s\n' $comp done } do_random(){ action=$1 shift random_seed=$(awk "BEGIN { srand($random_seed); print srand() }") $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }") } if [ -e config.log ] ; then PCONF=$(tail -n 1 config.log | grep configure | sed 's/.\/configure//g') for opt in "$@" ; do if test x"$opt" != x"--prev" -a x"$opt" != x"--previous" ; then OTHOPT="${OTHOPT# }${opt}" fi if test x"$opt" = x"--prev" -o x"$opt" = x"--previous" ; then if test x"$PCONF" != "--prev" ; then PREV="yes"; fi fi done if test x"$PREV" = x"yes"; then echo "Options: $PCONF $OTHOPT" ./configure $PCONF $OTHOPT exit fi fi for opt do optval="${opt#*=}" case "$opt" in #Myth options --compile-type=*) compile_type=$optval ;; --libdir-name=*) libdir_name=$optval ;; --extra-cxxflags=*) add_cxxflags $optval ;; --firewire-sdk=*) firewiresdk_path="${optval}" ;; --arch=*) arch=$optval && enable cpu_override ;; --cpu=*) cpu=$optval && enable cpu_override ;; --tune=*) tune=$optval ;; --disable-ccache) disable ccache ;; --disable-distcc) disable distcc ;; # disabled due to abuse in Gentoo ebuild --disable-frontend) ;; # disabled due to abuse in Gentoo ebuild --disable-backend) ;; --enable-mac-bundle) enable mac_bundle ;; --disable-mythlogserver) disable mythlogserver ;; --enable-mythlogserver) enable mythlogserver ;; --previous|--prev) echo "No history of previous configure parameters." ;; --with-bindings=*) tmp_bindings=`echo ${optval} | sed -e 's/,/ /g'` for binding in ${tmp_bindings} ; do if test x"${binding}" = x"perl"; then bindings_perl="yes" fi if test x"${binding}" = x"python"; then bindings_python="yes" fi if test x"${binding}" = x"php"; then bindings_php="yes" fi done ;; --without-bindings=*) tmp_bindings=`echo ${optval} | sed -e 's/,/ /g'` for binding in ${tmp_bindings} ; do if test x"${binding}" = x"perl"; then bindings_perl="no" fi if test x"${binding}" = x"python"; then bindings_python="no" fi if test x"${binding}" = x"php"; then bindings_php="no" fi done ;; --perl-config-opts=*) PERL_CONFIG_OPTS=`echo ${optval}` ;; #FFmpeg original --extra-ldflags=*) add_ldflags $optval ;; --extra-ldexeflags=*) add_ldexeflags $optval ;; --extra-ldlibflags=*) add_ldlibflags $optval ;; --extra-libs=*) add_extralibs $optval ;; --disable-devices) disable $INDEV_LIST $OUTDEV_LIST ;; --enable-debug=*) debuglevel="$optval" ;; --disable-programs) disable $PROGRAM_LIST ;; --disable-everything) map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST ;; --disable-all) map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST disable $LIBRARY_LIST $PROGRAM_LIST doc enable avutil ;; --enable-random|--disable-random) action=${opt%%-random} do_random ${action#--} $COMPONENT_LIST ;; --enable-random=*|--disable-random=*) action=${opt%%-random=*} do_random ${action#--} $optval ;; --enable-*=*|--disable-*=*) eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" eval list=\$$(toupper $thing)_LIST name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} list=$(filter "$name" $list) [ "$list" = "" ] && warn "Option $opt did not match anything" $action $list ;; --enable-?*|--disable-?*) eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') if is_in $option $COMPONENT_LIST; then test $action = disable && action=unset eval $action \$$(toupper ${option%s})_LIST elif is_in $option $CMDLINE_SELECT; then $action $option else die_unknown $opt fi ;; --list-*) NAME="${opt#--list-}" is_in $NAME $COMPONENT_LIST || die_unknown $opt NAME=${NAME%s} eval show_list $NAME \$$(toupper $NAME)_LIST ;; --help|-h) show_help ;; --fatal-warnings) enable fatal_warnings ;; *) optname="${opt%%=*}" optname="${optname#--}" optname=$(echo "$optname" | sed 's/-/_/g') if is_in $optname $CMDLINE_SET; then eval $optname='$optval' elif is_in $optname $CMDLINE_APPEND; then append $optname "$optval" else die_unknown $opt fi ;; esac done #setting default runtime prefix and libdir if test -n "${prefix}"; then runprefix_default=${prefix} libdir_default="${prefix}/${libdir_name}" shlibdir_default="${prefix}/${libdir_name}" else runprefix_default=${prefix_default} libdir_default="${prefix_default}/${libdir_name}" shlibdir_default="${prefix_default}/${libdir_name}" fi if enabled_any cpu_override cross_compile || test x"$tune" != x"generic" && enabled proc_opt; then echo "Warning! --enable-proc-opt shouldn't be used with --arch, --cpu or --tune" echo "Disabling it now." disable proc_opt fi enabled proc_opt && disable runtime_cpudetect && cpu="host" for e in $env; do eval "export $e" done disabled logging && logfile=/dev/null # Disable all the library-specific components if the library itself # is disabled, see AVCODEC_LIST and following _LIST variables. disable_components(){ disabled ${1} && disable $( eval components="\$$(toupper ${1})_COMPONENTS" map 'eval echo \${$(toupper ${v%s})_LIST}' $components ) } map 'disable_components $v' $LIBRARY_LIST echo "# $0 $FFMPEG_CONFIGURATION" > $logfile set >> $logfile test -n "$valgrind" && toolchain="valgrind-memcheck" case "$toolchain" in clang-asan) cc_default="clang" add_cflags -fsanitize=address add_ldflags -fsanitize=address ;; clang-tsan) cc_default="clang" add_cflags -fsanitize=thread -pie add_ldflags -fsanitize=thread -pie ;; clang-usan) cc_default="clang" add_cflags -fsanitize=undefined add_ldflags -fsanitize=undefined ;; gcc-asan) cc_default="gcc" add_cflags -fsanitize=address add_ldflags -fsanitize=address ;; gcc-tsan) cc_default="gcc" add_cflags -fsanitize=thread -pie -fPIC add_ldflags -fsanitize=thread -pie -fPIC ;; gcc-usan) cc_default="gcc" add_cflags -fsanitize=undefined add_ldflags -fsanitize=undefined ;; valgrind-massif) target_exec_default=${valgrind:-"valgrind"} 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" ;; valgrind-memcheck) target_exec_default=${valgrind:-"valgrind"} 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" ;; msvc) # 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 ffmpeg. 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="$source_path/compat/windows/mslink" nm_default="dumpbin -symbols" ar_default="lib" case "$arch" in arm*) as_default="armasm" ;; esac 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 or -out:. TMPDIR=. ;; icl) 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_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 add_cflags -fno-strict-overflow -fstack-protector-all add_ldflags -Wl,-z,relro -Wl,-z,now ;; ?*) die "Unknown toolchain $toolchain" ;; esac test -n "$cross_prefix" && enable cross_compile if enabled cross_compile; then test -n "$arch" && test -n "$target_os" || die "Must specify target arch and OS when cross-compiling" fi ar_default="${cross_prefix}${ar_default}" cc_default="${cross_prefix}${cc_default}" cxx_default="${cross_prefix}${cxx_default}" nm_default="${cross_prefix}${nm_default}" pkg_config_default="${cross_prefix}${pkg_config_default}" if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then ranlib_default="${cross_prefix}${ranlib_default} -D" else ranlib_default="${cross_prefix}${ranlib_default}" fi strip_default="${cross_prefix}${strip_default}" windres_default="${cross_prefix}${windres_default}" sysinclude_default="${sysroot}/usr/include" set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \ target_exec target_os yasmexe enabled cross_compile || host_cc_default=$cc set_default host_cc pkg_config_fail_message="" if ! $pkg_config --version >/dev/null 2>&1; then warn "$pkg_config not found, library detection may fail." pkg_config=false elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then pkg_config_fail_message=" Note: When building a static binary, add --pkg-config-flags=\"--static\"." fi set_default qmake qmakespecs python yasmexe if test $doxygen != $doxygen_default && \ ! $doxygen --version >/dev/null 2>&1; then warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build." fi exesuf() { case $1 in mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;; esac } EXESUF=$(exesuf $target_os) HOSTEXESUF=$(exesuf $host_os) # set temporary file name : ${TMPDIR:=$TEMPDIR} : ${TMPDIR:=$TMP} : ${TMPDIR:=/tmp} if [ -n "$tempprefix" ] ; then mktemp(){ echo $tempprefix.${HOSTNAME}.${UID} } elif ! check_cmd mktemp -u XXXXXX; then # simple replacement for missing mktemp # NOT SAFE FOR GENERAL USE mktemp(){ echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$" } fi tmpfile(){ tmp=$(mktemp -u "${TMPDIR}/mythtv_conf.XXXXXXXX")$2 && (set -C; exec > $tmp) 2>/dev/null || die "Unable to create temporary file in $TMPDIR." append TMPFILES $tmp eval $1=$tmp } trap 'rm -f -- $TMPFILES' EXIT trap exit HUP INT TERM tmpfile TMPASM .asm tmpfile TMPC .c tmpfile TMPCPP .cpp tmpfile TMPE $EXESUF tmpfile TMPH .h tmpfile TMPM .m tmpfile TMPO .o tmpfile TMPS .S tmpfile TMPSH .sh tmpfile TMPV .ver tmpfile TMPMAK .mak tmpfile TMPPRO .pro unset -f mktemp chmod +x $TMPE # make sure we can execute files in $TMPDIR cat > $TMPSH 2>> $logfile <> $logfile 2>&1 if ! $TMPSH >> $logfile 2>&1; then cat <&1 | grep -q '^GNU assembler'; then true # no-op to avoid reading stdin in following checks elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then _type=llvm_gcc gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)') _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver" _depflags='-MMD -MF $(@:.o=.d) -MT $@' _cflags_speed='-O3' _cflags_size='-Os' elif $_cc -v 2>&1 | grep -qi ^gcc; then _type=gcc gcc_version=$($_cc --version | head -n1) gcc_basever=$($_cc -dumpversion) gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)') gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)") _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver") case $gcc_basever in 2) ;; 2.*) ;; *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;; esac if [ "$first" = true ]; then case $gcc_basever in 4.2*) warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;; esac fi _cflags_speed='-O3' _cflags_size='-Os' elif $_cc --version 2>/dev/null | grep -q ^icc; then _type=icc _ident=$($_cc --version | head -n1) _depflags='-MMD' _cflags_speed='-O3' _cflags_size='-Os' _cflags_noopt='-O1' _flags_filter=icc_flags elif $_cc -v 2>&1 | grep -q xlc; then _type=xlc _ident=$($_cc -qversion 2>/dev/null | head -n1) _cflags_speed='-O5' _cflags_size='-O5 -qcompact' elif $_cc -V 2>/dev/null | grep -q Compaq; then _type=ccc _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3) _DEPFLAGS='-M' _cflags_speed='-fast' _cflags_size='-O1' _flags_filter=ccc_flags elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then test -d "$sysroot" || die "No valid sysroot specified." _type=armcc _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //') armcc_conf="$PWD/armcc.conf" $_cc --arm_linux_configure \ --arm_linux_config_file="$armcc_conf" \ --configure_sysroot="$sysroot" \ --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 || die "Error creating armcc configuration file." $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc _flags="--arm_linux_config_file=$armcc_conf --translate_gcc" as_default="${cross_prefix}gcc" _depflags='-MMD' _cflags_speed='-O3' _cflags_size='-Os' elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then _type=tms470 _ident=$($_cc -version | head -n1 | tr -s ' ') _flags='--gcc --abi=eabi -me' _cc_e='-ppl -fe=$@' _cc_o='-fe=$@' _depflags='-ppa -ppd=$(@:.o=.d)' _cflags_speed='-O3 -mf=5' _cflags_size='-O3 -mf=2' _flags_filter=tms470_flags elif $_cc -v 2>&1 | grep -q clang; then _type=clang _ident=$($_cc --version 2>/dev/null | head -n1) _depflags='-MMD -MF $(@:.o=.d) -MT $@' _cflags_speed='-O3' _cflags_size='-Os' elif $_cc -V 2>&1 | grep -q Sun; then _type=suncc _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-) _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)' _DEPFLAGS='-xM1 -xc99' _ldflags='-std=c99' _cflags_speed='-O5' _cflags_size='-O5 -xspace' _flags_filter=suncc_flags elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then _type=pathscale _ident=$($_cc -v 2>&1 | head -n1 | tr -d :) _depflags='-MMD -MF $(@:.o=.d) -MT $@' _cflags_speed='-O2' _cflags_size='-Os' _flags_filter='filter_out -Wdisabled-optimization' elif $_cc -v 2>&1 | grep -q Open64; then _type=open64 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :) _depflags='-MMD -MF $(@:.o=.d) -MT $@' _cflags_speed='-O2' _cflags_size='-Os' _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros' elif $_cc -V 2>&1 | grep -q Portland; then _type=pgi _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')" opt_common='-alias=ansi -Mdse -Mlre -Mpre' _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common" _cflags_size="-O2 -Munroll=c:1 $opt_common" _cflags_noopt="-O" _flags_filter=pgi_flags elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then _type=armasm _ident=$($_cc | head -n1) # 4509: "This form of conditional instruction is deprecated" _flags="-nologo -ignore 4509" _flags_filter=armasm_flags elif $_cc 2>&1 | grep -q Intel; then _type=icl _ident=$($_cc 2>&1 | head -n1) _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@' # Not only is O3 broken on 13.x+ but it is slower on all previous # versions (tested) as well. _cflags_speed="-O2" _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff if $_cc 2>&1 | grep -q Linker; then _ld_o='-out:$@' else _ld_o='-Fe$@' fi _cc_o='-Fo$@' _cc_e='-P' _flags_filter=icl_flags _ld_lib='lib%.a' _ld_path='-libpath:' # -Qdiag-error to make icl error when seeing certain unknown arguments _flags='-nologo -Qdiag-error:4044,10157' # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency # with MSVC which enables it by default. _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS -fp:precise' disable stripping elif $_cc -nologo- 2>&1 | grep -q Microsoft; then _type=msvc _ident=$($_cc 2>&1 | head -n1) _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)' _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs' _cflags_speed="-O2" _cflags_size="-O1" if $_cc -nologo- 2>&1 | grep -q Linker; then _ld_o='-out:$@' else _ld_o='-Fe$@' 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 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS' disable stripping 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 eval ${pfx}_ident=\$_ident } set_ccvars(){ eval ${1}_C=\${_cc_c-\${${1}_C}} eval ${1}_E=\${_cc_e-\${${1}_E}} eval ${1}_O=\${_cc_o-\${${1}_O}} if [ -n "$_depflags" ]; then eval ${1}_DEPFLAGS=\$_depflags else eval ${1}DEP=\${_DEPCMD:-\$DEPCMD} eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS} eval DEP${1}FLAGS=\$_flags fi } probe_cc cc "$cc" "true" cflags_filter=$_flags_filter cflags_speed=$_cflags_speed cflags_size=$_cflags_size cflags_noopt=$_cflags_noopt add_cflags $_flags $_cflags cc_ldflags=$_ldflags set_ccvars CC probe_cc hostcc "$host_cc" host_cflags_filter=$_flags_filter add_host_cflags $_flags $_cflags set_ccvars HOSTCC test -n "$cc_type" && enable $cc_type || warn "Unknown C compiler $cc, unable to select optimal CFLAGS" if $cxx -v 2>&1 | grep -qi ^gcc; then cxx_type=gxx gxx_version=$($cxx -dumpversion) elif $cxx --version 2>/dev/null | grep -q Intel; then cxx_type=icpc gxx_version="AV_STRINGIFY(__INTEL_COMPILER)" cxx_ident=$($cxx --version | head -n1) icpc_version=$($cxx -dumpversion) speed_cxxflags='-O3' size_cxxflags='-Os' noopt_cxxflags='-O1' elif $cxx --version 2>/dev/null | grep -q clang; then cxx_type=clangxx gxx_version="AV_STRINGIFY(__CLANG_COMPILER)" cxx_ident=$($cxx --version | head -n1) clangxx_version=$($cxx -dumpversion) speed_cxxflags='-O3' size_cxxflags='-Os' noopt_cxxflags='-O1' fi test -n "$cxx_type" && enable $cxx_type || warn "Unknown C++ compiler $cxx, unable to select optimal CXXFLAGS" : ${as_default:=$cc} : ${objcc_default:=$cc} : ${dep_cc_default:=$cc} : ${ld_default:=$cc} : ${host_ld_default:=$host_cc} set_default ar as objcc dep_cc ld host_ld windres probe_cc as "$as" asflags_filter=$_flags_filter add_asflags $_flags $_cflags set_ccvars AS probe_cc objcc "$objcc" objcflags_filter=$_flags_filter add_objcflags $_flags $_cflags set_ccvars OBJC probe_cc ld "$ld" ldflags_filter=$_flags_filter add_ldflags $_flags $_ldflags test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags LD_O=${_ld_o-$LD_O} LD_LIB=${_ld_lib-$LD_LIB} LD_PATH=${_ld_path-$LD_PATH} probe_cc hostld "$host_ld" host_ldflags_filter=$_flags_filter add_host_ldflags $_flags $_ldflags HOSTLD_O=${_ld_o-$HOSTLD_O} if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then probe_cc depcc "$dep_cc" CCDEP=${_DEPCMD:-$DEPCMD} CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS} DEPCCFLAGS=$_flags fi if $ar 2>&1 | grep -q Microsoft; then arflags="-nologo" ar_o='-out:$@' elif $ar 2>&1 | grep -q 'Texas Instruments'; then arflags="rq" ar_o='$@' elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then arflags='-Xany -r -c' ar_o='$@' elif $ar 2>&1 | grep -q "\[D\] "; then arflags="rcD" ar_o='$@' else arflags="rc" ar_o='$@' fi add_cflags $extra_cflags add_cxxflags $extra_cxxflags add_objcflags $extra_objcflags add_asflags $extra_cflags if test -n "$sysroot"; then case "$cc_type" in gcc|llvm_gcc|clang) add_cppflags --sysroot="$sysroot" add_ldflags --sysroot="$sysroot" # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking add_cppflags -isysroot "$sysroot" add_ldflags -isysroot "$sysroot" add_cxxppflags --sysroot="$sysroot" ;; tms470) add_cppflags -I"$sysinclude" add_ldflags --sysroot="$sysroot" add_cxxppflags -I"$sysinclude" ;; esac fi if test "$cpu" = host; then enabled cross_compile && die "--cpu=host makes no sense when cross-compiling." case "$cc_type" in gcc|llvm_gcc) check_native(){ $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return sed -n "/cc1.*$1=/{ s/.*$1=\\([^ ]*\\).*/\\1/ p q }" $TMPE } cpu=$(check_native -march || check_native -mcpu) ;; clang) check_native(){ $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return sed -n "/cc1.*-target-cpu /{ s/.*-target-cpu \\([^ ]*\\).*/\\1/ p q }" $TMPE } cpu=$(check_native -march) ;; esac if test "${cpu:-host}" = host ; then enable proc_opt_old cpu="$arch" fi test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc" fi # Deal with common $arch aliases case "$arch" in aarch64|arm64) arch="aarch64" ;; arm*|iPad*|iPhone*) arch="arm" ;; mips*|IP*) case "$arch" in *el) add_cppflags -EL add_ldflags -EL ;; *eb) add_cppflags -EB add_ldflags -EB ;; esac arch="mips" ;; parisc*|hppa*) arch="parisc" ;; "Power Macintosh"|ppc*|powerpc*) arch="ppc" ;; s390|s390x) arch="s390" ;; sh4|sh) arch="sh4" ;; sun4u|sparc*) arch="sparc" ;; tilegx|tile-gx) arch="tilegx" ;; i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64) arch="x86" ;; esac is_in $arch $ARCH_LIST || warn "unknown architecture $arch" enable $arch # if no tune setting and we know cpu class look at $processor if enabled proc_opt_old; then # first try to tune based on processor info # Intel i3, i5, i7 processors (EMT64T capable) if expr "$processor" : ".*Intel(R).*Core(TM) i[357] CPU.*" > /dev/null ; then cpu="core2" # EM64T era Intel Xeon elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*51[1-6][08]" > /dev/null ; then cpu="core2" elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*54[0-9][025]" > /dev/null ; then cpu="core2" elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*33[2567]0" > /dev/null ; then cpu="core2" elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*X32[123]0" > /dev/null ; then cpu="core2" # Various Intel Duo processors (EMT64T capable) elif expr "$processor" : ".*Intel(R).*Core(TM)2.*CPU" > /dev/null ; then cpu="core2" elif expr "$processor" : "*.Pentium(R) 5 CPU" > /dev/null ; then cpu="nocona" # EM64T compatible Intel Celeron elif expr "$processor" : ".*Celeron(R) D CPU" > /dev/null ; then cpu="nocona" enable small # Intel Core2 Duo elif expr "$processor" : ".*Genuine.*Intel.*CPU.*2160" > /dev/null ; then cpu="core2" # Intel Atom elif expr "$processor" : ".*Intel(R) Atom(TM)" > /dev/null ; then cpu="nocona" enable small # Reportedly Intel Duo, but we assume 32 bit P3 due to generic name elif expr "$processor" : ".*Genuine.*Intel.*CPU" > /dev/null ; then cpu="pentium3" # Pentium-M derivative in AppleTV, assume 32 bit P3 due to generic name elif expr "$processor" : ".*Genuine.*Intel.*processor" > /dev/null ; then cpu="pentium3" # P4 elif expr "$processor" : ".*Xeon(TM) CPU" > /dev/null ; then cpu="pentium4" elif expr "$processor" : ".*XEON(TM) CPU" > /dev/null ; then cpu="pentium4" elif expr "$processor" : ".*XEON(TM) MP CPU" > /dev/null ; then cpu="pentium4" elif expr "$processor" : "pentium4" > /dev/null ; then cpu="pentium4" elif expr "$processor" : ".*Pentium(R) [4D]" > /dev/null ; then cpu="pentium4" elif expr "$processor" : ".*Celeron(R) CPU" > /dev/null ; then cpu="pentium4" enable small # P6, which includes Intel Core elif expr "$processor" : ".*Intel P6 Family" > /dev/null ; then cpu="pentium4" # P3 elif expr "$processor" : "pentium3" > /dev/null ; then cpu="pentium3" elif expr "$processor" : ".*Pentium.* III" > /dev/null ; then cpu="pentium3" elif expr "$processor" : ".*Coppermine" > /dev/null ; then cpu="pentium3" enable small elif expr "$processor" : ".*Celeron(TM) CPU" > /dev/null ; then cpu="pentium3" enable small elif expr "$processor" : ".*Pentium(R) M" > /dev/null ; then cpu="pentium3" elif expr "$processor" : ".*Celeron(R) M processor" > /dev/null ; then cpu="pentium3" enable small # P2 elif expr "$processor" : "pentium2" > /dev/null ; then cpu="pentium2" elif expr "$processor" : ".*Mendocino" > /dev/null ; then cpu="pentium2" enable small elif expr "$processor" : ".*Klamath" > /dev/null ; then cpu="pentium2" enable small elif expr "$processor" : ".*Deschutes" > /dev/null ; then cpu="pentium2" enable small elif expr "$processor" : ".*Pentium II" > /dev/null ; then cpu="pentium2" enable small # AMD Turion elif expr "$processor" : ".*AMD Turion(tm) 64" > /dev/null ; then cpu="k8" # AMD Geode NX elif expr "$processor" : ".*AMD Geode(tm) NX" > /dev/null ; then cpu="athlon" enable small # Athlon 64 elif expr "$processor" : ".*AMD Athlon(tm) II" > /dev/null ; then cpu="k8" elif expr "$processor" : ".*AMD Athlon(tm) 64" > /dev/null ; then cpu="k8" elif expr "$processor" : ".*AMD Athlon(tm) Dual Core" > /dev/null ; then cpu="k8" elif expr "$processor" : ".*Athlon LE-16" > /dev/null ; then cpu="k8" # AMD Phenom elif expr "$processor" : ".*AMD Phenom(tm)" > /dev/null ; then cpu="barcelona" # AMD Opteron elif expr "$processor" : ".*AMD Opteron(tm)" >/dev/null ; then cpu="k8" # Athlon MP elif expr "$processor" : ".*AMD Athlon(tm) MP.*" > /dev/null ; then cpu="athlon-mp" # Athlon XP elif expr "$processor" : "athlon-xp" > /dev/null ; then cpu="athlon-xp" elif expr "$processor" : ".*AMD Athlon(tm) XP" > /dev/null ; then cpu="athlon-xp" elif expr "$processor" : ".*AMD Sempron(tm)" > /dev/null ; then cpu="athlon-xp" # Athlon elif expr "$processor" : "athlon" > /dev/null ; then cpu="athlon" elif expr "$processor" : ".*AMD Athlon(..)" > /dev/null ; then cpu="athlon" elif expr "$processor" : ".*AMD Duron(..)" > /dev/null ; then cpu="athlon" enable small # K6 elif expr "$processor" : ".*AMD-K6(tm) 3D" > /dev/null ; then cpu="k6" enable small # Transmeta Crusoe elif expr "$processor" : ".*Crusoe(m) Processor TM5600" > /dev/null ; then cpu="pentium2" # c3-2 elif expr "$processor" : ".*VIA Esther" > /dev/null ; then cpu="c3-2" enable small elif expr "$processor" : ".*VIA Nehemiah" > /dev/null ; then cpu="c3-2" enable small # c3 elif expr "$processor" : ".*VIA.*Ezra" > /dev/null ; then cpu="c3" enable small elif expr "$processor" : ".*VIA Samuel" > /dev/null ; then cpu="c3" enable small # if no known processor info, tune base on uname -m info else enable proc_error_msg fi fi if enabled proc_error_msg; then UNAME_M_INFO=` uname -m 2> /dev/null` UNAME_P_INFO=` uname -p 2> /dev/null` PROC_INFO=`cat /proc/cpuinfo | grep "model name" | head -n 1 | sed s/"\t"//g 2>/dev/null` PROC_FLAG=`cat /proc/cpuinfo | grep "flags" | head -n 1 | sed s/"\t"//g 2>/dev/null` echo "" echo " *** WARNING *** " echo " Your CPU was not detected properly:" echo " uname -m: $UNAME_M_INFO" echo " uname -p: $UNAME_P_INFO" echo " $PROC_INFO" echo " $PROC_FLAG" echo "" echo " If you are using a recent checkout from " echo " https://github.com/MythTV/mythtv " echo " please e-mail the above to mythtv-dev@mythtv.org" echo " With the subject \"configure did not detect my cpu\"" echo "" fi if test $target_os = "darwin"; then # Apple GCC doesn't support march=core2 yet: if test $cpu = "core2"; then cpu="nocona" fi # Core Duo might be identified as march=pentium3, which errors: # ...MachineExceptions.h:... error: '__m128i' does not name a type # ...MachineExceptions.h:... error: '__m128i' does not name a type if test $cpu = "pentium3"; then cpu=prescott fi fi # Add processor-specific flags if enabled aarch64; then case $cpu in armv*) cpuflags="-march=$cpu" ;; *) cpuflags="-mcpu=$cpu" ;; esac elif enabled alpha; then cpuflags="-mcpu=$cpu" elif enabled arm; then check_arm_arch() { check_cpp_condition stddef.h \ "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \ $cpuflags } probe_arm_arch() { if check_arm_arch 4; then echo armv4; elif check_arm_arch 4T; then echo armv4t; elif check_arm_arch 5; then echo armv5; elif check_arm_arch 5E; then echo armv5e; elif check_arm_arch 5T; then echo armv5t; elif check_arm_arch 5TE; then echo armv5te; elif check_arm_arch 5TEJ; then echo armv5te; elif check_arm_arch 6; then echo armv6; elif check_arm_arch 6J; then echo armv6j; elif check_arm_arch 6K; then echo armv6k; elif check_arm_arch 6Z; then echo armv6z; elif check_arm_arch 6ZK; then echo armv6zk; elif check_arm_arch 6T2; then echo armv6t2; elif check_arm_arch 7; then echo armv7; elif check_arm_arch 7A 7_A; then echo armv7-a; elif check_arm_arch 7S; then echo armv7-a; elif check_arm_arch 7R 7_R; then echo armv7-r; elif check_arm_arch 7M 7_M; then echo armv7-m; elif check_arm_arch 7EM 7E_M; then echo armv7-m; elif check_arm_arch 8A 8_A; then echo armv8-a; fi } [ "$cpu" = generic ] && cpu=$(probe_arm_arch) case $cpu in armv*) cpuflags="-march=$cpu" subarch=$(echo $cpu | sed 's/[^a-z0-9]//g') ;; *) cpuflags="-mcpu=$cpu" case $cpu in cortex-a*) subarch=armv7a ;; cortex-r*) subarch=armv7r ;; cortex-m*) enable thumb; subarch=armv7m ;; arm11*) subarch=armv6 ;; arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;; armv4*|arm7*|arm9[24]*) subarch=armv4 ;; *) subarch=$(probe_arm_arch) ;; esac ;; esac case "$subarch" in armv5t*) enable fast_clz ;; armv[6-8]*) enable fast_clz disabled fast_unaligned || enable fast_unaligned ;; esac elif enabled avr32; then case $cpu in ap7[02]0[0-2]) subarch="avr32_ap" cpuflags="-mpart=$cpu" ;; ap) subarch="avr32_ap" cpuflags="-march=$cpu" ;; uc3[ab]*) subarch="avr32_uc" cpuflags="-mcpu=$cpu" ;; uc) subarch="avr32_uc" cpuflags="-march=$cpu" ;; esac elif enabled bfin; then cpuflags="-mcpu=$cpu" elif enabled mips; then cpuflags="-march=$cpu" case $cpu in 24kc) disable mips32r6 disable mips64r2 disable mips64r6 disable mipsfpu disable mipsdsp disable mipsdspr2 disable msa ;; 24kf*) disable mips32r6 disable mips64r2 disable mips64r6 disable mipsdsp disable mipsdspr2 disable msa ;; 24kec|34kc|1004kc) disable mips32r6 disable mips64r2 disable mips64r6 disable mipsfpu disable mipsdspr2 disable msa ;; 24kef*|34kf*|1004kf*) disable mips32r6 disable mips64r2 disable mips64r6 disable mipsdspr2 disable msa ;; 74kc) disable mips32r6 disable mips64r2 disable mips64r6 disable mipsfpu disable msa ;; 74kf) disable mips32r6 disable mips64r2 disable mips64r6 disable msa ;; p5600) disable mips32r6 disable mips64r2 disable mips64r6 disable mipsdsp disable mipsdspr2 check_cflags "-mtune=p5600" && check_cflags "-mfp64 -msched-weight -mload-store-pairs -funroll-loops" && add_asflags "-mfp64" ;; i6400) disable mips32r2 disable mips32r6 disable mips64r2 disable mipsdsp disable mipsdspr2 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-mfp64 -msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" && add_asflags "-mfp64" ;; loongson*) disable mips32r2 disable mips32r6 disable mips64r2 disable mips64r6 disable mipsfpu disable mipsdsp disable mipsdspr2 disable msa enable local_aligned_8 local_aligned_16 local_aligned_32 enable simd_align_16 enable fast_64bit enable fast_clz enable fast_cmov enable fast_unaligned disable aligned_stack case $cpu in loongson3*) cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations" ;; loongson2e) cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations" ;; loongson2f) cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations" ;; esac ;; generic) disable mips64r6 disable msa ;; *) # Unknown CPU. Disable everything. warn "unknown CPU. Disabling all MIPS optimizations." disable mipsfpu disable mips32r2 disable mips32r6 disable mips64r2 disable mips64r6 disable mipsdsp disable mipsdspr2 disable msa ;; esac elif enabled ppc; then disable ldbrx case $(tolower $cpu) in 601|ppc601|powerpc601) cpuflags="-mcpu=601" disable altivec ;; 603*|ppc603*|powerpc603*) cpuflags="-mcpu=603" disable altivec ;; 604*|ppc604*|powerpc604*) cpuflags="-mcpu=604" disable altivec ;; g3|75*|ppc75*|powerpc75*) cpuflags="-mcpu=750" disable altivec ;; g4|745*|ppc745*|powerpc745*) cpuflags="-mcpu=7450" disable vsx ;; 74*|ppc74*|powerpc74*) cpuflags="-mcpu=7400" disable vsx ;; g5|970|ppc970|powerpc970) cpuflags="-mcpu=970" disable vsx ;; power[3-6]*) cpuflags="-mcpu=$cpu" disable vsx ;; power[7-8]*) cpuflags="-mcpu=$cpu" ;; cell) cpuflags="-mcpu=cell" enable ldbrx disable vsx ;; e500mc) cpuflags="-mcpu=e500mc" disable altivec ;; e500v2) cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double" disable altivec disable dcbzl ;; e500) cpuflags="-mcpu=8540 -mhard-float" disable altivec disable dcbzl ;; esac elif enabled sparc; then case $cpu in cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789]) cpuflags="-mcpu=$cpu" ;; ultrasparc*|niagara[234]) cpuflags="-mcpu=$cpu" ;; esac elif enabled x86; then case $cpu in i[345]86|pentium) cpuflags="-march=$cpu" disable i686 disable mmx ;; # targets that do NOT support nopl and conditional mov (cmov) pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3) cpuflags="-march=$cpu" disable i686 ;; # targets that do support nopl and conditional mov (cmov) i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\ |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*) cpuflags="-march=$cpu" enable i686 enable fast_cmov ;; # targets that do support conditional mov but on which it's slow pentium4|pentium4m|prescott|nocona) cpuflags="-march=$cpu" enable i686 disable fast_cmov ;; esac fi # if architecture specific flags don't work blank them if test -n "$cpuflags"; then tmp_cpuflags="$cpuflags" check_cc $cpuflags < EOF check_cc -D_LARGEFILE_SOURCE < EOF check_cxx -D_FILE_OFFSET_BITS=64 < EOF check_cxx -D_LARGEFILE_SOURCE < EOF add_host_cppflags -D_ISOC99_SOURCE check_host_cflags -std=c99 check_host_cflags -Wall check_host_cflags -O3 check_64bit(){ arch32=$1 arch64=$2 expr=$3 check_code cc "" "int test[2*($expr) - 1]" && subarch=$arch64 || subarch=$arch32 } case "$arch" in aarch64|alpha|ia64) spic=$shared ;; mips) check_64bit mips mips64 '_MIPS_SIM > 1' spic=$shared ;; parisc) check_64bit parisc parisc64 'sizeof(void *) > 4' spic=$shared ;; ppc) check_64bit ppc ppc64 'sizeof(void *) > 4' spic=$shared ;; s390) check_64bit s390 s390x 'sizeof(void *) > 4' spic=$shared ;; sparc) check_64bit sparc sparc64 'sizeof(void *) > 4' spic=$shared ;; x86) check_64bit x86_32 x86_64 'sizeof(void *) > 4' # Treat x32 as x64 for now. Note it also needs spic=$shared test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' && subarch=x86_64 if test "$subarch" = "x86_64"; then spic=$shared fi ;; ppc) check_cc < mapfile && add_ldflags -Wl,-M,mapfile add_cxxppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 nm_default='nm -P -g' SLIB_CREATE_DEF_CMD='$(Q)perl $(SRC_PATH)/compat/solaris/make_sunver.pl $$(filter %.ver,$$^) $(OBJS) | grep -v @ > $(SUBDIR)lib$(NAME).ver-sol2' ;; netbsd) disable symver oss_indev_extralibs="-lossaudio" oss_outdev_extralibs="-lossaudio" enabled gcc || check_ldflags -Wl,-zmuldefs add_cppflags -D_XOPEN_SOURCE=600 add_cxxppflags -D_XOPEN_SOURCE=600 ;; openbsd|bitrig) disable symver SHFLAGS='-shared' SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)' SLIB_INSTALL_LINKS= oss_indev_extralibs="-lossaudio" oss_outdev_extralibs="-lossaudio" ;; dragonfly) disable symver ;; freebsd) append CCONFIG "freebsd" # Workaround compile errors from missing u_int/uint def CPPFLAGS=`echo $CPPFLAGS | sed 's/-D_POSIX_C_SOURCE=200112//'` disable ivtv disable v4l2 enable backend ;; bsd/os) add_extralibs -lpoll -lgnugetopt strip="strip -d" ;; darwin) enable appleremote enable backend enable darwin disable dvb disable v4l1 disable v4l2 disable x11 # Workaround compile errors from missing u_int/uint def CFLAGS=`echo $CFLAGS | sed 's/-D_POSIX_C_SOURCE=200112//'` CPPFLAGS=`echo $CPPFLAGS | sed 's/-D_POSIX_C_SOURCE=200112//'` # Workaround compile errors from missing ru_maxrss add_cppflags -D_DARWIN_C_SOURCE ###### Standard ffmpeg configure stuff follows: enabled ppc && add_asflags -force_cpusubtype_ALL #Need to add @rpath in front of install name so test unit can use non-installed lib SHFLAGS='-headerpad_max_install_names -dynamiclib -Wl,-single_module -Wl,-install_name,@rpath/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)' enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress strip="${strip} -x" add_ldflags -Wl,-dynamic,-search_paths_first SLIBSUF=".dylib" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)' objformat="macho" enabled x86_64 && objformat="macho64" enabled_any pic shared x86_64 || { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; } ;; msys*) die "Native MSYS builds are discouraged, please use the MINGW environment."; ;; mingw32*|mingw64*) enable backend disable bindings_perl disable bindings_python disable bindings_php disable dv1394 disable dvb disable ceton enable memalign_hack disable mythtranscode disable network enable opengl if enabled wince; then disable protocols fi disable symver disable v4l1 disable v4l2 enable windows disable x11 disable qtdbus disable libuuid disable ffserver ###### Standard ffmpeg configure stuff follows: if test $target_os = "mingw32ce"; then disable network else target_os=mingw32 fi decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32" decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32" LIBTARGET=i386 if enabled x86_64; then LIBTARGET="i386:x86-64" elif enabled arm; then LIBTARGET=arm-wince fi enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres enabled x86_32 && check_ldflags -Wl,--large-address-aware shlibdir_default="$bindir_default" SLIBPREF="libmyth" SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)' dlltool="${cross_prefix}dlltool" if check_cmd lib.exe -list ; then SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)' else 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)' fi SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \ install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \ install -d "$(LIBDIR)"; \ install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"' SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"' 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' objformat="win32" ranlib=: enable dos_paths check_ldflags -Wl,--nxcompat,--dynamicbase # Lets work around some stupidity in binutils. # ld will strip relocations from executables even though we need them # for dynamicbase (ASLR). Using -pie does retain the reloc section # however ld then forgets what the entry point should be (oops) so we # have to manually (re)set it. if enabled x86_32; then add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup elif enabled x86_64; then add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup check_ldflags -Wl,--high-entropy-va # binutils 2.25 # Set image base >4GB for extra entropy with HEASLR add_ldexeflags -Wl,--image-base,0x140000000 append SHFLAGS -Wl,--image-base,0x180000000 fi add_extralibs -lws2_32 # Workaround compile errors due -std=c++98 incompatible system headers ECXXFLAGS=`echo $ECXXFLAGS | sed 's/-std=c++98//'` ;; 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 both shared and static libs with MSVC or icl. disable static fi enabled x86_32 && check_ldflags -LARGEADDRESSAWARE shlibdir_default="$bindir_default" SLIBPREF="libmyth" SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 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)' SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' objformat="win32" ranlib=: enable dos_paths ;; cygwin*) enable cygwin enable windows target_os=cygwin shlibdir_default="$bindir_default" SLIBPREF="cygmyth" SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS= SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a' SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a' objformat="win32" enable dos_paths enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres ;; *-dos|freedos|opendos) disable ffplay ffserver disable $INDEV_LIST $OUTDEV_LIST network_extralibs="-lsocket" objformat="coff" enable dos_paths add_cppflags -U__STRICT_ANSI__ ;; linux) enable dv1394 enable section_data_rel_ro append CCONFIG "linux" enable backend ! disabled joystick_menu && enable joystick_menu enable libudev enable libuuid enable pic ;; irix*) target_os=irix ranlib="echo ignoring ranlib" ;; os/2*) strip="lxlite -CS" ln_s="cp -f" objformat="aout" add_cppflags -D_GNU_SOURCE add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' LIBSUF="_s.a" SLIBPREF="myth" SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)' SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \ echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \ echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \ echo EXPORTS >> $(SUBDIR)$(NAME).def; \ emxexp $(OBJS) >> $(SUBDIR)$(NAME).def' SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \ emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;' SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"' SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib' enable dos_paths enable_weak os2threads ;; gnu/kfreebsd) add_cppflags -D_BSD_SOURCE ;; gnu) ;; qnx) add_cppflags -D_QNX_SOURCE network_extralibs="-lsocket" ;; symbian) SLIBSUF=".dll" enable dos_paths add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS add_ldflags -Wl,--target1-abs,--no-undefined \ -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \ -Wl,--entry=_E32Startup -Wl,-u,_E32Startup add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \ -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \ -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib ;; osf1) add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT ;; minix) ;; plan9) add_cppflags -D_C99_SNPRINTF_EXTENSION \ -D_REENTRANT_SOURCE \ -D_RESEARCH_SOURCE \ -DFD_SETSIZE=96 \ -DHAVE_SOCK_OPTS add_compat strtod.o strtod=avpriv_strtod network_extralibs='-lbsd' exeobjs=compat/plan9/main.o disable ffserver cp_f='cp' ;; none) ;; *) die "Unknown OS '$target_os'." ;; esac # test if creating links works link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX) link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX) mkdir "$link_dest" $ln_s "$link_dest" "$link_name" touch "$link_dest/test_file" if [ "$source_path" != "." ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then # create link to source path [ -e src ] && rm src $ln_s "$source_path" src source_link=src else # creating directory links doesn't work # fall back to using the full source path source_link="$source_path" fi # cleanup rm -r "$link_dest" rm -r "$link_name" # determine libc flavour 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 if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then add_compat msvcrt/snprintf.o add_cflags "-include $source_path/compat/msvcrt/snprintf.h" fi 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: 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 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then if [ "$pfx" = host_ ]; then add_host_cppflags -Dsnprintf=_snprintf else add_compat strtod.o strtod=avpriv_strtod add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \ _snprintf=avpriv_snprintf \ vsnprintf=avpriv_vsnprintf fi fi # 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. # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop # family. For these cases, configure is free to use any functions # found in the SDK headers by default. (Alternatively, we could force # _WIN32_WINNT to 0x0602 in that case.) check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" || { check_${pfx}cpp < #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #error not desktop #endif #endif EOF 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 check_${pfx}cc < void *v = localtime_r; EOF test "$?" != 0 && check_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 < void *v = localtime_r; EOF } 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) if test $target_os != android ; then add_compat strtod.o strtod=avpriv_strtod fi ;; esac # hacks for compiler/libc/os combinations 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_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED add_cflags -pds=48 # incompatible redefinition of macro fi if enabled_all ccc libc_glibc; then add_ldflags -Wl,-z,now # calls to libots crash without this fi check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" || add_cppflags '-I\$(SRC_PATH)/compat/float' esc(){ echo "$*" | sed 's/%/%25/g;s/:/%3a/g' } echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic set_default libdir : ${shlibdir_default:="$libdir"} : ${pkgconfigdir_default:="$libdir/pkgconfig"} set_default $PATHS_LIST set_default nm set_default $MYTHTV_PATHS_LIST if test $target_os = android ; then append CONFIG_INCLUDEPATH $sysinclude "${sysroot}${prefix}" fi append CCONFIG "$compile_type" if test x$compile_type = x"profile" ; then add_cflags -DNDEBUG add_cxxflags -DNDEBUG enable debug disable stripping enable profiletype elif test x$compile_type = x"debug"; then enable debug disable optimizations stripping enable debugtype fi enabled silent_cc && append CCONFIG "silent" # we need to build at least one lib type if ! enabled_any static shared; then cat <&1 | egrep -q -e 'Qt version 5\.(([1-9][0-9]+)|[2-9])\.[0-9]' } # qmake-qt5 /usr/lib64/qt5/bin/qmake /usr/lib/x86_64-linux-gnu/qt5/bin/qmake if [ x"$qmake" = "xqmake" ]; then CHECK_QMAKE=`which qmake-qt5 2>&1`" /usr/lib64/qt5/bin/qmake /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /usr/lib/i386-linux-gnu/qt5/bin/qmake /usr/lib/arm-linux-gnueabihf/qt5/bin/qmake /usr/local/lib/qt5/bin/qmake `which $qmake 2>&1`" else CHECK_QMAKE=`which $qmake 2>&1`" "`which qmake-qt5 2>&1`" /usr/lib64/qt5/bin/qmake /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /usr/lib/i386-linux-gnu/qt5/bin/qmake /usr/lib/arm-linux-gnueabihf/qt5/bin/qmake /usr/local/lib/qt5/bin/qmake" fi # try to find a qt5 qmake to use found_qmake='' for i in $CHECK_QMAKE; do if test -e $i ; then if is_qmake5 $i; then found_qmake=$i check_cxxflags -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 break; else echo "found qmake at $i but version failed" echo "got version: " `$i --version` fi fi done if [ x"$found_qmake" = "x" ]; then die "qmake for Qt5.2 or newer not found.\nPlease specify the correct qmake with --qmake=" else qmake=$found_qmake fi if test x"$qmakespecs" != x; then qmakeconf="$qmake -spec $qmakespecs" else qmakeconf="$qmake" fi check_cc <= 30"; then enable vfp_args elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then case "${cross_prefix:-$cc}" in *hardfloat*) enable vfp_args; fpabi=vfp ;; *) check_ld "cc" < int main (void) { double fval ; int k, ival ; fval = 1.0 * 0x7FFFFFFF ; for (k = 0 ; k < 100 ; k++) { ival = (lrint (fval)) >> 24 ; if (ival != 127) return 1 ; fval *= 1.2499999 ; } ; return 0 ; } EOF # test negative wrap check_exec -lm << EOF && enable cpu_clips_negative #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include int main (void) { double fval ; int k, ival ; fval = -8.0 * 0x10000000 ; for (k = 0 ; k < 100 ; k++) { ival = (lrint (fval)) >> 24 ; if (ival != -128) return 1 ; fval *= 1.2499999 ; } ; return 0 ; } EOF # required to compile inline sse with some compilers enabled x86 && enabled sse2 && add_cxxflags "-msse" # test for distcc enabled distcc && check_cmd distcc --version || disable distcc if enabled distcc; then XYZ=`which $cc` if test x"$XYZ" != x"" -a x"`ls -l $XYZ | grep distcc`" != x""; then distcc="symlink" distcc_txt=" $cc" fi fi # test for ccache enabled ccache && check_cmd ccache -V || disable ccache if enabled ccache; then XYZ=`which $cc` if test x"$XYZ" != x"" -a x"`ls -l $XYZ | grep ccache`" != x""; then ccache="symlink" ccache_txt=" $cc" fi fi # ccache should be used before distcc for better cache coherency if enabled distcc; then if disabled ccache; then cc="distcc $cc" cxx="distcc $cxx" elif enabled ccache; then cc="ccache distcc $cc" cxx="ccache distcc $cxx" else disable distcc distcc_txt="t using distcc explicitly, since ccache symlink is present" fi else if enabled ccache; then cc="ccache $cc" cxx="ccache $cxx" fi fi check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)" check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)" check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()" check_builtin MemoryBarrier windows.h "MemoryBarrier()" check_builtin sarestart signal.h "SA_RESTART" check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)" check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)" check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)" case "$custom_allocator" in jemalloc) # jemalloc by default does not use a prefix require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc ;; tcmalloc) require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc malloc_prefix=tc_ ;; esac check_func_headers malloc.h _aligned_malloc && enable aligned_malloc check_func ${malloc_prefix}memalign && enable memalign check_func ${malloc_prefix}posix_memalign && enable posix_memalign check_func access check_func arc4random check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; } check_func fcntl check_func fork check_func gethrtime check_func getopt check_func getrusage check_func gettimeofday check_func isatty check_func mach_absolute_time check_func mkstemp check_func mmap check_func mprotect # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; } check_func sched_getaffinity check_func setrlimit check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE check_func strerror_r check_func sysconf check_func sysctl check_func usleep check_func_headers conio.h kbhit check_func_headers io.h setmode check_func_headers lzo/lzo1x.h lzo1x_999_compress check_func_headers stdlib.h getenv check_func_headers sys/stat.h lstat check_func_headers windows.h CoTaskMemFree -lole32 check_func_headers windows.h GetProcessAffinityMask check_func_headers windows.h GetProcessTimes check_func_headers windows.h GetSystemTimeAsFileTime check_func_headers windows.h MapViewOfFile check_func_headers windows.h PeekNamedPipe check_func_headers windows.h SetConsoleTextAttribute check_func_headers windows.h SetConsoleCtrlHandler check_func_headers windows.h Sleep check_func_headers windows.h VirtualAlloc check_struct windows.h "CONDITION_VARIABLE" Ptr check_func_headers glob.h glob enabled xlib && check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext check_header direct.h check_header dirent.h check_header dlfcn.h check_header d3d11.h check_header dxva.h check_header dxva2api.h -D_WIN32_WINNT=0x0600 check_header fcntl.h check_header io.h check_header libcrystalhd/libcrystalhd_if.h check_header mach/mach_time.h check_header malloc.h check_header net/udplite.h check_header poll.h check_header sys/mman.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_header vdpau/vdpau.h check_header vdpau/vdpau_x11.h check_header VideoDecodeAcceleration/VDADecoder.h check_header VideoToolbox/VideoToolbox.h check_header windows.h #check_header X11/extensions/XvMClib.h check_header asm/types.h #Myth check for MYTHTV_HAVE_LIST check_header byteswap.h check_header sys/endian.h check_header va/va.h check_header va/va_x11.h check_header va/va_glx.h check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex check_func posix_fadvise check_func_headers sys/timeb.h ftime check_func_headers "sys/types.h sys/socket.h ifaddrs.h" getifaddrs check_func_headers sys/time.h gettimeofday #End MythTV check check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi check_lib "CoreServices/CoreServices.h" UTGetOSTypeFromString "-framework CoreServices" check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 check_type "windows.h d3d11.h" "ID3D11VideoDecoder" check_type "windows.h d3d11.h" "ID3D11VideoContext" check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602 check_type "va/va.h" "VAPictureParameterBufferHEVC" check_type "va/va.h" "VADecPictureParameterBufferVP9" check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC" check_cpp_condition windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" && enable winrt || disable winrt # check for OpenMAX header & lib if enabled openmax ; then openmax_was_enabled=Y fi if ! disabled openmax; then test -f /opt/vc/include/IL/OMX_Core.h && enable openmax fi if ! disabled openmax; then if test -f /opt/vc/include/IL/OMX_Broadcom.h \ && test -f /opt/vc/lib/libopenmaxil.so ; then enable openmax_broadcom elif test -f /usr/include/bellagio/omxcore.h \ && test -f /usr/lib/libomxil-bellagio.so; then enable openmax_bellagio else disable openmax fi fi if test "$openmax_was_enabled" = "Y" && disabled openmax ; then die "ERROR - Unable to enable openmax" fi if ! disabled w32threads && ! enabled pthreads; then check_func_headers "windows.h process.h" _beginthreadex && enable w32threads || disable w32threads if ! enabled w32threads && enabled winrt; then check_func_headers "windows.h" CreateThread && enable w32threads || disable w32threads fi 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 && ! enabled os2threads; then enable pthreads if check_func pthread_join -pthread && check_func pthread_create -pthread; then add_cflags -pthread add_cxxflags -pthread add_extralibs -pthread elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then add_cflags -pthreads add_cxxflags -pthread add_extralibs -pthreads elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then add_cflags -ldl -pthread add_extralibs -ldl -pthread elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then add_extralibs -lpthreadGC2 elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then : elif ! check_func pthread_join && ! check_func pthread_create; then disable pthreads fi check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads fi if enabled pthreads; then check_func pthread_cancel fi enabled ffmpeg_pthreads && enable pthreads # Check for libuuid for zeromq enabled mythlogserver || disable libuuid if enabled libuuid ; then check_lib uuid/uuid.h uuid_generate -luuid || disable libuuid if disabled libuuid ; then die "ERROR: can not find libuuid. (debian uuid-dev; RedHat libuuid-devel)" fi fi # Check for taglib for libmythmetadata if enabled taglib; then taglib_minor="0" if test x`which taglib-config` != x"" ; then taglib_minor=`taglib-config --version | cut -d. -f2` if test x"$taglib_minor" = x"" ; then echo "Can't find taglib-config. Assuming 1.7 or later." taglib_minor="7" fi if test $target_os = android ; then tagprefix=`taglib-config --prefix` else tagprefix=${sysroot}`taglib-config --prefix` fi tagincludes="-I${tagprefix}/include" taglibs=`taglib-config --libs` fi if test $taglib_minor -lt 7 || ! check_class_headers_cpp "taglib/fileref.h stdlib.h" TagLib::FileRef $tagincludes $taglibs -lstdc++; then die "ERROR: cannot find taglib 1.7 or later." fi fi # Attempt to use libudev for mediamonitor enabled libudev && check_lib2 libudev.h udev_new -ludev || disable libudev # libmythbluray antbin="" if enabled bdjava; then enabled x86_64 && java_arch=amd64 enabled x86_32 && java_arch=i386 enabled arm && java_arch=arm antbin=`which ant` if test x"$antbin" = x"" ; then die "ERROR: BD-J requires ANT, but ant was not found. Please install it." fi if test "$bdj_type" = "j2me"; then enable bdj_j2me fi # Probably makes little sense to try to process Bluray menus without fontconfig enable fontconfig fi disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib disabled lzma || check_lib2 lzma.h lzma_version_number -llzma || disable lzma check_lib math.h sin -lm && LIBM="-lm" disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd atan2f_args=2 copysign_args=2 hypot_args=2 ldexpf_args=2 powf_args=2 for func in $MATH_FUNCS; do eval check_mathfunc $func \${${func}_args:-1} done for func in $COMPLEX_FUNCS; do eval check_complexfunc $func \${${func}_args:-1} done # these are off by default, so fail if requested and not available enabled avfoundation_indev && { check_header_objcc AVFoundation/AVFoundation.h || disable avfoundation_indev; } enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics || check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; } enabled avisynth && { { check_lib2 "windows.h" LoadLibrary; } || { check_lib2 "dlfcn.h" dlopen -ldl; } || die "ERROR: LoadLibrary/dlopen not found for avisynth"; } enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint enabled decklink && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; } enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; } enabled gmp && require2 gmp gmp.h mpz_export -lgmp enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init enabled ladspa && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; } enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 #enabled libass && require_pkg_config libass ass/ass.h ass_library_init enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 && { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 || die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } enabled libcaca && require_pkg_config caca caca.h caca_create_canvas enabled libdcadec && require_pkg_config "dcadec >= 0.1.0" libdcadec/dca_context.h dcadec_context_create enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac enabled libfdk_aac && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen || { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && warn "using libfdk without pkg-config"; } } 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" enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs enabled fontconfig && enable libfontconfig enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit enabled libfreetype && require_libfreetype enabled libfribidi && require_pkg_config fribidi fribidi.h fribidi_version_info enabled libgme && require libgme gme/gme.h gme_new_emu -lgme -lstdc++ enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do check_lib "${gsm_hdr}" gsm_create -lgsm && break; done || die "ERROR: libgsm not found"; } enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame enabled libnut && require libnut libnut.h nut_demuxer_init -lnut 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 && require_pkg_config opencv opencv2/core/core_c.h cvCreateImageHeader || require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader; } enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion enabled libopenjpeg && { check_lib openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC || check_lib openjpeg-2.0/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC || check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC || check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC || die "ERROR: libopenjpeg not found"; } enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create enabled libpulse && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket enabled librubberband && require_pkg_config "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init enabled libshine && require_pkg_config shine shine/layer3.h shine_encode_buffer enabled libsmbclient && { use_pkg_config smbclient libsmbclient.h smbc_init || require smbclient libsmbclient.h smbc_init -lsmbclient; } enabled libsnappy && require snappy snappy-c.h snappy_compress -lsnappy enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr" enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex enabled libtesseract && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame && { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++ enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl enabled libvidstab && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg enabled libvpx && { enabled libvpx_vp8_decoder && { use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx || check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx || die "ERROR: libvpx decoder version must be >=0.9.1"; } enabled libvpx_vp8_encoder && { use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx || check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx || die "ERROR: libvpx encoder version must be >=0.9.7"; } enabled libvpx_vp9_decoder && { use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx || check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; } enabled libvpx_vp9_encoder && { use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx || check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || disable libvpx_vp9_encoder; } if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then die "libvpx enabled but no supported decoders found" fi } enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack enabled libwebp && { enabled libwebp_encoder && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } } enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode || { require libx264 x264.h x264_encoder_encode -lx264 && warn "using libx264 without pkg-config"; } } && { check_cpp_condition x264.h "X264_BUILD >= 118" || die "ERROR: libx264 must be installed and version must be >= 0.118."; } && { check_cpp_condition x264.h "X264_MPEG2" && enable libx262; } enabled libx265 && require_pkg_config x265 x265.h x265_api_get && { check_cpp_condition x265.h "X265_BUILD >= 68" || die "ERROR: libx265 version must be >= 68."; } enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore enabled libzimg && require_pkg_config zimg zimg.h zimg_get_api_version enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi && { check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" || enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; } enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host || { ! enabled cross_compile && { add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ; add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ; check_lib interface/mmal/mmal.h mmal_port_connect ; } check_lib interface/mmal/mmal.h mmal_port_connect ; } || die "ERROR: mmal not found"; } enabled mmal && (check_code cc interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS" || die "ERROR: mmal firmware headers too old") enabled netcdf && require_pkg_config netcdf netcdf.h nc_inq_libvers enabled nvenc && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } && { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" || die "ERROR: NVENC API version 4 or older is not supported"; } && { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; } enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } || die "ERROR: openal not found"; } && { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" || die "ERROR: openal must be installed and version must be 1.1 or compatible"; } enabled opencl && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL || check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL || die "ERROR: opencl not found"; } && { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" || check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" || die "ERROR: opencl must be installed and version must be 1.2 or compatible"; } enabled opengl && { check_lib GL/glx.h glXGetProcAddress "-lGL" || check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" || check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" || check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" || check_lib2 GLES/gl.h glGetError "-Wl,-framework,OpenGLES" || { check_lib2 GLES2/gl2.h glGetError "-lGLESv2" && check_lib2 EGL/egl.h eglGetProcAddress "-lEGL" } || die "ERROR: opengl not found." } enabled openssl && { use_pkg_config openssl openssl/ssl.h SSL_library_init || check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto || check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 || check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 || die "ERROR: openssl not found"; } enabled qtkit_indev && { check_header_objcc QTKit/QTKit.h || disable qtkit_indev; } if enabled libmpeg2external; then check_lib mpeg2dec/mpeg2.h mpeg2_init -lmpeg2 || disable libmpeg2external if disabled libmpeg2external; then die "Warning! No suitable external libmpeg2 found, use internal copy." fi disable mythtranscode fi # libdc1394 check if enabled libdc1394; then { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new && enable libdc1394_2; } || { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 && enable libdc1394_1; } || die "ERROR: No version of libdc1394 found " fi if enabled gcrypt; then GCRYPT_CONFIG="${cross_prefix}libgcrypt-config" if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags) gcrypt_libs=$("${GCRYPT_CONFIG}" --libs) check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_libs || die "ERROR: gcrypt not found" add_cflags $gcrypt_cflags && add_extralibs $gcrypt_libs else require2 gcrypt gcrypt.h gcry_mpi_new -lgcrypt fi fi check_header stdint.h # test for lrint in math.h check_exec < int main( void ) { return (lrint(3.999f) > 0)?0:1; } EOF #test for round() check_exec < int main( void ) { return (round(3.999f) > 0)?0:1; } EOF # test for sync_file_range (linux only system call since 2.6.17) check_ld "cc" < int main(int argc, char **argv){ sync_file_range(0,0,0,0); return 0; } EOF # test for sizeof(int) for sizeof in 1 2 4 8 16; do check_cc <= 0x010201" $sdl_cflags && check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags && enable sdl else if "${SDL_CONFIG}" --version > /dev/null 2>&1; then sdl_cflags=$("${SDL_CONFIG}" --cflags) sdl_libs=$("${SDL_CONFIG}" --libs) check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs && check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags && check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags && enable sdl elif enabled sdl ; then die "ERROR: SDL not found" else disable sdl fi fi if test $target_os = "mingw32"; then sdl_libs="$sdl_libs -mconsole" fi fi enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && check_lib2 "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && enable securetransport; } disabled schannel || { check_func_headers "windows.h Security.h" InitializeSecurityContext -DSECURITY_WIN32 -lSecur32 && enable schannel && add_extralibs -lSecur32; } makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo enabled makeinfo \ && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \ && enable makeinfo_html || disable makeinfo_html disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html perl -v > /dev/null 2>&1 && enable perl || disable perl 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_header linux/fb.h check_header linux/videodev.h check_header linux/videodev2.h check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete check_header sys/videoio.h check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs" # check that WM_CAP_DRIVER_CONNECT is defined to the proper value # w32api 3.12 had it defined wrong check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines check_type "dshow.h" IBaseFilter # check for ioctl_meteor.h, ioctl_bt848.h and alternatives { check_header dev/bktr/ioctl_meteor.h && check_header dev/bktr/ioctl_bt848.h; } || { check_header machine/ioctl_meteor.h && check_header machine/ioctl_bt848.h; } || { check_header dev/video/meteor/ioctl_meteor.h && check_header dev/video/bktr/ioctl_bt848.h; } || check_header dev/ic/bt8xx.h check_header sndio.h if check_struct sys/soundcard.h audio_buf_info bytes; then enable_safe sys/soundcard.h else check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE < audio_buf_info abc; EOF fi check_header soundcard.h enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait && check_func jack_port_get_latency_range -ljack enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio # PulseAudio probe ! disabled audio_pulse && check_lib pulse/version.h pa_get_library_version -lpulse && $(pkg-config --atleast-version=0.9.7 libpulse) && enable audio_pulse || disable audio_pulse # Enable Pulse Audio output iff not disabled and pulse audio is available if ! enabled audio_pulse ; then disable audio_pulseoutput elif ! disabled audio_pulseoutput ; then enable audio_pulseoutput fi # ALSA probe ! disabled audio_alsa && check_lib alsa/asoundlib.h snd_asoundlib_version -lasound && check_cpp_condition alsa/asoundlib.h "(defined(SND_PCM_NO_AUTO_RESAMPLE))" && enable audio_alsa || { { ! enabled audio_alsa || die "ERROR: Alsa >= 1.0.16 required"; } && disable audio_alsa; } if enabled libcdio; then check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || die "ERROR: No usable libcdio/cdparanoia found" fi enabled xlib && check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib if ! disabled libxcb; then check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || { enabled libxcb && die "ERROR: libxcb >= 1.4 not found"; } && disable x11grab && enable libxcb if enabled libxcb; then disabled libxcb_shm || { check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || { enabled libxcb_shm && die "ERROR: libxcb_shm not found"; } && check_header sys/shm.h && enable libxcb_shm; } disabled libxcb_xfixes || { check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || { enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found"; } && enable libxcb_xfixes; } disabled libxcb_shape || { check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || { enabled libxcb_shape && die "ERROR: libxcb_shape not found"; } && enable libxcb_shape; } add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs fi fi if enabled x11grab; then enabled xlib || die "ERROR: Xlib not found" require Xext X11/extensions/XShm.h XShmCreateImage -lXext require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes fi check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs" enabled dxva2api_h && check_cc < #include #include int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; } EOF enabled vaapi && enabled opengl && check_header GL/glx.h && check_lib va/va.h vaInitialize -lva || disable vaapi enabled vaapi && enabled xlib && check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 && enable vaapi_x11 enabled vdpau && check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" || disable vdpau enabled vdpau && enabled xlib && check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau && prepend ffmpeg_libs $($ldflags_filter "-lvdpau") && enable vdpau_x11 # Funny iconv installations are not unusual, so check it after all flags have been set disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" enabled debug && add_cxxflags -g"$debuglevel" # add some useful compiler flags if supported #check_cflags -Wdeclaration-after-statement check_cflags -Wall ! disabled optimizations && check_cflags -Wdisabled-optimization check_cflags -Wpointer-arith disabled icc && check_cflags -Wredundant-decls check_cflags -Wwrite-strings check_cflags -Wtype-limits check_cflags -Wundef #-Wmissing-prototypes breaks zeromq compilation in universal mode if [ "$target_os" != "darwin" ]; then check_cflags -Wmissing-prototypes fi check_cflags -Wno-pointer-to-int-cast check_cflags -Wstrict-prototypes check_cflags -Wempty-body enabled extra_warnings && check_cflags -Winline enabled extra_warnings && check_cflags -Wcast-qual check_disable_warning(){ warning_flag=-W${1#-Wno-} test_cflags $warning_flag && add_cflags $1 } check_disable_warning -Wno-parentheses disabled icc && check_disable_warning -Wno-switch check_disable_warning -Wno-format-zero-length check_disable_warning -Wno-pointer-sign check_disable_warning -Wno-unused-const-variable # C++ Flags check_cxxflags -Wall check_cxxflags -Wpointer-arith #needed for INT64_C in libs/libavformat under g++ check_cxxflags -D__STDC_CONSTANT_MACROS check_cxxflags -D__STDC_LIMIT_MACROS # add some linker flags check_ldflags -Wl,--warn-common check_ldflags '-Wl,-rpath-link,\${SRC_PATH_BARE}/external/FFmpeg/libpostproc:\${SRC_PATH_BARE}/external/FFmpeg/libswresample:\${SRC_PATH_BARE}/external/FFmpeg/libswscale:\${SRC_PATH_BARE}/external/FFmpeg/libavfilter:\${SRC_PATH_BARE}/external/FFmpeg/libavdevice:\${SRC_PATH_BARE}/external/FFmpeg/libavformat:\${SRC_PATH_BARE}/external/FFmpeg/libavcodec:\${SRC_PATH_BARE}/external/FFmpeg/libavutil:\${SRC_PATH_BARE}/external/FFmpeg/libavresample' enabled rpath && add_ldexeflags -Wl,-rpath,$libdir enabled rpath && add_ldlibflags -Wl,-rpath,$libdir 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 enabled neon_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_video2 \ -Wl,--wrap,avcodec_encode_subtitle \ -Wl,--wrap,swr_convert \ -Wl,--wrap,avresample_convert || disable neon_clobber_test 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_video2 \ -Wl,--wrap,avcodec_encode_subtitle \ -Wl,--wrap,swr_convert \ -Wl,--wrap,avresample_convert \ -Wl,--wrap,sws_scale || disable xmm_clobber_test echo "X { local: *; };" > $TMPV if test_ldflags -Wl,--version-script,$TMPV; then append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver' elif test_ldflags -Wl,-M,$TMPV; then append SHFLAGS '-Wl,-M,\$(SUBDIR)lib\$(NAME).ver-sol2' fi check_cc </dev/null` if test x"$KERNEL_RELEASE" != x"" ; then dvb_path="${sysroot}/usr/src/linux-$KERNEL_RELEASE/include" [ -d "$dvb_path" ] ||\ dvb_path="${sysroot}/usr/src/linux-headers-$KERNEL_RELEASE/include/uapi" else dvb_path="${sysroot}/usr/src/linux/include" fi if test -f "$dvb_path"/linux/dvb/frontend.h ; then if test -f "$dvb_path"/../MAINTAINERS ; then echo "Warning: DVB location in kernel. May not compile." fi else echo "DVB location needs to have linux/dvb/frontend.h [$dvb_path]" disable dvb fi fi fi enabled dvb && check_cc -I"$dvb_path" < int main(void) { if (FE_CAN_2G_MODULATION) return 1; return 0; } EOF enabled asi && check_cc < #include int main(void) { return 1; } EOF if enabled systemd_notify ; then if check_pkg_config libsystemd-daemon systemd/sd-daemon.h sd_notify ; then require_pkg_config libsystemd-daemon systemd/sd-daemon.h sd_notify elif check_pkg_config libsystemd systemd/sd-daemon.h sd_notify ; then require_pkg_config libsystemd systemd/sd-daemon.h sd_notify else disable systemd_notify fi fi # Check that all MythTV build "requirements" are met: enabled lamemp3 && check_lib2 lame/lame.h lame_init -lmp3lame -lm || die "ERROR! You must have the Lame MP3 encoding library installed to compile MythTV." enabled exiv2 && $(pkg-config --exists exiv2) || die "ERROR! You must have the Exiv2 image tag reader library installed to compile MythTV." # Qt dependency checks if test $target_os = mingw32 ; then qt_inc="-I`cd $(${qmake} -query QT_INSTALL_HEADERS); pwd`" qt_libs="-L`cd $(${qmake} -query QT_INSTALL_LIBS) ; pwd`" elif test $target_os = darwin ; then qt_inc="-I`cd $(${qmake} -query QT_INSTALL_HEADERS); pwd` -F`cd $(${qmake} -query QT_INSTALL_LIBS); pwd`" qt_libs="-L`cd $(${qmake} -query QT_INSTALL_LIBS) ; pwd`" elif test $target_os = android ; then qt_inc="-I$(${qmake} -query QT_INSTALL_HEADERS)" qt_libs="-L$(${qmake} -query QT_INSTALL_LIBS)" else qt_inc="-I${sysroot}/$(${qmake} -query QT_INSTALL_HEADERS)" qt_libs="-L${sysroot}/$(${qmake} -query QT_INSTALL_LIBS)" fi if $(pkg-config --exists Qt5WebKit) || $(pkg-config --exists QtWebKit) ; then enable qtwebkit else check_ecxx ${qt_inc} ${qt_inc}/QtCore < int main(void){ return 0; } EOF fi enabled qtwebkit || die "Error! QtWebkit headers not found" if $(pkg-config --exists Qt5Script) || $(pkg-config --exists QtScript) ; then enable qtscript else check_ecxx ${qt_inc} < int main(void){ return 0; } EOF fi enabled qtscript || die "Error! QtScript headers not found" # Check if Qt was built with DBus support: if ! disabled qtdbus; then if $(pkg-config --exists QtDBus) ; then enable qtdbus else check_ecxx ${qt_inc} < #include int main(void) { QDBusInterface test("org.kde.test", "/test", "org.kde.blah"); return 0; } EOF fi fi # Disable OpenGL ES support if Qt does not support it QTCONF=$(pkg-config --variable=qt_config Qt5Core || pkg-config --variable=qt_config QtCore) if echo "$QTCONF" | grep -qv opengles2 ; then if test $target_os != android ; then disable opengles fi fi if enabled firewire; then fwlibs="" check_libx fwlibs libavc1394/avc1394.h avc1394_transaction_block2 -lavc1394 && check_libx fwlibs libiec61883/iec61883.h iec61883_cmp_reconnect -liec61883 || disable firewire if test $target_os = darwin; then if [ -n "$firewiresdk_path" ] ; then mac_avc="$firewiresdk_path" else # This should pick the newest. e.g. FireWireSDK21 instead of 20 # Unfortunately, the location keeps changing: #/Developer/FireWireSDK20/Examples/AVCVideoServices/Framework #/Developer/FireWireSDK21/Examples/Framework mac_avc=`find /Developer/FireWireSDK* -name Framework 2> /dev/null \ | tail -n 1` fi if test -d "$mac_avc" ; then firewire="yes" else echo Firewire being disabled. FireWire SDK missing fi fi fi enabled libfftw3 && check_lib2 fftw3.h fftw_init_threads -lfftw3_threads -lfftw3f -lfftw3 || disable libfftw3 # ass_flush_events was added in 0.9.10 enabled libass && check_lib2 ass/ass.h ass_flush_events -lass || disable libass if enabled libcec ; then if pkg-config --exists libcec; then libcec_path=`pkg-config --variable includedir libcec` else check_cxx -I"$libcec_path" < #include using namespace std; using namespace CEC; #include int main(void) { #if (CEC_LIB_VERSION_MAJOR < 1 || (CEC_LIB_VERSION_MAJOR == 1 && \ CEC_LIB_VERSION_MINOR < 7)) #error libcec version to old #endif return 1; } EOF fi fi enabled libcrypto && check_lib openssl/rsa.h RSA_new -lcrypto || disable libcrypto if test $target_os != darwin ; then enabled libdns_sd && check_lib dns_sd.h DNSServiceRegister -ldns_sd || disable libdns_sd fi if enabled libxml2 ; then if pkg-config --exists libxml-2.0 ; then libxml2_path=`pkg-config --cflags-only-I libxml-2.0|sed -n "s/-I\([^ ]*\) *$/\1/p"` else disable libxml2 fi fi enabled libxml2 && check_cc -I"$libxml2_path" < int main(void) { #if (LIBXML_VERSION < 20600) #error libxml2 version to old #endif return 0; } EOF if enabled taglib; then taglib_include=`taglib-config --prefix`/include/taglib taglib_libs=`taglib-config --libs` fi enabled x11 && check_lib X11/Xlib.h XQueryExtension -lX11 || disable x11 enabled xrandr && check_lib X11/extensions/Xrandr.h XRRSelectInput -lXrandr || disable xrandr enabled xv && check_lib X11/extensions/Xv.h XvPutStill -lXv || disable xv if enabled x11; then require libXxf86vm X11/extensions/xf86vmode.h XF86VidModeSetClientVersion -lXxf86vm require libXinerama X11/extensions/Xinerama.h XineramaQueryExtension -lXinerama require libXext X11/extensions/Xext.h XMissingExtension -lXext fi if enabled x11; then if disabled opengles; then # Qt was compiled without OpenGL ES support, so GLES2 isn't usable check_libx gl_lib GL/gl.h glBegin -lGL || check_libx gl_lib GL/gl.h glBegin -lopengl32 || disable opengl else # Qt was compiled with OpenGL ES support, so OpenGL support requires ES check_libx gl_lib GLES2/gl2.h glClear -lGLESv2 || disable opengl fi fi # CoreVideo in only available on Mac OS 10.4, or on 10.3 with QuickTime 7. # This checks for it, and some other calls that the module needs if test $target_os = darwin; then cat > $TMPC << EOF #include int main( void ) { return aglGetCGLContext(0,0L); } EOF if $cc -o $TMPE $TMPC -framework AGL > /dev/null 2>&1; then mac_corevideo="yes" fi fi # Ubuntu Dapper installs NVIDIA GL headers to a weird location in order # not to overwrite the headers installed from Mesa, etc. We need to # add that path to include paths if that's the case. if test -d ${sysroot}/usr/share/doc/nvidia-glx-dev/include; then append CONFIG_INCLUDEPATH "${sysroot}/usr/share/doc/nvidia-glx-dev/include" fi # Same for Debian Sid. if test -d ${sysroot}/usr/share/nvidia/include/GL; then append CONFIG_INCLUDEPATH "${sysroot}/usr/share/nvidia/include" fi if test $target_os = darwin; then # So far, only OS X 10.4 has this as a non-private framework if test -d /System/Library/Frameworks/DiskArbitration.framework/Headers ; then darwin_da="yes" fi fi if [ -n "$optflags" ]; then add_cflags $optflags elif enabled small; then add_cflags $cflags_size elif enabled optimizations; then add_cflags $cflags_speed else add_cflags $cflags_noopt fi check_cflags -fno-math-errno check_cflags -fno-signed-zeros check_cc -mno-red-zone <= 1400" && add_cflags -Qansi-alias # Some inline asm is not compilable in debug if enabled debug; then disable ebp_available disable ebx_available fi fi # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2. check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2 # The CRT headers contain __declspec(restrict) in a few places, but if redefining # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict) # (as it ends up if the restrict redefine is done before including stdlib.h), while # MSVC 2013 and newer can handle it fine. # If this declspec fails, force including stdlib.h before the restrict redefinition # happens in config.h. if [ $_restrict != restrict ]; then check_cc </dev/null || expr "$gxx_version" : '[5-9]\..*\.' >/dev/null; then check_cxxflags -fvisibility-inlines-hidden append CCONFIG "use_hidesyms" else disable symbol_visibility warn "--enable-symbol-visibility requires gcc 4.2 or higher" fi fi if expr "$gxx_version" : '4\.[3-9]' >/dev/null || expr "$gxx_version" : '[5-9]\..*\.' >/dev/null; then check_cxxflags -Wmissing-declarations fi check_cxxflags -Wno-switch check_cxxflags -Woverloaded-virtual check_cxxflags -funit-at-a-time elif enabled icpc; then # 177: function declared but never referenced (triggers on Q_OBJECT) # 192: icpc confused by Qt %0-%99 in strings # 592: variable is used before its value is set (triggers on (void)x;) # 913: ignoring invalid multibyte character sequence, # icpc and g++ do the right thing for char 0x80-0xFF # 10181: ignore warning about -fomit-frame-pointer being ignored # 13200: ignore EMMS instruction required, RTjpegN.cpp does the right thing check_cxxflags -wd177,192,592,913,10181,13200 check_cxxflags -std=c++11 elif enabled clangxx; then # The self assign warning triggers on headers that use x=x; # to suppress warnings about unused parameters. check_cxxflags -Wno-self-assign # The constant-logical-operand only gives use false positives # for constant logical operands meant to be optimized away. check_cxxflags -Wno-constant-logical-operand # Unfortunately clang's unused-value warning is smart enough to notice # that ZMQ_ASSERT expressions don't use the values unless it is a debug # build. So lets rely on other compilers to report on unused values. check_cxxflags -Wno-unused-value # clang complains about every unused -I unless you pass it this. check_cxxflags -Qunused-arguments fi # Check for python dependencies if enabled bindings_python; then is_python3 && python=python2 check_python || disable_bindings_python "Python 2.6" check_py_lib MySQLdb || disable_bindings_python "MySQLdb" check_py_lib lxml || disable_bindings_python "lxml" check_py_lib urlgrabber || disable_bindings_python "urlgrabber" fi # Check for perl dependencies # Modules distributed in Perl core if enabled bindings_perl; then check_pl_lib "ExtUtils::MakeMaker" || disable_bindings_perl "ExtUtils::MakeMaker" check_pl_lib Config || disable_bindings_perl Config check_pl_lib Exporter || disable_bindings_perl Exporter check_pl_lib Fcntl || disable_bindings_perl Fcntl check_pl_lib "File::Copy" || disable_bindings_perl "File::Copy" check_pl_lib "Sys::Hostname" || disable_bindings_perl "Sys::Hostname" # Modules not distributed in Perl core check_pl_lib DBI || disable_bindings_perl DBI check_pl_lib "DBD::mysql" || disable_bindings_perl "DBD::mysql" check_pl_lib "HTTP::Request" || disable_bindings_perl "HTTP::Request" check_pl_lib "LWP::UserAgent" || disable_bindings_perl "LWP::UserAgent" check_pl_lib "Net::UPnP::QueryResponse" || disable_bindings_perl "Net::UPnP::QueryResponse" check_pl_lib "Net::UPnP::ControlPoint" || disable_bindings_perl "Net::UPnP::ControlPoint" check_pl_lib "IO::Socket::INET6" || disable_bindings_perl "IO::Socket::INET6" fi # Check for php dependencies # are none at this time case $target_os in osf1) enabled ccc && add_ldflags '-Wl,-expect_unresolved,*' ;; plan9) add_cppflags -Dmain=plan9_main ;; esac enable frame_thread_encoder enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } check_deps $CONFIG_LIST \ $CONFIG_EXTRA \ $HAVE_LIST \ $ALL_COMPONENTS \ $MYTHTV_LIST \ $MYTHTV_CONFIG_LIST \ $MYTHTV_HAVE_LIST \ $USING_LIST \ 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" if test $target_os = "haiku"; then disable memalign disable posix_memalign fi enabled_all dxva2 dxva2api_cobj CoTaskMemFree && prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") && enable dxva2_lib ! enabled_any memalign posix_memalign aligned_malloc && enabled simd_align_16 && enable memalign_hack # add_dep lib dep # -> enable ${lib}_deps_${dep} # -> add $dep to ${lib}_deps only once add_dep() { lib=$1 dep=$2 enabled "${lib}_deps_${dep}" && return 0 enable "${lib}_deps_${dep}" prepend "${lib}_deps" $dep } # merge deps lib components # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_* merge_deps() { lib=$1 shift for comp in $*; do enabled $comp || continue eval "dep=\"\$${comp}_deps\"" for d in $dep; do add_dep $lib $d done done } merge_deps libavfilter $FILTER_LIST map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST for thread in $THREADS_LIST; do if enabled $thread; then test -n "$thread_type" && die "ERROR: Only one thread type must be selected." || thread_type="$thread" fi done enabled zlib && add_cppflags -DZLIB_CONST # conditional library dependencies, in linking order enabled afftfilt_filter && prepend avfilter_deps "avcodec" enabled amovie_filter && prepend avfilter_deps "avformat avcodec" enabled aresample_filter && prepend avfilter_deps "swresample" enabled asyncts_filter && prepend avfilter_deps "avresample" enabled atempo_filter && prepend avfilter_deps "avcodec" enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec" enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample" enabled elbg_filter && prepend avfilter_deps "avcodec" enabled fftfilt_filter && prepend avfilter_deps "avcodec" enabled find_rect_filter && prepend avfilter_deps "avformat avcodec" enabled mcdeint_filter && prepend avfilter_deps "avcodec" enabled movie_filter && prepend avfilter_deps "avformat avcodec" enabled pan_filter && prepend avfilter_deps "swresample" enabled pp_filter && prepend avfilter_deps "postproc" enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale" enabled resample_filter && prepend avfilter_deps "avresample" enabled sab_filter && prepend avfilter_deps "swscale" enabled scale_filter && prepend avfilter_deps "swscale" enabled scale2ref_filter && prepend avfilter_deps "swscale" enabled sofalizer_filter && prepend avfilter_deps "avcodec" enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale" enabled showfreqs_filter && prepend avfilter_deps "avcodec" enabled showspectrum_filter && prepend avfilter_deps "avcodec" enabled smartblur_filter && prepend avfilter_deps "swscale" enabled spectrumsynth_filter && prepend avfilter_deps "avcodec" enabled subtitles_filter && prepend avfilter_deps "avformat avcodec" enabled uspp_filter && prepend avfilter_deps "avcodec" enabled lavfi_indev && prepend avdevice_deps "avfilter" enabled opus_decoder && prepend avcodec_deps "swresample" expand_deps(){ lib_deps=${1}_deps eval "deps=\$$lib_deps" append $lib_deps $(map 'eval echo \$${v}_deps' $deps) unique $lib_deps } #we have to remove gpl from the deps here as some code assumes all lib deps are libs postproc_deps="$(filter_out 'gpl' $postproc_deps)" map 'expand_deps $v' $LIBRARY_LIST if enabled x86 && (disabled mmx && ! enabled disable_mmx_for_debugging); then die "ERROR: MMX disabled on x86, MythTV will be very slow.\n\tDisable this check with --enable-disable-mmx-for-debugging" fi enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } echo "# Basic Settings" echo "Compile type $compile_type" echo "Compiler cache $ccache$ccache_txt" echo "DistCC $distcc$distcc_txt" echo "qmake $(which $qmake)" echo "install prefix $prefix" echo "runtime prefix $runprefix" <> config.log echo " $0 $MYTHTV_CONFIGURATION" >> config.log cat > $TMPMAK <> $TMPMAK eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> $TMPMAK eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> $TMPMAK } map 'get_version $v' $LIBRARY_LIST map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> $TMPMAK' $LIBRARY_LIST print_program_libs(){ eval "program_libs=\$${1}_libs" eval echo "LIBS-${1}=${program_libs}" >> $TMPMAK } map 'print_program_libs $v' $PROGRAM_LIST echo "RUNPREFIX=$runprefix" >> $TMPMAK echo "SYSROOT=$sysroot" >> $TMPMAK enabled audio_alsa && append CCONFIG "using_alsa" enabled audio_jack && append CCONFIG "using_jack" enabled audio_oss && append CCONFIG "using_oss" enabled audio_pulse && append CCONFIG "using_pulse" enabled audio_pulseoutput && append CCONFIG "using_pulseoutput" if enabled darwin_da; then append CCONFIG "darwin_da" echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> $TMPMAK fi if enabled freetype2; then echo "FREETYPE_CFLAGS=$($pkg_config --cflags $pkg_config_flags freetype2)" >> $TMPMAK echo "FREETYPE_LIBS=$($pkg_config --libs $pkg_config_flags freetype2)" >> $TMPMAK fi if test $target_os = darwin; then # Qt, by default builds .app bundles everywhere. Prevent this. enabled mac_bundle || echo "CONFIG-=app_bundle" >> $TMPMAK fi cat > $TMPH <>$TMPH test -n "$assert_level" && echo "#define ASSERT_LEVEL $assert_level" >>$TMPH test -n "$malloc_prefix" && echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH if enabled mac_corevideo; then append CCONFIG "using_corevideo" fi if enabled cygwin ; then echo "#ifndef llrint" >> $TMPH echo "#define llrint llrint // make sure not to define twice" >> $TMPH echo "static inline long long int llrint (double x)" >> $TMPH echo "{" >> $TMPH echo " long long int llrintres;" >> $TMPH echo " asm" >> $TMPH echo " (\"fistpll %0\"" >> $TMPH echo " : \"=m\" (llrintres) : \"t\" (x) : \"st\");" >> $TMPH echo " return llrintres;" >> $TMPH echo "}" >> $TMPH echo "#endif" >> $TMPH fi if enabled yasm; then append config_files $TMPASM printf '' >$TMPASM fi enabled getenv || echo "#define getenv(x) NULL" >> $TMPH mkdir -p doc mkdir -p tests mkdir -p tests/api echo "@c auto-generated by configure - do not modify! " > doc/config.texi print_config ARCH_ "$config_files" $ARCH_LIST print_config HAVE_ "$config_files" $HAVE_LIST print_config HAVE_ "$config_files" $MYTHTV_HAVE_LIST print_config CONFIG_ "$config_files" $CONFIG_LIST \ $CONFIG_EXTRA \ $ALL_COMPONENTS \ $MYTHTV_LIST \ $MYTHTV_CONFIG_LIST \ for opt in $MYTHTV_CONFIG_LIST $USING_LIST; do enabled $opt && append CCONFIG "using_$opt" done enabled threads && append CCONFIG "using_ffmpeg_threads" if disabled frontend; then echo echo "WARNING: --disable-frontend is only intended to aid porting." echo "WARNING: THIS WILL BREAK THINGS. You are on your own now." fi if disabled backend; then echo echo "WARNING: --disable-backend is only intended to aid porting." echo "WARNING: You are on your own now." fi if enabled proc_opt; then echo echo "WARNING: When using --enable-proc-opt you must include the " echo " output of ./configure along with any bug report." fi if enabled cpu_override; then echo echo "WARNING: When using --arch=X or --cpu=X you must include the " echo " output of ./configure along with any bug report." fi echo # add a newline after any warnings. if enabled mmx; then CONFIG_DEFINES="$CONFIG_DEFINES MMX" if enabled x86_32 ; then CONFIG_DEFINES="$CONFIG_DEFINES i386" fi fi if enabled firewire; then if test $target_os = darwin; then echo "CONFIG_MAC_AVC=$mac_avc" >> $TMPMAK else echo "CONFIG_FIREWIRE_LIBS=-lraw1394 -liec61883 -lavc1394 -lrom1394" >> $TMPMAK fi fi if enabled mheg; then append CCONFIG "using_mheg" fi if enabled libass; then append CCONFIG "using_libass" fi if enabled appleremote; then append CONFIG_DEFINES "USING_APPLEREMOTE" fi if enabled dvb && non_standard_header $dvb_path; then append CONFIG_INCLUDEPATH "$dvb_path" fi #if enabled vbox; then # append CCONFIG "using_vbox" #fi if enabled libcec; then append CONFIG_DEFINES "using_libcec" if non_standard_header $libcec_path; then append CONFIG_INCLUDEPATH "$libcec_path" fi fi if enabled libxml2; then if [ -d $libxml2_path ] ; then if non_standard_header $libxml2_path; then append CONFIG_INCLUDEPATH "$libxml2_path" fi append CCONFIG "using_libxml2" fi fi if enabled taglib; then echo "CONFIG_TAGLIB_INCLUDES=$taglib_include" >> $TMPMAK echo "CONFIG_TAGLIB_LIBS=$taglib_libs" >> $TMPMAK fi if enabled x11; then if [ -d $x11_path ] ; then append CONFIG_INCLUDEPATH "$x11_path" fi fi if ! enabled darwin && enabled opengl; then echo "CONFIG_OPENGL_LIBS=$gl_lib $glu_lib" >> $TMPMAK fi if test x"$PERL_CONFIG_OPTS" != x"" ; then echo "PERL_CONFIG_OPTS=$PERL_CONFIG_OPTS" >> $TMPMAK fi if test x"$CCONFIG" != x"" ; then echo "CCONFIG=$CCONFIG" >> $TMPMAK echo "#define MYTH_BUILD_CONFIG \"$CCONFIG\"" >>$TMPH fi if test x"$CONFIG_DEFINES" != x"" ; then echo "CONFIG_DEFINES=$CONFIG_DEFINES" >> $TMPMAK fi if test x"$CONFIG_INCLUDEPATH" != x"" ; then echo "CONFIG_INCLUDEPATH=$CONFIG_INCLUDEPATH" >> $TMPMAK fi echo "#endif /* MYTHTV_CONFIG_H */" >> $TMPH cat <> $TMPMAK # HACK: If Qt 4 and MythTV's installed library dirs are the same, remove the # -L from early in the link line, to ignore any old installed libmyth* # Note: Qt uses QMAKE_INCDIR_QT to build an absolute path for include # directories, it cannot be modified. QMAKE_LIBDIR_QT-=${sysroot}${libdir} QMAKE_LIBDIR-=${sysroot}${libdir} LATE_LIBS+=-L${sysroot}${libdir} EOF #echo "endif # FFMPEG_CONFIG_MAK" >> $TMPMAK # Should be done on all platforms, but for the time being limit it to mac only if enabled darwin; then echo "QMAKE_LFLAGS+=\"$LDFLAGS\"" >> $TMPMAK fi cp_if_changed $TMPH $MYTH_CONFIG_H if ! test -L config.h ; then ${ln_s} $MYTH_CONFIG_H config.h fi if [ ! -e config.h ] ; then ${ln_s} $MYTH_CONFIG_H config.h fi cat $TMPMAK | sed -e 's/^!/#/' > $TMPPRO cp_if_changed $TMPPRO $MYTH_CONFIG_MAK if ! test -L config.mak ; then ${ln_s} $MYTH_CONFIG_MAK config.mak fi if [ ! -e config.mak ] ; then ${ln_s} $MYTH_CONFIG_MAK config.mak fi # create config.mak for external/FFmpeg cat > external/FFmpeg/config.mak <> external/FFmpeg/config.mak cat >> external/FFmpeg/config.mak < $TMPH <> $TMPH cp_if_changed $TMPH external/FFmpeg/libavutil/avconfig.h <
config.fate BLOCKQUOTE if enabled mythlogserver; then # configure zeromq echo "Configuring zeromq..." if [ ! `which libtool` ] then echo libtool not found. please install it. exit 1 fi if [ ! `which autoreconf` ] then echo autoreconf not found. please install it. exit 1 fi (cd external/zeromq ; ./autogen.sh 2> /dev/null > /dev/null) if [ $? -ne 0 ]; then echo external/zeromq/autogen.sh failed. exit 1 fi (cd external/zeromq ; \ ./configure --quiet --without-documentation --prefix=${prefix} \ --includedir=${prefix}/include/mythtv/zeromq \ --libdir=${libdir-name}) echo "Configuring nzmqt..." (cd external/nzmqt/src ; \ ${qmakeconf} -o Makefile) fi if ! disabled hdhomerun ; then echo "Configuring libhdhomerun..." (cd external/libhdhomerun; \ ${qmakeconf} -o Makefile.lib CONFIG+=Makefile.lib; \ ${qmakeconf} -o Makefile.app CONFIG+=Makefile.app) fi echo "Configuring libmythbluray..." (cd external/libmythbluray ; \ ${qmakeconf} -o Makefile) echo "Configuring libmythdvdnav..." (cd external/libmythdvdnav ; \ ${qmakeconf} -o Makefile) echo "Configuring libsamplerate..." (cd external/libsamplerate ; \ ${qmakeconf} -o Makefile) echo "Configuring libudfread..." (cd external/libudfread ; \ ${qmakeconf} -o Makefile) echo "Configuring minilzo..." (cd external/minilzo ; \ ${qmakeconf} -o Makefile) echo "Configuring libmythsoundtouch..." (cd external/libmythsoundtouch ; \ ${qmakeconf} -o Makefile) test -n "$WARNINGS" && printf "\n$WARNINGS" || exit 0 <= \$LIB$(toupper ${1})_VERSION, \"" } pkgconfig_generate(){ name=$1 shortname=${name#lib}${build_suffix} comment=$2 version=$3 libs=$4 requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps)) requires=${requires%, } enabled ${name#lib} || return 0 mkdir -p $name cat < $name/$name${build_suffix}.pc prefix=$prefix exec_prefix=\${prefix} libdir=$libdir includedir=$incdir Name: $name Description: $comment Version: $version Requires: $(enabled shared || echo $requires) Requires.private: $(enabled shared && echo $requires) Conflicts: Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs) Libs.private: $(enabled shared && echo $libs) Cflags: -I\${includedir} EOF mkdir -p doc/examples/pc-uninstalled includedir=${source_path} [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.." cat < doc/examples/pc-uninstalled/$name.pc prefix= exec_prefix= libdir=\${pcfiledir}/../../../$name includedir=${includedir} Name: $name Description: $comment Version: $version Requires: $requires Conflicts: Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs) Cflags: -I\${includedir} EOF } pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM" pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM" pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM $LIBSOXR" MYTHEOF