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

Correct stdc++ language and size issues for MSVC #8572

Merged
merged 15 commits into from
Nov 4, 2019
Merged

Correct stdc++ language and size issues for MSVC #8572

merged 15 commits into from
Nov 4, 2019

Conversation

achasveachas
Copy link
Contributor

Description:
This patch makes consistent the type for ssize_t as used on Windows.
We will favor describing it as a ptrdiff_t, which is standard C.
Patches to tclap and nghttp2 are needed for this exercise.

Linux is a 64ILP architecture, so there's no difference between int
and [s]size_t and pointer widths. Windows is a 64P architecture, where
only long long maps to the width of the size_t and C99 standard ptrdiff_t
types.

This leads to a number of places where the Envoy API has presented
an explicit int or int32_t which is smaller than the ptrdiff_t on
Windows. In some places we must cast to or from the API defined width.
Several other misassumptions on the width of int are also addressed.

Windows does not support alternately-named VA_ARGS which is not a
standard C++ language feature in our baseline c++ 17 expectation. Other
minor adjustments reflect other quirks of the MSVC compilier (some more
correct and some simply buggy behavior).

Windows MSVC needs various guards on unrecognized #pragmas, and will not
support any preprocessor operations within the arguments to a macro;
this is not stdc or stdc++.

This patch largely ignores changes which are required for windows, and
do not impact the linux/os-x compilation path. This patch is also
missing the IoHandle abstraction of 'fd' arguments, storage and return
codes, win32 error handling and win32 specific #include's handling.

Signed-off-by: William A Rowe Jr [email protected]
Signed-off-by: Yechiel Kalmenson [email protected]

Risk Level: Moderate
Testing: Passed locally on Windows (with additional patches) and Linux
Docs Changes: None
Release Notes: None

This patch makes consistent the type for ssize_t as used on Windows.
We will favor describing it as a ptrdiff_t, which is standard C.
Patches to tclap and nghttp2 are needed for this exercise.

Linux is a 64ILP architecture, so there's no difference between int
and [s]size_t and pointer widths. Windows is a 64P architecture, where
only long long maps to the width of the size_t and C99 standard ptrdiff_t
types.

This leads to a number of places where the Envoy API has presented
an explicit int or int32_t which is smaller than the ptrdiff_t on
Windows. In some places we must cast to or from the API defined width.
Several other misassumptions on the width of int are also addressed.

Windows does not support alternately-named __VA_ARGS__ which is not a
standard C++ language feature in our baseline c++ 17 expectation. Other
minor adjustments reflect other quirks of the MSVC compilier (some more
correct and some simply buggy behavior).

Windows MSVC needs various guards on unrecognized #pragmas, and will not
support any preprocessor operations within the arguments to a macro;
this is not stdc or stdc++.

This patch largely ignores changes which are required for windows, and
do not impact the linux/os-x compilation path. This patch is also
missing the IoHandle abstraction of 'fd' arguments, storage and return
codes, win32 error handling and win32 specific #include's handling.

Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>
#ifdef NDEBUG
"RELEASE",
const std::string release_type = "RELEASE";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why this change? make them string_view.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is another example where the macro CONSTRUCT_ON_FIRST_USE cannot have nested #cpp statements such as #ifdef. We simply followed the file's current convention, if a rewrite is in order, doesn't it make sense to convert this all to absl::string_view? Is it possible to accept this patch as-is, to accomplish the stated purpose of this PR (to get it compiling without gcc'isms)?

Copy link
Member

@lizan lizan Oct 23, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the gcc'ism in this function before your change? You should be able to make L23-L30 to static const absl::string_view, basically no string allocation other than the last statement. Because these are no longer in CONSTRUCT_ON_FIRST_USE, this means every version() call will result std::string allocation, which is hard no.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lizan we updated the file, is this what you had in mind?

@@ -1,3 +1,11 @@
// grpcpp/grpcpp.h includes <windows.h>, so undef some interfering symbols
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?? this seems a wrong place.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't it? Unfortunately grpc is a mess when it comes to injecting windows.h symbols, so this is where this one must be accomodated at the moment. Comments on platform.h elsewhere.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean this could never go before #pragma once, and grpcpp is not included in this file either.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. Tested and removing.

@achasveachas achasveachas marked this pull request as ready for review October 10, 2019 21:02
@@ -16,7 +16,11 @@ class TestStreamInfo : public StreamInfo::StreamInfo {
memset(&fake_time, 0, sizeof(fake_time));
fake_time.tm_year = 99; // tm < 1901-12-13 20:45:52 is not valid on macOS
fake_time.tm_mday = 1;
start_time_ = std::chrono::system_clock::from_time_t(timegm(&fake_time));
#if !defined(WIN32)
start_time_ = std::chrono::system_clock::from_time_t(::timegm(&fake_time));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a particular problem... There are likely more portable solutions which don't violate the check_validate logic that if failing on the presence of a timegm() call. We simply used the existing logic and would beg another eager volunteer to take on that particular refactoring using stdc++ or absl api, no win32-internals knowledge required.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jmarantz I think we've been discussing use absl::Time and move away from chrono, will that ultimately solve this issue as well?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would be in favor of moving to absl::Time. However it's a ton of work. I count 1716 std::chrono refs in the codebase.

We'd probably have to do it in a few refactors.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't we sed this migration? Maybe with some wrappers?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this item worth it's own issue, maybe? I'd beg for this bit to be accepted in the short-term.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it's definitely a distinct issue. Can you open a GH issue and tag this as TODO?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#8717 re-kicks the earlier ticket for this issue.
I'll mark this thread resolved for purpose of this patch.

Copy link
Member

@htuch htuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, exciting to see the Windows port progressing.

@@ -0,0 +1,16 @@
diff --git a/include/tclap/StandardTraits.h b/include/tclap/StandardTraits.h
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you fix this one upstream?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will submit it, but it is needed locally short term.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems small enough that we could kick this into the pipeline in parallel. We really dislike patches, they are only a solution when all else fails when working with an upstream project.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If and when we ever see a tclap 1.4 release, this patch and the defect go away, since the entire issue was refactored away 6 years ago;
https://sourceforge.net/p/tclap/code/ci/5d4ffbf2db794af799b8c5727fb6c65c079195ac/
Please consider this patch acceptable short-term (or permanently given the stable/no-releases state) for this component and we'll treat this as resolved for modern windows 64 compilers.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ack, please leave a reference to this thread in the patches arg of the _repository_impl .

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added short note + refactor link

@@ -8,7 +8,7 @@ index 35c77d1d..47bd63f5 100644
# Set it to "int" to match the behavior of AC_TYPE_SSIZE_T (autotools).
- set(ssize_t int)
+ if(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ssize_t int64_t)
+ set(ssize_t ptrdiff_t)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you upstream this? Patches aren't sustainable for us long term.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will not be accepted upstream until a version major bump (note it is our patch - of envoy's present patch.) PR and discussion item here; nghttp2/nghttp2#1395

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ack, please leave a reference to this thread in the patches arg of the _repository_impl .

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added footnote of ABI compat/next major release, discussion pointer to nghttp2/nghttp2#1395

#undef TRUE
#undef DELETE
#undef ERROR
#undef GetMessage
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems pretty fragile, is there some best practice for importing Protobuf headers on Windows or other projects we can crib from?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll attach the explanation top-post in the review comments, but I agree we should consume our own platform.h here and delegate inclusion of windows.h at that inflection point, trashing MS macros at the time we include windows.h. Individual modules should never be injecting MS SDK API headers anywhere without coordination.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I like this solution.

// <windows.h> defines macros for ERROR and TRUE, so we need to undef them in
// case it's been included above
#undef ERROR
#undef TRUE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, definitely not a fan of so many seemingly random places that we need to do these #undef. Would be very keen to see some way we can hide this and bound the number.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My project of Monday is to localize the inclusion of all networking/variant headers into platform.h, and perform the adjustment there. The problem will become to get the code style review to accept that platform.h occurs nearly first, or before any other dependency which tries to inject windows.h

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fantastic. In this case, I would suggest you formalize this rule in tools/header_order.py, so that we have a machine enforcement of this logic.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the only remaining threads are the WIN32 that are left in rando files.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please review our submission of yesterday, localizing the decisions on posix / windows API headers and fix-ups of these to the include/envoy/common/platform.h file.

Expanding on that idea, it would also be possible to resolve the problems with Linux <sys/types.h> and #undef the 'major', 'minor' defines which cause significant noise at certain points in the build. It wouldn't be unreasonable to move this (basically portable) inclusion into platform.h as well.

test/common/http/http2/codec_impl_test.cc Show resolved Hide resolved
@wrowe
Copy link
Contributor

wrowe commented Oct 11, 2019

As a top-level comment, feel free to push back any uio.h vs. winsock2.h (and undefines.) The next submission this coming week makes a lot of changes, to localize all of those inclusions in platform.h as our single point of contact with the platform-specific networking API.

@wrowe
Copy link
Contributor

wrowe commented Oct 18, 2019

Simply to unstale, the two action items I'm pursuing are the request to string_view as identified by lizan, and either retract or advance the use of platform.h for <windows.h> (winsock2 etc) inclusion, and finally open a ticket to refactor to absl time classes that wouldn't fall under this PR. If I have missed anything else that prevents this patch from being pushed, please identify such.

Garden Windows and others added 2 commits October 23, 2019 10:20
Signed-off-by: Yechiel Kalmenson <[email protected]>

Signed-off-by: William A Rowe Jr <[email protected]>
achasveachas and others added 2 commits October 23, 2019 10:34
Signed-off-by: William A Rowe Jr <[email protected]>

Signed-off-by: Yechiel Kalmenson <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>

Signed-off-by: William A Rowe Jr <[email protected]>
Copy link
Member

@htuch htuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks much better, thanks for your patience working through the gaps here.
/wait

@@ -8,7 +8,7 @@ index 35c77d1d..47bd63f5 100644
# Set it to "int" to match the behavior of AC_TYPE_SSIZE_T (autotools).
- set(ssize_t int)
+ if(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ssize_t int64_t)
+ set(ssize_t ptrdiff_t)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ack, please leave a reference to this thread in the patches arg of the _repository_impl .

@@ -0,0 +1,16 @@
diff --git a/include/tclap/StandardTraits.h b/include/tclap/StandardTraits.h
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ack, please leave a reference to this thread in the patches arg of the _repository_impl .

@@ -92,7 +92,7 @@ RetryStateImpl::RetryStateImpl(const RetryPolicy& route_policy, Http::HeaderMap&

if (!retriable_request_headers_.empty()) {
// If this route limits retries by request headers, make sure there is a match.
bool request_header_match = false;
uint32_t request_header_match = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is used as a bool below, why an integer?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It isn't used as a bool. It's used for boolean math against a uint32_t.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we change the request_header_match = true to request_header_match = 1? I think this is clearer if we switch the type here.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Switched these two constants at 95 and 98.

test/common/http/http2/codec_impl_test.cc Show resolved Hide resolved
@@ -49,15 +49,16 @@ INSTANTIATE_TEST_SUITE_P(IpVersions, EchoIntegrationTest,
TEST_P(EchoIntegrationTest, Hello) {
Buffer::OwnedImpl buffer("hello");
std::string response;
RawConnectionDriver connection(
std::unique_ptr<RawConnectionDriver> connection;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you elaborate on why this change was needed?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have literally no clue, it was before my time, and not suggesting this is the single best workaround. Reverting the patch on msvc we end up with;

ERROR: C:/workspace/envoy/test/integration/BUILD:565:1: C++ compilation of rule '//test/integration:echo_integration_test_lib_internal_only' failed (Exit 2)
test/integration/echo_integration_test.cc(56): error C2065: 'connection': undeclared identifier
test/integration/echo_integration_test.cc(106): error C2065: 'connection': undeclared identifier
Target //test/integration:echo_integration_test failed to build

We are happy to withdraw changes to this specific file for separate consideration.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We see an additional problem on Windows with this test. We will bypass it short term and are withdrawing the changes to echo_integration_test until they are better understood by all.

// <windows.h> defines macros for ERROR and TRUE, so we need to undef them in
// case it's been included above
#undef ERROR
#undef TRUE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the only remaining threads are the WIN32 that are left in rando files.

Garden Windows and others added 4 commits October 28, 2019 11:31
The purpose of platform.h is to localize the inclusion
of POSIX-specific, or Windows-specific common #include's
from the C api. This is included when such networking
or other constructs are needed -or- when 3rd party
dependencies are including these definitions.

This patch begins removing posix-specific headers into
envoy/common/platform.h, which becomes the only origin
of including windows.h API header files in the envoy
build schema. This allows us to fix up issues where the
Windows API is not a good C++ citizen (`#define interface`
for many common keywords, etc.)

Signed-off-by: Yechiel Kalmenson <[email protected]>
Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>
achasveachas and others added 2 commits October 29, 2019 18:16
Introduced a comment to allow windows/winsock to occur
prior to mswsock (in spite of alpha ordering)

Still, the pre-existing gmtime alert persists until this ticket
is addressed in some future PR;
#8717

Signed-off-by: Yechiel Kalmenson <[email protected]>
Signed-off-by: William A Rowe Jr <[email protected]>

Signed-off-by: Yechiel Kalmenson <[email protected]>
Added comments for tclap and nghttp2 patches which are less likely
to be seen at this project in the near-term. (Feel free to simplify.)

Withdrew changes to echo_integration_test until we better understand
the appropriate fix. The remaining PR is not blocked on this change.
https://github.com/envoyproxy/envoy/pull/8572/files/81724788290b79d88a01965c39f69f9ea8daf47e#r338447233

Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>

Signed-off-by: William A Rowe Jr <[email protected]>
@achasveachas
Copy link
Contributor Author

Right now the only formatting failures are the ones associated with the gmtime fix, would you rather we pull that out until that refactor (#8717 ) is addressed so the Linux CI can run properly?

Copy link
Member

@htuch htuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, I like the new platform.h construct. A few more comments and we can ship. Thanks.
/wait

@@ -1,5 +1,7 @@
#pragma once

#include "envoy/common/platform.h" // Avert format.h including windows.h
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we fix fmtlib upstream?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a practical matter? Any of our 3 dozen dependencies could introduce an #include <window.h> and disturb our source compilation, that header is not meant for general C++ language consumption. By this, we mean that MS heavily leverages #define and C++ heavily leverages multiple legible tokens. The logic in C language might introduce add_interface() but in C++ we are going to introduce interface.add(), which collides with windows.h defines.

We've introduced platform.h to work around this every time we encounter the issue. And if it is fixed upstream, then we could drop our #include, but it isn't critical. The answer at envoy is to eventually stop using Posix or Windows types in our own .h interface definitions, and localize the Posix and Windows implementations to our .cc sources (which will always include platform.h.) Exceptions would include our .h interface stubs to third party libraries such as grpc, nghttp2, etc.

I don't believe an upstream fix is really a priority, since I'm reading on #envoy-dev that fmtlib is being phased out for absl? It certainly shouldn't block this patch.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel that any 1st class support for Windows in Envoy doesn't end at Envoy. With my maintainer hat on I'm labeling this technical debt.. It's just a single line, but one day someone will come along and spend a day or so chasing down some obscure issue that is masked by this.

At the same time, we're pragmatic about tech debt and want to see Windows support land.

I would like to see tracking issues filed with the respective communities or in Envoy GH and referenced in these comments. Even if you folks aren't going to own this, we need to recognize these problems and provide the opportunity for other folks to do so.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, we will live with fmtlib for a long time. It's deprecated on the data path, but it's a key part of logging which won't be going away.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, we will live with fmtlib for a long time. It's deprecated on the data path, but it's a key part of logging which won't be going away.

Fair point, and researching, it turns out they have already responded.

fmtlib/fmt#171

We have the option of disabling fmt.h's use of windows.h, we just need to define FMT_USE_WINDOWS_H=0 as appropriate. This simply deprives us of the optimizations present in bazel-envoy/external/com_github_fmtlib_fmt/include/fmt/format-inl.h

It's an open question whether we want to define this symbol prior to including format.h in our
source/common/common/fmt.h header or include windows.h before they can, these have the same effect. If we want to explore this further, perhaps an issue is in order for further discussions, but we are reasonably happy with the proposed solution.

@@ -1,8 +1,10 @@
#include "common/network/cidr_range.h"

#ifndef WIN32
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not platform.h?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An oversight. Corrected, thanks!

@@ -92,7 +92,7 @@ RetryStateImpl::RetryStateImpl(const RetryPolicy& route_policy, Http::HeaderMap&

if (!retriable_request_headers_.empty()) {
// If this route limits retries by request headers, make sure there is a match.
bool request_header_match = false;
uint32_t request_header_match = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we change the request_header_match = true to request_header_match = 1? I think this is clearer if we switch the type here.

Catch missing use of platform.h
Using int constants for clarity

Signed-off-by: Yechiel Kalmenson <[email protected]>
Signed-off-by: William A Rowe Jr <[email protected]>

Signed-off-by: Yechiel Kalmenson <[email protected]>
wrowe and others added 2 commits November 1, 2019 10:26
Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>

Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>
Signed-off-by: William A Rowe Jr <[email protected]>

Signed-off-by: Yechiel Kalmenson <[email protected]>
Copy link
Member

@htuch htuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM modulo filing requested tracking issues and updating comments. This is epic, thanks for the major cleanup!

Copy link
Member

@lizan lizan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, thanks! LGTM modulo a nit.

source/common/common/version.cc Outdated Show resolved Hide resolved
@wrowe
Copy link
Contributor

wrowe commented Nov 2, 2019

LGTM modulo filing requested tracking issues and updating comments. This is epic, thanks for the major cleanup!

Some confusion, I'm wondering this is modulo what remaining items? All tracking issues except your fmt class suggestion were filed upstream that I'm aware of, all requested comments had been added in this patch that I'm aware of.

So if there is anything to do other than pushing an upstream a suggestion to the fmt project to hide the inclusion of the windows.h header from all general consumers of their headers (a very good suggestion to push), I've missed it, other than @lizan 's final suggestion of 'static const'ness. Please point out any other remaining items, thanks!

Signed-off-by: William A Rowe Jr <[email protected]>
Signed-off-by: Yechiel Kalmenson <[email protected]>

Signed-off-by: William A Rowe Jr <[email protected]>
@wrowe
Copy link
Contributor

wrowe commented Nov 4, 2019

[...] modulo filing requested tracking issues and updating comments.

We believe these are all filed, comments updated, code adjusted as requested.

@htuch
Copy link
Member

htuch commented Nov 4, 2019

Thanks @wrowe, ready to ship when CI clears.

@htuch htuch merged commit 85e2038 into envoyproxy:master Nov 4, 2019
@wrowe wrowe deleted the fix-msvc-incompatibilties branch November 5, 2019 17:57
@sunjayBhatia sunjayBhatia mentioned this pull request Dec 20, 2019
@kfaseela
Copy link
Contributor

There is a tclap 1.2.5 version available, will this patch cause any trouble if we try to upgrade to 1.2.5?

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.

6 participants