Update & add test
Test for propagating compiler flags that aren't the root spec
This commit is contained in:
parent
177976b762
commit
968223758a
@ -862,11 +862,13 @@ def visit(node):
|
|||||||
self.control.load(os.path.join(parent_dir, "display.lp"))
|
self.control.load(os.path.join(parent_dir, "display.lp"))
|
||||||
if not setup.concretize_everything:
|
if not setup.concretize_everything:
|
||||||
self.control.load(os.path.join(parent_dir, "when_possible.lp"))
|
self.control.load(os.path.join(parent_dir, "when_possible.lp"))
|
||||||
flags = []
|
|
||||||
for spec in specs:
|
|
||||||
flags.append(spec.compiler_flags)
|
|
||||||
|
|
||||||
if self._compiler_flag_has_propagation(flags):
|
|
||||||
|
has_propagation = False
|
||||||
|
for spec in specs:
|
||||||
|
for dep in spec.traverse(root=True):
|
||||||
|
has_propagation |= self._compiler_flag_has_propagation(dep.compiler_flags)
|
||||||
|
if has_propagation:
|
||||||
self.control.load(os.path.join(parent_dir, "propagation.lp"))
|
self.control.load(os.path.join(parent_dir, "propagation.lp"))
|
||||||
|
|
||||||
timer.stop("load")
|
timer.stop("load")
|
||||||
@ -978,8 +980,7 @@ def _model_has_cycles(self, models):
|
|||||||
return cycle_result.unsatisfiable
|
return cycle_result.unsatisfiable
|
||||||
|
|
||||||
def _compiler_flag_has_propagation(self, flags):
|
def _compiler_flag_has_propagation(self, flags):
|
||||||
for flag in flags:
|
for _, flag_vals in flags.items():
|
||||||
for flag_type, flag_vals in flag.items():
|
|
||||||
if any(val.propagate for val in flag_vals):
|
if any(val.propagate for val in flag_vals):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
@ -349,6 +349,9 @@ def test_compiler_flags_differ_identical_compilers(self):
|
|||||||
spec.concretize()
|
spec.concretize()
|
||||||
assert spec.satisfies("cflags=-O2")
|
assert spec.satisfies("cflags=-O2")
|
||||||
|
|
||||||
|
@pytest.mark.only_clingo(
|
||||||
|
"Optional compiler propagation isn't deprecated for original concretizer"
|
||||||
|
)
|
||||||
def test_concretize_compiler_flag_propagate(self):
|
def test_concretize_compiler_flag_propagate(self):
|
||||||
spec = Spec("callpath cflags=='-g'")
|
spec = Spec("callpath cflags=='-g'")
|
||||||
spec.concretize()
|
spec.concretize()
|
||||||
@ -356,6 +359,16 @@ def test_concretize_compiler_flag_propagate(self):
|
|||||||
for dep in spec.traverse():
|
for dep in spec.traverse():
|
||||||
assert dep.satisfies("cflags='-g'")
|
assert dep.satisfies("cflags='-g'")
|
||||||
|
|
||||||
|
@pytest.mark.only_clingo(
|
||||||
|
"Optional compiler propagation isn't deprecated for original concretizer"
|
||||||
|
)
|
||||||
|
def test_concretize_non_root_compiler_flag_propagate(self):
|
||||||
|
spec = Spec("callpath ^dyninst cflags=='-g'")
|
||||||
|
spec.concretize()
|
||||||
|
|
||||||
|
assert spec.satisfies("^libdwarf cflags='-g'")
|
||||||
|
assert spec.satisfies("^libelf cflags='-g'")
|
||||||
|
|
||||||
@pytest.mark.only_clingo(
|
@pytest.mark.only_clingo(
|
||||||
"Optional compiler propagation isn't deprecated for original concretizer"
|
"Optional compiler propagation isn't deprecated for original concretizer"
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user