The Man Who Fell From The Wrong Side Of Sky:2019年8月24日分

2019/8/24(Sat)

[p**src] パッケージ同士の無駄な依存関係

毎度のことなんだがperlのバージョンが5.28から5.30になったことでp5-*の不整合が発生してめんどくさいのだが、今回はほとんど再インストール級の作業になってしもうた。

ちなみにperlは5.30.0で後方互換だいぶ切り捨てたのだけどその話ではない、そこいらへんはチラシの裏もしばらく前に対策しとったのでな…

なぜ再インストール級の作業な羽目に陥ったかというと、それはオレオレN6環境は

という状態だからなのよね。

この設定だと

という深い依存関係があって、lang/gcc8までさかのぼってアンインストールする必要があるのだ。 なもんでlang/gcc8をアンインストールするには今度はlibstdc++も消えるので依存するパッケージも消さんとならんのでドミノ倒しどころか壊滅状態なのだ。 ちゅーことでワイは諦めてそっと/usr/pkgごと消した(/usr/pkg/etcのバックアップは忘れないようにね!)

つーかそもそもopensslもperlに依存(RUN_DEPENDS)しとるのが判断ミスよな。

USE_TOOLS+=             fgrep gmake makedepend perl:run

これConfigure/configスクリプトの実行に必要なBUILD_DEPENDSで十分なんですわ。

おそらくこれってc_rehashとCA.plちゅーperlスクリプトのためだけにRUN_DEPENDしとるんだろうけど、こいつらbaseではperl無いこともあって使われてないのよね。 なのでbinに入れる必要もp**src的にはあまりなく、baseと同様にshare/openssl以下に放り込んどけばいいだけよね(CA.plの方はMakefile修正してそうなっとるのだが、c_rehashの方は修正漏れなんだろうか)。

どうしてもbinに入れたいってのであればopenssl-libとopensslでパッケージ分割すりゃいいわけでな。 それに今後perl5本体に同梱されるライブラリがopenssl依存になったりすると循環参照になる可能性も無いわけではないのでな、こういう本質的でない依存関係は持つべきじゃないのだ。

そしてもうひとつ、gcc8がpython37(とgsed)に依存(RUN_DEPENDS)してる理由がさっぱりなのですわ、Makefileを確認してみると

.include "../../lang/python/application.mk"

とmake実行時にshebangをpkgsrcでインストールしたpythonに置換するREPLACE_PYTHONというマクロを定義したファイルをインクルードしている。

なのでgcc8と一緒にpythonに依存したスクリプトがインストールされると推測されるわけだが、これを確認してみると

maintainer-scripts/branch_changer.py
gcc/ada/doc/share/conf.py
gcc/ada/doc/share/latex_elements.py
gcc/ada/doc/share/ada_pygments.py
gcc/jit/docs/conf.py
gcc/gdbhooks.py
libstdc++-v3/scripts/make_graph.py
libstdc++-v3/python/libstdcxx/v6/__init__.py
libstdc++-v3/python/libstdcxx/v6/xmethods.py
libstdc++-v3/python/libstdcxx/v6/printers.py
libstdc++-v3/python/libstdcxx/__init__.py
contrib/dg-extract-results.py
contrib/header-tools/headerutils.py
contrib/mark_spam.py
contrib/testsuite-management/validate_failures.py
contrib/gen_autofdo_event.py
contrib/check_GNU_style_lib.py
contrib/check_GNU_style.py
contrib/analyze_brprob_spec.py
contrib/update-copyright.py
contrib/analyze_brprob.py
contrib/filter_params.py
contrib/jit-coverage-report.py
libffi/generate-darwin-source-and-headers.py

いくつかのpythonスクリプトがヒットするんだけど、分類すると

とどう考えてもBUILD_DEPENDSで問題無さそうなシロモノばっかりなんよね。 もしgccでC/C++ソースをビルドする際にバックエンドでこれらのスクリプトが動くならRUN_DEPENDSである必要あるけど、そうでないならこちらも本質的でない無駄な依存関係でしかない。

ということで、lang/python/application.mkから更にインクルードされてるlang/python/pyversion.mkにあるマクロ

# PYTHON_FOR_BUILD_ONLY
#       Whether Python is needed only at build time or at run time.
#
#       Possible values: yes no test tool
#       Default: no

の定義忘れだよなこれ。

これ以外にもperl関連のパッケージにおいてはテストの実行にしか必要の無いパッケージがRUN_DEPENDSになってたりするのが多くてほんともうちょっと何とかならんのか。 まぁこれは元のMakefile.PL自体が間違えててテスト時以外は不要な依存関係を定義してたりするのを丸写しだったりするんだけどね…