From Fedora Project Wiki

This is my personal review Template. It is based on the package review guidelines and updated frequently.

The template assumes that all items are met. Exceptions will be noted.


MUST items

 - MUST: rpmlint output:
 - MUST: package is named according to the Package Naming Guidelines
 - MUST: spec file name matches the base package in the format %{name}.spec
 - MUST: package meets the Packaging Guidelines
 - MUST: package is licensed with a Fedora approved license and meets the Licensing Guidelines
 - MUST: License field in the package spec file matches the actual license.
 - MUST: source package includes the text of the license in its own file and that file is included in %doc
 - MUST: spec file is written in American English
 - MUST: spec file for the package is legible
 - MUST: sources match the upstream source, as provided in the spec URL by md5 ......
 - MUST: package successfully compiles and builds into binary rpms on at least one primary architecture
 - MUST: If the package does not successfully compile, build or work on an architecture, then those architectures should be listed in the spec in ExcludeArch
 - MUST: all build dependencies are listed in BuildRequires
 - MUST: spec file handles locales properly using %find_lang
 - MUST: package (or subpackage) stores shared library files in the dynamic linker's default paths and call ldconfig in %post and %postun
 - MUST: package does not bundle copies of system libraries
 - MUST: package is not designed to be relocatable
 - MUST: package owns all directories that it creates
 - MUST: package does not list a file more than once in the spec file's %files listings
 - MUST: permissions on files are set properly
 - MUST: package consistently use macros
 - MUST: package contains code, or permissable content
 - MUST: large documentation files must go in a -doc subpackage
 - MUST: files included as %doc do not affect the runtime of the application
 - MUST: header files are in -devel package
 - MUST: static libraries are in -static package
 - MUST: library files with a suffix are in -devel package
 - MUST: -devel package requires the base package using a fully versioned dependency
 - MUST: package does not contain any .la libtool archives
 - MUST: package does not include a GUI application, no need for a %{name}.desktop file | package contains a GUI application and includes a %{name}.desktop file that is properly installed with desktop-file-install in the %install section
 - MUST: package does not own files or directories already owned by other packages
 - MUST: all filenames in the package are valid UTF-8


SHOULD items

 - SHOULD: source package does not include license text(s) as a separate file from upstream, query upstream to include it
 - SHOULD: description and summary sections should contain translations for supported Non-English languages, if available
 - SHOULD: package builds in mock
 - SHOULD: package compiles and builds into binary rpms on all supported architectures
 - SHOULD: package functions as described
 - SHOULD: scriptlets are sane
 - SHOULD: subpackages other than devel require the base package using a fully versioned dependency
 - SHOULD: pkgconfig(.pc) files are in -devel package
 - SHOULD: package has no file dependencies outside of /etc, /bin, /sbin, /usr/bin, or /usr/sbin
 - SHOULD: package contains man pages for binaries/scripts


OTHER items

 - latest stable version packaged
 - source URL valid
 - compiler flags ok
 - debuginfo complete
 - package has a %clean section, which contains rm -rf %{buildroot} ( or $RPM_BUILD_ROOT ).
 - package contains a pkgconfig(.pc) files and has 'Requires: pkgconfig'.