diff --git a/modules/ts/misc/run.py b/modules/ts/misc/run.py index 19ab2ab7f1cca89847393594b182809fc62e3cef..f25922d94e0d92a2863e8d7edd47e43dc497b0a6 100755 --- a/modules/ts/misc/run.py +++ b/modules/ts/misc/run.py @@ -850,12 +850,51 @@ def getRunArgs(args): path = npath return run_args +if hostos == "nt": + def moveTests(instance, destination): + src = os.path.dirname(instance.tests_dir) + # new binaries path + newBinPath = os.path.join(destination, "bin") + + try: + # copy binaries and CMakeCache.txt to the specified destination + shutil.copytree(src, newBinPath) + shutil.copy(os.path.join(instance.path, "CMakeCache.txt"), os.path.join(destination, "CMakeCache.txt")) + except Exception, e: + print "Copying error occurred:", str(e) + exit(e.errno) + + # pattern of CMakeCache.txt string to be replaced + replacePattern = re.compile("EXECUTABLE_OUTPUT_PATH:PATH=(.+)") + + with open(os.path.join(destination, "CMakeCache.txt"), "r") as cachefile: + try: + cachedata = cachefile.read() + if hostos == 'nt': + # fix path slashes on nt systems + newBinPath = re.sub(r"\\", r"/", newBinPath) + # replace old binaries path in CMakeCache.txt + cachedata = re.sub(re.search(replacePattern, cachedata).group(1), newBinPath, cachedata) + except Exception, e: + print "Reading error occurred:", str(e) + exit(e.errno) + + with open(os.path.join(destination, "CMakeCache.txt"), "w") as cachefile: + try: + cachefile.write(cachedata) + except Exception, e: + print "Writing error occurred:", str(e) + exit(e.errno) + exit() + if __name__ == "__main__": test_args = [a for a in sys.argv if a.startswith("--perf_") or a.startswith("--gtest_")] argv = [a for a in sys.argv if not(a.startswith("--perf_") or a.startswith("--gtest_"))] - parser = OptionParser() + parser = OptionParser(usage="run.py [options] [build_path]", description="Note: build_path is required if running not from CMake build directory") parser.add_option("-t", "--tests", dest="tests", help="comma-separated list of modules to test", metavar="SUITS", default="") + if hostos == "nt": + parser.add_option("-m", "--move_tests", dest="move", help="location to move current tests build", metavar="PATH", default="") parser.add_option("-w", "--cwd", dest="cwd", help="working directory for tests", metavar="PATH", default=".") parser.add_option("-a", "--accuracy", dest="accuracy", help="look for accuracy tests instead of performance tests", action="store_true", default=False) parser.add_option("-l", "--longname", dest="useLongNames", action="store_true", help="generate log files with long names", default=False) @@ -880,6 +919,7 @@ if __name__ == "__main__": if len(run_args) == 0: print >> sys.stderr, "Usage:", os.path.basename(sys.argv[0]), "[options] [build_path]" + print >> sys.stderr, "Please specify build_path or run script from CMake build directory" exit(1) options.android_env = {} @@ -906,6 +946,10 @@ if __name__ == "__main__": test_list = [] for path in run_args: suite = TestSuite(options, path) + + if hostos == "nt": + if(options.move): + moveTests(suite, options.move) #print vars(suite),"\n" if options.list: test_list.extend(suite.tests)