1. 12 Oct, 2017 2 commits
  2. 09 Oct, 2017 9 commits
  3. 07 Oct, 2017 7 commits
  4. 06 Oct, 2017 9 commits
  5. 04 Oct, 2017 1 commit
  6. 28 Sep, 2017 2 commits
  7. 27 Sep, 2017 3 commits
  8. 22 Sep, 2017 1 commit
    • cmake: use static dependencies when building static libgit2 · 49551254
      CMake allows us to build a static library by simply setting the variable
      `BUILD_SHARED_LIBS` to `OFF`. While this causes us to create a static
      libgit2.a archive, it will not automatically cause CMake to only locate
      static archives when searching for dependencies. This does no harm in
      case of building our libgit2.a, as we do not want to include all
      required dependencies in the resulting archive anyway. Instead, we ask
      users of a static libgit2.a to link against the required set of static
      archives themselves, typically aided by the libgit2.pc file.
      
      Where it does cause harm, though, is when we build the libgit2_clar test
      suite. CMake has happily populated our LIBGIT2_LIBS variable with shared
      libraries, and so linking the final libgit2_clar test does not do the
      right thing. It will simply ignore those shared libraries, we end up
      with a test suite with undefined symbols.
      
      To fix the issue, we can instruct CMake to only locate libraries with a
      certain suffix. As static libraries are typically identifiable by their
      ".a" suffix on Unix-based systems, we can instruct CMake to only locate
      libraries with this suffix to restrict it from finding any shared
      libraries. This fixes building a static libgit2_clar test suite.
      
      Note that this ignores the problem on Windows. The problem here is that
      we cannot even distinguish static and dynamic libraries by only
      inspecting their suffix. So we just ignore the problem on Windows, for
      now.
      Patrick Steinhardt committed
  9. 20 Sep, 2017 6 commits
    • cmake: fix static linking for bundled deps · 8c19969a
      Our bundled deps are being built as simple static libraries which are
      then linked into the libgit2 library via `TARGET_LINK_LIBRARIES`. While
      this works for a dynamically built libgit2 library, using this function
      to link two static libraries does not have the expected outcome of
      merging those static libraries into one big library. This leads to
      symbols of our bundled deps being undefined in the resulting libgit2
      archive.
      
      As we have bumped our minimum CMake version to 2.8.11, we can now easily
      make use of object libraries for our bundled dependencies. So build
      instructions are still self-contained inside of the dependency
      directories and the resulting object libraries can just be added to the
      LIBGIT2_OBJECTS list, which will cause them to be linked into the final
      resulting static library. This fixes the issue of undefined symbols.
      Patrick Steinhardt committed
    • cmake: unify version check for target include directories · d8d2f21e
      There are two locations where we check whether CMake supports
      `TARGET_INCLUDE_DIRECTORIES`. While the first one uses `VERSION_LESS
      2.8.12`, the second one uses `VERSION_GREATER 2.8.11`, which are
      obviously equivalent to each other. It'd still be easier to grep for
      specific CMake versions being required for some features if both used
      the same conditional mentioning the actual target version required. So
      this commit refactors these conditions to make them equal.
      Patrick Steinhardt committed
    • cmake: always use object library for git2internal · 172a585f
      As we have bumped our minimum CMake version to 2.8.11, we can now
      unconditionally make use of object libraries. So remove the version
      check for the git2internal object library and always use it.
      Patrick Steinhardt committed
    • cmake: bump minimum version to 2.8.11 · cf9f3452
      Our current minimum CMake version is 2.8. This version does not yet
      allow us to use object libraries (introduced in 2.8.8) and target
      include directories (introduced in 2.8.12), which are both mechanisms we
      want to use to fix some specific problems. We previously were not able
      to bump our CMake version to a version supporting object libraries
      because Ubuntu Precise only had CMake version 2.8.7 in its repositories.
      But due to Precise being end of life now, we shouldn't need to honor it
      anymore. A current survey of some of the more conservative distributions
      brings up the following versions of CMake:
      
      - CentOS 5: 2.6.2
      - CentOS 6: 2.8.12.2
      - Debian 7: 2.8.11
      - Fedora 23: 3.3.2
      - OpenSUSE 13.2: 3.0.2
      - Ubuntu Precise: 2.8.7
      - Ubuntu Trusty: 2.8.12
      
      The only two outliers here are CentOS 5 and Ubuntu Precise. CentOS is
      currently unsupported due to our minimum version being 2.8 and Ubuntu
      Precise is not maintained anymore. So the next smallest version
      supported by all major distributions is 2.8.11. While this does not yet
      support target include directories, it at least enables us to use object
      libraries. So this becomes our new minimum required version.
      Patrick Steinhardt committed
    • cmake: distinguish libgit2 objects and sources · 1d9dd882
      Distinguish variables keeping track of our internal libgit2 sources and
      the final objects which shall be linked into the library. This will ease
      the transition to use object libraries for our bundled dependencies
      instead of linking them in.
      Patrick Steinhardt committed
    • travis: drop support for Ubuntu Precise · c17c3f8a
      Ubuntu Precise is end of life since April 2017. At that point in time,
      Precise was still the main distro on which Travis CI built upon, with
      the Trusty-based images still being in a beta state. But since June
      21st, Trusty has officially moved out of beta and is now the default
      image for all new builds. Right now, we build on both old and new images
      to assure we support both.
      
      Unfortunately, this leaves us with the highest minimum version for CMake
      being 2.8.7, as Precise has no greater version in its repositories. And
      because of this limitation, we cannot actually use object libraries in
      our build instructions. But considering Precise is end of life and
      Trusty is now the new default for Travis, we can and should drop support
      for this old and unmaintained distribution. And so we do.
      Patrick Steinhardt committed