I propose the following changes:
- Use an admon/important template to highlight the differences in EPEL 4 & 5
- change %{_optflag} to %{optflag}, which seems to be right according to
rpm --eval
and was mentioned in the discussion page of the original site - Do not mention Fedora 10 or older, since it is EOL
- Do not call Fedora 11 "Fedora Core 11", Core and Extras merged
- Explain use case for rpm directory macros
- reorder macros: first macros to be used in specs, then the macros to be used in rpmbuild
- Add introductions to some sections
- add %buildroot
- add $RPM_OPT_FLAGS, $RPM_BUILD_ROOT - they are variables and not macros, but serve the same use case
- fix alignment in build flag macros
Uncovered issues:
- %{opflags} are out of sync for F12 (and probably F11, because there -march is set to i586 afaik):
- x86_64:
-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic
- i386:
-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables
- x86_64:
- having two macros for the same path is imho bad:
%{_var}
vs%{_localstatedir}
and%{_usr}
vs%{_prefix}
Valid RPM Macros
Here are the definitions for some common specfile macros as they are defined on Fedora 11 (rpm-4.7.0-1.fc11). For definitions of more macros, examine the output of "rpm --showrc
". To see the expanded definition of a macro use the command rpm --eval "%{macro}"
. Note that neither command will take into account macros defined inside specfiles, but both will take into account macros defined in your ~/.rpmmacros
file and macros defined on the command line.
Keep in mind that some of these macros may evaluate differently on older Fedora or EPEL releases.
Macros mimicking autoconf variables
%{_sysconfdir} /etc %{_prefix} /usr %{_exec_prefix} %{_prefix} %{_bindir} %{_exec_prefix}/bin %{_libdir} %{_exec_prefix}/%{_lib} %{_libexecdir} %{_exec_prefix}/libexec %{_sbindir} %{_exec_prefix}/sbin %{_sharedstatedir} /var/lib %{_datadir} %{_prefix}/share %{_includedir} %{_prefix}/include %{_infodir} /usr/share/info %{_mandir} /usr/share/man %{_localstatedir} /var %{_initddir} %{_sysconfdir}/rc.d/init.d
Other macros and variables for paths
These macros should be used for paths that are not covered by the macros mimicking autoconf variables. The %{_buildroot}
macro or the $RPM_BUILD_ROOT
variable is the directory that should be assumed to be the root file system when installing files. Is is used as the value for the DESTDIR
variable.
%{_var} /var %{_tmppath} %{_var}/tmp %{_usr} /usr %{_usrsrc} %{_usr}/src %{_lib} lib (lib64 on 64bit systems) %{_docdir} %{_datadir}/doc %{buildroot} %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch} $RPM_BUILD_ROOT %{buildroot}
Build flags macros and variables
These macros should be used as flags for the compiler or linker.
%{_global_cflags} -O2 -g -pipe %{optflags} %{__global_cflags} -m32 -march=i386 -mtune=pentium4 # if redhat-rpm-config is installed $RPM_OPT_FLAGS %{optflags}
RPM directory macros
The macros are usually used with rpmbuild --define
to specify which directories rpmbuild should use, it is unusual to use them within SPEC files.
%{_topdir} %{getenv:HOME}/rpmbuild %{_builddir} %{_topdir}/BUILD %{_rpmdir} %{_topdir}/RPMS %{_sourcedir} %{_topdir}/SOURCES %{_specdir} %{_topdir}/SPECS %{_srcrpmdir} %{_topdir}/SRPMS %{_buildrootdir} %{_topdir}/BUILDROOT
Reference
Here are macros from other distributions to aid you in package conversion: