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.1from 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)

main.log.gz (40.5 KB) - added by udbraumann 7 years ago.
patch-libcdr0.1-Portfile-PPC.diff (1.9 KB) - added by kencu (Ken) 7 years ago.
The portfile patch allows build on PPC Leopard (at least).

Download all attachments as: .zip

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: newassigned

comment:2 Changed 7 years ago by kencu (Ken)

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 as c++11, and then you have gcc14, c++14, and then the 17 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.

Last edited 7 years ago by kencu (Ken) (previous) (diff)

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)

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: assignedclosed

In 35bca984aa7f64b05698af9900a1b739afcc5cdc/macports-ports:

libcdr-0.1: add cxx11 1.1 PG

remove other c++11 fixes, no longer needed
closes: #55098

Note: See TracTickets for help on using tickets.