summaryrefslogtreecommitdiffstats
path: root/ppapi/c/pp_macros.h
diff options
context:
space:
mode:
authordmichael@google.com <dmichael@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-05 14:45:44 +0000
committerdmichael@google.com <dmichael@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-05 14:45:44 +0000
commit6f2e3919c4709404d8d7b6742f9cd9989b799c98 (patch)
tree55a933f7e2988625f0f3ded5a562203c7e3921c9 /ppapi/c/pp_macros.h
parent79ba2d8a26fe6c9b343c57fef57896a90baa3878 (diff)
downloadchromium_src-6f2e3919c4709404d8d7b6742f9cd9989b799c98.zip
chromium_src-6f2e3919c4709404d8d7b6742f9cd9989b799c98.tar.gz
chromium_src-6f2e3919c4709404d8d7b6742f9cd9989b799c98.tar.bz2
Make PPAPI headers compile with C compilers (gcc on Linux & Mac and MSVS on Windows). This includes changing bool to PP_Bool and adding a PP_INLINE macro.
TEST=tests/test_c_includes.c BUG=59791,53451 The first patch set is a straight copy of http://codereview.chromium.org/4019010/show which got LGTMed when PPAPI was in its own repo, but had to be rolled back in order to include chrome changes. IMPORTANT: This change will break plugin implementations that use the C interface, and might break others as well. Review URL: http://codereview.chromium.org/4310002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65200 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/c/pp_macros.h')
-rw-r--r--ppapi/c/pp_macros.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/ppapi/c/pp_macros.h b/ppapi/c/pp_macros.h
new file mode 100644
index 0000000..e864cc1
--- /dev/null
+++ b/ppapi/c/pp_macros.h
@@ -0,0 +1,46 @@
+// Copyright (c) 2010 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.
+
+#ifndef PPAPI_C_PP_MACROS_H_
+#define PPAPI_C_PP_MACROS_H_
+
+/**
+ * @file
+ * Defines the API ...
+ *
+ * @addtogroup PP
+ * @{
+ */
+
+/* Use PP_INLINE to tell the compiler to inline functions. The main purpose of
+ * inline functions in ppapi is to allow us to define convenience functions in
+ * the ppapi header files, without requiring clients or implementers to link a
+ * PPAPI C library. The "inline" keyword is not supported by pre-C99 C
+ * compilers (such as MS Visual Studio 2008 and older versions of GCC). MSVS
+ * supports __forceinline and GCC supports __inline__. Use of the static
+ * keyword ensures (in C) that the function is not compiled on its own, which
+ * could cause multiple definition errors.
+ * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
+ * http://gcc.gnu.org/onlinedocs/gcc/Inline.html
+ */
+#if defined(__cplusplus)
+/* The inline keyword is part of C++ and guarantees we won't get multiple
+ * definition errors.
+ */
+# define PP_INLINE inline
+#else
+# if defined(_MSC_VER)
+# define PP_INLINE static __forceinline
+# else
+# define PP_INLINE static __inline__
+# endif
+#endif
+
+/**
+ * @}
+ * End of addtogroup PP
+ */
+
+#endif // PPAPI_C_PP_MACROS_H_
+