| 1 | [wiki:docs Vine Linux ドキュメント] / [wiki:../ RPM パッケージの作成方法] / %setupマクロの詳細 |
| 2 | |
| 3 | = %setupマクロの詳細 = |
| 4 | |
| 5 | hoge-1.1.tar.gzを展開したときに、hoge-1.1/というディレクトリができるなら、 オプションをつけなくても以上の作業が行われますが、例えば、 hoge/というディレクトリができるなら、このディレクトリの下にcdできるように、 |
| 6 | {{{ |
| 7 | #!sh |
| 8 | %setup -n hoge |
| 9 | }}} |
| 10 | または、 |
| 11 | {{{ |
| 12 | #!sh |
| 13 | %setup -n ${RPM_PACKAGE_NAME} |
| 14 | }}} |
| 15 | と指定します。 |
| 16 | |
| 17 | 複数のソースがあるときには以下に述べるオプション -a や -b を使います。 例えば Source、Source1、Source2 の 3 つがあるときには、 |
| 18 | {{{ |
| 19 | #!sh |
| 20 | %setup -a 1 -a 2 -n hoge |
| 21 | }}} |
| 22 | などとします。(以下のオプションの指定参照。) |
| 23 | |
| 24 | この%setupにはさまざまなオプションがありますが、 代表的なものを以下に示します。 |
| 25 | |
| 26 | -n <ディレクトリ名>:: |
| 27 | %setupを実行した後(もしくは前)にcdするディレクトリ名(name)を指定する。 このオプションを省略したときの、デフォルトのディレクトリ名は、 ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}。 |
| 28 | -c:: |
| 29 | 指定ディレクトリ(上の-nオプションで指定したディレクトリ) を作成し(create)、そこにcdした後にソースの展開をします。 |
| 30 | -a <#>:: |
| 31 | Source0を展開した後、 指定ディレクトリ(上と同じ)にcdした(after)、 #番目のソース(Source#)の展開をします。 %setup -a 2 -a 3 と複数-aオプションが指定された時には、 Source0 が展開された後、指定ディレクトリに cd し、 Source2、Source3を展開します。 (Source0の展開は最初の一回だけです。) |
| 32 | -b <#>:: |
| 33 | Source0を展開した後、 指定ディレクトリ(上と同じ)にcdする前に(before)、 #番目に指定されてるソース(Source#)の展開をします。 |
| 34 | -D:: |
| 35 | 先に述べたように、%setupは、まず、指定ディレクトリ(上と同じ)が、 ディレクトリBUILDの下にあるかどうかをチェックして、もし存在していたら、 それを削除してから、ソースの展開などの作業を行います。 %setupを複数回呼びたい場合、 2回目に%setupを呼んだ時に最初の%setupで展開したディレクトリを削除されては困ります。 この-Dオプションは、このような削除を行わないようにします。(あまり使いません) |
| 36 | -T:: |
| 37 | ソースの展開を行いません。先に述べたように、 オプション指定を -a 2 や -b 2 とすると、 Source0とSource2で指定したものが展開されます。 Source2だけを展開したいときには、このオプションを使って、 |
| 38 | {{{ |
| 39 | #!sh |
| 40 | %setup -T -a 2 |
| 41 | }}} |
| 42 | とします。また、 |
| 43 | {{{ |
| 44 | #!sh |
| 45 | %setup -T -c hoge |
| 46 | }}} |
| 47 | とすると、パッケージの展開は行わず、ディレクトリhogeを作って、 そこにcdします。 |
| 48 | -q:: |
| 49 | ソースの展開のとき、展開中の情報を表示しません。 たとえば tar での展開の時に、-q 無しだと tar xvvf、-q 有りだと tar xf のように変わります。 |
| 50 | |
| 51 | 次のように tar.gz ではないファイルが Source0 となる場合があります。 |
| 52 | |
| 53 | {{{ |
| 54 | #!sh |
| 55 | Source0: hoge-%{version}.lzh |
| 56 | }}} |
| 57 | |
| 58 | tar.gz ではないので、%setup では展開できません。 |
| 59 | |
| 60 | このような場合には、まず %setup の -Tオプション を利用して作業ディレクトリに移動します。 %setup のあとには、bash スクリプトを書いて作業を行うことができるので、 通常のコマンドで Source0 のファイルを展開します。 |
| 61 | |
| 62 | {{{ |
| 63 | #!sh |
| 64 | %setup -T hoge-%{version} |
| 65 | lha x %{SOURCE0} |
| 66 | }}} |
| 67 | |
| 68 | 次のように tar.gz などでは無いファイルが Source2 としてあるということがあります。 |
| 69 | |
| 70 | {{{ |
| 71 | #!sh |
| 72 | Source0: hoge-%{version}.tar.gz |
| 73 | Source1: hoge-additional-%{version}.tar.gz |
| 74 | Source2: how-to-use-hoge.txt |
| 75 | }}} |
| 76 | |
| 77 | こういった場合には、Source0 と Source1 を %setup で展開したあとで、installコマンドなどで、Source2 に対応するマクロ %{SOURCE2} を処理します。 |
| 78 | |
| 79 | %setup で展開するのと同じ処理をしたければ、 |
| 80 | {{{ |
| 81 | #!sh |
| 82 | %setup -q -a 1 |
| 83 | %{__install} -m 644 %{SOURCE2} . |
| 84 | }}} |
| 85 | |
| 86 | のようにします。 |
| 87 | |
| 88 | %setup で Source0 を展開してできたディレクトリ BUILD/hoge-%version/ に移動しているので、installコマンド で . (カレントディレクトリ1) を指定すると . は BUILD/hoge-%version/ となっているので、BUILD/hoge-%version/に Source2 が install されます。 |
| 89 | |
| 90 | 他のファイルと同じように BUILD/hoge-%version/ にあるので %doc として指定するのもそのままできます。 |
| 91 | |
| 92 | {{{ |
| 93 | #!sh |
| 94 | %files |
| 95 | %doc how-to-use-hoge.txt |
| 96 | }}} |
| 97 | |
| 98 | %{SOURCE2} といったマクロは %doc のところでは使えないので、%doc %{SOURCE2} とすることはできません。 |
| 99 | |
| 100 | lha や unzip など、特別なコマンドが必要になる場合は、 !BuildRequires(prep): で指定します。 |