• Show log

    Commit

  • Hash : a390a846
    Author : Patrick Steinhardt
    Date : 2017-07-01T13:06:00

    cmake: move defines into "features.h" header
    
    In a future commit, we will split out the build instructions for our
    library directory and move them into a subdirectory. One of the benefits
    is fixing scoping issues, where e.g. defines do not leak to build
    targets where they do not belong to. But unfortunately, this does also
    pose the problem of how to propagate some defines which are required by
    both the library and the test suite.
    
    One way would be to create another variable keeping track of all added
    defines and declare it inside of the parent scope. While this is the
    most obvious and simplest way of going ahead, it is kind of unfortunate.
    The main reason to not use this is that these defines become implicit
    dependencies between the build targets. By simply observing a define
    inside of the CMakeLists.txt file, one cannot reason whether this define
    is only required by the current target or whether it is required by
    different targets, as well.
    
    Another approach would be to use an internal header file keeping track
    of all defines shared between targets. While configuring the library, we
    will set various variables and let CMake configure the file, adding or
    removing defines based on what has been configured. Like this, one can
    easily keep track of the current environment by simply inspecting the
    header file. Furthermore, these dependencies are becoming clear inside
    the CMakeLists.txt, as instead of simply adding a define, we now call
    e.g. `SET(GIT_THREADSAFE 1)`.
    
    Having this header file though requires us to make sure it is always
    included before any "#ifdef"-preprocessor checks are executed. As we
    have already refactored code to always include the "common.h" header
    file before any statement inside of a file, this becomes easy: just make
    sure "common.h" includes the new "features.h" header file first.