From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EFB64488E7; Wed, 8 Oct 2025 22:43:20 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7754E40653; Wed, 8 Oct 2025 22:43:00 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) by mails.dpdk.org (Postfix) with ESMTP id 86163402A8 for ; Wed, 8 Oct 2025 22:42:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1759956179; x=1791492179; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=EguIG9jlDorKPfkC4V78Od8t9bHszydRbAczBVDY/bc=; b=XDJL6w607MxAN2ebCCTovwZpdzXdqKYKdVE1MyS/pII4UglMTGFLME75 +R/6vAyiecz2GJ0STLKThphTI8OGeuuFP/pqj9bigA/oNipAbK+Na1bYU 8V0AphXPb06z/VMV90Rfvw5+lMRTwkshX5e4uB/2+H0qFmfwjKTNEHH9G WwZsvVLW656yQc9n26ct/S3ZZimZM/mwGWf0xAD+WVTcTcvI3QMrFq3CI UIhpxBsHhk2RxplSH3ILKfmd3T95v++SfkHgY+6blarxk1CnPSrCugc2G d4yRSbFC4UldsgxYuGqFEk38Nn6nyuLW1wA30k0bfSdbWuwsvwokqYILm g==; X-CSE-ConnectionGUID: KvUca2w9Qcy2zrzl+sT4mg== X-CSE-MsgGUID: IdcNWq/9TCmphp+ubeZHmA== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="62079226" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="62079226" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Oct 2025 13:42:58 -0700 X-CSE-ConnectionGUID: i5UCaArmSSKVfUChcMLyPA== X-CSE-MsgGUID: iN1PWeO2RRKMab0gfAkMiw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,214,1754982000"; d="scan'208";a="179790621" Received: from silpixa00401385.ir.intel.com ([10.20.224.226]) by orviesa010.jf.intel.com with ESMTP; 08 Oct 2025 13:42:57 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, Bruce Richardson Subject: [PATCH v10 04/21] argparse: allow user-override of help printing Date: Wed, 8 Oct 2025 21:42:27 +0100 Message-ID: <20251008204244.2288583-5-bruce.richardson@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251008204244.2288583-1-bruce.richardson@intel.com> References: <20250520164025.2055721-1-bruce.richardson@intel.com> <20251008204244.2288583-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When the arguments passed to argparse include -h/--help then usage information is automatically printed. Provide the capability for the user to supply their own help function for this. Signed-off-by: Bruce Richardson --- doc/guides/prog_guide/argparse_lib.rst | 16 ++++++++++++++++ doc/guides/rel_notes/release_25_11.rst | 7 +++++++ lib/argparse/rte_argparse.c | 5 ++++- lib/argparse/rte_argparse.h | 7 ++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/doc/guides/prog_guide/argparse_lib.rst b/doc/guides/prog_guide/argparse_lib.rst index 9f11714890..b309260d20 100644 --- a/doc/guides/prog_guide/argparse_lib.rst +++ b/doc/guides/prog_guide/argparse_lib.rst @@ -24,6 +24,8 @@ Features and Capabilities #. autosave: used for parsing known value types; #. callback: will invoke user callback to parse. +- Supports automatic help and usage information. + Usage Guide ----------- @@ -193,3 +195,17 @@ Then the user input could contain multiple ``--xyz`` arguments. The multiple times argument only support with optional argument and must be parsed by callback way. + +Help and Usage Information +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The argparse library supports automatic generation of help and usage information. +When the input arguments include ``-h`` or ``--help``, +it will print the usage information to standard output. +If the default help output is not what is wanted, +the user can provide a custom help printing function by setting the ``print_help`` field in the ``rte_argparse`` object. +(If this field is set to NULL, the default help printing function will be used.) + +If the custom help printing function wants to use the text produced by the default help function, +it can call the function ``rte_argparse_print_help()`` to get the help text printed to an output stream, +for example: stdout or stderr. diff --git a/doc/guides/rel_notes/release_25_11.rst b/doc/guides/rel_notes/release_25_11.rst index c3b94e1896..f73bab1227 100644 --- a/doc/guides/rel_notes/release_25_11.rst +++ b/doc/guides/rel_notes/release_25_11.rst @@ -76,6 +76,13 @@ New Features * Added multi-process per port. * Optimized code. +* **Allow overriding the automatic usage/help generation in argparse library.** + + The argparse library now supports overriding the automatic help text generation, + by allowing the user to provide a custom function to generate the output text. + The built-in help text function is available as a public function which can be reused by custom functions, + if so desired. + Removed Items ------------- diff --git a/lib/argparse/rte_argparse.c b/lib/argparse/rte_argparse.c index f0c2c33178..2b5da5f1db 100644 --- a/lib/argparse/rte_argparse.c +++ b/lib/argparse/rte_argparse.c @@ -821,7 +821,10 @@ rte_argparse_parse(const struct rte_argparse *obj, int argc, char **argv) goto error; if (show_help) { - rte_argparse_print_help(stdout, obj); + if (obj->print_help != NULL) + obj->print_help(obj); + else + rte_argparse_print_help(stdout, obj); exit(0); } diff --git a/lib/argparse/rte_argparse.h b/lib/argparse/rte_argparse.h index baf278f6b9..63b49ba220 100644 --- a/lib/argparse/rte_argparse.h +++ b/lib/argparse/rte_argparse.h @@ -160,8 +160,13 @@ struct rte_argparse { rte_arg_parser_t callback; /** Opaque which used to invoke callback. */ void *opaque; + /** + * Function pointer for printing usage when -h is passed. + * If this is NULL, default printing function will be used. + */ + void (*print_help)(const struct rte_argparse *obj); /** Reserved field used for future extension. */ - void *reserved[16]; + void *reserved[15]; /** Arguments configuration. Must ended with ARGPARSE_ARG_END(). */ struct rte_argparse_arg args[]; }; -- 2.48.1