Mercurial > hg > truffle
diff mx/mx_graal.py @ 14546:942c4daa9db9
added findbugs command to mx
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Sat, 15 Mar 2014 01:42:27 +0100 |
parents | 10e07aaeb54f |
children | ff2095ec7bdb |
line wrap: on
line diff
--- a/mx/mx_graal.py Fri Mar 14 22:56:59 2014 +0100 +++ b/mx/mx_graal.py Sat Mar 15 01:42:27 2014 +0100 @@ -1638,6 +1638,38 @@ valueMap = parser.parse(output.getvalue()) return valueMap +def findbugs(args): + '''run FindBugs against non-test Java projects''' + findBugsHome = mx.get_env('FINDBUGS_HOME', None) + if findBugsHome: + findbugsJar = join(findBugsHome, 'lib', 'findbugs.jar') + else: + findbugsLib = join(_graal_home, 'lib', 'findbugs-3.0.0') + if not exists(findbugsLib): + tmp = tempfile.mkdtemp(prefix='findbugs-download-tmp', dir=_graal_home) + try: + findbugsDist = join(tmp, 'findbugs.zip') + mx.download(findbugsDist, ['http://sourceforge.net/projects/findbugs/files/findbugs/3.0.0/findbugs-3.0.0-dev-20131204-e3cbbd5.zip']) + with zipfile.ZipFile(findbugsDist) as zf: + candidates = [e for e in zf.namelist() if e.endswith('/lib/findbugs.jar')] + assert len(candidates) == 1, candidates + libDirInZip = os.path.dirname(candidates[0]) + zf.extractall(tmp) + shutil.copytree(join(tmp, libDirInZip), findbugsLib) + finally: + shutil.rmtree(tmp) + findbugsJar = join(findbugsLib, 'findbugs.jar') + assert exists(findbugsJar) + nonTestProjects = [p for p in mx.projects() if not p.name.endswith('.test') and not p.name.endswith('.jtt')] + outputDirs = [p.output_dir() for p in nonTestProjects] + findbugsResults = join(_graal_home, 'findbugs.results') + exitcode = mx.run_java(['-jar', findbugsJar, '-textui', '-low', '-maxRank', '15', '-exclude', join(_graal_home, 'graal', 'findbugsExcludeFilter.xml'), + '-auxclasspath', mx.classpath([p.name for p in nonTestProjects]), '-output', findbugsResults, '-progress', '-exitcode'] + args + outputDirs, nonZeroIsFatal=False) + if exitcode != 0: + with open(findbugsResults) as fp: + mx.log(fp.read()) + os.unlink(findbugsResults) + return exitcode def mx_init(suite): commands = { @@ -1646,6 +1678,7 @@ 'buildvms': [buildvms, '[-options]'], 'c1visualizer' : [c1visualizer, ''], 'clean': [clean, ''], + 'findbugs': [findbugs, ''], 'generateZshCompletion' : [generateZshCompletion, ''], 'hsdis': [hsdis, '[att]'], 'hcfdis': [hcfdis, ''],