Using the lib-common as a submodule
This page describes how to integrate the lib-common in a project using a submodule. This document currently covers only new projects using waf as a build system. Integrating the lib-common using an other build system and/or in an existing project is also possible but this scenario is not covered here.
Add the lib-common as a submodule
You can then add a submodule using the git submodule
command, for example:
$ git submodule add --name lib-common git@github.com:Intersec/lib-common
This creates a new folder in your repository containing the latest patch in the master branch of your lib-common repository. It is then recommended to follow the instructions to sucessfully build the lib-common.
If you plan on submitting pull requests or doing any contributions in the lib-common, feel free to fork it first in your own repository. |
Create a base build system
To include the waf-related build tools from lib-common, create a symlink of
the waftools
directory from the lib-common to your project root directory:
$ mkdir build $ cd build $ ln -s ../lib-common/build/waftools
Then create a wscript
file that will import the lib-common waf
utilities:
import os
out = '.build-waf-%s' % os.environ.get('P', 'default') (1)
def options(ctx):
ctx.recurse('lib-common')
def configure(ctx):
ctx.recurse('lib-common')
def build(ctx):
ctx.recurse('lib-common') (2)
1 | Set a separate build directory per compilation profile. |
2 | At first, simply reuse the waf tools provided by the lib-common |
You can test that waf configure
and waf build
work as expected:
$ waf configure build
This should display compilation outputs and display a last line similar to:
'build' finished successfully (1m21.628s)
Create a first hello world program
Create a new file hello-world.c in your project root directory:
#include <lib-common/core.h>
int main(int argc, char **argv)
{
e_info("Hello world!");
return 0;
}
Add a new target in your wscript by replacing the build function with:
def build(ctx):
ctx.recurse('lib-common')
ctx.program(target='hello-world', source='hello-world.c',
use=['libcommon'])
You can now build your new program:
$ waf --target hello-world Waf: Entering directory `/home/XXX/YYY/.build-waf-default' Waf: Selected profile: default [ 8/330] Creating .build-waf-default/lib-common/core-version.c [328/330] Checking hello-world.c [329/330] Compiling hello-world.c [330/330] Linking hello-world Waf: Leaving directory `/home/XXX/YYY/.build-waf-default' 'build' finished successfully (0.470s)
You can now verify your hello world program!
$ ./hello-world hello-world[13842]: Hello world!