Petr Mánek created THRIFT-5785:
----------------------------------
Summary: TTransportException.h includes
'boost/numeric/conversion/cast.hpp' without target depending on Boost
Key: THRIFT-5785
URL: https://issues.apache.org/jira/browse/THRIFT-5785
Project: Thrift
Issue Type: Bug
Affects Versions: 0.20.0
Environment: * macOS 14 (Sonoma)
* Host is x86_64, cross-compiling universal binaries for x86_64+aarch64
* CMake 3.29, dependencies managed through conventional use of find_package()
* AppleClang 15.0.0.15000100
* Compiling with -std=gnu++20
* Boost 1.81 (from MacPorts)
* Apache Thrift 0.20 (from MacPorts, recently upgraded)
Reporter: Petr Mánek
Hello, ever since upgrading from version 0.19 to 0.20, I am seeing a new error
when compiling my Thrift-based software:
```
In file included from /redacted/RemoteControl.h:10:
In file included from /opt/local/lib/../include/thrift/TDispatchProcessor.h:22:
In file included from /opt/local/lib/../include/thrift/TProcessor.h:24:
In file included from /opt/local/lib/../include/thrift/protocol/TProtocol.h:46:
In file included from
/opt/local/lib/../include/thrift/transport/TTransport.h:23:
/opt/local/lib/../include/thrift/Thrift.h:54:19: warning:
'iterator<std::forward_iterator_tag, std::pair<int, const char *>>' is
deprecated [-Wdeprecated-declarations]
: public std::iterator<std::forward_iterator_tag, std::pair<int, const
char*> > {
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__iterator/iterator.h:24:29:
note: 'iterator<std::forward_iterator_tag, std::pair<int, const char *>>' has
been explicitly marked deprecated here
struct _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 iterator
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__config:862:41:
note: expanded from macro '_LIBCPP_DEPRECATED_IN_CXX17'
# define _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_DEPRECATED
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__config:835:49:
note: expanded from macro '_LIBCPP_DEPRECATED'
# define _LIBCPP_DEPRECATED __attribute__((deprecated))
^
In file included from
/Users/admin/builds/dUGYoT7P/0/acquisition-framework/tracklab/build/plugins/microdaq/thrift/RemoteControl.cpp:7:
In file included from
/Users/admin/builds/dUGYoT7P/0/acquisition-framework/tracklab/build/plugins/microdaq/thrift/RemoteControl.h:10:
In file included from /opt/local/lib/../include/thrift/TDispatchProcessor.h:22:
In file included from /opt/local/lib/../include/thrift/TProcessor.h:24:
In file included from /opt/local/lib/../include/thrift/protocol/TProtocol.h:46:
In file included from
/opt/local/lib/../include/thrift/transport/TTransport.h:25:
/opt/local/lib/../include/thrift/transport/TTransportException.h:23:10: fatal
error: 'boost/numeric/conversion/cast.hpp' file not found
#include <boost/numeric/conversion/cast.hpp>
```
I have confirmed that 'cast.hpp' is correctly installed in my system, but for
some reason CMake does not add its include path to compiler invocation, so the
file is not seen during compilation. Furthermore, based on synthesized compiler
flags it seems that Thrift's CMake package does not declare public dependency
on boost::numeric, but nonetheless includes it in public headers. This may be
related to THRIFT-5660.
For now I mitigate this issue by making my CMake target explicitly depend on
Apache Thrift as well as boost::numeric. However, since I do not directly use
Boost whereas Thrift does, I should not have to do that. Instead, it seems much
more cleaner to me if Thrift publicly depended on boost::numeric or removed the
offending #include directive from its public headers.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)