From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>,
Patrick Steinhardt <ps@pks.im>,
Ezekiel Newren <ezekielnewren@gmail.com>
Subject: [PATCH v2 4/4] Enable Rust by default
Date: Thu, 9 Apr 2026 22:44:34 +0000 [thread overview]
Message-ID: <20260409224434.1861422-5-sandals@crustytoothpaste.net> (raw)
In-Reply-To: <20260409224434.1861422-1-sandals@crustytoothpaste.net>
Our breaking changes document says that we'll enable Rust by default in
Git 2.54. Adjust the Makefile to switch the option from WITH_RUST to
NO_RUST to enable it by default and update the help text accordingly.
Similarly, for Meson, enable the option by default and do not
automatically disable it if Cargo is missing, since the goal is to help
users find where they are likely to have problems in the future.
Update our CI tests to swap out the single Linux job with Rust to a
single job without, both for Makefile and Meson. Similarly, update the
Windows Makefile job to not use Rust, while the Meson job (which does
not build with ci/lib.sh) will default to having it enabled.
Move the check for Cargo in the Meson build because it is no longer
needed in the main script.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
Makefile | 10 +++++-----
ci/lib.sh | 3 +++
ci/run-build-and-tests.sh | 6 ++++--
meson.build | 3 +--
meson_options.txt | 2 +-
src/meson.build | 1 +
6 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index 5d22394c2e..945adb9aa5 100644
--- a/Makefile
+++ b/Makefile
@@ -498,9 +498,9 @@ include shared.mak
#
# == Optional Rust support ==
#
-# Define WITH_RUST if you want to include features and subsystems written in
-# Rust into Git. For now, Rust is still an optional feature of the build
-# process. With Git 3.0 though, Rust will always be enabled.
+# Define NO_RUST if you want to disable features and subsystems written in Rust
+# from being compiled into Git. For now, Rust is still an optional feature of
+# the build process. With Git 3.0 though, Rust will always be enabled.
#
# Building Rust code requires Cargo.
#
@@ -1351,7 +1351,7 @@ LIB_OBJS += urlmatch.o
LIB_OBJS += usage.o
LIB_OBJS += userdiff.o
LIB_OBJS += utf8.o
-ifndef WITH_RUST
+ifdef NO_RUST
LIB_OBJS += varint.o
endif
LIB_OBJS += version.o
@@ -1590,7 +1590,7 @@ endif
ALL_CFLAGS = $(DEVELOPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_APPEND)
ALL_LDFLAGS = $(LDFLAGS) $(LDFLAGS_APPEND)
-ifdef WITH_RUST
+ifndef NO_RUST
BASIC_CFLAGS += -DWITH_RUST
GITLIBS += $(RUST_LIB)
ifeq ($(uname_S),Windows)
diff --git a/ci/lib.sh b/ci/lib.sh
index 42a2b6a318..1cfc8c6efc 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -372,6 +372,9 @@ linux-asan-ubsan)
osx-meson)
MESONFLAGS="$MESONFLAGS -Dcredential_helpers=osxkeychain"
;;
+windows-*)
+ export NO_RUST=UnfortunatelyYes
+ ;;
esac
MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index 28cfe730ee..e2d783d90b 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -8,11 +8,12 @@
export TEST_CONTRIB_TOO=yes
case "$jobname" in
+linux-musl-meson)
+ MESONFLAGS="$MESONFLAGS -Drust=disabled"
+ ;;
fedora-breaking-changes-musl|linux-breaking-changes)
export WITH_BREAKING_CHANGES=YesPlease
- export WITH_RUST=YesPlease
MESONFLAGS="$MESONFLAGS -Dbreaking_changes=true"
- MESONFLAGS="$MESONFLAGS -Drust=enabled"
;;
linux-TEST-vars)
export OPENSSL_SHA1_UNSAFE=YesPlease
@@ -30,6 +31,7 @@ linux-TEST-vars)
export GIT_TEST_PACK_USE_BITMAP_BOUNDARY_TRAVERSAL=1
;;
linux-clang)
+ export NO_RUST=UnfortunatelyYes
export GIT_TEST_DEFAULT_HASH=sha1
;;
linux-sha256)
diff --git a/meson.build b/meson.build
index 8309942d18..deff129cf6 100644
--- a/meson.build
+++ b/meson.build
@@ -1745,8 +1745,7 @@ version_def_h = custom_target(
)
libgit_sources += version_def_h
-cargo = find_program('cargo', dirs: program_path, native: true, required: get_option('rust'))
-rust_option = get_option('rust').disable_auto_if(not cargo.found())
+rust_option = get_option('rust')
if rust_option.allowed()
subdir('src')
libgit_c_args += '-DWITH_RUST'
diff --git a/meson_options.txt b/meson_options.txt
index 659cbb218f..80a8025f20 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -77,7 +77,7 @@ option('zlib_backend', type: 'combo', choices: ['auto', 'zlib', 'zlib-ng'], valu
# Build tweaks.
option('breaking_changes', type: 'boolean', value: false,
description: 'Enable upcoming breaking changes.')
-option('rust', type: 'feature', value: 'auto',
+option('rust', type: 'feature', value: 'enabled',
description: 'Enable building with Rust.')
option('macos_use_homebrew_gettext', type: 'boolean', value: true,
description: 'Use gettext from Homebrew instead of the slightly-broken system-provided one.')
diff --git a/src/meson.build b/src/meson.build
index 45739957b4..41a4b231e6 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -29,6 +29,7 @@ libgit_rs = custom_target('git_rs',
)
libgit_dependencies += declare_dependency(link_with: libgit_rs)
+cargo = find_program('cargo', dirs: program_path, native: true, required: get_option('rust'))
if get_option('tests')
test('rust', cargo,
args: [
next prev parent reply other threads:[~2026-04-09 22:44 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-09 22:44 [PATCH v2 0/4] Enable Rust by default brian m. carlson
2026-04-09 22:44 ` [PATCH v2 1/4] docs: update version with default Rust support brian m. carlson
2026-04-09 22:44 ` [PATCH v2 2/4] ci: install cargo on Alpine brian m. carlson
2026-04-09 22:44 ` [PATCH v2 3/4] Linux: link against libdl brian m. carlson
2026-04-09 22:44 ` brian m. carlson [this message]
2026-04-10 13:02 ` [PATCH v2 0/4] Enable Rust by default Derrick Stolee
2026-04-10 14:52 ` Re*: " Junio C Hamano
2026-04-10 15:02 ` Derrick Stolee
2026-04-10 20:04 ` brian m. carlson
2026-04-10 20:23 ` Junio C Hamano
2026-04-10 22:35 ` brian m. carlson
2026-04-10 21:13 ` Junio C Hamano
2026-04-10 21:48 ` brian m. carlson
2026-04-10 15:06 ` Derrick Stolee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260409224434.1861422-5-sandals@crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=ezekielnewren@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox