+# Version code file generation
+def build_version_files(header_path, source_path, domain, major, minor, micro):
+ header_path = os.path.abspath(header_path)
+ source_path = os.path.abspath(source_path)
+ text = "int " + domain + "_major_version = " + str(major) + ";\n"
+ text += "int " + domain + "_minor_version = " + str(minor) + ";\n"
+ text += "int " + domain + "_micro_version = " + str(micro) + ";\n"
+ try:
+ o = open(source_path, 'w')
+ o.write(text)
+ o.close()
+ except IOError:
+ print("Could not open %s for writing\n", source_path)
+ sys.exit(-1)
+
+ text = "#ifndef __" + domain + "_version_h__\n"
+ text += "#define __" + domain + "_version_h__\n"
+ text += "extern const char* " + domain + "_revision;\n"
+ text += "extern int " + domain + "_major_version;\n"
+ text += "extern int " + domain + "_minor_version;\n"
+ text += "extern int " + domain + "_micro_version;\n"
+ text += "#endif /* __" + domain + "_version_h__ */\n"
+ try:
+ o = open(header_path, 'w')
+ o.write(text)
+ o.close()
+ except IOError:
+ print("Could not open %s for writing\n", header_path)
+ sys.exit(-1)
+
+ return None
+
+def run_tests(ctx, appname, tests):
+ orig_dir = os.path.abspath(os.curdir)
+ failures = 0
+ base = '..'
+
+ top_level = os.path.abspath(ctx.curdir) != os.path.abspath(os.curdir)
+ if top_level:
+ os.chdir('./build/default/' + appname)
+ base = '../..'
+ else:
+ os.chdir('./build/default')
+
+ lcov = True
+ lcov_log = open('lcov.log', 'w')
+ try:
+ # Clear coverage data
+ subprocess.call('lcov -d ./src -z'.split(),
+ stdout=lcov_log, stderr=lcov_log)
+ except:
+ lcov = False
+ print("Failed to run lcov, no coverage report will be generated")
+
+
+ # Run all tests
+ for i in tests:
+ print()
+ Utils.pprint('BOLD', 'Running %s test %s' % (appname, i))
+ if subprocess.call(i) == 0:
+ Utils.pprint('GREEN', 'Passed %s %s' % (appname, i))
+ else:
+ failures += 1
+ Utils.pprint('RED', 'Failed %s %s' % (appname, i))
+
+ if lcov:
+ # Generate coverage data
+ coverage_lcov = open('coverage.lcov', 'w')
+ subprocess.call(('lcov -c -d ./src -d ./test -b ' + base).split(),
+ stdout=coverage_lcov, stderr=lcov_log)
+ coverage_lcov.close()
+
+ # Strip out unwanted stuff
+ coverage_stripped_lcov = open('coverage-stripped.lcov', 'w')
+ subprocess.call('lcov --remove coverage.lcov *boost* c++*'.split(),
+ stdout=coverage_stripped_lcov, stderr=lcov_log)
+ coverage_stripped_lcov.close()
+
+ # Generate HTML coverage output
+ if not os.path.isdir('./coverage'):
+ os.makedirs('./coverage')
+ subprocess.call('genhtml -o coverage coverage-stripped.lcov'.split(),
+ stdout=lcov_log, stderr=lcov_log)
+
+ lcov_log.close()
+
+ print()
+ Utils.pprint('BOLD', 'Summary:', sep=''),
+ if failures == 0:
+ Utils.pprint('GREEN', 'All ' + appname + ' tests passed')
+ else:
+ Utils.pprint('RED', str(failures) + ' ' + appname + ' test(s) failed')
+
+ Utils.pprint('BOLD', 'Coverage:', sep='')
+ print(os.path.abspath('coverage/index.html'))
+
+ os.chdir(orig_dir)
+