summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2018-07-13 18:22:12 +0200
committerUlf Magnusson <ulfalizer@gmail.com>2018-07-13 18:22:12 +0200
commitac692af07a123b3d623e51df7f1e7a10b88c1ddd (patch)
treec2e5f410748fb544f2c1e4b320729bb997553410
parent47ab37c4e7c5c917bb57c0a6bdfbca72d2f2941d (diff)
Fix absolute $srctree prefixes showing up on gsource'd files
When using gsource with $srctree set to an absolute path, the $srctree prefix would show up in MenuNode.filename, trickling its way into e.g. generated documentation. This was due to a broken test: os.path.isabs() was checked after joining the pattern with $srctree, making it mistake an absolute $srctree for an absolute path in the Kconfig file. Fix the test.
-rw-r--r--kconfiglib.py11
-rw-r--r--testsuite.py65
2 files changed, 41 insertions, 35 deletions
diff --git a/kconfiglib.py b/kconfiglib.py
index a879da4..c6a51f9 100644
--- a/kconfiglib.py
+++ b/kconfiglib.py
@@ -2178,15 +2178,20 @@ class Kconfig(object):
pattern = os.path.join(os.path.dirname(self._filename),
pattern)
- # If $srctree is set, glob relative to it
- if self.srctree is not None:
+ if self.srctree is None:
+ strip_srctree = False
+ else:
+ # $srctree set and pattern not absolute?
+ strip_srctree = not os.path.isabs(pattern)
+
+ # If $srctree is set, glob relative to it
pattern = os.path.join(self.srctree, pattern)
# Sort the glob results to ensure a consistent ordering of
# Kconfig symbols, which indirectly ensures a consistent
# ordering in e.g. .config files
for filename in sorted(glob.iglob(pattern)):
- if self.srctree is not None and not os.path.isabs(filename):
+ if strip_srctree:
# Strip the $srctree prefix from the filename and let
# the normal $srctree logic find the file. This makes
# the globbed filenames appear without a $srctree
diff --git a/testsuite.py b/testsuite.py
index a8254ea..189a325 100644
--- a/testsuite.py
+++ b/testsuite.py
@@ -890,53 +890,54 @@ g
os.environ["TESTS_DIR_FROM_ENV"] = "tests"
os.environ["SUB_DIR_FROM_ENV"] = "sub"
- os.environ["srctree"] = "Kconfiglib/"
os.environ["_SOURCED"] = "_sourced"
os.environ["_RSOURCED"] = "_rsourced"
os.environ["_GSOURCED"] = "_gsourced"
os.environ["_GRSOURCED"] = "_grsourced"
+ # Test twice, with $srctree as a relative and an absolute path,
+ # respectively
+ for srctree in "Kconfiglib", os.path.abspath("Kconfiglib"):
+ os.environ["srctree"] = srctree
- # Has symbol with empty help text, so disable warnings
- c = Kconfig("tests/Klocation", warn=False)
+ # Has symbol with empty help text, so disable warnings
+ c = Kconfig("tests/Klocation", warn=False)
- os.environ.pop("TESTS_DIR_FROM_ENV", None)
- os.environ.pop("SUB_DIR_FROM_ENV", None)
- os.environ.pop("srctree", None)
+ verify_locations(c.syms["SINGLE_DEF"].nodes, "tests/Klocation:4")
- verify_locations(c.syms["SINGLE_DEF"].nodes, "tests/Klocation:4")
+ verify_locations(c.syms["MULTI_DEF"].nodes,
+ "tests/Klocation:7",
+ "tests/Klocation:37",
+ "tests/Klocation_sourced:3",
+ "tests/sub/Klocation_rsourced:2",
+ "tests/sub/Klocation_gsourced1:1",
+ "tests/sub/Klocation_gsourced2:1",
+ "tests/sub/Klocation_grsourced1:1",
+ "tests/sub/Klocation_grsourced2:1",
+ "tests/Klocation:60")
- verify_locations(c.syms["MULTI_DEF"].nodes,
- "tests/Klocation:7",
- "tests/Klocation:37",
- "tests/Klocation_sourced:3",
- "tests/sub/Klocation_rsourced:2",
- "tests/sub/Klocation_gsourced1:1",
- "tests/sub/Klocation_gsourced2:1",
- "tests/sub/Klocation_grsourced1:1",
- "tests/sub/Klocation_grsourced2:1",
- "tests/Klocation:60")
+ verify_locations(c.named_choices["CHOICE"].nodes,
+ "tests/Klocation_sourced:5")
- verify_locations(c.named_choices["CHOICE"].nodes,
- "tests/Klocation_sourced:5")
+ verify_locations([c.syms["MENU_HOOK"].nodes[0].next],
+ "tests/Klocation_sourced:12")
- verify_locations([c.syms["MENU_HOOK"].nodes[0].next],
- "tests/Klocation_sourced:12")
+ verify_locations([c.syms["COMMENT_HOOK"].nodes[0].next],
+ "tests/Klocation_sourced:18")
- verify_locations([c.syms["COMMENT_HOOK"].nodes[0].next],
- "tests/Klocation_sourced:18")
+ # Test recursive 'source' detection
- # Test recursive 'source' detection
+ try:
+ Kconfig("Kconfiglib/tests/Krecursive1")
+ except KconfigError:
+ pass
+ except:
+ fail("recursive 'source' raised wrong exception")
+ else:
+ fail("recursive 'source' did not raise exception")
- try:
- Kconfig("Kconfiglib/tests/Krecursive1")
- except KconfigError:
- pass
- except:
- fail("recursive 'source' raised wrong exception")
- else:
- fail("recursive 'source' did not raise exception")
+ os.environ.pop("srctree", None)
print("Testing Kconfig.choices/menus/comments")