• Show log

    Commit

  • Hash : c5cd71b2
    Author : Josh Junon
    Date : 2021-12-23T18:23:34

    cmake: use PROJECT_SOURCE_DIR of CMAKE_SOURCE_DIR
    
    Also applies to *_BINARY_DIR.
    
    This effectively reverts 84083dcc8bd41332ccac9d7b537f3e254d79011c,
    which broke all users of libgit2 that use it as a CMake subdirectory
    (via `add_subdirectory()`). This is because CMAKE_SOURCE_DIR refers
    to the root-most CMake directory, which in the case of
    `add_subdirectory()` is a parent project to libgit2 and thus the paths
    don't make any sense to the configuration files. Corollary,
    CMAKE_SOURCE_DIR only makes sense if the CMake project is always the
    root project - which can rarely be guaranteed.
    
    In all honesty, CMake should deprecate and eventually remove
    CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR. It's been the source of headaches
    and confusion for years, they're rarely useful over
    CMAKE_CURRENT_(SOURCE|BINARY)_DIR or PROJECT_(SOURCE|BINARY)_DIR,
    and they cause a lot of confusing configuration and source
    code layouts to boot.
    
    Any time they are used, they break `add_subdirectory()` almost 100% of
    the time, cause confusing error messages, and hide subtle bugs.
    

  • README.md

  • Writing Clar tests for libgit2

    For information on the Clar testing framework and a detailed introduction please visit:

    https://github.com/vmg/clar

    • Write your modules and tests. Use good, meaningful names.

    • Make sure you actually build the tests by setting:

        cmake -DBUILD_TESTS=ON build/
    • Test:

        ./build/libgit2_tests
    • Make sure everything is fine.

    • Send your pull request. That’s it.

    Memory leak checks

    These are automatically run as part of CI, but if you want to check locally:

    Linux

    Uses valgrind:

    $ cmake -DBUILD_TESTS=ON -DVALGRIND=ON ..
    $ cmake --build .
    $ valgrind --leak-check=full --show-reachable=yes --num-callers=50 --suppressions=../libgit2_tests.supp \
      ./libgit2_tests

    macOS

    Uses leaks, which requires XCode installed:

    $ MallocStackLogging=1 MallocScribble=1 MallocLogFile=/dev/null CLAR_AT_EXIT="leaks -quiet \$PPID" \
      ./libgit2_tests