diff options
author | Paul Sokolovsky <pmiscml@gmail.com> | 2006-09-07 00:44:27 +0000 |
---|---|---|
committer | Paul Sokolovsky <pmiscml@gmail.com> | 2006-09-07 00:44:27 +0000 |
commit | 6c6348e86054763e3f29828d37813a6731460e49 (patch) | |
tree | 2b338e23f790496d5036579ce2f4df21be07dcca /contrib/sanitize.py | |
parent | 7dde589d6413662585908540a0078aee0e6dfb15 (diff) |
sanitize.py: Fix line-endings (dos->unix).
Diffstat (limited to 'contrib/sanitize.py')
-rw-r--r-- | contrib/sanitize.py | 738 |
1 files changed, 369 insertions, 369 deletions
diff --git a/contrib/sanitize.py b/contrib/sanitize.py index 6327653053..3d329730b1 100644 --- a/contrib/sanitize.py +++ b/contrib/sanitize.py @@ -1,369 +1,369 @@ -#!/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
-# ./ handle comments in .bb files
-# - 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 ?
-# - /!\ startswith('SOMETHING') is not taken into account due to the previous startswith('S').
-# - count rule breaks and displays them in the order frequence
-
-from odict import OrderedDict
-import fileinput
-import string
-import re
-
-__author__ = "Cyril Romain <cyril.romain@gmail.com>"
-__version__ = "$Revision: 0.3 $"
-
-# The ordered list of OpenEmbedded variables
-OE_vars = OrderedDict([
- ('DESCRIPTION', []),
- ('AUTHOR', []),
- ('HOMEPAGE', []),
- ('SECTION', []),
- ('PRIORITY', []),
- ('MAINTAINER', []),
- ('LICENSE', []),
- ('DEPENDS', []),
- ('RDEPENDS', []),
- ('RRECOMMENDS', []),
- ('RSUGGESTS', []),
- ('PROVIDES', []),
- ('RPROVIDES', []),
- ('RCONFLICTS', []),
- ('SRCDATE', []),
- ('PV', []),
- ('PR', []),
- ('SRC_URI', []),
- ('S', []),
- ('inherit', []),
- ('EXTRA_', []),
- ('do_fetch', []),
- ('do_unpack', []),
- ('do_patch', []),
- ('do_configure', []),
- ('do_compile', []),
- ('do_install', []),
- ('do_package', []),
- ('do_stage', []),
- ('PACKAGE_ARCH', []),
- ('PACKAGES', []),
- ('FILES', []),
- ('WORKDIR', []),
- ('acpaths', []),
- ('addhandler', []),
- ('addtask', []),
- ('bindir', []),
- ('export', []),
- ('headers', []),
- ('include', []),
- ('includedir', []),
- ('python', []),
- ('qtopiadir', []),
- ('pkg_postins', []),
- ('pkg_postrm', []),
- ('require', []),
- ('sbindir', []),
- ('basesysconfdir', []),
- ('sysconfdir', []),
- ('ALLOW_EMPTY', []),
- ('ALTERNATIVE_LINK', []),
- ('ALTERNATIVE_NAME', []),
- ('ALTERNATIVE_PATH', []),
- ('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_ALL_DEPS', []),
- ('BUILD_CPPFLAGS', []),
- ('CFLAGS', []),
- ('CCFLAGS', []),
- ('CMDLINE', []),
- ('COLLIE_MEMORY_SIZE', []),
- ('COMPATIBLE_HOST', []),
- ('COMPATIBLE_MACHINE', []),
- ('COMPILE_HERMES', []),
- ('CONFFILES', []),
- ('CONFLICTS', []),
- ('CORE_EXTRA_D', []),
- ('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', []),
- ('GPE_TARBALL_SUFFIX', []),
- ('HEADERS', []),
- ('INHIBIT_DEFAULT_DEPS', []),
- ('INITSCRIPT_NAME', []),
- ('INITSCRIPT_PACKAGES', []),
- ('INITSCRIPT_PARAMS', []),
- ('IPKG_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', []),
- ('MACHINE_ESSENTIAL_EXTRA_RDEPENDS', []),
- ('MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS', []),
- ('MACHINE_EXTRA_RDEPENDS', []),
- ('MACHINE_EXTRA_RRECOMMENDS', []),
- ('MACHINE_FEATURES', []),
- ('MACHINE_TASKS', []),
- ('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', []),
- ('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', []),
- ('UNSLUNG_PACKAGES', []),
- ('VIRTUAL_NAME', []),
- ('XORG_PN', []),
- ('XSERVER', []),
- ('others', [])
-])
-
-varRegexp = r'^([A-Z_0-9]*)([ \t]*?)([+.:]?=[+.]?)([ \t]*?)("[^"]*["\\]?)'
-routineRegexp = r'^([a-zA-Z0-9_ -]+?)\('
-
-# Style guideline #0: No spaces are allowed at the beginning of lines that define a variable or a do_ routine
-def check_rule0(line):
- return line.lstrip()==line
-def follow_rule0(line):
- return line.lstrip()
-
-# Style guideline #1: No spaces are allowed behind the line continuation symbol '\'
-def check_rule1(line):
- if line.rstrip().endswith('\\'):
- return line.endswith('\\')
- else:
- return True
-def follow_rule1(line):
- return line.rstrip()
-
-# Style guideline #2: Tabs should not be used (use spaces instead).
-def check_rule2(line):
- return line.count('\t')==0
-def follow_rule2(line):
- return line.expandtabs()
-
-# Style guideline #3: Comments inside bb files are allowed using the '#' character at the beginning of a line.
-def check_rule3(line):
- if line.lstrip().startswith('#'):
- return line.startswith('#')
- else:
- return True
-def follow_rule3(line):
- return line.lstrip()
-
-# Style guideline #4: Use quotes on the right hand side of assignments: FOO = "BAR"
-def check_rule4(line):
- return re.match(varRegexp, line) is not None
-def follow_rule4(line):
- return follow_rule5(line)
-
-# Style guideline #5: The correct spacing for a variable is FOO = "BAR".
-def check_rule5(line):
- r = re.search(varRegexp, line)
- return r is not None and r.group(2)==" " and r.group(4)==" "
-def follow_rule5(line):
- r = re.search(varRegexp, line)
- return ''.join([r.group(1), ' ', r.group(3), ' ', r.group(5)])
-
-# Style guideline #6: Don't use spaces or tabs on empty lines
-def check_rule6(line):
- return not line.isspace() or line=="\n"
-def follow_rule6(line):
- return ""
-
-# Style guideline #7: Indentation of multiline variables such as SRC_URI is desireable.
-def check_rule7(line):
- return True
-def follow_rule7(line):
- return line
-
-rules = (
- (check_rule0, follow_rule0, "No spaces are allowed at the beginning of lines that define a variable or a do_ routine"),
- (check_rule1, follow_rule1, "No spaces are allowed behind the line continuation symbol '\\'"),
- (check_rule2, follow_rule2, "Tabs should not be used (use spaces instead)"),
- (check_rule3, follow_rule3, "Comments inside bb files are allowed using the '#' character at the beginning of a line"),
- (check_rule4, follow_rule4, "Use quotes on the right hand side of assignments: FOO = \"BAR\""),
- (check_rule5, follow_rule5, "The correct spacing for a variable is FOO = \"BAR\""),
- (check_rule6, follow_rule6, "Don't use spaces or tabs on empty lines"),
- (check_rule7, follow_rule7, "Indentation of multiline variables such as SRC_URI is desireable"),
-)
-
-def follow_rule(i, line):
- oldline = line
- if not rules[i][0](line):
- line = rules[i][1](line)
- if not rules[i][0](line):
- print "## Rule %d disgression: on this line: " % i, line
- print "## Warning: ", rules[i][2]
- else:
- print "## Reminder: ", rules[i][2], " in :", oldline
- return line
-
-
-if __name__ == "__main__":
-
- # -- retrieves lines of the .bb file --
- lines = []
- for line in fileinput.input():
- 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 = []
- unknownVar = set()
- for line in lines:
- 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 OE_vars.has_key(var):
- for c in commentBloc:
- OE_vars[var].append(c)
- commentBloc = []
- OE_vars[var].append(line)
- else:
- varexist = False
- for k in OE_vars:
- if line.startswith(k):
- line = follow_rule(0, line)
- varexist = True
- if re.match(routineRegexp, line) is not None:
- in_routine=True
- elif re.match(varRegexp, line) is not None:
- line = follow_rule(4, line)
- line = follow_rule(5, line)
- for c in commentBloc:
- OE_vars[k].append(c)
- commentBloc = []
- OE_vars[k].append(line)
- var = (keep==True or in_routine==True) and k or ""
- break
- if not varexist:
- s = string.split(line)[0].rstrip().lstrip()
- if s not in unknownVar:
- unknownVar.add(s)
- if not in_routine:
- print "## Warning: unknown variable/routine \"%s\"" % line
- OE_vars['others'].append(line)
- if not keep and not in_routine: var = ""
-
- # -- prepare the sanitized .bb file --
- #for k in OE_vars: print k, OE_vars[k]
- addEmptyLine = False
- for k in OE_vars:
- if k=='SRC_URI': addEmptyLine = True
- if OE_vars[k] != []:
- if addEmptyLine: olines.append("")
- for l in OE_vars[k]:
- olines.append(l)
- for line in olines: print line
- #for i in unknownVar: print i, '\n'
\ No newline at end of file +#!/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 +# ./ handle comments in .bb files +# - 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 ? +# - /!\ startswith('SOMETHING') is not taken into account due to the previous startswith('S'). +# - count rule breaks and displays them in the order frequence + +from odict import OrderedDict +import fileinput +import string +import re + +__author__ = "Cyril Romain <cyril.romain@gmail.com>" +__version__ = "$Revision: 0.3 $" + +# The ordered list of OpenEmbedded variables +OE_vars = OrderedDict([ + ('DESCRIPTION', []), + ('AUTHOR', []), + ('HOMEPAGE', []), + ('SECTION', []), + ('PRIORITY', []), + ('MAINTAINER', []), + ('LICENSE', []), + ('DEPENDS', []), + ('RDEPENDS', []), + ('RRECOMMENDS', []), + ('RSUGGESTS', []), + ('PROVIDES', []), + ('RPROVIDES', []), + ('RCONFLICTS', []), + ('SRCDATE', []), + ('PV', []), + ('PR', []), + ('SRC_URI', []), + ('S', []), + ('inherit', []), + ('EXTRA_', []), + ('do_fetch', []), + ('do_unpack', []), + ('do_patch', []), + ('do_configure', []), + ('do_compile', []), + ('do_install', []), + ('do_package', []), + ('do_stage', []), + ('PACKAGE_ARCH', []), + ('PACKAGES', []), + ('FILES', []), + ('WORKDIR', []), + ('acpaths', []), + ('addhandler', []), + ('addtask', []), + ('bindir', []), + ('export', []), + ('headers', []), + ('include', []), + ('includedir', []), + ('python', []), + ('qtopiadir', []), + ('pkg_postins', []), + ('pkg_postrm', []), + ('require', []), + ('sbindir', []), + ('basesysconfdir', []), + ('sysconfdir', []), + ('ALLOW_EMPTY', []), + ('ALTERNATIVE_LINK', []), + ('ALTERNATIVE_NAME', []), + ('ALTERNATIVE_PATH', []), + ('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_ALL_DEPS', []), + ('BUILD_CPPFLAGS', []), + ('CFLAGS', []), + ('CCFLAGS', []), + ('CMDLINE', []), + ('COLLIE_MEMORY_SIZE', []), + ('COMPATIBLE_HOST', []), + ('COMPATIBLE_MACHINE', []), + ('COMPILE_HERMES', []), + ('CONFFILES', []), + ('CONFLICTS', []), + ('CORE_EXTRA_D', []), + ('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', []), + ('GPE_TARBALL_SUFFIX', []), + ('HEADERS', []), + ('INHIBIT_DEFAULT_DEPS', []), + ('INITSCRIPT_NAME', []), + ('INITSCRIPT_PACKAGES', []), + ('INITSCRIPT_PARAMS', []), + ('IPKG_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', []), + ('MACHINE_ESSENTIAL_EXTRA_RDEPENDS', []), + ('MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS', []), + ('MACHINE_EXTRA_RDEPENDS', []), + ('MACHINE_EXTRA_RRECOMMENDS', []), + ('MACHINE_FEATURES', []), + ('MACHINE_TASKS', []), + ('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', []), + ('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', []), + ('UNSLUNG_PACKAGES', []), + ('VIRTUAL_NAME', []), + ('XORG_PN', []), + ('XSERVER', []), + ('others', []) +]) + +varRegexp = r'^([A-Z_0-9]*)([ \t]*?)([+.:]?=[+.]?)([ \t]*?)("[^"]*["\\]?)' +routineRegexp = r'^([a-zA-Z0-9_ -]+?)\(' + +# Style guideline #0: No spaces are allowed at the beginning of lines that define a variable or a do_ routine +def check_rule0(line): + return line.lstrip()==line +def follow_rule0(line): + return line.lstrip() + +# Style guideline #1: No spaces are allowed behind the line continuation symbol '\' +def check_rule1(line): + if line.rstrip().endswith('\\'): + return line.endswith('\\') + else: + return True +def follow_rule1(line): + return line.rstrip() + +# Style guideline #2: Tabs should not be used (use spaces instead). +def check_rule2(line): + return line.count('\t')==0 +def follow_rule2(line): + return line.expandtabs() + +# Style guideline #3: Comments inside bb files are allowed using the '#' character at the beginning of a line. +def check_rule3(line): + if line.lstrip().startswith('#'): + return line.startswith('#') + else: + return True +def follow_rule3(line): + return line.lstrip() + +# Style guideline #4: Use quotes on the right hand side of assignments: FOO = "BAR" +def check_rule4(line): + return re.match(varRegexp, line) is not None +def follow_rule4(line): + return follow_rule5(line) + +# Style guideline #5: The correct spacing for a variable is FOO = "BAR". +def check_rule5(line): + r = re.search(varRegexp, line) + return r is not None and r.group(2)==" " and r.group(4)==" " +def follow_rule5(line): + r = re.search(varRegexp, line) + return ''.join([r.group(1), ' ', r.group(3), ' ', r.group(5)]) + +# Style guideline #6: Don't use spaces or tabs on empty lines +def check_rule6(line): + return not line.isspace() or line=="\n" +def follow_rule6(line): + return "" + +# Style guideline #7: Indentation of multiline variables such as SRC_URI is desireable. +def check_rule7(line): + return True +def follow_rule7(line): + return line + +rules = ( + (check_rule0, follow_rule0, "No spaces are allowed at the beginning of lines that define a variable or a do_ routine"), + (check_rule1, follow_rule1, "No spaces are allowed behind the line continuation symbol '\\'"), + (check_rule2, follow_rule2, "Tabs should not be used (use spaces instead)"), + (check_rule3, follow_rule3, "Comments inside bb files are allowed using the '#' character at the beginning of a line"), + (check_rule4, follow_rule4, "Use quotes on the right hand side of assignments: FOO = \"BAR\""), + (check_rule5, follow_rule5, "The correct spacing for a variable is FOO = \"BAR\""), + (check_rule6, follow_rule6, "Don't use spaces or tabs on empty lines"), + (check_rule7, follow_rule7, "Indentation of multiline variables such as SRC_URI is desireable"), +) + +def follow_rule(i, line): + oldline = line + if not rules[i][0](line): + line = rules[i][1](line) + if not rules[i][0](line): + print "## Rule %d disgression: on this line: " % i, line + print "## Warning: ", rules[i][2] + else: + print "## Reminder: ", rules[i][2], " in :", oldline + return line + + +if __name__ == "__main__": + + # -- retrieves lines of the .bb file -- + lines = [] + for line in fileinput.input(): + 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 = [] + unknownVar = set() + for line in lines: + 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 OE_vars.has_key(var): + for c in commentBloc: + OE_vars[var].append(c) + commentBloc = [] + OE_vars[var].append(line) + else: + varexist = False + for k in OE_vars: + if line.startswith(k): + line = follow_rule(0, line) + varexist = True + if re.match(routineRegexp, line) is not None: + in_routine=True + elif re.match(varRegexp, line) is not None: + line = follow_rule(4, line) + line = follow_rule(5, line) + for c in commentBloc: + OE_vars[k].append(c) + commentBloc = [] + OE_vars[k].append(line) + var = (keep==True or in_routine==True) and k or "" + break + if not varexist: + s = string.split(line)[0].rstrip().lstrip() + if s not in unknownVar: + unknownVar.add(s) + if not in_routine: + print "## Warning: unknown variable/routine \"%s\"" % line + OE_vars['others'].append(line) + if not keep and not in_routine: var = "" + + # -- prepare the sanitized .bb file -- + #for k in OE_vars: print k, OE_vars[k] + addEmptyLine = False + for k in OE_vars: + if k=='SRC_URI': addEmptyLine = True + if OE_vars[k] != []: + if addEmptyLine: olines.append("") + for l in OE_vars[k]: + olines.append(l) + for line in olines: print line + #for i in unknownVar: print i, '\n' |