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

PLATFORM is misdetected on MacOSX Big Sur #415

Closed
t-b opened this issue Sep 1, 2020 · 2 comments
Closed

PLATFORM is misdetected on MacOSX Big Sur #415

t-b opened this issue Sep 1, 2020 · 2 comments

Comments

@t-b
Copy link

t-b commented Sep 1, 2020

Description

The following code

/* definition to expand macro then apply to pragma message */
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
#define VAR_NAME_VALUE(var) #var "="  VALUE(var)

#pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_WINDOWS))
#pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_MAC))
#pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_LINUX))
#pragma message(VAR_NAME_VALUE(DOCTEST_CLANG))
#pragma message(VAR_NAME_VALUE(DOCTEST_GCC))
#pragma message(VAR_NAME_VALUE(DOCTEST_MSVC))

gives with doctest 2.3.7 and xcode 12

the following output

../test/src/unit-items.cpp:47:9: warning: DOCTEST_PLATFORM_WINDOWS=DOCTEST_PLATFORM_WINDOWS [-W#pragma-messages]
../test/src/unit-items.cpp:48:9: warning: DOCTEST_PLATFORM_MAC=DOCTEST_PLATFORM_MAC [-W#pragma-messages]
../test/src/unit-items.cpp:49:9: warning: DOCTEST_PLATFORM_LINUX= [-W#pragma-messages]
../test/src/unit-items.cpp:50:9: warning: DOCTEST_CLANG=((12)*10000000 + (0)*100000 + (0)) [-W#pragma-messages]
../test/src/unit-items.cpp:51:9: warning: DOCTEST_GCC=0 [-W#pragma-messages]
../test/src/unit-items.cpp:52:9: warning: DOCTEST_MSVC=0 [-W#pragma-messages]

#pragma message(VAR_NAME_VALUE(DOCTEST_MSVC))

See https://travis-ci.org/github/nlohmann/json/builds/723031309 for the full output.

I would have expected that the platform is detected as DOCTEST_PLATFORM_MAC.

Extra information

  • doctest version: v2.3.7
  • Operating System: MacOSX Big Sur
  • Compiler+version: AppleClang 12.0.0
@onqtam
Copy link
Member

onqtam commented Sep 1, 2020

I guess what you are referring to is that both DOCTEST_PLATFORM_WINDOWS and DOCTEST_PLATFORM_MAC have a value after the =...

Here is what I tried on my Linux machine:

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest/doctest.h"

/* definition to expand macro then apply to pragma message */
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
#define VAR_NAME_VALUE(var) #var "="  VALUE(var)

#pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_WINDOWS))
#pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_MAC))
#pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_LINUX))
#pragma message(VAR_NAME_VALUE(DOCTEST_CLANG))
#pragma message(VAR_NAME_VALUE(DOCTEST_GCC))
#pragma message(VAR_NAME_VALUE(DOCTEST_MSVC))

#ifdef DOCTEST_PLATFORM_WINDOWS
#error "windows"
#endif

#ifdef DOCTEST_PLATFORM_MAC
#error "mac"
#endif

#ifdef DOCTEST_PLATFORM_LINUX
#error "linux"
#endif

and the output I get from that is:

a.cpp:25:2: error: #error "linux"
   25 | #error "linux"
      |  ^~~~~
a.cpp:9:57: note: #pragma message: DOCTEST_PLATFORM_WINDOWS=DOCTEST_PLATFORM_WINDOWS
    9 | #pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_WINDOWS))
      |                                                         ^
a.cpp:10:53: note: #pragma message: DOCTEST_PLATFORM_MAC=DOCTEST_PLATFORM_MAC
   10 | #pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_MAC))
      |                                                     ^
a.cpp:11:55: note: #pragma message: DOCTEST_PLATFORM_LINUX=
   11 | #pragma message(VAR_NAME_VALUE(DOCTEST_PLATFORM_LINUX))
      |                                                       ^
a.cpp:12:46: note: #pragma message: DOCTEST_CLANG=0
   12 | #pragma message(VAR_NAME_VALUE(DOCTEST_CLANG))
      |                                              ^
a.cpp:13:44: note: #pragma message: DOCTEST_GCC=((9)*10000000 + (2)*100000 + (1))
   13 | #pragma message(VAR_NAME_VALUE(DOCTEST_GCC))
      |                                            ^
a.cpp:14:45: note: #pragma message: DOCTEST_MSVC=0
   14 | #pragma message(VAR_NAME_VALUE(DOCTEST_MSVC))
      |                                             ^

And in my case I also get:

  • DOCTEST_PLATFORM_WINDOWS=DOCTEST_PLATFORM_WINDOWS
  • DOCTEST_PLATFORM_MAC=DOCTEST_PLATFORM_MAC
  • DOCTEST_PLATFORM_LINUX=

But the #error I get is for "linux" because only DOCTEST_PLATFORM_LINUX is actually defined, so the platform is correctly identified and when using DOCTEST_PLATFORM_LINUX in an #ifdef everything works fine. I'm not sure why VAR_NAME_VALUE behaves in such a strange way but I don't see a problem in doctest. Perhaps I'm misunderstanding your problem...?

@onqtam
Copy link
Member

onqtam commented Dec 3, 2020

Closing this since there hasn't been any follow-up

@onqtam onqtam closed this as completed Dec 3, 2020
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

No branches or pull requests

2 participants