diff options
| author | Ulf Magnusson <ulfalizer@gmail.com> | 2018-08-17 21:04:43 +0200 |
|---|---|---|
| committer | Ulf Magnusson <ulfalizer@gmail.com> | 2018-08-18 03:15:46 +0200 |
| commit | f247ddf618ad29718e5efd3e69f8baf75d4d347b (patch) | |
| tree | 91507ace16349ae227b14a92031f3d3c85555914 /kconfiglib.py | |
| parent | af7f6c30ece8536a60d69da58d924155789c2918 (diff) | |
Look up the top-level Kconfig file relative to $srctree
Due to an old design braino, the top-level Kconfig filename passed to
Kconfig.__init__() wasn't looked up relative to $srctree, breaking
out-of-tree usage for e.g. menuconfig. Fixing it required ugliness like
srctree = os.environ.get("srctree", "")
kconfiglib.Kconfig(os.path.join(srctree, "Kconfig"))
Change the behavior of Kconfig.__init__() to look up the top-level
Kconfig file relative to $srctree. This means that all Kconfig files
(both the top-level file and any source'd files) now use $srctree, which
makes the vast majority of scripts just work when running out-of-tree.
Also remove the note re. loading a subset of Kconfig files. Saying that
the top-level file and all source'd Kconfig files are looked up relative
to $srctree should make the behavior clear enough.
Print a note about the new behavior whenever the top-level Kconfig file
can't be opened, as this change could be breaking for some scripts.
This is a slight backwards-compatiblity break, so the major version will
be bumped.
Diffstat (limited to 'kconfiglib.py')
| -rw-r--r-- | kconfiglib.py | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/kconfiglib.py b/kconfiglib.py index 68f157b..03561b5 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -610,20 +610,14 @@ class Kconfig(object): the right Kconfig is included from there (arch/$SRCARCH/Kconfig as of writing). + If $srctree is set, 'filename' will be looked up relative to it. + $srctree is also used to look up source'd files within Kconfig files. + See the class documentation. + If you are using Kconfiglib via 'make scriptconfig', the filename of the base base Kconfig file will be in sys.argv[1]. It's currently always "Kconfig" in practice. - The $srctree environment variable is used to look up Kconfig files - referenced in Kconfig files if set. See the class documentation. - - Note: '(o)source' statements in Kconfig files always work relative to - $srctree (or the current directory if $srctree is unset), even if - 'filename' is a path with directories. This allows a subset of - Kconfig files to be loaded without breaking references to other - Kconfig files, e.g. by doing Kconfig("./sub/Kconfig"). sub/Kconfig - might expect to be sourced by ./Kconfig. - warn (default: True): True if warnings related to this configuration should be generated. This can be changed later with Kconfig.enable/disable_warnings(). It @@ -737,7 +731,7 @@ class Kconfig(object): self.top_node.prompt = ("Main menu", self.y) self.top_node.parent = None self.top_node.dep = self.y - self.top_node.filename = os.path.relpath(filename, self.srctree) + self.top_node.filename = filename self.top_node.linenr = 1 # Parse the Kconfig files @@ -751,11 +745,17 @@ class Kconfig(object): self._filestack = [] # The current parsing location - self._filename = os.path.relpath(filename, self.srctree) + self._filename = filename self._linenr = 0 # Open the top-level Kconfig file - self._file = self._open(filename, "r") + try: + self._file = self._open(os.path.join(self.srctree, filename), "r") + except IOError as e: + if self.srctree: + print(textwrap.fill( + _INIT_SRCTREE_NOTE.format(self.srctree), 80)) + raise try: # Parse everything @@ -6014,3 +6014,12 @@ _REL_TO_STR = { GREATER: ">", GREATER_EQUAL: ">=", } + +_INIT_SRCTREE_NOTE = """ +NOTE: Starting with Kconfiglib 10.0.0, the Kconfig filename passed to +Kconfig.__init__() is looked up relative to the $srctree (which is set to '{}') +instead of relative to the working directory. Previously, $srctree only applied +to files being source'd within Kconfig files. This change makes running scripts +out-of-tree work seamlessly, with no special coding required. Sorry for the +backwards compatibility break! +"""[1:] |
