--- a/src/dbinc/db_cxx.in +++ b/src/dbinc/db_cxx.in @@ -50,6 +50,23 @@ #include +/* + * Berkeley DB's C API exposes atomic_init and store as macros, which + * collides with libc++ declarations when db.h is already included. + * Hide the macros while pulling in the C++ standard headers, then + * restore them for the Berkeley DB interfaces below. + */ +#ifdef atomic_init +#pragma push_macro("atomic_init") +#undef atomic_init +#define DB_CXX_RESTORE_ATOMIC_INIT +#endif +#ifdef store +#pragma push_macro("store") +#undef store +#define DB_CXX_RESTORE_STORE +#endif + @cxx_have_stdheaders@ #ifdef HAVE_CXX_STDHEADERS #include @@ -61,6 +78,15 @@ #define __DB_STD(x) x #endif +#ifdef DB_CXX_RESTORE_STORE +#pragma pop_macro("store") +#undef DB_CXX_RESTORE_STORE +#endif +#ifdef DB_CXX_RESTORE_ATOMIC_INIT +#pragma pop_macro("atomic_init") +#undef DB_CXX_RESTORE_ATOMIC_INIT +#endif + #include "db.h" class Db; // forward --- a/lang/cxx/stl/dbstl_exception.h +++ b/lang/cxx/stl/dbstl_exception.h @@ -13,9 +13,29 @@ #include #include +#ifdef atomic_init +#pragma push_macro("atomic_init") +#undef atomic_init +#define DB_STL_RESTORE_ATOMIC_INIT +#endif +#ifdef store +#pragma push_macro("store") +#undef store +#define DB_STL_RESTORE_STORE +#endif + #include #include +#ifdef DB_STL_RESTORE_STORE +#pragma pop_macro("store") +#undef DB_STL_RESTORE_STORE +#endif +#ifdef DB_STL_RESTORE_ATOMIC_INIT +#pragma pop_macro("atomic_init") +#undef DB_STL_RESTORE_ATOMIC_INIT +#endif + #include "dbstl_common.h" START_NS(dbstl) --- a/lang/cxx/stl/dbstl_element_ref.h +++ b/lang/cxx/stl/dbstl_element_ref.h @@ -9,8 +9,28 @@ #ifndef _DB_STL_KDPAIR_H #define _DB_STL_KDPAIR_H +#ifdef atomic_init +#pragma push_macro("atomic_init") +#undef atomic_init +#define DB_STL_RESTORE_ATOMIC_INIT +#endif +#ifdef store +#pragma push_macro("store") +#undef store +#define DB_STL_RESTORE_STORE +#endif + #include +#ifdef DB_STL_RESTORE_STORE +#pragma pop_macro("store") +#undef DB_STL_RESTORE_STORE +#endif +#ifdef DB_STL_RESTORE_ATOMIC_INIT +#pragma pop_macro("atomic_init") +#undef DB_STL_RESTORE_ATOMIC_INIT +#endif + #include "dbstl_common.h" #include "dbstl_dbt.h" #include "dbstl_exception.h"