環境変数とマクロの活用
- III.8.1. 環境変数
- III.8.2. SPECファイル中のマクロ定義
- III.8.3. 標準で定義されているマクロ
III.8.1. 環境変数
スクリプト部の各タグからはじまる部分は、先にも述べた通り独立したbash scriptとして働くので、 その範囲内で、
TEXMF="/usr/share/texmf"
定義した変数は ${ } で囲んで
${TEXMF}
/usr/share というディレクトリは標準で %{_datadir} というマクロが定義されているので
TEXMF="%{_datadir}/texmf"
また、以下の変数は各タグ毎に環境変数として定義されます。
- RPM_SOURCE_DIR
ディレクトリSOURCESを表す。表 I.2-1参照。 デフォルトは、
RPM_SOURCE_DIR="/usr/src/redhat/SOURCES"
- RPM_BUILD_DIR
ディレクトリBUILDを表す。表 I.2-1参照。 デフォルトは、
RPM_BUILD_DIR="/usr/src/redhat/BUILD"
- RPM_DOC_DIR
%docで指定されたドキュメントファイルをインストールするためのディレクトリを表す。 rpmrcファイルの、defaultdocdirで指定する。デフォルトは、
RPM_DOC_DIR="/usr/doc"
- RPM_OPT_FLAGS
コンパイル時にコンパイラにわたすデフォルトのオプション指定を表す。 rpmrcファイルの、optflagsで指定する。 アーキテクチャ毎に指定ができる。 例えば、%buildにおいて以下のように使う
デフォルトはarchitectureがi386のときには、make CFLAGS=${RPM_OPT_FLAGS}
RPM_OPT_FLAGS="-O2 -m486 -fno-strength-reduce"
- RPM_ARCH_FLAGS
buildを行なっているシステムのアーキテクチャを表す変数。 アーキテクチャがi386なら、
RPM_ARCH_FLAGS="i386"
- RPM_OS
buildを行なっているシステムのOSをあらわす変数。Linuxなら、
RPM_OS="Linux"
- RPM_BUILD_ROOT
BuildRootで設定された仮想インストールのためのディレクトリを表す。 (セクション II.5.1 - パッケージ情報の記述のBuildRootの項参照)
- RPM_PACKAGE_NAME
Nameで設定されたパッケージ名を表す。 (セクション II.5.1 - パッケージ情報の記述のNameの項参照)
- RPM_PACKAGE_VERSION
Versionで設定されたバージョン名を表す。 (セクション II.5.1 - パッケージ情報の記述のVersionの項参照)
- RPM_PACKAGE_RELEASE
Releaseで設定されたリリース番号を表す。 (セクション II.5.1 - パッケージ情報の記述のReleaseの項参照)
III.8.2. SPECファイル中のマクロ定義
マクロは
%define マクロの名前 内容
%{マクロの名前}
マクロは、%setupや%installなどのスクリプト部やファイル定義部など、 SPECファイル全体で使えるので、 うまく使うとバージョンアップに追随してSPECファイルを書くときに楽ができます。
%define で定義せずに使えるマクロとして %{name} , %{version} , %{release} があります。 セクション II.5.1 - パッケージ情報の記述にでてきた、Name Version Release の値が、 それぞれ %{name} , %{version} , %{release} の内容になります。
%define name hoge として name を定義し Name: %{name} のように利用しているSPECファイルを見かけることがありますが、 Name の値を参照するのが %{name} なので、本来とは逆の使い方になり問題を起こす場合があるかもしれません。 このような場合は %define pkg_name hoge , Name: %{pkg_name} のように %{name} とは違う名前のマクロを利用したほうがよいでしょう。
第II.5章 - SPECファイルの記述のSPECファイルの例のデータ定義部は、 %{name} と %{version} というマクロを利用して、以下のように書くことができます。 Name: hoge なので %{name} は hoge に、Version: 1.1 なので %{version} は 1.1 になります。
Name: hoge Version: 1.1 Release: 1 Source: %{name}-%{version}.tar.gz Patch: %{name}.patch
SPECファイルの中(どこでもいいです)に %dump と書いておくと、 rpmbuild コマンドでパッケージを作る時に、 すべてのマクロが標準エラー出力に出力され、確認することができます。
マクロの定義を取り消したいけれど、行を削除するのではなくコメントとして残しておきたいという場合には、 %define に % をつけて、%%define にし、さらに # をつけます。
%define hoge hige
# %%define hoge hige
# %define hoge hige
III.8.3. 標準で定義されているマクロ
よく利用されるコマンドやディレクトリなどにはあらかじめマクロが定義されています。 自分で定義した変数と同様にSPECファイル全体で使えます。
標準で定義されているマクロは /usr/lib/rpm/macros に書かれています。 ユーザー毎のマクロを記述するファイルは~/.rpmmacrosです。
~/.rpmmacros に書く場合には
%マクロの名前 内容
ユーザー毎のマクロと、標準で定義されているマクロをあわせたものは、 rpmコマンドの --showrcオプションで確認できます。
$ rpm --showrc
また、それぞれのマクロがどんなものかは、
$ rpm --eval "%{マクロ}"
標準で定義されているマクロについてはなるべく利用してください。 SPECファイルのメンテナンスしやすさの向上につながります。
たとえば、%{configure} や %{makeinstall} といったマクロを利用することで、 %build や %install の部分を簡潔に書くことができる場合があります。
%build %{configure} %{__make} %install %{makeinstall}
$ rpm --eval "%{configure}"
rpm 4.x および Vine Linux 4.1 で定義されているマクロを使うと 第II.5章 - SPECファイルの記述のSPECファイルは次のようになります。
#---------SPEC ファイルの例 (#から始まる行は、コメント行です)-------- # 基本情報 Summary: hoge is a harehare horehore Summary(ja): hoge は harehare な horehore です。 Name: hoge Version: 1.1 Release: 1%{?_dist_release} License: GPL2 Group: Local URL: http://www.fugahogo.com/hogehoge.html Vendor: Project Vine Distribution: Vine Linux Packager: yourid,otherid Packager: Jun Nishii <jun@vinelinux.org> # パッケージの作成時に必要となる情報 Source: %{name}-%{version}.tar.gz Patch: %{name}.patch.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root # 依存情報 Requires: piyo BuildRequires: piyo-devel # 詳しい解説 %description Hoge is a harehare horehore and convenient for fugafuga. Enjoy! %description -l ja hoge は harehare な horehore で、fugafuga するときなどとても便利なツー ルです。みんなでなかよく使いましょう。 # スクリプト部 %prep #rpmを構築する前の準備です。 %{__rm} -rf $RPM_BUILD_ROOT %setup #ソースをBUILDに展開します。 %patch -p1 #パッチをあてます。 %build #makeのための手順を書きます。 %{__make} (cd man; %{__make} man) %install #installのための手順を書きます。 %{__make} prefix=${RPM_BUILD_ROOT}/%{_prefix}/local install (cd man; %{__make} prefix=${RPM_BUILD_ROOT}/%{_prefix}/local install.man) %clean #rpmを作ったあとの後始末です。 %{__rm} -rf $RPM_BUILD_ROOT # ファイルリスト部 -------------- %files %defattr(-,root,root) %doc README %doc docs/ %{_bindir}/hoge.bin %{_libdir}/hoge/ %{_mandir}/man1/hoge.1.gz %dir %{_libdir}/hoge/ %config %{_libdir}/hoge/fuga.conf # 更新履歴 %changelog * Tue Feb 16 1999 Jun Nishii <jun@vinelinux.org> 1.1-2 - added Japanese messages * Mon Feb 15 1999 Jun Nishii <jun@vinelinux.org> 1.1-1 - first release for version 1.1 #---------SPECファイルの例はここまで-----------------------------------------