-
- Notifications
You must be signed in to change notification settings - Fork 218
Description
What kind of issue is this?
- PlatformIO Core.
If you’ve found a bug, please provide an information below.
You can erase any parts of this template not applicable to your Issue.
Configuration
Operating system: Win 10 x64
PlatformIO Version (platformio --version
): 6.0.2a2
Description of problem
The PlatformIO core does not extract -D<macro>
definitions from CCFLAGS
into the e.g. VSCode Intellisense c_cpp_properties.json
. Only macros in CPPDEFINES
are.
Steps to Reproduce
- Create a new Nodemcuv2 + Arduino (ESP8266) project
- Add a call to
tzset();
insetup()
Actual Results
Intellisense does not know about this function and highlights it as error.
Expected Results
Intellisense knows about this function since Arduino.h
is included which includes time.h
which says
#if __POSIX_VISIBLE void tzset (void); #endif
If problems with PlatformIO Build System:
The content of platformio.ini
:
[env:d1_mini] platform = espressif8266 board = d1_mini framework = arduino
Source file to reproduce issue:
#include <Arduino.h> #include <string.h> #include <string> void setup() {} void loop() { const char *s = "test"; char buf[64]; strlcpy(buf, s, sizeof(buf)); setenv("TZ", "CST-8", 1); tzset(); int res = strcasecmp("A", "a"); }
Additional info
Intellisense does not recognize tzset()
because that needs the _GNU_SOURCE
to be defined (which through a specific chain enables POSIX_VISIBLE). The Arduino-ESP8266 build process activates that macro through CCFLAGS
here and it correctly shows up in the build commands. However, the .vscode/c_cpp_properties.json
does not have _GNU_SOURCE
in the defines
section because -D
flags in CCFLAGS
is not considered during the generation of this file.
I considered this fixing this by moving -D
flags from CCFLAGS to CPPDEFINES, but this is then specific to Arduino-ESP8266. I think in general it would be good if the core is able to recognize this situation and relays the activated macros to the IDEs correctly. (See esp8266/Arduino#8579).