sci

最果て風呂

libsystem_symptoms で悩む

先日の実験で意外と PHP が良かったものですから、まじめにインストールをして使ってみようと思いました。ですがインストールが思うように行きません。そこで奈幾乃のとった行動とは……

前回の作業では先を急いでいましたから、エラーが出る度に機能を無効にしていって、結果、下記のようなオプションになりました。

./configure --disable-libxml --disable-dom --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear

「こんなに無効にしてまともに動くのかしら?」とは思いましたが、まぁ普通に動いて実験もできました。でも XML ってウェブでかなり扱われていたんじゃないかしら?と疑問に思うようになりました。WEB 開発言語三銃士のひとりなのにね……

ちょっとまって。libxml ってシステムに入ってたような気がするのだけど……。/usr/lib 以下にあったわ。これ、configure スクリプトが見に行ってないのかもしれない。試しに下記のようにするとコンフィギュが完了した!

./configure CFLAGS=-I/usr/include LDFLAGS=-L/usr/lib

しかし make をしてみると下記のエラーが……

clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [ext/opcache/opcache.la] Error 1

再度 configure スクリプトの help を見ると --disable-opcache というオプションがありますね。−−−ということで再度挑戦!

ld: file not found: /usr/lib/system/libsystem_symptoms.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sapi/cli/php] Error 1

う〜ん、なかなか進まない。野良で libxml を入れた方が早そう。

libsystem_symptoms.dylib で検索をしたものの、情報があまりありません。StackOverflow では下記のコマンドを入力するといいよ!と書いてあるのだけれど、中身が何をしてるのかわからないので怖い。sudo だし……

sudo /usr/bin/sed -i.backup -E -e 's@/usr/lib/system/libsystem_symptoms.dylib(, )?@@' \
$(grep -ril /usr/lib/system/libsystem_symptoms.dylib \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib)

ちょっずつ分解していきましょう。

grep の部分は内部に "/usr/lib/system/libsystem_symptoms.dylib" と記述のあるファイルを /Applications/Xcode.app/.../usr/lib ディレクトリ以下から探しているわけだよね。そしてそのファイル達に対して sed を実行するわけね。

sed-i オプションはファイルを置き換える、-E は拡張された正規表現を使う、-e は次のコマンドを実行させる、とのこと。

そのコマンドは 's@/usr/lib/system/libsystem_symptoms.dylib(, )?@@' なのだけれども、はじめて見る形だわ。"s" は置換。"@" の意味がわからなかったけれども、これは普段使っている "/" の代わりなんだって。検索置換したい文字列の中に "/" が入っていた場合にエスケープするのが面倒なので、例えば "@" や "!" などの文字が使えるのだとか。これは豆ですね。見慣れた形にすると 's/hoge(, )?//' ということになる。

単純に削除するってことですね。でもこれって libsystem_symptoms.dylib を無かったものにするということでしょ?システムにこういう変更を加えてもいいのかしらね?

libxml2 といえば、Gnuplot をインストールする時に gdlib を要求し、これが freetype2 と fontconfig を要求し、そしてこれが libxml2 を要求し、という具合に連鎖していったことを思いだしました。「iTunes がおきあがり なかまに なりたそうに ……(2ch の誰か)」そのものでしたわ。

そもそも Apple/usr/lib/system/libsystem_symptoms.dylib を入れてないのがいけないねん。パッケージミスという話もあるけれど、もう XCode 8.2 になっているので、意図的というか仕様なんでしょうねぇ。

結局、最初の予感通り、野良で libxml2 をインストールすることにしました。すると ./configure にオプションを付けなくてもビルドまで完了するようになりました。テストの結果は下記。ちょっと良くなったかな?

=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped    :   48
Exts tested     :   26
---------------------------------------------------------------------

Number of tests : 15222             10166
Tests skipped   : 5056 ( 33.2%) --------
Tests warned    :    1 (  0.0%) (  0.0%)
Tests failed    :    2 (  0.0%) (  0.0%)
Expected fail   :   35 (  0.2%) (  0.3%)
Tests passed    : 10128 ( 66.5%) ( 99.6%)
---------------------------------------------------------------------
Time taken      :  387 seconds
=====================================================================