mirror of
https://github.com/mpv-player/mpv
synced 2024-12-29 10:32:15 +00:00
7558d1ed7b
libwaio was added due to the complete inability to cancel synchronous
I/O cleanly using the public Windows API in Windows XP. Even calling
TerminateThread on the thread performing I/O was a bad solution, because
the TerminateThread function in XP would leak the thread's stack.
In Vista and up, however, this is no longer a problem. CancelIoEx can
cancel synchronous I/O running on other threads, allowing the thread to
exit cleanly, so replace libwaio usage with native Vista API functions.
It should be noted that this change also removes the hack added in
8a27025
for preventing a deadlock that only seemed to happen in Windows
XP. KB2009703 says that Vista and up are not affected by this, due to a
change in the implementation of GetFileType, so the hack should not be
needed anymore.
1013 lines
31 KiB
Bash
Executable File
1013 lines
31 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# Original version (C) 2000 Pontscho/fresh!mindworkz pontscho@makacs.poliod.hu
|
|
# Cleanups all over the place (c) 2001 pl
|
|
# Rewritten for mpv in 2014.
|
|
#
|
|
#
|
|
# Warning: this is not officially supported. Use on your own risk. Might require
|
|
# modifications when used on systems other than Linux. Contributors
|
|
# are not expected to update these files when making changes to the
|
|
# normal/preferred waf build system.
|
|
#
|
|
#
|
|
# This configure script is *not* autoconf-based and has different semantics.
|
|
# It attempts to autodetect all settings and options where possible. It is
|
|
# possible to override autodetection with the --enable-option/--disable-option
|
|
# command line parameters. --enable-option forces the option on skipping
|
|
# autodetection. Yes, this means that compilation may fail and yes, this is not
|
|
# how autoconf-based configure scripts behave.
|
|
#
|
|
# configure generates a series of configuration files:
|
|
# - config.h contains #defines that are used in the C code.
|
|
# - config.mak is included from the Makefiles.
|
|
#
|
|
# If you want to add a new check for $feature, look at the existing checks
|
|
# and try to use helper functions where you can.
|
|
#############################################################################
|
|
|
|
# Prevent locale nonsense from breaking basic text processing utils
|
|
export LC_ALL=C
|
|
|
|
# Store the configure line that was used
|
|
configuration="$*"
|
|
|
|
# Prefer these macros to full length text !
|
|
# These macros only return an error code - NO display is done
|
|
command_check() {
|
|
echo >> "$TMPLOG"
|
|
echo "$@" >> "$TMPLOG"
|
|
"$@" >> "$TMPLOG" 2>&1
|
|
TMPRES="$?"
|
|
echo >> "$TMPLOG"
|
|
return "$TMPRES"
|
|
}
|
|
|
|
compile_check() {
|
|
source="$1"
|
|
shift
|
|
echo >> "$TMPLOG"
|
|
cat "$source" >> "$TMPLOG"
|
|
echo >> "$TMPLOG"
|
|
echo "$_cc $OURCFLAGS $CFLAGS $source $extra_cflags $_ld_static $extra_ldflags $libs_mplayer -o $TMPEXE $@" >> "$TMPLOG"
|
|
rm -f "$TMPEXE"
|
|
$_cc $OURCFLAGS $CFLAGS "$source" $extra_cflags $_ld_static $extra_ldflags $libs_mplayer -o "$TMPEXE" $@ >> "$TMPLOG" 2>&1
|
|
TMPRES="$?"
|
|
echo >> "$TMPLOG"
|
|
echo >> "$TMPLOG"
|
|
return "$TMPRES"
|
|
}
|
|
|
|
cflag_check() {
|
|
echo "int main(void) { return 0; }" > $TMPC
|
|
compile_check $TMPC $@
|
|
}
|
|
|
|
statement_check() {
|
|
echo "" > $TMPC
|
|
for _header in $1 ; do echo "#include <$_header>" >> $TMPC ; done
|
|
echo "int main(void) { $2; return 0; }" >> $TMPC
|
|
shift 2
|
|
compile_check $TMPC $@
|
|
}
|
|
|
|
pkg_config_add() {
|
|
echo >> "$TMPLOG"
|
|
echo "$_pkg_config --cflags $@" >> "$TMPLOG"
|
|
ctmp=$($_pkg_config --cflags "$@" 2>> "$TMPLOG") || return $?
|
|
echo >> "$TMPLOG"
|
|
echo "$_pkg_config --libs $@" >> "$TMPLOG"
|
|
ltmp=$($_pkg_config --libs "$@" 2>> "$TMPLOG") || return $?
|
|
echo >> "$TMPLOG"
|
|
echo "cflags: $ctmp" >> "$TMPLOG"
|
|
echo "libs: $ltmp" >> "$TMPLOG"
|
|
echo >> "$TMPLOG"
|
|
extra_cflags="$extra_cflags $ctmp"
|
|
libs_mplayer="$libs_mplayer $ltmp"
|
|
}
|
|
|
|
# Display error message, flushes tempfile, exit
|
|
die () {
|
|
echo
|
|
echo "Error: $@" >&2
|
|
echo >&2
|
|
rm -f "$TMPEXE" "$TMPC"
|
|
echo "Check \"$TMPLOG\" if you do not understand why it failed."
|
|
exit 1
|
|
}
|
|
|
|
# Use this before starting a check
|
|
echocheck() {
|
|
echo "============ Checking for $@ ============" >> "$TMPLOG"
|
|
echo ${_echo_n} "Checking for $@ ... ${_echo_c}"
|
|
}
|
|
|
|
# Use this to echo the results of a check
|
|
echores() {
|
|
test "$res_comment" && res_comment="($res_comment)"
|
|
echo "Result is: $@ $res_comment" >> "$TMPLOG"
|
|
echo "##########################################" >> "$TMPLOG"
|
|
echo "" >> "$TMPLOG"
|
|
echo "$@ $res_comment"
|
|
res_comment=""
|
|
}
|
|
|
|
# Check how echo works in this /bin/sh
|
|
case $(echo -n) in
|
|
-n) _echo_n= _echo_c='\c' ;; # SysV echo
|
|
*) _echo_n='-n ' _echo_c= ;; # BSD echo
|
|
esac
|
|
|
|
# setind $a b sets the variable named by the value of the variable a to b
|
|
setind() { eval "$1=\"\$2\"" ; }
|
|
|
|
# Generate --enable-NAME/--disable-NAME options, set $1 to the option value.
|
|
# Since shell has no data structures, do a weird statemachine thing.
|
|
# Arguments: "_name"($1) "description"($2) "default"($3)
|
|
# If "default"($3) is empty, use "auto"
|
|
# Option name: a leading "_" in name is stripped, further "_" are changed to "-"
|
|
opt_yes_no() {
|
|
_name=$(echo "$1" | sed 's/^_//' | tr _ -)
|
|
_defval="$3"
|
|
test -z "$_defval" && _defval=auto
|
|
|
|
case "$_opt_state_mode" in
|
|
init)
|
|
setind "$1" "$_defval"
|
|
;;
|
|
help)
|
|
if test "$_defval" = yes || test "$_defval" = auto ; then
|
|
_defdesc=enable
|
|
test "$_defval" = auto && _defdesc=auto
|
|
printf " %-21s disable $2 [$_defdesc]\n" "--disable-$_name"
|
|
unset _defdesc
|
|
else
|
|
printf " %-21s enable $2 [disable]\n" "--enable-$_name"
|
|
fi
|
|
;;
|
|
parse)
|
|
if test "$_opt_state_name" = "--enable-$_name" ; then
|
|
setind "$1" yes
|
|
_opt_state_known=yes
|
|
elif test "$_opt_state_name" = "--disable-$_name" ; then
|
|
setind "$1" no
|
|
_opt_state_known=yes
|
|
elif test "$_opt_state_name" = "--auto-$_name" ; then
|
|
setind "$1" auto
|
|
_opt_state_known=yes
|
|
fi
|
|
;;
|
|
esac
|
|
unset _name
|
|
unset _defval
|
|
}
|
|
|
|
options_state_machine() {
|
|
_opt_state_mode=$1
|
|
_opt_state_name=$2
|
|
_opt_state_known=no
|
|
|
|
opt_yes_no _gl "OpenGL video output"
|
|
opt_yes_no _libguess "libguess"
|
|
opt_yes_no _termios "termios database for key codes"
|
|
opt_yes_no _iconv "iconv for encoding conversion"
|
|
opt_yes_no _vm "X video mode extensions"
|
|
opt_yes_no _dvb "DVB input"
|
|
opt_yes_no _tv "TV interface (TV/DVB grabbers)" yes
|
|
opt_yes_no _tv_v4l2 "Video4Linux2 TV interface"
|
|
opt_yes_no _libv4l2 "libv4l2"
|
|
opt_yes_no _smb "Samba (SMB) input"
|
|
opt_yes_no _lcms2 "LCMS2 support"
|
|
opt_yes_no _bluray "Blu-ray support"
|
|
opt_yes_no _dvdread "libdvdread"
|
|
opt_yes_no _dvdnav "libdvdnav"
|
|
opt_yes_no _enca "ENCA charset oracle library"
|
|
opt_yes_no _uchardet "uchardet charset detection library"
|
|
opt_yes_no _libass "subtitle rendering with libass"
|
|
opt_yes_no _libavdevice "libavdevice demuxers"
|
|
opt_yes_no _libavfilter "libavfilter"
|
|
opt_yes_no _jpeg "support for writing JPEG screenshots"
|
|
opt_yes_no _libcdio "libcdio support"
|
|
opt_yes_no _librubberband "librubberband support"
|
|
opt_yes_no _ffmpeg "skip FFmpeg/Libav autodetection"
|
|
opt_yes_no _libavresample "libavresample (preferred over libswresample)"
|
|
opt_yes_no _libswresample "libswresample"
|
|
opt_yes_no _caca "CACA video output"
|
|
opt_yes_no _sdl2 "SDL2 video and audio outputs" no
|
|
opt_yes_no _xv "Xv video output"
|
|
opt_yes_no _vdpau "VDPAU acceleration"
|
|
opt_yes_no _vaapi "VAAPI acceleration"
|
|
opt_yes_no _xrandr "Xrandr support (used for monitor FPS detection)"
|
|
opt_yes_no _xinerama "Xinerama support"
|
|
opt_yes_no _x11 "X11 video output"
|
|
opt_yes_no _wayland "Wayland video output"
|
|
opt_yes_no _xss "support for disabling screensaver via xss"
|
|
opt_yes_no _alsa "ALSA audio output"
|
|
opt_yes_no _ossaudio "OSS audio output"
|
|
opt_yes_no _rsound "RSound audio output"
|
|
opt_yes_no _sndio "sndio audio output"
|
|
opt_yes_no _pulse "Pulseaudio audio output"
|
|
opt_yes_no _jack "JACK audio output"
|
|
opt_yes_no _openal "OpenAL audio output"
|
|
opt_yes_no _shm "X11/Xv shared memory"
|
|
opt_yes_no _lua "Lua scripting"
|
|
opt_yes_no _vapoursynth "VapourSynth filter bridge (Python)"
|
|
opt_yes_no _vapoursynth_lazy "VapourSynth filter bridge (Lua)"
|
|
opt_yes_no _libarchive "libarchive"
|
|
opt_yes_no _encoding "encoding functionality" yes
|
|
opt_yes_no _build_man "building manpage"
|
|
}
|
|
|
|
show_help(){
|
|
cat << EOF
|
|
Usage: $0 [OPTIONS]...
|
|
|
|
Configuration:
|
|
-h, --help display this help and exit
|
|
|
|
Installation directories:
|
|
--prefix=DIR prefix directory for installation [/usr/local]
|
|
--bindir=DIR directory for installing binaries [PREFIX/bin]
|
|
--datadir=DIR directory for installing machine independent
|
|
data files (skins, etc) [PREFIX/share/mpv]
|
|
--mandir=DIR directory for installing man pages [PREFIX/share/man]
|
|
--confdir=DIR directory for installing configuration files
|
|
[PREFIX/etc/mpv]
|
|
|
|
Compilation options:
|
|
--cc=COMPILER C compiler to build mpv [gcc]
|
|
--pkg-config=PKGCONFIG pkg-config to find some libraries [pkg-config]
|
|
--enable-static build a statically linked binary
|
|
--disable-debug compile-in debugging information [enable]
|
|
--disable-optimization compile without -O2 [enable]
|
|
|
|
Use these options if autodetection fails:
|
|
--extra-cflags=FLAGS extra CFLAGS
|
|
--extra-ldflags=FLAGS extra LDFLAGS
|
|
--extra-libs=FLAGS extra linker flags
|
|
|
|
Features:
|
|
EOF
|
|
options_state_machine help
|
|
cat << EOF
|
|
|
|
This configure script is NOT autoconf-based, even though its output is similar.
|
|
It will try to autodetect all configuration options. If you --enable an option
|
|
it will be forcefully turned on, skipping autodetection. This can break
|
|
compilation, so you need to know what you are doing.
|
|
EOF
|
|
exit 0
|
|
} #show_help()
|
|
|
|
# GOTCHA: the variables below defines the default behavior for autodetection
|
|
# and have - unless stated otherwise - at least 2 states : yes no
|
|
# If autodetection is available then the third state is: auto
|
|
_pkg_config=auto
|
|
_cc=auto
|
|
test -n "$CC" && _cc="$CC"
|
|
_opt=-O2
|
|
_prefix="/usr/local"
|
|
options_state_machine init
|
|
for ac_option do
|
|
case "$ac_option" in
|
|
--help|-help|-h)
|
|
show_help
|
|
;;
|
|
--prefix=*)
|
|
_prefix=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--bindir=*)
|
|
_bindir=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--mandir=*)
|
|
_mandir=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--confdir=*)
|
|
_confdir=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--extra-cflags=*)
|
|
extra_cflags="$extra_cflags $(echo $ac_option | cut -d '=' -f 2-)"
|
|
;;
|
|
--extra-ldflags=*)
|
|
extra_ldflags="$extra_ldflags $(echo $ac_option | cut -d '=' -f 2-)"
|
|
;;
|
|
--extra-libs=*)
|
|
libs_mplayer=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--cc=*)
|
|
_cc=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--pkg-config=*)
|
|
_pkg_config=$(echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--enable-static)
|
|
_ld_static='-static'
|
|
;;
|
|
--disable-static)
|
|
_ld_static=''
|
|
;;
|
|
--enable-optimization)
|
|
_opt='-O2'
|
|
;;
|
|
--enable-optimization=*)
|
|
_opt=$(echo $_echo_n '-O'$_echo_c; echo $ac_option | cut -d '=' -f 2)
|
|
;;
|
|
--disable-optimization)
|
|
_opt=
|
|
;;
|
|
*)
|
|
options_state_machine parse "$ac_option"
|
|
if test "$_opt_state_known" != yes ; then
|
|
echo "Unknown parameter: $ac_option" >&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
|
|
esac
|
|
done
|
|
|
|
test -z "$_bindir" && _bindir="$_prefix/bin"
|
|
test -z "$_mandir" && _mandir="$_prefix/share/man"
|
|
test -z "$_confdir" && _confdir="$_prefix/etc/mpv"
|
|
|
|
mplayer_tmpdir=$(mktemp -d -p ${TMPDIR:=/tmp} mpv-configure-XXXXXX)
|
|
test -n "$mplayer_tmpdir" || die "Unable to create tmpdir."
|
|
trap 'rm -rf "$mplayer_tmpdir"' EXIT
|
|
|
|
mkdir old_build 2> /dev/null
|
|
|
|
TMPLOG="old_build/config.log"
|
|
|
|
rm -f "$TMPLOG"
|
|
echo Parameters configure was run with: > "$TMPLOG"
|
|
echo CFLAGS="'$CFLAGS'" PKG_CONFIG_PATH="'$PKG_CONFIG_PATH'" ./configure $configuration >> "$TMPLOG"
|
|
echo >> "$TMPLOG"
|
|
|
|
TMPC="$mplayer_tmpdir/tmp.c"
|
|
TMPEXE="$mplayer_tmpdir/tmp"
|
|
CONFIG_MAK="$mplayer_tmpdir/config.mak"
|
|
CONFIG_H="$mplayer_tmpdir/config.h"
|
|
|
|
echo > $CONFIG_MAK
|
|
echo > $CONFIG_H
|
|
|
|
test "$_pkg_config" = auto && _pkg_config=pkg-config
|
|
test "$_cc" = auto && _cc=cc
|
|
|
|
extra_cflags="-I. -D_GNU_SOURCE $extra_cflags"
|
|
|
|
_rst2man=rst2man
|
|
test -f "$(which rst2man.py)" && _rst2man=rst2man.py
|
|
|
|
echocheck "whether to build manpages with rst2man"
|
|
if test "$_build_man" = auto ; then
|
|
_build_man=no
|
|
command_check "$_rst2man" --version && _build_man=yes
|
|
fi
|
|
echores "$_build_man"
|
|
|
|
echocheck "working compiler"
|
|
cflag_check "" || die "Compiler is not functioning correctly. Check your installation and custom CFLAGS $CFLAGS ."
|
|
echores "yes"
|
|
|
|
echocheck "perl"
|
|
command_check perl -Mv5.8 -e';' || die "Perl is not functioning correctly or is ancient. Install the latest perl available."
|
|
echores yes
|
|
|
|
echocheck "compiler support of -pipe option"
|
|
cflag_check -pipe -I. && _pipe="-pipe" && echores "yes" || echores "no"
|
|
|
|
addcflags() { cflag_check "$@" && OURCFLAGS="$OURCFLAGS $@" ; }
|
|
|
|
OURCFLAGS="-std=c99 -Wall $_opt"
|
|
|
|
addcflags -g -g3 -ggdb
|
|
addcflags -Wundef -Wmissing-prototypes -Wshadow -Wno-switch -Wparentheses -Wpointer-arith -Wno-redundant-decls -Wno-pointer-sign -Werror=implicit-function-declaration -Wno-error=deprecated-declarations -Wno-error=unused-function
|
|
# clang
|
|
addcflags -Wno-logical-op-parentheses -fcolor-diagnostics -Wno-tautological-compare -Wno-tautological-constant-out-of-range-compare
|
|
# extra
|
|
addcflags -Wno-format-zero-length -Wempty-body -Wdisabled-optimization -Wstrict-prototypes
|
|
|
|
cflag_check -MD -MP && DEPFLAGS="-MD -MP"
|
|
cflag_check -lm && _ld_lm="-lm"
|
|
|
|
extra_ldflags="$extra_ldflags $LDFLAGS"
|
|
extra_cflags="$extra_cflags $CPPFLAGS"
|
|
|
|
# If $1 is "yes", define $2 as 1 in config.h, else define it as 0
|
|
define_yes_no() {
|
|
if test "$1" = yes ; then
|
|
echo "#define $2 1" >> $CONFIG_H
|
|
else
|
|
echo "#define $2 0" >> $CONFIG_H
|
|
fi
|
|
}
|
|
|
|
# Write the results of a check to config.mak/.h.
|
|
# Arguments: "yes/no"($1) "name"($2)
|
|
check_yes_no() {
|
|
define_yes_no $1 "HAVE_$2"
|
|
echo "$2 = $1" >> $CONFIG_MAK
|
|
}
|
|
|
|
check_trivial() {
|
|
echocheck "$1"
|
|
check_yes_no $2 $3
|
|
echores "$2"
|
|
}
|
|
|
|
# Arguments: "message"($1) "setting"($2) "name"($3) "code"($4)
|
|
# Also, $5 - $N can be libraries needed - it'll try each separately.
|
|
# Use " " as first entry if you want to try with no libraries too.
|
|
check_compile() {
|
|
_res="$2"
|
|
_name="$3"
|
|
_code="$4"
|
|
echocheck "$1"
|
|
if test $_res = auto ; then
|
|
_res=no
|
|
if test $# -gt 4 ; then
|
|
shift 4
|
|
else
|
|
shift $#
|
|
fi
|
|
while true ; do
|
|
compile_check "$_code" "$1" && libs_mplayer="$libs_mplayer $1" && _res=yes && break
|
|
test -z "$1" && break
|
|
shift
|
|
done
|
|
fi
|
|
check_yes_no $_res $_name
|
|
echores $_res
|
|
test $_res = yes && return 0 || return 1
|
|
}
|
|
|
|
# Arguments: "message"($1) "setting"($2) "name"($3) "include"($4) "statement"($5)
|
|
# Also, $6 - $N can be libraries needed - it'll try each separately.
|
|
# Use " " as first entry if you want to try with no libraries too.
|
|
check_statement_libs() {
|
|
_res="$2"
|
|
_name="$3"
|
|
_inc="$4"
|
|
_st="$5"
|
|
echocheck "$1"
|
|
if test $_res = auto ; then
|
|
_res=no
|
|
if test $# -gt 5 ; then
|
|
shift 5
|
|
else
|
|
shift $#
|
|
fi
|
|
while true ; do
|
|
statement_check "$_inc" "$_st" "$1" && libs_mplayer="$libs_mplayer $1" && _res=yes && break
|
|
test -z "$1" && break
|
|
shift
|
|
done
|
|
fi
|
|
check_yes_no $_res $_name
|
|
echores $_res
|
|
test $_res = yes && return 0 || return 1
|
|
}
|
|
|
|
# Print "yes" if previous command succeeded, else "no"
|
|
defretval() { # shell is retarded?
|
|
if test $? = 0 ; then
|
|
echo "yes"
|
|
else
|
|
echo "no"
|
|
fi
|
|
}
|
|
|
|
echocheck "dynamic loader"
|
|
_dl=no
|
|
for _ld_tmp in "" "-ldl"; do
|
|
statement_check dlfcn.h 'dlopen("", 0)' $_ld_tmp && _ld_dl="$_ld_tmp" && _dl=yes && break
|
|
done
|
|
define_yes_no $_dl HAVE_LIBDL
|
|
echores "$_dl"
|
|
|
|
echocheck "pthread"
|
|
cflag_check -pthread && _ld_pthread="$_ld_pthread -pthread"
|
|
cflag_check -lpthread && _ld_pthread="$_ld_pthread -lpthread"
|
|
cflag_check -lrt && _ld_pthread="$_ld_pthread -lrt"
|
|
extra_cflags="$extra_cflags -D_REENTRANT -D_THREAD_SAFE"
|
|
compile_check waftools/fragments/pthreads.c "$_ld_pthread" || die "Unable to find pthreads support."
|
|
echores "yes"
|
|
|
|
check_statement_libs "support for stdatomic.h" auto STDATOMIC \
|
|
stdatomic.h 'atomic_int_least64_t test = ATOMIC_VAR_INIT(123); int test2 = atomic_load(&test)' \
|
|
" " "-latomic"
|
|
_stdatomic=$(defretval)
|
|
|
|
_atomic=auto
|
|
test "$_stdatomic" = yes && _atomic=no
|
|
check_statement_libs "compiler support for __atomic built-ins" $_atomic ATOMIC_BUILTINS \
|
|
stdint.h 'int64_t test = 0; test = __atomic_add_fetch(&test, 1, __ATOMIC_SEQ_CST)' \
|
|
" " "-latomic"
|
|
_atomic=$(defretval)
|
|
|
|
_sync=auto
|
|
(test "$_atomic" = yes || test "$_stdatomic" = yes ) && _sync=no
|
|
check_statement_libs "compiler support for __sync built-ins" $_sync SYNC_BUILTINS \
|
|
stdint.h 'int64_t test = 0; test = __sync_add_and_fetch(&test, 1)'
|
|
_sync=$(defretval)
|
|
|
|
_any_atomic=yes
|
|
if test "$_atomic" = no && test "$_sync" = no && test "$_stdatomic" = no ; then
|
|
echo "your compiler must support either stdatomic.h, or __atomic, or __sync built-ins."
|
|
_any_atomic=no
|
|
fi
|
|
define_yes_no $_any_atomic HAVE_ATOMICS
|
|
|
|
check_compile "iconv" $_iconv ICONV waftools/fragments/iconv.c " " "-liconv" "-liconv $_ld_dl"
|
|
_iconv=$(defretval)
|
|
if test "$_iconv" != yes ; then
|
|
die "Unable to find iconv which should be part of standard compilation environment. Aborting. If you really mean to compile without iconv support use --disable-iconv."
|
|
fi
|
|
|
|
_soundcard_header=sys/soundcard.h
|
|
_check_snd=yes
|
|
check_statement_libs "sys/soundcard.h" auto SYS_SOUNDCARD_H sys/soundcard.h
|
|
test $(defretval) = yes && _soundcard_header=sys/soundcard.h && _check_snd=no
|
|
check_statement_libs "soundcard.h" $_check_snd SOUNDCARD_H soundcard.h
|
|
test $(defretval) = yes && _soundcard_header=soundcard.h
|
|
|
|
check_statement_libs "sys/videoio.h" auto SYS_VIDEOIO_H sys/videoio.h
|
|
|
|
_termios_ok=no
|
|
check_statement_libs "termios.h" $_termios TERMIOS_H termios.h
|
|
test $(defretval) = yes && _termios_ok=yes && _termios=no
|
|
check_statement_libs "sys/termios.h" $_termios SYS_TERMIOS_H 'sys/termios.h'
|
|
test $(defretval) = yes && _termios_ok=yes
|
|
define_yes_no $_termios_ok HAVE_TERMIOS
|
|
|
|
check_statement_libs "shm" $_shm SHM "sys/types.h sys/ipc.h sys/shm.h" \
|
|
"shmget(0, 0, 0); shmat(0, 0, 0); shmctl(0, 0, 0);"
|
|
|
|
echocheck "pkg-config"
|
|
if $($_pkg_config --version > /dev/null 2>&1); then
|
|
if test "$_ld_static"; then
|
|
_pkg_config="$_pkg_config --static"
|
|
fi
|
|
echores "yes"
|
|
else
|
|
_pkg_config=false
|
|
echores "no"
|
|
fi
|
|
|
|
# Arguments: "message"($1) "setting"($2) "name"($3) "pkg-config string"($4)
|
|
# The name will be used as "#define HAVE_$name 1/0" in config.h, and as
|
|
# "$name = yes/no" in config.mak
|
|
# "setting"($2) is yes/no/auto and represents the --enable/--disable option
|
|
check_pkg_config() {
|
|
echocheck "$1"
|
|
_res=$2
|
|
if test "$2" = auto ; then
|
|
_res=no
|
|
if pkg_config_add "$4" ; then
|
|
_res=yes
|
|
fi
|
|
fi
|
|
check_yes_no $_res $3
|
|
echores "$_res"
|
|
test $_res = yes && return 0 || return 1
|
|
}
|
|
|
|
check_pkg_config "libguess support" $_libguess LIBGUESS 'libguess >= 1.0'
|
|
|
|
check_pkg_config "Samba support (libsmbclient)" $_smb LIBSMBCLIENT 'smbclient >= 0.2.0'
|
|
|
|
_wlver="1.6.0"
|
|
check_pkg_config "Wayland" $_wayland WAYLAND "wayland-client >= $_wlver wayland-cursor >= $_wlver xkbcommon >= 0.3.0"
|
|
_wayland=$(defretval)
|
|
|
|
check_pkg_config "X11" $_x11 X11 "x11"
|
|
_x11=$(defretval)
|
|
|
|
# Disable X11 dependencies
|
|
_xext=auto
|
|
if test "$_x11" = no ; then
|
|
_xss=no
|
|
_xext=no
|
|
_xv=no
|
|
_vdpau=no
|
|
_vaapi=no
|
|
_xinerama=no
|
|
_vm=no
|
|
fi
|
|
|
|
check_pkg_config "Xss screensaver extensions" $_xss XSS "xscrnsaver"
|
|
|
|
check_pkg_config "X extensions" $_xext XEXT "xext"
|
|
|
|
check_pkg_config "Xv" $_xv XV "xv"
|
|
|
|
check_pkg_config "VDPAU" $_vdpau VDPAU "vdpau >= 0.2"
|
|
_vdpau=$(defretval)
|
|
define_yes_no $_vdpau HAVE_VDPAU_HWACCEL
|
|
|
|
check_pkg_config "VAAPI" $_vaapi VAAPI 'libva >= 0.32.0 libva-x11 >= 0.32.0'
|
|
_vaapi=$(defretval)
|
|
define_yes_no $_vaapi HAVE_VAAPI_HWACCEL
|
|
define_yes_no $_vaapi HAVE_VAAPI_X11
|
|
|
|
_vaapi_wayland=no
|
|
if test "$_vaapi" = yes ; then
|
|
_vaapi_wayland=auto
|
|
fi
|
|
check_pkg_config "VAAPI Wayland" $_vaapi_wayland VAAPI_WAYLAND 'libva-wayland >= 0.34.0'
|
|
|
|
check_pkg_config "Xinerama" $_xinerama XINERAMA 'xinerama'
|
|
|
|
check_pkg_config "Xrandr" $_xrandr XRANDR 'xrandr >= 1.2.0'
|
|
|
|
check_pkg_config "CACA" $_caca CACA 'caca >= 0.99.beta18'
|
|
|
|
check_compile "DVB" $_dvb DVB waftools/fragments/dvb.c
|
|
_dvbin=$(defretval)
|
|
check_yes_no $_dvbin DVBIN
|
|
|
|
check_statement_libs "JPEG support" $_jpeg JPEG "stdio.h jpeglib.h" "" "-ljpeg $_ld_lm"
|
|
|
|
_gl_x11_egl=no
|
|
(test "$_x11" = no && test "$_wayland" = no) && _gl=no
|
|
echocheck "OpenGL"
|
|
#Note: this test is run even with --enable-gl since we autodetect linker flags
|
|
if test "$_gl" != no ; then
|
|
cat > $TMPC << EOF
|
|
#if defined(GL_WAYLAND) || defined(EGL_X11)
|
|
#include <EGL/egl.h>
|
|
#else
|
|
#include <X11/Xlib.h>
|
|
#include <GL/glx.h>
|
|
#endif
|
|
#include <GL/gl.h>
|
|
#include <GL/glext.h>
|
|
int main(int argc, char *argv[]) {
|
|
#if defined(GL_WAYLAND)
|
|
eglCreateContext(NULL, NULL, EGL_NO_CONTEXT, NULL);
|
|
#else
|
|
glXCreateContext(NULL, NULL, NULL, True);
|
|
#endif
|
|
glFinish();
|
|
return !GL_INVALID_FRAMEBUFFER_OPERATION; // check correct glext.h
|
|
}
|
|
EOF
|
|
_gl=no
|
|
if test "$_x11" = yes ; then
|
|
for _ld_tmp in "" -lGL "-lGL -lXdamage" "-lGL $_ld_pthread" ; do
|
|
if compile_check $TMPC $_ld_tmp $_ld_lm ; then
|
|
_gl=yes
|
|
_gl_x11=yes
|
|
libs_mplayer="$libs_mplayer $_ld_tmp $_ld_dl"
|
|
test "$_gl_x11" = yes && res_comment="$res_comment x11"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if test "$_wayland" = yes && compile_check $TMPC -DGL_WAYLAND -lGL -lEGL &&
|
|
pkg_config_add "wayland-egl >= 9.0.0"; then
|
|
_gl=yes
|
|
_gl_wayland=yes
|
|
libs_mplayer="$libs_mplayer -lGL -lEGL"
|
|
test "$_gl_wayland" = yes && res_comment="$res_comment wayland"
|
|
else
|
|
_gl_wayland=no
|
|
fi
|
|
if test "$_x11" = yes && test "$_gl" = yes && pkg_config_add "egl"; then
|
|
_gl_x11_egl=yes
|
|
res_comment="$res_comment x11egl"
|
|
fi
|
|
else
|
|
_gl=no
|
|
fi
|
|
|
|
if test "$_gl" = no ; then
|
|
_gl_x11=no
|
|
_gl_wayland=no
|
|
_gl_x11_egl=no
|
|
fi
|
|
check_yes_no $_gl GL
|
|
check_yes_no $_gl_x11 GL_X11
|
|
check_yes_no $_gl_x11_egl EGL_X11
|
|
check_yes_no $_gl_wayland GL_WAYLAND
|
|
echores "$_gl"
|
|
|
|
echocheck "VDPAU with OpenGL/X11"
|
|
_vdpau_gl_x11=no
|
|
(test "$_gl_x11" = yes && test "$_vdpau" = yes) && _vdpau_gl_x11=yes
|
|
check_yes_no $_vdpau_gl_x11 VDPAU_GL_X11
|
|
echores "$_vdpau_gl_x11"
|
|
|
|
_vaapi_glx=no
|
|
(test "$_gl_x11" = yes && test "$_vaapi" = yes) && _vaapi_glx=auto
|
|
check_pkg_config "VAAPI with OpenGL/X11" $_vaapi_glx VAAPI_GLX 'libva-glx >= 0.32.0'
|
|
|
|
_vaapi_x_egl=no
|
|
(test "$_gl_x11_egl" = yes && test "$_vaapi" = yes) && _vaapi_x_egl=yes
|
|
check_yes_no $_vaapi_x_egl VAAPI_X_EGL
|
|
check_yes_no $_vaapi_x_egl VAAPI_EGL
|
|
|
|
check_pkg_config "SDL 2.0" $_sdl2 SDL2 'sdl2'
|
|
|
|
check_statement_libs "OSS Audio" $_ossaudio OSS_AUDIO $_soundcard_header "int x = SNDCTL_DSP_SETFRAGMENT;"
|
|
|
|
check_statement_libs "RSound" $_rsound RSOUND rsound.h 'rsd_init(NULL);' -lrsound
|
|
|
|
check_statement_libs "sndio" $_sndio SNDIO sndio.h 'struct sio_par par; sio_initpar(&par); const char *s = SIO_DEVANY' -lsndio
|
|
|
|
check_pkg_config "PulseAudio" $_pulse PULSE 'libpulse >= 1.0'
|
|
|
|
check_pkg_config "JACK" $_jack JACK 'jack'
|
|
|
|
check_pkg_config "OpenAL" $_openal OPENAL 'openal >= 1.13'
|
|
|
|
check_pkg_config "ALSA audio" $_alsa ALSA 'alsa >= 1.0.9'
|
|
|
|
check_pkg_config "Blu-ray support" $_bluray LIBBLURAY 'libbluray >= 0.3.0'
|
|
|
|
check_pkg_config "dvdread" $_dvdread DVDREAD 'dvdread >= 4.1.0'
|
|
|
|
check_pkg_config "dvdnav" $_dvdnav DVDNAV 'dvdnav >= 4.2.0'
|
|
|
|
check_pkg_config "libcdio" $_libcdio CDDA 'libcdio_paranoia'
|
|
|
|
check_pkg_config "rubberband" $_librubberband RUBBERBAND 'rubberband'
|
|
|
|
_oldass=$_libass
|
|
check_pkg_config "SSA/ASS support" $_libass LIBASS 'libass'
|
|
_libass=$(defretval)
|
|
if test $_oldass != no && test $_libass = no ; then
|
|
die "Unable to find development files for libass. Aborting. If you really mean to compile without libass support use --disable-libass."
|
|
fi
|
|
|
|
_dummy_osd=yes
|
|
test $_libass = yes && _dummy_osd=no
|
|
echo "LIBASS_OSD = $_libass" >> $CONFIG_MAK
|
|
echo "DUMMY_OSD = $_dummy_osd" >> $CONFIG_MAK
|
|
|
|
check_pkg_config "ENCA" $_enca ENCA 'enca'
|
|
check_pkg_config "uchardet" $_uchardet UCHARDET 'uchardet'
|
|
|
|
check_pkg_config "zlib" auto ZLIB 'zlib'
|
|
test $(defretval) = no && die "Unable to find development files for zlib."
|
|
|
|
check_pkg_config "LCMS2 support" $_lcms2 LCMS2 'lcms2 >= 2.6'
|
|
|
|
check_pkg_config "FFmpeg/Libav" $_ffmpeg FFMPEG \
|
|
"libavutil >= 54.02.0 libavcodec >= 56.1.0 libavformat >= 56.01.0 libswscale >= 2.1.3"
|
|
test $(defretval) = no && die "Unable to find development files for some of the required Libav libraries above. Aborting."
|
|
|
|
check_pkg_config "Libswresample" $_libswresample LIBSWRESAMPLE 'libswresample >= 1.1.100'
|
|
_libswresample=$(defretval)
|
|
|
|
_libavresample=auto
|
|
test $_libswresample = yes && _libavresample=no
|
|
check_pkg_config "Libavresample" $_libavresample LIBAVRESAMPLE 'libavresample >= 2.1.0'
|
|
_libavresample=$(defretval)
|
|
|
|
if test "$_libswresample" = no && test "$_libavresample" = no ; then
|
|
die "No resampler found. Install libavresample or libswresample (FFmpeg)."
|
|
fi
|
|
|
|
# Arguments: "message"($1) "define"($2) "header"($3) "code"($4)
|
|
api_statement_check() {
|
|
echocheck "$1"
|
|
_res=no
|
|
statement_check "$3" "$4" && _res=yes
|
|
define_yes_no $_res "$2"
|
|
echores "$_res"
|
|
}
|
|
|
|
api_statement_check \
|
|
"libavcodec avcodec_enum_to_chroma_pos API" \
|
|
HAVE_AVCODEC_CHROMA_POS_API \
|
|
libavcodec/avcodec.h \
|
|
'int x, y; avcodec_enum_to_chroma_pos(&x, &y, AVCHROMA_LOC_UNSPECIFIED)'
|
|
|
|
api_statement_check \
|
|
"libavutil AVFrame metadata" \
|
|
HAVE_AVFRAME_METADATA \
|
|
libavutil/frame.h \
|
|
'av_frame_get_metadata(NULL)'
|
|
|
|
api_statement_check \
|
|
"libavutil AVFrame skip samples metadata" \
|
|
HAVE_AVFRAME_SKIP_SAMPLES \
|
|
libavutil/frame.h \
|
|
'enum AVFrameSideDataType type = AV_FRAME_DATA_SKIP_SAMPLES'
|
|
|
|
api_statement_check \
|
|
"libavutil av_version_info()" \
|
|
HAVE_AV_VERSION_INFO \
|
|
libavutil/avutil.h \
|
|
'const char *x = av_version_info()'
|
|
|
|
api_statement_check \
|
|
"libavutil new pixdesc fields" \
|
|
HAVE_AV_NEW_PIXDESC \
|
|
libavutil/pixdesc.h \
|
|
'AVComponentDescriptor d; int x = d.depth'
|
|
|
|
api_statement_check \
|
|
"libavcodec 64 bit AVPacket.duration" \
|
|
HAVE_AV_AVPACKET_INT64_DURATION \
|
|
libavcodec/avcodec.h \
|
|
'int x[(int)sizeof(((AVPacket){0}).duration) - 7]'
|
|
|
|
api_statement_check \
|
|
"libavcodec AVSubtitleRect AVPicture removal" \
|
|
HAVE_AV_SUBTITLE_NOPICT \
|
|
libavcodec/avcodec.h \
|
|
'AVSubtitleRect r = {.linesize={0}}'
|
|
|
|
check_pkg_config "libavfilter" $_libavfilter LIBAVFILTER 'libavfilter >= 5.0.0'
|
|
|
|
check_pkg_config "libavdevice" $_libavdevice LIBAVDEVICE 'libavdevice >= 55.0.0'
|
|
|
|
check_trivial "TV interface" $_tv TV
|
|
|
|
check_statement_libs "Video 4 Linux 2 TV interface" $_tv_v4l2 TV_V4L2 \
|
|
"sys/time.h linux/videodev2.h"
|
|
_tv_v4l2=$(defretval)
|
|
check_trivial "TV audio input" $_tv_v4l2 AUDIO_INPUT
|
|
|
|
test $_tv_v4l2 = no && _libv4l2=no
|
|
check_pkg_config "libv4l2 support" $_libv4l2 LIBV4L2 'libv4l2'
|
|
|
|
# Note: Lua has no official .pc file, so there are different OS-specific ones.
|
|
# Also, we support luajit, which is compatible to 5.1.
|
|
|
|
test_lua() {
|
|
if test "$_lua" = auto && $_pkg_config "$1" ; then
|
|
check_pkg_config "Lua ($1)" $_lua LUA "$1"
|
|
_lua=$(defretval)
|
|
fi
|
|
}
|
|
|
|
test_lua "lua >= 5.1.0 lua < 5.2.0"
|
|
test_lua "lua5.1 >= 5.1.0" # debian
|
|
test_lua "lua51 >= 5.1.0" # OpenBSD
|
|
test_lua "luajit >= 2.0.0"
|
|
test_lua "lua5.2 >= 5.2.0" # debian
|
|
test_lua "lua52 >= 5.2.0" # OpenBSD
|
|
test_lua "lua >= 5.2.0"
|
|
|
|
test "$_lua" != yes && check_yes_no no LUA
|
|
|
|
if ! ( $_pkg_config 'vapoursynth >= 24' ) ; then
|
|
_vapoursynth=no
|
|
_vapoursynth_lazy=no
|
|
fi
|
|
check_pkg_config "VapourSynth support (Python)" $_vapoursynth VAPOURSYNTH 'vapoursynth >= 23 vapoursynth-script >= 23'
|
|
_vapoursynth=$(defretval)
|
|
if test "$_lua" = no ; then
|
|
_vapoursynth_lazy=no
|
|
fi
|
|
check_pkg_config "VapourSynth support (Lua)" $_vapoursynth_lazy VAPOURSYNTH_LAZY 'vapoursynth >= 23'
|
|
_vapoursynth_lazy=$(defretval)
|
|
|
|
_vapoursynth_core=yes
|
|
if test "$_vapoursynth" = no && test "$_vapoursynth_lazy" = no ; then
|
|
_vapoursynth_core=no
|
|
fi
|
|
check_trivial "VapourSynth core" $_vapoursynth_core VAPOURSYNTH_CORE
|
|
|
|
check_pkg_config "libarchive support" $_libarchive LIBARCHIVE 'libarchive >= 3.0.0'
|
|
|
|
check_trivial "encoding" $_encoding ENCODING
|
|
|
|
# needs dlopen on unix
|
|
_dlopen="$_dl"
|
|
check_yes_no $_dlopen DLOPEN
|
|
|
|
extra_ldflags="$extra_ldflags $_ld_pthread"
|
|
libs_mplayer="$libs_mplayer $_ld_dl"
|
|
|
|
CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE"
|
|
|
|
# This is done so waf builds won't conflict with this. In fact, waf and old
|
|
# build system can coexist in parallel, at the same time. This is because
|
|
# waf always does out-of-tree builds, while this build system does always
|
|
# in-tree builds.
|
|
|
|
if test ! -f Makefile ; then
|
|
ln -s TOOLS/old-makefile Makefile
|
|
fi
|
|
|
|
cat > old_build/config.mak << EOF
|
|
# -------- Generated by configure -----------
|
|
export LC_ALL = C
|
|
|
|
CONFIGURATION = $configuration
|
|
|
|
prefix = \$(DESTDIR)$_prefix
|
|
BINDIR = \$(DESTDIR)$_bindir
|
|
MANDIR = \$(DESTDIR)$_mandir
|
|
CONFDIR = \$(DESTDIR)$_confdir
|
|
|
|
CC = $_cc
|
|
INSTALL = install
|
|
|
|
CFLAGS = -Iold_build $OURCFLAGS $CFLAGS $extra_cflags
|
|
DEPFLAGS = $DEPFLAGS
|
|
|
|
EXTRALIBS = $extra_ldflags $_ld_static $_ld_lm $libs_mplayer $end_ldflags
|
|
|
|
RST2MAN = $_rst2man
|
|
BUILD_MAN = $_build_man
|
|
|
|
# features
|
|
EOF
|
|
cat $CONFIG_MAK >> old_build/config.mak
|
|
|
|
cat > $TMPC << EOF
|
|
/*----------------------------------------------------------------------------
|
|
** This file has been automatically generated by configure any changes in it
|
|
** will be lost when you run configure again.
|
|
** Instead of modifying definitions here, use the --enable/--disable options
|
|
** of the configure script! See ./configure --help for details.
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef MPV_CONFIG_H
|
|
#define MPV_CONFIG_H
|
|
|
|
#define CONFIGURATION "$configuration"
|
|
|
|
#define MPV_CONFDIR "$_confdir"
|
|
|
|
/* we didn't bother to add actual config checks for this, or they are
|
|
for platforms not supported by this configure script */
|
|
#define HAVE_BSD_FSTATFS 0
|
|
#define HAVE_LINUX_FSTATFS 1
|
|
#define HAVE_GL_COCOA 0
|
|
#define HAVE_COCOA 0
|
|
#define HAVE_COCOA_APPLICATION 0
|
|
#define HAVE_COREVIDEO 0
|
|
#define HAVE_COREAUDIO 0
|
|
#define HAVE_GL_WIN32 0
|
|
#define HAVE_DIRECT3D 0
|
|
#define HAVE_DSOUND 0
|
|
#define HAVE_WASAPI 0
|
|
#define HAVE_DOS_PATHS 0
|
|
#define HAVE_PRIORITY 0
|
|
#define HAVE_GLOB 1
|
|
#define HAVE_NANOSLEEP 1
|
|
#define HAVE_SDL1 0
|
|
#define HAVE_POSIX_SPAWN 1
|
|
#define HAVE_GLIBC_THREAD_NAME (!!__GLIBC__)
|
|
#define HAVE_OSX_THREAD_NAME 0
|
|
#define HAVE_BSD_THREAD_NAME 0
|
|
#define HAVE_NETBSD_THREAD_NAME 0
|
|
#define HAVE_DXVA2_HWACCEL 0
|
|
#define HAVE_FCHMOD 0
|
|
#define HAVE_RPI 0
|
|
#define HAVE_RPI_GLES 0
|
|
#define HAVE_AV_PIX_FMT_MMAL 0
|
|
#define HAVE_DRM 0
|
|
#define HAVE_EGL_DRM 0
|
|
#define HAVE_VIDEOTOOLBOX_HWACCEL 0
|
|
#define HAVE_VIDEOTOOLBOX_GL 0
|
|
#define HAVE_SSE4_INTRINSICS 1
|
|
#define HAVE_C11_TLS 1
|
|
#define HAVE_EGL_ANGLE 0
|
|
#define HAVE_GPL3 1
|
|
#define HAVE_WIN32 0
|
|
|
|
#ifdef __OpenBSD__
|
|
#define DEFAULT_CDROM_DEVICE "/dev/rcd0c"
|
|
#define DEFAULT_DVD_DEVICE "/dev/rcd0c"
|
|
#else
|
|
#define DEFAULT_CDROM_DEVICE "/dev/cdrom"
|
|
#define DEFAULT_DVD_DEVICE "/dev/dvd"
|
|
#endif
|
|
#define PATH_DEV_DSP "/dev/dsp"
|
|
#define PATH_DEV_MIXER "/dev/mixer"
|
|
|
|
EOF
|
|
cat $CONFIG_H >> $TMPC
|
|
echo '#endif /* MPV_CONFIG_H */' >> $TMPC
|
|
|
|
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
|
|
cmp -s "$TMPC" old_build/config.h || mv -f "$TMPC" old_build/config.h
|
|
|
|
cat <<EOF
|
|
|
|
Configuration successful. See $TMPLOG for details.
|
|
|
|
NOTE: The --enable-* parameters unconditionally force options on, completely
|
|
skipping autodetection. This behavior is unlike what you may be used to from
|
|
autoconf-based configure scripts that can decide to override you. This greater
|
|
level of control comes at a price. You may have to provide the correct compiler
|
|
and linker flags yourself.
|
|
If you used one of these options and experience a compilation or
|
|
linking failure, make sure you have passed the necessary compiler/linker flags
|
|
to configure.
|
|
|
|
WARNING: The ./old-configure + make build system you are using is deprecated in
|
|
favour of waf and will be removed in a future version of mpv. Check the
|
|
README for instructions on how to build mpv with the new build system.
|
|
This will not work correctly on MinGW, Cygwin, OSX, and other systems.
|
|
|
|
EOF
|