From: "Yann E. MORIN" <yann.morin.1998@free.fr>
To: James Hilliard <james.hilliard1@gmail.com>
Cc: buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH v2 1/1] utils/genrandconfig: switch to async/await format
Date: Fri, 31 May 2024 21:23:23 +0200 [thread overview]
Message-ID: <Zlojq9qcUCZfqRWc@landeda> (raw)
In-Reply-To: <20240528132218.2307479-1-james.hilliard1@gmail.com>
James, all,
On 2024-05-28 07:22 -0600, James Hilliard spake thusly:
> This requires python 3.5 or newer but is a bit cleaner than the
> previous coroutine method.
>
> This should also fix a python3.12 issue:
> [Tue, 28 May 2024 13:09:05] INFO: generate the configuration
> Traceback (most recent call last):
> File "/home/autobuild/autobuild/instance-0/buildroot/utils/genrandconfig", line 833, in <module>
> ret = asyncio.run(gen_config(args))
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
> return runner.run(main)
> ^^^^^^^^^^^^^^^^
> File "/usr/lib/python3.12/asyncio/runners.py", line 89, in run
> raise ValueError("a coroutine was expected, got {!r}".format(coro))
> ValueError: a coroutine was expected, got <generator object gen_config at 0xffff7bd822c0>
> [Tue, 28 May 2024 13:09:06] WARN: failed to generate configuration
>
> Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
Applied to master, thanks.
Regards,
Yann E. MORIN.
> ---
> Changes v1 -> v2:
> - rebase
> - update commit message with python 3.12 fix info
> ---
> utils/genrandconfig | 62 +++++++++++++++++----------------------------
> 1 file changed, 23 insertions(+), 39 deletions(-)
>
> diff --git a/utils/genrandconfig b/utils/genrandconfig
> index df6bede158..b838dda34d 100755
> --- a/utils/genrandconfig
> +++ b/utils/genrandconfig
> @@ -28,11 +28,6 @@ import traceback
> from distutils.version import StrictVersion
> import platform
>
> -if sys.version_info < (3, 8):
> - from asyncio import coroutine
> -else:
> - from types import coroutine
> -
>
> class SystemInfo:
> DEFAULT_NEEDED_PROGS = ["make", "git", "gcc", "timeout"]
> @@ -60,8 +55,7 @@ class SystemInfo:
> # --
> return None
>
> - @coroutine
> - def has(self, prog):
> + async def has(self, prog):
> """Checks whether a program is available.
> Lazily evaluates missing entries.
>
> @@ -76,11 +70,11 @@ class SystemInfo:
> have_it = self.find_prog(prog)
> # java[c] needs special care
> if have_it and prog in ('java', 'javac'):
> - proc = yield from asyncio.create_subprocess_shell(
> + proc = await asyncio.create_subprocess_shell(
> "%s -version | grep gcj" % prog,
> stdout=asyncio.subprocess.DEVNULL,
> stderr=asyncio.subprocess.DEVNULL)
> - ret = yield from proc.wait()
> + ret = await proc.wait()
> if ret != 1:
> have_it = False
> # --
> @@ -159,8 +153,7 @@ def get_toolchain_configs(toolchains_csv, buildrootdir):
> return configs
>
>
> -@coroutine
> -def is_toolchain_usable(configfile, config):
> +async def is_toolchain_usable(configfile, config):
> """Check if the toolchain is actually usable."""
>
> with open(configfile) as configf:
> @@ -180,9 +173,9 @@ def is_toolchain_usable(configfile, config):
> 'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64=y\n' in configlines or \
> 'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE=y\n' in configlines or \
> 'BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB=y\n' in configlines:
> - proc = yield from asyncio.create_subprocess_exec(
> + proc = await asyncio.create_subprocess_exec(
> 'ldd', '--version', stdout=asyncio.subprocess.PIPE)
> - ldd_version_output, _ = yield from proc.communicate()
> + ldd_version_output, _ = await proc.communicate()
> if proc.returncode:
> return False
> glibc_version = ldd_version_output.decode().splitlines()[0].split()[-1]
> @@ -193,8 +186,7 @@ def is_toolchain_usable(configfile, config):
> return True
>
>
> -@coroutine
> -def fixup_config(sysinfo, configfile):
> +async def fixup_config(sysinfo, configfile):
> """Finalize the configuration and reject any problematic combinations
>
> This function returns 'True' when the configuration has been
> @@ -210,8 +202,7 @@ def fixup_config(sysinfo, configfile):
>
> BR2_TOOLCHAIN_EXTERNAL_URL = 'BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/'
>
> - has_java = yield from sysinfo.has("java")
> - if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not has_java:
> + if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not await sysinfo.has("java"):
> return False
> # The ctng toolchain is affected by PR58854
> if 'BR2_PACKAGE_LTTNG_TOOLS=y\n' in configlines and \
> @@ -669,8 +660,7 @@ def fixup_config(sysinfo, configfile):
> return True
>
>
> -@coroutine
> -def gen_config(args):
> +async def gen_config(args):
> """Generate a new random configuration
>
> This function generates the configuration, by choosing a random
> @@ -728,8 +718,7 @@ def gen_config(args):
>
> # Randomly enable BR2_REPRODUCIBLE 10% of times
> # also enable tar filesystem images for testing
> - has_diffoscope = yield from sysinfo.has("diffoscope")
> - if has_diffoscope and randint(0, 10) == 0:
> + if await sysinfo.has("diffoscope") and randint(0, 10) == 0:
> configlines.append("BR2_REPRODUCIBLE=y\n")
> configlines.append("BR2_TARGET_ROOTFS_TAR=y\n")
>
> @@ -743,14 +732,13 @@ def gen_config(args):
> with open(configfile, "w+") as configf:
> configf.writelines(configlines)
>
> - proc = yield from asyncio.create_subprocess_exec(
> + proc = await asyncio.create_subprocess_exec(
> "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
> - ret = yield from proc.wait()
> + ret = await proc.wait()
> if ret:
> return ret
>
> - toolchain_usable = yield from is_toolchain_usable(configfile, toolchainconfig)
> - if not toolchain_usable:
> + if not await is_toolchain_usable(configfile, toolchainconfig):
> return 2
>
> # Now, generate the random selection of packages, and fixup
> @@ -764,37 +752,33 @@ def gen_config(args):
> file=sys.stderr)
> return 1
> bounded_loop -= 1
> - make_rand = [
> + proc = await asyncio.create_subprocess_exec(
> "make", "O=%s" % args.outputdir, "-C", args.buildrootdir,
> "KCONFIG_SEED=0x%s" % hexlify(os.urandom(4)).decode("ascii").upper(),
> "KCONFIG_PROBABILITY=%d" % randint(1, 20),
> - "randpackageconfig" if args.toolchains_csv else "randconfig"
> - ]
> - proc = yield from asyncio.create_subprocess_exec(*make_rand)
> - ret = yield from proc.wait()
> + "randpackageconfig" if args.toolchains_csv else "randconfig")
> + ret = await proc.wait()
> if ret:
> return ret
>
> - ret = yield from fixup_config(sysinfo, configfile)
> - if ret:
> + if await fixup_config(sysinfo, configfile):
> break
>
> - proc = yield from asyncio.create_subprocess_exec(
> + proc = await asyncio.create_subprocess_exec(
> "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
> - ret = yield from proc.wait()
> + ret = await proc.wait()
> if ret:
> return ret
>
> - proc = yield from asyncio.create_subprocess_exec(
> + proc = await asyncio.create_subprocess_exec(
> "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "savedefconfig")
> - ret = yield from proc.wait()
> + ret = await proc.wait()
> if ret:
> return ret
>
> - proc = yield from asyncio.create_subprocess_exec(
> + proc = await asyncio.create_subprocess_exec(
> "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "dependencies")
> - ret = yield from proc.wait()
> - return ret
> + return await proc.wait()
>
>
> if __name__ == '__main__':
> --
> 2.34.1
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next prev parent reply other threads:[~2024-05-31 19:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-28 13:22 [Buildroot] [PATCH v2 1/1] utils/genrandconfig: switch to async/await format James Hilliard
2024-05-28 13:31 ` Baruch Siach via buildroot
2024-05-28 13:33 ` James Hilliard
2024-05-28 13:45 ` Baruch Siach via buildroot
2024-05-31 18:48 ` [Buildroot] [External] - " Vincent Fazio
2024-05-31 19:23 ` Yann E. MORIN [this message]
2024-06-08 16:52 ` [Buildroot] " Peter Korsgaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zlojq9qcUCZfqRWc@landeda \
--to=yann.morin.1998@free.fr \
--cc=buildroot@buildroot.org \
--cc=james.hilliard1@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox