---
title: 第6章 特別な配慮
prev: books/porters-handbook/makefile
next: books/porters-handbook/porting-masterdir
showBookMenu: true
weight: 6
params:
  path: "/books/porters-handbook/special/"
---

[[special]]
= 特別な配慮
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 6
: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::[]

port を作成する場合、 考慮しなくてはいけないことが他にもいくつかあります。 このセクションでは、それらのうちでも特によくあることについて説明します。

[[porting-shlibs]]
== 共有ライブラリ

その port が共有ライブラリのインストールを行なう場合、 make 変数 `INSTALLS_SHLIB` を定義してください。 これにより、[.filename]#bsd.port.mk# が `post-install` ターゲットの実行時に新しいライブラリがインストールされたディレクトリ (通常は [.filename]#PREFIX/lib#) に `${LDCONFIG} -m` を実行し、 共有ライブラリキャッシュへの登録が行なわれるようになります。 また、この変数が定義されている場合、共有ライブラリを インストールしたユーザが それをすぐに使い始められるように、 また、削除の際には そのライブラリが まだ存在していると システムに誤認されないように、 適切な `@exec /sbin/ldconfig -m` と `@unexec /sbin/ldconfig -R` のペアが [.filename]#pkg-plist# ファイルに 指定されているように扱われます。

必要であれば、 共有ライブラリがインストールされるディレクトリのリストを格納する make 変数 `LDCONFIG_DIRS` を定義することにより、 新しいライブラリがインストールされるデフォルトの位置を上書きすることも可能です。 例えば、その port が共有ライブラリを [.filename]#PREFIX/lib/foo# と [.filename]#PREFIX/lib/bar# に インストールする場合、[.filename]#Makefile# で以下の記述を使用することができます:

[.programlisting]
....
INSTALLS_SHLIB= yes
LDCONFIG_DIRS=  %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar
....

[.filename]#pkg-plist# の他の部分と同様に、 `LDCONFIG_DIRS` の内容も man:sed[1] による処理が行なわれるため、ここでも `PLIST_SUB` に指定した置換が行なわれることに注意してください。 `PREFIX` には `%%PREFIX%%` を、 `LOCALBASE` には `%%LOCALBASE%%`, `X11BASE` には `%%X11BASE%%` を使用することを推奨します。

[[porting-restrictions]]
== 配布制限がある ports

ライセンスにはさまざまなものがあり、なかには、 アプリケーションをパッケージ化するやり方、営利目的で販売できるか、 といったことに制限をかけているものがあります。

[IMPORTANT]
====
port 作成者として、あなたには、使用許諾条件をよく読み、 FTP/HTTP または CD-ROM で再配布してはいけないソースコードやコンパイルされたバイナリを配布してしまい、 その責任が FreeBSD プロジェクトにかかってくることのないよう注意する義務があります。 疑わしい場合には {freebsd-ports} で聞いてみてください。
====

そのような場合、次の節で説明されている変数が設定できます。

[NOTE]
====
`RESTRICTED` は、それだけを設定すれば済むように、暗黙のうちに `NO_CDROM` と `NO_PACKAGE` を設定します。それに対して、 `NO_PACKAGE` と `NO_CDROM` は独立で、同時に設定可能です。
====

=== `NO_PACKAGE`

この変数が設定されていたら、 このアプリケーションのバイナリパッケージを作成してはいけないということです。 ただし、この port の `DISTFILES` は自由に配布できます。

また、`NO_PACKAGE` は、バイナリパッケージが汎用的ではなく、 いつもアプリケーションをソースコードからコンパイルすべき場合にも利用すべきです。 たとえば、アプリケーションにサイト特有の設定情報がコンパイル時にハードコードされるような場合には、 `NO_PACKAGE` を設定してください。

`NO_PACKAGE` には、 パッケージを作成すべきではない理由を述べた文字列を設定すべきです。

=== `NO_CDROM`

この変数は、バイナリパッケージの作成は許可されていますが、 その package や port の `DISTFILES` を販売用の CD-ROM (や DVD-ROM) に載せるのは許されていないことを表します。なんにせよ、 バイナリパッケージと port の `DISTFILES` は、FTP/HTTP で入手できます。

`NO_CDROM` には、その port が何故 CD-ROM で再配布できないか説明する文字列を設定するべきです。 これはたとえば、その port のライセンスが"非商用" 利用に限っている場合に使うべきです。

=== `RESTRICTED`

アプリケーションのライセンスが、FTP/HTTP で、そのアプリケーションの `DISTFILES` をミラーすることや、 バイナリパッケージを配布することを禁じていたら、 この変数を設定してください。

`RESTRICTED` には、その port が何故再配布できないか説明する文字列を設定するべきです。 典型的な場合としては、その port がプロプライエタリなソフトウェアを含んでいて、 `DISTFILES` を、おそらくソフトウェアに関する登録を行ったり、 EULA を承諾した後で、 手動でダウンロードしなければならないことを表します。

=== `RESTRICTED_FILES`

`RESTRICTED` や `NO_CDROM` が設定されている時は、この変数はデフォルトで `${DISTFILES} ${PATCHFILES}` になります。それ以外は空です。 一部の配布ファイルだけに制限がかかっていたら、 この変数にそのファイルのリストを設定してください。

port committer は、設定した配布ファイル毎に [.filename]#/usr/ports/LEGAL# に制限の内容を説明する項目を追加すべきことに注意してください。

[[using-perl]]
== `perl` の利用

.`perl` を使用する ports 用の変数
[cols="1,1", frame="none", options="header"]
|===
| 変数
| 意味

|`USE_PERL5`
|その port のビルドと実行に `perl 5` を使用することを示します。

|`USE_PERL5_BUILD`
|その port をビルドするのに `perl 5` を使用することを示します。

|`USE_PERL5_RUN`
|その port を実行するのに `perl 5` を使用することを示します。

|`PERL`
|システムまたは port からインストールされた `perl 5` の完全なパスからバージョン番号を省いたもの。 スクリプトの "`#!`" 行を置き換える必要があれば使ってください。

|`PERL_CONFIGURE`
|Perl の MakeMaker を使ってコンフィグレーションを行います。暗黙のうちに `USE_PERL5` を設定します。
|===

[[using-x11]]
== X11 の利用

.X を利用する ports 用の変数
[cols="1,1", frame="none"]
|===
|`USE_X_PREFIX`
|その port は `PREFIX` ではなく `X11BASE` にインストールされます。

|`USE_XLIB`
|その port は X ライブラリを使用します。

|`USE_MOTIF`
|その port は Motif ツールキットを使用します。 `USE_XPM` が自動的に設定されます。

|`USE_IMAKE`
|その port は `imake` を使用します。`USE_X_PREFIX` が自動的に設定されます。

|`XMKMF`
|`xmkmf` が `PATH` にない場合にパスを設定してください。 デフォルトは `xmkmf -a` になります。
|===

[[using-automake]]
== `automake`, `autoconf` および `libtool` の利用

.automake, autoconf または libtool を使用する ports 用の変数
[cols="1,1", frame="none", options="header"]
|===
| 変数
| 意味

|`USE_AUTOMAKE`
|その port は `automake` を使用します。 `USE_AUTOCONF` と `USE_AUTOMAKE_VER?=14` が自動的に設定されます。

|`AUTOMAKE`
|`automake` が `PATH` に含まれない場合のフルパス。

|`USE_AUTOMAKE_VER`
|その port は `automake` を使用します。この変数の有効な値は `14` と `15` で、`AUTOMAKE_DIR` および `ACLOCAL_DIR` 変数が適切な値に設定されます。

|`AUTOMAKE_ARGS`
|`USE_AUTOMAKE_VER` が設定されていた場合に `AUTOMAKE` に渡す 1 つまたはそれ以上のコマンドライン引数

|`AUTOMAKE_ENV`
|`AUTOMAKE` を実行する前に設定する 1 つまたはそれ以上の環境変数 (とその値)

|`ACLOCAL`
|GNU `aclocal` が `PATH` にない場合にパスを設定してください。デフォルトは `USE_AUTOMAKE_VER` 変数に応じて設定されます。

|`ACLOCAL_DIR`
|GNU `aclocal` の共有ディレクトリのパスを設定してください。 デフォルトは `USE_AUTOMAKE_VER` 変数に応じて設定されます。

|`AUTOMAKE_DIR`
|GNU `automake` の共有ディレクトリのパスを設定してください。 デフォルトは `USE_AUTOMAKE_VER` 変数に応じて設定されます。

|`USE_AUTOCONF_VER`
|その port が `autoconf` を使用することを指定します。デフォルト値は 213 です。

|`USE_AUTOCONF`
|その port が `autoconf` を使用することを指定します。`GNU_CONFIGURE` および `USE_AUTOCONF_VER?=213` を自動的に設定します。

|`AUTOCONF`
|GNU `autoconf` が `PATH` にない場合にパスを設定してください。デフォルトは `USE_AUTOCONF_VER` 変数の値に応じて設定されます。

|`AUTOCONF_ARGS`
|`autoconf` に渡すコマンドライン引数

|`AUTOCONF_ENV`
|この変数で指定された `変数=値` の組を `autoconf` を実行する前に環境変数として設定してください。

|`AUTOHEADER`
|GNU `autoheader` が `PATH` にない場合にパスを設定してください。デフォルトは `USE_AUTOCONF_VER` の値に応じて設定されます。

|`AUTORECONF`
|GNU `autoreconf` が `PATH` にない場合にパスを設定してください。デフォルトは `USE_AUTOCONF_VER` に応じて設定されます。

|`AUTOSCAN`
|GNU `autoscan` が `PATH` にない場合にパスを設定してください。デフォルトは `USE_AUTOCONF_VER` に応じて設定されます。

|`AUTOIFNAMES`
|GNU `autoifnames` が `PATH` にない場合にパスを設定してください。デフォルトは `USE_AUTOCONF_VER` に応じて設定されます。

|`USE_LIBTOOL`
|その port は `libtool` を使用します。`GNU_CONFIGURE` を自動的に設定します。

|`LIBTOOL`
|`libtool` が `PATH` にない場合にパスを設定してください。

|`LIBTOOLFILES`
|`libtool` 用のパッチファイル。 デフォルトは `USE_AUTOCONF` が設定されていれば `aclocal.m4`、 それ以外は `configure` です。

|`LIBTOOLFLAGS`
|`ltconfig` に追加で渡すフラグ。 デフォルトは `--disable-ltlibs`。
|===

[[using-gnome]]
== GNOME の利用

FreeBSD/GNOME プロジェクトは、ある特定の port が使っている GNOME コンポーネントを特定するために 独自の変数群を使っています。 FreeBSD/GNOME プロジェクトのページに http://www.FreeBSD.org/gnome/docs/porting/[その変数のわかりやすい一覧] があります。

[[using-kde]]
== KDE の利用

.KDE を利用する ports 用の変数
[cols="1,1", frame="none"]
|===
|`USE_QT_VER`
|その port は Qt ツールキットを使用します。 設定できる値は、 `1`, `2` および `3` で、それぞれ使用する Qt のメジャーバージョンを示します。 これは、`MOC` と `QTCPPFLAGS` をデフォルトの適切な値に設定します。

|`USE_KDELIBS_VER`
|その port は KDE ライブラリを使用します。 設定できる値は、 `1`, `2` および `3` で、それぞれ使用する KDE のメジャーバージョンを示します。 暗黙で `USE_QT_VER` に適切なバージョンを設定します。

|`USE_KDEBASE_VER`
|その port は KDE base を使用します。 設定できる値は、 `1`, `2` および `3` で、それぞれ使用する KDE のメジャーバージョンを示します。 暗黙で `USE_KDELIBS_VER` に適切なバージョンを設定します。

|`MOC`
|`moc` へのパスを設定してください。 デフォルトでは、`USE_QT_VER` の値に応じて設定されます。

|`QTCPPFLAGS`
|Qt のコードを処理する際の `CPPFLAGS` を設定してください。デフォルトでは `USE_QT_VER` の値に応じて設定されます。
|===

[[using-bison]]
== Bison の利用

この節はまだ書かれていません。

[[using-java]]
== Java の利用

あなたが作成している port の構築、実行、 または配布ファイルの展開に Java(TM) 開発キット (JDK) が必要なら、`USE_JAVA` を定義してください。

Ports Collection には、さまざまなベンダの JDK のいろいろなバージョンがあります。 あなたが作成している port がその中のいずれかのバージョンを使わなければならないなら、 どれを使うか指定できます。最新のバージョンは、 package:java/jdk14[] です。

.Java を利用する ports で定義すべき変数
[cols="1,1", frame="none", options="header"]
|===
| 変数
| 意味

|`USE_JAVA`
|この後の変数を有効にするには、 この変数を定義しなければなりません。

|`JAVA_VERSION`
|スペースで区切られた、適合する Java のバージョン一覧。`"+"` を使ってバージョンの範囲を指定することもできます (使える値は、 `1.1[+] 1.2[+] 1.3[+] 1.4[+]`) です)。

|`JAVA_OS`
|スペースで区切られた、その port に適合する JDK port の OS 一覧。(使える値は、 `native linux`) です。

|`JAVA_VENDOR`
|スペースで区切られた、その port に適合する JDK port のベンダの一覧。(使える値は、 `freebsd bsdjava sun ibm blackdown`) です。

|`JAVA_BUILD`
|この変数が設定されていると、選択した JDK を、その port の構築依存性に追加します。

|`JAVA_RUN`
|この変数が設定されていると、選択した JDK を、その port の実行依存性に追加します。

|`JAVA_EXTRACT`
|この変数が設定されていると、選択した JDK を、その port の展開依存性に追加します。

|`USE_JIKES`
|その port の構築に `jikes` バイトコードコンパイラを使うべきかどうかを示します。 この変数に何の値も設定されていない時は、port は `jikes` が使えたら構築に利用します。 `jikes` の利用を明示的に禁止したり、 強制したりすることも可能です (`'no'` か `'yes'` を設定してください)。 後者の場合は、package:devel/jikes[] が port の構築依存性に追加されます。
|===

以下は、`USE_JAVA` を設定した port で行われる設定の一覧です。

.Java を利用する ports で設定される変数
[cols="1,1", frame="none", options="header"]
|===
| 変数
| 値

|`JAVA_PORT`
|JDK port の名称 (例: `'java/jdk14'`)。

|`JAVA_PORT_VERSION`
|JDK の完全なバージョン (例: `'1.4.2'`)。最初の数字 2 つだけしか必要でなければ、 `${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}` を使ってください。

|`JAVA_PORT_OS`
|JDK port が利用する OS (例: `'linux'`)。

|`JAVA_PORT_VENDOR`
|JDK port のベンダ (例: `'sun'`)。

|`JAVA_PORT_OS_DESCRIPTION`
|JDK port が利用する OS の説明 (例: `'Linux'`)。

|`JAVA_PORT_VENDOR_DESCRIPTION`
|JDK port のベンダの説明 (例: `'FreeBSD Foundation'`)。

|`JAVA_HOME`
|JDK がインストールされているディレクトリのパス (例: [.filename]#'/usr/local/jdk1.3.1'#)。

|`JAVAC`
|使用する Java コンパイラのパス (例: [.filename]#'/usr/local/jdk1.1.8/bin/javac'# または [.filename]#'/usr/local/bin/jikes'#)。

|`JAR`
|使用する `jar` ツールのパス (例: [.filename]#'/usr/local/jdk1.2.2/bin/jar'# または [.filename]#'/usr/local/bin/fastjar'#)。

|`APPLETVIEWER`
|`appletviewer` ユーティリティへのパス (例: [.filename]#'/usr/local/linux-jdk1.2.2/bin/appletviewer'#)。

|`JAVA`
|`java` 実行ファイルへのパス。 Java プログラムの実行にはこれを使ってください (例: [.filename]#'/usr/local/jdk1.3.1/bin/java'#)。

|`JAVADOC`
|`javadoc` ユーティリティプログラムへのパス。

|`JAVAH`
|`javah` プログラムへのパス。

|`JAVAP`
|`javap` プログラムへのパス。

|`JAVA_KEYTOOL`
|`keytool` ユーティリティプログラムへのパス。 この変数は、JDK が Java 1.2 以上の場合のみ利用可能です。

|`JAVA_N2A`
|`native2ascii` ツールへのパス。

|`JAVA_POLICYTOOL`
|`policytool` プログラムへのパス。この変数は、JDK が Java 1.2 以上の場合のみ利用可能です。

|`JAVA_SERIALVER`
|`serialver` ユーティリティプログラムへのパス。

|`RMIC`
|RMI スタブ/スケルトンジェネレータ `rmic` へのパス。

|`RMIREGISTRY`
|RMI レジストリプログラム `rmiregistry` へのパス。

|`RMID`
|RMI デーモンプログラム `rmid` へのパス。この変数は、JDK が Java 1.2 以上の場合のみ利用可能です。

|`JAVA_CLASSES`
|JDK クラスファイルが入っているアーカイブへのパス。 JDK 1.2 以降では、これは [.filename]#${JAVA_HOME}/jre/lib/rt.jar# です。 それより前の JDK は、 [.filename]#${JAVA_HOME}/lib/classes.zip# を使います。
|===

Port のデバッグ情報を得るのに、 `java-debug` make ターゲットが使えます。 これは、前述の変数の多くについて値を表示します。

[[using-python]]
== Python の利用

この節はまだ書かれていません。

[[using-emacs]]
== Emacs の利用

この節はまだ書かれていません。

[[using-ruby]]
== Ruby の利用

この節はまだ書かれていません。

[[using-sdl]]
== SDL の利用

`USE_SDL` 変数は、 package:devel/sdl12[] や package:x11-toolkits/sdl_gui[] など、SDL ベースの ports への依存を自動設定するのに使われます。

今のところ、次の SDL ライブラリが認識されます。

* sdl: package:devel/sdl12[]
* gfx: package:graphics/sdl_gfx[]
* gui: package:x11-toolkits/sdl_gui[]
* image: package:graphics/sdl_image[]
* ldbad: package:devel/sdl_ldbad[]
* mixer: package:audio/sdl_mixer[]
* mm: package:devel/sdlmm[]
* net: package:net/sdl_net[]
* sound: package:audio/sdl_sound[]
* ttf: package:graphics/sdl_ttf[]

したがって、ある port が package:net/sdl_net[] と package:audio/sdl_mixer[] に依存していたら、構文は次のようになります。

[.programlisting]
....
USE_SDL=	  net mixer
....

package:net/sdl_net[] と package:audio/sdl_mixer[] が必要とする package:devel/sdl12[] の依存も自動的に追加されます。

`USE_SDL` を使うと、以下のことが自動的に行われます。

* `BUILD_DEPENDS` に sdl11-config への依存を追加します。
* `CONFIGURE_ENV` に `SDL_CONFIG` 変数を追加します。
* `LIB_DEPENDS` に選択したライブラリへの依存を追加します。

SDL ライブラリが利用できるかどうか調べるためには、 `WANT_SDL` 変数を使ってください。

[.programlisting]
....
WANT_SDL=yes

.include <bsd.port.pre.mk>

.if ${HAVE_SDL:Mmixer}!=""
USE_SDL+=   mixer
.endif

.include <bsd.port.post.mk>
....
