On 12 May 2016 at 12:54, Savolainen, Petri (Nokia - FI/Espoo) < petri.savolai...@nokia.com> wrote:
> Those that add new definitions into helper/linux.h and depend on each > other, so that the entire proposed spec is easy to see today and later on > from git history. Since those are new calls, it should be easy to introduce > those in their final form. Patches (e.g. 1 and 12) should not expose > intermediate, unnecessary steps done during development of a new feature, > but the new feature in its final form. > > > > At least 1 and 12, since those introduce and modify the same function. > Maybe 11 if odph_merge_getopt_options() is always needed with > odph_parse_options(). > Is merge function defined for the user or is it internal to the helper? > Does not make sense to me: as explained in the cover letter, patch 1 to 10 is introducing the ability to parse options in helpers. This is applied to the tests (patch 6 to 10) as none of the tests have their own options (as of today) Patch 11... enables the caller helper to have its own options. This is then applied to exemple/perf... which already had their own option, and hence could not be handled as the tests were. > > > Maybe 4 and 5, because the first introduces types that the other depends > on. > That could be done if you wish > > > Maybe 5 and 12 (at least 12 should be before 5), if odph_parse_options() > must be always called before odph_odpthreads_create(). > same problem as with patch 1 and 12: Patch 1 to 10 is one group. 11 to 37 another. I hoped the cover-letter made that clear. Christophe. > > > > > > > -Petri > > > > > > *From:* lng-odp [mailto:lng-odp-boun...@lists.linaro.org] *On Behalf Of > *Christophe > Milard > *Sent:* Thursday, May 12, 2016 12:05 PM > *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com> > *Cc:* lng-odp@lists.linaro.org > *Subject:* Re: [lng-odp] [PATCHv6 12/38] helper: parsing the complete set > of options > > > > Not sure which patches you want to squash here: "helper: adding a function > to merge getopt parameters" and "parsing the complete set of options" ? > > Aren't these 2 different steps? They were at least tested separately... > > Or did I misunderstood? > > > > Christophe. > > > > On 12 May 2016 at 10:21, Savolainen, Petri (Nokia - FI/Espoo) < > petri.savolai...@nokia.com> wrote: > > It would be really good to squash these patches introducing (and then > modifying the previously introduced) new helper function prototypes into a > single patch. This way it's hard to see the complete picture what functions > were actually added into helper/linux.h > > > -Petri > > > > > -----Original Message----- > > From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of > > Christophe Milard > > Sent: Wednesday, May 11, 2016 7:42 PM > > To: brian.bro...@linaro.org; mike.hol...@linaro.org; lng- > > o...@lists.linaro.org > > Subject: [lng-odp] [PATCHv6 12/38] helper: parsing the complete set of > > options > > > > The odph_parse_options() function is given the ability to receive > > getopt command line description parameter from it caller, hence allowing > > the caller to have some command line parameter(s). > > The caller shall first call odph_parse_options() with its own parameter > > description as parameter. > > odph_parse_options() is then checking the complete set of options, > > issuing error message for unknown options (those being neither a caller's > > valid command line option or a helper valid command line option), > > and collecting the sementic of helper options. > > Then the caller shall parse the sementic of its own options, > > with the opterr variable set to zero (hence ignoring helper options). > > > > Signed-off-by: Christophe Milard <christophe.mil...@linaro.org> > > --- > > helper/include/odp/helper/linux.h | 16 +++++++++++++++- > > helper/linux.c | 24 +++++++++++++++++++----- > > helper/test/odpthreads.c | 2 +- > > test/validation/common/odp_cunit_common.c | 2 +- > > 4 files changed, 36 insertions(+), 8 deletions(-) > > > > diff --git a/helper/include/odp/helper/linux.h > > b/helper/include/odp/helper/linux.h > > index 9767af4..71c8027 100644 > > --- a/helper/include/odp/helper/linux.h > > +++ b/helper/include/odp/helper/linux.h > > @@ -25,6 +25,7 @@ extern "C" { > > #include <odp_api.h> > > > > #include <pthread.h> > > +#include <getopt.h> > > #include <sys/types.h> > > > > /** Thread parameter for Linux pthreads and processes */ > > @@ -241,15 +242,28 @@ int odph_merge_getopt_options(const char > > *shortopts1, > > * Parse linux helper options > > * > > * Parse the command line options. Pick up options meant for the helper > > itself. > > + * If the caller is also having a set of option to parse, it should > > include > > + * their description here (shortopts desribes the short options and > > longopts > > + * describes the long options, as for getopt_long()). > > + * This function will issue errors on unknown arguments, so callers > > failing > > + * to pass their own command line options description here will see > their > > + * options rejected. > > + * (the caller wants to set opterr to zero when parsing its own stuff > > + * with getopts to avoid reacting on helper's options). > > * > > * @param argc argument count > > * @param argv argument values > > + * @param caller_shortopts caller's set of short options (string). or > > NULL. > > + * @param caller_longopts caller's set of long options (getopt option > > array). > > + * or NULL. > > * > > * @return On success: 0 > > * On failure: -1 (failure occurs only if a value passed for a > > helper > > * option is invalid. callers cannot have own > options) > > */ > > -int odph_parse_options(int argc, char *argv[]); > > +int odph_parse_options(int argc, char *argv[], > > + const char *caller_shortopts, > > + const struct option *caller_longopts); > > #ifdef __cplusplus > > } > > #endif > > diff --git a/helper/linux.c b/helper/linux.c > > index d1b7825..5fc09a1 100644 > > --- a/helper/linux.c > > +++ b/helper/linux.c > > @@ -16,7 +16,6 @@ > > #include <stdlib.h> > > #include <string.h> > > #include <stdio.h> > > -#include <getopt.h> > > > > #include <odp_api.h> > > #include <odp/helper/linux.h> > > @@ -576,27 +575,39 @@ int odph_merge_getopt_options(const char > > *shortopts1, > > /* > > * Parse command line options to extract options affecting helpers. > > */ > > -int odph_parse_options(int argc, char *argv[]) > > +int odph_parse_options(int argc, char *argv[], > > + const char *caller_shortopts, > > + const struct option *caller_longopts) > > { > > int c; > > + char *shortopts; > > + struct option *longopts; > > > > - static struct option long_options[] = { > > + static struct option helper_long_options[] = { > > /* These options set a flag. */ > > {"odph_proc", no_argument, &helper_options.proc, 1}, > > {"odph_thread", no_argument, &helper_options.thrd, 1}, > > {0, 0, 0, 0} > > }; > > > > + static char *helper_short_options = ""; > > + > > /* defaults: */ > > helper_options.proc = false; > > helper_options.thrd = false; > > > > + /* merge caller's command line options descriptions with helper's: > > */ > > + if (odph_merge_getopt_options(caller_shortopts, > > helper_short_options, > > + caller_longopts, helper_long_options, > > + &shortopts, &longopts) < 0) > > + return -1; > > + > > while (1) { > > /* getopt_long stores the option index here. */ > > int option_index = 0; > > > > - c = getopt_long (argc, argv, "", > > - long_options, &option_index); > > + c = getopt_long (argc, argv, > > + shortopts, longopts, &option_index); > > > > /* Detect the end of the options. */ > > if (c == -1) > > @@ -605,5 +616,8 @@ int odph_parse_options(int argc, char *argv[]) > > > > optind = 0; /* caller expects this to be zero if it parses too*/ > > > > + free(shortopts); > > + free(longopts); > > + > > return 0; > > } > > diff --git a/helper/test/odpthreads.c b/helper/test/odpthreads.c > > index 369da62..bba4fa5 100644 > > --- a/helper/test/odpthreads.c > > +++ b/helper/test/odpthreads.c > > @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) > > char cpumaskstr[ODP_CPUMASK_STR_SIZE]; > > > > /* let helper collect its own arguments (e.g. --odph_proc) */ > > - odph_parse_options(argc, argv); > > + odph_parse_options(argc, argv, NULL, NULL); > > > > if (odp_init_global(&instance, NULL, NULL)) { > > LOG_ERR("Error: ODP global init failed.\n"); > > diff --git a/test/validation/common/odp_cunit_common.c > > b/test/validation/common/odp_cunit_common.c > > index be23c6b..7df9aa6 100644 > > --- a/test/validation/common/odp_cunit_common.c > > +++ b/test/validation/common/odp_cunit_common.c > > @@ -354,5 +354,5 @@ int odp_cunit_register(odp_suiteinfo_t testsuites[]) > > */ > > int odp_cunit_parse_options(int argc, char *argv[]) > > { > > - return odph_parse_options(argc, argv); > > + return odph_parse_options(argc, argv, NULL, NULL); > > } > > -- > > 2.5.0 > > > > > _______________________________________________ > > lng-odp mailing list > > lng-odp@lists.linaro.org > > https://lists.linaro.org/mailman/listinfo/lng-odp > > >
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp