mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
osdep: separate out macos paths from path-unix.c
macOS really has completely different path conventions that mpv doesn't take into account and it treats it just like any other old unix-like system. This means mpv enforces certain conventions on it (like all the XDG stuff) that doesn't really apply. Since we'd like to use more of this but at the same time not distrupt mac users even more, let's just copy and paste the current code to a new file, update the build and call it a day. This way, the paths of these two platforms can more freely diverge.
This commit is contained in:
parent
a1580b6424
commit
baa9d56481
@ -293,6 +293,8 @@ endif
|
||||
darwin = host_machine.system() == 'darwin'
|
||||
win32 = host_machine.system() == 'cygwin' or host_machine.system() == 'windows'
|
||||
posix = not win32
|
||||
|
||||
features += {'darwin': darwin}
|
||||
features += {'posix': posix}
|
||||
features += {'dos-paths': win32, 'win32': win32}
|
||||
|
||||
@ -407,11 +409,14 @@ if posix and not features['cocoa']
|
||||
endif
|
||||
|
||||
if darwin
|
||||
sources += files('osdep/timer-darwin.c')
|
||||
path_source = files('osdep/path-darwin.c')
|
||||
sources += path_source + files('osdep/timer-darwin.c')
|
||||
|
||||
endif
|
||||
|
||||
if posix and not darwin
|
||||
sources += files('osdep/timer-linux.c')
|
||||
sources += files('osdep/path-unix.c',
|
||||
'osdep/timer-linux.c')
|
||||
endif
|
||||
|
||||
cd_devices = {
|
||||
|
@ -44,7 +44,9 @@ static const mp_get_platform_path_cb path_resolvers[] = {
|
||||
#if HAVE_COCOA
|
||||
mp_get_platform_path_osx,
|
||||
#endif
|
||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
||||
#if HAVE_DARWIN
|
||||
mp_get_platform_path_darwin,
|
||||
#elif !defined(_WIN32) || defined(__CYGWIN__)
|
||||
mp_get_platform_path_unix,
|
||||
#endif
|
||||
#if HAVE_UWP
|
||||
|
66
osdep/path-darwin.c
Normal file
66
osdep/path-darwin.c
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* This file is part of mpv.
|
||||
*
|
||||
* mpv is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* mpv is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "options/path.h"
|
||||
#include "path.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
static pthread_once_t path_init_once = PTHREAD_ONCE_INIT;
|
||||
|
||||
static char mpv_home[512];
|
||||
static char old_home[512];
|
||||
|
||||
static void path_init(void)
|
||||
{
|
||||
char *home = getenv("HOME");
|
||||
char *xdg_dir = getenv("XDG_CONFIG_HOME");
|
||||
|
||||
if (xdg_dir && xdg_dir[0]) {
|
||||
snprintf(mpv_home, sizeof(mpv_home), "%s/mpv", xdg_dir);
|
||||
} else if (home && home[0]) {
|
||||
snprintf(mpv_home, sizeof(mpv_home), "%s/.config/mpv", home);
|
||||
}
|
||||
|
||||
// Maintain compatibility with old ~/.mpv
|
||||
if (home && home[0])
|
||||
snprintf(old_home, sizeof(old_home), "%s/.mpv", home);
|
||||
|
||||
// If the old ~/.mpv exists, and the XDG config dir doesn't, use the old
|
||||
// config dir only.
|
||||
if (mp_path_exists(old_home) && !mp_path_exists(mpv_home)) {
|
||||
snprintf(mpv_home, sizeof(mpv_home), "%s", old_home);
|
||||
old_home[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
const char *mp_get_platform_path_darwin(void *talloc_ctx, const char *type)
|
||||
{
|
||||
pthread_once(&path_init_once, path_init);
|
||||
if (strcmp(type, "home") == 0)
|
||||
return mpv_home;
|
||||
if (strcmp(type, "old_home") == 0)
|
||||
return old_home;
|
||||
if (strcmp(type, "global") == 0)
|
||||
return MPV_CONFDIR;
|
||||
if (strcmp(type, "desktop") == 0)
|
||||
return getenv("HOME");
|
||||
return NULL;
|
||||
}
|
@ -16,6 +16,7 @@
|
||||
typedef const char *(*mp_get_platform_path_cb)(void *talloc_ctx, const char *type);
|
||||
|
||||
// Conforming to mp_get_platform_path_cb.
|
||||
const char *mp_get_platform_path_darwin(void *talloc_ctx, const char *type);
|
||||
const char *mp_get_platform_path_uwp(void *talloc_ctx, const char *type);
|
||||
const char *mp_get_platform_path_win(void *talloc_ctx, const char *type);
|
||||
const char *mp_get_platform_path_osx(void *talloc_ctx, const char *type);
|
||||
|
5
wscript
5
wscript
@ -155,6 +155,11 @@ main_dependencies = [
|
||||
'name': 'posix',
|
||||
'desc': 'POSIX environment',
|
||||
'func': check_statement(['unistd.h'], 'long x = _POSIX_VERSION'),
|
||||
}, {
|
||||
'name': 'darwin',
|
||||
'desc': 'Darwin environment',
|
||||
'deps': 'os-darwin',
|
||||
'func': check_true,
|
||||
}, {
|
||||
'name': '--android',
|
||||
'desc': 'Android environment',
|
||||
|
@ -587,8 +587,9 @@ def build(ctx):
|
||||
( "osdep/macosx_menubar.m", "cocoa" ),
|
||||
( "osdep/macosx_touchbar.m", "macos-touchbar" ),
|
||||
( "osdep/mpv.rc", "win32-executable" ),
|
||||
( "osdep/path-darwin.c", "os-darwin"),
|
||||
( "osdep/path-macosx.m", "cocoa" ),
|
||||
( "osdep/path-unix.c"),
|
||||
( "osdep/path-unix.c", "posix && !os-darwin" ),
|
||||
( "osdep/path-uwp.c", "uwp" ),
|
||||
( "osdep/path-win.c", "win32-desktop" ),
|
||||
( "osdep/semaphore_osx.c" ),
|
||||
|
Loading…
Reference in New Issue
Block a user