- コンパクトで軽量な日本語ディストリビューション -
マクロは
%define マクロの名前 内容
のように書くことで定義できます。
%{マクロの名前}
のように書くことで利用できます。 {} を省略して %マクロの名前 と書くこともできますが、 {} をつけて利用したほうが、 「スクリプト部」に出てきた %prep や %build などといったタグと区別しやすくなります。
マクロは、%setupや%installなどのスクリプト部やファイル定義部など、 SPECファイル全体で使えるので、 うまく使うとバージョンアップに追随してSPECファイルを書くときに楽ができます。
%define で定義せずに使えるマクロとして %{name} , %{version} , %{release} があります。 「パッケージ情報の記述」にでてきた、Name Version Release の値が、 それぞれ %{name} , %{version} , %{release} の内容になります。
%define name hoge として name を定義し Name: %{name} のように利用しているSPECファイルを見かけることがありますが、 Name の値を参照するのが %{name} なので、本来とは逆の使い方になり問題を起こす場合があるかもしれません。 このような場合は %define pkg_name hoge , Name: %{pkg_name} のように %{name} とは違う名前のマクロを利用したほうがよいでしょう。
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
ではだめです。 # 以降はコメントになるという処理よりも、マクロの %define の方が先に処理されるので、 %define hoge hige が解釈されてしまいます。