Please note that User Registration has been temporarily disabled due to a recent increase in automated registrations. If anyone needs an account, please request one here: RequestAccount. Thanks for your patience!

Difference between revisions of "Styleguide"

From Openembedded.org
Jump to: navigation, search
(Example Recipe: take out maintainer field)
(Remove reference to PRIORITY)
(12 intermediate revisions by 8 users not shown)
Line 6: Line 6:
  
 
* No spaces are allowed behind the line continuation symbol
 
* No spaces are allowed behind the line continuation symbol
 +
* The correct spacing for a variable is FOO = "BAR".
 
* Use quotes on the right hand side of assignments: FOO = "BAR"
 
* Use quotes on the right hand side of assignments: FOO = "BAR"
 
* Comments inside bb files are allowed using the '#' character at the beginning of a line.
 
* Comments inside bb files are allowed using the '#' character at the beginning of a line.
* Use either tabs '''or''' spaces for indentation, but don't mix the two in the same file
+
* Use spaces for indentation as developers tends to use different amount of spaces per one tab.
* The correct spacing for a variable is FOO = "BAR".
+
 
* Indentation of multiline variables such as SRC_URI is desireable.
 
* Indentation of multiline variables such as SRC_URI is desireable.
 +
* Python functions should be four space indented, no tabs.
 +
* Shell functions are usually tab character indented.
 +
 +
= Style Checking tools =
 +
 +
Please run ./contrib/oe-stylize.py on your recipes before submitting them.
  
 
= Style Guidelines =
 
= Style Guidelines =
  
 
* Put the ''inherit'' declaration after the initial variables are set up and before any custom ''do_'' routines. This is flexible as ordering is often important.
 
* Put the ''inherit'' declaration after the initial variables are set up and before any custom ''do_'' routines. This is flexible as ordering is often important.
 
 
* If you define custom ''do_'' routines, keep them in the order of the tasks being executed, that is:
 
* If you define custom ''do_'' routines, keep them in the order of the tasks being executed, that is:
 
** do_fetch
 
** do_fetch
Line 23: Line 28:
 
** do_compile
 
** do_compile
 
** do_install
 
** do_install
 +
** do_populate_sysroot
 
** do_package
 
** do_package
** do_stage
 
  
 
* Don't use ''cp'' to put files into staging or destination directories, use ''install'' instead.
 
* Don't use ''cp'' to put files into staging or destination directories, use ''install'' instead.
Line 34: Line 39:
 
** HOMEPAGE
 
** HOMEPAGE
 
** SECTION
 
** SECTION
** PRIORITY
 
 
** LICENSE
 
** LICENSE
 
** DEPENDS
 
** DEPENDS
Line 54: Line 58:
 
** PACKAGES
 
** PACKAGES
 
** FILES
 
** FILES
 +
 +
* Package related variables for a given package are often grouped together for clarity.
  
 
= Example Recipe =
 
= Example Recipe =
  
 
<pre>
 
<pre>
DESCRIPTION = "X11 Code Viewer"
+
SUMMARY = "X11 Code Viewer"
 +
DESCRIPTION = "Allow viewing of X11 code in a fancy way which allows easier \
 +
              and more productive X11 programming"
 
AUTHOR = "John Bazz <john.bazz@example.org>"
 
AUTHOR = "John Bazz <john.bazz@example.org>"
 
HOMEPAGE = "http://www.example.org/xcv/"
 
HOMEPAGE = "http://www.example.org/xcv/"
 
SECTION = "x11/applications"
 
SECTION = "x11/applications"
PRIORITY = "optional"
+
LICENSE = "GPL-2.0"
LICENSE = "GPLv2"
+
 
DEPENDS = "libsm libx11 libxext libxaw"
 
DEPENDS = "libsm libx11 libxext libxaw"
RDEPENDS = "shared-mime-info"
+
PV = "0.9+git${SRCPV}"
RRECOMMENTS = "ctags"
+
RCONFLICTS = "xcv2"
+
SRCDATE = "20060815"
+
PV = "0.0+cvs${SRCDATE}"
+
PR = "r5"
+
  
# upstream does not yet publish any release so we have to fetch last working version from CVS
+
# upstream does not yet publish any release so we have to fetch last working version from GIT
SRC_URI = "cvs://anonymous@xcv.example.org/cvsroot/xcv;module=xcv \
+
SRCREV = "6a5e79ae8a0f4a273a603b2df1742972510d3d8f"
           file://toolbar-resize-fix.patch;patch=1"
+
SRC_URI = "git://xcv.example.org/xcv;protocol=http \
 +
           file://toolbar-resize-fix.patch"
  
 
S = "${WORKDIR}/xcv/"
 
S = "${WORKDIR}/xcv/"
Line 91: Line 94:
 
     install -m 0644 xcv.1.gz ${D}${mandir}/man1/
 
     install -m 0644 xcv.1.gz ${D}${mandir}/man1/
 
}
 
}
 +
 +
RDEPENDS_${PN} = "shared-mime-info"
 +
RRECOMMENDS_${PN} = "ctags"
 +
RCONFLICTS_${PN} = "xcv2"
 
</pre>
 
</pre>
  
 +
= PR variables with recipes that use INC files =
 +
When recipe include files are used, the PR handling gets kind of messy.  Its a pain to have to audit the PR in all the dependent recipes when you change something in an INC file.  We usually use the following solution:
 +
 +
<pre>
 +
recipe: PR = "${INC_PR}.1"
 +
 +
inc file: INC_PR = "r1"
 +
</pre>
 +
 +
When converting existing recipes to use INC_PR, set the initial INC_PR to the maximum of the current PRs.
 
[[Category:Policy]]
 
[[Category:Policy]]
 +
 +
Also see https://wiki.yoctoproject.org/wiki/Recipe_%26_Patch_Style_Guide

Revision as of 08:53, 11 October 2013

Contents

Naming Conventions

Use $packagename_$version.bb

Format Guidelines

  • No spaces are allowed behind the line continuation symbol
  • The correct spacing for a variable is FOO = "BAR".
  • Use quotes on the right hand side of assignments: FOO = "BAR"
  • Comments inside bb files are allowed using the '#' character at the beginning of a line.
  • Use spaces for indentation as developers tends to use different amount of spaces per one tab.
  • Indentation of multiline variables such as SRC_URI is desireable.
  • Python functions should be four space indented, no tabs.
  • Shell functions are usually tab character indented.

Style Checking tools

Please run ./contrib/oe-stylize.py on your recipes before submitting them.

Style Guidelines

  • Put the inherit declaration after the initial variables are set up and before any custom do_ routines. This is flexible as ordering is often important.
  • If you define custom do_ routines, keep them in the order of the tasks being executed, that is:
    • do_fetch
    • do_unpack
    • do_patch
    • do_configure
    • do_compile
    • do_install
    • do_populate_sysroot
    • do_package
  • Don't use cp to put files into staging or destination directories, use install instead.
  • Don't use mkdir to create destination directories, use install -d instead.
  • There is a standard set of variables often found in a .bb file and the preferred order (to make the file easily readable to seasoned developers) is
    • DESCRIPTION
    • AUTHOR
    • HOMEPAGE
    • SECTION
    • LICENSE
    • DEPENDS
    • RDEPENDS
    • RRECOMMENDS
    • RSUGGESTS
    • PROVIDES
    • RPROVIDES
    • RCONFLICTS
    • SRCDATE
    • PV
    • PR
    • SRC_URI
    • S
    • inherit ...
    • build class specific variables, i.e. EXTRA_QMAKEVARS_POST
    • task overrides, i.e. do_configure
    • PACKAGE_ARCH
    • PACKAGES
    • FILES
  • Package related variables for a given package are often grouped together for clarity.

Example Recipe

SUMMARY = "X11 Code Viewer"
DESCRIPTION = "Allow viewing of X11 code in a fancy way which allows easier \
               and more productive X11 programming"
AUTHOR = "John Bazz <john.bazz@example.org>"
HOMEPAGE = "http://www.example.org/xcv/"
SECTION = "x11/applications"
LICENSE = "GPL-2.0"
DEPENDS = "libsm libx11 libxext libxaw"
PV = "0.9+git${SRCPV}"

# upstream does not yet publish any release so we have to fetch last working version from GIT
SRCREV = "6a5e79ae8a0f4a273a603b2df1742972510d3d8f"
SRC_URI = "git://xcv.example.org/xcv;protocol=http \
           file://toolbar-resize-fix.patch"

S = "${WORKDIR}/xcv/"

inherit autotools

do_configure_prepend() {
    rm ${S}/aclocal.m4
}

do_install() {
    install -d ${D}${bindir}
    install -d ${D}${mandir}/man1

    install -m 0755 xcv ${D}${bindir}/   
    install -m 0644 xcv.1.gz ${D}${mandir}/man1/
}

RDEPENDS_${PN} = "shared-mime-info"
RRECOMMENDS_${PN} = "ctags"
RCONFLICTS_${PN} = "xcv2"

PR variables with recipes that use INC files

When recipe include files are used, the PR handling gets kind of messy. Its a pain to have to audit the PR in all the dependent recipes when you change something in an INC file. We usually use the following solution:

recipe: PR = "${INC_PR}.1"

inc file: INC_PR = "r1"

When converting existing recipes to use INC_PR, set the initial INC_PR to the maximum of the current PRs.

Also see https://wiki.yoctoproject.org/wiki/Recipe_%26_Patch_Style_Guide

Personal tools
Namespaces

Variants
Actions
Navigation
Categories
OE services
Toolbox