javacc_path, not refreshed_source)
refreshed_source = True
+ # Scan before building...
+ buildprobs = common.scan_source(build_dir)
+ if len(buildprobs) > 0:
+ print 'Scanner found ' + str(len(buildprobs)) + ' problems:'
+ for problem in buildprobs:
+ print '...' + problem
+ raise BuildException("Can't build due to " +
+ str(len(buildprobs)) + " scanned problems")
+
# Build the source tarball right before we build the release...
tarname = app['id'] + '_' + thisbuild['vercode'] + '_src'
tarball = tarfile.open(os.path.join(tmp_dir,
return root_dir
+# Scan the source code in the given directory (and all subdirectories)
+# and return a list of potential problems.
+def scan_source(source_dir):
+
+ problems = []
+
+ # Scan for common known non-free blobs:
+ usual_suspects = ['flurryagent',
+ 'paypal_mpl',
+ 'libgoogleanalytics',
+ 'admob-sdk-android',
+ 'googleadview',
+ 'googleadmobadssdk']
+ for r,d,f in os.walk(build_dir):
+ for curfile in f:
+ for suspect in usual_suspects:
+ if curfile.lower().find(suspect) != -1:
+ msg = 'Found probable non-free blob ' + os.path.join(r, curfile)
+ problems.append(msg)
+
+ # Presence of a jni directory without buildjni=yes might
+ # indicate a problem...
+ if (os.path.exists(os.path.join(root_dir, 'jni')) and
+ thisbuild.get('buildjni', 'no') != 'yes'):
+ msg = 'Found jni directory, but buildjni is not enabled'
+ problems.append(msg)
+
+ # Presence of these is not a problem as such, but they
+ # shouldn't be there and mess up our source tarballs...
+ if os.path.exists(os.path.join(root_dir, 'bin')):
+ msg = "There shouldn't be a bin directory"
+ problems.append(msg)
+ if os.path.exists(os.path.join(root_dir, 'gen')):
+ msg = "There shouldn't be a gen directory"
+ problems.append(msg)
+
+ return problems
+
+
class KnownApks:
def __init__(self):
not refreshed_source)
refreshed_source = True
- # Scan for common known non-free blobs:
- usual_suspects = ['flurryagent',
- 'paypal_mpl',
- 'libgoogleanalytics',
- 'admob-sdk-android',
- 'googleadview',
- 'googleadmobadssdk']
- for r,d,f in os.walk(build_dir):
- for curfile in f:
- for suspect in usual_suspects:
- if curfile.lower().find(suspect) != -1:
- msg = 'Found probable non-free blob ' + os.path.join(r, curfile)
- msg += ' in ' + app['id'] + ' ' + thisbuild['version']
- problems.append(msg)
-
- # Presence of a jni directory without buildjni=yes might
- # indicate a problem...
- if (os.path.exists(os.path.join(root_dir, 'jni')) and
- thisbuild.get('buildjni', 'no') != 'yes'):
- msg = 'Found jni directory, but buildjni is not enabled'
- msg += ' in ' + app['id'] + ' ' + thisbuild['version']
- problems.append(msg)
-
- # Presence of these is not a problem as such, but they
- # shouldn't be there and mess up our source tarballs...
- if os.path.exists(os.path.join(root_dir, 'bin')):
- msg = "There shouldn't be a bin directory"
- msg += ' in ' + app['id'] + ' ' + thisbuild['version']
- problems.append(msg)
- if os.path.exists(os.path.join(root_dir, 'gen')):
- msg = "There shouldn't be a gen directory"
- msg += ' in ' + app['id'] + ' ' + thisbuild['version']
- problems.append(msg)
+ # Do the scan...
+ buildprobs = common.scan_source(build_dir)
+ for problem in buildprobs:
+ problems.append(problem +
+ ' in ' + app['id'] + ' ' + thisbuild['version'])
except BuildException as be:
msg = "Could not scan app %s due to BuildException: %s" % (app['id'], be)