ports/180565: textproc/aspell compilation error with Clang
dt71 at gmx.com
dt71 at gmx.com
Sun Oct 13 19:00:01 UTC 2013
The following reply was made to PR ports/180565; it has been noted by GNATS.
From: dt71 at gmx.com
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: ports/180565: textproc/aspell compilation error with Clang
Date: Sun, 13 Oct 2013 20:52:53 +0200
This is a multi-part message in MIME format.
--------------000209060005000400040704
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
When compiling the C++ parts, essentially the following is given to the compiler:
// in aspell.h
#ifdef __cplusplus__
extern "C" {
#endif
extern const struct AspellErrorInfo * const aerror_other; // (1)
#ifdef __cplusplus__
}
#endif
// in errors.hpp
namespace acommon {
struct ErrorInfo;
extern "C" const ErrorInfo * const aerror_other;
}
On the C side, the aerror_other symbol obviously must have a C type, it is ``const struct AspellErrorInfo *const''. There is a hack to give this symbol a C++ish type on the C++ side: ``const acommon::ErrorInfo *const''; the types are supposedly compatible. Unfortunately, Clang sees the type clash, because both are ``extern "C"''d.
An instant fix would be to not define the C version of aerror_other when compiling C++ code, by placing a __cplusplus guard around the line marked as ``(1)'' above.
--------------000209060005000400040704
Content-Type: text/x-patch;
name="aspell.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="aspell.patch"
--- interfaces/cc/aspell.h 2013-10-13 20:29:33.000000000 +0200
+++ interfaces/cc/aspell.h 2013-10-13 20:30:01.000000000 +0200
@@ -237,6 +237,7 @@
/******************************** errors ********************************/
+#ifndef __cplusplus
extern const struct AspellErrorInfo * const aerror_other;
extern const struct AspellErrorInfo * const aerror_operation_not_supported;
extern const struct AspellErrorInfo * const aerror_cant_copy;
@@ -322,6 +323,7 @@
extern const struct AspellErrorInfo * const aerror_bad_magic;
extern const struct AspellErrorInfo * const aerror_expression;
extern const struct AspellErrorInfo * const aerror_invalid_expression;
+#endif
/******************************* speller *******************************/
--------------000209060005000400040704--
More information about the freebsd-office
mailing list