diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-21 16:04:50 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-21 16:04:50 +0000 |
commit | 7de8404f117520baf2d45cf248c5450fecbb051f (patch) | |
tree | d59b102f318edc94c06e44201696578ebc05a966 /ipc/ipc_message_macros.h | |
parent | 0c6601903f547785adadfbed4856b4fc039d5599 (diff) | |
download | chromium_src-7de8404f117520baf2d45cf248c5450fecbb051f.zip chromium_src-7de8404f117520baf2d45cf248c5450fecbb051f.tar.gz chromium_src-7de8404f117520baf2d45cf248c5450fecbb051f.tar.bz2 |
Make IPC_MESSAGE_EXPORT more robust.
Currently, files that want to export ipc messages currently do
#undef IPC_MESSAGE_EXPORT
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
at the top, and files that don't want to export ipc messages just do nothing. This is problematic if a cc file does
#include "exported_messages.h"
#include "not_exported_messages.h"
because the second header file picks up the #define from the first file and declares all its messages as exported. In other translation units, where not_exported_messages.h is #included without another header above it, the messages will get default visibility – so the same class ends up with different visibilities in different translation units.
Instead, let ipc_message_macros.h #undef IPC_MESSAGE_EXPORT outside of the include guard, so that all files that don't set the define see it as defined to nothing. (Idea from jam@)
Also disable about:ipc in the component build, since ipc logging adds a dependency from chrome on all ipc message classes, so they would all have to be exported.
BUG=90078
TEST=No linker errors about IPC messages when doing components build on mac. (Other linker errors remain for now.)
TBR=brettw
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=122689
Review URL: http://codereview.chromium.org/9425006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122828 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_message_macros.h')
-rw-r--r-- | ipc/ipc_message_macros.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/ipc/ipc_message_macros.h b/ipc/ipc_message_macros.h index 783108e..f37c05b 100644 --- a/ipc/ipc_message_macros.h +++ b/ipc/ipc_message_macros.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -173,6 +173,14 @@ // ViewHostMsg_SyncMessageName::WriteReplyParams(reply_msg, out1, out2); // Send(reply_msg); +// Files that want to export their ipc messages should do +// #undef IPC_MESSAGE_EXPORT +// #define IPC_MESSAGE_EXPORT VISIBILITY_MACRO +// after including this header, but before using any of the macros below. +// (This needs to be before the include guard.) +#undef IPC_MESSAGE_EXPORT +#define IPC_MESSAGE_EXPORT + #ifndef IPC_IPC_MESSAGE_MACROS_H_ #define IPC_IPC_MESSAGE_MACROS_H_ @@ -184,11 +192,6 @@ #include "ipc/ipc_message_utils_impl.h" #endif -// Override this to force message classes to be exported. -#ifndef IPC_MESSAGE_EXPORT -#define IPC_MESSAGE_EXPORT -#endif - // Macros for defining structs. May be subsequently redefined. #define IPC_STRUCT_BEGIN(struct_name) \ IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, IPC::NoParams) |