2016-07-14 16:16:42 +00:00
|
|
|
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
2013-02-25 20:47:23 +00:00
|
|
|
# vim: set filetype=python:
|
|
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
2015-01-20 08:58:00 +00:00
|
|
|
XPIDL_SOURCES += [
|
|
|
|
'mozIThirdPartyUtil.idl',
|
|
|
|
'nsIApplicationCache.idl',
|
|
|
|
'nsIApplicationCacheChannel.idl',
|
|
|
|
'nsIApplicationCacheContainer.idl',
|
|
|
|
'nsIApplicationCacheService.idl',
|
|
|
|
'nsIArrayBufferInputStream.idl',
|
|
|
|
'nsIAsyncStreamCopier.idl',
|
|
|
|
'nsIAsyncStreamCopier2.idl',
|
|
|
|
'nsIAsyncVerifyRedirectCallback.idl',
|
|
|
|
'nsIAuthInformation.idl',
|
|
|
|
'nsIAuthModule.idl',
|
|
|
|
'nsIAuthPrompt.idl',
|
|
|
|
'nsIAuthPrompt2.idl',
|
|
|
|
'nsIAuthPromptAdapterFactory.idl',
|
|
|
|
'nsIAuthPromptCallback.idl',
|
|
|
|
'nsIAuthPromptProvider.idl',
|
|
|
|
'nsIBackgroundFileSaver.idl',
|
|
|
|
'nsIBufferedStreams.idl',
|
|
|
|
'nsIByteRangeRequest.idl',
|
|
|
|
'nsICacheInfoChannel.idl',
|
|
|
|
'nsICachingChannel.idl',
|
|
|
|
'nsICancelable.idl',
|
2014-10-13 21:34:03 +00:00
|
|
|
'nsICaptivePortalService.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIChannel.idl',
|
|
|
|
'nsIChannelEventSink.idl',
|
2016-03-15 03:10:00 +00:00
|
|
|
'nsIChannelWithDivertableParentListener.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIChildChannel.idl',
|
2017-02-21 01:46:36 +00:00
|
|
|
'nsIClassifiedChannel.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIClassOfService.idl',
|
|
|
|
'nsIContentSniffer.idl',
|
|
|
|
'nsIDashboard.idl',
|
|
|
|
'nsIDashboardEventNotifier.idl',
|
2015-09-14 17:29:52 +00:00
|
|
|
'nsIDeprecationWarner.idl',
|
Bug 356831 - Proxy autodiscovery doesn't check DHCP (option 252) r=bagder,valentin
This patch addresses an issue with Firefox's proxy detection on networks which
do not have their a proxy auto-configuration (PAC) file hosted at
http://wpad/wpad.dat, and instead make use of DHCP option 252 for broadcasting
the address of the PAC file. See https://findproxyforurl.com/wpad-introduction/
for an introduction to the protocol.
Prior to this patch, proxy auto-detect missed out the DHCP query stage, and just
looked for a PAC file at http://wpad/wpad.dat
This patch only addresses the issue for Firefox on Windows, although it defines a
DHCP client interface which could be implemented on other platforms.
The high-level components of this patch are:
* nsIDHCPClient.idl - this is an interface which has been defined for querying the
DHCP server.
* nsPACMan.cpp - where previously when the PAC URL was simply set to a constant of
http://wpad/wpad.dat, it now dispatches an asynchronous command to the proxy
thread. The class ExecutePACThreadAction has been augmented to include an
instruction to 'ConfigureWPAD' (Configure Web-proxy auto-detect), and a new class,
'ConfigureWPADComplete' has been created to relay the result (the URL of the PAC
file) back to the nsPACMan object.
* nsProtocolProxyService.cpp
Minor changes to reflect the fact that the PAC URL not being set does not always
mean there is no PAC to be used; instead it could be in the process of being
detected.
* TestPACMan.cpp
This is a new file, and tests only the DHCP auto-detect functionality.
Some tests use multiple threads, as they test the non-blocking proxy detection.
* DHCPUtils.cpp
A class containing the main logic for querying DHCP.
* WindowsNetworkFunctionsWrapper.cpp
A very thin wrapper around the Windows API calls needed by DHCPUtils.
This class was introduced so it could be mocked out in tests.
* nsWindowsDHCPClient.cpp
* An implementation of the interface defined in nsIDHCPClient.idl. Fairly thin:
most logic is implemented in DHCPUtils.
* TestDHCPUtils.cpp
Tests for DHCPUtils and nsWindowsDHCPClient
MozReview-Commit-ID: 4xFQz3tOLEx
--HG--
extra : rebase_source : dfd5c588406a8b0d92f91cc8a0038ca722b7140a
2018-06-07 22:07:28 +00:00
|
|
|
'nsIDHCPClient.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIDivertableChannel.idl',
|
|
|
|
'nsIDownloader.idl',
|
|
|
|
'nsIEncodedChannel.idl',
|
|
|
|
'nsIExternalProtocolHandler.idl',
|
|
|
|
'nsIFileStreams.idl',
|
|
|
|
'nsIFileURL.idl',
|
|
|
|
'nsIForcePendingChannel.idl',
|
2016-01-28 10:38:34 +00:00
|
|
|
'nsIFormPOSTActionChannel.idl',
|
2016-07-14 07:32:00 +00:00
|
|
|
'nsIHttpAuthenticatorCallback.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIHttpPushListener.idl',
|
|
|
|
'nsIIncrementalDownload.idl',
|
2015-11-30 14:54:11 +00:00
|
|
|
'nsIIncrementalStreamLoader.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIInputStreamChannel.idl',
|
|
|
|
'nsIInputStreamPump.idl',
|
|
|
|
'nsIIOService.idl',
|
|
|
|
'nsILoadContextInfo.idl',
|
|
|
|
'nsILoadGroup.idl',
|
|
|
|
'nsILoadGroupChild.idl',
|
2015-02-18 20:34:13 +00:00
|
|
|
'nsILoadInfo.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIMIMEInputStream.idl',
|
|
|
|
'nsIMultiPartChannel.idl',
|
|
|
|
'nsINestedURI.idl',
|
|
|
|
'nsINetAddr.idl',
|
|
|
|
'nsINetUtil.idl',
|
2018-10-29 11:22:40 +00:00
|
|
|
'nsINetworkConnectivityService.idl',
|
2016-06-01 20:16:40 +00:00
|
|
|
'nsINetworkInfoService.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsINetworkInterceptController.idl',
|
|
|
|
'nsINetworkLinkService.idl',
|
|
|
|
'nsINetworkPredictor.idl',
|
|
|
|
'nsINetworkPredictorVerifier.idl',
|
|
|
|
'nsINullChannel.idl',
|
|
|
|
'nsIParentChannel.idl',
|
|
|
|
'nsIParentRedirectingChannel.idl',
|
|
|
|
'nsIPermission.idl',
|
|
|
|
'nsIPermissionManager.idl',
|
|
|
|
'nsIPrivateBrowsingChannel.idl',
|
|
|
|
'nsIProgressEventSink.idl',
|
|
|
|
'nsIPrompt.idl',
|
|
|
|
'nsIProtocolHandler.idl',
|
|
|
|
'nsIProtocolProxyCallback.idl',
|
|
|
|
'nsIProtocolProxyFilter.idl',
|
|
|
|
'nsIProtocolProxyService.idl',
|
|
|
|
'nsIProtocolProxyService2.idl',
|
|
|
|
'nsIProxiedChannel.idl',
|
|
|
|
'nsIProxiedProtocolHandler.idl',
|
|
|
|
'nsIProxyInfo.idl',
|
|
|
|
'nsIRandomGenerator.idl',
|
|
|
|
'nsIRedirectChannelRegistrar.idl',
|
2017-05-25 17:42:00 +00:00
|
|
|
'nsIRedirectHistoryEntry.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIRedirectResultListener.idl',
|
|
|
|
'nsIRequest.idl',
|
2016-04-21 14:59:17 +00:00
|
|
|
'nsIRequestContext.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIRequestObserver.idl',
|
|
|
|
'nsIRequestObserverProxy.idl',
|
|
|
|
'nsIResumableChannel.idl',
|
2015-05-29 17:40:52 +00:00
|
|
|
'nsISecCheckWrapChannel.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsISecureBrowserUI.idl',
|
2015-09-11 06:44:00 +00:00
|
|
|
'nsISensitiveInfoHiddenURI.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsISerializationHelper.idl',
|
|
|
|
'nsIServerSocket.idl',
|
|
|
|
'nsISimpleStreamListener.idl',
|
2016-02-11 09:18:46 +00:00
|
|
|
'nsISocketFilter.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsISocketTransport.idl',
|
|
|
|
'nsISocketTransportService.idl',
|
|
|
|
'nsISpeculativeConnect.idl',
|
|
|
|
'nsIStandardURL.idl',
|
|
|
|
'nsIStreamListener.idl',
|
|
|
|
'nsIStreamListenerTee.idl',
|
|
|
|
'nsIStreamLoader.idl',
|
|
|
|
'nsIStreamTransportService.idl',
|
|
|
|
'nsISyncStreamListener.idl',
|
|
|
|
'nsISystemProxySettings.idl',
|
|
|
|
'nsIThreadRetargetableRequest.idl',
|
|
|
|
'nsIThreadRetargetableStreamListener.idl',
|
2016-02-23 21:26:45 +00:00
|
|
|
'nsIThrottledInputChannel.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsITimedChannel.idl',
|
|
|
|
'nsITLSServerSocket.idl',
|
|
|
|
'nsITraceableChannel.idl',
|
|
|
|
'nsITransport.idl',
|
|
|
|
'nsIUDPSocket.idl',
|
|
|
|
'nsIUploadChannel.idl',
|
|
|
|
'nsIUploadChannel2.idl',
|
|
|
|
'nsIURI.idl',
|
2017-11-20 15:10:03 +00:00
|
|
|
'nsIURIMutator.idl',
|
2018-07-31 08:27:00 +00:00
|
|
|
'nsIURIWithSpecialOrigin.idl',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsIURL.idl',
|
|
|
|
'nsIURLParser.idl',
|
|
|
|
'nsPISocketTransportService.idl',
|
|
|
|
]
|
|
|
|
|
|
|
|
XPIDL_MODULE = 'necko'
|
|
|
|
|
|
|
|
EXPORTS += [
|
|
|
|
'netCore.h',
|
|
|
|
'nsASocketHandler.h',
|
|
|
|
'nsAsyncRedirectVerifyHelper.h',
|
|
|
|
'nsFileStreams.h',
|
2015-05-22 07:32:25 +00:00
|
|
|
'nsInputStreamPump.h',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsMIMEInputStream.h',
|
|
|
|
'nsNetUtil.h',
|
|
|
|
'nsReadLine.h',
|
2015-03-04 21:05:21 +00:00
|
|
|
'nsSerializationHelper.h',
|
2015-03-06 21:33:00 +00:00
|
|
|
'nsSimpleNestedURI.h',
|
2015-03-06 21:33:00 +00:00
|
|
|
'nsSimpleURI.h',
|
2018-12-17 02:36:32 +00:00
|
|
|
'nsStandardURL.h',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsStreamListenerWrapper.h',
|
|
|
|
'nsURIHashKey.h',
|
|
|
|
'nsURLHelper.h',
|
|
|
|
'nsURLParsers.h',
|
2017-04-07 21:35:48 +00:00
|
|
|
'SimpleChannel.h',
|
2015-01-20 08:58:00 +00:00
|
|
|
]
|
|
|
|
|
2015-02-18 20:34:13 +00:00
|
|
|
EXPORTS.mozilla += [
|
2016-01-18 19:20:08 +00:00
|
|
|
'LoadContextInfo.h',
|
2015-02-18 20:34:13 +00:00
|
|
|
'LoadInfo.h',
|
2015-10-22 18:07:32 +00:00
|
|
|
'LoadTainting.h',
|
2017-05-25 17:42:00 +00:00
|
|
|
'nsRedirectHistoryEntry.h',
|
2015-02-18 20:34:13 +00:00
|
|
|
]
|
|
|
|
|
2015-01-20 08:58:00 +00:00
|
|
|
EXPORTS.mozilla.net += [
|
2014-10-13 21:34:03 +00:00
|
|
|
'CaptivePortalService.h',
|
2015-01-20 08:58:00 +00:00
|
|
|
'ChannelDiverterChild.h',
|
|
|
|
'ChannelDiverterParent.h',
|
|
|
|
'Dashboard.h',
|
|
|
|
'DashboardTypes.h',
|
2018-06-12 20:22:50 +00:00
|
|
|
'IOActivityMonitor.h',
|
2015-03-11 00:00:01 +00:00
|
|
|
'MemoryDownloader.h',
|
2018-10-29 11:22:40 +00:00
|
|
|
'NetworkConnectivityService.h',
|
2017-09-08 14:06:26 +00:00
|
|
|
'PartiallySeekableInputStream.h',
|
2016-04-15 02:26:58 +00:00
|
|
|
'Predictor.h',
|
2018-08-22 04:37:28 +00:00
|
|
|
'RedirectChannelRegistrar.h',
|
2015-01-20 08:58:00 +00:00
|
|
|
'ReferrerPolicy.h',
|
2018-10-23 20:07:17 +00:00
|
|
|
'RequestContextService.h',
|
2017-07-27 20:34:54 +00:00
|
|
|
'SimpleChannelParent.h',
|
2017-05-04 10:14:04 +00:00
|
|
|
'TCPFastOpen.h',
|
2015-01-20 08:58:00 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
UNIFIED_SOURCES += [
|
|
|
|
'ArrayBufferInputStream.cpp',
|
|
|
|
'BackgroundFileSaver.cpp',
|
2014-10-13 21:34:03 +00:00
|
|
|
'CaptivePortalService.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'ChannelDiverterChild.cpp',
|
|
|
|
'ChannelDiverterParent.cpp',
|
|
|
|
'Dashboard.cpp',
|
|
|
|
'EventTokenBucket.cpp',
|
2019-03-20 14:40:44 +00:00
|
|
|
'FuzzyLayer.cpp',
|
2018-06-12 20:22:50 +00:00
|
|
|
'IOActivityMonitor.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'LoadContextInfo.cpp',
|
2015-02-18 20:34:13 +00:00
|
|
|
'LoadInfo.cpp',
|
2015-03-11 00:00:01 +00:00
|
|
|
'MemoryDownloader.cpp',
|
2018-10-29 11:22:40 +00:00
|
|
|
'NetworkConnectivityService.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsAsyncRedirectVerifyHelper.cpp',
|
|
|
|
'nsAsyncStreamCopier.cpp',
|
|
|
|
'nsAuthInformationHolder.cpp',
|
|
|
|
'nsBase64Encoder.cpp',
|
|
|
|
'nsBaseChannel.cpp',
|
|
|
|
'nsBaseContentStream.cpp',
|
|
|
|
'nsBufferedStreams.cpp',
|
|
|
|
'nsDirectoryIndexStream.cpp',
|
|
|
|
'nsDNSPrefetch.cpp',
|
|
|
|
'nsDownloader.cpp',
|
|
|
|
'nsFileStreams.cpp',
|
|
|
|
'nsIncrementalDownload.cpp',
|
2015-11-30 14:54:11 +00:00
|
|
|
'nsIncrementalStreamLoader.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsInputStreamChannel.cpp',
|
|
|
|
'nsInputStreamPump.cpp',
|
|
|
|
'nsIOService.cpp',
|
2017-12-05 16:17:02 +00:00
|
|
|
'nsIURIMutatorUtils.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsLoadGroup.cpp',
|
|
|
|
'nsMIMEInputStream.cpp',
|
|
|
|
'nsNetAddr.cpp',
|
|
|
|
'nsNetUtil.cpp',
|
|
|
|
'nsPACMan.cpp',
|
|
|
|
'nsPreloadedStream.cpp',
|
|
|
|
'nsProtocolProxyService.cpp',
|
|
|
|
'nsProxyInfo.cpp',
|
2017-05-25 17:42:00 +00:00
|
|
|
'nsRedirectHistoryEntry.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'nsRequestObserverProxy.cpp',
|
|
|
|
'nsSerializationHelper.cpp',
|
|
|
|
'nsServerSocket.cpp',
|
|
|
|
'nsSimpleNestedURI.cpp',
|
|
|
|
'nsSimpleStreamListener.cpp',
|
|
|
|
'nsSimpleURI.cpp',
|
|
|
|
'nsSocketTransport2.cpp',
|
|
|
|
'nsSocketTransportService2.cpp',
|
|
|
|
'nsStandardURL.cpp',
|
|
|
|
'nsStreamListenerTee.cpp',
|
|
|
|
'nsStreamListenerWrapper.cpp',
|
|
|
|
'nsStreamLoader.cpp',
|
|
|
|
'nsStreamTransportService.cpp',
|
|
|
|
'nsSyncStreamListener.cpp',
|
|
|
|
'nsTransportUtils.cpp',
|
|
|
|
'nsUDPSocket.cpp',
|
2017-09-08 14:06:26 +00:00
|
|
|
'PartiallySeekableInputStream.cpp',
|
2016-03-22 15:02:39 +00:00
|
|
|
'PollableEvent.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'Predictor.cpp',
|
|
|
|
'ProxyAutoConfig.cpp',
|
|
|
|
'RedirectChannelRegistrar.cpp',
|
2016-04-21 14:59:17 +00:00
|
|
|
'RequestContextService.cpp',
|
2016-02-13 17:10:02 +00:00
|
|
|
'SimpleBuffer.cpp',
|
2017-04-07 21:35:48 +00:00
|
|
|
'SimpleChannel.cpp',
|
2017-07-27 20:34:54 +00:00
|
|
|
'SimpleChannelParent.cpp',
|
2017-05-04 10:14:04 +00:00
|
|
|
'TCPFastOpenLayer.cpp',
|
2016-02-23 21:26:45 +00:00
|
|
|
'ThrottleQueue.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
'Tickler.cpp',
|
|
|
|
'TLSServerSocket.cpp',
|
|
|
|
]
|
|
|
|
|
2019-03-20 14:40:44 +00:00
|
|
|
if CONFIG['FUZZING_INTERFACES'] and CONFIG['LIBFUZZER']:
|
|
|
|
include('/tools/fuzzing/libfuzzer-flags.mozbuild')
|
|
|
|
SOURCES += [
|
|
|
|
'nsMediaFragmentURIParser.cpp',
|
|
|
|
'nsURLHelper.cpp',
|
|
|
|
'nsURLParsers.cpp',
|
|
|
|
]
|
|
|
|
SOURCES['nsMediaFragmentURIParser.cpp'].flags += libfuzzer_flags
|
|
|
|
SOURCES['nsURLHelper.cpp'].flags += libfuzzer_flags
|
|
|
|
SOURCES['nsURLParsers.cpp'].flags += libfuzzer_flags
|
|
|
|
else:
|
|
|
|
UNIFIED_SOURCES += [
|
|
|
|
'nsMediaFragmentURIParser.cpp',
|
|
|
|
'nsURLHelper.cpp',
|
|
|
|
'nsURLParsers.cpp',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2015-01-20 08:58:00 +00:00
|
|
|
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
|
|
|
|
SOURCES += [
|
|
|
|
'nsURLHelperWin.cpp',
|
2016-02-04 03:42:00 +00:00
|
|
|
'ShutdownLayer.cpp',
|
2015-01-20 08:58:00 +00:00
|
|
|
]
|
|
|
|
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
|
|
|
|
SOURCES += [
|
|
|
|
'nsURLHelperOSX.cpp',
|
|
|
|
]
|
|
|
|
else:
|
|
|
|
SOURCES += [
|
|
|
|
'nsURLHelperUnix.cpp',
|
|
|
|
]
|
|
|
|
|
2016-06-01 20:16:40 +00:00
|
|
|
# nsINetworkInfoService support.
|
|
|
|
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
|
|
|
|
SOURCES += [
|
|
|
|
'NetworkInfoServiceWindows.cpp',
|
|
|
|
'nsNetworkInfoService.cpp',
|
|
|
|
]
|
|
|
|
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
|
|
|
|
SOURCES += [
|
|
|
|
'NetworkInfoServiceCocoa.cpp',
|
|
|
|
'nsNetworkInfoService.cpp',
|
|
|
|
]
|
2016-07-11 13:16:56 +00:00
|
|
|
elif CONFIG['OS_ARCH'] == 'Linux':
|
2016-06-07 09:23:30 +00:00
|
|
|
SOURCES += [
|
|
|
|
'NetworkInfoServiceLinux.cpp',
|
|
|
|
'nsNetworkInfoService.cpp',
|
|
|
|
]
|
2016-06-01 20:16:40 +00:00
|
|
|
|
2015-01-20 08:58:00 +00:00
|
|
|
EXTRA_JS_MODULES += [
|
|
|
|
'NetUtil.jsm',
|
|
|
|
]
|
|
|
|
|
2018-03-08 18:01:11 +00:00
|
|
|
DIRS += [ 'mozurl' ]
|
|
|
|
|
2015-01-20 08:58:00 +00:00
|
|
|
include('/ipc/chromium/chromium-config.mozbuild')
|
|
|
|
|
|
|
|
FINAL_LIBRARY = 'xul'
|
|
|
|
|
|
|
|
LOCAL_INCLUDES += [
|
2016-04-13 23:30:16 +00:00
|
|
|
'/docshell/base',
|
2015-01-20 08:58:00 +00:00
|
|
|
'/dom/base',
|
2016-10-25 14:43:00 +00:00
|
|
|
'/netwerk/protocol/http',
|
2016-09-01 07:48:39 +00:00
|
|
|
'/netwerk/socket',
|
2018-12-14 11:40:17 +00:00
|
|
|
'/netwerk/url-classifier',
|
2015-01-20 08:58:00 +00:00
|
|
|
]
|
|
|
|
|
2019-05-07 22:16:14 +00:00
|
|
|
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
|
|
|
|
LOCAL_INCLUDES += [
|
|
|
|
'/xpcom/base',
|
|
|
|
]
|
|
|
|
|
2017-12-07 21:09:15 +00:00
|
|
|
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
|
2016-05-11 07:00:01 +00:00
|
|
|
CXXFLAGS += ['-Wno-error=shadow']
|