Skip to content

./setup.py build on macOS floods screen with system header warnings #7759

@Artoria2e5

Description

@Artoria2e5

On my machine, running ./setup.py build floods the screen with 206 irrelevant warnings from the system's stdlib.h, like this:

Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk/usr/include/stdlib.h:352:38: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
int      sradixsort(const unsigned char **__base, int __nel, const unsigned char *__table,
                                         ^
/Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk/usr/include/stdlib.h:352:38: note: insert '_Nullable' if the pointer may be null
int      sradixsort(const unsigned char **__base, int __nel, const unsigned char *__table,
                                         ^
                                           _Nullable 
/Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk/usr/include/stdlib.h:352:38: note: insert '_Nonnull' if the pointer should never be null
int      sradixsort(const unsigned char **__base, int __nel, const unsigned char *__table,
                                         ^

So it looks like clang is not properly recognizing some includes as the system's own; https://stackoverflow.com/questions/48096872/shouldnt-clang-suppress-warnings-from-a-header-file-in-usr-local-include describes how.

This is how I think it happened:

  1. This is probably important for reproduction. I have both Xcode "Command Line Tools" and Xcode proper installed.
  2. setup.py side-steps the proper "-isystem" invocation and directly does _add_directory(include_dirs, os.path.join(sdk_path, "usr", "include")).
  3. Because -isystem is not used, clang does not know it's a system include file.
  4. Because I have multiple SDKs, the clang I use comes from /Applications/Xcode.app/Contents/Developer (according to xcode-select -p), which is a different one compared to the guy in /Library/Developer/CommandLineTools/usr/bin/. As a result, the -internal-isystem knowledge also fails.

This is how I think it should be fixed:

  • Inject a CFLAG with the value of [f"--system-header-prefix={sdk_path}"].

Now setuptools.CCompiler does not allow you to inject extra arguments, but setuptools.Extension does via the extra_compile_args member. Your modified build_ext should be able to do a dirty hack here: go through all the ext_modules to be built and give them some extra_compile_args (you're already doing it for fuzzing). You can even preserve the CFLAG suggestions from pkg-config this way, if you so wish.


Right, confirmed my cute little theory. I ran sudo xcode-select -s /Library/Developer/CommandLineTools so the clang is from the same place from my SDK. And it's quiet now.

It still needs a proper fix.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions