%include_specopt というマクロを使うと、site local なマクロ定義を読んで spec 中のマクロを上書きすることができる。例えば、gcc.spec の中では
Name: gcc %{?include_specopt} %{?!with_ssp:%global with_ssp 1}
として使われているが(必要のない部分は省略している)、 $HOME/rpm/specopt/gcc.specopt の中に
%{?!with_ssp:%global with_ssp 0}
と書くことで、%with_ssp を 0 に上書きすることができる。
%include_specopt は必ず Name: タグの後に書かなければならない。 これは、include すべきファイルが
%_specoptdir %{_sysconfdir}/rpm/specopt %_specoptfile %_specoptdir/%name.specopt
と定義されている(%name を見ている)からである。
%include_specopt は、 specoptで定義されるマクロが使用される場所より先に書かなければならない。
spec 中では、%include_specopt を書いた後に、上書きするべきマクロを
%{?!with_ssp:%global with_ssp 1}
という形式で書くこと。これを
%global with_ssp 1
としてしまうと、specopt でも rpm --define でも上書きできなくなる。