From Fedora Project Wiki
Mandatory review guidelines: - rpmlint output ... - Package meets naming guidelines - Spec file name matches base package name - License is acceptable (...) - License field in spec is correct - License files included in package %docs or not included in upstream source - License files installed when any subpackage combination is installed - Spec written in American English - Spec is legible - Sources match upstream unless altered to fix permissibility issues Upstream MD5: ... Your MD5: ... - Build succeeds on at least one supported platform - Build succeeds on all supported platforms or has ExcludeArch + bugs filed - BuildRequires correct - Package handles locales with %find_lang - %post, %postun call ldconfig if package contains shared .so files - No bundled system libs - Relocatability is justified - Package owns all directories it creates - Package requires other packages for directories it uses but does not own - No duplicate files in %files unless necessary for license files - File permissions are sane - Each %files section contains %defattr on EL4 - Consistent use of macros - Sources contain only permissible code or content - Large documentation files go in -doc package - Missing %doc files do not affect runtime - Headers go in -devel package - Static libs go in -static package - Unversioned .so files go in -devel package - Devel packages require base with fully-versioned dependency - Package contains no .la files - GUI app uses desktop-file-install/desktop-file-validate for .desktop files - Package's files and directories don't conflict with others' or justified - File names are valid UTF-8 Optional review guidelines: - Query upstream about including license files - Translations of description, Summary - Builds in mock - Builds on all supported platforms - Functions as described - Scriptlets are sane - Non-devel subpackage Requires are sane - .pc files go in -devel unless main package is a development tool - No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin - Man pages included for all executables - Package with test-suite executes it in %check section Packaging guidelines: - Has dist tag - Useful without external bits - Package obeys FHS, except libexecdir, /usr/target, /run - No file in /bin, /sbin, /lib* on >= F17 - Programs launched before FS mounting use /run instead of /var/run - Binaries in /bin, /sbin do not depend on files in /usr on < F17 - Changelog in prescribed format - Spec file lacks Packager, Vendor, PreReq tags - Correct BuildRoot tag on < F10/EL6 - Correct %clean section on < F13/EL6 - Requires correct, justified where necessary - Summary, description do not use trademarks incorrectly - All relevant documentation is packaged, tagged appropriately - Documentation files do not have executable permissions - Code compilable with gcc is compiled with gcc - %build honors applicable compiler flags or justifies otherwise - PIE used for long-running/root daemons, setuid/filecap programs - Package with .pc files Requires pkgconfig on < EL6 - Useful -debuginfo package or disabled and justified - No static executables - Rpath absent or only used for internal libs - Config files marked with %config - %config files marked noreplace or justified - No %config files under /usr - Third party package manager configs acceptable, in %_docdir - Spec uses macros instead of hard-coded directory names where appropriate - Spec uses macros for executables only when configurability is needed - %makeinstall used only when ``make install DESTDIR=...'' doesn't work - Macros in Summary, %description expandable at SRPM build time - Spec uses %{SOURCE#} instead of $RPM_SOURCE_DIR or %{sourcedir} - No software collections (scl) - Build uses only python/perl/shell+coreutils/lua/BuildRequired languages - %global instead of %define where appropriate - Package containing translations BuildRequires gettext - File timestamps preserved by file ops - Parallel make - Spec does not use Requires(pre,post) notation - User, group creation handled correctly (See Packaging:UsersAndGroups) - Web app files go in /usr/share/%{name}, not /var/www - Conflicts are justified - No external kernel modules - No files in /srv, /opt, /usr/local - One project per package - Patches link to upstream bugs/comments/lists or are otherwise justified - Packages needing dirs in /var/run or /var/lock use tmpfiles.d on >= F15 Application / Language-specific guidelines: ...
Systemd Guidelines
- Traditional service uses a unit file - Non-standard service commands converted to standalone scripts - Unit names are sane - Description= lines do not exceed 80 characters - Types are correct - Requires=, Wants= used only when necessary - Units to not refer to runlevel*.target - Symlinks used instead of Name= - StandardOutput=, StandardError= used only when necessary - Socket-activated service has FESCo approval, correct unit files - Unit files go in %_unitdir - BuildRequires: systemd-units for %_unitdir macro - Packaged unit files are not %config files - Unit file scriptlets are correct - tmpfiles.d used where needed
Java Guidelines
- Javadocs go in javadoc subpackage - Prefer split JARs over monolithic - JAR file names correct - JAR files go in %{_javadir} or %{_javadir}-$version - Multiple JAR files go in a %{name} subdirectory - Javadocs go in unversioned %{_javadocdir}/%{name} - javadoc subpackage is noarch on > EL5 - BuildRequires java-devel, jpackage-utils - Requires java >= $version, jpackage-utils - Dependencies on java/java-devel >= 1.6.0 add epoch 1 - Package requiring maven2 Requires jpackage-utils for post and postun - Package requiring maven contains correct maven-specific code in spec - Wrapper script in %{_bindir} - GCJ AOT bits follow GCJ guidelines - No devel package - pom.xml files, if any, installed with %add_maven_depmap - JNI shared objects, JARs that require them go in %{_libdir}/%{name} - Calls to System.loadLibrary replaced w/ System.load w/ full .so path - Bundled JAR files not included or used for build - No Javadoc %post/%ghost - No class-path elements in JAR manifests
Python Guidelines
- Runtime Requires correct - Python macros declared on < F13/EL6 - All .py files packaged with .pyc, .pyo counterparts - Includes .egg-info files/directories when generated - Provides/Requires properly filtered - Code that invokes gtk.gdk.get_pixels_array() Requires numpy