From Fedora Project Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This is my incomplete checklist:

Review Guidelines
-----------------
URL: Packaging:ReviewGuidelines
Stand: 2010-02-27
() - SHOULD
[] - MUST
{} - external Guidelines
<> - Optional / common sense


[] rpmlint output:
[] Spec in %{name}.spec format

[] license allowed:
[] license matches shortname in License: tag
Licensing
[] license in tarball and included in %doc:
[] package is code or permissive content:
Packaging/Guidelines#CodeVsContent
{} patches sent to upstream and commented
Packaging/PatchUpstreamStatus
Packaging/Minutes20080506
[] Source0 is a working URL
Packaging/SourceURL
{} Sourceforge URL is Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz
Packaging/SourceURL#Sourceforge.net
<> SourceX / PatchY prefixed with %{name}
[] Source0 matches Upstream:

{} Smallest compressed archive used
Packaging:SourceURL

<> Latest version is packaged

[] Package builds on all primary architectures:
[] ExcludeArch bugs are filed and commented:
[] BuildRequires are complete (mock builds)
() No file dependencies outside of /etc /bin /sbin /usr/bin /usr/sbin
Packaging/Guidelines#FileDeps

[] %find_lang used for locales
Packaging/Guidelines#Handling_Locale_Files
in %install: %find_lang %{name} 
%files -f %{name}.lang
Maybe: BuildRequires: gettext

[] Every (sub)package containing libraries runs ldconfig
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
[] .h (header) files are in -devel subpackage
[] .a (static libraries) are in -static subpackage
[] contains .pc (pkgconfig) files and has Requires: pkgconfig
() .pc files are in -devel subpackage
[] contains .so.X(.Y) files and .so is in -devel
[] -devel subpackage has Requires: %{name} = %{version}-%{release}
[] .la files (libtool) are not included
[] does not bundle copies of system libraries
Packaging:Guidelines#Duplication_of_system_libraries

[] Has GUI and includes %{name}.desktop
Packaging/Guidelines#desktop
[] Follows desktop entry spec
http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
[] Valid .desktop Name
[] Valid .desktop GenericName
[] Valid .desktop Categories
http://standards.freedesktop.org/menu-spec/latest/apa.html
[] Valid .desktop StartupNotify
http://www.freedesktop.org/wiki/Specifications/startup-notification-spec?action=show&redirect=Standards%2Fstartup-notification-spec
[] .desktop file installed with desktop-file-install in %install
[] Prefix: /usr not used (not relocatable)
Packaging/Guidelines#Relocatable_packages

[] Owns all created directories
[] no duplicates in %files
[] %defattr(-,root,root,-) is in every %files section
[] Does not own files or dirs from other packages
[] included filenames are in UTF-8

[] %clean is rm -rf %{buildroot} or $RPM_BUILD_ROOT 
[] %install starts with rm -rf %{buildroot} or $RPM_BUILD_ROOT 
Packaging/Guidelines#PreppingBuildRootForInstall
[] Consistent macro usage
Packaging/Guidelines#macros

[] large documentation is -doc subpackage
[] %doc does not affect runtime
() Contains manpage for every executable
Packaging/Guidelines#Man_pages

<> %check is present and all tests pass
Packaging Guidelines
--------------------
URL: Packaging/Guidelines
Stand: 2009-04-13

{} no pre-built binaries (.a, .so*, executable)
Packaging/Guidelines#No_inclusion_of_pre-built_binaries_or_libraries
find -print0 -type f | xargs -0 file | cut -d" " -f 2- | sed 's/^ *//' | sort -u

{} well known BuildRoot
%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%{_tmppath}/%{name}-%{version}-%{release}-root
Packaging/Guidelines#BuildRoot_tag

{} PreReq not used
Packaging/Guidelines#PreReq
{} RPM_OPT_FLAGS honoured
Packaging/Guidelines#Compiler_flags
{} Useful debuginfo generated
Packaging/Guidelines#Debuginfo_packages
{} no duplication of system libraries
Packaging/Guidelines#Duplication_of_system_libraries
{} no rpath
Packaging/Guidelines#Beware_of_Rpath
{} Timestamps preserved with cp and install
Packaging/Guidelines#Timestamps
{} Uses parallel make (%{?_smp_mflags})
Packaging/Guidelines#Parallel_make
{} Requires(pre,post) style notation not used
Packaging/Guidelines#Scriptlets_requirements
{} only writes to tmp /var/tmp $TMPDIR %{_tmppath} %{_builddir} (and %{buildroot} on %install and %clean)
Packaging/Guidelines#Scriplets_are_only_allowed_to_write_in_certain_directories
{} no Conflicts
Packaging/Conflicts
{} nothing installed in /srv
Packaging/Guidelines#No_Files_or_Directories_under_.2Fsrv
{} Changelog in allowed format
Packaging/Guidelines#Changelogs
{} does not use Scriptlets
There are some rules...

<> Architecture independent packages have: BuildArch: noarch
<> Sane Provides: and Requires:

Naming Guidelines
-----------------
URL: http://fedoraproject.org/wiki/Packaging/NamingGuidelines

{} Follows Naming Guidelines
Packaging/NamingGuidelines
Packaging/NamingGuidelines#Pre-Release_packages

ScriptletSnippets Guidelines
----------------------------
URL: Packaging/ScriptletSnippets

{} shared libraries scriptlet
{} %{_sysconfdir}/gconf/schemas/*.schemas - gconf handling
{} %{_infodir} - texinfo handling
Packaging/ScriptletSnippets#Texinfo
{} scrollkeeper
{} .desktop files with MimeType
Packaging/ScriptletSnippets#desktop-database
{} %{_datadir}/mime/packages. mimeinfo
{} %{_datadir}/icons/hicolor GTK+ Icon Cache
Packaging/ScriptletSnippets#GTK.2B_icon_cache
{} %{_datadir}/fonts Fonts

Debuginfo Guidelines
--------------------
Packaging/Debuginfo


{} follows special guidelines
Cmake
Packaging/cmake

Eclipse 
Packaging/EclipsePlugins 

Emacs 
Packaging/Emacs 

Fonts 
Packaging/FontsPolicy 

Java 
Packaging/Java 

Mono 
Packaging/Mono 

OCaml 
Packaging/OCaml 

OpenOffice.org 
Packaging/OpenOffice.orgExtensions 

Perl 
Packaging/Perl 

PHP 
Packaging/PHP 

Python
Packaging:Python

{} Has BuildRequires: python2-devel and/or python3-devel
Packaging:Python#BuildRequires

{} Defines and uses %{python_sitelib} or %{python_sitearch}:
%if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%endif
Packaging:Python#Macros


{} Has BuildRequires: python-setuptools-devel

[] Python eggs must be built from source. They cannot simply drop an egg from upstream into the proper directory.
[] Python eggs must not download any dependencies during the build process.
[] If egg-info files are generated by the modules build scripts they must be included in the package.
[] When building a compat package, it must install using easy_install -m so it won't conflict with the main package.
[] When building multiple versions (for a compat package) one of the packages must contain a default version that is usable via "import MODULE" with no prior setup.
() A package which is used by another package via an egg interface should provide egg info. 

{} Egg install:
%install
%{__python} setup.py install --skip-build --root $RPM_BUILD_ROOT 

R 
Packaging/R 

Ruby 
Packaging/Ruby 

Sugar 
Packaging/SugarActivityGuidelines 

Tcl/Tk 
Packaging/Tcl

Haskell
Packaging/Haskell