scripts/generate_rust_analyzer.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
Both `core` and `alloc` had their `cfgs` missing in `rust-project.json`,
to remedy this `generate_rust_analyzer.py` scans the Makefile from
inside the `rust` directory for them to be added to a dictionary that
each key corresponds to a crate and each value, to an array of `cfgs`.
Signed-off-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
---
scripts/generate_rust_analyzer.py | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_analyzer.py
index ecc7ea9a4dcf..8bfadd688ebc 100755
--- a/scripts/generate_rust_analyzer.py
+++ b/scripts/generate_rust_analyzer.py
@@ -9,6 +9,24 @@ import logging
import pathlib
import sys
+def makefile_crate_cfgs(makefile):
+ # Get configurations from a Makefile.
+ cfgs = {}
+ with open(makefile) as fd:
+ for line in fd:
+ if line.endswith("-cfgs = \\\n"):
+ crate = line.replace("-cfgs = \\\n", "")
+ cfg = []
+ for l in map(lambda l: l.strip(), fd):
+ if not l:
+ cfgs[crate] = cfg
+ break
+ l = l.replace("--cfg ", "")
+ l = l.replace(" \\", "")
+ cfg.append(l)
+
+ return cfgs
+
def generate_crates(srctree, objtree, sysroot_src):
# Generate the configuration list.
cfg = []
@@ -24,6 +42,8 @@ def generate_crates(srctree, objtree, sysroot_src):
crates = []
crates_indexes = {}
+ makefile_cfgs = makefile_crate_cfgs(srctree / "rust" / "Makefile")
+
def append_crate(display_name, root_module, deps, cfg=[], is_workspace_member=True, is_proc_macro=False):
crates_indexes[display_name] = len(crates)
crates.append({
@@ -44,6 +64,7 @@ def generate_crates(srctree, objtree, sysroot_src):
"core",
sysroot_src / "core" / "src" / "lib.rs",
[],
+ cfg=makefile_cfgs.get("core", []),
is_workspace_member=False,
)
@@ -57,6 +78,7 @@ def generate_crates(srctree, objtree, sysroot_src):
"alloc",
srctree / "rust" / "alloc" / "lib.rs",
["core", "compiler_builtins"],
+ cfg=makefile_cfgs.get("alloc", []),
)
append_crate(
--
2.39.2
On Thu, Feb 23, 2023 at 3:59 AM Martin Rodriguez Reboredo <yakoyoku@gmail.com> wrote: > > Both `core` and `alloc` had their `cfgs` missing in `rust-project.json`, > to remedy this `generate_rust_analyzer.py` scans the Makefile from > inside the `rust` directory for them to be added to a dictionary that > each key corresponds to a crate and each value, to an array of `cfgs`. We should pass the values to the script instead, rather than relying on how our `Makefile` is written, even if we control it. Cheers, Miguel
On 2/22/23 23:59, Martin Rodriguez Reboredo wrote: > Both `core` and `alloc` had their `cfgs` missing in `rust-project.json`, > to remedy this `generate_rust_analyzer.py` scans the Makefile from > inside the `rust` directory for them to be added to a dictionary that > each key corresponds to a crate and each value, to an array of `cfgs`. > > Signed-off-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com> > --- > scripts/generate_rust_analyzer.py | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_analyzer.py > index ecc7ea9a4dcf..8bfadd688ebc 100755 > --- a/scripts/generate_rust_analyzer.py > +++ b/scripts/generate_rust_analyzer.py > @@ -9,6 +9,24 @@ import logging > import pathlib > import sys > > +def makefile_crate_cfgs(makefile): > + # Get configurations from a Makefile. > + cfgs = {} > + with open(makefile) as fd: > + for line in fd: > + if line.endswith("-cfgs = \\\n"): > + crate = line.replace("-cfgs = \\\n", "") > + cfg = [] > + for l in map(lambda l: l.strip(), fd): > + if not l: > + cfgs[crate] = cfg > + break > + l = l.replace("--cfg ", "") > + l = l.replace(" \\", "") > + cfg.append(l) > + > + return cfgs > + > def generate_crates(srctree, objtree, sysroot_src): > # Generate the configuration list. > cfg = [] > @@ -24,6 +42,8 @@ def generate_crates(srctree, objtree, sysroot_src): > crates = [] > crates_indexes = {} > > + makefile_cfgs = makefile_crate_cfgs(srctree / "rust" / "Makefile") > + > def append_crate(display_name, root_module, deps, cfg=[], is_workspace_member=True, is_proc_macro=False): > crates_indexes[display_name] = len(crates) > crates.append({ > @@ -44,6 +64,7 @@ def generate_crates(srctree, objtree, sysroot_src): > "core", > sysroot_src / "core" / "src" / "lib.rs", > [], > + cfg=makefile_cfgs.get("core", []), > is_workspace_member=False, > ) > > @@ -57,6 +78,7 @@ def generate_crates(srctree, objtree, sysroot_src): > "alloc", > srctree / "rust" / "alloc" / "lib.rs", > ["core", "compiler_builtins"], > + cfg=makefile_cfgs.get("alloc", []), > ) > > append_crate( Bump, I think this can fit into rust-fixes for 6.3.
© 2016 - 2025 Red Hat, Inc.