From Fedora Project Wiki

 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
I propose the following changes:
This draft updates the existing Packaging/RPMMacros page in the following ways:
 
* Use an admon/important template to highlight the differences in EPEL 4 & 5
* Use an admon/important template to highlight the differences in EPEL 4 & 5
* change %{_optflag} to %{optflag}, which seems to be right according to <code>rpm --eval</code> and was mentioned in the discussion page of the original site
* change %{_optflags} to %{optflags}, which seems to be right according to <code>rpm --eval</code> and was mentioned in the discussion page of the original site
* Do not mention Fedora 10 or older, since it is EOL
* Do not mention Fedora 10 or older, since it is EOL
* Do not call Fedora 11 "Fedora Core 11", Core and Extras merged
* Do not call use old "Fedora Core" terminology.
* Explain use case for rpm directory macros
* Explain use case for rpm directory macros
* reorder macros: first macros to be used in specs, then the macros to be used in rpmbuild
* reorder macros: first macros to be used in specs, then the macros to be used in rpmbuild
Line 10: Line 11:
* add $RPM_OPT_FLAGS, $RPM_BUILD_ROOT - they are variables and not macros, but serve the same use case
* 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
* fix alignment in build flag macros
 
* Remove old and outdated links to Mandriva/PLD macro conversions
Uncovered issues:
* %{opflags} are out of sync for F12 (and probably F11, because there -march is set to i586 afaik):
** x86_64: <code>-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic</code>
** i386: <code>-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</code>
* having two macros for the same path is imho bad: <code>%{_var}</code> vs <code>%{_localstatedir}</code> and <code>%{_usr}</code> vs <code>%{_prefix}</code>




= Valid RPM Macros =
= 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 "<code>rpm --showrc</code>". To see the expanded definition of a macro use the command <code>rpm --eval "%{macro}"</code>.  Note that neither command will take into account macros defined inside specfiles, but both will take into account macros defined in your <code>~/.rpmmacros</code> file and macros defined on the command line.
Here are the definitions for some common specfile macros as they are defined on Fedora 13 (rpm-4.8.0-14.fc13). For definitions of more macros, examine the output of "<code>rpm --showrc</code>". To see the expanded definition of a macro use the command <code>rpm --eval "%{macro}"</code>.  Note that neither command will take into account macros defined inside specfiles, but both will take into account macros defined in your <code>~/.rpmmacros</code> 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.  
Keep in mind that some of these macros may evaluate differently on older Fedora or EPEL releases.  
Line 54: Line 50:
%{_usr}              /usr
%{_usr}              /usr
%{_usrsrc}            %{_usr}/src
%{_usrsrc}            %{_usr}/src
%{_lib}              lib (lib64 on 64bit systems)
%{_lib}              lib (lib64 on 64bit multilib systems)
%{_docdir}            %{_datadir}/doc
%{_docdir}            %{_datadir}/doc
%{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
%{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
Line 61: Line 57:


=== Build flags macros and variables ===
=== Build flags macros and variables ===
These macros should be used as flags for the compiler or linker.
These macros should be used as flags for the compiler or linker. Note that the values for the macros below reflect the settings on Fedora 13 (i686) with redhat-rpm-config installed.
 
<pre>
<pre>
%{_global_cflags}   -O2 -g -pipe
%{__global_cflags}   -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4
%{optflags}          %{__global_cflags} -m32 -march=i386 -mtune=pentium4 # if redhat-rpm-config is installed
%{optflags}          %{__global_cflags} -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables
$RPM_OPT_FLAGS      %{optflags}
$RPM_OPT_FLAGS      %{optflags}
</pre>
</pre>
Line 84: Line 81:
}}
}}


 
[[Category:Archived packaging guideline drafts]]
== Reference ==
Here are macros from other distributions to aid you in package conversion:
 
* [[Extras/ReferencePLDRPMMacros| PLD RPM Macros]]
* [[Extras/ReferenceMandrakeRPMMacros| Mandrake RPM Macros]]

Latest revision as of 17:21, 19 May 2010

This draft updates the existing Packaging/RPMMacros page in the following ways:

  • Use an admon/important template to highlight the differences in EPEL 4 & 5
  • change %{_optflags} to %{optflags}, 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 use old "Fedora Core" terminology.
  • 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
  • Remove old and outdated links to Mandriva/PLD macro conversions


Valid RPM Macros

Here are the definitions for some common specfile macros as they are defined on Fedora 13 (rpm-4.8.0-14.fc13). 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
%{_datarootdir}       %{_prefix}/share
%{_datadir}           %{_datarootdir}
%{_includedir}        %{_prefix}/include
%{_infodir}           /usr/share/info
%{_mandir}            /usr/share/man
%{_localstatedir}     /var
%{_initddir}          %{_sysconfdir}/rc.d/init.d
Important.png
Differences in EPEL 4 & 5
  • %{_initddir} does not exist in EPEL 4 & 5, use the deprecated %{_initrddir} macro instead
  • %{_sharedstatedir} expands to %{_prefix}/com in EPEL 4 & 5

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 multilib 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. Note that the values for the macros below reflect the settings on Fedora 13 (i686) with redhat-rpm-config installed.

%{__global_cflags}   -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4
%{optflags}          %{__global_cflags} -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables
$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
Important.png
Differences in EPEL 4 & 5
  • %{_buildrootdir} does not exist in EPEL 4 & 5