macOSにfdcloneをインストールしていたのですが、最近のhomebrewでは
brew search fdclone
==> Formulae
fdclone ✔ (deprecated)
となってしまいまして、廃止だということになってしまいました。まだinstallできるけど随分と古い環境でmakeされたファイルがインストールされてしまいます。今後も使いたいので、自前でなんとかしてみました。
公式にパッチ送ったりすると、のちのち面倒な対応が発生したりすることになりかねないので、方針としてはとりあえず、ローカルのtapとして設定をするようにして、自前でmakeします。
前提として最新のhomebrewの環境がインストールされていること。当然ですが、コンパイラ環境もインストールしておきます。
#!/usr/bin/env bash
set -euo pipefail
# 1. ローカルTapリポジトリを作成 (既に存在する場合はスキップ)
if ! brew tap | grep -qx "local/fdclone"; then
echo "==> Creating local tap: local/fdclone"
brew tap-new local/fdclone
else
echo "==> local/fdclone tap already exists."
fi
# 2. Tap ディレクトリおよび Formula ディレクトリのパスを取得・作成
TAP_DIR="$(brew --repository local/fdclone)"
mkdir -p "${TAP_DIR}/Formula"
# 3. Formula ファイル (fdclone.rb) を生成
echo "==> Generating Formula: ${TAP_DIR}/Formula/fdclone.rb"
cat << 'EOF' > "${TAP_DIR}/Formula/fdclone.rb"
class Fdclone < Formula
desc "File Manager for UNIX-like OS"
homepage "http://www.unixusers.net/authors/VA012337/soft/fd/"
url "http://www.unixusers.net/authors/VA012337/soft/fd/FD-3.01j.tar.gz"
mirror "https://deb.debian.org/debian/pool/main/f/fdclone/fdclone_3.01j.orig.tar.gz"
version "3.01j"
sha256 "fe5bb67eb670dcdb1f7368698641c928523e2269b9bee3d13b3b77565d22a121"
license :cannot_represent
# Rust製のコマンドライン検索ツール `fd` とコマンド名が重複するため競合を明記
conflicts_with "fd", because: "both install `fd` binaries"
def install
# macOS システムヘッダとのインクルードガード競合を回避するための書き換え
inreplace "dirent.h", "__DIRENT_H_", "__FD_DIRENT_H_"
inreplace "printf.h", "__PRINTF_H_", "__FD_PRINTF_H_"
# Makefile の依存関係順序を担保するためシングルスレッドでビルド
ENV.deparallelize
# Homebrew の Cellar パス / man パスに合わせてビルド・インストール
system "make", "PREFIX=#{prefix}", "CONFDIR=#{etc}", "all"
system "make", "PREFIX=#{prefix}", "CONFDIR=#{etc}", "MANTOP=#{man}", "install"
# サンプル設定ファイルを pkgshare に配置
pkgshare.install "_fdrc" => "fd2rc.dist"
end
def caveats
<<~EOS
To install the initial config file:
install -c -m 0644 #{opt_pkgshare}/fd2rc.dist ~/.fd2rc
To set application messages to Japanese, edit your ~/.fd2rc:
MESSAGELANG="ja"
EOS
end
test do
# fd のシェルモード (fdsh) を利用して正常動作を確認
assert_match "Hello Homebrew", shell_output("#{bin}/fdsh -c \"echo Hello Homebrew\"")
end
end
EOF
echo "==> Done! Formula created at ${TAP_DIR}/Formula/fdclone.rb"
echo ""
echo "To build and install fdclone, run:"
echo " brew install --build-from-source local/fdclone/fdclone"
このbashのスクリプトを実行するとローカルのtapにFormulaファイルの設定が書き込まれて、これをbrewコマンドでinstallするとfdcloneがmakeされて、従前のようにfdcloneを使うことができるようになります。
設定ファイルは ~/.fd2rc ですので(自動でインストールされます)、こちらを書き換えると設定の変更などができます。
なんか最近のmacOSのコンパイラだとmake通らないなあ、と思っていたのですが、AIさんに聞いたところ、「macOS システムヘッダとのインクルードガード競合を回避するための書き換え」があればmake通るとわかりまして、その反映をしたFormulaファイルをAIに作成させています。

