Build from source

Prerequesites

 muroa depends on some external libraries. Install their dev packages first:

  • libxdiff
  • boost-asio
  • boost-filesystem
  • boost-system
  • boost-regex
  • boost-property-tree
  • boost-program-options
  • boost-date-time
  • libavcodec
  • libavformat
  • libavutil
  • libexpat
  • libavahiclient
  • libavahi-common
  • libQt4

 

Get the source

clone from github, eihter via git protocol or http:

git clone git://github.com/martinrunge/muroa.git
a new folder named "muroa" will be created. Muroa's components are located inside, each in its subfolder.

Build from source

create a build folder for each architecute:

mkdir build_86
cd build_x86
cmake ../muroa
make
make install
You may not want to buld all components of muroa for all architectures. E.g. build only the playback daemon for the ARM architecture, because you intend to run the server on an x86 host.
mkdir build_arm
cd build_arm
cmake -Dmuroad=yes -Dmsessiond=no -Dmqtclient=no ../muroa
make
make install

Known Issues

Compile error due to a bug in boost-property-tree

There is a known bug in the library boost-property-tree which causes compilation failure with C++11 settings used in muroa. (-> https://svn.boost.org/trac/boost/ticket/6785) This issue is fixed in boost 1.49.0 and newer, but many distributions still install a default version that is affected by this bug:

...[ 11%] Building CXX object CMakeFiles/muroadaemon.dir/CSettings.cpp.oIn file included from /usr/include/boost/property_tree/json_parser.hpp:14:0,                 from /home/martin/devel/muroa/muroa/libmuroadaemon/CSettings.h:31,                 from /home/martin/devel/muroa/muroa/libmuroadaemon/CSettings.cpp:24:/usr/include/boost/property_tree/detail/json_parser_read.hpp: In instantiation of ‘void boost::property_tree::json_parser::context<Ptree>::a_literal_val::operator()(boost::property_tree::json_parser::context<Ptree>::It, boost::property_tree::json_parser::context<Ptree>::It) const [with Ptree = boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >; boost::property_tree::json_parser::context<Ptree>::It = __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >]’:/usr/include/boost/spirit/home/classic/core/scanner/scanner.hpp:148:13:   required from ‘static void boost::spirit::classic::attributed_action_policy<boost::spirit::classic::nil_t>::call(const ActorT&, boost::spirit::classic::nil_t, const IteratorT&, const IteratorT&) [with ActorT = boost::property_tree::json_parser::context<boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >::a_literal_val; IteratorT = __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >]’/usr/include/boost/spirit/home/classic/core/scanner/scanner.hpp:163:13:   required from ‘void boost::spirit::classic::action_policy::do_action(const ActorT&, AttrT&, const IteratorT&, const IteratorT&) const [with ActorT = boost::property_tree::json_parser::context<boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >::a_literal_val; AttrT = boost::spirit::classic::nil_t; IteratorT = __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >]’...

Until there is a better solution, this can be easyly fixed in the file /usr/include/boost/property_tree/detail/json_parser_read.hpp

--- /usr/include/boost/property_tree/detail/json_parser_read.hpp        2013-02-11 21:22:59.000000000 +0100
+++ /home/martin/tmp/json_parser_read.hpp 2013-05-26 19:49:09.231619512 +0200
@@ -102,7 +102,8 @@
void operator()(It b, It e) const
{
BOOST_ASSERT(c.stack.size() >= 1);
- c.stack.back()->push_back(std::make_pair(c.name, Str(b, e)));
+ c.stack.back()->push_back(std::make_pair(c.name,
+ Ptree(Str(b, e))));
c.name.clear();
c.string.clear();
}
or by linking against a private copy of boost instead the system wide version.