With the most recent gperf release – 3.1, released on 5th January 2017 (almost 8 years after previous 3.0.4) – the “standard” kconfig-frontends build procedure no longer works. The type of length argument used in generated functions was changed from unsigned int
to size_t
, which causes the build to fail with following error:
CC libkconfig_parser_la-yconf.lo In file included from yconf.c:234:0: hconf.gperf:141:1: error: conflicting types for 'kconf_id_lookup' hconf.gperf:12:31: note: previous declaration of 'kconf_id_lookup' was here static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len); ^~~~~~~~~~~~~~~ make[3]: *** [Makefile:456: libkconfig_parser_la-yconf.lo] Error 1 make[2]: *** [Makefile:350: all] Error 2 make[1]: *** [Makefile:334: all-recursive] Error 1 make: *** [Makefile:385: all-recursive] Error 1
Detailed description of the build procedure in Building kconfig-frontends in Linux was updated with an additional step, which fixes this problem with a patch and regeneration of configure & build scripts.
This extra step is required only if your system already has gperf 3.1 or newer. This currently limits the number of affected people to the handful of bleeding-edge fanatics, but that number is going to increase for sure. Let’s hope that the fix will be implemented upstream either in kconfig-frontends or in Linux kernel (and ported to kconfig-frontends). Until then, the only solution is to either patch the package (as described in the updated article) or downgrade gperf to version 3.0.4 or older (which – depending on your system – may or may not be a viable workaround).