// Protocol Buffers - Google's data interchange format // Copyright 2025 Google LLC. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd // Push and undef macros from the OS that may conflict with protobuf's // generated symbols. // noreturn is defined as a macro in C's stdnoreturn.h #ifdef noreturn #define PROTOBUF_DID_UNDEF_noreturn #pragma push_macro("noreturn") #undef noreturn #endif // autoheader defines this in some circumstances #ifdef PACKAGE #define PROTOBUF_DID_UNDEF_PACKAGE #pragma push_macro("PACKAGE") #undef PACKAGE #endif // a few common headers define this #ifdef PACKED #define PROTOBUF_DID_UNDEF_PACKED #pragma push_macro("PACKED") #undef PACKED #endif // This is a macro on Windows, macOS, and some variants of GCC. #ifdef DOMAIN #define PROTOBUF_DID_UNDEF_DOMAIN #pragma push_macro("DOMAIN") #undef DOMAIN #endif // linux is a legacy MACRO defined in most popular C++ standards. #ifdef linux #pragma push_macro("linux") #undef linux #define PROTOBUF_DID_UNDEF_LINUX #endif // netdb.h defines this on some platforms. #ifdef NO_DATA #pragma push_macro("NO_DATA") #undef NO_DATA #define PROTOBUF_DID_UNDEF_NO_DATA #endif // Windows declares several inconvenient macro names. We #undef them and then // restore them in port_undef.inc. #ifdef _WIN32 #pragma push_macro("CompareString") #undef CompareString #pragma push_macro("CREATE_NEW") #undef CREATE_NEW #pragma push_macro("DELETE") #undef DELETE #pragma push_macro("DOUBLE_CLICK") #undef DOUBLE_CLICK #pragma push_macro("ERROR") #undef ERROR #pragma push_macro("ERROR_BUSY") #undef ERROR_BUSY #pragma push_macro("ERROR_INSTALL_FAILED") #undef ERROR_INSTALL_FAILED #pragma push_macro("ERROR_NOT_FOUND") #undef ERROR_NOT_FOUND #pragma push_macro("ERROR_RETRY") #undef ERROR_RETRY #pragma push_macro("ERROR_TIMEOUT") #undef ERROR_TIMEOUT #pragma push_macro("GetClassName") #undef GetClassName #pragma push_macro("GetCurrentTime") #undef GetCurrentTime #pragma push_macro("GetMessage") #undef GetMessage #pragma push_macro("GetObject") #undef GetObject #pragma push_macro("IGNORE") #undef IGNORE #pragma push_macro("IN") #undef IN #pragma push_macro("INPUT_KEYBOARD") #undef INPUT_KEYBOARD #pragma push_macro("NO_ERROR") #undef NO_ERROR #pragma push_macro("OUT") #undef OUT #pragma push_macro("OPTIONAL") #undef OPTIONAL #pragma push_macro("min") #undef min #pragma push_macro("max") #undef max #pragma push_macro("NEAR") #undef NEAR #pragma push_macro("NO_DATA") #undef NO_DATA #pragma push_macro("REASON_UNKNOWN") #undef REASON_UNKNOWN #pragma push_macro("SERVICE_DISABLED") #undef SERVICE_DISABLED #pragma push_macro("SERVICE_STOP") #undef SERVICE_STOP #pragma push_macro("SEVERITY_ERROR") #undef SEVERITY_ERROR #pragma push_macro("STATUS_PENDING") #undef STATUS_PENDING #pragma push_macro("STRICT") #undef STRICT #pragma push_macro("timezone") #undef timezone #pragma push_macro("TRUE") #undef TRUE #pragma push_macro("FALSE") #undef FALSE #endif // _WIN32 #ifdef __APPLE__ // Inconvenient macro names from /usr/include/mach/boolean.h in some macOS SDKs. #pragma push_macro("TRUE") #undef TRUE #pragma push_macro("FALSE") #undef FALSE // Inconvenient macro names from usr/include/sys/syslimits.h in some macOS SDKs. #pragma push_macro("UID_MAX") #undef UID_MAX #pragma push_macro("GID_MAX") #undef GID_MAX // TYPE_BOOL is defined in the MacOS's ConditionalMacros.h. #pragma push_macro("TYPE_BOOL") #undef TYPE_BOOL #endif // __APPLE__ #if defined(ANDROID) || defined(__ANDROID__) // Inconvenient macro names from usr/include/limits.h in some Android NDKs. #pragma push_macro("UID_MAX") #undef UID_MAX #pragma push_macro("GID_MAX") #undef GID_MAX #endif // defined(ANDROID) || defined(__ANDROID__) #if defined(__FreeBSD__) || defined(__OpenBSD__) // Inconvenient macro names from /usr/include/sys/param.h. #pragma push_macro("TRUE") #undef TRUE #pragma push_macro("FALSE") #undef FALSE // Inconvenient macro names from /usr/include/sys/limits.h. #pragma push_macro("UID_MAX") #undef UID_MAX #pragma push_macro("GID_MAX") #undef GID_MAX #endif // defined(__FreeBSD__) || defined(__OpenBSD__) #if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER) // Don't let Objective-C Macros interfere with proto identifiers with the same // name. #pragma push_macro("DEBUG") #undef DEBUG #endif // defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)