No edit summary |
|||
Line 13: | Line 13: | ||
If at runtime you use <code>cpp</code> to process C or C++ language headers then you have no choice but to use <code>Requires</code> for <code>gcc</code>, <code>gcc-c++</code>, or <code>clang</code> to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. <code>c-headers</code> or <code>c++-headers</code>. | If at runtime you use <code>cpp</code> to process C or C++ language headers then you have no choice but to use <code>Requires</code> for <code>gcc</code>, <code>gcc-c++</code>, or <code>clang</code> to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. <code>c-headers</code> or <code>c++-headers</code>. | ||
You need not include a <code>BuildRequires</code> or <code>Requires</code> on <code>glibc-headers</code>, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the <code>.*-static</code> library packages. The default use case of a dynamically compiled C or C++ application is taken care of by the <code>gcc</code>, <code>gcc-c++</code>, and <code>clang</code> packages. | You need not include a <code>BuildRequires</code> or <code>Requires</code> on <code>glibc-headers</code>, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the <code>.*-static</code> library packages e.g. <code>BuildRequires: glibc-static</code>. The default use case of a dynamically compiled C or C++ application is taken care of by the <code>gcc</code>, <code>gcc-c++</code>, and <code>clang</code> packages. | ||
Please refer to [https://fedoraproject.org/wiki/Packaging:Guidelines#Compiler Packaging:Guidelines Compiler] for the list of supported compilers for C and C++ compilers. | Please refer to [https://fedoraproject.org/wiki/Packaging:Guidelines#Compiler Packaging:Guidelines Compiler] for the list of supported compilers for C and C++ compilers. |
Revision as of 20:47, 30 October 2015
This page contains best practices for packages that make use of or depend on C or C++ in Fedora, from development, debugging, and maintenance to packaging.
Packaging C and C++ applications
There are two basic categories of C and C++ packages: applications and libraries. Some of these guidelines will also apply to packages that use cpp to process C or C++ headers.
BuildRequires and Requires
If your application is a C or C++ application you must list a BuildRequires
against gcc
, gcc-c++
or clang
. Those packages will include everything that is required to build a standards conforming C or C++ application.
If your library includes standard C or C++ headers, you must list BuildRequires
against gcc
, gcc-c++
, or clang
to install the needed standards conforming headers.
If at runtime you use cpp
to process C or C++ language headers then you have no choice but to use Requires
for gcc
, gcc-c++
, or clang
to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. c-headers
or c++-headers
.
You need not include a BuildRequires
or Requires
on glibc-headers
, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the .*-static
library packages e.g. BuildRequires: glibc-static
. The default use case of a dynamically compiled C or C++ application is taken care of by the gcc
, gcc-c++
, and clang
packages.
Please refer to Packaging:Guidelines Compiler for the list of supported compilers for C and C++ compilers.
Question and Answer
Q: Do I need a Requires: glibc
to ensure I have the C runtime installed for my application?
A: No. RPM will automatically determine what ELF libraries you need based on the binaries in your package. This is sufficient to cause glibc to be installed.
Q: Do I need to include a Requires: libgcc
?
A: If you are using an API from libgcc
directly, then yes, you must have a Requires: libgcc
. In general though glibc
requires libgcc
, so it is always installed.