I've been using Alljoyn recently, but only the sources are distributed, and it's fairly difficult to compile programs against it. The recommended way to handle this seems to be to manually copy various files into your root filesystem, but I prefer not to do that for obvious reasons. Instead, I'm going to build Alljoyn packages, using fpm. My target system is Fedora 23, so I'll be building RPM's, but the advantage of fpm is that it can build any kind of package. If you're on Ubuntu or Debian, you can use the exact same commands and just change the -t argument from rpm to deb (and probably change any -devel suffixes to -dev for style reasons). If you need more Alljoyn packages, you can do similar processes and add -d alljoyn or -d alljoyn-devel to indicate dependencies.


To install fpm on Fedora 23:

sudo dnf install rubygems ruby-devel
gem install fpm

AllJoyn Daemon and Libraries

First we need a few dependencies. I'm probably missing some since I'm not willing to build a VM to test this at the moment:

sudo dnf install git scons openssl-devel gcc-c++


Now get the sources for Alljoyn and build them.

export AJ_ROOT=`pwd`/alljoyn
mkdir -p $AJ_ROOT/core
cd $AJ_ROOT/core
git clone https://git.allseenalliance.org/gerrit/core/alljoyn.git
cd alljoyn
git checkout v14.12

I'm going to do a release build, since debug builds are massive, and I'm doing a 64-bit build, because this is 2015:

cd $AJ_ROOT/core/alljoyn
scons BINDINGS=cpp OS=linux CPU=x86_64 VARIANT=release BUILD_SERVICES_SAMPLES=off POLICYDB=on WS=off


Now everything is nicely built in build/$OS/$CPU/$VARIANT/dist/cpp/, except the inc folder needs to be named include, and (on a 64-bit system), lib needs to be lib64. Bafflingly, fpm doesn't have a good way to rename directories (the = syntax doesn't do what we want here).

cd build/linux/x86_64/release/dist/cpp/
cp -r inc include
cp -r lib lib64
cd ../../../../../..
fpm -a native -t rpm -s dir -n alljoyn -v 14.12 --prefix /usr -C build/linux/x86_64/release/dist/cpp/ bin/alljoyn-daemon lib64 include

This tells it: Build an RPM from a directory, name the result "alljoyn", version 14.12. The package should put everything in /usr. Change directory to build/linux/x86_64/release/dist/cpp/, grab bin/alljoyn-daemon, and the entire lib64 and include directories.

If we wanted to be fancy, we could instead build alljoyn containing everything in lib64, alljoyn-devel containing everything in include, and alljoyn-daemon containing just bin/alljoyn-daemon with a dependency on alljoyn:

fpm -a native -t rpm -s dir -n alljoyn -v 14.12 --prefix /usr -C build/linux/x86_64/release/dist/cpp/ lib64
fpm -t rpm -s dir -n alljoyn-devel -d alljoyn -v 14.12 --prefix /usr -C build/linux/x86_64/release/dist/cpp/ include
fpm -a native -t rpm -s dir -n alljoyn-daemon -d alljoyn -v 14.12 --prefix /usr -C build/linux/x86_64/release/dist/cpp/ bin/alljoyn-daemon

And now I can just install with dnf:

sudo dnf install alljoyn*.rpm