From Fedora Project Wiki

< User:Gholms

Revision as of 18:26, 29 June 2012 by Gholms (talk | contribs) (Added perl guidelines)

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.
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

Perl Guidelines

 - Module requirements use virtual perl(modname) syntax
 - Spec BuildRequires correct core modules, not perl-devel
 - Spec contains correct MODULE_COMPAT Requires
 - Requires/Provides are sane
 - CPAN URL tag is not versioned
 - All tests enabled where possible
 - Use Build.PL if present unless justified otherwise
 - .h files not split into -devel package

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