Subject: [PATCH v2 0/5] Fix `cargo package` for libgit-sys

From: Josh Steadmon <[email-masked]>
Date: Fri, 21 Mar 2025 15:14:06 -0700

Fix `cargo package` for the libgit-sys crate by providing a pristine
copy of the Git source tree at package time, and by building object
files and other generated files outside of this tree. While we're at it,
improve parallel builds by plumbing Cargo's make flags to the make
command invoked in our build.rs script.

We also fix a few problems that would prevent us from publishing the
libgit-sys crate: we add a license and description to Cargo.toml, and we
exclude unnecessary files from the packaged source, to stay below
crates.io's 10 MB limit.

`cargo package` for the libgit-rs crate is still broken for now, because
it will require publishing the libgit-sys crate first.

Changes from V1:
* Reworked patch #2 to build outside of the source tree rather than
  running `make clean` after the build.
* Simplified patch #4 now that cleaning is no longer necessary.
* Added patch #5 to add some required Cargo.toml fields.

Josh Steadmon (5):
  libgitpub: move to separate contrib/ directory
  libgit-sys: add symlink to git repo root and build out of tree
  libgit-sys: parallelize build with Cargo's jobserver
  libgit-sys: exclude unnecessary directories in git-src
  libgit-{sys,rs}: add license and description fields

 Makefile                                      | 145 +++++++++++-------
 contrib/libgit-rs/Cargo.toml                  |   2 +
 contrib/libgit-sys/Cargo.toml                 |  13 ++
 contrib/libgit-sys/build.rs                   |  12 +-
 contrib/libgit-sys/git-src                    |   1 +
 .../public_symbol_export.c                    |   2 +-
 .../public_symbol_export.h                    |   0
 shared.mak                                    |   5 +
 8 files changed, 117 insertions(+), 63 deletions(-)
 create mode 120000 contrib/libgit-sys/git-src
 rename contrib/{libgit-sys => libgitpub}/public_symbol_export.c (96%)
 rename contrib/{libgit-sys => libgitpub}/public_symbol_export.h (100%)

Range-diff against v1:
1:  28e10e1092 = 1:  28e10e1092 libgitpub: move to separate contrib/ directory
2:  58111043a1 < -:  ---------- libgit-sys: add symlink to git repo root and clean after build
-:  ---------- > 2:  6befc95a2d libgit-sys: add symlink to git repo root and build out of tree
3:  4cf9996096 ! 3:  a34e23a83d libgit-sys: parallelize build with Cargo's jobserver
    @@ contrib/libgit-sys/build.rs: pub fn main() -> std::io::Result<()> {
          let dst = PathBuf::from(env::var_os("OUT_DIR").unwrap());
     +    let makeflags = env::var_os("CARGO_MAKEFLAGS").unwrap();

    -     let make_output = make_cmd::gnu_make()
    -         .env("DEVELOPER", "1")
    -+        .env("MAKEFLAGS", &makeflags)
    -         .env_remove("PROFILE")
    -         .current_dir(git_root.clone())
    -         .args([
    -@@ contrib/libgit-sys/build.rs: pub fn main() -> std::io::Result<()> {
    -
          let make_output = make_cmd::gnu_make()
              .env("DEVELOPER", "1")
     +        .env("MAKEFLAGS", &makeflags)
4:  9b5d4aa140 < -:  ---------- libgit-sys: exclude unnecessary directories in git-src
-:  ---------- > 4:  390695ac1f libgit-sys: exclude unnecessary directories in git-src
-:  ---------- > 5:  3a87f54693 libgit-{sys,rs}: add license and description fields

base-commit: 683c54c999c301c2cd6f715c411407c413b1d84e
-- 
2.49.0.395.g12beb8f557-goog