From 6551ea5bd3e9781e3740e99a00c56a49917d5fc9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 21 Jun 2019 02:13:48 +0200 Subject: new build system Further changes by the following people: James Ross-Gowan : win32 fixes --- configure | 1019 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1019 insertions(+) create mode 100755 configure (limited to 'configure') diff --git a/configure b/configure new file mode 100755 index 0000000000..456cc8c6d3 --- /dev/null +++ b/configure @@ -0,0 +1,1019 @@ +#!/usr/bin/env python3 + +#missing: +#- actually support out of tree builds +#- libmpv +#- doc generation +#- windows console wrapper thing (?) +#- osx testing +#- swift stuff (impossible, crapple wants you to stick a dagger up your ass?) +#- vaapi interops (?) +#- RPI stuff +#- newer BSD changes +#- it's weird how the wayland trash is compiled to BUILDDIR/BUILDDIR/ + +import os +from TOOLS.configure_common import * + +begin() + +# (workaround for insufficient Python lambda syntax) +def chain(*a): + return a[-1] + +check("-lgpl", + desc = "LGPL (version 2.1 or later) build", + default = False) +check("gpl*", + desc = "GPL (version 2 or later) build", + deps_neg = "lgpl") +check("-build-date*", + desc = "whether to include binary compile time", + fn = lambda: chain(add_cflags("-DNO_BUILD_TIMESTAMPS"), True)) +check(desc = "whether compiler works", + required = "C compiler missing or broken", + fn = lambda: check_program("CC") and check_cc(link = [])) +check(desc = "pkg-config", + required = "pkg-config missing or broken", + fn = lambda: check_program("PKG_CONFIG")) + +check("-cplayer", + desc = "mpv CLI player binary") +check("-libmpv-shared", + desc = "libmpv shared library", + fn = lambda: check_cc(flags = "-fPIC"), + #'-Wl,-version-script', '-Wl,mpv.def + default = False) +check("-libmpv-static", + desc = "libmpv static library", + default = False, + deps_neg = "libmpv-shared") + +add_cflags("-MD", "-MP", "-D_ISOC99_SOURCE", "-D_GNU_SOURCE", + "-D_LARGEFILE_SOURCE", "-D_FILE_OFFSET_BITS=64", + "-D_LARGEFILE64_SOURCE", + "-Wall") +check(desc = "C11/C99", + fn = lambda: check_cc(flags = "-std=c11") or + check_cc(flags = "-std=c99"), + required = "No C11 or C99 support.") +check("-optimize", + fn = lambda: chain(add_cflags("-O2"), True), + desc = "whether to optimize") +check("-debug-build", + desc = "whether to compile-in debugging information", + fn = lambda: chain(add_cflags("-g"), + check_cc(flags = ["-g3", "-ggdb"]), + True)) +check(desc = "warning cflags", + fn = lambda: check_cc(flags = [ + "-Werror=implicit-function-declaration", + "-Wno-error=deprecated-declarations", + "-Wno-error=unused-function", + "-Wempty-body", + "-Wdisabled-optimization", + "-Wstrict-prototypes", + "-Wno-format-zero-length", + "-Werror=format-security", + "-Wno-redundant-decls", + "-Wvla", + "-Wno-format-truncation"])) +check(desc = "-fno-math-errno", + fn = lambda: check_cc(flags = "-fno-math-errno")) + +check("gnuc", + desc = "GNU C", + fn = lambda: check_cc(defined = "__GNUC__")) +check("clang", + fn = lambda: check_cc(defined = "__clang__")) + +# Note that an important reason to try different set of warning flags is the +# fact that both compilers may have different bogus behavior wrt. certain +# warning options. What is needed on one compiler may be annoying or dangerous +# on the other. +check(desc = "extra gcc warnings", + deps = "gnuc", + deps_neg = "clang", + fn = lambda: check_cc(flags = [ + "-Wall", "-Wundef", "-Wmissing-prototypes", "-Wshadow", + "-Wno-switch", "-Wparentheses", "-Wpointer-arith", + "-Wno-pointer-sign", + # GCC bug 66425 + "-Wno-unused-result"])) +check(desc = "extra clang warnings", + deps = "clang", + fn = lambda: check_cc(flags = [ + "-Wno-logical-op-parentheses", "-fcolor-diagnostics", + "-Wno-tautological-compare", + "-Wno-tautological-constant-out-of-range-compare"])) + +check("-usan", + desc = "undefined sanitizer", + fn = lambda: check_cc(flags = "-fsanitize=undefined", link = [])) + +# Reminder: normally always built, but enabled by MPV_LEAK_REPORT. +# Building it can be disabled only by defining NDEBUG through CFLAGS. +check("-ta-leak-report*", + desc = "enable ta leak report by default (development only)", + default = False) + +check("libdl*", + fn = lambda: check_cc(link = "-ldl", include = "dlfcn.h", + expr = 'dlopen("", 0);')) +check("libm", + fn = lambda: check_cc(link = "-lm")) +check("win32", + fn = lambda: check_cc(defined = "_WIN32", + flags = ["-D_WIN32_WINNT=0x0602", "-DUNICODE", "-DCOBJMACROS", + "-DINITGUID", "-U__STRICT_ANSI__", + "-D__USE_MINGW_ANSI_STDIO=1"], + include = "windows.h", + link = ["-Wl,--major-os-version=6,--minor-os-version=0", + "-Wl,--major-subsystem-version=6,--minor-subsystem-version=0", + "-mwindows"]) and + check_program("WINDRES") and + chain(set_exe_format("pe"), True), + sources = ["osdep/mpv.rc", + "osdep/w32_keyboard.c", + "osdep/windows_utils.c"]) + +check("osx", + fn = lambda: check_cc(defined = "__APPLE__") and + chain(set_exe_format("macho"), True)) + +check("mingw", + fn = lambda: check_cc(include = "stdlib.h", + defined = ["__MINGW32__", "__MINGW64_VERSION_MAJOR"])) +check("posix*", + fn = lambda: check_cc(include = "unistd.h", + defined = "_POSIX_VERSION"), + sources = ["osdep/polldev.c", + "sub/filter_regex.c"]) +check("development environment", + deps_any = ["posix", "mingw"], + required = "Unable to find either POSIX or MinGW-w64 environment.") + +check("-cplugins*", + desc = "C plugins", + deps = "libdl", + deps_neg = "win32", + fn = lambda: check_cc(link = "-rdynamic")) + +check("noexecstack", + fn = lambda: check_cc(link = "-Wl,-z,noexecstack")) + +check("win-dep", + deps = "win32", + fn = lambda: check_cc(link = ["-Wl,--nxcompat", "-Wl,--no-seh", "-Wl,--dynamicbase"])) + +check("-android*", + fn = lambda: check_cc(include = "android/api-level.h", + expr = "(void)__ANDROID__;", + link = ["-landroid", "-lEGL"]), + sources = ["osdep/android/strnlen.c", + "video/out/opengl/context_android.c", + "video/out/vo_mediacodec_embed.c"]) + +check("-uwp*", + desc = "Universal Windows Platform", + deps = "mingw", + default = False, + fn = lambda: check_cc(link = "-lwindowsapp"), + sources = "osdep/path-uwp.c") +check("win32-desktop*", + desc = "win32 desktop APIs", + deps = "win32", + deps_neg = "uwp", + fn = lambda: check_cc(link = ["-lwinmm", "-lgdi32", "-lole32", + "-luuid", "-lavrt", "-ldwmapi", + "-lversion"]), + sources = ["osdep/path-win.c", + "video/out/w32_common.c", + "video/out/win32/displayconfig.c", + "video/out/win32/droptarget.c"]) +def check_vista_pthreads(): + path = os.path.abspath(os.path.join(get_root_dir(), "osdep/win32/include")) + add_cflags("-I%s" % path) + add_cflags("-isystem%s" % path) + # define IN_WINPTHREAD to workaround mingw stupidity (we never want it + # to define features specific to its own pthread stuff) + add_cflags("-DIN_WINPTHREAD") + return True +check("-win32-internal-pthreads*", + deps = "win32", + deps_neg = "posix", + fn = lambda: check_vista_pthreads(), + sources = "osdep/win32/pthread.c") +check("pthreads", + deps_neg = "win32-internal-pthreads", + fn = lambda: check_cc(link = "-pthread", flags = "-pthread", + include = "pthread.h", + expr = "pthread_self();")) +check(desc = "any pthread support", + deps_any = ["pthreads", "win32-internal-pthreads"], + required = "Unable to find pthreads support.") +check("stdatomic*", + fn = lambda: check_cc(include = "stdatomic.h", + expr = + "atomic_int_least64_t test = ATOMIC_VAR_INIT(123);" + "atomic_fetch_add(&test, 1);")) +check("atomics", + desc = "stdatomic.h support or slow emulation", + deps_any = ["stdatomic", "gnuc"], + required = "Required.") +check("librt", + fn = lambda: check_cc(link = "-lrt")) +check("iconv*", + fn = lambda: check_cc(include = "iconv.h", link = [], + expr = "iconv_open(0, 0);") or + check_cc(include = "iconv.h", link = "-liconv", + expr = "iconv_open(0, 0);"), + required = "Unable to find iconv which should be part of a standard \ +compilation environment. Aborting. If you really mean to compile without \ +iconv support use --disable-iconv.") +check("dos-paths*", + deps = "win32") +check("glob-posix*", + desc = "glob() POSIX support", + deps = "posix", + deps_neg = "win32", + fn = lambda: check_cc(include = "glob.h", + expr = 'glob("filename", 0, 0, 0);')) +check("glob-win32", + desc = "glob() win32 replacement", + deps_neg = "glob-posix", + deps = "win32", + sources = "osdep/glob-win.c"), +check("glob*", + desc = "any glob() support", + deps_any = ["glob-posix", "glob-win32"]) +check("fchmod*", + fn = lambda: check_cc(include = "sys/stat.h", expr = "fchmod(0, 0);")) +check("glibc-thread-name*", + deps = "pthreads", + fn = lambda: check_cc(include = "pthread.h", + expr = 'pthread_setname_np(pthread_self(), "ducks");')) +check("osx-thread-name*", + deps = "pthreads", + fn = lambda: check_cc(include = "pthread.h", + expr = 'pthread_setname_np("ducks");')) +check("bsd-thread-name*", + deps = "pthreads", + fn = lambda: check_cc(include = ["pthread.h", "pthread_np.h"], + expr = 'pthread_set_name_np(pthread_self(), "ducks");')) +check("bsd-fstatfs*", + fn = lambda: check_cc(include = ["sys/param.h", "sys/mount.h"], + expr = "struct statfs fs; fstatfs(0, &fs); fs.f_fstypename;")) +check("linux-fstatfs*", + fn = lambda: check_cc(include = "sys/vfs.h", + expr = "struct statfs fs; fstatfs(0, &fs); fs.f_namelen;")) + +check("-lua*", + fn = lambda: + check_pkg_config("lua >= 5.1.0 lua < 5.2.0") or + check_pkg_config("lua51 >= 5.1.0") or # OpenBSD + check_pkg_config("lua5.1 >= 5.1.0") or # debian + check_pkg_config("lua-5.1 >= 5.1.0") or # FreeBSD + check_pkg_config("lua >= 5.2.0 lua < 5.3.0" ) or + check_pkg_config("lua52 >= 5.2.0") or # Arch + check_pkg_config("lua5.2 >= 5.2.0") or # debian + check_pkg_config("lua-5.2 >= 5.2.0") or # FreeBSD + check_pkg_config("luajit >= 2.0.0"), + sources = "player/lua.c") +check("-javascript*", + fn = lambda: check_pkg_config("mujs", ">= 1.0.0"), + sources = "player/javascript.c") +check("-libass*", + desc = "libass subtitle/OSD renderer", + fn = lambda: check_pkg_config("libass >= 0.12.1"), + required = "Unable to find development files for libass, or the version " + + "found is too old. Aborting. You can use --disable-libass " + + "to ignore this warning.", + sources = ["sub/ass_mp.c", + "sub/osd_libass.c", + "sub/sd_ass.c"]) +check(deps_neg = "libass", + sources = "sub/osd_dummy.c") +check("-zlib*", + fn = lambda: check_cc(link = "-lz", include = "zlib.h", + expr = "inflate(0, Z_NO_FLUSH);"), + required = "Unable to find development files for zlib.") +check("-uchardet*", + fn = lambda: check_pkg_config("uchardet")) +check("-cocoa*", + deps = "osx", + fn = lambda: check_cc(decl = "#import ", + language = "m"), + sources = ["osdep/macosx_application.m", + "osdep/macosx_events.m", + "osdep/macosx_menubar.m", + "osdep/path-macosx.m", + "video/out/cocoa_common.m", + "video/out/cocoa/events_view.m", + "video/out/cocoa/video_view.m", + "video/out/cocoa/window.m"]) +check("-rubberband*", + fn = lambda: check_pkg_config("rubberband >= 1.8.0"), + sources = "audio/filter/af_rubberband.c") +check("-lcms2*", + fn = lambda: check_pkg_config("lcms2 >= 2.6")) +check("-vapoursynth*", + fn = lambda: check_pkg_config("vapoursynth >= 24") and + check_pkg_config("vapoursynth-script >= 23")) +check("-vapoursynth-lazy*", + desc = "VapourSynth filter bridge (Lazy Lua)", + deps = "lua", + fn = lambda: check_pkg_config("vapoursynth >= 24")) +check("vapoursynth-core*", + deps = ["vapoursynth", "vapoursynth-lazy"], + sources = "video/filter/vf_vapoursynth.c") +check("-libarchive*", + desc = "libarchive wrapper for reading zip files and more", + fn = lambda: check_pkg_config("libarchive >= 3.0.0"), + sources = ["demux/demux_libarchive.c", + "stream/stream_libarchive.c"]) + +check(desc = "FFmpeg", + fn = lambda: check_pkg_config( + "libavutil >= 56.12.100", + "libavcodec >= 58.16.100", + "libavformat >= 58.9.100", + "libswscale >= 5.0.101", + "libavfilter >= 7.14.100", + "libswresample >= 3.0.100"), + required = "Unable to find development files for some of the required \ +FFmpeg libraries.") +check("-ffmpeg-strict-abi*", + desc = "Disable all known FFmpeg ABI violations'", + default = False) + +check("-zimg*", + desc = "libzimg support (high quality software scaler)", + fn = lambda: check_pkg_config("zimg >= 2.9"), + sources = ["video/filter/vf_fingerprint.c", + "video/zimg.c"]), + +check("-libavdevice*", + fn = lambda: check_pkg_config("libavdevice >= 57.0.0")) + +check("-sdl2", + default = False, + fn = lambda: check_pkg_config('sdl2')) +check("-sdl2-audio*", + deps = "sdl2", + sources = "audio/out/ao_sdl.c") +check("-sdl2-video*", + deps = "sdl2", + sources = "video/out/vo_sdl.c") +check("-sdl2-gamepad*", + desc = "SDL2 gamepad input", + deps = "sdl2", + default = False, + sources = "input/sdl_gamepad.c") + +check("-pulse*", + fn = lambda: check_pkg_config("libpulse >= 1.0"), + sources = "audio/out/ao_pulse.c") +check("-jack*", + deps = "gpl", + fn = lambda: check_pkg_config("jack"), + sources = "audio/out/ao_jack.c") +check("-openal*", + default = False, + fn = lambda: check_pkg_config("openal >= 1.13"), + sources = "audio/out/ao_openal.c") +check("-opensles*", + fn = lambda: check_cc(include = "SLES/OpenSLES.h", + link = "-lOpenSLES", + expr = "slCreateEngine;"), + sources = "audio/out/ao_opensles.c") +check("-alsa*", + fn = lambda: check_pkg_config("alsa >= 1.0.18"), + sources = "audio/out/ao_alsa.c") +check("-coreaudio*", + # TODO: missing frameworks: "CoreFoundation", "CoreAudio", "AudioUnit", "AudioToolbox" + deps = "osx", + sources = ["audio/out/ao_coreaudio.c", + "audio/out/ao_coreaudio_chmap.c", + "audio/out/ao_coreaudio_exclusive.c", + "audio/out/ao_coreaudio_properties.c", + "audio/out/ao_coreaudio_utils.c"]) +check("-audiounit*", + desc = "AudioUnit output for iOS", + # TODO: missing frameworks: "Foundation", "AudioToolbox" + deps = "osx", + sources = ["audio/out/ao_audiounit.m", + "audio/out/ao_coreaudio_chmap.c", + "audio/out/ao_coreaudio_utils.c"]) +check("-wasapi*", + deps = "win32", + sources = ["audio/out/ao_wasapi.c", + "audio/out/ao_wasapi_changenotify.c", + "audio/out/ao_wasapi_utils.c"]) + +check("vt_h*", + fn = lambda: check_cc(include = ["sys/vt.h", "sys/ioctl.h"], + expr = "int m; ioctl(0, VT_GETMODE, &m);")) +check("consio_h*", + deps_neg = "vt_h", + fn = lambda: check_cc(include = ["sys/consio.h", "sys/ioctl.h"], + expr = "int m; ioctl(0, VT_GETMODE, &m);")) +check("-drm*", + deps_any = ["vt_h", "consio_h"], + fn = lambda: check_pkg_config("libdrm"), + sources = ["video/out/drm_atomic.c", + "video/out/drm_common.c", + "video/out/vo_drm.c"]) +check("-drmprime*", + fn = lambda: check_cc(include = "libavutil/pixfmt.h", + expr = "int i = AV_PIX_FMT_DRM_PRIME;")) +check(deps = ["drm", "drmprime"], + sources = ["video/out/drm_prime.c", + "video/out/opengl/hwdec_drmprime_drm.c"]) + +check("gbm", + fn = lambda: check_pkg_config("gbm")) + +def check_wayland_protos(): + data = get_pkg_config_variable("wayland-protocols", "pkgdatadir") + if data is None: + return False + add_config_mak_var("WL_PROTO_DIR", data) + return True + +check("-wayland*", + # TODO: where does this check whether the protocol files are available? + fn = lambda: check_wayland_protos() and + check_program("WAYSCAN") and + check_pkg_config("wayland-client >= 1.6.0", + "wayland-cursor >= 1.6.0", + "xkbcommon >= 0.3.0"), + sources = ["video/out/wayland_common.c", + "$(BUILD)/generated/wayland/idle-inhibit-unstable-v1.c", + "$(BUILD)/generated/wayland/presentation-time.c", + "$(BUILD)/generated/wayland/xdg-shell.c", + "$(BUILD)/generated/wayland/xdg-decoration-unstable-v1.c"]) +check("memfd_create*", + desc = "Linux's memfd_create()", + deps = "wayland", + fn = lambda: check_cc(include = "sys/mman.h", link = [], + expr = "memfd_create(0, MFD_CLOEXEC | MFD_ALLOW_SEALING);"), + sources = "video/out/vo_wlshm.c") + +check("-x11*", + deps = "gpl", + fn = lambda: check_pkg_config("x11 >= 1.0.0", + "xscrnsaver >= 1.0.0", + "xext >= 1.0.0", + "xinerama >= 1.0.0", + "xrandr >= 1.2.0"), + sources = ["video/out/vo_x11.c", + "video/out/x11_common.c"]) +check("-xv*", + deps = "x11", + fn = lambda: check_pkg_config("xv"), + sources = "video/out/vo_xv.c") + +check("-libplacebo*", + desc = "libplacebo support", + fn = lambda: check_pkg_config("libplacebo >= 1.18.0"), + sources = ["video/out/placebo/ra_pl.c", + "video/out/placebo/utils.c"]) + +check("-vulkan*", + desc = "Vulkan context support", + deps = "libplacebo", + fn = lambda: check_pkg_config("vulkan"), + sources = ["video/out/vulkan/context.c", + "video/out/vulkan/utils.c"]) +check(deps = ["vulkan", "x11"], + sources = "video/out/vulkan/context_xlib.c") +check(deps = ["vulkan", "android"], + sources = "video/out/vulkan/context_android.c") +check(deps = ["vulkan", "wayland"], + sources = "video/out/vulkan/context_wayland.c") +check(deps = ["vulkan", "win32-desktop"], + sources = "video/out/vulkan/context_win.c") + +# TODO: the waf check is much more complicated +check("-egl*", + desc = "EGL 1.4", + fn = lambda: check_pkg_config("egl")) + +check("-gl-cocoa*", + # TODO + fn = lambda: False, + sources = "video/out/opengl/context_cocoa.c") + +check("-gl-x11*", + desc = "OpenGL X11 Backend", + deps = "x11", + fn = lambda: check_cc(link = "-lGL", + include = "GL/glx.h", + expr = "glXGetCurrentDisplay();"), + sources = "video/out/opengl/context_glx.c") +check("-egl-x11*", + desc = "OpenGL X11 EGL Backend", + deps = ["x11", "egl"], + sources = "video/out/opengl/context_x11egl.c") +check("-egl-drm*", + desc = "OpenGL DRM EGL Backend", + deps = ["drm", "gbm", "egl"], + sources = "video/out/opengl/context_drm_egl.c") +check("-gl-wayland*", + desc = "OpenGL Wayland Backend", + deps = ["wayland", "egl"], + fn = lambda: check_pkg_config("wayland-egl >= 9.0.0"), + sources = "video/out/opengl/context_wayland.c") +check("-gl-win32*", + desc = "OpenGL Win32 Backend", + deps = "win32-desktop", + fn = lambda: check_cc(link = "-lopengl32", + include = "windows.h", + expr = "wglCreateContext(0);"), + sources = "video/out/opengl/context_win.c") +check("-gl-dxinterop*", + desc = "OpenGL/DirectX Interop Backend", + deps = "gl-win32", + fn = lambda: check_cc(include = ["GL/gl.h", "GL/wglext.h", "d3d9.h"], + expr = "int i = WGL_ACCESS_WRITE_DISCARD_NV;" + "IDirect3D9Ex *d;"), + sources = "video/out/opengl/context_dxinterop.c") +check("-egl-angle*", + desc = "OpenGL ANGLE headers", + deps = "win32", + fn = lambda: check_cc(include = ["EGL/egl.h", "EGL/eglext.h"], + expr = "int x = EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE;"), + sources = "video/out/opengl/angle_dynamic.c") +check("-egl-angle-lib*", + desc = "OpenGL Win32 ANGLE Library", + deps = "egl-angle", + fn = lambda: check_cc(include = ["EGL/egl.h"], + expr = "eglCreateWindowSurface(0, 0, 0, 0);", + flags = ["-DGL_APICALL=", "-DEGLAPI=", + "-DANGLE_NO_ALIASES", "-DANGLE_EXPORT="], + link = ["-lEGL", "-lGLESv2", "-ldxguid", "-ld3d9", + "-lgdi32", "-lstdc++"])) +check("-egl-angle-win32*", + desc = "OpenGL Win32 ANGLE Backend", + deps = ["egl-angle", "win32-desktop"], + sources = ["video/out/gpu/d3d11_helpers.c", + "video/out/opengl/context_angle.c"]) + +check("-vdpau*", + deps = "x11", + fn = lambda: check_pkg_config("vdpau >= 0.2"), + sources = ["video/filter/vf_vdpaupp.c", + "video/out/vo_vdpau.c", + "video/vdpau.c", + "video/vdpau_mixer.c"]) +check("-vdpau-gl-x11*", + desc = "VDPAU with OpenGL/X11", + deps = ["vdpau", "gl-x11"], + sources = "video/out/opengl/hwdec_vdpau.c") +check("-vaapi*", + desc = "VAAPI acceleration", + fn = lambda: check_pkg_config("libva >= 0.36.0"), + sources = ["video/vaapi.c", + "video/filter/vf_vavpp.c"]) +check("-vaapi-x11*", + desc = "VAAPI (X11 support)", + deps = ["vaapi", "x11"], + fn = lambda: check_pkg_config("libva-x11 >= 0.36.0")) +check(deps = ["vaapi-x11", "gpl"], + sources = "video/out/vo_vaapi.c") +check("-vaapi-wayland*", + desc = "VAAPI (Wayland support)", + deps = ["vaapi", "gl-wayland"], + fn = lambda: check_pkg_config("libva-wayland >= 0.36.0")) +check("-vaapi-drm*", + desc = "VAAPI (DRM/EGL support)", + deps = ["vaapi", "egl-drm"], + fn = lambda: check_pkg_config("libva-drm >= 0.36.0")) +check("-vaapi-glx*", + desc = "VAAPI GLX", + deps = ["gpl", "vaapi-x11", "gl-x11"]) +check("-vaapi-x-egl*", + desc = "VAAPI EGL on X11", + deps = ["vaapi-x11", "egl-x11"]) + +check("-vaapi-vulkan*", + desc = "VAAPI Vulkan", + deps = ["vaapi", "vulkan"], + sources = ["video/out/hwdec/hwdec_vaapi.c", + "video/out/hwdec/hwdec_vaapi_vk.c"]) + +check("-vaapi-egl*", + desc = "VAAPI EGL", + deps_any = ["vaapi-x-egl", "vaapi-wayland"], + sources = ["video/out/hwdec/hwdec_vaapi.c", + "video/out/hwdec/hwdec_vaapi_gl.c"]) + +check("-caca*", + deps = "gpl", + fn = lambda: check_pkg_config("caca >= 0.99.beta18"), + sources = "video/out/vo_caca.c") +check("-jpeg*", + desc = "JPEG support", + fn = lambda: check_cc(include = ["stdio.h", "jpeglib.h"], + link = "-ljpeg")) +check("-direct3d*", + desc = "Ancient D3D9 VO", + deps = ["win32-desktop", "gpl"], + sources = "video/out/vo_direct3d.c") +check("-shaderc-shared", + desc = "libshaderc SPIR-V compiler (shared library)", + fn = lambda: check_cc(include = "shaderc/shaderc.h", + link = "-lshaderc_shared")) +check("-shaderc-static", + desc = "libshaderc SPIR-V compiler (static library)", + deps_neg = "shaderc-shared", + fn = lambda: check_cc(include = "shaderc/shaderc.h", + link = ["-lshaderc_combined", "-lstdc++"])) +check("shaderc*", + desc = "libshaderc SPIR-V compiler", + deps_any = ["shaderc-shared", "shaderc-static"], + sources = "video/out/gpu/spirv_shaderc.c") +check("-spirv-cross-shared", + desc = "SPIRV-Cross SPIR-V shader converter (shared library)", + fn = lambda: check_pkg_config("spirv-cross-c-shared")) +check("-spirv-cross-static", + desc = "SPIRV-Cross SPIR-V shader converter (static library)", + deps_neg = "spirv-cross-shared", + fn = lambda: check_pkg_config("spirv-cross")) +check("spirv-cross*", + desc = "SPIRV-Cross SPIR-V shader converter", + deps_any = ["spirv-cross-shared", "spirv-cross-static"]) +check("-d3d11*", + desc = "Direct3D 11 video output", + deps = ["win32-desktop", "shaderc", "spirv-cross",], + fn = lambda: check_cc(include = ["d3d11_1.h", "dxgi1_2.h"]), + sources = ["video/out/d3d11/context.c", + "video/out/d3d11/ra_d3d11.c", + "video/out/gpu/d3d11_helpers.c"]) + +check("-rpi*", + # TODO: or tell them to fuck off + fn = lambda: False, + sources = ["video/out/opengl/context_rpi.c", + "video/out/opengl/hwdec_rpi.c", + "video/out/vo_rpi.c"]) +check("-ios-gl*", + desc = "iOS OpenGL ES hardware decoding interop support", + fn = lambda: check_cc(include = "OpenGLES/ES3/glext.h", + expr = "(void)GL_RGB32F;"), # arbitrary OpenGL ES 3.0 symbol + sources = "video/out/opengl/hwdec_ios.m") +check("-egl-android*", + desc = "Android EGL support", + deps = "android", + fn = lambda: check_cc(link = ["-landroid", "-lEGL"]), + sources = "video/out/opengl/context_android.c") + +check("-plain-gl*", + desc = "OpenGL without platform-specific code (e.g. for libmpv)", + deps = ["libmpv-shared", "libmpv-static"]) + +check("-gl*", + desc = "OpenGL context support", + deps_any = ["gl-cocoa", "gl-x11", "egl-x11", "egl-drm", "egl-android", + "gl-win32", "gl-wayland", "rpi", "plain-gl"], + required = "No OpenGL video output found or enabled. " + + "Aborting. If you really mean to compile without OpenGL " + + "video outputs use --disable-gl.", + sources = ["video/out/opengl/common.c", + "video/out/opengl/context.c", + "video/out/opengl/formats.c", + "video/out/opengl/libmpv_gl.c", + "video/out/opengl/ra_gl.c", + "video/out/opengl/utils.c"]) + +check("egl-helpers*", + desc = "EGL helper functions", + deps_any = ["egl-x11", "rpi", "gl-wayland", "egl-drm", + "egl-angle-win32", "egl-android"], + sources = ["video/filter/vf_gpu.c", # doesn't really belong here + "video/out/opengl/egl_helpers.c"]), + +check("videotoolbox-hwaccel*", + desc = "libavcodec videotoolbox hwaccel", + deps_any = ["gl-cocoa", "ios-gl"]) +check("-videotoolbox-gl*", + desc = "Videotoolbox with OpenGL", + deps = ["gl-cocoa", "videotoolbox-hwaccel"], + sources = "video/out/opengl/hwdec_osx.c") +check("-d3d-hwaccel*", + desc = "D3D11VA hwaccel", + deps = "win32", + sources = ["video/d3d.c", + "video/filter/vf_d3d11vpp.c"]) +check("-d3d9-hwaccel*", + desc = "DXVA2 hwaccel", + deps = "d3d-hwaccel") +check("-gl-dxinterop-d3d9*", + desc = "OpenGL/DirectX Interop Backend DXVA2 interop", + deps = ["gl-dxinterop", "d3d9-hwaccel"], + sources = "video/out/opengl/hwdec_dxva2gldx.c") + +check("-cuda-hwaccel*", + desc = "CUDA acceleration base dependencies", + fn = lambda: check_pkg_config("ffnvcodec >= 8.2.15.7"), + sources = "video/cuda.c") +check("-cuda-interop*", + deps = "cuda-hwaccel", + desc = "CUDA with graphics base interop", + sources = "video/out/hwdec/hwdec_cuda.c") +check("-cuda-interop-gl", + desc = "CUDA GL interop", + deps = ["cuda-interop", "gl"], + sources = "video/out/hwdec/hwdec_cuda_gl.c") +check("-cuda-interop-vulkan", + desc = "CUDA Vulkan interop", + deps = ["cuda-interop", "vulkan"], + sources = "video/out/hwdec/hwdec_cuda_vk.c") + +check("-rpi-mmal*", + desc = "Raspberry Pi MMAL hwaccel", + deps = "rpi", + fn = lambda: check_pkg_config("mmal") or + check_pkg_config("/opt/vc/lib/pkgconfig/mmal.pc"), + sources = ["video/out/opengl/hwdec_rpi.c", + "video/out/vo_rpi.c"]) + +check(deps_any = ["gl-x11", "egl-x11"], + sources = ["video/out/opengl/oml_sync.c"]) + +check(deps = ["d3d-hwaccel", "egl-angle"], + sources = ["video/out/opengl/hwdec_d3d11egl.c"]) + +check(deps = ["d3d-hwaccel", "d3d11"], + sources = "video/out/d3d11/hwdec_d3d11va.c") + +check(deps = ["d3d9-hwaccel", "d3d11"], + sources = "video/out/d3d11/hwdec_dxva2dxgi.c") + +check(deps = ["d3d9-hwaccel", "egl-angle"], + sources = "video/out/opengl/hwdec_dxva2egl.c") + +check(deps = ["vulkan", "wayland"], + sources = "video/out/vulkan/context_wayland.c") +check(deps = ["vulkan", "win32-desktop"], + sources = "video/out/vulkan/context_win.c") +check(deps = ["vulkan", "x11"], + sources = "video/out/vulkan/context_xlib.c") + +check("-libbluray*", + desc = "Bluray support", + default = False, + fn = lambda: check_pkg_config("libbluray >= 0.3.0"), + sources = "stream/stream_bluray.c") +check("-dvdnav*", + desc = "dvdnav support", + default = False, + deps = "gpl", + fn = lambda: check_pkg_config("dvdnav >= 4.2.0") and + check_pkg_config("dvdread >= 4.1.0"), + sources = "stream/stream_dvdnav.c"), +check("-cdda*", + desc = "cdda support (libcdio)", + deps = "gpl", + default = False, + fn = lambda: check_pkg_config("libcdio_paranoia"), + sources = "stream/stream_cdda.c") +check("-dvbin*", + desc = "DVB input module", + deps = "gpl", + default = False, + sources = ["stream/dvb_tune.c", "stream/stream_dvb.c"]) + +check("-apple-remote*", + desc = "Apple Remote support", + deps = "cocoa", + sources = "osdep/ar/HIDRemote.m") +check("-macos-touchbar*", + desc = "macOS Touch Bar support", + deps = "cocoa", + # TODO: all that framework stuff + fn = lambda: False, + sources = "osdep/macosx_touchbar.m") +check("-macos-cocoa-cb*", + desc = "macOS opengl-cb backend", + deps = "cocoa") + +check("-tests*", + desc = "unit tests (development only)", + default = False, + sources = ["test/chmap.c", + "test/gl_video.c", + "test/img_format.c", + "test/json.c", + "test/linked_list.c", + "test/paths.c", + "test/scale_sws.c", + "test/scale_test.c", + "test/tests.c"]) +check("tests-zimg", + deps = ["tests", "zimg"], + sources = ["test/repack.c", + "test/scale_zimg.c"]) + +add_sources( + "audio/aframe.c", + "audio/audio_buffer.c", + "audio/chmap.c", + "audio/chmap_sel.c", + "audio/decode/ad_lavc.c", + "audio/decode/ad_spdif.c", + "audio/filter/af_drop.c", + "audio/filter/af_format.c", + "audio/filter/af_lavcac3enc.c", + "audio/filter/af_scaletempo.c", + "audio/fmt-conversion.c", + "audio/format.c", + "audio/out/ao.c", + "audio/out/ao_lavc.c", + "audio/out/ao_null.c", + "audio/out/ao_pcm.c", + "audio/out/buffer.c", + "common/av_common.c", + "common/av_log.c", + "common/codecs.c", + "common/common.c", + "common/encode_lavc.c", + "common/msg.c", + "common/playlist.c", + "common/recorder.c", + "common/stats.c", + "common/tags.c", + "common/version.c", + "demux/cache.c", + "demux/codec_tags.c", + "demux/cue.c", + "demux/demux.c", + "demux/demux_cue.c", + "demux/demux_disc.c", + "demux/demux_edl.c", + "demux/demux_lavf.c", + "demux/demux_mf.c", + "demux/demux_mkv.c", + "demux/demux_mkv_timeline.c", + "demux/demux_null.c", + "demux/demux_playlist.c", + "demux/demux_raw.c", + "demux/demux_timeline.c", + "demux/ebml.c", + "demux/packet.c", + "demux/timeline.c", + "filters/filter.c", + "filters/f_async_queue.c", + "filters/f_auto_filters.c", + "filters/f_autoconvert.c", + "filters/f_decoder_wrapper.c", + "filters/f_demux_in.c", + "filters/f_hwtransfer.c", + "filters/f_lavfi.c", + "filters/f_output_chain.c", + "filters/f_swresample.c", + "filters/f_swscale.c", + "filters/f_utils.c", + "filters/frame.c", + "filters/user_filters.c", + "input/cmd.c", + "input/event.c", + "input/input.c", + "input/ipc.c", + "input/keycodes.c", + "misc/bstr.c", + "misc/charset_conv.c", + "misc/dispatch.c", + "misc/json.c", + "misc/natural_sort.c", + "misc/node.c", + "misc/rendezvous.c", + "misc/ring.c", + "misc/thread_pool.c", + "misc/thread_tools.c", + "options/m_config_core.c", + "options/m_config_frontend.c", + "options/m_option.c", + "options/m_property.c", + "options/options.c", + "options/parse_commandline.c", + "options/parse_configfile.c", + "options/path.c", + "osdep/io.c", + "osdep/path-unix.c", + "osdep/semaphore_osx.c", + "osdep/subprocess.c", + "osdep/threads.c", + "osdep/timer.c", + "player/audio.c", + "player/client.c", + "player/command.c", + "player/configfiles.c", + "player/external_files.c", + "player/loadfile.c", + "player/main.c", + "player/misc.c", + "player/osd.c", + "player/playloop.c", + "player/screenshot.c", + "player/scripting.c", + "player/sub.c", + "player/video.c", + "stream/cookies.c", + "stream/stream.c", + "stream/stream_avdevice.c", + "stream/stream_cb.c", + "stream/stream_concat.c", + "stream/stream_edl.c", + "stream/stream_file.c", + "stream/stream_lavf.c", + "stream/stream_memory.c", + "stream/stream_mf.c", + "stream/stream_null.c", + "sub/dec_sub.c", + "sub/draw_bmp.c", + "sub/filter_sdh.c", + "sub/img_convert.c", + "sub/lavc_conv.c", + "sub/osd.c", + "sub/sd_lavc.c", + "ta/ta.c", + "ta/ta_talloc.c", + "ta/ta_utils.c", + "video/csputils.c", + "video/decode/vd_lavc.c", + "video/filter/refqueue.c", + "video/filter/vf_format.c", + "video/filter/vf_sub.c", + "video/fmt-conversion.c", + "video/hwdec.c", + "video/image_loader.c", + "video/image_writer.c", + "video/img_format.c", + "video/mp_image.c", + "video/mp_image_pool.c", + "video/out/aspect.c", + "video/out/bitmap_packer.c", + "video/out/dither.c", + "video/out/dr_helper.c", + "video/out/filter_kernels.c", + "video/out/gpu/context.c", + "video/out/gpu/error_diffusion.c", + "video/out/gpu/hwdec.c", + "video/out/gpu/lcms.c", + "video/out/gpu/libmpv_gpu.c", + "video/out/gpu/osd.c", + "video/out/gpu/ra.c", + "video/out/gpu/shader_cache.c", + "video/out/gpu/spirv.c", + "video/out/gpu/user_shaders.c", + "video/out/gpu/utils.c", + "video/out/gpu/video.c", + "video/out/gpu/video_shaders.c", + "video/out/vo.c", + "video/out/vo_gpu.c", + "video/out/vo_image.c", + "video/out/vo_lavc.c", + "video/out/vo_libmpv.c", + "video/out/vo_null.c", + "video/out/vo_tct.c", + "video/out/win_state.c", + "video/repack.c", + "video/sws_utils.c", +) + +if is_running(): + + if dep_enabled("cplayer"): + pick_first_matching_dep( + ("cocoa", "osdep/main-fn-cocoa.c"), + ("posix", "osdep/main-fn-unix.c"), + ("win32-desktop", "osdep/main-fn-win.c"), + ) + + pick_first_matching_dep( + ("posix", "osdep/terminal-unix.c"), + ("win32-desktop", "osdep/terminal-win.c"), + ("_", "osdep/terminal-dummy.c"), + ) + + pick_first_matching_dep( + ("win32", "osdep/timer-win2.c"), + ("osx", "osdep/timer-darwin.c"), + ("_", "osdep/timer-linux.c"), + ) + + pick_first_matching_dep( + ("posix", "input/ipc-unix.c"), + ("win32-desktop", "input/ipc-win.c"), + ("_", "input/ipc-dummy.c"), + ) + + pick_first_matching_dep( + ("posix", "osdep/subprocess-posix.c"), + ("win32-desktop", "osdep/subprocess-win.c"), + ("_", "osdep/subprocess-dummy.c"), + ) + +finish() -- cgit v1.2.3