Squashed 'import-layers/meta-openembedded/' content from commit 247b126

Change-Id: I40827e9ce5fba63f1cca2a0be44976ae8383b4c0
git-subtree-dir: import-layers/meta-openembedded
git-subtree-split: 247b1267bbe95719cd4877d2d3cfbaf2a2f4865a
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/import-layers/meta-openembedded/contrib/oe-stylize.py b/import-layers/meta-openembedded/contrib/oe-stylize.py
new file mode 100755
index 0000000..db8a363
--- /dev/null
+++ b/import-layers/meta-openembedded/contrib/oe-stylize.py
@@ -0,0 +1,411 @@
+#!/usr/bin/env python
+
+"""\
+Sanitize a bitbake file following the OpenEmbedded style guidelines,
+see http://openembedded.org/wiki/StyleGuide 
+
+(C) 2006 Cyril Romain <cyril.romain@gmail.com>
+MIT license
+
+TODO: 
+ - add the others OpenEmbedded variables commonly used:
+ - parse command arguments and print usage on misuse
+    . prevent giving more than one .bb file in arguments
+ - write result to a file
+ - backup the original .bb file
+ - make a diff and ask confirmation for patching ?
+ - do not use startswith only:
+    /!\ startswith('SOMETHING') is not taken into account due to the previous startswith('S').
+ - count rule breaks and displays them in the order frequence
+"""
+
+from __future__ import print_function 
+import fileinput
+import string
+import re
+
+__author__ = "Cyril Romain <cyril.romain@gmail.com>"
+__version__ = "$Revision: 0.5 $"
+
+# The standard set of variables often found in .bb files in the preferred order
+OE_vars = [
+    'SUMMARY',
+    'DESCRIPTION',
+    'AUTHOR',
+    'HOMEPAGE',
+    'SECTION',
+    'LICENSE',
+    'LIC_FILES_CHKSUM',
+    'DEPENDS',
+    'PROVIDES',
+    'SRCREV',
+    'SRCDATE',
+    'PE',
+    'PV',
+    'PR',
+    'INC_PR',
+    'SRC_URI',
+    'S',
+    'GPE_TARBALL_SUFFIX',
+    'inherit',
+    'EXTRA_',
+    'export',
+    'do_fetch',
+    'do_unpack',
+    'do_patch',
+    'WORKDIR',
+    'acpaths',
+    'do_configure',
+    'do_compile',
+    'do_install',
+    'PACKAGES',
+    'PACKAGE_ARCH',
+    'RDEPENDS',
+    'RRECOMMENDS',
+    'RSUGGESTS',
+    'RPROVIDES',
+    'RCONFLICTS',
+    'FILES',    
+    'do_package',
+    'do_stage',
+    'addhandler',
+    'addtask',
+    'bindir',
+    'headers',
+    'include',
+    'includedir',
+    'python',
+    'qtopiadir',
+    'pkg_preins',
+    'pkg_prerm',
+    'pkg_postins',
+    'pkg_postrm',
+    'require',
+    'sbindir',
+    'basesysconfdir',
+    'sysconfdir',
+    'ALLOW_EMPTY',
+    'ALTERNATIVE_NAME',
+    'ALTERNATIVE_PATH',
+    'ALTERNATIVE_LINK',
+    'ALTERNATIVE_PRIORITY',
+    'ALTNAME',
+    'AMD_DRIVER_LABEL',
+    'AMD_DRIVER_VERSION',
+    'ANGSTROM_EXTRA_INSTALL',
+    'APPDESKTOP',
+    'APPIMAGE',
+    'APPNAME',
+    'APPTYPE',
+    'APPWEB_BUILD',
+    'APPWEB_HOST',
+    'AR',
+    'ARCH',
+    'ARM_INSTRUCTION_SET',
+    'ARM_MUTEX',
+    'ART_CONFIG',
+    'B',
+    'BJAM_OPTS',
+    'BJAM_TOOLS',
+    'BONOBO_HEADERS',
+    'BOOTSCRIPTS',
+    'BROKEN',
+    'BUILD_CPPFLAGS',
+    'CFLAGS',
+    'CCFLAGS',
+    'CMDLINE',
+    'COLLIE_MEMORY_SIZE',
+    'COMPATIBLE_HOST',
+    'COMPATIBLE_MACHINE',
+    'COMPILE_HERMES',
+    'CONFFILES',
+    'CONFLICTS',
+    'CORE_EXTRA_D',
+    'CORE_IMAGE_EXTRA_INSTALL',
+    'CORE_PACKAGES_D',
+    'CORE_PACKAGES_RD',
+    'CPPFLAGS',
+    'CVSDATE',
+    'CXXFLAGS',
+    'DEBIAN_NOAUTONAME',
+    'DEBUG_APPS',
+    'DEFAULT_PREFERENCE',
+    'DB4_CONFIG',
+    'EXCLUDE_FROM_SHLIBS',
+    'EXCLUDE_FROM_WORLD',
+    'FIXEDSRCDATE',
+    'GLIBC_ADDONS',
+    'GLIBC_EXTRA_OECONF',
+    'GNOME_VFS_HEADERS',
+    'HEADERS',
+    'INHIBIT_DEFAULT_DEPS',
+    'INITSCRIPT_PACKAGES',
+    'INITSCRIPT_NAME',
+    'INITSCRIPT_PARAMS',
+    'INSANE_SKIP',
+    'PACKAGE_INSTALL',
+    'KERNEL_IMAGETYPE',
+    'KERNEL_IMAGEDEST',
+    'KERNEL_OUTPUT',
+    'KERNEL_RELEASE',
+    'KERNEL_PRIORITY',
+    'KERNEL_SOURCE',
+    'KERNEL_SUFFIX',
+    'KERNEL_VERSION',
+    'K_MAJOR',
+    'K_MICRO',
+    'K_MINOR',
+    'HHV',
+    'KV',
+    'LDFLAGS',
+    'LD',
+    'LD_SO',
+    'LDLIBS',
+    'LEAD_SONAME',
+    'LIBTOOL',
+    'LIBBDB_EXTRA',
+    'LIBV',
+    'MACHINE_ESSENTIAL_EXTRA_RDEPENDS',
+    'MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS',
+    'MACHINE_EXTRA_RDEPENDS',
+    'MACHINE_EXTRA_RRECOMMENDS',
+    'MACHINE_FEATURES',
+    'MACHINE_TASKS',
+    'MACHINE',
+    'MACHTYPE',
+    'MAKE_TARGETS',
+    'MESSAGEUSER',
+    'MESSAGEHOME',
+    'MIRRORS',
+    'MUTEX',
+    'OE_QMAKE_INCDIR_QT',
+    'OE_QMAKE_CXXFLAGS',
+    'ORBIT_IDL_SRC',
+    'PARALLEL_MAKE',
+    'PAKCAGE_ARCH',
+    'PCMCIA_MANAGER',
+    'PKG_BASENAME',
+    'PKG',
+    'QEMU',
+    'QMAKE_PROFILES',
+    'QPEDIR',
+    'QPF_DESCRIPTION',
+    'QPF_PKGPATTERN',
+    'QT_CONFIG_FLAGS',
+    'QT_LIBRARY',
+    'ROOTFS_POSTPROCESS_COMMAND',
+    'RREPLACES',
+    'TARGET_CFLAGS',
+    'TARGET_CPPFLAGS',
+    'TARGET_LDFLAGS',
+    'UBOOT_MACHINE',
+    'UCLIBC_BASE',
+    'UCLIBC_PATCHES',
+    'USERADD_PACKAGES',
+    'USERADD_PARAM',
+    'VIRTUAL_NAME',
+    'XORG_PN',
+    'XSERVER',
+    'others'
+]
+
+varRegexp = r'^([a-zA-Z_0-9${}-]*)([ \t]*)([+.:]?=[+.]?)([ \t]*)([^\t]+)'
+routineRegexp = r'^([a-zA-Z0-9_ ${}-]+?)\('
+
+# Variables seen in the processed .bb
+seen_vars = {}
+for v in OE_vars: 
+    seen_vars[v] = []
+
+# _Format guideline #0_: 
+#   No spaces are allowed at the beginning of lines that define a variable or 
+#   a do_ routine
+def respect_rule0(line): 
+    return line.lstrip()==line
+def conformTo_rule0(line): 
+    return line.lstrip()
+
+# _Format guideline #1_: 
+#   No spaces are allowed behind the line continuation symbol '\'
+def respect_rule1(line):
+    if line.rstrip().endswith('\\'):
+        return line.endswith('\\')
+    else: 
+        return True
+def conformTo_rule1(line):
+    return line.rstrip()
+
+# _Format guideline #2_: 
+#   Tabs should not be used (use spaces instead).
+def respect_rule2(line):
+    return line.count('\t')==0
+def conformTo_rule2(line):
+    return line.expandtabs()
+
+# _Format guideline #3_:
+#   Comments inside bb files are allowed using the '#' character at the 
+#   beginning of a line.
+def respect_rule3(line):
+    if line.lstrip().startswith('#'):
+        return line.startswith('#')
+    else: 
+        return True
+def conformTo_rule3(line):
+    return line.lstrip()
+
+# _Format guideline #4_:
+#   Use quotes on the right hand side of assignments FOO = "BAR"
+def respect_rule4(line):
+    r = re.search(varRegexp, line)
+    if r is not None:
+        r2 = re.search(r'("?)([^"\\]*)(["\\]?)', r.group(5))
+        # do not test for None it because always match
+        return r2.group(1)=='"' and r2.group(3)!=''
+    return False
+def conformTo_rule4(line):
+    r = re.search(varRegexp, line)
+    return ''.join([r.group(1), ' ', r.group(3), ' "', r.group(5), r.group(5).endswith('"') and '' or '"'])
+
+# _Format guideline #5_:
+#   The correct spacing for a variable is FOO = "BAR".
+def respect_rule5(line):
+    r = re.search(varRegexp, line)
+    return r is not None and r.group(2)==" " and r.group(4)==" "
+def conformTo_rule5(line):
+    r = re.search(varRegexp, line)
+    return ''.join([r.group(1), ' ', r.group(3), ' ', r.group(5)])
+
+# _Format guideline #6_:
+#   Don't use spaces or tabs on empty lines
+def respect_rule6(line):
+    return not line.isspace() or line=="\n"
+def conformTo_rule6(line):
+    return ""
+
+# _Format guideline #7_:
+#   Indentation of multiline variables such as SRC_URI is desireable.
+def respect_rule7(line):
+    return True
+def conformTo_rule7(line):
+    return line
+
+rules = (
+    (respect_rule0, conformTo_rule0, "No spaces are allowed at the beginning of lines that define a variable or a do_ routine"),
+    (respect_rule1, conformTo_rule1, "No spaces are allowed behind the line continuation symbol '\\'"),
+    (respect_rule2, conformTo_rule2, "Tabs should not be used (use spaces instead)"),
+    (respect_rule3, conformTo_rule3, "Comments inside bb files are allowed using the '#' character at the beginning of a line"),
+    (respect_rule4, conformTo_rule4, "Use quotes on the right hand side of assignments FOO = \"BAR\""),
+    (respect_rule5, conformTo_rule5, "The correct spacing for a variable is FOO = \"BAR\""),
+    (respect_rule6, conformTo_rule6, "Don't use spaces or tabs on empty lines"),
+    (respect_rule7, conformTo_rule7, "Indentation of multiline variables such as SRC_URI is desireable"),
+)
+
+# Function to check that a line respects a rule. If not, it tries to conform
+# the line to the rule. Reminder or Disgression message are dump accordingly.
+def follow_rule(i, line):
+    oldline = line
+    # if the line does not respect the rule
+    if not rules[i][0](line):
+        # try to conform it to the rule
+        line = rules[i][1](line)
+        # if the line still does not respect the rule
+        if not rules[i][0](line):
+            # this is a rule disgression
+            print ("## Disgression: ", rules[i][2], " in: '", oldline, "'")
+        else:
+            # just remind user about his/her errors
+            print ("## Reminder: ", rules[i][2], " in : '", oldline, "'")
+    return line
+
+
+if __name__ == "__main__":
+
+    # -- retrieves the lines of the .bb file --
+    lines = []
+    for line in fileinput.input():
+        # use 'if True' to warn user about all the rule he/she breaks
+        # use 'if False' to conform to rules{2,1,6} without warnings
+        if True:
+            lines.append(line)
+        else:
+            # expandtabs on each line so that rule2 is always respected 
+            # rstrip each line so that rule1 is always respected 
+            line = line.expandtabs().rstrip()
+            # ignore empty lines (or line filled with spaces or tabs only)
+            # so that rule6 is always respected
+            if line is not '':
+                lines.append(line)
+
+    # -- parse the file --
+    var = ""
+    in_routine = False
+    commentBloc = []
+    olines = []
+    for line in lines: 
+        originalLine = line
+        # rstrip line to remove line breaks characters
+        line = line.rstrip()
+        line = follow_rule(2, line)
+        line = follow_rule(1, line)
+        line = follow_rule(6, line)
+
+        # ignore empty lines
+        if line.isspace() or line is '':
+            # flush comments into the olines
+            for c in commentBloc: olines.append(c)
+            commentBloc = []
+            continue
+
+        if line.startswith('}'): 
+            in_routine=False
+        keep = line.endswith('\\') or in_routine
+
+        # handles commented lines
+        if line.lstrip().startswith('#'):
+            # check and follow rule3 if not in a variables or routines
+            if not in_routine:
+                line = follow_rule(3, line)
+            commentBloc.append(line)
+            continue
+
+        if var in seen_vars:
+            for c in commentBloc: seen_vars[var].append(c)
+            commentBloc = []
+            seen_vars[var].append(line)
+        else:
+            for k in OE_vars:
+                if line.startswith(k):
+                    var = k
+                    break
+            if re.match(routineRegexp, line) is not None: 
+                in_routine=True
+                line = follow_rule(0, line)
+            elif re.match(varRegexp, line) is not None:
+                line = follow_rule(0, line)
+                line = follow_rule(4, line)
+                line = follow_rule(5, line)
+            if var == "":
+                if not in_routine:
+                    print ("## Warning: unknown variable/routine \"%s\"" % originalLine.rstrip('\n'))
+                var = 'others'
+            for c in commentBloc: seen_vars[var].append(c)
+            commentBloc = []
+            seen_vars[var].append(line)
+        if not keep and not in_routine: var = ""
+
+    # -- dump the sanitized .bb file --
+    addEmptyLine = False
+    # write comments that are not related to variables nor routines
+    for l in commentBloc: olines.append(l)
+    # write variables and routines
+    previourVarPrefix = "unknown"
+    for k in OE_vars:
+        if k=='SRC_URI': addEmptyLine = True
+        if seen_vars[k] != []: 
+            if addEmptyLine and not k.startswith(previourVarPrefix):
+                olines.append("")
+            for l in seen_vars[k]: 
+                olines.append(l)
+            previourVarPrefix = k.split('_')[0]=='' and "unknown" or k.split('_')[0]
+    for line in olines: print(line)
+
diff --git a/import-layers/meta-openembedded/contrib/pw-am.sh b/import-layers/meta-openembedded/contrib/pw-am.sh
new file mode 100755
index 0000000..8987eee
--- /dev/null
+++ b/import-layers/meta-openembedded/contrib/pw-am.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# Idea and implementation:  Koen Kooi
+# Multiple patches support: Marcin Juszkiewicz
+#
+# This script will fetch an 'mbox' patch from patchwork and git am it
+# usage: pw-am.sh <number>
+# example: 'pw-am.sh 221' will get the patch from http://patchwork.openembedded.org/patch/221/
+
+for patchnumber in $@;
+do
+	wget -nv http://patches.openembedded.org/patch/$patchnumber/mbox/ -O pw-am-$patchnumber.patch
+	git am -s pw-am-$patchnumber.patch
+	rm pw-am-$patchnumber.patch
+done
diff --git a/import-layers/meta-openembedded/contrib/tesseract-langs.sh b/import-layers/meta-openembedded/contrib/tesseract-langs.sh
new file mode 100755
index 0000000..50873c1
--- /dev/null
+++ b/import-layers/meta-openembedded/contrib/tesseract-langs.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+
+# Copyright (C) 2014, O.S. Systems Software Ltda. All Rights Reserved
+# Released under the MIT license (see meta-openembedded layer's COPYING.MIT)
+
+PV='3.02'
+
+# Sometimes the software package has a minor version, but language
+# packages have not.  Example: 
+#   software package: tesseract-ocr-3.02.02.tar.gz
+#   language package: tesseract-ocr-3.02.por.tar.gz
+MINOR_PV=02
+
+recipes_dir=$1
+
+usage() {
+    echo "Usage: `basename $0` <recipes dir> [ <download dir> ]"
+}
+
+if [ -z "$recipes_dir" ]; then
+    usage
+    exit 1
+fi
+mkdir -p "$recipes_dir"
+
+file_list_uri='https://code.google.com/p/tesseract-ocr/downloads/list'
+file_list=`mktemp`
+
+remove_dl_dir=
+if [ -z "$2" ]; then
+    remove_dl_dir=1
+    dl_dir=`mktemp -d`
+else
+    dl_dir="$2"
+fi
+
+mkdir -p $dl_dir
+
+tesseract_langs() {
+    wget -q -O "$file_list" "$file_list_uri"
+
+    grep -E 'a href="detail\?name=tesseract-ocr-'${PV}'\.[^\.]+.tar.gz&amp;can=2&amp;q=">' "$file_list" | \
+        sed -r -e 's/.*tesseract-ocr-'${PV}'\.*([^\.]+)\.tar\.gz.*/\1/' | \
+        grep -Ev '('${MINOR_PV}'|'${MINOR_PV}'-doc-html)' | \
+        sort -u
+}
+
+download_lang_files() {
+    local langs="$1"
+    local uri
+    for lang in $langs; do
+        if [ ! -e "$dl_dir/tesseract-ocr-${PV}.${lang}.tar.gz" ]; then
+            uri="https://tesseract-ocr.googlecode.com/files/tesseract-ocr-${PV}.${lang}.tar.gz"
+            echo "Downloading $uri"
+            wget -q -P "$dl_dir" "$uri"
+        fi
+    done
+}
+
+create_recipe() {
+    local lang=$1
+    local tarball
+
+    tarball="$dl_dir/tesseract-ocr-${PV}.${lang}.tar.gz"
+
+    md5sum=`md5sum $tarball | awk '{print $1}'`
+    sha256sum=`sha256sum $tarball | awk '{print $1}'`
+
+    cat > $recipes_dir/tesseract-lang-`echo ${lang} | sed s/_/-/g`_${PV}.bb <<EOF
+# Copyright (C) 2014, O.S. Systems Software Ltda. All Rights Reserved
+# Released under the MIT license (see meta-openembedded layer's COPYING.MIT)
+
+TESSERACT_LANG = "$lang"
+
+require tesseract-lang.inc
+
+SRC_URI[md5sum] = "${md5sum}"
+SRC_URI[sha256sum] = "${sha256sum}"
+EOF
+}
+
+
+LANGS=`tesseract_langs`
+
+download_lang_files "$LANGS"
+
+for lang in $LANGS; do
+    create_recipe $lang
+done
+
+[ -n "$remove_dl_dir" ] && rm -rf $dl_dir
+rm -f $file_list