Tracking

This module module wraps C and CXX linkers to embed RSC keywords string in your binaries and libraries. RSC keywords ran be later read using the ident command from rcs Ubuntu package.

Information included for libraries :

$date
compile date of binary
$time
compile time of binary
$revno
current git or bzr revision if any

Information included for binaries :

$date
compile date of binary
$time
compile time of binary
$name
target name of binary
$user
shell user used for compilation
$pwd
compile build directory
$revno
current git or bzr revision if any
$archive
[lib_name] (data) compile date of lib_name [lib_name] (time) compile time of lib_name [lib_name] (revno) git or bzr revno of lib_name if any

Functions

enable_tracking()

You must call this function on top level CMakeLists.txt after loading the Tracking module to enable tracking on your libraries and binaries.

Example

Given a binary tAppender compiled with static libraries libxtdcore_s and libxtdtests_s :

$ ident tAppender

$date: 01-01-2017 $
$time: 15:18:03 $
$name: tAppender $
$user: psyco $
$host: psyco-laptop-tux $
$pwd: /home/psyco/dev/xtdcpp/.release/core $
$revno: 9422c4460c24c7e0289f1d4ff0525e14ccabaedb $
$archive: [libxtdcore_s] (time) 15:17:33 $
$archive: [libxtdcore_s] (date) 01-01-2017 $
$archive: [libxtdcore_s] (revno) 9422c4460c24c7e0289f1d4ff0525e14ccabaedb $
$archive: [libxtdtests_s] (time) 15:14:06 $
$archive: [libxtdtests_s] (date) 01-01-2017 $
$archive: [libxtdtests_s] (revno) 9422c4460c24c7e0289f1d4ff0525e14ccabaedb $

How is works

Tracking module wraps C and C++ default linker and archive commands with link_wrapper and ar_wrapper scripts.

ar_wrapper silently adds a .version file when creating archives. Archives are sort of tars of object files, adding a file to the archive is not harmful.

link_wrapper does 3 things. First it searches for .version files on linked static archives and adds their content to the list. After gathering all possible information, it silently adds a source file to default link command. This source file declares char rscid[] = __RCSID__. Finally, the wrapper adds a -D__RCSID__= to linker command that defines the value of rcs keyword.