Windows: fewer windows.h includes from platform.h #3596
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Using almost any OIIO header (e.g.
imageio.h
) includesplatform.h
, which on Windows includes<windows.h>
. That IMHO is "not ideal at all", primarily because windows headers are fairly terrible in what they hijack as preprocessor symbols, that often clash with sensible things used by other code.The most famous ones being them defining
min
andmax
, but there are many others. Now, I tried removing inclusion of<windows.h>
from public OIIO headers, and that almost works, except for the usage ofYieldProcessor()
from an inline function inthread.h
, which is hard to remove in a clean way.So instead of that, here's a much smaller proposal: in addition to defining
NOMINMAX
(salvagesmin
andmax
symbols) andWIN32_LEAN_AND_MEAN
/VC_EXTRALEAN
(salvagessmall
symbol), also defineNOGDI
, which savesERROR
andGetObject
among others.ERROR
allows code to use both OIIO and google/gtest library. Case in point: Blender, which up until now always used modified OIIO headers (addingNOGDI
just like here).GetObject
is just a possibly common symbol; and having it not hijacked to eitherGetObjectA
orGetObjectW
by windows headers sounds useful.Tests
N/A
Checklist:
have previously submitted a Contributor License Agreement
(individual, and if there is any way my
employers might think my programming belongs to them, then also
corporate).
(adding new test cases if necessary).