From patchwork Fri Mar 21 22:14:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Steadmon X-Patchwork-Id: 14026086 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDC961EE7DF for ; Fri, 21 Mar 2025 22:14:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595261; cv=none; b=r87O/w4mInxPZGr31Bi7mBj6JneCJJWp+Ae+SZ5VWxF5Eq3IWbVTPmsl27wdiUzUueR0oPH5VipyeizMdYW3n9Q5JqmhEekrImlmyWuw4Z4RUHVmAZTYi5UqmlN8whUvR7bVvq6bElS9F9VWCq2pNOO00gqxVGTiHFRzDcTGX5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595261; c=relaxed/simple; bh=z19qv0Tpiz6iEt+JY2Cxa/HknOw9Ful9sFfIYD/TPdQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=LrylVEhPBD9A6uVPqp9WGFBMJuQAo5ckucXI8vQ1Ju6iWXJeRa5e6Lv0QfOXwg2+uL0ADu/vNIv/w7iCc15Qt/CbuZ34AUZsEtTqco49wiWz5xyCR+YBi1DPQvgCnsQT+4wNxtORJThABujpszGbQb0D5ejLWad2I9zneHkRKnc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vQcZul4O; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vQcZul4O" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-22650077995so61810755ad.3 for ; Fri, 21 Mar 2025 15:14:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742595256; x=1743200056; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=p2J8J8zr1M88D69/p3MFDyLpOxKJc+Zxy1Ic51TISZU=; b=vQcZul4O7+yfDTMOXtvNY9fhwe364pU0841FgYQagNesrXSvbI+PF+pgxF5VNHA/hL qKruYCi1U43BMINFeqU0Cej6h2/lQw6UcYWPXiN+pOvneCe1fnflIb1ApxwZB6FqyvEu 1tLlM4d+bA5dTQNveNKg6sgq4Uv4HhZRQ9Y4/kohvTWcbFmHrA2s6BiHt8H5dkMQrXIK 2WYRG16ywbIpyYbAh8ES6u2VY6QMzGoYAJzY8tO63Z/M86CXmi1CqBaaGXgaWKDRw4Qj AnE6652NkFAbehNs98IKPzFs/rmheUNl46EAzCA1qLXlx8eirwzQ8TSM9cX7Hi2Fx7wl cjcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742595256; x=1743200056; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=p2J8J8zr1M88D69/p3MFDyLpOxKJc+Zxy1Ic51TISZU=; b=knCSxi5NK2/m21R7QrbeB+ouYqstVnDFOZ+sC/Hs+vRVFwHj1xRPZTx2wYrXvxdR1/ 50o7Pesoey83SODE0eyKeRjUDsGlQzRbQIuZFz0Uosa03qrLWNjdXnWmwpblVOH7mnhp 3ivBZL7+wyCCcydVAreG7yBCJCr6myHmwpkw0BnFHGdaQkpJyDAWzV7GJ6EC8/Ulm5QP ouEce1Bb+e7RkmAbbv6RIrOGcEbOcjUZilp9b3J9nMkIeh1tHnN7hCxeYoVUfJXUR68A 4WL0/IY+n51WjvJmz/ZY3NlrhzI+4nVka2fMJEeLWn4Jm8CbMh74JkgThMrgehvJFY4V YLTA== X-Gm-Message-State: AOJu0YwA3M9lPcUAIcw9aSLpmjCzP845PZ3MIlAqitlf+BVjq1igcI9H oKDIskyB72OZdIoKK3TpL8iLDRN+lAUTWl83v1xnKjhf1YgoKQw8WpbJN94+O+Jt5K/u5pLxLpR /EMFVzKz9RYc/XzXXmqOeLRnP2xdOZ+xPwfjDRfrQ4v/XhiC9CFNJt4X+diT7T2k2AJ6VuFzETm 6sAEqvQbE4zq9uEg+DcT52ZbnJ7S8ihW4RAXBiJ+o= X-Google-Smtp-Source: AGHT+IETQPCPw8BIu8KlFxGTicPf0V0xOL8GzJHZ8haRr0EHt9DbgOpahgOgWiwLFuRWhkiYx1xfUFoPupiRBg== X-Received: from pjl4.prod.google.com ([2002:a17:90b:2f84:b0:2fc:2f33:e07d]) (user=steadmon job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e844:b0:220:e896:54e1 with SMTP id d9443c01a7336-22780d8c42emr78227935ad.26.1742595255977; Fri, 21 Mar 2025 15:14:15 -0700 (PDT) Date: Fri, 21 Mar 2025 15:14:07 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <28e10e1092bff1d3185c29b905f6410b2ea0d13d.1742594960.git.steadmon@google.com> Subject: [PATCH v2 1/5] libgitpub: move to separate contrib/ directory From: Josh Steadmon To: git@vger.kernel.org Cc: "brian m. carlson" , Phillip Wood For Cargo packaging purposes, it is better for any dependencies built with Git's Makefile to live outside the libgit-{sys,rs} crates. This, plus some future changes to the crates, will allow `cargo package` to treat all of the non-Rust source as a separate tree apart from the Cargo-managed inputs. Signed-off-by: Josh Steadmon --- Makefile | 16 ++++++++-------- contrib/libgit-sys/build.rs | 4 ++-- .../public_symbol_export.c | 2 +- .../public_symbol_export.h | 0 4 files changed, 11 insertions(+), 11 deletions(-) rename contrib/{libgit-sys => libgitpub}/public_symbol_export.c (96%) rename contrib/{libgit-sys => libgitpub}/public_symbol_export.h (100%) diff --git a/Makefile b/Makefile index 7315507381..52eed88dde 100644 --- a/Makefile +++ b/Makefile @@ -2764,7 +2764,7 @@ OBJECTS += $(CLAR_TEST_OBJS) OBJECTS += $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS)) ifdef INCLUDE_LIBGIT_RS - OBJECTS += contrib/libgit-sys/public_symbol_export.o + OBJECTS += contrib/libgitpub/public_symbol_export.o endif ifndef NO_CURL @@ -3762,9 +3762,9 @@ clean: profile-clean coverage-clean cocciclean $(MAKE) -C Documentation/ clean $(RM) Documentation/GIT-EXCLUDED-PROGRAMS $(RM) -r contrib/libgit-sys/target contrib/libgit-rs/target - $(RM) contrib/libgit-sys/partial_symbol_export.o - $(RM) contrib/libgit-sys/hidden_symbol_export.o - $(RM) contrib/libgit-sys/libgitpub.a + $(RM) contrib/libgitpub/partial_symbol_export.o + $(RM) contrib/libgitpub/hidden_symbol_export.o + $(RM) contrib/libgitpub/libgitpub.a ifndef NO_PERL $(RM) -r perl/build/ endif @@ -3937,14 +3937,14 @@ ifdef INCLUDE_LIBGIT_RS all:: libgit-sys libgit-rs endif -LIBGIT_PUB_OBJS += contrib/libgit-sys/public_symbol_export.o +LIBGIT_PUB_OBJS += contrib/libgitpub/public_symbol_export.o LIBGIT_PUB_OBJS += libgit.a LIBGIT_PUB_OBJS += reftable/libreftable.a LIBGIT_PUB_OBJS += xdiff/lib.a -LIBGIT_PARTIAL_EXPORT = contrib/libgit-sys/partial_symbol_export.o +LIBGIT_PARTIAL_EXPORT = contrib/libgitpub/partial_symbol_export.o -LIBGIT_HIDDEN_EXPORT = contrib/libgit-sys/hidden_symbol_export.o +LIBGIT_HIDDEN_EXPORT = contrib/libgitpub/hidden_symbol_export.o $(LIBGIT_PARTIAL_EXPORT): $(LIBGIT_PUB_OBJS) $(LD) -r $^ -o $@ @@ -3952,5 +3952,5 @@ $(LIBGIT_PARTIAL_EXPORT): $(LIBGIT_PUB_OBJS) $(LIBGIT_HIDDEN_EXPORT): $(LIBGIT_PARTIAL_EXPORT) $(OBJCOPY) --localize-hidden $^ $@ -contrib/libgit-sys/libgitpub.a: $(LIBGIT_HIDDEN_EXPORT) +contrib/libgitpub/libgitpub.a: $(LIBGIT_HIDDEN_EXPORT) $(AR) $(ARFLAGS) $@ $^ diff --git a/contrib/libgit-sys/build.rs b/contrib/libgit-sys/build.rs index 3ffd80ad91..e0d979c196 100644 --- a/contrib/libgit-sys/build.rs +++ b/contrib/libgit-sys/build.rs @@ -15,7 +15,7 @@ pub fn main() -> std::io::Result<()> { .current_dir(git_root.clone()) .args([ "INCLUDE_LIBGIT_RS=YesPlease", - "contrib/libgit-sys/libgitpub.a", + "contrib/libgitpub/libgitpub.a", ]) .output() .expect("Make failed to run"); @@ -26,7 +26,7 @@ pub fn main() -> std::io::Result<()> { String::from_utf8(make_output.stderr).unwrap() ); } - std::fs::copy(crate_root.join("libgitpub.a"), dst.join("libgitpub.a"))?; + std::fs::copy(git_root.join("contrib/libgitpub/libgitpub.a"), dst.join("libgitpub.a"))?; println!("cargo:rustc-link-search=native={}", dst.display()); println!("cargo:rustc-link-lib=gitpub"); println!("cargo:rerun-if-changed={}", git_root.display()); diff --git a/contrib/libgit-sys/public_symbol_export.c b/contrib/libgitpub/public_symbol_export.c similarity index 96% rename from contrib/libgit-sys/public_symbol_export.c rename to contrib/libgitpub/public_symbol_export.c index dfbb257115..de5f6943c2 100644 --- a/contrib/libgit-sys/public_symbol_export.c +++ b/contrib/libgitpub/public_symbol_export.c @@ -6,7 +6,7 @@ #include "git-compat-util.h" #include "config.h" -#include "contrib/libgit-sys/public_symbol_export.h" +#include "contrib/libgitpub/public_symbol_export.h" #include "version.h" #pragma GCC visibility push(default) diff --git a/contrib/libgit-sys/public_symbol_export.h b/contrib/libgitpub/public_symbol_export.h similarity index 100% rename from contrib/libgit-sys/public_symbol_export.h rename to contrib/libgitpub/public_symbol_export.h From patchwork Fri Mar 21 22:14:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Steadmon X-Patchwork-Id: 14026087 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDC3D1519BE for ; Fri, 21 Mar 2025 22:14:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595262; cv=none; b=jC5zaktTr9ZmLftKXdemD1zwp1EkCD+itzLxkE3iysg2vRP6aiJWXWej0TaWjC/+MxATKZtMog8hQHHxNeoyfRfksw/tBthPkOMFE/E3Gbr28Rd+LXzgYXxhUbaJwgDanj9mLcmyDZv2muPL1b0XhdiXcYIIlXqpyylKFHrDSDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595262; c=relaxed/simple; bh=2nTsyrGHw+XCmRPukf5pU1cwCi6d7mTdzOzxBS71ib0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=p6k7uL7sgwJxIY5zeKD21YptLudy9YOrelWfGcSkeckShVhzgD6YiIJwBsmU3wP0tlPgYKkaWzsLFz93kbveuyaCBZv3f/2k3sDnxdovRgE4L9TxNvj1nKyDLaLIdnGjurlvHFCHJJVpAts0MYpz4cpHDrXOezV37EhBdCM25qs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Ztl748A/; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Ztl748A/" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2264c423e37so60151225ad.3 for ; Fri, 21 Mar 2025 15:14:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742595258; x=1743200058; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tuGERBik4HT2lKH4rQ9bnF6QK3BCUniO5qbigeP6qHY=; b=Ztl748A/RT2plJIy7P7t0zcEZFT+X3NMsNLWiVxoum7rPjWfyG9Dmr7JsPl+tDg3wC lUaXqU7sP4QUi9gOH6kZw/sOLUFMZw+0C9Dp9NJIosKWx9MGsBwEgnO5ZvWwBAY031mQ hiPk2xKtk8jmsWWyAGhnmz/9cLFcjiEGXbU/tjz1XWzWfuip96HdJbrUdFGy+yyiCy1Z 8OwNvkb8SbGegGxy4fkkbvSfVaZVM0zOxStq9BhpHoYQLqz2wr8RST6X4XXFsff4USwF Ok0z5wxDq96GpOgw0ee6pSN31L82quMvVrzyET6RZuOW/3xsU5tv/nfK0tDUApIdXmst tq7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742595258; x=1743200058; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tuGERBik4HT2lKH4rQ9bnF6QK3BCUniO5qbigeP6qHY=; b=OjBr3ecCb+zjTM8BXaVv7SzFpTZP27oDjqr1aF2p4LLUPUklluxJr10a+5433Lcbwk Ahm7detkp7LGnhzy9o2QI4c5tPvoTm1tQrnbjniJbwPHR8SUNWSDqAPaF2/va05/2foM ill0YEZm2930/a20dEutDBpo2Odor7rZ6w9CtxObPt2JU/Vg1yHtA9juL8RItuTioxSZ gcGyMAkJZuSUOBOidF/UF3G3V0ak3DYpZXohhXYyWNcDXzwIxsGqPnIiJYNyP6bB/B1X P/VtX0zKQPRBOWnyEIRlRjowCkY9ThrVoSaOgZxwpSwr3O8vX4IXF+V/YKq3y8vfP8l3 Cqhw== X-Gm-Message-State: AOJu0Yx7GHQVU5CfP/44DSmbB3++LF3rF9XVrrWMxMalvtEWx2PyJr2I GwJLn5mkt2q1JGvE8UJsPZNsHFXQXJu2rLhhyAqK0zZpHnvmtw2R1DYzBgVZdtFLHA49HF8IIyO 9taItGjOEKHdrskgdsOrMOT2rxEBcI0m1TdHeArfIHX4Vd6BhdNxZBvUYjKCOMK/alqaMFNus1Q crSGaK4XiXjOUhTqlwLueZdyQ9VceRsKc+Ve2MTV4= X-Google-Smtp-Source: AGHT+IGU5yucxAB+Pl0GnmgobqyjAEmMPnmUNzR+eY9zssnDIR4O14r5ExV/4ZkBn0IPoP6mf/RI84uBuQCvBQ== X-Received: from pfuv10.prod.google.com ([2002:a05:6a00:148a:b0:736:3cd5:ba3a]) (user=steadmon job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1409:b0:737:e73:f64b with SMTP id d2e1a72fcca58-7390593b7ffmr6905335b3a.1.1742595258010; Fri, 21 Mar 2025 15:14:18 -0700 (PDT) Date: Fri, 21 Mar 2025 15:14:08 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <6befc95a2d0893aa269142a18d60ad07e79c6e88.1742594960.git.steadmon@google.com> Subject: [PATCH v2 2/5] libgit-sys: add symlink to git repo root and build out of tree From: Josh Steadmon To: git@vger.kernel.org Cc: "brian m. carlson" , Phillip Wood Unlike `cargo build`, `cargo package` does not get access to the entire Git repo containing a Rust crate. Instead, it prepares a directory starting from the crate root (potentially excluding files, such as those not under version control, or explicity excluded in the Cargo.toml file). This means that the current method of building the libgit-sys crate does not work with `cargo package`, as it tries to execute the Makefile from "../.." relative to the crate root. Fix this by adding a `git-src` symlink in the crate that points to the Git repository root. `cargo package` will flatten this to a copy of the Git repo, excluding non-version-controlled files, any explicitly-excluded files, and trees that contain a Cargo.toml file (this prevents infinite recursion on the symlink). We can then execute the Makefile under the flattened git-src directory from our build.rs script. However, this exposes a second problem; Cargo will check that the build script does not add, delete, or modify any files in the source tree. Without further changes, Cargo complains about the object files and other generated files created during the build. To avoid this problem, add a CARGO_OUT_DIR variable to the Makefile. When this is set, object files and other generated files will be created there, rather than in the main source tree. This change has only been applied to files created as part of the libgitpub.a build, to avoid unnecessary churn in the Makefile. Signed-off-by: Josh Steadmon --- Makefile | 135 +++++++++++++++++++++--------------- contrib/libgit-sys/build.rs | 7 +- contrib/libgit-sys/git-src | 1 + shared.mak | 5 ++ 4 files changed, 91 insertions(+), 57 deletions(-) create mode 120000 contrib/libgit-sys/git-src diff --git a/Makefile b/Makefile index 52eed88dde..91677448ba 100644 --- a/Makefile +++ b/Makefile @@ -420,6 +420,9 @@ include shared.mak # Define INCLUDE_LIBGIT_RS if you want `make all` and `make test` to build and # test the Rust crates in contrib/libgit-sys and contrib/libgit-rs. # +# Define CARGO_OUT_DIR to specify a directory where object files and other files +# generated during the build of libgitpub.a should be created. +# # === Optional library: libintl === # # Define NO_GETTEXT if you don't want Git output to be translated. @@ -699,6 +702,7 @@ THIRD_PARTY_SOURCES = UNIT_TEST_PROGRAMS = UNIT_TEST_DIR = t/unit-tests UNIT_TEST_BIN = $(UNIT_TEST_DIR)/bin +CARGO_OUT_DIR = # Having this variable in your environment would break pipelines because # you cause "cd" to echo its destination to stdout. It can also take @@ -917,11 +921,21 @@ export PYTHON_PATH TEST_SHELL_PATH = $(SHELL_PATH) -LIB_FILE = libgit.a -XDIFF_LIB = xdiff/lib.a -REFTABLE_LIB = reftable/libreftable.a +### Generated files which may need to live in Cargo output directory + +GIT_CFLAGS = $(call maybe_join_path,$(CARGO_OUT_DIR),GIT-CFLAGS) +GIT_PREFIX = $(call maybe_join_path,$(CARGO_OUT_DIR),GIT-PREFIX) +GIT_USER_AGENT_FILE = $(call maybe_join_path,$(CARGO_OUT_DIR),GIT-USER-AGENT) +GIT_VERSION_FILE = $(call maybe_join_path,$(CARGO_OUT_DIR),GIT-VERSION-FILE) +GIT_VERSION_PATH = $(dir $(GIT_VERSION_FILE))$(notdir $(GIT_VERSION_FILE)) +COMMAND_LIST_H = $(call maybe_join_path,$(CARGO_OUT_DIR),command-list.h) +VERSION_DEF_H = $(call maybe_join_path,$(CARGO_OUT_DIR),version-def.h) -GENERATED_H += command-list.h +LIB_FILE = $(call maybe_join_path,$(CARGO_OUT_DIR),libgit.a) +XDIFF_LIB = $(call maybe_join_path,$(CARGO_OUT_DIR),xdiff/lib.a) +REFTABLE_LIB = $(call maybe_join_path,$(CARGO_OUT_DIR),reftable/libreftable.a) + +GENERATED_H += $(COMMAND_LIST_H) GENERATED_H += config-list.h GENERATED_H += hook-list.h GENERATED_H += $(UNIT_TEST_DIR)/clar-decls.h @@ -1472,7 +1486,7 @@ ifdef DEVELOPER include config.mak.dev endif -GIT-VERSION-FILE: FORCE +$(GIT_VERSION_FILE): FORCE @OLD=$$(cat $@ 2>/dev/null || :) && \ $(call version_gen,"$(shell pwd)",GIT-VERSION-FILE.in,$@) && \ NEW=$$(cat $@ 2>/dev/null || :) && \ @@ -1482,7 +1496,7 @@ GIT-VERSION-FILE: FORCE # otherwise any user-provided value for GIT_VERSION would have been overridden # already. GIT_VERSION_OVERRIDE := $(GIT_VERSION) --include GIT-VERSION-FILE +-include $(GIT_VERSION_FILE) # what 'all' will build and 'install' will install in gitexecdir, # excluding programs for built-in commands @@ -2403,9 +2417,9 @@ endif GIT_USER_AGENT_SQ = $(subst ','\'',$(GIT_USER_AGENT)) GIT_USER_AGENT_CQ = "$(subst ",\",$(subst \,\\,$(GIT_USER_AGENT)))" GIT_USER_AGENT_CQ_SQ = $(subst ','\'',$(GIT_USER_AGENT_CQ)) -GIT-USER-AGENT: FORCE - @if test x'$(GIT_USER_AGENT_SQ)' != x"`cat GIT-USER-AGENT 2>/dev/null`"; then \ - echo '$(GIT_USER_AGENT_SQ)' >GIT-USER-AGENT; \ +$(GIT_USER_AGENT_FILE): FORCE + @if test x'$(GIT_USER_AGENT_SQ)' != x"`cat $(GIT_USER_AGENT_FILE) 2>/dev/null`"; then \ + echo '$(GIT_USER_AGENT_SQ)' >$(GIT_USER_AGENT_FILE); \ fi ifdef DEFAULT_HELP_FORMAT @@ -2523,7 +2537,7 @@ strip: $(PROGRAMS) git$X # dependencies here will not need to change if the force-build # details change some day. -git.sp git.s git.o: GIT-PREFIX +git.sp git.s git.o: $(GIT_PREFIX) git.sp git.s git.o: EXTRA_CPPFLAGS = \ '-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \ '-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \ @@ -2533,10 +2547,10 @@ git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS) $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \ $(filter %.o,$^) $(LIBS) -help.sp help.s help.o: command-list.h +help.sp help.s $(call maybe_join_path,$(CARGO_OUT_DIR),help.o): $(COMMAND_LIST_H) builtin/bugreport.sp builtin/bugreport.s builtin/bugreport.o: hook-list.h -builtin/help.sp builtin/help.s builtin/help.o: config-list.h GIT-PREFIX +builtin/help.sp builtin/help.s builtin/help.o: config-list.h $(GIT_PREFIX) builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \ '-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \ '-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \ @@ -2545,13 +2559,13 @@ builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \ PAGER_ENV_SQ = $(subst ','\'',$(PAGER_ENV)) PAGER_ENV_CQ = "$(subst ",\",$(subst \,\\,$(PAGER_ENV)))" PAGER_ENV_CQ_SQ = $(subst ','\'',$(PAGER_ENV_CQ)) -pager.sp pager.s pager.o: EXTRA_CPPFLAGS = \ +pager.sp pager.s $(call maybe_join_path,$(CARGO_OUT_DIR),pager.o): EXTRA_CPPFLAGS = \ -DPAGER_ENV='$(PAGER_ENV_CQ_SQ)' -version-def.h: version-def.h.in GIT-VERSION-GEN GIT-VERSION-FILE GIT-USER-AGENT +$(VERSION_DEF_H): version-def.h.in GIT-VERSION-GEN $(GIT_VERSION_FILE) $(GIT_USER_AGENT_FILE) $(QUIET_GEN)$(call version_gen,"$(shell pwd)",$<,$@) -version.sp version.s version.o: version-def.h +version.sp version.s $(call maybe_join_path,$(CARGO_OUT_DIR),version.o): $(VERSION_DEF_H) $(BUILT_INS): git$X $(QUIET_BUILT_IN)$(RM) $@ && \ @@ -2564,9 +2578,9 @@ config-list.h: generate-configlist.sh config-list.h: Documentation/*config.adoc Documentation/config/*.adoc $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@ -command-list.h: generate-cmdlist.sh command-list.txt +$(COMMAND_LIST_H): generate-cmdlist.sh command-list.txt -command-list.h: $(wildcard Documentation/git*.adoc) +$(COMMAND_LIST_H): $(wildcard Documentation/git*.adoc) $(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \ $(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \ . $@ @@ -2589,10 +2603,10 @@ $(SCRIPT_SH_GEN) $(SCRIPT_LIB) : % : %.sh generate-script.sh GIT-BUILD-OPTIONS G $(QUIET_GEN)./generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \ mv $@+ $@ -git.rc: git.rc.in GIT-VERSION-GEN GIT-VERSION-FILE +git.rc: git.rc.in GIT-VERSION-GEN $(GIT_VERSION_FILE) $(QUIET_GEN)$(call version_gen,"$(shell pwd)",$<,$@) -git.res: git.rc GIT-PREFIX +git.res: git.rc $(GIT_PREFIX) $(QUIET_RC)$(RC) -i $< -o $@ # This makes sure we depend on the NO_PERL setting itself. @@ -2626,8 +2640,8 @@ endif PERL_DEFINES += $(gitexecdir) $(perllibdir) $(localedir) -$(SCRIPT_PERL_GEN): % : %.perl generate-perl.sh GIT-PERL-DEFINES GIT-PERL-HEADER GIT-VERSION-FILE - $(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@+" && \ +$(SCRIPT_PERL_GEN): % : %.perl generate-perl.sh GIT-PERL-DEFINES GIT-PERL-HEADER $(GIT_VERSION_FILE) + $(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS $(GIT_VERSION_PATH) GIT-PERL-HEADER "$<" "$@+" && \ mv $@+ $@ PERL_DEFINES := $(subst $(space),:,$(PERL_DEFINES)) @@ -2691,7 +2705,7 @@ CONFIGURE_RECIPE = sed -e 's/@GIT_VERSION@/$(GIT_VERSION)/g' \ autoconf -o configure configure.ac+ && \ $(RM) configure.ac+ -configure: configure.ac GIT-VERSION-FILE +configure: configure.ac $(GIT_VERSION_FILE) $(QUIET_GEN)$(CONFIGURE_RECIPE) ifdef AUTOCONFIGURED @@ -2774,6 +2788,14 @@ endif .PHONY: objects objects: $(OBJECTS) +ifdef CARGO_OUT_DIR +OBJECTS := $(addprefix $(CARGO_OUT_DIR)/,$(OBJECTS)) +LIB_OBJS := $(addprefix $(CARGO_OUT_DIR)/,$(LIB_OBJS)) +REFTABLE_OBJS := $(addprefix $(CARGO_OUT_DIR)/,$(REFTABLE_OBJS)) +XDIFF_OBJS := $(addprefix $(CARGO_OUT_DIR)/,$(XDIFF_OBJS)) +BASIC_CFLAGS += -I$(CARGO_OUT_DIR) +endif + dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d) dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS)))) @@ -2805,10 +2827,15 @@ missing_compdb_dir = compdb_args = endif -$(OBJECTS): %.o: %.c GIT-CFLAGS $(missing_dep_dirs) $(missing_compdb_dir) +ifdef CARGO_OUT_DIR +$(OBJECTS): $(CARGO_OUT_DIR)/%.o: %.c $(GIT_CFLAGS) $(missing_dep_dirs) $(missing_compdb_dir) + $(QUIET_CC)$(CC) -o $(CARGO_OUT_DIR)/$*.o -c $(dep_args) $(compdb_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $< +else +$(OBJECTS): %.o: %.c $(GIT_CFLAGS) $(missing_dep_dirs) $(missing_compdb_dir) $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(compdb_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $< +endif -%.s: %.c GIT-CFLAGS FORCE +%.s: %.c $(GIT_CFLAGS) FORCE $(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $< ifdef USE_COMPUTED_HEADER_DEPENDENCIES @@ -2829,27 +2856,27 @@ compile_commands.json: @if test -s $@+; then mv $@+ $@; else $(RM) $@+; fi endif -exec-cmd.sp exec-cmd.s exec-cmd.o: GIT-PREFIX -exec-cmd.sp exec-cmd.s exec-cmd.o: EXTRA_CPPFLAGS = \ +exec-cmd.sp exec-cmd.s $(call maybe_join_path,$(CARGO_OUT_DIR),exec-cmd.o): $(GIT_PREFIX) +exec-cmd.sp exec-cmd.s $(call maybe_join_path,$(CARGO_OUT_DIR),exec-cmd.o): EXTRA_CPPFLAGS = \ '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \ '-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \ '-DBINDIR="$(bindir_relative_SQ)"' \ '-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"' -setup.sp setup.s setup.o: GIT-PREFIX -setup.sp setup.s setup.o: EXTRA_CPPFLAGS = \ +setup.sp setup.s $(call maybe_join_path,$(CARGO_OUT_DIR),setup.o): $(GIT_PREFIX) +setup.sp setup.s $(call maybe_join_path,$(CARGO_OUT_DIR),setup.o): EXTRA_CPPFLAGS = \ -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' -config.sp config.s config.o: GIT-PREFIX -config.sp config.s config.o: EXTRA_CPPFLAGS = \ +config.sp config.s $(call maybe_join_path,$(CARGO_OUT_DIR),config.o): $(GIT_PREFIX) +config.sp config.s $(call maybe_join_path,$(CARGO_OUT_DIR),config.o): EXTRA_CPPFLAGS = \ -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' -attr.sp attr.s attr.o: GIT-PREFIX -attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \ +attr.sp attr.s $(call maybe_join_path,$(CARGO_OUT_DIR),attr.o): $(GIT_PREFIX) +attr.sp attr.s $(call maybe_join_path,$(CARGO_OUT_DIR),attr.o): EXTRA_CPPFLAGS = \ -DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"' -gettext.sp gettext.s gettext.o: GIT-PREFIX -gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \ +gettext.sp gettext.s $(call maybe_join_path,$(CARGO_OUT_DIR),gettext.o): $(GIT_PREFIX) +gettext.sp gettext.s $(call maybe_join_path,$(CARGO_OUT_DIR),gettext.o): EXTRA_CPPFLAGS = \ -DGIT_LOCALE_PATH='"$(localedir_relative_SQ)"' http-push.sp http.sp http-walker.sp remote-curl.sp imap-send.sp: SP_EXTRA_FLAGS += \ @@ -2872,7 +2899,7 @@ compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \ compat/nedmalloc/nedmalloc.sp: SP_EXTRA_FLAGS += -Wno-non-pointer-null endif -headless-git.o: compat/win32/headless.c GIT-CFLAGS +headless-git.o: compat/win32/headless.c $(GIT_CFLAGS) $(QUIET_CC)$(CC) $(ALL_CFLAGS) $(COMPAT_CFLAGS) \ -fno-stack-protector -o $@ -c -Wall -Wwrite-strings $< @@ -3116,9 +3143,9 @@ endif NO_PERL_CPAN_FALLBACKS_SQ = $(subst ','\'',$(NO_PERL_CPAN_FALLBACKS)) endif -perl/build/lib/%.pm: perl/%.pm generate-perl.sh GIT-BUILD-OPTIONS GIT-VERSION-FILE GIT-PERL-DEFINES +perl/build/lib/%.pm: perl/%.pm generate-perl.sh GIT-BUILD-OPTIONS $(GIT_VERSION_FILE) GIT-PERL-DEFINES $(call mkdir_p_parent_template) - $(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@" + $(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS $(GIT_VERSION_PATH) GIT-PERL-HEADER "$<" "$@" perl/build/man/man3/Git.3pm: perl/Git.pm $(call mkdir_p_parent_template) @@ -3146,20 +3173,20 @@ cscope: cscope.out TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\ $(localedir_SQ) -GIT-PREFIX: FORCE +$(GIT_PREFIX): FORCE @FLAGS='$(TRACK_PREFIX)'; \ - if test x"$$FLAGS" != x"`cat GIT-PREFIX 2>/dev/null`" ; then \ + if test x"$$FLAGS" != x"`cat $(GIT_PREFIX) 2>/dev/null`" ; then \ echo >&2 " * new prefix flags"; \ - echo "$$FLAGS" >GIT-PREFIX; \ + echo "$$FLAGS" >$(GIT_PREFIX); \ fi TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):$(USE_GETTEXT_SCHEME) -GIT-CFLAGS: FORCE +$(GIT_CFLAGS): FORCE @FLAGS='$(TRACK_CFLAGS)'; \ - if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \ + if test x"$$FLAGS" != x"`cat $(GIT_CFLAGS) 2>/dev/null`" ; then \ echo >&2 " * new build flags"; \ - echo "$$FLAGS" >GIT-CFLAGS; \ + echo "$$FLAGS" >$(GIT_CFLAGS); \ fi TRACK_LDFLAGS = $(subst ','\'',$(ALL_LDFLAGS)) @@ -3751,7 +3778,7 @@ clean: profile-clean coverage-clean cocciclean $(RM) $(FUZZ_PROGRAMS) $(RM) $(SP_OBJ) $(RM) $(HCC) - $(RM) version-def.h + $(RM) $(VERSION_DEF_H) $(RM) -r $(dep_dirs) $(compdb_dir) compile_commands.json $(RM) $(test_bindir_programs) $(RM) -r po/build/ @@ -3774,8 +3801,8 @@ ifndef NO_TCLTK $(MAKE) -C gitk-git clean $(MAKE) -C git-gui clean endif - $(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS - $(RM) GIT-USER-AGENT GIT-PREFIX + $(RM) $(GIT_VERSION_FILE) $(GIT_CFLAGS) GIT-LDFLAGS GIT-BUILD-OPTIONS + $(RM) $(GIT_USER_AGENT_FILE) $(GIT_PREFIX) $(RM) GIT-SCRIPT-DEFINES GIT-PERL-DEFINES GIT-PERL-HEADER GIT-PYTHON-VARS ifdef MSVC $(RM) $(patsubst %.o,%.o.pdb,$(OBJECTS)) @@ -3937,14 +3964,14 @@ ifdef INCLUDE_LIBGIT_RS all:: libgit-sys libgit-rs endif -LIBGIT_PUB_OBJS += contrib/libgitpub/public_symbol_export.o -LIBGIT_PUB_OBJS += libgit.a -LIBGIT_PUB_OBJS += reftable/libreftable.a -LIBGIT_PUB_OBJS += xdiff/lib.a - -LIBGIT_PARTIAL_EXPORT = contrib/libgitpub/partial_symbol_export.o +LIBGIT_PUB_OBJS += $(CARGO_OUT_DIR)/contrib/libgitpub/public_symbol_export.o +LIBGIT_PUB_OBJS += $(LIB_FILE) +LIBGIT_PUB_OBJS += $(REFTABLE_LIB) +LIBGIT_PUB_OBJS += $(XDIFF_LIB) -LIBGIT_HIDDEN_EXPORT = contrib/libgitpub/hidden_symbol_export.o +LIBGIT_PARTIAL_EXPORT = $(CARGO_OUT_DIR)/contrib/libgitpub/partial_symbol_export.o +LIBGIT_HIDDEN_EXPORT = $(CARGO_OUT_DIR)/contrib/libgitpub/hidden_symbol_export.o +GITPUB_LIB = $(call maybe_join_path,$(CARGO_OUT_DIR),contrib/libgitpub/libgitpub.a) $(LIBGIT_PARTIAL_EXPORT): $(LIBGIT_PUB_OBJS) $(LD) -r $^ -o $@ @@ -3952,5 +3979,5 @@ $(LIBGIT_PARTIAL_EXPORT): $(LIBGIT_PUB_OBJS) $(LIBGIT_HIDDEN_EXPORT): $(LIBGIT_PARTIAL_EXPORT) $(OBJCOPY) --localize-hidden $^ $@ -contrib/libgitpub/libgitpub.a: $(LIBGIT_HIDDEN_EXPORT) +$(GITPUB_LIB): $(LIBGIT_HIDDEN_EXPORT) $(AR) $(ARFLAGS) $@ $^ diff --git a/contrib/libgit-sys/build.rs b/contrib/libgit-sys/build.rs index e0d979c196..19407663f5 100644 --- a/contrib/libgit-sys/build.rs +++ b/contrib/libgit-sys/build.rs @@ -6,7 +6,7 @@ pub fn main() -> std::io::Result<()> { ac.emit_has_path("std::ffi::c_char"); let crate_root = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); - let git_root = crate_root.join("../.."); + let git_root = crate_root.join("git-src"); let dst = PathBuf::from(env::var_os("OUT_DIR").unwrap()); let make_output = make_cmd::gnu_make() @@ -14,8 +14,9 @@ pub fn main() -> std::io::Result<()> { .env_remove("PROFILE") .current_dir(git_root.clone()) .args([ + &format!("CARGO_OUT_DIR={}", dst.display()), "INCLUDE_LIBGIT_RS=YesPlease", - "contrib/libgitpub/libgitpub.a", + &format!("{}/contrib/libgitpub/libgitpub.a", dst.display()), ]) .output() .expect("Make failed to run"); @@ -26,8 +27,8 @@ pub fn main() -> std::io::Result<()> { String::from_utf8(make_output.stderr).unwrap() ); } - std::fs::copy(git_root.join("contrib/libgitpub/libgitpub.a"), dst.join("libgitpub.a"))?; println!("cargo:rustc-link-search=native={}", dst.display()); + println!("cargo:rustc-link-search=native={}", dst.join("contrib/libgitpub").display()); println!("cargo:rustc-link-lib=gitpub"); println!("cargo:rerun-if-changed={}", git_root.display()); diff --git a/contrib/libgit-sys/git-src b/contrib/libgit-sys/git-src new file mode 120000 index 0000000000..c25bddb6dd --- /dev/null +++ b/contrib/libgit-sys/git-src @@ -0,0 +1 @@ +../.. \ No newline at end of file diff --git a/shared.mak b/shared.mak index 1a99848a95..0dc611dd90 100644 --- a/shared.mak +++ b/shared.mak @@ -127,3 +127,8 @@ GIT_USER_AGENT="$(GIT_USER_AGENT)" \ GIT_VERSION="$(GIT_VERSION_OVERRIDE)" \ $(SHELL_PATH) "$(1)/GIT-VERSION-GEN" "$(1)" "$(2)" "$(3)" endef + +# Apply a path prefix if the prefix is non-empty +define maybe_join_path +$(if $(1),$(1)/$(2),$(2)) +endef From patchwork Fri Mar 21 22:14:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Steadmon X-Patchwork-Id: 14026088 Received: from mail-oo1-f74.google.com (mail-oo1-f74.google.com [209.85.161.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 24B7223312D for ; Fri, 21 Mar 2025 22:14:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595263; cv=none; b=SQkwHuoDFRjqCMjddWD4cET3fY1IXmvMfts5e1eQ33gdqNzndNNNu9y4zaI3J0olgxAT/DRmpeiI1D6sYwfaY/e987PvKDwxaYznlYywjrSQltKsOi0tStfAJliuyskQO1kauuo04AbK+8Uq8cvOexlTP6il4ZZ/BjfOr29IRR4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595263; c=relaxed/simple; bh=ETecl+UdDj1OOsvYoQNIAWQidEPB5s3z94BMhToIy8A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZlcD/TOOu6DqIDJ7yXqAc6PHMxzRvbYf+kjJozvyf8u9NCeHlFH5b5O044ogVld0DO9TPNbjVqUcjgs8rM7jPxe9R4+y5zX+HuS+DCbhsdARgw0vp3GMFlL/3R0gAsFKjweOuxkKwEpSfOL/911XZRqR7TaKarIDpTI+oYhK154= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Oe9pnLCj; arc=none smtp.client-ip=209.85.161.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Oe9pnLCj" Received: by mail-oo1-f74.google.com with SMTP id 006d021491bc7-601e231e8d2so1484108eaf.3 for ; Fri, 21 Mar 2025 15:14:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742595260; x=1743200060; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=TsLjmM+cZHdukY3VI/Tt/97n2gAmHQgX0ISkWP9p+u0=; b=Oe9pnLCj5h2Pf95ga9uNqdOak6HNZM1zZkkZv1Jh4eFnP9XXPHj9qTlS0JaUr5ZnmL 3FmTXDn7HF6d1Y7v34WBmKja0/iGb98Yrcgc5Fw33eeUKzSUWVL3JbM/QF40deD1Ebw3 hz9gO9R6OqdaDBRgVOO1IefOzVTM7CQvNrSjy12j9Mc8vbNDZZHg9BLy/Zxx7qYHCpbJ A8p/4AcljgXFKUN8g9wwsjFWAljuRXw+ZWqVdTPS+O4PPL/QnbP1tGHRyV+oCeDngpv5 2egIx0pEcocTMb8jgX74Xdeem3DLS54WwYI64sg3PgcKGAvaJon5PzKNQ3TRw/T35p+K 0h0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742595260; x=1743200060; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=TsLjmM+cZHdukY3VI/Tt/97n2gAmHQgX0ISkWP9p+u0=; b=HZtdlEyQwoFUdwVABKvQDAVsDrVvSS0elEiWXHl/I0VH/9iaNJEyze5mu05l7plQ6N /ZEyVKy3PpR9XNoliRTU71n/k7rBiVzUbdYUYHqDLbL+Vnp+XjRVgUHMB7fyxesUVawD x1QvL39TiiIMli1mebCwaz7lWN0qVH62qC6q9wDaVOfHqzk2siBirDyq+mZ2CwtenLJB 89Xvv0/r672021+7TEujL9o72E3afyT3vQr3tWhw3rnvgyKnV7eXCGaFRWhM4r+lFhzV igWi58sE/4cwZmooiWA1oCI6zNWhCawns5uck5ZT78DdWR3yWyOV0dvCAr+vYcdy5/pe aDRA== X-Gm-Message-State: AOJu0Yxw7MAvssa0h2L/nF5Ww9ofz7i0PQCih9RzkhARhaWd+OiRgyM4 73r2bHGQlRYVmVA0E/fmRHelr/chC2xi68Z1KndVZsL7+/EYcRcqyWLMLQOuxXiNmGSH/T4I7We M5OrvQaGm4X6m/DAiXT+alU7zLauTFVSFw3J+EdJ8hPug5UjnNLKR12OOUJ5Ig88AsxwbfTxahF lebZYMiu98t5wO1egIeel3C9l73SSSiI6k1fEnPkY= X-Google-Smtp-Source: AGHT+IG61Gh3dVaQ8m8E+VJ1cbKzNFAo/sJPloLl5SAzhNvbvMvlJDBuL2H7YmDpEAImrZyK7G/+7sFFyBZUtA== X-Received: from oacpy22.prod.google.com ([2002:a05:6871:e416:b0:2bc:6860:2684]) (user=steadmon job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6871:a58f:b0:2bc:8c86:ea31 with SMTP id 586e51a60fabf-2c7802fff9emr3108785fac.20.1742595260197; Fri, 21 Mar 2025 15:14:20 -0700 (PDT) Date: Fri, 21 Mar 2025 15:14:09 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: Subject: [PATCH v2 3/5] libgit-sys: parallelize build with Cargo's jobserver From: Josh Steadmon To: git@vger.kernel.org Cc: "brian m. carlson" , Phillip Wood Cargo provides GNU Make flags that can be used to connect to its jobserver for managing parallel builds. They are not automatically passed to any `make` invocations, so let's add that to our build.rs script. Signed-off-by: Josh Steadmon --- contrib/libgit-sys/build.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/libgit-sys/build.rs b/contrib/libgit-sys/build.rs index 19407663f5..1237c9a37f 100644 --- a/contrib/libgit-sys/build.rs +++ b/contrib/libgit-sys/build.rs @@ -8,9 +8,11 @@ pub fn main() -> std::io::Result<()> { let crate_root = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); let git_root = crate_root.join("git-src"); 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([ From patchwork Fri Mar 21 22:14:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Steadmon X-Patchwork-Id: 14026089 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB1C622FF4D for ; Fri, 21 Mar 2025 22:14:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595265; cv=none; b=d2NS0iGEGWNeKwNkiFoaAg1G/B5D5k1EDhb3aEIbJFnYGlXgkoCdq61N7pf/r6ZAEriBzjdnHZRPFhDS+mav6Ea5YziFyxZYRSz2C34opxXDwhAUFcltMUAl71iHffb8zx1R7FdzPz/w5+pykeV/wIjtHvfoEJGvy8jtQORbw78= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595265; c=relaxed/simple; bh=SXQxqvcl51eQdBFx6XgZhjdKY+isdFKWWwkPxXhmGZI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FwXNoNOCXgIMKH2Loh5a4pjKHNxViBOg+Uqs5hXLrYyMW1onkqtHESgJoQDTwFPBmPJXoBPhTuNquidwNQJsPot9oUCLaeycsacHPb0gh/akgkeSsBEWV2YZtCwv91c3azHwi36W5FUc6vae+6hMRaoeoEGlEPRcqk2vrT3cyEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gcGRJOSN; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gcGRJOSN" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2ff69646218so6080290a91.3 for ; Fri, 21 Mar 2025 15:14:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742595262; x=1743200062; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=gvj0h43I4xmzFi92yvvKoyUcHm2ce3WpkFuhpwJQti4=; b=gcGRJOSNh8aBdTMpXJoH7gPy9grNmUacg4PDAAuXvbOD0a2SVMTDNTMLHfmF0QumWi o+r2atCBcq2oydWmqROEohBKqf5zI0M2Fr2j56cVl90eKuAPq4JMmzndXcYG7FHr1HN+ 3AbntDyiSoB/QU8ip+XOp87WEp0pHTxo432qdh+vHV4d0TsG3SOUlHE6MCh/HCItRb4b fcXwPBbrNYBz6p3ylhPSH4e03LfLZrhwO4hj0qKuGW2V6TYO3rdgZa3mtFvMxB3Pr/Qq HhPibFrZqxgcC/YmF2o+VMtiEqtaWrTIgSVc3ph8VmQuEuXHcqd1QyA8eAQB+441xsML Togw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742595262; x=1743200062; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gvj0h43I4xmzFi92yvvKoyUcHm2ce3WpkFuhpwJQti4=; b=CEZ6e6QG2GNIyctyIBK0MrKajoJ02ZaUvGjx7v4Kt6+673vZ5oetyIvjTzn+VG6z42 DDLUonsbVD8vBXsrgfReB4wbqN/AnFgFr9GEtHil9lJG0FYoDA/mgbgzIAy8poFBi6Pe aFVHDxuxGuSeU9vLVrEGebAvPDVWVjyWS+1x/qLnGezmVbBpwfmj/8lBCAZtf8ffmQtG ShcSOJC778Ib31FVorBiOdsaO/8EvKIFOycUJq10gclAeJuewnfQngX46GiIj4zuhJXP shB6v26nXSwbRY4tmdhFbb+EXAs7nPZ79Lb3Jz6jOsTQveUMJOh83r8lkHZLJldLHkjG 3xzg== X-Gm-Message-State: AOJu0Yy8cJOyrFl+ayCK+g18hAFir1WDeSvRAv/WBf1poZ+Re89FKIqo wYYPKJp2pf/CAIo3Qq+4Lo0UsCjERoFoGt7MfLxiwXNmBEUj5qiqKr2kD++jA4Brut2QQIn7dvH thqH5Ie1YgLWvcYj41eYJxwhILskXmjHJuv+LenIYXZh6tHoO3xVoBULy7FOC6BLgWKEXn4pcK1 Uy4O/8veGt/oQc1AJ03pPveoadGOxM3FLc0oRKNVM= X-Google-Smtp-Source: AGHT+IGL8drlTa6gcqMcEhzh8GZdYLkcgUij7x3D9GtZeaBH2wQFAUjKQPqm8wsNlahj24J+H3CwYpLv6m7Gvw== X-Received: from pjg8.prod.google.com ([2002:a17:90b:3f48:b0:2e9:38ea:ca0f]) (user=steadmon job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4c4a:b0:2f4:4003:f3ea with SMTP id 98e67ed59e1d1-3030ff21efdmr8762900a91.33.1742595262043; Fri, 21 Mar 2025 15:14:22 -0700 (PDT) Date: Fri, 21 Mar 2025 15:14:10 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <390695ac1f929727478e6c8c26f5c69b9a6c068a.1742594960.git.steadmon@google.com> Subject: [PATCH v2 4/5] libgit-sys: exclude unnecessary directories in git-src From: Josh Steadmon To: git@vger.kernel.org Cc: "brian m. carlson" , Phillip Wood We can avoid copying tens of megabytes of unnecessary source files by excluding a few directories which are not needed to compile libgitpub.a. This helps us stay below crates.io's 10 MB size limit. Signed-off-by: Josh Steadmon --- Makefile | 2 +- contrib/libgit-sys/Cargo.toml | 12 ++++++++++++ contrib/libgit-sys/build.rs | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 91677448ba..1574fc76e2 100644 --- a/Makefile +++ b/Makefile @@ -3500,13 +3500,13 @@ coccicheck-pending: $(COCCICHECK_PATCHES_PENDING_INTREE) # "Sub"-Makefiles, not really because they can't be run stand-alone, # only there to contain directory-specific rules and variables +ifndef NO_GITWEB ## gitweb/Makefile inclusion: MAK_DIR_GITWEB = gitweb/ include gitweb/Makefile .PHONY: gitweb gitweb: $(MAK_DIR_GITWEB_ALL) -ifndef NO_GITWEB all:: gitweb endif diff --git a/contrib/libgit-sys/Cargo.toml b/contrib/libgit-sys/Cargo.toml index e0623022c3..1c1efb6211 100644 --- a/contrib/libgit-sys/Cargo.toml +++ b/contrib/libgit-sys/Cargo.toml @@ -7,6 +7,18 @@ links = "gitpub" rust-version = "1.63" # TODO: Once we hit 1.84 or newer, we may want to remove Cargo.lock from # version control. See https://lore.kernel.org/git/Z47jgK-oMjFRSslr@tapette.crustytoothpaste.net/ description = "Native bindings to a portion of libgit" +exclude = [ + "git-src/.github", + "git-src/Documentation", + "git-src/ci", + "git-src/git-gui", + "git-src/gitk-git", + "git-src/gitweb", + "git-src/oss-fuzz", + "git-src/perl", + "git-src/po", + "git-src/t" +] [lib] path = "src/lib.rs" diff --git a/contrib/libgit-sys/build.rs b/contrib/libgit-sys/build.rs index 1237c9a37f..7e1244fcd5 100644 --- a/contrib/libgit-sys/build.rs +++ b/contrib/libgit-sys/build.rs @@ -17,6 +17,9 @@ pub fn main() -> std::io::Result<()> { .current_dir(git_root.clone()) .args([ &format!("CARGO_OUT_DIR={}", dst.display()), + "NO_GITWEB=YesPlease", + "NO_PERL=YesPlease", + "NO_TCLTK=YesPlease", "INCLUDE_LIBGIT_RS=YesPlease", &format!("{}/contrib/libgitpub/libgitpub.a", dst.display()), ]) From patchwork Fri Mar 21 22:14:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Steadmon X-Patchwork-Id: 14026090 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DD413233714 for ; Fri, 21 Mar 2025 22:14:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595267; cv=none; b=b8LxIAylpmkmM/oO1z3GRrPRXCnLmSdzTuRdTljXFGOcL2EndKCgGmRl0/7XC9RJfGf+TvFQzzzpzznqzenv12GkYqTpp6r9gp/bwyCoksmbr2YY4S5Y6n28V3ceDNCguOsqmeQKMqbQuEV4Gr4S1+E0SzV/5Rm3BE8P8vcnWoQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742595267; c=relaxed/simple; bh=Qi+amG2NLM2o2V2RsVNTYhZmLNUrBhUKdRasfBUlN8w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Vx4FCM2YiJ5kUbkJYNhq9YvH0gLRJa8wToFbo9Ro6q4ApKKAA0L4febD0oroBIpMuXz5ksST525b6MGjBwr1IF71TIq7vwXhWE6dkXJJmczMCBVyvibdyEseYxL2yj+tT69voijl8vkA7E03FJf1QnQP8BKNHCaj+stlY1Z+TtE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=eoSE5y7I; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--steadmon.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eoSE5y7I" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2241ae15dcbso44462735ad.0 for ; Fri, 21 Mar 2025 15:14:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742595264; x=1743200064; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NsZqir39Mrn06qV1OENEGcHX2M4YNPQG7AnXRpopEGQ=; b=eoSE5y7IrI436CTsD5A9E4GMAnFjDVCIGzekTVCKLBg/h4/6jMSwP6Nos8sNGpEqYO FC/DaSIaZscLEF3bOVxrKThuqgHpBA+Nl3EcLaTmWthmNszBjlawUHB4hK/imLKUw6JZ fGaSfzNfKVWKapbs6o95vCoa6JfoTUkdtN8anWLo1xIE4ndV0N8nRvCiM+jyhAWKs4hh 5TpQ4TQi/Z4snp1rfb2dAfdoCjlHXbG5GyCvlE0qYf5V6ktPr1Hkzq8s1FJswrAizv1v puiR4+R7vKxANM3M8+FTthUuDBG/JmusV+0NhXTKFOSsZeUlDMyFnW+M7eKX6ZqKT6/H JmLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742595264; x=1743200064; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NsZqir39Mrn06qV1OENEGcHX2M4YNPQG7AnXRpopEGQ=; b=e0qHI+kMDpFjBb7UgatFrfofeSqQZ3L/YNRq64/38KVaiWzGdLKRBJFwQI4/9y8vO3 WR4fh+r8n8neHxzZ/QXAy2UYkQ5jx+Tz83mqpdRi59AxY5d+TeiyyUcs/sHmk7syTYeo J98BR8eHfZdYt1vLTYYPdYQKFIJvJI/b5E3WYVvolAx8OQtjxeVgBcD7LcxS5GEAgGgL 0k3nZrPFupP5udWL1o/Z92cFym49Aw0REil7OeB3k1jg8jjZvgpQH4aIIfHbQTm8/JKH tlQ0F2cPmZk5oJ+xScbYb/7TwLzOr4JRTnWTjOPC9LcRbb9AYjPDhvBqjXS5kvlgvbns /gjw== X-Gm-Message-State: AOJu0YxaoyeAZ9S8ZmqD6NxQGIGMvvZF2ucgYdymKN0QNpCrLaIy7+kg fKgRw13r/57MUbKKcSFFczTxhnpblQvbau9ASm0WMFayx5Awh18K4bM9WisFMq/jVUDC7/MCyVO 7XYm0z76jOOqw4vgbVpcAPWecW0VC8qqgbJ4Bz2mzdSntB3qrFMsZ+LGoyTA7BYuUJJA9oOC9W6 Szo0iFlEZkJ+SR3W/iEdf7X3Cs7HFL++4rUvdIdA8= X-Google-Smtp-Source: AGHT+IFQXgTapaB+VM7/gNMQyvlM/bS7jIOgC1Vkuu5V93SSylFRTBSf2LxO9/Y2jZIDuJRJWN05VxsO41jX/A== X-Received: from pfmx7.prod.google.com ([2002:a62:fb07:0:b0:730:796b:a54a]) (user=steadmon job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:a90:b0:736:5664:53f3 with SMTP id d2e1a72fcca58-739059ffb6bmr7740263b3a.15.1742595263998; Fri, 21 Mar 2025 15:14:23 -0700 (PDT) Date: Fri, 21 Mar 2025 15:14:11 -0700 In-Reply-To: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <3a87f5469374e442fc812eb8b6052f02331df96a.1742594960.git.steadmon@google.com> Subject: [PATCH v2 5/5] libgit-{sys,rs}: add license and description fields From: Josh Steadmon To: git@vger.kernel.org Cc: "brian m. carlson" , Phillip Wood Add license and description fields for libgit-sys and libgit-rs. These are required to publish our crates on crates.io. Signed-off-by: Josh Steadmon --- contrib/libgit-rs/Cargo.toml | 2 ++ contrib/libgit-sys/Cargo.toml | 1 + 2 files changed, 3 insertions(+) diff --git a/contrib/libgit-rs/Cargo.toml b/contrib/libgit-rs/Cargo.toml index c3289e69db..9747ba3cb4 100644 --- a/contrib/libgit-rs/Cargo.toml +++ b/contrib/libgit-rs/Cargo.toml @@ -5,6 +5,8 @@ edition = "2021" build = "build.rs" rust-version = "1.63" # TODO: Once we hit 1.84 or newer, we may want to remove Cargo.lock from # version control. See https://lore.kernel.org/git/Z47jgK-oMjFRSslr@tapette.crustytoothpaste.net/ +description = "Proof-of-concept Rust API for a portion of libgit" +license = "GPL-2.0-only" [lib] diff --git a/contrib/libgit-sys/Cargo.toml b/contrib/libgit-sys/Cargo.toml index 1c1efb6211..cfbcca9c8c 100644 --- a/contrib/libgit-sys/Cargo.toml +++ b/contrib/libgit-sys/Cargo.toml @@ -7,6 +7,7 @@ links = "gitpub" rust-version = "1.63" # TODO: Once we hit 1.84 or newer, we may want to remove Cargo.lock from # version control. See https://lore.kernel.org/git/Z47jgK-oMjFRSslr@tapette.crustytoothpaste.net/ description = "Native bindings to a portion of libgit" +license = "GPL-2.0-only" exclude = [ "git-src/.github", "git-src/Documentation",