From 0f063a5011ff120e672bd886f6090fc53d880259 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 9 May 2015 19:55:11 +0200 Subject: old-configure: hide It shouldn't be used, but it's still in the repo because I say so. --- TOOLS/old-configure | 975 ++++++++++++++++++++++++++++++++++++++++++++++++++++ TOOLS/old-makefile | 496 ++++++++++++++++++++++++++ 2 files changed, 1471 insertions(+) create mode 100755 TOOLS/old-configure create mode 100644 TOOLS/old-makefile (limited to 'TOOLS') diff --git a/TOOLS/old-configure b/TOOLS/old-configure new file mode 100755 index 0000000000..edc0dc1196 --- /dev/null +++ b/TOOLS/old-configure @@ -0,0 +1,975 @@ +#! /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. +# +# 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 _pvr "Video4Linux2 MPEG PVR" + 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 _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 _ladspa "LADSPA plugin support" + opt_yes_no _libbs2b "libbs2b audio filter support" + 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 _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 -Wredundant-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) + +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." +fi + +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 + +if test "$_vaapi" = yes ; then + check_pkg_config "VAAPI VPP" auto VAAPI_VPP 'libva >= 0.34.0' +else + check_yes_no no VAAPI_VPP +fi + +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 +#else +#include +#include +#endif +#include +#include +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' + +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 "zlib" auto ZLIB 'zlib' +test $(defretval) = no && die "Unable to find development files for zlib." + +test "$_dl" = no && _ladspa=no +check_statement_libs "LADSPA plugin support" $_ladspa LADSPA ladspa.h 'LADSPA_Descriptor ld = {0}' + +check_pkg_config "libbs2b audio filter support" $_libbs2b LIBBS2B 'libbs2b' + +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' + +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' + +test "$_tv_v4l2" = no && _pvr=no +check_compile "Video 4 Linux 2 MPEG PVR interface" $_pvr PVR waftools/fragments/pvr.c + +# 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 "lua >= 5.2.0" +test_lua "lua5.2 >= 5.2.0" # debian +test_lua "lua52 >= 5.2.0" # OpenBSD + +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_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 0 +#define HAVE_VDA_AV_VDA_ALLOC_CONTEXT 0 +#define HAVE_VDA_HWACCEL 0 +#define HAVE_VDA_LIBAVCODEC_REFCOUNTING 0 +#define HAVE_VDA_GL 0 +#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_WAIO 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 + +#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 <$@ + +MKVLIB_DEPS = TOOLS/lib/Parse/Matroska.pm \ + TOOLS/lib/Parse/Matroska/Definitions.pm \ + TOOLS/lib/Parse/Matroska/Element.pm \ + TOOLS/lib/Parse/Matroska/Reader.pm \ + TOOLS/lib/Parse/Matroska/Utils.pm \ + +demux/ebml.c demux/demux_mkv.c: demux/ebml_types.h +demux/ebml_types.h: TOOLS/matroska.pl $(MKVLIB_DEPS) + ./$< --generate-header > $@ + +demux/ebml.c: demux/ebml_defs.c +demux/ebml_defs.c: TOOLS/matroska.pl $(MKVLIB_DEPS) + ./$< --generate-definitions > $@ + +video/out/x11_common.c: video/out/x11_icon.inc +video/out/x11_icon.inc: TOOLS/file2string.pl video/out/x11_icon.bin + ./$^ >$@ + +sub/osd_libass.c: sub/osd_font.h +sub/osd_font.h: TOOLS/file2string.pl sub/osd_font.otf + ./$^ >$@ + +player/lua/%.inc: TOOLS/file2string.pl player/lua/%.lua + ./$^ >$@ + +player/lua.c: player/lua/defaults.inc \ + player/lua/assdraw.inc \ + player/lua/osc.inc \ + player/lua/ytdl_hook.inc \ + player/lua/options.inc + +etc/_mpv: TOOLS/zsh.pl ./mpv + ./$< > $@ + +# ./configure must be rerun if it changed +config.mak: configure + @echo "############################################################" + @echo "####### Please run ./configure again - it's changed! #######" + @echo "############################################################" + +version.h .version: version.sh + ./$< + +# Force version.sh to run to potentially regenerate version.h +-include .version + +%: %.c + $(CC) $(CFLAGS) -o $@ $^ + + +###### dependency declarations / specific CFLAGS ###### + +common/version.c: version.h + +DOCS/man/mpv.1: DOCS/man/af.rst \ + DOCS/man/ao.rst \ + DOCS/man/changes.rst \ + DOCS/man/encode.rst \ + DOCS/man/input.rst \ + DOCS/man/options.rst \ + DOCS/man/vf.rst \ + DOCS/man/vo.rst + +###### installation / clean / generic rules ####### + +install: $(INSTALL_BIN) install-data $(INSTALL_MAN) +install-no-man: $(INSTALL_BIN) install-data +install-strip: $(INSTALL_BIN_STRIP) install-data $(INSTALL_MAN) +install-strip-no-man: $(INSTALL_BIN_STRIP) install-data + +install-dirs: + if test ! -d $(BINDIR) ; then $(INSTALL) -d $(BINDIR) ; fi + +install-%: % install-dirs + $(INSTALL) -m 755 $< $(BINDIR) + +install-%-strip: % install-dirs + $(INSTALL) -m 755 -s $< $(BINDIR) + +install-mpv-man: install-mpv-man-en + +install-mpv-man-en: DOCS/man/mpv.1 + if test ! -d $(MANDIR)/man1 ; then $(INSTALL) -d $(MANDIR)/man1 ; fi + $(INSTALL) -m 644 DOCS/man/mpv.1 $(MANDIR)/man1/ + +ICONSIZES = 16x16 32x32 64x64 + +define ICON_INSTALL_RULE +install-mpv-icon-$(size): etc/mpv-icon-8bit-$(size).png + $(INSTALL) -d $(prefix)/share/icons/hicolor/$(size)/apps + $(INSTALL) -m 644 etc/mpv-icon-8bit-$(size).png $(prefix)/share/icons/hicolor/$(size)/apps/mpv.png +endef + +$(foreach size,$(ICONSIZES),$(eval $(ICON_INSTALL_RULE))) + +install-mpv-icons: $(foreach size,$(ICONSIZES),install-mpv-icon-$(size)) + +install-mpv-desktop: etc/mpv.desktop + $(INSTALL) -d $(prefix)/share/applications + $(INSTALL) -m 644 etc/mpv.desktop $(prefix)/share/applications/ + +install-mpv-config: etc/encoding-profiles.conf + $(INSTALL) -d $(CONFDIR) + $(INSTALL) -m 644 etc/encoding-profiles.conf $(CONFDIR) + +install-mpv-zsh: etc/_mpv + $(INSTALL) -d $(prefix)/share/zsh/vendor-completions + $(INSTALL) -m 644 etc/_mpv $(prefix)/share/zsh/vendor-completions/ + +install-data: install-mpv-icons install-mpv-desktop install-mpv-config install-mpv-zsh + +uninstall: + $(RM) $(BINDIR)/mpv + $(RM) $(MANDIR)/man1/mpv.1 $(MANDIR)/man1/mpv.1 + $(RM) $(prefix)/share/applications/mpv.desktop + $(RM) $(prefix)/share/zsh/vendor-completions/_mpv + $(RM) $(foreach size,$(ICONSIZES),$(prefix)/share/icons/hicolor/$(size)/apps/mpv.png) + +clean: + -$(RM) $(call ADD_ALL_DIRS,/*.o /*.d /*.a /*.ho /*~) + -$(RM) $(call ADD_ALL_DIRS,/*.o /*.a /*.ho /*~) + -$(RM) mpv + -$(RM) DOCS/man/*/mpv.1 + -$(RM) version.h + -$(RM) input/input_conf.h + -$(RM) video/out/vdpau_template.c + -$(RM) demux/ebml_types.h demux/ebml_defs.c + -$(RM) video/out/x11_icon.inc + -$(RM) sub/osd_font.h + -$(RM) player/lua/defaults.inc + -$(RM) player/lua/assdraw.inc + -$(RM) player/lua/osc.inc + -$(RM) player/lua/ytdl_hook.inc + -$(RM) player/lua/options.inc + +distclean: clean + -$(RM) config.log old_build/config.h old_build/config.mak Makefile + -rmdir old_build/ + +-include $(DEP_FILES) + +.PHONY: all *install* *clean .version + +# Disable suffix rules. Most of the builtin rules are suffix rules, +# so this saves some time on slow systems. +.SUFFIXES: + +# If a command returns failure but changed its target file, delete the +# (presumably malformed) file. Otherwise the file would be considered to +# be up to date if make is restarted. + +.DELETE_ON_ERROR: -- cgit v1.2.3