forked from OSchip/llvm-project
gtest: remove recursive make, add python driver + Xcode error hook-up.
This change does the following: * Removes the gtest/Makefile recursive-make-based calling strategy for gtest execution. * Adds the gtest/do-gtest.py call script. - This handles finding and calling the Makefiles that really run tests. - This script also transforms the test output into something that Xcode can place a failure marker on when a test fails. * Modifies the Xcode external build command target for gtest. It now calls the gtest/do-gtest.py script. There is still room for improvement on Xcode integration of do-gtest.py. Essentially the next several lines of error reporting from the gtest output should be coalesced into a single line so that Xcode can tell more about the error directly in the editor. Right now it just puts a red mark and says "failure" but doesn't give any details. llvm-svn: 218470
This commit is contained in:
parent
129c44c753
commit
f3a3fc5120
|
@ -1,5 +0,0 @@
|
|||
LEVEL := ./make
|
||||
|
||||
SUBDIRS := unittest
|
||||
|
||||
include $(LEVEL)/Makefile.rules
|
|
@ -0,0 +1,82 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
import re
|
||||
import select
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def find_makefile_dirs():
|
||||
makefile_dirs = []
|
||||
for root, dirs, files in os.walk("."):
|
||||
for file in files:
|
||||
if file == "Makefile":
|
||||
makefile_dirs.append(root)
|
||||
return makefile_dirs
|
||||
|
||||
_TESTDIR_RELATIVE_REGEX = re.compile(r"^([^/:]+:\d+:)")
|
||||
|
||||
def filter_run_line(sub_expr, line):
|
||||
return _TESTDIR_RELATIVE_REGEX.sub(sub_expr, line)
|
||||
|
||||
def call_make(makefile_dir, extra_args=None):
|
||||
command = ["make", "-C", makefile_dir]
|
||||
if extra_args:
|
||||
command.extend(extra_args)
|
||||
|
||||
# Replace the matched no-directory filename with one where the makefile directory is prepended.
|
||||
sub_expr = makefile_dir + r"/\1";
|
||||
|
||||
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
|
||||
while True:
|
||||
reads = [proc.stdout.fileno(), proc.stderr.fileno()]
|
||||
select_result = select.select(reads, [], [])
|
||||
|
||||
for fd in select_result[0]:
|
||||
if fd == proc.stdout.fileno():
|
||||
line = proc.stdout.readline()
|
||||
print(filter_run_line(sub_expr, line.rstrip()))
|
||||
elif fd == proc.stderr.fileno():
|
||||
line = proc.stderr.readline()
|
||||
print(filter_run_line(sub_expr, line.rstrip()), file=sys.stderr)
|
||||
|
||||
proc_retval = proc.poll()
|
||||
if proc_retval != None:
|
||||
# Process stopped. Drain output before finishing up.
|
||||
|
||||
# Drain stdout.
|
||||
while True:
|
||||
line = proc.stdout.readline()
|
||||
if line:
|
||||
print(filter_run_line(sub_expr, line.rstrip()))
|
||||
else:
|
||||
break
|
||||
|
||||
# Drain stderr.
|
||||
while True:
|
||||
line = proc.stderr.readline()
|
||||
if line:
|
||||
print(filter_run_line(sub_expr, line.rstrip()), file=sys.stderr)
|
||||
else:
|
||||
break
|
||||
|
||||
return proc_retval
|
||||
|
||||
|
||||
global_retval = 0
|
||||
extra_args = None
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
if sys.argv[1] == 'clean':
|
||||
extra_args = ['clean']
|
||||
|
||||
for makefile_dir in find_makefile_dirs():
|
||||
print("found makefile dir: {}".format(makefile_dir))
|
||||
retval = call_make(makefile_dir, extra_args)
|
||||
if retval != 0:
|
||||
global_retval = retval
|
||||
|
||||
sys.exit(global_retval)
|
|
@ -67,11 +67,11 @@
|
|||
/* Begin PBXLegacyTarget section */
|
||||
23CDD8F319D4790700461DDC /* gtest */ = {
|
||||
isa = PBXLegacyTarget;
|
||||
buildArgumentsString = "$(ACTION)";
|
||||
buildArgumentsString = "do-gtest.py $(ACTION)";
|
||||
buildConfigurationList = 23CDD8F619D4790700461DDC /* Build configuration list for PBXLegacyTarget "gtest" */;
|
||||
buildPhases = (
|
||||
);
|
||||
buildToolPath = /usr/bin/make;
|
||||
buildToolPath = /usr/bin/python;
|
||||
buildWorkingDirectory = .;
|
||||
dependencies = (
|
||||
);
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
LEVEL := ../make
|
||||
|
||||
SUBDIRS := Plugins/Process/Linux
|
||||
|
||||
$(info in unittest Makefile)
|
||||
|
||||
include $(LEVEL)/Makefile.rules
|
Loading…
Reference in New Issue