Installing headers from upstream i2c-tools makes it impossible to build the busybox version due to redefined symbols. This is caused by the fact that linux/i2c-dev.h from i2c-tools overwrites the one from linux uapi and defines symbols already defined by linux' linux/i2c.h.
Fix it by including linux/i2c.h and defining the i2c access routines only if a well known symbol provided by linux uapi is not defined in linux/i2c-dev.h. Tested by building on systems with and without i2c-tools headers. Signed-off-by: Bartosz Golaszewski <bartekg...@gmail.com> --- miscutils/i2c_tools.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index 03a09d519..9cc55eb27 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c @@ -62,7 +62,6 @@ #include "libbb.h" -#include <linux/i2c.h> #include <linux/i2c-dev.h> #define I2CDUMP_NUM_REGS 256 @@ -79,6 +78,19 @@ static ALWAYS_INLINE void *itoptr(int i) return (void*)(intptr_t)i; } +/* + * Only include linux/i2c.h if the symbols provided by it are not already + * defined in linux/i2c-dev.h. This - while not correct - happens if we + * install the headers provided by upstream i2c-tools and is the default on + * some distributions (Debian, OpenSUSE). linux/i2c-dev.h from i2c-tools + * overwrites the linux uapi header and redefines a bunch of symbols, as + * well as already provides the i2c access functions we redefine below. + * + * Check a well known symbol and include linux/i2c.h conditionally. + */ +#ifndef I2C_FUNC_I2C +#include <linux/i2c.h> + static int32_t i2c_smbus_access(int fd, char read_write, uint8_t cmd, int size, union i2c_smbus_data *data) { @@ -240,6 +252,8 @@ static int32_t i2c_smbus_write_quick(int fd, uint8_t val) } #endif /* ENABLE_I2CDETECT */ +#endif /* I2C_FUNC_I2C */ + static int i2c_bus_lookup(const char *bus_str) { return xstrtou_range(bus_str, 10, 0, 0xfffff); -- 2.13.2 _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox