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.gita 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_86You 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.
cd build_x86
cmake ../muroa
make
make install
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 +0100or by linking against a private copy of boost instead the system wide version.
+++ /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();
}