Closed bmacnaughton closed 5 months ago
v20.0.0
Microsoft Windows NT 10.0.19045.0 x64
v8 header files
try to compile an addon on windows
100%
the addon compiles
addon.cc C:\...\AppData\Local\Temp\prebuildify\node\22.0.0\include\no de\v8-function-callback.h(408,62): warning C4003: not enough arguments for func tion-like macro invocation 'min' [C:\Development\node-fn-inspect\build\fninspec t.vcxproj] (compiling source file '../src/addon.cc') C:\...\AppData\Local\Temp\prebuildify\node\22.0.0\include\no de\v8-function-callback.h(409,62): warning C4003: not enough arguments for func tion-like macro invocation 'max' [C:\Development\node-fn-inspect\build\fninspec t.vcxproj] (compiling source file '../src/addon.cc') C:\...\AppData\Local\Temp\prebuildify\node\22.0.0\include\no de\v8-function-callback.h(408,62): error C2589: '(': illegal token on right sid e of '::' [C:\Development\node-fn-inspect\build\fninspect.vcxproj] (compiling source file '../src/addon.cc') C:\...\AppData\Local\Temp\prebuildify\node\22.0.0\include\no de\v8-function-callback.h(408,62): error C2760: syntax error: ')' was unexpecte d here; expected 'expression' [C:\Development\node-fn-inspect\build\fninspect.v cxproj] (compiling source file '../src/addon.cc')
The problem is that windef.h defines macros min and max. The v8 code in v8-function-callback.h can work around it by:
min
max
template <typename T> void ReturnValue<T>::Set(uint16_t i) { static_assert(std::is_base_of<T, Integer>::value, "type check"); using I = internal::Internals; // wrap std::numeric_limits<uint16_t>::min in parens to avoid interpretation as macro static_assert(I::IsValidSmi((std::numeric_limits<uint16_t>::min)())); // ditto max static_assert(I::IsValidSmi((std::numeric_limits<uint16_t>::max)())); SetInternal(I::IntToSmi(i)); }
There may be other ways around this but I was able to compile our addon using this workaround.
This was fixed in https://github.com/nodejs/node/pull/52794 and will be in the next release.
Version
v20.0.0
Platform
Microsoft Windows NT 10.0.19045.0 x64
Subsystem
v8 header files
What steps will reproduce the bug?
try to compile an addon on windows
How often does it reproduce? Is there a required condition?
100%
What is the expected behavior? Why is that the expected behavior?
the addon compiles
What do you see instead?
Additional information
The problem is that windef.h defines macros
min
andmax
. The v8 code in v8-function-callback.h can work around it by:There may be other ways around this but I was able to compile our addon using this workaround.