summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input/input.c2
-rw-r--r--input/input.h2
-rw-r--r--input/ipc-dummy.c13
-rw-r--r--options/options.c4
-rw-r--r--osdep/subprocess-dummy.c9
-rw-r--r--osdep/subprocess.c10
-rw-r--r--osdep/terminal-dummy.c31
-rw-r--r--player/command.c2
-rw-r--r--waftools/dependencies.py12
-rw-r--r--wscript33
-rw-r--r--wscript_build.py62
11 files changed, 131 insertions, 49 deletions
diff --git a/input/input.c b/input/input.c
index ee58709017..4a20ab1311 100644
--- a/input/input.c
+++ b/input/input.c
@@ -1392,7 +1392,7 @@ void mp_input_load_config(struct input_ctx *ictx)
talloc_free(tmp);
}
-#if defined(__MINGW32__)
+#if HAVE_WIN32_PIPES
if (ictx->global->opts->input_file && *ictx->global->opts->input_file)
mp_input_pipe_add(ictx, ictx->global->opts->input_file);
#endif
diff --git a/input/input.h b/input/input.h
index ea8460889c..00f5473f7b 100644
--- a/input/input.h
+++ b/input/input.h
@@ -259,6 +259,8 @@ void mp_input_pipe_add(struct input_ctx *ictx, const char *filename);
struct mp_ipc_ctx;
struct mp_client_api;
+
+// Platform specific implementation, provided by ipc-*.c.
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
struct mpv_global *global);
void mp_uninit_ipc(struct mp_ipc_ctx *ctx);
diff --git a/input/ipc-dummy.c b/input/ipc-dummy.c
new file mode 100644
index 0000000000..d9c31c046c
--- /dev/null
+++ b/input/ipc-dummy.c
@@ -0,0 +1,13 @@
+#include <stddef.h>
+
+#include "input/input.h"
+
+struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
+ struct mpv_global *global)
+{
+ return NULL;
+}
+
+void mp_uninit_ipc(struct mp_ipc_ctx *ctx)
+{
+}
diff --git a/options/options.c b/options/options.c
index a803dccf5d..4c42164111 100644
--- a/options/options.c
+++ b/options/options.c
@@ -168,7 +168,7 @@ static const m_option_t mp_vo_opt_list[] = {
OPT_CHOICE("x11-bypass-compositor", x11_bypass_compositor, 0,
({"no", 0}, {"yes", 1}, {"fs-only", 2}, {"never", 3})),
#endif
-#if HAVE_WIN32
+#if HAVE_WIN32_DESKTOP
OPT_STRING("vo-mmcss-profile", mmcss_profile, 0),
#endif
#if HAVE_DRM
@@ -273,7 +273,7 @@ const m_option_t mp_opts[] = {
OPT_STRING("log-file", log_file, CONF_PRE_PARSE | M_OPT_FILE | UPDATE_TERM),
OPT_FLAG("msg-module", msg_module, UPDATE_TERM),
OPT_FLAG("msg-time", msg_time, UPDATE_TERM),
-#if defined(_WIN32) && HAVE_GPL
+#if HAVE_WIN32_DESKTOP && HAVE_GPL
OPT_CHOICE("priority", w32_priority, UPDATE_PRIORITY,
({"no", 0},
{"realtime", REALTIME_PRIORITY_CLASS},
diff --git a/osdep/subprocess-dummy.c b/osdep/subprocess-dummy.c
new file mode 100644
index 0000000000..791c90e566
--- /dev/null
+++ b/osdep/subprocess-dummy.c
@@ -0,0 +1,9 @@
+#include "subprocess.h"
+
+int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx,
+ subprocess_read_cb on_stdout, subprocess_read_cb on_stderr,
+ char **error)
+{
+ *error = "unsupported";
+ return -1;
+}
diff --git a/osdep/subprocess.c b/osdep/subprocess.c
index bc18f44652..1e94d23b67 100644
--- a/osdep/subprocess.c
+++ b/osdep/subprocess.c
@@ -61,13 +61,3 @@ void mp_subprocess_detached(struct mp_log *log, char **args)
if (pthread_create(&thread, NULL, run_subprocess, p))
talloc_free(p);
}
-
-#if !HAVE_SUBPROCESS
-int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx,
- subprocess_read_cb on_stdout, subprocess_read_cb on_stderr,
- char **error)
-{
- *error = "unsupported";
- return -1;
-}
-#endif
diff --git a/osdep/terminal-dummy.c b/osdep/terminal-dummy.c
new file mode 100644
index 0000000000..4a3787e0fa
--- /dev/null
+++ b/osdep/terminal-dummy.c
@@ -0,0 +1,31 @@
+#include "terminal.h"
+
+void terminal_init(void)
+{
+}
+
+void terminal_setup_getch(struct input_ctx *ictx)
+{
+}
+
+void terminal_uninit(void)
+{
+}
+
+bool terminal_in_background(void)
+{
+ return false;
+}
+
+void terminal_get_size(int *w, int *h)
+{
+}
+
+void mp_write_console_ansi(void *wstream, char *buf)
+{
+}
+
+bool terminal_try_attach(void)
+{
+ return false;
+}
diff --git a/player/command.c b/player/command.c
index bc9ee4ab26..b83196c677 100644
--- a/player/command.c
+++ b/player/command.c
@@ -5757,7 +5757,7 @@ void mp_notify(struct MPContext *mpctx, int event, void *arg)
static void update_priority(struct MPContext *mpctx)
{
-#if defined(_WIN32) && HAVE_GPL
+#if HAVE_WIN32_DESKTOP && HAVE_GPL
struct MPOpts *opts = mpctx->opts;
if (opts->w32_priority > 0)
SetPriorityClass(GetCurrentProcess(), opts->w32_priority);
diff --git a/waftools/dependencies.py b/waftools/dependencies.py
index 87f236b362..994e1d10b2 100644
--- a/waftools/dependencies.py
+++ b/waftools/dependencies.py
@@ -212,6 +212,17 @@ def filtered_sources(ctx, sources):
return [__source_file__(source) for source in sources \
if __unpack_and_check_filter__(source)]
+"""
+Like filtered_sources(), but pick only the first entry that matches, and
+return its filename.
+"""
+def pick_first_matching_dep(ctx, deps):
+ files = filtered_sources(ctx, deps)
+ if len(files) > 0:
+ return files[0]
+ else:
+ raise DependencyError
+
def env_fetch(tx):
def fn(ctx):
deps = ctx.env.satisfied_deps
@@ -223,6 +234,7 @@ def dependencies_use(ctx):
return [inflector.storage_key(dep) for dep in ctx.env.satisfied_deps]
BuildContext.filtered_sources = filtered_sources
+BuildContext.pick_first_matching_dep = pick_first_matching_dep
BuildContext.dependencies_use = dependencies_use
BuildContext.dependencies_includes = env_fetch(lambda x: "INCLUDES_{0}".format(x))
BuildContext.dependency_satisfied = dependency_satisfied
diff --git a/wscript b/wscript
index 58d64837af..7ac4982da4 100644
--- a/wscript
+++ b/wscript
@@ -12,6 +12,18 @@ from waftools.checks.custom import *
c_preproc.go_absolute=True # enable system folders
c_preproc.standard_includes.append('/usr/local/include')
+"""
+Dependency identifiers (for win32 vs. Unix):
+ wscript / C source meaning
+ --------------------------------------------------------------------------
+ posix / HAVE_POSIX: defined on Linux, OSX, Cygwin
+ (Cygwin emulates POSIX APIs on Windows)
+ mingw / __MINGW32__: defined if posix is not defined
+ (Windows without Cygwin)
+ os-win32 / _WIN32: defined if basic windows.h API is available
+ win32-desktop / HAVE_WIN32_DESKTOP: defined if desktop windows.h API is available
+"""
+
build_options = [
{
'name': '--cplayer',
@@ -132,15 +144,15 @@ main_dependencies = [
'fmsg': 'Unable to find either POSIX or MinGW-w64 environment, ' \
'or compiler does not work.',
}, {
- 'name': 'win32',
- 'desc': 'win32',
+ 'name': 'win32-desktop',
+ 'desc': 'win32 desktop APIs',
'deps_any': [ 'os-win32', 'os-cygwin' ],
'func': check_cc(lib=['winmm', 'gdi32', 'ole32', 'uuid', 'avrt', 'dwmapi']),
}, {
'name': '--win32-internal-pthreads',
'desc': 'internal pthread wrapper for win32 (Vista+)',
'deps_neg': [ 'posix' ],
- 'deps': [ 'win32' ],
+ 'deps': [ 'os-win32' ],
'func': check_true,
}, {
'name': 'pthreads',
@@ -203,10 +215,11 @@ iconv support use --disable-iconv.",
'posix_spawnp(0,0,0,0,0,0); kill(0,0)'),
'deps_neg': ['mingw'],
}, {
- 'name': 'subprocess',
- 'desc': 'posix_spawnp() or MinGW',
+ 'name': 'win32-pipes',
+ 'desc': 'Windows pipe support',
'func': check_true,
- 'deps_any': ['posix-spawn', 'mingw'],
+ 'deps': [ 'win32-desktop' ],
+ 'deps_neg': [ 'posix' ],
}, {
'name': 'glob-win32',
'desc': 'glob() win32 replacement',
@@ -506,7 +519,7 @@ audio_output_features = [
}, {
'name': '--wasapi',
'desc': 'WASAPI audio output',
- 'deps': ['win32'],
+ 'deps': ['win32-desktop'],
'func': check_cc(fragment=load_fragment('wasapi.c')),
}
]
@@ -583,7 +596,7 @@ video_output_features = [
} , {
'name': '--gl-win32',
'desc': 'OpenGL Win32 Backend',
- 'deps': [ 'win32' ],
+ 'deps': [ 'win32-desktop' ],
'groups': [ 'gl' ],
'func': check_statement('windows.h', 'wglCreateContext(0)',
lib='opengl32')
@@ -671,7 +684,7 @@ video_output_features = [
}, {
'name': '--direct3d',
'desc': 'Direct3D support',
- 'deps': [ 'win32' ],
+ 'deps': [ 'win32-desktop' ],
'func': check_cc(header_name='d3d9.h'),
}, {
'name': '--android',
@@ -774,7 +787,7 @@ hwaccel_features = [
}, {
'name': '--d3d-hwaccel',
'desc': 'DXVA2 and D3D11VA hwaccel',
- 'deps': [ 'win32' ],
+ 'deps': [ 'win32-desktop' ],
'func': check_true,
}, {
'name': '--d3d-hwaccel-new',
diff --git a/wscript_build.py b/wscript_build.py
index 39c31fe697..e693161971 100644
--- a/wscript_build.py
+++ b/wscript_build.py
@@ -101,21 +101,35 @@ def build(ctx):
ctx(features = "ebml_header", target = "ebml_types.h")
ctx(features = "ebml_definitions", target = "ebml_defs.c")
- if ctx.env.DEST_OS == 'win32':
- main_fn_c = 'osdep/main-fn-win.c'
- elif ctx.dependency_satisfied('cocoa'):
- main_fn_c = 'osdep/main-fn-cocoa.c'
- else:
- main_fn_c = 'osdep/main-fn-unix.c'
-
- getch2_c = {
- 'win32': 'osdep/terminal-win.c',
- }.get(ctx.env.DEST_OS, "osdep/terminal-unix.c")
-
- timer_c = {
- 'win32': 'osdep/timer-win2.c',
- 'darwin': 'osdep/timer-darwin.c',
- }.get(ctx.env.DEST_OS, "osdep/timer-linux.c")
+ main_fn_c = ctx.pick_first_matching_dep([
+ ( "osdep/main-fn-win.c", "win32-desktop" ),
+ ( "osdep/main-fn-cocoa.c", "cocoa" ),
+ ( "osdep/main-fn-unix.c" ),
+ ])
+
+ getch2_c = ctx.pick_first_matching_dep([
+ ( "osdep/terminal-unix.c", "posix" ),
+ ( "osdep/terminal-win.c", "win32-desktop" ),
+ ( "osdep/terminal-dummy.c" ),
+ ])
+
+ timer_c = ctx.pick_first_matching_dep([
+ ( "osdep/timer-win2.c", "os-win32" ),
+ ( "osdep/timer-darwin.c", "os-darwin" ),
+ ( "osdep/timer-linux.c", "posix" ),
+ ])
+
+ ipc_c = ctx.pick_first_matching_dep([
+ ( "input/ipc-unix.c", "posix" ),
+ ( "input/ipc-win.c", "win32-desktop" ),
+ ( "input/ipc-dummy.c" ),
+ ])
+
+ subprocess_c = ctx.pick_first_matching_dep([
+ ( "osdep/subprocess-posix.c", "posix-spawn" ),
+ ( "osdep/subprocess-win.c", "win32-desktop" ),
+ ( "osdep/subprocess-dummy.c" ),
+ ])
sources = [
## Audio
@@ -208,10 +222,9 @@ def build(ctx):
( "input/event.c" ),
( "input/input.c" ),
( "input/ipc.c" ),
- ( "input/ipc-unix.c", "!mingw" ),
- ( "input/ipc-win.c", "mingw" ),
+ ( ipc_c ),
( "input/keycodes.c" ),
- ( "input/pipe-win32.c", "mingw" ),
+ ( "input/pipe-win32.c", "win32-pipes" ),
## Misc
( "misc/bstr.c" ),
@@ -312,7 +325,7 @@ def build(ctx):
( "video/vdpau.c", "vdpau" ),
( "video/vdpau_mixer.c", "vdpau" ),
( "video/vt.c", "videotoolbox-hwaccel" ),
- ( "video/decode/d3d.c", "win32" ),
+ ( "video/decode/d3d.c", "win32-desktop" ),
( "video/decode/dec_video.c"),
( "video/decode/hw_cuda.c", "cuda-hwaccel" ),
( "video/decode/hw_dxva2.c", "d3d-hwaccel" ),
@@ -402,9 +415,9 @@ def build(ctx):
( "video/out/vo_wayland.c", "wayland" ),
( "video/out/vo_x11.c" , "x11" ),
( "video/out/vo_xv.c", "xv" ),
- ( "video/out/w32_common.c", "win32" ),
- ( "video/out/win32/displayconfig.c", "win32" ),
- ( "video/out/win32/droptarget.c", "win32" ),
+ ( "video/out/w32_common.c", "win32-desktop" ),
+ ( "video/out/win32/displayconfig.c", "win32-desktop" ),
+ ( "video/out/win32/droptarget.c", "win32-desktop" ),
( "video/out/win32/exclusive_hack.c", "gl-win32" ),
( "video/out/wayland_common.c", "wayland" ),
( "video/out/wayland/buffer.c", "wayland" ),
@@ -426,8 +439,7 @@ def build(ctx):
( "osdep/macosx_touchbar.m", "macos-touchbar" ),
( "osdep/semaphore_osx.c" ),
( "osdep/subprocess.c" ),
- ( "osdep/subprocess-posix.c", "posix-spawn" ),
- ( "osdep/subprocess-win.c", "os-win32" ),
+ ( subprocess_c ),
( "osdep/path-macosx.m", "cocoa" ),
( "osdep/path-unix.c"),
( "osdep/path-win.c", "os-win32" ),
@@ -435,7 +447,7 @@ def build(ctx):
( "osdep/glob-win.c", "glob-win32" ),
( "osdep/w32_keyboard.c", "os-win32" ),
( "osdep/w32_keyboard.c", "os-cygwin" ),
- ( "osdep/windows_utils.c", "win32" ),
+ ( "osdep/windows_utils.c", "os-win32" ),
( "osdep/mpv.rc", "win32-executable" ),
( "osdep/win32/pthread.c", "win32-internal-pthreads"),
( "osdep/android/strnlen.c", "android"),