From nobody Wed Jun 17 06:11:41 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE3DC3E7145 for ; Mon, 27 Apr 2026 17:44:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777311898; cv=none; b=gUcQpPg9HFLedonbKMZabsl2pI1mcbKl7VGstAe4phtGA570Bew5x7GypVF7KYlyhPgMzhfSaXJgZCtf77GIufjn/IYI6mcg1gEJVy68HwEKxl7FVjVV81/jrlZT+ZWFXl3qw3+4uMJDSJJSbxnA+DgPc+7pvIGSCPxLDKdaCmc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777311898; c=relaxed/simple; bh=JeU0auf5zopqzBvoSc/sBlfq+oLC4MEfTX5YFrmAcSQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PhYV2mI1gELp//c5Ax524J5tgUAo35KQBFMaeO2so2aGe1XJU+5B5RiA1CX+cI/10VDcSsG21HLfHB+zU0Fo/cU9XACqD/tdbw77JokAmnHExmkZAPJoDG8i799mjfQIZmwWOYT2kKJNQeaotaKohBr6u6xzb46IPQuaIsJQArI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fGSuJ65B; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fGSuJ65B" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-488ad135063so96376925e9.0 for ; Mon, 27 Apr 2026 10:44:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777311884; x=1777916684; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=h6cm5SCuyNs1SNiNQEgf/KAaUTvkgCLuKVyr81a4ZOo=; b=fGSuJ65BE8fmhtbL8l1I2VxI5bSBjoay++PLmvZwg0hnlAIRk8FbZhH8B/KD8Bgj5j jQ21jjcdz4O0KVN592FXWk8LUs1vN48hSxUGmFNYA6ICLOb/Uex9lLgOL5PsOrQL4b28 ulrWrcp3unopn1Qgd8cumgUXDC9ev2awMY7BX6Bo9pE0EkxtLxKpmEIdMdEfyAWbHSXP iAix0vMjq/4Cyr0Sl6t6t+fFUS5CD7VldIq/qIlll9KoZEDjT4JMxtqzrS1PXr3CQEtF 3ppTx4riB829+I6D+Mbd4kng9wf04pgZXir1WfK3aS5DM9snGqM9TD1twzsQ1UMlVekQ rN6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777311884; x=1777916684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=h6cm5SCuyNs1SNiNQEgf/KAaUTvkgCLuKVyr81a4ZOo=; b=mhdLhe3+/JlUveHRnj/DgpwjT+9RPYrjoYbLTf0HV+474eSPXXHGAxqJC5FJgUs4Fp NsEMIMVWl/AB5IWrnlZ6eCVj22LEpl1VUuI719+kLHEmo8jF1eigBwGIRQXHTzthFKlF 7SM3wGYQDk+6dbbUyfXLlVDpwILUw38b2c9neb7WMTSB8cGe8Y3fpV9JpSo15kCVnHWC XDkAPYjTGwgIT/rDbP+DQzvfsUBZCKfcLX1tus9XDs6v4Ai98pZrslwbAQkeGh1TqWVM roKCoSV9e2F/dxhGpA4MGd8nLr8/K7ij6JhXK5saS6YlUVkdcI2e79xCQKZCTq5gP0rH 8SWQ== X-Forwarded-Encrypted: i=1; AFNElJ9CEmCNB3No+x2T6Gr8K35VjXGnlBrrAmpu/YpALiz5EUVNxtBNP7E77igmRMI/e1G7s/pwgJUxz7BjRcs=@vger.kernel.org X-Gm-Message-State: AOJu0YxavkWb6m9prTGDLPChN4aCe1wpkCJP+gNMpsUwwTZ01P9fkrqV oap6F+Mgyr5Z80b+O9KVhBlOywggcRHpDvmEF2ou7EwqGVCMp4Ix5lsONWKLWEEUsdI= X-Gm-Gg: AeBDieuOb9yqLl7TB/VLeYqzRuJt+YC47nXnu8NGypMjNQf2mxaMksZGlva0DUiH9Iz o3FinP7t6/Pm5YTU+/lD5uI64fhIDYogCab6gMY3pg93m4kIOrjCsNyZBSao1kslWSGeT12cPo+ FQ6VOrb7MpP0XnwLy99MG+/V73ozccDlEz22e+3+uCg8xjGZRd7OroJXiK/TgbOhU0L6kR4DPOM B73e7j5splUwcwJChqeVIyO2OcoZZmbdDKpGMTKOwqWrWOg+p3BVvfr7ujD9xfWDhVo6eIlvvjI E9oepMEr8WuKc7PnRQ4DJKJFD4116LSWhtSbo1oEWwA0026vjdPvklACmG6MqIkBAHYv3ozHHIo 1L8epyEPyLhjC0snZMiCHajCkLuorm63Z3xeYQDGroeLMuElNcHN4iNgVyLcwd4rsRQa7mx9FAS swHkOQBSr9oO+UUOSETseYz2/rMDxzjPsc1f9IKl8Def/5PRuU334c5yOIZNSlSlMTkw== X-Received: by 2002:a05:600c:3548:b0:489:1f6b:6276 with SMTP id 5b1f17b1804b1-48a76f7ecfdmr4147315e9.15.1777311883000; Mon, 27 Apr 2026 10:44:43 -0700 (PDT) Received: from nixos-office (195-23-151-163.net.novis.pt. [195.23.151.163]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a774b6300sm478485e9.16.2026.04.27.10.44.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Apr 2026 10:44:42 -0700 (PDT) Sender: Julian Braha From: Julian Braha To: akpm@linux-foundation.org, ljs@kernel.org Cc: arnd@arndb.de, gregkh@linuxfoundation.org, masahiroy@kernel.org, nathan@kernel.org, nsc@kernel.org, ojeda@kernel.org, corbet@lwn.net, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-doc@vger.kernel.org, linux-kbuild@vger.kernel.org, Julian Braha Subject: [RFC PATCH 1/2] scripts: add kconfirm Date: Mon, 27 Apr 2026 18:44:28 +0100 Message-ID: <20260427174429.779474-2-julianbraha@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260427174429.779474-1-julianbraha@gmail.com> References: <20260427174429.779474-1-julianbraha@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add kconfirm into scripts/ and modify the root Makefile and scripts/Makefile accordingly so that it can be compiled and run with: `make kconfirm` from the root of the tree. The user is expected to have Rust with Cargo installed, and an internet connection on the first run to download and compile the dependencies. Signed-off-by: Julian Braha --- Makefile | 12 +- scripts/Makefile | 2 +- scripts/kconfirm/Cargo.lock | 1710 +++++++++++++++++ scripts/kconfirm/Cargo.toml | 21 + scripts/kconfirm/Makefile | 28 + scripts/kconfirm/kconfirm-lib/Cargo.toml | 16 + scripts/kconfirm/kconfirm-lib/src/analyze.rs | 593 ++++++ scripts/kconfirm/kconfirm-lib/src/checks.rs | 257 +++ .../kconfirm/kconfirm-lib/src/dead_links.rs | 63 + scripts/kconfirm/kconfirm-lib/src/lib.rs | 55 + scripts/kconfirm/kconfirm-lib/src/output.rs | 52 + .../kconfirm/kconfirm-lib/src/symbol_table.rs | 209 ++ scripts/kconfirm/kconfirm-linux/Cargo.toml | 14 + scripts/kconfirm/kconfirm-linux/src/lib.rs | 129 ++ scripts/kconfirm/kconfirm-linux/src/main.rs | 74 + 15 files changed, 3231 insertions(+), 4 deletions(-) create mode 100644 scripts/kconfirm/Cargo.lock create mode 100644 scripts/kconfirm/Cargo.toml create mode 100644 scripts/kconfirm/Makefile create mode 100644 scripts/kconfirm/kconfirm-lib/Cargo.toml create mode 100644 scripts/kconfirm/kconfirm-lib/src/analyze.rs create mode 100644 scripts/kconfirm/kconfirm-lib/src/checks.rs create mode 100644 scripts/kconfirm/kconfirm-lib/src/dead_links.rs create mode 100644 scripts/kconfirm/kconfirm-lib/src/lib.rs create mode 100644 scripts/kconfirm/kconfirm-lib/src/output.rs create mode 100644 scripts/kconfirm/kconfirm-lib/src/symbol_table.rs create mode 100644 scripts/kconfirm/kconfirm-linux/Cargo.toml create mode 100644 scripts/kconfirm/kconfirm-linux/src/lib.rs create mode 100644 scripts/kconfirm/kconfirm-linux/src/main.rs diff --git a/Makefile b/Makefile index 54e1ae602000..8fcee448111b 100644 --- a/Makefile +++ b/Makefile @@ -1707,13 +1707,16 @@ MRPROPER_FILES +=3D include/config include/generate= d \ # clean: private rm-files :=3D $(CLEAN_FILES) =20 -PHONY +=3D archclean vmlinuxclean +PHONY +=3D archclean vmlinuxclean kconfirm_clean =20 vmlinuxclean: $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) =20 -clean: archclean vmlinuxclean resolve_btfids_clean objtool_clean +kconfirm_clean: + $(Q)$(MAKE) -C scripts/kconfirm clean + +clean: archclean vmlinuxclean resolve_btfids_clean objtool_clean kconfirm_= clean =20 # mrproper - Delete all generated files, including .config # @@ -2223,7 +2226,7 @@ endif # Scripts to check various things for consistency # ------------------------------------------------------------------------= --- =20 -PHONY +=3D includecheck versioncheck coccicheck +PHONY +=3D includecheck versioncheck coccicheck kconfirm =20 includecheck: find $(srctree)/* $(RCS_FIND_IGNORE) \ @@ -2238,6 +2241,9 @@ versioncheck: coccicheck: $(Q)$(BASH) $(srctree)/scripts/$@ =20 +kconfirm: + $(Q)$(MAKE) -C scripts/kconfirm + PHONY +=3D checkstack kernelrelease kernelversion image_name =20 # UML needs a little special treatment here. It wants to use the host diff --git a/scripts/Makefile b/scripts/Makefile index 55244ce95578..402950d9a008 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -57,7 +57,7 @@ HOSTCFLAGS_sorttable.o +=3D -DMCOUNT_SORT_ENABLED endif =20 # The following programs are only built on demand -hostprogs +=3D unifdef gen_packed_field_checks +hostprogs +=3D unifdef gen_packed_field_checks kconfirm =20 # The module linker script is preprocessed on demand targets +=3D module.lds diff --git a/scripts/kconfirm/Cargo.lock b/scripts/kconfirm/Cargo.lock new file mode 100644 index 000000000000..c1e55ae2ca00 --- /dev/null +++ b/scripts/kconfirm/Cargo.lock @@ -0,0 +1,1710 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version =3D 4 + +[[package]] +name =3D "aho-corasick" +version =3D "1.1.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f100281617= 4301" +dependencies =3D [ + "memchr", +] + +[[package]] +name =3D "anstyle" +version =3D "1.0.14" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead7= 6000" + +[[package]] +name =3D "atomic-waker" +version =3D "1.1.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8= aac0" + +[[package]] +name =3D "aws-lc-rs" +version =3D "1.16.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a= 038f" +dependencies =3D [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name =3D "aws-lc-sys" +version =3D "0.40.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f94285085= 2fe7" +dependencies =3D [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name =3D "base64" +version =3D "0.22.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fb= b8c6" + +[[package]] +name =3D "bitflags" +version =3D "2.11.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c= 78b3" + +[[package]] +name =3D "bumpalo" +version =3D "3.20.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced= 2fcb" + +[[package]] +name =3D "bytecount" +version =3D "0.6.9" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0= 365e" + +[[package]] +name =3D "bytes" +version =3D "1.11.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4= fc33" + +[[package]] +name =3D "cc" +version =3D "1.2.61" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd= 5c6d" +dependencies =3D [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name =3D "cfg-if" +version =3D "1.0.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef98614261512= 1801" + +[[package]] +name =3D "cfg_aliases" +version =3D "0.2.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb= 5724" + +[[package]] +name =3D "clap" +version =3D "4.6.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d2842= 8e51" +dependencies =3D [ + "clap_builder", + "clap_derive", +] + +[[package]] +name =3D "clap_builder" +version =3D "4.6.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5= 069f" +dependencies =3D [ + "anstyle", + "clap_lex", +] + +[[package]] +name =3D "clap_derive" +version =3D "4.6.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f9= 97a9" +dependencies =3D [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "clap_lex" +version =3D "1.1.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d= 98f9" + +[[package]] +name =3D "cmake" +version =3D "0.1.58" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff= 0678" +dependencies =3D [ + "cc", +] + +[[package]] +name =3D "combine" +version =3D "4.6.7" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ba5a308b75df32fe02788e748662718f03fde005016435c444eea5723982= 19fd" +dependencies =3D [ + "bytes", + "memchr", +] + +[[package]] +name =3D "core-foundation" +version =3D "0.10.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd1= 56f6" +dependencies =3D [ + "core-foundation-sys", + "libc", +] + +[[package]] +name =3D "core-foundation-sys" +version =3D "0.8.7" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791= 888b" + +[[package]] +name =3D "displaydoc" +version =3D "0.2.5" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a2= 0ae0" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "dunce" +version =3D "1.0.5" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7= c813" + +[[package]] +name =3D "env_filter" +version =3D "1.0.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f= 6eef" +dependencies =3D [ + "log", +] + +[[package]] +name =3D "env_logger" +version =3D "0.11.10" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198= b56a" +dependencies =3D [ + "env_filter", + "log", +] + +[[package]] +name =3D "find-msvc-tools" +version =3D "0.1.9" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088= d582" + +[[package]] +name =3D "form_urlencoded" +version =3D "1.2.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b158= 1fcf" +dependencies =3D [ + "percent-encoding", +] + +[[package]] +name =3D "fs_extra" +version =3D "1.3.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11= b11c" + +[[package]] +name =3D "futures-channel" +version =3D "0.3.32" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7= cc1d" +dependencies =3D [ + "futures-core", + "futures-sink", +] + +[[package]] +name =3D "futures-core" +version =3D "0.3.32" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df= 6b1d" + +[[package]] +name =3D "futures-io" +version =3D "0.3.32" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a71= 7718" + +[[package]] +name =3D "futures-sink" +version =3D "0.3.32" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad= 0893" + +[[package]] +name =3D "futures-task" +version =3D "0.3.32" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde= 4393" + +[[package]] +name =3D "futures-util" +version =3D "0.3.32" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805= c6d6" +dependencies =3D [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name =3D "getrandom" +version =3D "0.2.17" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a461= 4ad0" +dependencies =3D [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name =3D "getrandom" +version =3D "0.3.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd= 77fd" +dependencies =3D [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name =3D "glob" +version =3D "0.3.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bb= d280" + +[[package]] +name =3D "heck" +version =3D "0.5.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe= 55ea" + +[[package]] +name =3D "http" +version =3D "1.4.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3= 311a" +dependencies =3D [ + "bytes", + "itoa", +] + +[[package]] +name =3D "http-body" +version =3D "1.0.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c9= 3184" +dependencies =3D [ + "bytes", + "http", +] + +[[package]] +name =3D "http-body-util" +version =3D "0.1.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896= a64a" +dependencies =3D [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name =3D "httparse" +version =3D "1.10.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69= cc87" + +[[package]] +name =3D "hyper" +version =3D "1.9.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305f= bcca" +dependencies =3D [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name =3D "hyper-rustls" +version =3D "0.27.9" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab6= 6e0f" +dependencies =3D [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name =3D "hyper-util" +version =3D "0.1.20" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6b= dfa0" +dependencies =3D [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name =3D "icu_collections" +version =3D "2.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a3= 4b43" +dependencies =3D [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name =3D "icu_locale_core" +version =3D "2.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b= 5bb6" +dependencies =3D [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name =3D "icu_normalizer" +version =3D "2.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1= b599" +dependencies =3D [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name =3D "icu_normalizer_data" +version =3D "2.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc= 560a" + +[[package]] +name =3D "icu_properties" +version =3D "2.1.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d= 74ec" +dependencies =3D [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name =3D "icu_properties_data" +version =3D "2.1.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c= 77af" + +[[package]] +name =3D "icu_provider" +version =3D "2.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59= e614" +dependencies =3D [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name =3D "idna" +version =3D "1.1.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1= e4de" +dependencies =3D [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name =3D "idna_adapter" +version =3D "1.2.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a= 0344" +dependencies =3D [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name =3D "ipnet" +version =3D "2.12.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017= f8e2" + +[[package]] +name =3D "iri-string" +version =3D "0.7.12" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf= 4e20" +dependencies =3D [ + "memchr", + "serde", +] + +[[package]] +name =3D "itoa" +version =3D "1.0.18" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d777768= 5682" + +[[package]] +name =3D "jni" +version =3D "0.22.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa= 3498" +dependencies =3D [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys", + "log", + "simd_cesu8", + "thiserror", + "walkdir", + "windows-link", +] + +[[package]] +name =3D "jni-macros" +version =3D "0.22.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b0625915= 60a3" +dependencies =3D [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn", +] + +[[package]] +name =3D "jni-sys" +version =3D "0.4.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c87= 8af2" +dependencies =3D [ + "jni-sys-macros", +] + +[[package]] +name =3D "jni-sys-macros" +version =3D "0.4.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a= 6264" +dependencies =3D [ + "quote", + "syn", +] + +[[package]] +name =3D "jobserver" +version =3D "0.1.34" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca903= 9d33" +dependencies =3D [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name =3D "js-sys" +version =3D "0.3.95" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c= 12ca" +dependencies =3D [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name =3D "kconfirm-lib" +version =3D "0.7.0" +dependencies =3D [ + "env_logger", + "log", + "nom-kconfig", + "regex", + "reqwest", +] + +[[package]] +name =3D "kconfirm-linux" +version =3D "0.7.0" +dependencies =3D [ + "clap", + "env_logger", + "kconfirm-lib", + "log", + "nom-kconfig", +] + +[[package]] +name =3D "libc" +version =3D "0.2.186" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587= de66" + +[[package]] +name =3D "litemap" +version =3D "0.8.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612= e6f0" + +[[package]] +name =3D "log" +version =3D "0.4.29" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf797875892= 0897" + +[[package]] +name =3D "lru-slab" +version =3D "0.1.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a= 4154" + +[[package]] +name =3D "memchr" +version =3D "2.8.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff= 3f79" + +[[package]] +name =3D "mio" +version =3D "1.2.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc= 56c1" +dependencies =3D [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name =3D "nom" +version =3D "8.0.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f= 9405" +dependencies =3D [ + "memchr", +] + +[[package]] +name =3D "nom-kconfig" +version =3D "0.10.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c27ba674eb4a89c21e046dcaed8552f26c8332ba4951b167ec845d2abb8c= 95c4" +dependencies =3D [ + "glob", + "nom", + "nom_locate", + "regex", + "serde", + "tracing", +] + +[[package]] +name =3D "nom_locate" +version =3D "5.0.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68= 438d" +dependencies =3D [ + "bytecount", + "memchr", + "nom", +] + +[[package]] +name =3D "once_cell" +version =3D "1.21.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd31= 3b50" + +[[package]] +name =3D "openssl-probe" +version =3D "0.2.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfba= fcbe" + +[[package]] +name =3D "percent-encoding" +version =3D "2.3.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d8= 7220" + +[[package]] +name =3D "pin-project-lite" +version =3D "0.2.17" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6= d5cd" + +[[package]] +name =3D "potential_utf" +version =3D "0.1.5" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a= 0564" +dependencies =3D [ + "zerovec", +] + +[[package]] +name =3D "ppv-lite86" +version =3D "0.2.21" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e9= 7da9" +dependencies =3D [ + "zerocopy", +] + +[[package]] +name =3D "proc-macro2" +version =3D "1.0.106" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb3= 0934" +dependencies =3D [ + "unicode-ident", +] + +[[package]] +name =3D "quinn" +version =3D "0.11.9" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfc= cf20" +dependencies =3D [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name =3D "quinn-proto" +version =3D "0.11.14" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94= c098" +dependencies =3D [ + "aws-lc-rs", + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name =3D "quinn-udp" +version =3D "0.5.14" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa8133257= 4cbd" +dependencies =3D [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name =3D "quote" +version =3D "1.0.45" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259= b924" +dependencies =3D [ + "proc-macro2", +] + +[[package]] +name =3D "r-efi" +version =3D "5.3.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f34675= 4b0f" + +[[package]] +name =3D "rand" +version =3D "0.9.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f= 76ea" +dependencies =3D [ + "rand_chacha", + "rand_core", +] + +[[package]] +name =3D "rand_chacha" +version =3D "0.9.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f3= 25cb" +dependencies =3D [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name =3D "rand_core" +version =3D "0.9.5" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261= d83c" +dependencies =3D [ + "getrandom 0.3.4", +] + +[[package]] +name =3D "regex" +version =3D "1.12.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0= e276" +dependencies =3D [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name =3D "regex-automata" +version =3D "0.4.14" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213c= ae8f" +dependencies =3D [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name =3D "regex-syntax" +version =3D "0.8.10" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa01354318= 5d0a" + +[[package]] +name =3D "reqwest" +version =3D "0.13.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97d= eec0" +dependencies =3D [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name =3D "ring" +version =3D "0.17.14" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f613= 83b7" +dependencies =3D [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name =3D "rustc-hash" +version =3D "2.1.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c45761= 4dbe" + +[[package]] +name =3D "rustc_version" +version =3D "0.4.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e= 9b92" +dependencies =3D [ + "semver", +] + +[[package]] +name =3D "rustls" +version =3D "0.23.39" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74= e60e" +dependencies =3D [ + "aws-lc-rs", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name =3D "rustls-native-certs" +version =3D "0.8.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c593= 2a63" +dependencies =3D [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name =3D "rustls-pki-types" +version =3D "1.14.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c9= 37a9" +dependencies =3D [ + "web-time", + "zeroize", +] + +[[package]] +name =3D "rustls-platform-verifier" +version =3D "0.7.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba4123= 3ba0" +dependencies =3D [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name =3D "rustls-platform-verifier-android" +version =3D "0.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36= 788f" + +[[package]] +name =3D "rustls-webpki" +version =3D "0.103.13" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f= 756e" +dependencies =3D [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name =3D "rustversion" +version =3D "1.0.22" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538= d46d" + +[[package]] +name =3D "same-file" +version =3D "1.0.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b6837890= 0502" +dependencies =3D [ + "winapi-util", +] + +[[package]] +name =3D "schannel" +version =3D "0.1.29" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbff= d939" +dependencies =3D [ + "windows-sys 0.61.2", +] + +[[package]] +name =3D "security-framework" +version =3D "3.7.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404= cd1d" +dependencies =3D [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name =3D "security-framework-sys" +version =3D "2.17.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce0= 20e3" +dependencies =3D [ + "core-foundation-sys", + "libc", +] + +[[package]] +name =3D "semver" +version =3D "1.0.28" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae= 51cd" + +[[package]] +name =3D "serde" +version =3D "1.0.228" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124= ae9e" +dependencies =3D [ + "serde_core", + "serde_derive", +] + +[[package]] +name =3D "serde_core" +version =3D "1.0.228" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b= 67ad" +dependencies =3D [ + "serde_derive", +] + +[[package]] +name =3D "serde_derive" +version =3D "1.0.228" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda9= 1d79" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "shlex" +version =3D "1.3.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f632= 3e64" + +[[package]] +name =3D "simd_cesu8" +version =3D "1.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b= 2c33" +dependencies =3D [ + "rustc_version", + "simdutf8", +] + +[[package]] +name =3D "simdutf8" +version =3D "0.1.5" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71= b76e" + +[[package]] +name =3D "slab" +version =3D "0.4.12" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c= 9cf5" + +[[package]] +name =3D "smallvec" +version =3D "1.15.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6f= bd03" + +[[package]] +name =3D "socket2" +version =3D "0.6.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93= 723e" +dependencies =3D [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name =3D "stable_deref_trait" +version =3D "1.2.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc781= 0596" + +[[package]] +name =3D "subtle" +version =3D "2.6.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea= 3292" + +[[package]] +name =3D "syn" +version =3D "2.0.117" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b= 9b99" +dependencies =3D [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name =3D "sync_wrapper" +version =3D "1.0.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f2= 7263" +dependencies =3D [ + "futures-core", +] + +[[package]] +name =3D "synstructure" +version =3D "0.13.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a7= 09d2" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "thiserror" +version =3D "2.0.18" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865= fbc4" +dependencies =3D [ + "thiserror-impl", +] + +[[package]] +name =3D "thiserror-impl" +version =3D "2.0.18" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856de= c1d5" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "tinystr" +version =3D "0.8.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447= d96d" +dependencies =3D [ + "displaydoc", + "zerovec", +] + +[[package]] +name =3D "tinyvec" +version =3D "1.11.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f66= 7ef3" +dependencies =3D [ + "tinyvec_macros", +] + +[[package]] +name =3D "tinyvec_macros" +version =3D "0.1.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d053= 2f20" + +[[package]] +name =3D "tokio" +version =3D "1.52.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670b= bcc6" +dependencies =3D [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name =3D "tokio-rustls" +version =3D "0.26.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4= ef61" +dependencies =3D [ + "rustls", + "tokio", +] + +[[package]] +name =3D "tower" +version =3D "0.5.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851a= b1d4" +dependencies =3D [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name =3D "tower-http" +version =3D "0.6.8" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924= a1f8" +dependencies =3D [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name =3D "tower-layer" +version =3D "0.3.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48= 780e" + +[[package]] +name =3D "tower-service" +version =3D "0.3.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69e= eec3" + +[[package]] +name =3D "tracing" +version =3D "0.1.44" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6= d100" +dependencies =3D [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name =3D "tracing-attributes" +version =3D "0.1.31" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69= e8da" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "tracing-core" +version =3D "0.1.36" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5f= b79a" +dependencies =3D [ + "once_cell", +] + +[[package]] +name =3D "try-lock" +version =3D "0.2.5" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396= 114b" + +[[package]] +name =3D "unicode-ident" +version =3D "1.0.24" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247= da75" + +[[package]] +name =3D "untrusted" +version =3D "0.9.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a= 47c1" + +[[package]] +name =3D "url" +version =3D "2.5.8" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d= 0eed" +dependencies =3D [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name =3D "utf8_iter" +version =3D "1.0.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52= b6be" + +[[package]] +name =3D "walkdir" +version =3D "2.5.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a= 5e4b" +dependencies =3D [ + "same-file", + "winapi-util", +] + +[[package]] +name =3D "want" +version =3D "0.3.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d76= 0b0e" +dependencies =3D [ + "try-lock", +] + +[[package]] +name =3D "wasi" +version =3D "0.11.1+wasi-snapshot-preview1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4e= a44b" + +[[package]] +name =3D "wasip2" +version =3D "1.0.1+wasi-0.2.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad= 58e7" +dependencies =3D [ + "wit-bindgen", +] + +[[package]] +name =3D "wasm-bindgen" +version =3D "0.2.118" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e= 3a89" +dependencies =3D [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name =3D "wasm-bindgen-futures" +version =3D "0.4.68" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1= ebf8" +dependencies =3D [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name =3D "wasm-bindgen-macro" +version =3D "0.2.118" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca= 28ed" +dependencies =3D [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name =3D "wasm-bindgen-macro-support" +version =3D "0.2.118" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196= c904" +dependencies =3D [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name =3D "wasm-bindgen-shared" +version =3D "0.2.118" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbde= e129" +dependencies =3D [ + "unicode-ident", +] + +[[package]] +name =3D "web-sys" +version =3D "0.3.95" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14= d97d" +dependencies =3D [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name =3D "web-time" +version =3D "1.1.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12f= a0bb" +dependencies =3D [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name =3D "webpki-root-certs" +version =3D "1.0.7" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9= a92c" +dependencies =3D [ + "rustls-pki-types", +] + +[[package]] +name =3D "winapi-util" +version =3D "0.1.11" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba1= 0d22" +dependencies =3D [ + "windows-sys 0.61.2", +] + +[[package]] +name =3D "windows-link" +version =3D "0.2.1" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a= 4fe5" + +[[package]] +name =3D "windows-sys" +version =3D "0.52.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9= a33d" +dependencies =3D [ + "windows-targets", +] + +[[package]] +name =3D "windows-sys" +version =3D "0.61.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921f= f3fc" +dependencies =3D [ + "windows-link", +] + +[[package]] +name =3D "windows-targets" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e9= 9973" +dependencies =3D [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name =3D "windows_aarch64_gnullvm" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c0= 2cd3" + +[[package]] +name =3D "windows_aarch64_msvc" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05= d469" + +[[package]] +name =3D "windows_i686_gnu" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bb= fa0b" + +[[package]] +name =3D "windows_i686_gnullvm" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8= ed66" + +[[package]] +name =3D "windows_i686_msvc" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec5= 6c66" + +[[package]] +name =3D "windows_x86_64_gnu" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b= 1a78" + +[[package]] +name =3D "windows_x86_64_gnullvm" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51= ed0d" + +[[package]] +name =3D "windows_x86_64_msvc" +version =3D "0.52.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959= f9ec" + +[[package]] +name =3D "wit-bindgen" +version =3D "0.46.0" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7= fe59" + +[[package]] +name =3D "writeable" +version =3D "0.6.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768= a4c4" + +[[package]] +name =3D "yoke" +version =3D "0.8.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66= f9ca" +dependencies =3D [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name =3D "yoke-derive" +version =3D "0.8.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1= 858e" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name =3D "zerocopy" +version =3D "0.8.48" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd= 68e9" +dependencies =3D [ + "zerocopy-derive", +] + +[[package]] +name =3D "zerocopy-derive" +version =3D "0.8.48" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203= bad4" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name =3D "zerofrom" +version =3D "0.1.7" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04= c4df" +dependencies =3D [ + "zerofrom-derive", +] + +[[package]] +name =3D "zerofrom-derive" +version =3D "0.1.7" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade6= 84a1" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name =3D "zeroize" +version =3D "1.8.2" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff= 88d0" + +[[package]] +name =3D "zerotrie" +version =3D "0.2.4" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc= 20bf" +dependencies =3D [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name =3D "zerovec" +version =3D "0.11.6" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7= b239" +dependencies =3D [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name =3D "zerovec-derive" +version =3D "0.11.3" +source =3D "registry+https://github.com/rust-lang/crates.io-index" +checksum =3D "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c4= 0555" +dependencies =3D [ + "proc-macro2", + "quote", + "syn", +] diff --git a/scripts/kconfirm/Cargo.toml b/scripts/kconfirm/Cargo.toml new file mode 100644 index 000000000000..afde3813a673 --- /dev/null +++ b/scripts/kconfirm/Cargo.toml @@ -0,0 +1,21 @@ +[workspace] +members =3D ["kconfirm-lib", "kconfirm-linux"] +resolver =3D "3" + +[workspace.package] +license =3D "GPL-2.0-only" +description =3D "A static analysis tool for Kconfig" +keywords =3D ["kconfig", "static", "analysis", "detect"] +categories =3D ["development-tools", "config", "command-line-utilities"] +exclude =3D ["assets/"] +version =3D "0.7.0" +edition =3D "2024" +rust-version =3D "1.85.0" + +[workspace.dependencies] +nom-kconfig =3D "0.10" + +log =3D { version =3D "0.4", default-features =3D false } +env_logger =3D { version =3D "0.11", default-features =3D false } + +clap =3D { version =3D "4.6", default-features =3D false, features =3D ["s= td", "derive"] } diff --git a/scripts/kconfirm/Makefile b/scripts/kconfirm/Makefile new file mode 100644 index 000000000000..6aa8dbe6f885 --- /dev/null +++ b/scripts/kconfirm/Makefile @@ -0,0 +1,28 @@ +# SPDX-License-Identifier: GPL-2.0 +# kconfirm makefile + +TARGET :=3D kconfirm + +HAS_CARGO :=3D $(shell command -v cargo 2> /dev/null) + +# Extra arguments forwarded to kconfirm. +# Example: make kconfirm KCONFIRM_ARGS=3D"--enable dead_links" +KCONFIRM_ARGS ?=3D + +PHONY +=3D all +all: $(TARGET) + +$(TARGET): +ifdef HAS_CARGO + @cargo run --release -p kconfirm-linux -- --linux-path ../../ $(KCONFIRM_= ARGS) +else + @echo "Error: Cargo not found. Please install Rust and Cargo to build kco= nfirm." + @false +endif + +clean: +ifdef HAS_CARGO + @cargo clean > /dev/null 2>&1 +else + @: +endif diff --git a/scripts/kconfirm/kconfirm-lib/Cargo.toml b/scripts/kconfirm/kc= onfirm-lib/Cargo.toml new file mode 100644 index 000000000000..4a5274e76665 --- /dev/null +++ b/scripts/kconfirm/kconfirm-lib/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name =3D "kconfirm-lib" +version =3D "0.7.0" +edition =3D "2024" +rust-version.workspace =3D true + +[dependencies] +nom-kconfig =3D { workspace =3D true } +reqwest =3D { version =3D "0.13", default-features =3D false, features = =3D ["blocking", "rustls"] } +regex =3D { version =3D "1.12", default-features =3D false } +log =3D { workspace =3D true } +env_logger =3D { workspace =3D true } + +[features] +default =3D [] +coreboot =3D ["nom-kconfig/coreboot"] diff --git a/scripts/kconfirm/kconfirm-lib/src/analyze.rs b/scripts/kconfir= m/kconfirm-lib/src/analyze.rs new file mode 100644 index 000000000000..d647d1d5537b --- /dev/null +++ b/scripts/kconfirm/kconfirm-lib/src/analyze.rs @@ -0,0 +1,593 @@ +// SPDX-License-Identifier: GPL-2.0-only + +use crate::AnalysisArgs; +use crate::Check; +use crate::SymbolTable; +use crate::dead_links::{self, LinkStatus, check_link}; +use crate::output::{Finding, Severity}; +use crate::symbol_table::ChoiceData; + +use log::{debug, warn}; +use nom_kconfig::attribute::DefaultAttribute; +use nom_kconfig::attribute::Expression; +use nom_kconfig::attribute::Select; +use nom_kconfig::attribute::r#type::Type; +use nom_kconfig::entry::Choice; +use nom_kconfig::entry::Config; +use nom_kconfig::entry::If; +use nom_kconfig::entry::Menu; +use nom_kconfig::entry::Source; +use nom_kconfig::{ + Attribute::*, + Entry::{self}, +}; +use std::collections::HashSet; +use std::option::Option; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +enum FunctionalAttributes { + // only tracking the attributes that affect the semantics, e.g. not he= lp texts + Dependencies, + Selects, + Implies, + Ranges, + Defaults, +} + +struct AttributeGroupingChecker { + current_group: Option, + finished_groups: HashSet, +} + +impl AttributeGroupingChecker { + fn new() -> Self { + Self { + current_group: None, + finished_groups: HashSet::new(), + } + } + + // doesn't modify `findings` if the style check is disabled + fn check( + &mut self, + group: FunctionalAttributes, + args: &AnalysisArgs, + findings: &mut Vec, + symbol: &str, + message: String, + ) { + if !args.is_enabled(Check::Style) { + return; + } + + match self.current_group { + // still contiguous + Some(current) if current =3D=3D group =3D> {} + + // start of group + None =3D> { + self.current_group =3D Some(group); + } + + Some(current) =3D> { + // the previous group finished + self.finished_groups.insert(current); + + // we've already finished this group, it's ungrouped + if self.finished_groups.contains(&group) { + findings.push(Finding { + severity: Severity::Style, + check: "ungrouped_attribute", + symbol: Some(symbol.to_string()), + message, + }); + } + + // switch to the new group + self.current_group =3D Some(group); + } + } + } +} + +struct DeadLinkChecker { + visited_links: HashSet, +} + +impl DeadLinkChecker { + fn new() -> Self { + Self { + visited_links: HashSet::new(), + } + } + + fn check_text( + &mut self, + text: &str, + args: &AnalysisArgs, + findings: &mut Vec, + symbol: Option<&str>, + context: &str, + ) { + if !args.is_enabled(Check::DeadLinks) { + return; + } + + let links =3D dead_links::find_links(text); + + if links.is_empty() { + return; + } + + debug!("{} links are: {:?}", context, links); + + for link in links { + // avoid rechecking identical links + if !self.visited_links.insert(link.clone()) { + continue; + } + + let status =3D check_link(&link); + if status !=3D LinkStatus::Ok && status !=3D LinkStatus::Proba= blyBlocked { + findings.push(Finding { + severity: Severity::Warning, + check: "dead_link", + symbol: symbol.map(|s| s.to_string()), + message: format!( + "{} contains link {} with status {:?}", + context, link, status + ), + }); + } + } + } +} + +#[derive(Clone)] +pub struct Context { + pub arch: Option, + pub definition_condition: Vec, + pub visibility: Vec, + pub dependencies: Vec, + pub in_choice: bool, +} + +impl Context { + fn with_arch(arch: Option) -> Context { + Context { + arch, + definition_condition: vec![], + visibility: vec![], + dependencies: vec![], + in_choice: false, + } + } + + fn child(&self) -> Self { + self.clone() + } + + fn with_dep(mut self, dep: Expression) -> Self { + self.dependencies.push(dep); + self + } + + fn with_visibility(mut self, cond: Expression) -> Self { + self.visibility.push(cond); + self + } + + fn with_definition(mut self, cond: Expression) -> Self { + self.definition_condition.push(cond); + self + } + + fn in_choice(mut self) -> Self { + self.in_choice =3D true; + self + } +} + +fn recurse_entries( + args: &AnalysisArgs, + symtab: &mut SymbolTable, + entries: Vec, + ctx: Context, + findings: &mut Vec, +) { + for entry in entries { + process_entry(args, symtab, entry, ctx.clone(), findings); + } +} + +pub fn analyze( + args: &AnalysisArgs, + symtab: &mut SymbolTable, + arch: Option, + entries: Vec, +) -> Vec { + let mut findings =3D Vec::new(); + + let ctx =3D Context::with_arch(arch); + + recurse_entries(args, symtab, entries, ctx, &mut findings); + + findings +} + +fn handle_config( + args: &AnalysisArgs, + symtab: &mut SymbolTable, + entry: Config, + ctx: &Context, + findings: &mut Vec, +) { + let config_symbol =3D entry.symbol; + debug!( + "starting to process config option `config` type: {}", + config_symbol + ); + + let mut child_ctx =3D ctx.child(); + + let mut config_type =3D None; + let mut kconfig_dependencies =3D Vec::new(); + let mut kconfig_selects: Vec