Matias Elo(matiaselo) replied on github web page: platform/linux-generic/Makefile.am line 14 @@ -94,6 +96,8 @@ noinst_HEADERS = \ include/odp_forward_typedefs_internal.h \ include/odp_internal.h \ include/odp_ipsec_internal.h \ + include/odp_libconfig_config.h \ + include/odp_libconfig_internal.h \
Comment: I assume you meant odp_libconfig_config.h Anyway, doing this breaks distcheck build: ``` CC odp_libconfig.lo ../../../../platform/linux-generic/odp_libconfig.c:17:34: fatal error: odp_libconfig_config.h: No such file or directory compilation terminated. Makefile:1120: recipe for target 'odp_libconfig.lo' failed make[2]: *** [odp_libconfig.lo] Error 1 make[2]: Leaving directory '/home/nnn/dev/odp.git/opendataplane-1.17.0.0/_build/sub/platform/linux-generic' ``` With both headers in noinst_HEADERS distcheck completes but complains at the end: ``` ERROR: files left in build directory after distclean: ./platform/linux-generic/include/odp_libconfig_config.h Makefile:793: recipe for target 'distcleancheck' failed make[1]: *** [distcleancheck] Error 1 make[1]: Leaving directory '/home/nnn/dev/odp.git/opendataplane-1.17.0.0/_build/sub' Makefile:719: recipe for target 'distcheck' failed make: *** [distcheck] Error 1 ``` Any pointers? > Matias Elo(matiaselo) wrote: > A good point. Would this be OK? > > .../platform/Makefile.inc > ``` > configdir = $(sysconfdir)/odp > config_DATA = $(top_srcdir)/config/odp-$(with_platform).conf > > ``` >> Matias Elo(matiaselo) wrote: >> 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_r171621062 updated_at 2018-03-01 16:48:09