Help us understand the problem. What is going on with this article?

Perl 5 on FreeBSD Ports

More than 3 years have passed since last update.

書いた動機

Perl5 On FreeBSD pkgという記事があったので、Portsだとどうなるかについて考えてみた。

なお、以下はすべて11.0-STABLEでの話である。

Portsでの各種ツールのバージョン設定

/etc/make.confDEFAULT_VERSIONSという変数があり、そこに+=で書き加えてやれば、デフォルトバージョンの指定ができる。

Ports r428884でのMk/bsd.default-versions.mkに書いてあるPerl 5に関する記述を見ると、

bsd.default-versions.mkからの抜粋
# Possible values: 5.18, 5.20, 5.22, devel
.if !exists(${LOCALBASE}/bin/perl) || (!defined(_PORTS_ENV_CHECK) && \
    defined(PACKAGE_BUILDING))
PERL5_DEFAULT?=         5.24
.elif !defined(PERL5_DEFAULT)
# There's no need to replace development versions, like "5.23" with "devel"
# because 1) nobody is supposed to use it outside of poudriere, and 2) it must
# be set manually in /etc/make.conf in the first place, and we're never getting
# in here.
.if !defined(_PERL5_FROM_BIN)
_PERL5_FROM_BIN!=       perl -e 'printf "%vd\n", $$^V;'
.endif
_EXPORTED_VARS+=        _PERL5_FROM_BIN
PERL5_DEFAULT:=         ${_PERL5_FROM_BIN:R}
.endif

と書いてある。つまり、2016年12月19日時点でのPerl 5のデフォルトバージョンは、まっさらな環境からPortsで入れる場合は、5.24である。

ちなみに_PERL5_FROM_BINの行のシェルスクリプト

perl -e 'printf "%vd\n", $^V;'

を実行すると、Perl 5のバージョン番号が返ってくるので、おそらくバイナリですでに入っている場合は、それをデフォルトバージョンとして使うようにしているのだろうということが想像できる。

デフォルトバージョンの変遷

/usr/ports/UPDATINGを見ると、Perl 5あるいはlang/perl5*の変遷がわかる。概略を日付だけで見てみよう。時系列の逆順にしている。

  • 20161103: 5.24がデフォルトになった。
  • 20150914: /usr/local/bin/perlDEFAULT_VERSIONSで決まるようになった。
  • 20150513: 5.20がデフォルトになった。
  • 20141217: libperl.soを作成するようになった。
  • 20141126: 5.18がデフォルトになった。
  • 20140214: Portsから5.12が消えて、5.16が必須になった。
  • 20131120: THREADSオプションが有効になった。
  • 20131023: 5.16がデフォルトになった。
  • 20130920: DEFAULT_VERSIONSが使われるようになった。
  • 20130204: 5.8と5.10がPortsから削除された。
  • 20110506: 5.12がデフォルトになった。
  • 20100205: 5.10がデフォルトになった。

というわけで、デフォルトバージョンはそれなりに変わっている。

デフォルトのPerl 5の更新

前述のUPDATINGから抜粋すると、こんな感じでやるといいはずだ。portmasterの場合。

# make.confに以下を書き加える
DEFAULT_VERSIONS+=  perl5=5.24

# 古いPerlを新しいものにする
portmaster -o lang/perl5.24 lang/perl5.20
# libperl.soで依存しているものを再度ビルドする
portmaster -f `pkg shlib -qR libperl.so.5.20`

まとめ

FreeBSDでのPerl 5をPortsから触ったらどうなるかについて考察した。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away