summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyril Romain <cyril.romain@gmail.com>2006-09-11 23:48:16 +0000
committerJamie Lenehan <lenehan@twibble.org>2006-09-11 23:48:16 +0000
commitbeaa02a16fce8e3c305d6fc37c95804f80e99b18 (patch)
tree8ee10dcd390c6829e35c6b3a3bd01403dc26cd11
parentbd9afea381b1370301650d407a70d39752b1181c (diff)
contrib/sanitize.py: Revision 0.5
* Recognise pkg_preins and pkg_prerm scripts * For alternatives put the required items before the option items * For initscripts put the package list first * Recognise PKG variable * Remove blank lines between variables with the same prefix (eg the ALTERNATIVE_ vars).
-rwxr-xr-xcontrib/sanitize.py79
1 files changed, 47 insertions, 32 deletions
diff --git a/contrib/sanitize.py b/contrib/sanitize.py
index 27ca6e3d8d..028b2cc535 100755
--- a/contrib/sanitize.py
+++ b/contrib/sanitize.py
@@ -24,7 +24,7 @@ import string
import re
__author__ = "Cyril Romain <cyril.romain@gmail.com>"
-__version__ = "$Revision: 0.4 $"
+__version__ = "$Revision: 0.5 $"
# The standard set of variables often found in .bb files in the preferred order
OE_vars = [
@@ -72,6 +72,8 @@ OE_vars = [
'includedir',
'python',
'qtopiadir',
+ 'pkg_preins',
+ 'pkg_prerm',
'pkg_postins',
'pkg_postrm',
'require',
@@ -79,9 +81,9 @@ OE_vars = [
'basesysconfdir',
'sysconfdir',
'ALLOW_EMPTY',
- 'ALTERNATIVE_LINK',
'ALTERNATIVE_NAME',
'ALTERNATIVE_PATH',
+ 'ALTERNATIVE_LINK',
'ALTERNATIVE_PRIORITY',
'ALTNAME',
'AMD_DRIVER_LABEL',
@@ -104,7 +106,6 @@ OE_vars = [
'BONOBO_HEADERS',
'BOOTSCRIPTS',
'BROKEN',
- 'BUILD_ALL_DEPS',
'BUILD_CPPFLAGS',
'CFLAGS',
'CCFLAGS',
@@ -133,8 +134,8 @@ OE_vars = [
'GNOME_VFS_HEADERS',
'HEADERS',
'INHIBIT_DEFAULT_DEPS',
- 'INITSCRIPT_NAME',
'INITSCRIPT_PACKAGES',
+ 'INITSCRIPT_NAME',
'INITSCRIPT_PARAMS',
'IPKG_INSTALL',
'KERNEL_IMAGETYPE',
@@ -158,13 +159,13 @@ OE_vars = [
'LIBTOOL',
'LIBBDB_EXTRA',
'LIBV',
- 'MACHINE',
'MACHINE_ESSENTIAL_EXTRA_RDEPENDS',
'MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS',
'MACHINE_EXTRA_RDEPENDS',
'MACHINE_EXTRA_RRECOMMENDS',
'MACHINE_FEATURES',
'MACHINE_TASKS',
+ 'MACHINE',
'MACHTYPE',
'MAKE_TARGETS',
'MESSAGEUSER',
@@ -178,6 +179,7 @@ OE_vars = [
'PAKCAGE_ARCH',
'PCMCIA_MANAGER',
'PKG_BASENAME',
+ 'PKG',
'QEMU',
'QMAKE_PROFILES',
'QPEDIR',
@@ -200,8 +202,8 @@ OE_vars = [
'others'
]
-varRegexp = r'^([A-Z_0-9]*)([ \t]*?)([+.:]?=[+.]?)([ \t]*?)("[^"]*["\\]?)'
-routineRegexp = r'^([a-zA-Z0-9_ -]+?)\('
+varRegexp = r'^([a-zA-Z_0-9${}-]*)([ \t]*)([+.:]?=[+.]?)([ \t]*)([^\t]+)'
+routineRegexp = r'^([a-zA-Z0-9_ ${}-]+?)\('
# Variables seen in the processed .bb
seen_vars = {}
@@ -245,11 +247,17 @@ def conformTo_rule3(line):
return line.lstrip()
# _Format guideline #4_:
-# Use quotes on the right hand side of assignments: FOO = "BAR"
+# Use quotes on the right hand side of assignments FOO = "BAR"
def respect_rule4(line):
- return re.match(varRegexp, line) is not None
+ 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):
- return conformTo_rule5_(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".
@@ -279,7 +287,7 @@ rules = (
(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_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"),
@@ -296,7 +304,7 @@ def follow_rule(i, 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:", line
+ print "## Disgression: ", rules[i][2], " in:", oldline
else:
# just remind user about his/her errors
print "## Reminder: ", rules[i][2], " in :", oldline
@@ -327,6 +335,7 @@ if __name__ == "__main__":
commentBloc = []
olines = []
for line in lines:
+ originalLine = line
# rstrip line to remove line breaks characters
line = line.rstrip()
line = follow_rule(2, line)
@@ -340,7 +349,8 @@ if __name__ == "__main__":
commentBloc = []
continue
- if line.startswith('}'): in_routine=False
+ if line.startswith('}'):
+ in_routine=False
keep = line.endswith('\\') or in_routine
# handles commented lines
@@ -352,41 +362,46 @@ if __name__ == "__main__":
continue
if seen_vars.has_key(var):
- for c in commentBloc:
+ for c in commentBloc:
seen_vars[var].append(c)
commentBloc = []
seen_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:
- seen_vars[k].append(c)
- commentBloc = []
- seen_vars[k].append(line)
- var = (keep==True or in_routine==True) and k or ""
+ var = k
break
- if not varexist:
+ 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\"" % line
- seen_vars['others'].append(line)
+ print "## Warning: unknown variable/routine \"%s\"" % originalLine
+ 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 --
- #for k in OE_vars: print k, OE_vars[k]
addEmptyLine = False
+ # write comments that are not related to variables nor routines
+ for l in olines:
+ 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: olines.append("")
+ 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