diff --git a/build.py b/build.py index 4e07ceb9..ef02ca36 100755 --- a/build.py +++ b/build.py @@ -127,6 +127,15 @@ for app in apps: 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, diff --git a/common.py b/common.py index 4477e0ba..96086c6a 100644 --- a/common.py +++ b/common.py @@ -890,6 +890,45 @@ def prepare_source(vcs, app, build, build_dir, extlib_dir, sdk_path, ndk_path, j 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): diff --git a/scanner.py b/scanner.py index 7c241f48..045d57b4 100755 --- a/scanner.py +++ b/scanner.py @@ -92,39 +92,11 @@ for app in apps: 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)