configure スクリプトを実行してビルド環境を設定し、ビルドとインストールをするには、ソースパッケージがconfigure スクリプトを含むように作られていないといけません。なので今回は無理です。
- homebrew にはbsdmakeのformulaeがあるようです。これを使えばBSD用のMakefileでビルドできそうです。ただし、このmakeから呼び出されるツール (installなど) もBSD向けのものを使わなければならない可能性があります (わたしは試してないので推測ですが)。これらをhomebrew でどのくらい面倒見てくれるかは不明です。
追記
質問者さんがいつまでたっても試してくれないので、自分でやってみることにしました。
試した環境はmacOS Sierra 10.12.xです。
まず、BSD系ならmakeにはGNU makeではなくBSD makeが必要になるだろうことは容易に想像がつきます (portsコレクションなどには逆にgmakeでないとビルドできないパッケージもありますが、コアツールでは確実にこれが必要です)。
- homebrewでbsdmakeをインストールしました (手順は略)。BSDのビルドシステムで使われるインクルードファイル (
bsd.prog.mk
など) もちゃんと含まれています。
Cコンパイラ、リンカは標準化のおかげでどのOSも似たようなものなので、OSに入っているclangやgccを使うことにします。
NetBSD
「最新の」という条件なのでCURRENTがいいのかもしれませんが、とりあえずRELEASE-8でやってみました。
https://ftp.netbsd.org/pub/NetBSD/NetBSD-release-8/src/usr.bin/sed/
できました。詳細な手順は書きません (自分で試せば以下の説明で十分わかるはずです)。
- Nullabilityのチェックでコンパイルが失敗するので、bsdmakeの実行時変数として
COPTS
に-Wno-nullability-completeness
を追加。
__UNCONST
という識別子が未定義だとしてコンパイルが失敗する。NetBSDでは <sys/cdefs.h> で定義されているらしいが、macOSの <sys/cdefs.h> にはない。ソースコードを見たところとりあえずなくしてしまっても動きそうなので、#define __UNCONST(x) (x)
をmacOSのsys/cdefs.hに追加定義したものを作り、それのパスを-I
オプションで前記のCOPTS
に加えた。
BINDIR
が定義されていないのでinstallが失敗する。本来なら/etc/mk.conf
で定義するものなのだろうが、面倒なのでこれも実行時変数として指定する。
- 実行ファイルの名前を
bsdsed
とかにしたい? これもできるので、調べてください。
FreeBSD
これもCURRENTがいいのかもしれませんが、とりあえずRELENG-12にしましょう。
https://svn.freebsd.org/base/releng/12.0/usr.bin/sed/
できました。
- ビルドシステム用のインクルードファイルが増えていますので、これも取ってきてbsdmakeに
-m
オプションでパスを指定してみましたが、Makefileの読み込みの際に文法エラーになります。bsdmakeのソースコードを探してみると、どうもFreeBSD 5.4あたり (正確ではありません) のバージョンを元にしているようで、その後の拡張に対応していないようです。
おそらく新しいFreeBSDのmakeのソースを取ってきてコンパイルすれば新しいBSD makeが手に入るのでしょう。
- NetBSDの実行結果を見て、何をすればビルドできるのかはわかっているので、自分でMakefileを書きました。最初からこうすればよかった。[3/30追記] こうなると、makeはBSDでもGNUでもなんでもいいですね。
configureシステム
これもできます。できるのがわかっているのでわたしは試しません。
ここまで説明したことを実際に自分で試していれば、configure.ac
やMakefile.am
の記述のしかたを知るだけでできます。といってもネット上の情報は英語が多いし読みづらいので、参考書を挙げておきます。
pkgsrc
macOSでもpkgsrcを使えます。しかしBSD sedのようなコアツールは含まれていないので、自分でパッケージを作ればいいでしょう。
ここまで説明したことを実際に自分で試していれば、あとはパッケージの作りかたを知るだけでできます。やりかたは自分で調べてください。
回答終り。