Skip to content

Commit

Permalink
osdep: move cfstr<->cstr conversions to a new apple_utils.c file
Browse files Browse the repository at this point in the history
  • Loading branch information
rcombs authored and sfan5 committed Jun 25, 2023
1 parent 8c8d97c commit 0463096
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 21 deletions.
15 changes: 0 additions & 15 deletions audio/out/ao_coreaudio_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,6 @@
#include <mach/mach_time.h>
#endif

CFStringRef cfstr_from_cstr(char *str)
{
return CFStringCreateWithCString(NULL, str, CA_CFSTR_ENCODING);
}

char *cfstr_get_cstr(CFStringRef cfstr)
{
CFIndex size =
CFStringGetMaximumSizeForEncoding(
CFStringGetLength(cfstr), CA_CFSTR_ENCODING) + 1;
char *buffer = talloc_zero_size(NULL, size);
CFStringGetCString(cfstr, buffer, size, CA_CFSTR_ENCODING);
return buffer;
}

#if HAVE_COREAUDIO
static bool ca_is_output_device(struct ao *ao, AudioDeviceID dev)
{
Expand Down
6 changes: 1 addition & 5 deletions audio/out/ao_coreaudio_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,7 @@
#include "common/msg.h"
#include "audio/out/ao.h"
#include "internal.h"

#define CA_CFSTR_ENCODING kCFStringEncodingUTF8

CFStringRef cfstr_from_cstr(char *str);
char *cfstr_get_cstr(CFStringRef cfstr);
#include "osdep/apple_utils.h"

bool check_ca_st(struct ao *ao, int level, OSStatus code, const char *message);

Expand Down
3 changes: 2 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,8 @@ cocoa = dependency('appleframeworks', modules: ['Cocoa', 'IOKit', 'QuartzCore'],
features += {'cocoa': cocoa.found()}
if features['cocoa']
dependencies += cocoa
sources += files('osdep/macosx_application.m',
sources += files('osdep/apple_utils.c',
'osdep/macosx_application.m',
'osdep/macosx_events.m',
'osdep/macosx_menubar.m',
'osdep/main-fn-cocoa.c',
Expand Down
39 changes: 39 additions & 0 deletions osdep/apple_utils.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Apple-specific utility functions
*
* 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 "apple_utils.h"

#include "mpv_talloc.h"

CFStringRef cfstr_from_cstr(const char *str)
{
return CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8);
}

char *cfstr_get_cstr(const CFStringRef cfstr)
{
if (!cfstr)
return NULL;
CFIndex size =
CFStringGetMaximumSizeForEncoding(
CFStringGetLength(cfstr), kCFStringEncodingUTF8) + 1;
char *buffer = talloc_zero_size(NULL, size);
CFStringGetCString(cfstr, buffer, size, kCFStringEncodingUTF8);
return buffer;
}
28 changes: 28 additions & 0 deletions osdep/apple_utils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Apple-specific utility functions
*
* 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/>.
*/

#ifndef MPV_APPLE_UTILS
#define MPV_APPLE_UTILS

#include <CoreFoundation/CoreFoundation.h>

CFStringRef cfstr_from_cstr(const char *str);
char *cfstr_get_cstr(const CFStringRef cfstr);

#endif /* MPV_APPLE_UTILS */
1 change: 1 addition & 0 deletions wscript_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,7 @@ def swift(task):
( "osdep/polldev.c", "posix" ),

( "osdep/android/strnlen.c", "android"),
( "osdep/apple_utils.c", "cocoa" ),
( "osdep/glob-win.c", "glob-win32" ),
( "osdep/macosx_application.m", "cocoa" ),
( "osdep/macosx_events.m", "cocoa" ),
Expand Down

9 comments on commit 0463096

@barracuda156
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rcombs This has broken linking on 10.6, at least with waf-based build.
See: https://trac.macports.org/ticket/67903

@sfan5
Copy link
Member

@sfan5 sfan5 commented on 0463096 Dec 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI mpv does not support 0.36.0 anymore, waf was also removed.

@barracuda156
Copy link

@barracuda156 barracuda156 commented on 0463096 Dec 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sfan5 Unfortunately, 0.37.0 is broken for a number of macOS versions (in fact for most of them), since it requires a broken version of libplacebo, apparently uses Swift (!) and possibly some other reasons.

UPD. Well, no surprise, it was deliberately broken in 23de1de

@barracuda156
Copy link

@barracuda156 barracuda156 commented on 0463096 Dec 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like it is the wrong build setup: when Cocoa is disabled, this file is still expected for linking, but wscript_build.py apparently only includes it for Cocoa.

UPD. I can confirm this exactly is the case.

@Akemi
Copy link
Member

@Akemi Akemi commented on 0463096 Dec 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mpv doesn't support macOS older than 10.15 anymore. also what @sfan5 said, waf as a build system was removed.

@barracuda156
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

meson.build has some checks wrong by the way:

cplugins = get_option('cplugins').require(
    features['libdl'] and not win32 and cc.has_link_argument('-rdynamic'),
    error_message: 'cplugins not supported by the os or compiler!',
)
features += {'cplugins': cplugins.allowed()}
if features['cplugins']
    link_flags += '-rdynamic'
endif

This is a Linux-specific flag, which meson forces for macOS, and that breaks configure.

@Akemi
Copy link
Member

@Akemi Akemi commented on 0463096 Dec 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i am just wondering, if you know/knew about those issues why not/didn't you report them properly on the issue tracker? or rather please report it/them.

@barracuda156
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Akemi If a PR with a fix will be accepted against 0.36.0, I will make it. It is a simple fix: 309b19d

(I might have bumped into the error earlier, but did not investigate the reason back then and just stayed on 0.34.x.)

waf build also passes -rdynamic but it is just ignored by the compiler/linker, nothing breaks. meson fails at configure. I may fix that – if PR gonna be accepted. (Macports used waf build prior to 0.37.0, so it was irrelevant; I discovered a failure only once I tried meson today, thinking to keep two versions is the same port.)

@Akemi
Copy link
Member

@Akemi Akemi commented on 0463096 Dec 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRs will only be accepted against master. besides security fixes we won't backport anything else for older releases, i believe.

if there is an issue, i didn't look into it, then a fix for meson will most likely be accepted.

Please sign in to comment.