Friday, March 22, 2013

Nerd Food: Interesting

Nerd Food: Interesting…

Some interesting stuff I bumped into these last couple of weeks.

C++

Other Programming Topics

Other

  • Charles Bradley: Soul of America: Here's a guy that just didn't know when to call it quits! Fame at the late age for Charles Bradley. Great voice.
  • UN The Movie: From the trailer, seems like a must watch - if a bit cringe-worthy. Documentary (or mockumentary…) in the vein of Michael Moore.
  • Brazil make it funky vol.2: Some cool tunes from our Brazilian brothers to keep us warm in this cold, cold spring.

Portugues

  • Depois do Adeus: Serie sobre os retornados das ex-colonias Lusofonas. Muito bem feita.

Date: 2013-03-22 20:29:56 GMT

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0

Thursday, March 21, 2013

Nerd Food: Installing Wt from Git

Nerd Food: Installing Wt from Git

On my copious free time I've been playing around with wt. I was always curious about a C++ based web framework, but with the recently added bootstrap support I just couldn't resist! Here are the steps to build it from source, into our PFH chroot.

First clone their mirror git repo:

mkdir wt
cd wt
git clone git://github.com/kdeforche/wt.git git

Then build it with a few additional parameters:

mkdir build
cd build
cmake -DRUNDIR=/usr/local/pfh/var/run/wt -DCONFIGDIR=/usr/local/pfh/etc/wt -DCMAKE_INSTALL_PREFIX=/usr/local/pfh -DBoost_NO_SYSTEM_PATHS=true -DBOOST_ROOT=/usr/local/pfh ../git
make -j4

Then install it:

make install

That's it! Now to configure apache to run the examples…

Date: 2013-03-21 07:21:50 GMT

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0

Tuesday, March 19, 2013

Nerd Food: Installing Latest Stable ODB

Nerd Food: Installing Latest Stable ODB

We recently started to add ODB support to Dogen in anger, so time came to update our build farm with the latest ODB. Previously we had hit a minor snag with C++ 11 but its all good with latest stable so that's what we're going with. In Debian, since we already had GCC 4.7, all we had to do was to su to root and install the plugin support:

apt-get install gcc-4.7-plugin-dev

Then it was as easy as the three magic steps (PFH is our local chroot):

mkdir build
cd build

wget http://www.codesynthesis.com/download/libcutl/1.7/libcutl-1.7.0.tar.gz
tar xaf libcutl-1.7.0.tar.gz
cd libcutl-1.7.0
./configure --prefix=/usr/local/pfh
make -j4
make install
cd ..

wget http://www.codesynthesis.com/download/odb/2.2/odb-2.2.1.tar.gz
tar xaf odb-2.2.1.tar.gz
cd odb-2.2.1
./configure --prefix=/usr/local/pfh
make -j4
make install
cd ..

Wit this you now have the ODB compiler ready to rock and roll. However, in order to be able to use it you need the supporting libraries. We only care about postgres and boost, so that's all we installed:

wget http://www.codesynthesis.com/download/odb/2.2/libodb-2.2.2.tar.gz
tar xaf libodb-2.2.2.tar.gz
cd libodb-2.2.2
./configure --prefix=/usr/local/pfh
make -j4
make install
cd ..

wget http://www.codesynthesis.com/download/odb/2.2/libodb-pgsql-2.2.0.tar.gz
tar xaf libodb-pgsql-2.2.0.tar.gz
cd libodb-pgsql-2.2.0
./configure --prefix=/usr/local/pfh
make -j4
make install
cd ..

wget http://www.codesynthesis.com/download/odb/2.2/libodb-boost-2.2.0.tar.gz
tar xaf libodb-boost-2.2.0.tar.gz
cd libodb-boost-2.2.0
./configure --prefix=/usr/local/pfh
make -j4
make install
cd ..

Things were not so easy for platforms other than Linux - as it always tends to be the case! This is because we built GCC previously without --enable-plugin so to be able to use the ODB compiler one would have to rebuild GCC. Luckily we don't really need to use the ODB compiler on all platforms - we just need to be able to build the code on all platforms - so we coped out and build only the supporting libraries on both OSX and Windows.

The tests pass just fine across the board, so basic ODB support is now in Dogen. This is of course the initial implementation so its still rather hacky, but at least it proves the concept. Next to clean up the tests and to generate the makefiles directly from Dogen.

Date: 2013-03-19 22:23:59 GMT

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0

Nerd Food: Installing Clang Unstable on Debian Testing

Nerd Food: Installing Clang Unstable on Debian Testing

We find clang an extremely useful development compiler. Not only does it pick up errors that GCC tends to ignore, but it also provides us with a completion mode in emacs that works surprisingly well.

So it was with great sadness that, for some inexplicable reason, our clang 3.1 build started failing after a dist-upgrade. After trying some obvious fixes such as doing a clean build and so on - to no avail - I decided to investigate clang 3.2, which has already hit experimental. Hey, worth a go right?! I've never been brave enough to start pinning packages from experimental into testing - always afraid to upgrade something by mistake. Clang tends to be really easy to install by hand so its not a problem to handle dependencies manually. This was almost the case with 3.2.

First start by removing all the old LLVM and clang packages you got lying around. They are actually side-by-side installable for the most part, but I strongly believe its a bad idea to have these versions lying around unless you have very good reason to do so. Last thing you need is to use the incorrect version of the compiler and start getting some weird errors.

Downloading the required packages is pretty straightforward:

mkdir clang-3.2
cd clang-3.2
wget http://ftp.us.debian.org/debian/pool/main/c/clang/libclang-dev_3.2-1~exp8_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/c/clang/libclang1_3.2-1~exp8_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/l/llvm-3.2/llvm-3.2-runtime_3.2-3_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/l/llvm-3.2/llvm-3.2_3.2-3_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/l/llvm-3.2/llvm-3.2-dev_3.2-3_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/l/llvm-3.2/libllvm3.2_3.2-3_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/c/clang/libclang-common-dev_3.2-1~exp8_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/c/clang/compiler-rt_3.2-1~exp8_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/c/clang/clang-3.2_3.2-1~exp8_amd64.deb

To install them su to root and dpkg them in the correct order:

dpkg -i libllvm3.2_3.2-3_amd64.deb
dpkg -i llvm-3.2-runtime_3.2-3_amd64.deb
dpkg -i llvm-3.2_3.2-3_amd64.deb
dpkg -i llvm-3.2-dev_3.2-3_amd64.deb
dpkg -i libclang1_3.2-1~exp8_amd64.deb
dpkg -i libclang-common-dev_3.2-1~exp8_amd64.deb
dpkg -i libclang-dev_3.2-1~exp8_amd64.deb
dpkg -i compiler-rt_3.2-1~exp8_amd64.deb
dpkg --force-depends -i clang-3.2_3.2-1~exp8_amd64.deb

You won't fail to notice the extremely worrying --force-depends at the very end. This is because to reasons unknown to me, clang now depends on libgcc-4.7-dev and libobjc-4.7-dev. These packages are not yet available in testing and last thing you need is to pull GCC straight of unstable. Assuming that any dependency between clang and GCC is probably either a mistake or something optional, I decided to force an install anyway and see how the compiler behaved. As it turns out the compiler worked just fine so I'm not loosing any sleep over the missing dependency just yet.

Unfortunately the hacks don't end there. We also found that libprofile_rt never quite gets found, so an additional hack is required (as root):

cd /usr/lib
rm libprofile_rt.a libprofile_rt.so
ln -s /usr/lib/llvm-3.2/lib/libprofile_rt.a
ln -s /usr/lib/llvm-3.2/lib/libprofile_rt.so

Interestingly, the warnings on clang 3.2 are even better than on 3.1 and so it picked up a number of unused member variables in your code, which we duly fixed. Hopefully it will all go green on tomorrow's clean builds.

Date: 2013-03-19 21:59:47 GMT

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0