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!
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 [...]