From 7de8404f117520baf2d45cf248c5450fecbb051f Mon Sep 17 00:00:00 2001 From: "thakis@chromium.org" Date: Tue, 21 Feb 2012 16:04:50 +0000 Subject: Make IPC_MESSAGE_EXPORT more robust. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- ipc/ipc_message_macros.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'ipc/ipc_message_macros.h') 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) -- cgit v1.1