Homebrew 使った Ricty インストールエラー で分からなかった事 in Yosemite
作業環境の構築は、自前の shellscript を用意していて、そいつを流すだけ、な感じにすることで負担軽減をしている。
が、何やらエラーで止まってしまっているご様子。
見ると、Ricty のトコらしく。
しかも、それは 1 つのみならずと、さらに 2 つ立て続け、と来たもんだ。
一気に気が滅入る。
よく見られる xquartz のエラーに関しては、随分前に遭遇していたので認識はしており、既に対策をしていたのですが。
何よ。
automake が無いとか、
==> Installing ricty dependency: fontforge Error: /usr/local/opt/automake not present or broken Please reinstall automake. Sorry :(
pkg-config が無いとかって。
==> Installing ricty dependency: fontforge Error: /usr/local/opt/pkg-config not present or broken Please reinstall pkg-config. Sorry :(
こんなの前からあったっけ? ...何か納得できない。
と何を血迷ったか、formula 何それ?、ってモードになってしまった。
今更に。素人なのに。ruby 何も知らないのに。
ricty のインストールには、sanemat/homebrew-font
を利用させて頂いております。
今回はここが迷宮の入り口となるわけです。
brew cask で "xquartz" をインストールし、depends_on
で automake と pkg-config を謳えば良い
長くなりそうな感じがするので、先に結論。
やることは 2 つ。
残念ながら、ricty の formula 内だけで解決する方法は分かりませんでした。
まず、ricty インストールのプロセス前に cask で xquartz をインストール
幸いなことに、homebrew-cask に xquartz があります。
なので、;
% brew cask install xquartz
試してませんが、ricty の formula が走る前に、これを入れておいた方が良いと思います。
次に、ricty.rb に depends_on automake
と depends_on pkg-config
追加
今度は ricty の formula での話です。
automake と pkg-config が無い、と怒られるので、
ricty の formula 内に、この依存関係を指定します。
該当部分辺りだけ示しますと、こんな感じになるかと。;
depends_on "automake" => :build # 追加 depends_on "pkg-config" => :build # 追加 depends_on 'fontforge' => 'with-python' :
ちなみに、この 2 つのツールの導入は、勿論直接 brew install
してしまっても良いとは思います。
ricty インストールの前のタイミングに、まとめてこうでも。;
% brew cask install xquartz % brew install automake % brew install pkg-config
と言うことで一応、sanemat/homebrew-font
を clone させて頂いて、
自分の formula としてこんな感じにしました、と。*1
さて。
以下、こうなるまでの試行錯誤。
恐縮ではありますが、たぶんそんなに重要な事を書いていないかもしません。
ご存知の方には、当然の事ばかりかと。
また、もしかしたら本当に分かってない故、間違ったことを書いているかもしれません。
そんな誤記、誤解がございましたら、遠慮なくご指摘頂けると助かります。
すみません。
brew install
してないけど、入ってくるもの。depends_on
のたぶん。
経験的に、brew install ...
していないアイテムが入ってきているのは横目に捉えていたので、恐らくこう言う事なのだろうと。
この仕組みをもって、"必要なのに無いアイテム" を入れてもらうようにすればよい、と察する。
ドキュメント みてみると、こういうのは "依存 dependency" とか言うらしく、depends_on
を使うというのはすぐ把握できた。
xquartz も、automake も pkg-config もこの depens_on
によって入れてもらえるようにすればいーじゃん?、と。
如何にも素人じみた稚拙な思考回路(笑
ちなみに、homebrew の世界で xquartz は "x11" とな。
例えば、xquartz を指定するのならば depends_on :x11
とかと書くみたいなのだけど、気になるの記述があって。
x11 とかみたいんは "特殊な関係 special conditional dependency" 言ってますが、これ、どういうこと?
xquartz (x11) は? depends_on :x11
-> 味しない
と、考えてばかりいてもしょうがないので、ricty.rb を clone し、実際に動かしながらやってみることに。
しかし全力で全開に分からない prz
まず、xquartz について。
ricty.rbを見てみると、depends_on 'fontforge' => 'with-python'
。
fontforge
。
でしょうね、とは思うものの、あー、って感じ。またお前か、と。
改めて出力されているエラーに目をやると、cairo
と pango
と言うアイテム上で怒られている様子。;
$ brew install ricty ==> Installing ricty from woowee/homebrew-font cairo: Unsatisfied dependency: XQuartz 0.0.0 Homebrew does not package XQuartz. Installers may be found at: https://xquartz.macosforge.org pango: Unsatisfied dependency: XQuartz 0.0.0 Homebrew does not package XQuartz. Installers may be found at: https://xquartz.macosforge.org Error: Unsatisified requirements failed this build.
fontforgeの formula 覗いてみると、確かに cairo
とpango
が。
どうやら、そういうことみたい、だと。
でも見ると、fontforge.rb内でも、x11 に関する指定があるけどな、とは思ったものの、
とりあえず、ricty.rbにも depends_on :x11
って追記してみる。
結果。変化ナーシ。
とここで、エラーの内容が変わっていることに気付いた。具体的に引用。;
$ brew install ricty ==> Installing ricty from woowee/homebrew-font ricty: Unsatisfied dependency: XQuartz 0.0.0 Homebrew does not package XQuartz. Installers may be found at: https://xquartz.macosforge.org cairo: Unsatisfied dependency: XQuartz 0.0.0 Homebrew does not package XQuartz. Installers may be found at: https://xquartz.macosforge.org pango: Unsatisfied dependency: XQuartz 0.0.0 Homebrew does not package XQuartz. Installers may be found at: https://xquartz.macosforge.org Error: Unsatisified requirements failed this build.
ricty: Unsatisfied dependency: XQuartz 0.0.0
が加わっている。
そういうことですなのですね。
xquartz (x11) は? depends_on "fontforge" => ["with-x"]
-> 味しない
じゃなくて、fontforge に対してしなくてはならなかったり?
と言うことで、文字列や配列を使った指定方法の記述が気になりだす。
なので、今度はこんな感じを depends_on "fontforge" => ["with-x"]
書いてみる。
ちなみにこの参照先は、コレ。
結果。
勿論、変化ナーシ。勘違いだし。
ちなみに後でわかったのですが、fontforge がなぜ Unsatisfied dependency: XQuartz 0.0.0
と謳わないかは、
depends_on :x11 if build.with? "x"
の "if" のせいっぽい。
cario と pango 側では、depends_on :x11 => :recommended
となっている。
xquartz (x11) を指定する意味って?
結果、xquartz に関しては元に戻しました。
ricty のインストール処理前に brew cask install "xquartz"
。
xquartz (x11) に関しては、依存関係を指定しても、他のツールみたく "必要なのに無いんだったら獲ってきてインストールしてやる" な事はしない、と言うことで良い?
先のエラーの内容が変わった、で触れたように、
エラーとしてユーザーへ伝えるための仕組みとして存在する、という理解でよいのかな。
導入まではやらない(やれない?)けど。
とは言え、
なぜ、他のアイテムと同じように扱わない/扱われない、この "同じにしないこと" の理由が自分の想像力を超えていて、今いちスッキリしないところ。
それがドキュメントにあるような特別な依存関係 special conditional dependency 、ということなのでしょうか?
確かに brew deps ricty
で見た時、x11 って無くて「?」と思ったけど。
$ brew deps ricty autoconf automake cairo fontconfig fontforge freetype gettext glib gobject-introspection harfbuzz icu4c jpeg libffi libpng libtiff libtool pango pixman pkg-config python xz
automake と pkg-config については、素直に depends_on
で
こちらはすんなりと、ricty の formula 内に、当該ツールの依存関係を記述することで行けるようになった。
fontforge 等の formula を覗いて、参考にさせていただきながら、以下の 2 行を、fontforge の依存を指定している行の前へ追加。;
depends_on "automake" => :build # コレ追加 depends_on "pkg-config" => :build # コレ追加 depends_on 'fontforge' => 'with-python' :
:build
シンボル symbol を指定した理由は、深い意味はなく、参照元とした fontforge でそうだったから。
見ての通り、ビルドの時だけその依存関係 dependency を見る、というな感じらしいのですが。
fontforge の formula にも、キチンとあるわけで。;
# Autotools are required to build from source in all releases. # I have upstreamed a request to change this, so keep monitoring the situation. depends_on "autoconf" => :build depends_on "automake" => :build depends_on "pkg-config" => :build : *snip* depends_on :python if MacOS.version <= :snow_leopard
なぜ? と。
depends_on
によるインストールでは、:build
じゃない?
ってこと?
ちなみに、以前は確かこんなエラーに遭遇しなかったよな、と言うのを確かめたくて、辿ってみることにした。
すると。
やはり以前 :build
シンボルは指定されてなかった様子。
「じゃいつ、どんな背景をもって :build
を付けることになった?」というのも気になるわけで。
この :build
シンボルの追加修正が入ったのは、今年 2014/06/02 のこと。
"fontforge: modernize autotools deps" なコメントのもとに対応されているようなのだけど、その背景の把握の方法が分からず、理由がわからない。*2
いずれにせよ、具体的な内容は分からないのですが、ある意図をもってなされた事であるの間違いない様子。
さらに、ソース内に気になるコメントが。
# Autotools are required to build from source in all releases. # I have upstreamed a request to change this, so keep monitoring the situation.
様子見、って?
ちなみにこのコメント入れられたのは、2014/10/14。割と最近。
ところで
xquartz の depends_on
を検討している中で、depends_on "fontforge" => ["with-x"]
な指定方法を考えている時思ったことがあるのですが。
depends_on 'fontforge' => 'with-python'
の python って必要なのでしょうか。
この辺りは、この辺りで議論されていたようで、
fontforge.rb には、今年の夏ごろに手が入れられたようですが。
と言うことで、駄文うえに長文、恥ずかしい限りで。失礼しました。
で、おしまいです。