disable library versioning with qmake

October 20, 2010

For another project I am working on we use Qt as a portability layer and hence also qmake for our build tool. We are also utilizing some other open-source libraries such as lua and bullet for which we also use qmake. For lua our qmake project file looks (similar) like this:

TEMPLATE = lib
CONFIG += dll
TARGET = lua
DESTDIR = ../../../bin/
 
INCLUDEPATH += ./
 
SOURCES = print.c \
    lzio.c \
    lvm.c \
    lundump.c \
...

and the funny thing is that it creates in the destination folder three symbolic links with names liblua.so, liblua.so.1, and liblua.so.1.0 that all point to the file liblua.so.1.0.0. This is the case for every library, eg. libname would result in the links libname.so, libname.so.1, and libname.so.1.0 and the actual library would be libname.so.1.0.0.

This all is due to the versioning that qmake does automatically for the libraries (e.g. projects with CONFIG += dll).

Now to disable it, you have to add the keyword plugin to the CONFIG specification in your qmake project file:

TEMPLATE = lib
CONFIG += dll plugin
...

After doing so, all the links disappear and you end up with a single liblua.so (or libname.so) as one might want to have it in the first place.

Now that is done … back to work!

Tags

list of changed files in mercurial logs

August 16, 2010

For roughly 16 months I have now been using the distributed version control system (DVCS) mercurial. Before that I was using mostly subversion which was a great companion before I got to know mercurial and started to understand the idea behind a DVCS (for a nice introduction see http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/, or Linus Torvalds tech talk on git). The switch itself was very easy and I really do not want to go back to a centralized version control system, unless I have to.

When issuing the command hg log one gets some basic information about the changes that were made:

changeset:   15:299410f8be85
user:        martin
date:        Thu Jun 10 23:30:29 2010 +0200
summary:     started to work on the highscore
 
changeset:   14:c99d4f7cb0c2
user:        martin
date:        Sun Jun 06 01:35:38 2010 +0200
summary:     smaller fixes in the documentation
 
[...]

However sometimes it is quite helpful to know which files were changed during a commit (for example if you want to know which files might be the culprit for failing tests that used to pass). After a long search I found the simple solution: hg log -v. This produces the following output:

changeset:   15:299410f8be85
user:        martin
date:        Thu Jun 10 23:30:29 2010 +0200
files:       asteroids/AsteroidsEnums.h asteroids/AsteroidsEvents.h asteroids/MenuOverlay.h asteroids/Model.cc asteroids/Model.h asteroids/UserInterface.cc asteroids/UserInterface.h asteroids/View.cc engine/Engine.h
description:
started to work on the highscore
 
changeset:   14:c99d4f7cb0c2
user:        martin
date:        Sun Jun 06 01:35:38 2010 +0200
files:       Doxyfile asteroids/AsteroidsEnums.h
description:
smaller fixes in the documentation
 
[...]

Yay!