From ac692af07a123b3d623e51df7f1e7a10b88c1ddd Mon Sep 17 00:00:00 2001 From: Ulf Magnusson Date: Fri, 13 Jul 2018 18:22:12 +0200 Subject: 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. --- kconfiglib.py | 11 +++++++--- testsuite.py | 65 ++++++++++++++++++++++++++++++----------------------------- 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") -- cgit v1.2.3