git: 0729ab54ee83 - main - git-arc: add initial non-FreeBSD and `$HOME` install support

From: Enji Cooper <ngie_at_FreeBSD.org>
Date: Sat, 31 Oct 2026 01:27:49 UTC
The branch main has been updated by ngie:

URL: https://cgit.FreeBSD.org/src/commit/?id=0729ab54ee8350533f319dd3a2bad25becab5bd5

commit 0729ab54ee8350533f319dd3a2bad25becab5bd5
Author:     Enji Cooper <ngie@FreeBSD.org>
AuthorDate: 2026-10-29 23:42:56 +0000
Commit:     Enji Cooper <ngie@FreeBSD.org>
CommitDate: 2026-10-31 01:27:41 +0000

    git-arc: add initial non-FreeBSD and `$HOME` install support
    
    Modify the existing code to permit setting a prefix via the `PREFIX`
    make variable, similar to what `--prefix` provides in autotools-based
    projects.
    
    Add the required compatibility glue in order to function with vanilla
    bmake, which enables installing the commands with Linux and macOS:
    - vanilla bmake requires `scripts.mk` to install `SCRIPTS`.
    - vanilla bmake does not tack `/man` on to the end of `MANDIR`, like
      with FreeBSD.
    
    While here, make the origins for various packages more generic, and
    encourage end-users to install the package via the package/port instead
    of installing it directly from source.
    
    NOTE:
    - regarding Linux support: this should now function out of the box with
      Linux as long as the host has access to an appropriate `arc` binary.
    - regarding macOS support: the arcanist/phorge packages do not yet
      exist in Homebrew or [MacPorts][1], but are being added soon.
    
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D60995
    
    [1]: https://github.com/macports/macports-ports/pull/36217
---
 tools/tools/git/Makefile   | 13 ++++++++++++-
 tools/tools/git/git-arc.1  | 15 ++++++++-------
 tools/tools/git/git-arc.sh | 31 ++++++++++++++++++++-----------
 3 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/tools/tools/git/Makefile b/tools/tools/git/Makefile
index ee73ad178486..bbf2e2e7a5f3 100644
--- a/tools/tools/git/Makefile
+++ b/tools/tools/git/Makefile
@@ -1,5 +1,16 @@
 SCRIPTS=	git-arc.sh git-mfc
-BINDIR?=	/usr/local/bin
+PREFIX?=	/usr/local
+BINDIR?=	${PREFIX}/bin
 MAN=		git-arc.1 git-mfc.1
 
+.if ${.MAKE.OS} == "FreeBSD"
+# This matches the value set in `bsd.own.mk`.
+MANDIR?=	${PREFIX}/share/man/man
+.else
+# Work with vanilla bmake on alternate OSes, e.g., Linux, macOS, etc.
+MANDIR?=	${PREFIX}/share/man
+
+.include <scripts.mk>
+.endif
+
 .include <bsd.prog.mk>
diff --git a/tools/tools/git/git-arc.1 b/tools/tools/git/git-arc.1
index d6b9ed686aaa..b1a6736d392e 100644
--- a/tools/tools/git/git-arc.1
+++ b/tools/tools/git/git-arc.1
@@ -24,7 +24,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd August 23, 2026
+.Dd October 30, 2026
 .Dt GIT-ARC 1
 .Os
 .Sh NAME
@@ -68,16 +68,17 @@ Phabricator reviews based on git commits.
 It is geared towards
 .Fx
 development.
-It requires the
-.Pa devel/git ,
-.Pa devel/arcanist-lib
+It requires
+.Pa arc ,
+.Pa git ,
 and
-.Pa textproc/jq
-packages; these will be installed automatically if
+.Pa jq .
+The dependencies will be installed automatically if
 .Nm
 is installed via the
 .Pa devel/freebsd-git-arc
-package.
+package on
+.Fx .
 .Pp
 .Nm
 assumes a one-to-one relationship between git commits and
diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh
index efc29b92865d..840be477abf3 100755
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -101,8 +101,8 @@ get_bool_config()
 #
 setup()
 {
-    [ -x "${ARC_CMD}" ] || err "arc is required, install devel/arcanist-lib"
-    which jq >/dev/null 2>&1 || err "jq is required, install textproc/jq"
+    [ -x "${ARC_CMD}" ] || err "arc is required"
+    which jq >/dev/null 2>&1 || err "jq is required"
 
     if [ "$VERBOSE" ]; then
         exec 3>&1
@@ -146,15 +146,24 @@ setup()
     trap cleanup EXIT HUP INT QUIT TRAP USR1 TERM
 }
 
-#
-# Invoke the actual arc command.  This allows us to only rely on the
-# devel/arcanist-lib port, which installs the actual script, rather than
-# the devel/arcanist-port, which installs a symlink in ${LOCALBASE}/bin
-# but conflicts with the archivers/arc port.
-#
-: "${LOCALBASE:=$(sysctl -n user.localbase)}"
-: "${LOCALBASE:=/usr/local}"
-: "${ARC_CMD:=${LOCALBASE}/lib/php/arcanist/bin/arc}"
+case "$(uname -s)" in
+FreeBSD)
+    #
+    # Invoke the actual arc command.  This allows us to only rely on the
+    # devel/*arcanist-lib port, which installs the actual script, rather than
+    # devel/*arcanist, which installs a symlink in ${LOCALBASE}/bin but
+    # conflicts with the archivers/arc port.
+    #
+    : "${LOCALBASE:=$(sysctl -n user.localbase)}"
+    : "${LOCALBASE:=/usr/local}"
+    : "${ARC_CMD:=${LOCALBASE}/lib/php/arcanist/bin/arc}"
+    ;;
+*)
+    # Linux, macOS, etc.
+    : "${ARC_CMD:="$(command -v arc)"}"
+    ;;
+esac
+
 arc()
 {
     ${ARC_CMD} "$@"