]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Enable Rust by default
authorbrian m. carlson <sandals@crustytoothpaste.net>
Thu, 9 Apr 2026 22:44:34 +0000 (22:44 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Apr 2026 00:25:36 +0000 (17:25 -0700)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
ci/lib.sh
ci/run-build-and-tests.sh
meson.build
meson_options.txt
src/meson.build

index dbf00220541ce15c23d63d4092ee1a49200ffb06..84b59959dedc5a50a42a7a4e4a8b076cfc97799d 100644 (file)
--- 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)
index 42a2b6a318b874117e101c629b40a31f0a71e356..1cfc8c6efce09ed6ab92a7a5886382983575399d 100755 (executable)
--- 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}"
index 28cfe730ee5aedfce1104bb8aae53c13e591cf05..e2d783d90b0181697b10352c0357a565daf5afe5 100755 (executable)
@@ -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)
index 8309942d184847ea6434bae30e81dbbbf175192d..deff129cf6d33a8a0caf145946d2a2259cfd7b50 100644 (file)
@@ -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'
index 659cbb218f46e080c1d4c763b5a299446ea9234f..80a8025f20be6e8251dc5434192e9373f8e63c1b 100644 (file)
@@ -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.')
index 45739957b451c93d18123fec09c7dac42447271f..41a4b231e660c43d0cf3206570cf0b919ecdddb9 100644 (file)
@@ -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: [