git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Josh Steadmon <steadmon@google.com>
Date
Mar 21, 2025, 22:14 UTC
Message-ID
<cover.1742594960.git.steadmon@google.com>
In-Reply-To
<cover.1742339107.git.josh@steadmon.net>

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
Previous: Josh SteadmonNext: Josh Steadmon
Message 9 of 21 in “Fix `cargo package` for libgit-sys”
  1. 0/4 Fix `cargo package` for libgit-sysJosh Steadmon, Mar 18, 2025
  2. 1/4 libgitpub: move to separate contrib/ directoryJosh Steadmon, Mar 18, 2025
  3. 2/4 libgit-sys: add symlink to git repo root and clean after buildJosh Steadmon, Mar 18, 2025
  4. Josh SteadmonMar 19, 2025
  5. Phillip WoodMar 20, 2025
  6. Josh SteadmonMar 21, 2025
  7. 3/4 libgit-sys: parallelize build with Cargo's jobserverJosh Steadmon, Mar 18, 2025
  8. 4/4 libgit-sys: exclude unnecessary directories in git-srcJosh Steadmon, Mar 18, 2025
  9. 0/5 Fix `cargo package` for libgit-sysJosh Steadmon, Mar 21, 2025
  10. 1/5 libgitpub: move to separate contrib/ directoryJosh Steadmon, Mar 21, 2025
  11. 2/5 libgit-sys: add symlink to git repo root and build out of treeJosh Steadmon, Mar 21, 2025
  12. Eric SunshineMar 23, 2025
  13. Junio C HamanoMar 24, 2025
  14. Josh SteadmonMar 25, 2025
  15. Junio C HamanoMar 25, 2025
  16. Josh SteadmonMar 27, 2025
  17. Junio C HamanoMar 29, 2025
  18. Johannes SchindelinMar 31, 2025
  19. 3/5 libgit-sys: parallelize build with Cargo's jobserverJosh Steadmon, Mar 21, 2025
  20. 4/5 libgit-sys: exclude unnecessary directories in git-srcJosh Steadmon, Mar 21, 2025
  21. 5/5 libgit-{sys,rs}: add license and description fieldsJosh Steadmon, Mar 21, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.