Opened 7 years ago
Closed 7 years ago
#55098 closed defect (fixed)
libcdr-0.1 @0.1.4_0 does not build on 10.5.8 PPC
Reported by: | udbraumann | Owned by: | dbevans (David B. Evans) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | leopard powerpc | Cc: | |
Port: | libcdr-0.1 |
Description
While trying to upgrade libcdr-0.1
from 0.1.3_1
to 0.1.4_0
I noticed that (a) neither one of the preferred compilers (gcc-4.2
, apple-gcc-4.2
, gcc-4.0
, macports-clang-3.4
, macports-clang-3.3
) will do (due to missing C11 standard or because of missing basic functionality under PPC), and (b) none of the macports-gcc-*
(have tried all from 4.8 to 7) work due to some unaccepted syntax inside /opt/local/include/boost/fusion/view/transform_view/detail/value_of_impl.hpp
. I issued
$sudo port upgrade libcdr-0.1 configure.compiler=macports-gcc-4.8
and have received dozens of these complaints:
... :info:build from CDRParser.cpp:22: :info:build /opt/local/include/boost/fusion/view/transform_view/detail/value_of_impl.hpp: In instantiation of 'struct boost::fusion::extension::value_of_impl<boost::fusion::transform_view_iterator_tag>::apply<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >': :info:build /opt/local/include/boost/fusion/iterator/value_of.hpp:51:16: required from 'struct boost::fusion::result_of::value_of<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >' :info:build /opt/local/include/boost/mpl/aux_/has_type.hpp:20:1: required by substitution of 'template<class U> static char (& boost::mpl::aux::has_type<T, fallback_>::gcc_3_2_wknd::test(const volatile boost::mpl::aux::type_wrapper<U>*, boost::mpl::aux::type_wrapper<typename U::type>*))[2] [with U = U; T = boost::fusion::result_of::value_of<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >; fallback_ = mpl_::bool_<true>] [with U = boost::fusion::result_of::value_of<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >]' :info:build /opt/local/include/boost/mpl/aux_/has_type.hpp:20:1: required from 'const bool boost::mpl::aux::has_type<boost::fusion::result_of::value_of<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >, mpl_::bool_<true> >::value' :info:build /opt/local/include/boost/mpl/aux_/has_type.hpp:20:1: required from 'struct boost::mpl::aux::has_type<boost::fusion::result_of::value_of<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >, mpl_::bool_<true> >' :info:build /opt/local/include/boost/mpl/aux_/preprocessed/gcc/quote.hpp:32:36: required from 'struct boost::mpl::quote1<boost::fusion::result_of::value_of>::apply<boost::fusion::transform_view_iterator<boost::fusion::cons_iterator<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute> >' :info:build /opt/local/include/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp:36:8: [ skipping 31 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ] :info:build /opt/local/include/boost/spirit/home/qi/operator/sequence_base.hpp:54:13: required from 'struct boost::spirit::qi::sequence_base<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >, boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >::attribute<const boost::spirit::unused_type, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > > >' :info:build /opt/local/include/boost/spirit/home/qi/operator/sequence_base.hpp:78:66: required from 'bool boost::spirit::qi::sequence_base<Derived, Elements>::parse_impl(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&, mpl_::false_) const [with Iterator = std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; Context = const boost::spirit::unused_type; Skipper = boost::spirit::unused_type; Attribute = boost::fusion::vector<short unsigned int&, std::basic_string<char>&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>; Derived = boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >; Elements = boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >; mpl_::false_ = mpl_::bool_<false>]' :info:build /opt/local/include/boost/spirit/home/qi/operator/sequence_base.hpp:124:50: required from 'bool boost::spirit::qi::sequence_base<Derived, Elements>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; Context = const boost::spirit::unused_type; Skipper = boost::spirit::unused_type; Attribute = boost::fusion::vector<short unsigned int&, std::basic_string<char>&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>; Derived = boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> > >; Elements = boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >]' :info:build /opt/local/include/boost/spirit/home/qi/parse_attr.hpp:66:82: required from 'bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::spirit::qi::symbols<char, short unsigned int>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::unary_plus, boost::proto::argsns_::list1<const boost::spirit::terminal<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >&>, 1l>&>, 2l>; A0 = short unsigned int; A1 = std::basic_string<char>]' :info:build /opt/local/include/boost/spirit/home/qi/parse_attr.hpp:79:74: required from 'bool boost::spirit::qi::parse(const Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::spirit::qi::symbols<char, short unsigned int>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::unary_plus, boost::proto::argsns_::list1<const boost::spirit::terminal<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >&>, 1l>&>, 2l>; A0 = short unsigned int; A1 = std::basic_string<char>]' :info:build CDRParser.cpp:93:89: required from here :info:build /opt/local/include/boost/fusion/view/transform_view/detail/value_of_impl.hpp:37:79: error: no type named 'type' in 'struct boost::mpl::apply<boost::fusion::detail::apply_transform_result<boost::spirit::traits::build_attribute_sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, boost::fusion::cons<boost::spirit::qi::plus<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> > >, boost::fusion::nil_> >, const boost::spirit::unused_type, boost::spirit::traits::sequence_attribute_transform, std::reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::qi::domain>::element_attribute>, boost::spirit::qi::reference<boost::spirit::qi::symbols<char, short unsigned int> >, mpl_::na, mpl_::na, mpl_::na, mpl_::na>' :info:build typedef typename mpl::apply<transform_type, value_type>::type type; :info:build ...
I guess, macports-clang-3.3
or above (or clang from XCode) will accept this. Is there a switch for macports-gcc-*
make this syntax being accepted?
Attachments (2)
Change History (8)
Changed 7 years ago by udbraumann
Attachment: | main.log.gz added |
---|
comment:1 Changed 7 years ago by mf2k (Frank Schima)
Cc: | devans@… removed |
---|---|
Keywords: | powerpc added; PPC removed |
Owner: | set to dbevans |
Status: | new → assigned |
comment:2 Changed 7 years ago by kencu (Ken)
comment:3 Changed 7 years ago by kencu (Ken)
OK. There was some specific stuff in this Portfile that looks like it was a fix for clang. The attached patch to the current Portfile will let you build it on PPC. Not sure if this will make it into the main MacPorts repo though - have to see if it can be made neat and tidy enough.
$ port -v installed libcdr-0.1 The following ports are currently installed: libcdr-0.1 @0.1.4_0 (active) platform='darwin 9' archs='ppc' date='2017-10-15T17:09:30-0700'
Changed 7 years ago by kencu (Ken)
Attachment: | patch-libcdr0.1-Portfile-PPC.diff added |
---|
The portfile patch allows build on PPC Leopard (at least).
comment:4 Changed 7 years ago by kencu (Ken)
The more I look at this, the more I think this might be the proper fix for the Portfile for all systems. I'll run some builds on 10.6 to 10.8 and see what happens on those systems.
comment:6 Changed 7 years ago by kencu (Ken)
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
when building newer software on PPC (or any system) with newer versions of gcc, I find the build can be quite sensitive to exact standard settings.
g++11
is not the same asc++11
, and then you havegcc14
,c++14
, and then the17
series. Rather than trial and error, googling will very often lead to solutions others have found.Also, with boost on PPC in particular, I find adding
configure.args-append -fvisibility-hidden
is often needed. I read about why this was needed a few months ago, but I forget just now what the details were.Finally, you're building in 32bits on PPC, and there can be 32bit / 64bit things to deal with sometimes.
So there are some ideas to ponder.