Matias Elo(matiaselo) replied on github web page: m4/odp_libconfig.m4 line 28 @@ -0,0 +1,36 @@ +# ODP_LIBCONFIG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# ----------------------------------------------------- +AC_DEFUN([ODP_LIBCONFIG], +[dnl +########################################################################## +# Set optional libconfig path +########################################################################## +AC_ARG_WITH([libconfig-path], +[AS_HELP_STRING([--with-libconfig-path=DIR], +[path to libconfig libs and headers (use system path if not provided)])], +[export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$withval/lib/pkgconfig"], +) + +########################################################################## +# Check for libconfig availability +########################################################################## +odp_libconfig_ok=yes +PKG_CHECK_MODULES([LIBCONFIG], [libconfig], [], + [odp_libconfig_ok=no]) + +if test "x$odp_libconfig_ok" = "xyes" ; then +########################################################################## +# Create a header file odp_libconfig_config.h which containins null +# terminated hex dump of odp-linux.conf +########################################################################## + [pushd ${srcdir}/config + xxd -i odp-linux.conf | sed 's/\([0-9a-f]\)$/\0, 0x00/' > \ + ../platform/${with_platform}/include/odp_libconfig_config.h
Comment: Thanks! I'll try this. > Dmitry Eremin-Solenikov(lumag) wrote: > Typical idiom is > ```make > include/odp_libconfig_config.h: $(top_srcdir)/config/odp-linux.conf > $(top_builddir)/config.status > cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ > ``` > > I'd suggest you to try building with separate builddir, it should help you to > catch build/src dir differences. >> Dmitry Eremin-Solenikov(lumag) wrote: >> Makefile part: >> ```make >> include/odp_libconfig_config.h: $(top_srcdir)/config/odp-linux.conf >> $(top_srcdir)/config.status >> cd $(top_builddir) && $(SHELL) ./config.status odp_libconfig_config.h >> ``` >> >> Also it might be nice to use >> platform/${with_platform}/odp_libconfig_config.h as tag name, so that tags >> for different platforms won't collide. >>> Dmitry Eremin-Solenikov(lumag) wrote: >>> I'd say >>> ```m4 >>> AC_CONFIG_COMMANDS([odp_libconfig_config.h], >>> [ mkdir -p platform/${with_platform}/include >>> xxd -i ${srcdir}/platform/${with_platform}/odp-linux.conf | sed >>> 's/\([0-9a-f]\)$/\0, 0x00/' > \ >>> platform/${with_platform}/include/odp_libconfig_config.h]) >>> ``` >>>> Matias Elo(matiaselo) wrote: >>>> I need some assistance with this. What I have now is: >>>> >>>> ``` >>>> AC_CONFIG_COMMANDS([odp_libconfig_config.h], >>>> [ >>>> pushd ${ac_abs_top_builddir}/config >>>> xxd -i odp-linux.conf | sed 's/\([0-9a-f]\)$/\0, 0x00/' > \ >>>> ../platform/${with_platform}/include/odp_libconfig_config.h >>>> popd], >>>> [with_platform=$with_platform] >>>> ) >>>> ``` >>>> >>>> And in .../linux-generic/Makefile.am: >>>> ``` >>>> include/odp_libconfig_config.h: $(top_srcdir)/config/odp-linux.conf >>>> $(top_srcdir)/config.status >>>> ./$(top_srcdir)/config.status odp_libconfig_config.h >>>> ``` >>>> This seems to work as it detects changes in odp-linux.conf, but I'm not >>>> sure if this is the proper way to do this. >>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>> Builddir is current directory. >>>>>> Matias Elo(matiaselo) wrote: >>>>>> builddir is not defined here. Any ideas? >>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>> Consider somebody changing conf file and reruning make. Make should >>>>>>> detect that header should be regenerated and invoke ./config.status >>>>>>> with proper tag to regenrate header in question. >>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>> > Also there should be a dependency line in respective Makefile.am to >>>>>>>> > regenerate the header. >>>>>>>> >>>>>>>> Can you elaborate this a bit? >>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>> Yeah, I actually tried merging the files but it ended up being >>>>>>>>> painful since libconfig doesn't provide good functions for doing >>>>>>>>> that. So I went with the "safe" solution. I'll try if I can at least >>>>>>>>> get rid of the extra pointers. >>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>> Merging is not required in the first pass, but it might be a good >>>>>>>>>> thing in future. >>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>> OK >>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>> OK >>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>> OK >>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>> Last line should go to `nodist_noinst_HEADERS`, so it does not >>>>>>>>>>>>>> get included into distribution. >>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>> Just drop this setting/check. `PKG_CHECK_MODULES` will print >>>>>>>>>>>>>>> usefull message instead. >>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>> Should ODP install this header file somewhere? >>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>> It might be usefull to have "default" config file provided at >>>>>>>>>>>>>>>>> ${sysconfdir}. >>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>> Please use instead: >>>>>>>>>>>>>>>>>> `Require.private: libconfig` >>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>> Generated file should go to builddir, not to srcdir. >>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>> Please use `AC_CONFIG_COMMANDS` to regenerate this header. >>>>>>>>>>>>>>>>>>>> Also there should be a dependency line in respective >>>>>>>>>>>>>>>>>>>> Makefile.am to regenerate the header. >>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>> Can we please have just two config structures here >>>>>>>>>>>>>>>>>>>>> (default and running)? I wonder, if we can actually merge >>>>>>>>>>>>>>>>>>>>> default with provided configurations into a single config >>>>>>>>>>>>>>>>>>>>> structure? >>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>> No need to `AC_SUBST` them, as you are using >>>>>>>>>>>>>>>>>>>>>> PKG_CHECK_MODULES. >>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>> No, this is not necessary. One can override this >>>>>>>>>>>>>>>>>>>>>>> setting using environment. >>>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>>> As the last resort you can load it and then call >>>>>>>>>>>>>>>>>>>>>>>> `config_file_write()` from the helper app. I'd prefer >>>>>>>>>>>>>>>>>>>>>>>> instead if callers could provide default values fro >>>>>>>>>>>>>>>>>>>>>>>> options that they require. >>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>> `config_t libconfig`can always be initialized, but in >>>>>>>>>>>>>>>>>>>>>>>>> case `ODP_CONF_FILE` is not given, no configuration >>>>>>>>>>>>>>>>>>>>>>>>> file is read. I'm not sure if all libconfig functions >>>>>>>>>>>>>>>>>>>>>>>>> handle this properly without crashing and I'm playing >>>>>>>>>>>>>>>>>>>>>>>>> it safe here. Maybe it's cleaner if I replace this >>>>>>>>>>>>>>>>>>>>>>>>> with: >>>>>>>>>>>>>>>>>>>>>>>>> ``` >>>>>>>>>>>>>>>>>>>>>>>>> config_t *libconfig; >>>>>>>>>>>>>>>>>>>>>>>>> config_t libconfig_structure; >>>>>>>>>>>>>>>>>>>>>>>>> ``` >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Actually, this gave me an idea. It would probably >>>>>>>>>>>>>>>>>>>>>>>>> make sense to save the `odp-linux.conf` contents to a >>>>>>>>>>>>>>>>>>>>>>>>> C file during configure. This way we always have a >>>>>>>>>>>>>>>>>>>>>>>>> valid default configuration and the default options >>>>>>>>>>>>>>>>>>>>>>>>> have to be saved only to one location. Any >>>>>>>>>>>>>>>>>>>>>>>>> suggestions what would be a good method to save the >>>>>>>>>>>>>>>>>>>>>>>>> file during configure? >>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>> `ODP_LOG()` will just print if not overridded. The >>>>>>>>>>>>>>>>>>>>>>>>>> point is ODP shouldn't be using `printf()` directly. >>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>> I would prefer changing OFP to match our naming >>>>>>>>>>>>>>>>>>>>>>>>>>> convention. We use 'config' in several APIs, >>>>>>>>>>>>>>>>>>>>>>>>>>> whereas 'conf' is used only internally. >>>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>> This is just an internal helper to avoid having to >>>>>>>>>>>>>>>>>>>>>>>>>>>> reference to odp_global_data when calling >>>>>>>>>>>>>>>>>>>>>>>>>>>> `config_lookup()`. It could actually be removed >>>>>>>>>>>>>>>>>>>>>>>>>>>> altogether. >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> Since we are using libconfig only internally, >>>>>>>>>>>>>>>>>>>>>>>>>>>> what's the benefit of wrapping its functions >>>>>>>>>>>>>>>>>>>>>>>>>>>> (other than avoiding hard dependency)? We are not >>>>>>>>>>>>>>>>>>>>>>>>>>>> wrapping e.g. openssl functions. Adding wrappers >>>>>>>>>>>>>>>>>>>>>>>>>>>> for the aforementioned `_odp_config_lookup_int()` >>>>>>>>>>>>>>>>>>>>>>>>>>>> and `_odp_config_lookup_string()` would be simple, >>>>>>>>>>>>>>>>>>>>>>>>>>>> but for example` config_setting_lookup()`, which >>>>>>>>>>>>>>>>>>>>>>>>>>>> I'm using to find dpdk driver specific options, >>>>>>>>>>>>>>>>>>>>>>>>>>>> uses libconfig data types which would also have to >>>>>>>>>>>>>>>>>>>>>>>>>>>> be wrapped. >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>> As we already require for example autoconf, >>>>>>>>>>>>>>>>>>>>>>>>>>>>> libtool, and pkg-config, adding libconfig >>>>>>>>>>>>>>>>>>>>>>>>>>>>> dependency shouldn't be a big issue. However, if >>>>>>>>>>>>>>>>>>>>>>>>>>>>> this causes problems we can remove the hard >>>>>>>>>>>>>>>>>>>>>>>>>>>>> dependency by wrapping all used libconfig >>>>>>>>>>>>>>>>>>>>>>>>>>>>> functions with dummy implementations. I would >>>>>>>>>>>>>>>>>>>>>>>>>>>>> prefer not doing this if not explicitly required. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Not that familiar with autoconf, so I pretty >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> much copy-pasted the `odp_openssl.m4` to get >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this working. I'll take a look at >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `PKG_CHECK_MODULES `. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> OK, will fix. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'm usually using multiple different NICs, so >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I find this information useful for logging >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test runs. Perhaps use ODP_PRINT() here? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Will fix. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Just use `PKG_CHECK_MODULES` here rather >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> than inventing variables and checks. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Ideally we do not need this field. We >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should always return valid setting. Maybe >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> by allowing ODP modules to return default >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> value. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'd prefer not to export config internals >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> here, but rather have >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `_odp_config_lookup_int()`, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `_odp_config_lookup_string()`, etc. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Last line should not be necessary >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> bogdanPricope wrote >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> OFP is using a similar naming for the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> environment variable but with 'CONF' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> instead of 'CONFIG' ('OFP_CONF_FILE'). >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Will it makes sense to change the naming >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to avoid confusions: either >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 'ODP_CONF_FILE' in ODP or >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 'OFP_CONFIG_FILE' in OFP? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Do we really want to print this >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> unconditionally? In any event shouldn't >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this be `ODP_LOG()` here rather than >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `printf()`? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> According to the [libconfig >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> changelog](https://github.com/hyperrealm/libconfig/blob/master/ChangeLog) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> there are versions pre-1.0 (e.g., >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 0.9) which would fail this test. This >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> needs to be reversed so that you use >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the newer form for v1.5 and higher >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> levels: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ``` >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #if (LIBCONFIG_VER_MAJOR > 1 || >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (LIBCONFIG_VER_MAJOR == 1 && >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LIBCONFIG_VER_MINOR >= 5)) ... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ``` >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Does this have to be a hard >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> dependency? Can we have this feature >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be omitted (hardcoded defaults are >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> used) if libconfig is not available? https://github.com/Linaro/odp/pull/499#discussion_r171495614 updated_at 2018-03-01 09:01:05