Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compilers: detect: fix pre-processor scraping by defining language #13289

Merged
merged 4 commits into from
Jun 24, 2024

Conversation

thesamesam
Copy link
Collaborator

_get_gnu_compiler_defines and _get_clang_compiler_defines were broken by not defining the language they used.

Neither GCC nor Clang infer the language based on the driver name which means self.defines isn't populated correctly in compilers/cpp.py.

e.g.

 $ echo "" | g++ -E -dM - | grep -i cplus

 $ echo "" | g++ -x c++ -E -dM - | grep -i cplus
 #define __cplusplus 201703L

Fix that by passing '-x LANGUAGE' as a first pass. If it fails, try again without '-x LANGUAGE' as before, as its portability isn't certain.

While here, make the debug & error message strings consistent between the GCC and Clang probes.

Without this change, a63739d is only partially effective. It works if the system has injected Clang options via /etc/clang configuration files, but not by e.g. patching the driver (or for GCC there too).

@thesamesam
Copy link
Collaborator Author

cc @eli-schwartz

@thesamesam
Copy link
Collaborator Author

(See also #13284 which is related, but different.)

@jpakkane
Copy link
Member

The basic outline LGTM to me at least.

@thesamesam thesamesam force-pushed the assertions branch 2 times, most recently from ab23997 to 273cf81 Compare June 23, 2024 22:28
@thesamesam thesamesam marked this pull request as ready for review June 23, 2024 22:29
@thesamesam thesamesam requested a review from dcbaker as a code owner June 23, 2024 22:29
Make the debug & error message strings consistent between the GCC and Clang probes.

Copy-paste error. Here, we're scraping pre-processor tokens, not checking
for the compiler type.
_get_gnu_compiler_defines and _get_clang_compiler_defines were broken
by not defining the language they used.

Neither GCC nor Clang infer the language based on the driver name which means
`self.defines` isn't populated correctly in compilers/cpp.py.

e.g.
```
 $ echo "" | g++ -E -dM - | grep -i cplus

 $ echo "" | g++ -x c++ -E -dM - | grep -i cplus
 #define __cplusplus 201703L
```

Fix that by passing '-cpp -x LANGUAGE' as a first pass. If it fails, try
again without '-cpp -x LANGUAGE' as before, as its portability isn't
certain. We do '-cpp' because during testing, I found Fortran needs this,
although per below, I had to drop Fortran in the end and leave it to the
fallback (existing) path.

Without this change, a63739d is only
partially effective. It works if the system has injected Clang options
via /etc/clang configuration files, but not by e.g. patching the driver
(or for GCC there too).

Unfortunately, we have to wimp out for Fortran and fallback to the
old method because you need the language standard (e.g. -x f95).
@eli-schwartz eli-schwartz merged commit 2a9f40f into mesonbuild:master Jun 24, 2024
35 checks passed
@thesamesam thesamesam deleted the assertions branch June 24, 2024 03:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants