#include "config.h"
#include "somestruct.h"

#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif

#include <stdio.h>

#define CHECK(t, m)                                                           \
  do {                                                                        \
    if (sizeof(t) != m) {                                                     \
      printf(#m ": expected %d, got %d (line %d)\n", (int)sizeof(t), (int)m,  \
             __LINE__);                                                       \
      result = 1;                                                             \
    }                                                                         \
  } while (0)

#define NODEF(m)                                                              \
  do {                                                                        \
    printf(#m ": not defined (line %d)\n", __LINE__);                         \
    result = 1;                                                               \
  } while (0)

int main()
{
  int result = 0;
  struct somestruct x;

/* void* */
#if !defined(HAVE_SIZEOF_DATA_PTR)
  NODEF(HAVE_SIZEOF_DATA_PTR);
#endif
#if defined(SIZEOF_DATA_PTR)
  CHECK(void*, SIZEOF_DATA_PTR);
#else
  NODEF(SIZEOF_DATA_PTR);
#endif

/* char */
#if !defined(HAVE_SIZEOF_CHAR)
  NODEF(HAVE_SIZEOF_CHAR);
#endif
#if defined(SIZEOF_CHAR)
  CHECK(char, SIZEOF_CHAR);
#else
  NODEF(SIZEOF_CHAR);
#endif

/* short */
#if !defined(HAVE_SIZEOF_SHORT)
  NODEF(HAVE_SIZEOF_SHORT);
#endif
#if defined(SIZEOF_SHORT)
  CHECK(short, SIZEOF_SHORT);
#else
  NODEF(SIZEOF_SHORT);
#endif

/* int */
#if !defined(HAVE_SIZEOF_INT)
  NODEF(HAVE_SIZEOF_INT);
#endif
#if defined(SIZEOF_INT)
  CHECK(int, SIZEOF_INT);
#else
  NODEF(SIZEOF_INT);
#endif

/* long */
#if !defined(HAVE_SIZEOF_LONG)
  NODEF(HAVE_SIZEOF_LONG);
#endif
#if defined(SIZEOF_LONG)
  CHECK(long, SIZEOF_LONG);
#else
  NODEF(SIZEOF_LONG);
#endif

/* long long */
#if defined(SIZEOF_LONG_LONG)
  CHECK(long long, SIZEOF_LONG_LONG);
#if !defined(HAVE_SIZEOF_LONG_LONG)
  NODEF(HAVE_SIZEOF_LONG_LONG);
#endif
#endif

/* __int64 */
#if defined(SIZEOF___INT64)
  CHECK(__int64, SIZEOF___INT64);
#if !defined(HAVE_SIZEOF___INT64)
  NODEF(HAVE_SIZEOF___INT64);
#endif
#elif defined(HAVE_SIZEOF___INT64)
  NODEF(SIZEOF___INT64);
#endif

/* size_t */
#if !defined(HAVE_SIZEOF_SIZE_T)
  NODEF(HAVE_SIZEOF_SIZE_T);
#endif
#if defined(SIZEOF_SIZE_T)
  CHECK(size_t, SIZEOF_SIZE_T);
#else
  NODEF(SIZEOF_SIZE_T);
#endif

/* ssize_t */
#if defined(SIZEOF_SSIZE_T)
  CHECK(ssize_t, SIZEOF_SSIZE_T);
#if !defined(HAVE_SIZEOF_SSIZE_T)
  NODEF(HAVE_SIZEOF_SSIZE_T);
#endif
#elif defined(HAVE_SIZEOF_SSIZE_T)
  NODEF(SIZEOF_SSIZE_T);
#endif

/* struct somestruct::someint */
#if defined(SIZEOF_STRUCTMEMBER_INT)
  CHECK(x.someint, SIZEOF_STRUCTMEMBER_INT);
  CHECK(x.someint, SIZEOF_INT);
#if !defined(HAVE_SIZEOF_STRUCTMEMBER_INT)
  NODEF(HAVE_SIZEOF_STRUCTMEMBER_INT);
#endif
#elif defined(HAVE_SIZEOF_STRUCTMEMBER_INT)
  NODEF(SIZEOF_STRUCTMEMBER_INT);
#endif

/* struct somestruct::someptr */
#if defined(SIZEOF_STRUCTMEMBER_PTR)
  CHECK(x.someptr, SIZEOF_STRUCTMEMBER_PTR);
  CHECK(x.someptr, SIZEOF_DATA_PTR);
#if !defined(HAVE_SIZEOF_STRUCTMEMBER_PTR)
  NODEF(HAVE_SIZEOF_STRUCTMEMBER_PTR);
#endif
#elif defined(HAVE_SIZEOF_STRUCTMEMBER_PTR)
  NODEF(SIZEOF_STRUCTMEMBER_PTR);
#endif

/* struct somestruct::someint */
#if defined(SIZEOF_STRUCTMEMBER_CHAR)
  CHECK(x.somechar, SIZEOF_STRUCTMEMBER_CHAR);
  CHECK(x.somechar, SIZEOF_CHAR);
#if !defined(HAVE_SIZEOF_STRUCTMEMBER_CHAR)
  NODEF(HAVE_SIZEOF_STRUCTMEMBER_CHAR);
#endif
#elif defined(HAVE_SIZEOF_STRUCTMEMBER_CHAR)
  NODEF(SIZEOF_STRUCTMEMBER_CHAR);
#endif

  /* to avoid possible warnings about unused or write-only variable */
  x.someint = result;

  return x.someint;
}
