From: Akihiko Odaki <akihiko.odaki@gmail.com>
To: Christian Schoenebeck <qemu_oss@crudebyte.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
qemu-block@nongnu.org, qemu-devel@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: Tue, 11 Jan 2022 05:39:28 +0900 [thread overview]
Message-ID: <246f1f6f-3674-e3dc-3a8e-f53795fa58cc@gmail.com> (raw)
In-Reply-To: <5230139.pYjDmQ3FvW@silver>
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.
MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers/os/availability.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.
>
> 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.
Regards,
Akihiko Odaki
>
> Best regards,
> Christian Schoenebeck
>
>
next prev parent reply other threads:[~2022-01-10 20:42 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 [this message]
2022-01-10 21:05 ` Christian Schoenebeck
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=246f1f6f-3674-e3dc-3a8e-f53795fa58cc@gmail.com \
--to=akihiko.odaki@gmail.com \
--cc=agraf@csgraf.de \
--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=qemu_oss@crudebyte.com \
--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).