/* Generated by ./xlat/gen.sh from ./xlat/evdev_prop.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(INPUT_PROP_POINTER) || (defined(HAVE_DECL_INPUT_PROP_POINTER) && HAVE_DECL_INPUT_PROP_POINTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_POINTER) == (0), "INPUT_PROP_POINTER != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_POINTER 0
#endif
#if defined(INPUT_PROP_DIRECT) || (defined(HAVE_DECL_INPUT_PROP_DIRECT) && HAVE_DECL_INPUT_PROP_DIRECT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_DIRECT) == (1), "INPUT_PROP_DIRECT != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_DIRECT 1
#endif
#if defined(INPUT_PROP_BUTTONPAD) || (defined(HAVE_DECL_INPUT_PROP_BUTTONPAD) && HAVE_DECL_INPUT_PROP_BUTTONPAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_BUTTONPAD) == (2), "INPUT_PROP_BUTTONPAD != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_BUTTONPAD 2
#endif
#if defined(INPUT_PROP_SEMI_MT) || (defined(HAVE_DECL_INPUT_PROP_SEMI_MT) && HAVE_DECL_INPUT_PROP_SEMI_MT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_SEMI_MT) == (3), "INPUT_PROP_SEMI_MT != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_SEMI_MT 3
#endif
#if defined(INPUT_PROP_TOPBUTTONPAD) || (defined(HAVE_DECL_INPUT_PROP_TOPBUTTONPAD) && HAVE_DECL_INPUT_PROP_TOPBUTTONPAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_TOPBUTTONPAD) == (4), "INPUT_PROP_TOPBUTTONPAD != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_TOPBUTTONPAD 4
#endif
#if defined(INPUT_PROP_POINTING_STICK) || (defined(HAVE_DECL_INPUT_PROP_POINTING_STICK) && HAVE_DECL_INPUT_PROP_POINTING_STICK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_POINTING_STICK) == (5), "INPUT_PROP_POINTING_STICK != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_POINTING_STICK 5
#endif
#if defined(INPUT_PROP_ACCELEROMETER) || (defined(HAVE_DECL_INPUT_PROP_ACCELEROMETER) && HAVE_DECL_INPUT_PROP_ACCELEROMETER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((INPUT_PROP_ACCELEROMETER) == (6), "INPUT_PROP_ACCELEROMETER != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define INPUT_PROP_ACCELEROMETER 6
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat evdev_prop in mpers mode

# else

static
const struct xlat evdev_prop[] = {
 [INPUT_PROP_POINTER] = XLAT(INPUT_PROP_POINTER),
 [INPUT_PROP_DIRECT] = XLAT(INPUT_PROP_DIRECT),
 [INPUT_PROP_BUTTONPAD] = XLAT(INPUT_PROP_BUTTONPAD),
 [INPUT_PROP_SEMI_MT] = XLAT(INPUT_PROP_SEMI_MT),
 [INPUT_PROP_TOPBUTTONPAD] = XLAT(INPUT_PROP_TOPBUTTONPAD),
 [INPUT_PROP_POINTING_STICK] = XLAT(INPUT_PROP_POINTING_STICK),
 [INPUT_PROP_ACCELEROMETER] = XLAT(INPUT_PROP_ACCELEROMETER),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
