From: Christian Schoenebeck <qemu_oss@crudebyte.com>
To: Akihiko Odaki <akihiko.odaki@gmail.com>
Cc: qemu-devel@nongnu.org, "Peter Maydell" <peter.maydell@linaro.org>,
qemu-block@nongnu.org, "Cameron Esfahani" <dirty@apple.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Roman Bolshakov" <r.bolshakov@yadro.com>,
"Alexander Graf" <agraf@csgraf.de>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [RFC PATCH v2 2/6] audio/coreaudio: Remove a deprecation warning on macOS 12
Date: Mon, 10 Jan 2022 22:05:43 +0100 [thread overview]
Message-ID: <2141936.zTEnKHbCo3@silver> (raw)
In-Reply-To: <246f1f6f-3674-e3dc-3a8e-f53795fa58cc@gmail.com>
On Montag, 10. Januar 2022 21:39:28 CET Akihiko Odaki wrote:
> On 2022/01/11 5:22, Christian Schoenebeck wrote:
> > On Montag, 10. Januar 2022 20:01:40 CET Akihiko Odaki wrote:
> >> On 2022/01/11 3:46, Christian Schoenebeck wrote:
> >>> On Montag, 10. Januar 2022 19:20:15 CET Akihiko Odaki wrote:
> >>>> On 2022/01/10 22:22, Peter Maydell wrote:
> >>>>> On Mon, 10 Jan 2022 at 13:14, Christian Schoenebeck
> >>>>>
> >>>>> <qemu_oss@crudebyte.com> wrote:
> >>>>>> I'd suggest to use:
> >>>>>>
> >>>>>> #if !defined(MAC_OS_VERSION_12_0) ||
> >>>>>>
> >>>>>> (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_VERSION_12_0)
> >>>>>>
> >>>>>> #define kAudioObjectPropertyElementMain
> >>>>>> kAudioObjectPropertyElementMaster
> >>>>>> #endif
> >>>>>
> >>>>> This is also how we do this for existing checks of this sort,
> >>>>> like the one in osdep.h for qemu_thread_jit_execute().
> >>>>>
> >>>>> -- PMM
> >>>>
> >>>> If I understand correctly, Many macOS-specific codes already no longer
> >>>> complies with GCC because they depend on modern features GCC doesn't
> >>>> provide. The most problematic construction is block; it is extensively
> >>>> used by Apple's ABI and API and you cannot avoid using it even if you
> >>>> try.
> >>>
> >>> You mean Obj-C blocks? That's working with GCC for decades. I am not
> >>> aware
> >>> about any recent changes to Obj-C block mechanisms by Apple.
> >>>
> >>>> Also, note that MAC_OS_X_VERSION_MAX_ALLOWED defines the upper bound of
> >>>> the supported version. The lower bound should be preferred here because
> >>>> the usage of the new identifier is applied regardless of the version of
> >>>> the host system. It is in contrary to the usage of
> >>>> MAC_OS_X_VERSION_MAX_ALLOWED in osdep.h where the new interfaces are
> >>>> used only for the newer versions. The lower bound is defined as
> >>>> MAC_OS_X_VERSION_MIN_REQUIRED. Practically there is no difference of
> >>>> the
> >>>> two macros because they have the same value in QEMU and
> >>>> kAudioObjectPropertyElementMain is a constant resolved compile-time,
> >>>> but
> >>>> it is still nice to have the code semantically correct.
> >>>
> >>> For this particular enum: no, MAC_OS_X_VERSION_MAX_ALLOWED is the
> >>> correct
> >>> one. This is about whether enum kAudioObjectPropertyElementMain is
> >>> defined in the SDK header files. That's all. And the new enum
> >>> kAudioObjectPropertyElementMain is pure refactoring of the enum's old
> >>> name due to social reasons ("Master"). The actual reflected numeric
> >>> value
> >>> and semantic of the enum is unchanged and the resulting binary and
> >>> behaviour are identical.
> >>
> >> There are a few problems with the usage of MAC_OS_X_VERSION_MAX_ALLOWED:
> >> - The deprecation warning is designed to work with
> >> MAC_OS_X_VERSION_MIN_REQUIRED. You may verify that with:
> >> cc -mmacosx-version-min=12.0 -x c - <<EOF
> >> #include <CoreAudio/CoreAudio.h>
> >>
> >> int main()
> >> {
> >>
> >> int k = kAudioObjectPropertyElementMaster;
> >>
> >> }
> >> EOF
> >
> > That's actually interesting. On other projects I definitely saw deprecated
> > warnings before on API declarations that were deprecated at a version
> > higher than the project's minimum deployment target.
> >
> > Did they change that?
>
> I don't think so. The behavior is documented at:
> https://clang.llvm.org/docs/AttributeReference.html#availability
> and the example refers to OS X 10.4, 10.6, 10.7. Probably they haven't
> changed the behavior for decades.
The descriptions is very vague. It sais e.g. "If Clang is instructed to
compile code for macOS 10.6 ...". So it is describing it only via singular
version per example. We are talking about version ranges however.
> MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers/os/availabilit
> y.h says manually defining API_TO_BE_DEPRECATED can alter the behavior so
> that may be the case.
>
> >> - The programmer must be aware whether it is constant or not.
> >> - The macro tells about the runtime and not the SDK. There is no way to
> >> tell the SDK version and that is why I suggested __is_identifier at the
> >> first place. However, now I'm convinced that
> >> MAC_OS_X_VERSION_MIN_REQUIRED is the better option because of the above
> >> reasons.
> >
> > If you make it dependent on MAC_OS_X_VERSION_MIN_REQUIRED, people with
> > older SDKs (e.g. Xcode <=13.0) would get a compiler error.
>
> __is_identifier is the only option if you need a compatibility with the
> older SDKs while specifying a greater version for
> MAC_OS_X_VERSION_MIN_REQUIRED. It also applies to
> MAC_OS_X_VERSION_MAX_ALLOWED; they give the possible runtime versions
> and not the SDK version.
I have never used __is_identifier() for such things. I always used
MAC_OS_X_VERSION_MIN_REQUIRED and MAC_OS_X_VERSION_MAX_ALLOWED and it was
always doing the job.
And for symbols: those are automatically weak linked by the compiler if the
project's minimum deployment target is lower than the introductory version of
the symbol.
> > You are right about the deprecated warning not being emitted in the
> > example
> > above, currently not sure why, but I still think
> > MAC_OS_X_VERSION_MAX_ALLOWED is the way to go in this case.
>
> The page and the header file I referred the above would help
> understanding the behavior.
Yeah, I already checked that. It basically translates to:
__attribute__((availability(macosx,introduced=10.0,deprecated=12.0)))
So next I would need to read clang sources how this attribute is implemented
exactly. Not today. ;-)
Best regards,
Christian Schoenebeck
next prev parent reply other threads:[~2022-01-10 21:16 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-09 17:06 [RFC PATCH v2 0/6] host: Support macOS 12 Philippe Mathieu-Daudé
2022-01-09 17:06 ` [PATCH v2 1/6] configure: Allow passing extra Objective C compiler flags Philippe Mathieu-Daudé
2022-01-09 17:06 ` [RFC PATCH v2 2/6] audio/coreaudio: Remove a deprecation warning on macOS 12 Philippe Mathieu-Daudé
2022-01-10 8:17 ` Akihiko Odaki
2022-01-10 8:44 ` Philippe Mathieu-Daudé
2022-01-10 12:24 ` Philippe Mathieu-Daudé
2022-01-10 13:07 ` Christian Schoenebeck
2022-01-10 13:14 ` Philippe Mathieu-Daudé
2022-01-10 13:22 ` Peter Maydell
2022-01-10 18:20 ` Akihiko Odaki
2022-01-10 18:46 ` Christian Schoenebeck
2022-01-10 19:01 ` Akihiko Odaki
2022-01-10 19:07 ` Peter Maydell
2022-01-10 20:22 ` Christian Schoenebeck
2022-01-10 20:39 ` Akihiko Odaki
2022-01-10 21:05 ` Christian Schoenebeck [this message]
2022-01-10 21:38 ` Akihiko Odaki
2022-01-11 12:35 ` Christian Schoenebeck
2022-01-11 12:51 ` Christian Schoenebeck
2022-01-09 17:06 ` [RFC PATCH v2 3/6] block/file-posix: " Philippe Mathieu-Daudé
2022-01-09 17:06 ` [RFC PATCH v2 4/6] hvf: Make hvf_get_segments() / hvf_put_segments() local Philippe Mathieu-Daudé
2022-01-09 17:06 ` [RFC PATCH v2 5/6] hvf: Remove deprecated hv_vcpu_flush() calls Philippe Mathieu-Daudé
2022-01-09 17:06 ` [PATCH v2 6/6] gitlab-ci: Support macOS 12 via cirrus-run Philippe Mathieu-Daudé
2022-01-10 8:50 ` Akihiko Odaki
2022-01-10 9:14 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2141936.zTEnKHbCo3@silver \
--to=qemu_oss@crudebyte.com \
--cc=agraf@csgraf.de \
--cc=akihiko.odaki@gmail.com \
--cc=alex.bennee@linaro.org \
--cc=dirty@apple.com \
--cc=f4bug@amsat.org \
--cc=kraxel@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=r.bolshakov@yadro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).