====== FreeBSD PortsにFlavorsなる仕組みが出来てた ======
''graphics/pecl-imagick''をインストールしようと[[https://www.freshports.org/|FreshPorts]]でportの情報見てたら、"Package flavors"なる項目があるのに気付いた。
[[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/flavors.html|ハンドブック]]によれば、Flavorsとは1つのportに複数のバリエーションを持たせる方法とのこと。多くの機能といくらかのパッケージ依存関係を持つノーマルバージョンと、最低限の機能と依存関係しかない軽量バージョンの2つのFlavorをportに持たせるとか、GUIツールキット毎にFlavorを分けるとか、そういう使い方を想定しているようだ。
2017-11-30にリリースされた仕組みで、どうやらPythonモジュール関連portsの整理かなんかで導入された雰囲気(一次情報を追ったわけではないので当てずっぽう。同日にpy36-*のportsは全てFlavor化されpy-*に統合されている)。
件の''pecl-imagick''について言えば、php71/php72/php73とPHPのバージョンごとにFlavorが用意されている(2019-08-15現在)。Flavorの有無はそれぞれのportのディレクトリで''make pretty-flavors-package-names''とすると確認できる。
$ cd /usr/ports/graphics/pecl-imagick
$ make pretty-flavors-package-names
php73: php73-pecl-imagick-3.4.4
php71: php71-pecl-imagick-3.4.4
php72: php72-pecl-imagick-3.4.4
Flavorの指定はmakeでFLAVOR変数に渡せばおk。
# make FLAVOR=php73
これはなかなか便利ですな。
以前は、''lang/php71''を使いたいのにPECL拡張モジュールのportはPHP 5.6向けになってて、PHP 7.1用には自前でpeclコマンド叩いて入れなきゃならないって事があったけど、Flavor使えばports/packagesにおんぶにだっこできて楽チン。
あ、書いてて思い出したけど、Flavor付きのportはFlavorごとにpackageが分かれる点は留意の必要あり。上のコマンド例で分かる通り、php73フレーバーでpecl-imagickをインストールした場合、パッケージ名は''php73-pecl-imagick''となる。