---
title: 第14章 port のテスト
prev: books/porters-handbook/pkg-files
next: books/porters-handbook/port-upgrading
showBookMenu: true
weight: 14
params:
  path: "/books/porters-handbook/testing/"
---

[[testing]]
= port のテスト
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 14
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[testing-portlint]]
== portlint

送付や commit をする前に <<porting-portlint,`portlint`>> を使ってチェックしましょう。

[[porting-prefix]]
== `PREFIX`

なるべく port は `PREFIX` に対する相対パスにインストールすることができるように心がけてください (この変数の値は `USE_X_PREFIX` か `USE_IMAKE` が指定してある時には `X11BASE` (デフォルトは [.filename]#/usr/X11R6#)、 そうでない場合には``LOCALBASE`` (デフォルトは [.filename]#/usr/local#) にセットされます)。

サイトによってフリーソフトウェアがインストールされる場所が違いますので、 ソース内で [.filename]#/usr/local# や [.filename]#/usr/X11R6# を明示的に書かないようにしてください。 X のプログラムで `imake` を使うものについては、  これは問題にはなりません。 それ以外の場合には port の [.filename]#scripts/Makefile# で [.filename]#/usr/local# (imake を使わない X のプログラムは [.filename]#/usr/X11R6#) と書いてあるところを、 `${PREFIX}` に書き換えてください。 この値は port のコンパイルおよび、 インストールの全段階において、自動的に下位のプロセスに渡されます。

そのアプリケーションが `PREFIX` を 使用しないで、何かを直接 [.filename]#/usr/local# に インストールしないことを確認してください。 以下のようにすると、簡単なテストを行なうことができます:

[source,shell]
....
# make clean; make package PREFIX=/var/tmp/port-name
....

この時、もし `PREFIX` の外に 何かがインストールされていた場合、package 生成プロセスは ファイルが見つからないと文句を言うはずです。

ただし、これは そのソフトウェアが内部で決め打ちの参照を していないかどうか だとか、他の port によってインストールされる ファイルを参照する際に `LOCALBASE` を 正しく使用しているかどうかをテストしているわけではありません。 その port を他の場所にインストールした状態で、 [.filename]#/var/tmp/port-name# に 対するインストールを試みることにより、 そのテストをすることができるでしょう。

`USE_X_PREFIX` は本当に必要な時 (つまり X のライブラリをリンクしたり、`X11BASE` 以下にある ファイルを参照したりする必要がある時) 以外には 設定しないでください。

変数 `PREFIX` の値は port の Makefile やユーザの環境で変更することもできます。 しかし、個々の port が Makefile でこの変数の値を明示的に設定することはなるべくしないでください。

また、他の port によりインストールされるプログラムや ファイルを指定する場合には、直接的なパス名を使用するのではなく 上で述べた変数を使用してください。 たとえば `less` のフルパスを `PAGER` というマクロに入れたい場合は、 `-DPAGER=\"/usr/local/bin/less\"` というフラグをコンパイラに渡すかわりに 

[.programlisting]
....
-DPAGER=\"${PREFIX}/bin/less\"
....

(X Window System を使う port の場合には 

[.programlisting]
....
-DPAGER=\"${LOCALBASE}/bin/less\"
....

) を渡してください。 こうしておけば、システム管理者が [.filename]#/usr/local# を まるごと どこか他の場所に移していたとしても、その port が そのまま使える可能性が高くなります。

[[testing-freshports]]
== FreshPorts 正当性テスト

http://www.FreshPorts.org/[http://www.FreshPorts.org/] には、FreeBSD ports へ commit されたものについて、 自動的に正当性テストを行う仕組みがあります。 このサービスに登録すると、あなたが commit したものについて、 正当性テストでエラーが起きると連絡が行きます。

このサービスを利用したい場合、必要なのは FreshPorts のアカウントだけです。登録したメールアドレスが `@FreeBSD.org` のものであれば、 ウェブページの右側にサービスを選択するリンクがあるはずです。 FreshPorts にアカウントを持っていても `@FreeBSD.org` のメールアドレスを利用していない場合、メールアドレスを `@FreeBSD.org` に変え、登録したあとで、 メールアドレスをまた変更してください。
