/* machine.h Copyright (C) 1990-2007 Codemist Ltd */
/*
* This was ONCE a place where all system-specific options were detected
* and mapped onto tidy macros that could guide subsequent compilation. Now
* all that is handled in "config.h", which is manufactured on a per-target
* basis by a configure-script created by autoconf.
*
* Now it us used for just a few tests based on what comes out of
* config.h to set up really major further bits of configuration, where
* the characteristic of what is done here is that it will vary from
* target to target and it is truly pervasive in consequences.
*/
/*
* This code may be used and modified, and redistributed in binary
* or source form, subject to the "CCL Public License", which should
* accompany it. This license is a variant on the BSD license, and thus
* permits use of code derived from this in either open and commercial
* projects: but it does require that updates to this code be made
* available back to the originators of the package.
* Before merging other code in with this or linking this code
* with other packages or libraries please check that the license terms
* of the other material are compatible with those of this.
*/
/* Signature: 6c63e427 19-Jun-2007 */
#ifndef header_machine_h
#define header_machine_h 1
/*
* I will decode information that config.h has given me and define a simple
* symbol SOCKETS if I can use sockets...
*
*/
#if !defined UNDER_CE && ((defined HAVE_SOCKET && defined HAVE_SYS_SOCKET_H) || defined WIN32)
#define SOCKETS 1
#endif
#ifndef MS_CDECL
#ifdef _MSC_VER
# define MS_CDECL __cdecl
#else
# define MS_CDECL
#endif
#endif
#ifdef WIN32
# ifdef WIN64
# define OPSYS "win64"
# define IMPNAME "win64"
# else
# define OPSYS "win32"
# define IMPNAME "win32"
# endif
#else
# ifdef HOST_OS
# define OPSYS HOST_OS
# ifdef HOST_CPU
# define IMPNAME HOST_OS ":" HOST_CPU
# else
# define IMPNAME HOST_OS
# endif
# else
# define OPSYS "Unknown"
# define IMPNAME "Generic"
# endif
#endif
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
/*
* #ifdef __APPLE__
*
* Apple and MacOS provide a special challenge for me. It is possible to
* compile code with a command such as
* gcc -arch ppc -archppc64 -archi386 ...
* and by so doing create a two or three-way fat binary. This situation is
* excellent, HOWEVER it causes real trouble for autoconf in any cases
* where the results could be system-sensitive! A case where this is
* unambiguously true relates to the size of data. So I put in some
* old-fashioned manual treatment that will, I hope, override any values
* found by autoconf in the relevent areas.
*
* Well ACTUALLY I hope and believe that Apple provides <stdint.h> and
* so the macros set up where will never get inspected!
*
* Well these days they seem to have stdint.h in the kit, and so I will
* comment this out!
*
*
* #undef SIZEOF_SHORT_INT
* #undef SIZEOF_INT
* #undef SIZEOF_LONG
* #undef SIZEOF_LONG_LONG
* #undef SIZEOF_VOID_P
*
* #if defined __x86_64__ || defined __ppc64__
* #define SIZEOF_SHORT_INT 2
* #define SIZEOF_INT 4
* #define SIZEOF_LONG 4
* #define SIZEOF_LONG_LONG 8
* #define SIZEOF_VOID_P 8
* #elif defined __i386__ || defined __ppc__
* #undef SIZEOF_SHORT_INT 2
* #undef SIZEOF_INT 4
* #undef SIZEOF_LONG 4
* #undef SIZEOF_LONG_LONG 8
* #undef SIZEOF_VOID_P 4
* #else
* #error "Unknown architecture on a machine that says it is __APPLE__"
* #endif
*
* #endif __APPLE__
*/
/*
* Now it appears that some systems provide types with names like
* u_int32_t where I count uint32_t as more standard. I will adapt
* around that here. As C compilers become more standardised this
* will become increasingly irrelevant.
*/
#ifndef HAVE_UINT32_T
#ifdef HAVE_U_INT32_T
typedef u_int32_t uint32_t;
#define HAVE_UINT32_T 1
#endif
#endif
#ifndef HAVE_UINT64_T
#ifdef HAVE_U_INT64_T
typedef u_int64_t uint64_t;
#define HAVE_UINT64_T 1
#endif
#endif
#ifndef HAVE_UINTPTR_T
#ifdef HAVE_U_INTPTR_T
typedef u_intptr_t uintptr_t;
#define HAVE_UINTPTR_T 1
#endif
#endif
/*
* Finally if those abstract widths have not been provided I will fall
* back on information worked out at configure-time. Note that that could
* be delicate in the context of cross-compilation and other odd cases.
*/
#if !defined HAVE_INT32_T && defined SIZEOF_INT && (SIZEOF_INT == 4)
typedef int int32_t;
#define HAVE_INT32_T 1
#endif
#if !defined HAVE_UINT32_T && defined SIZEOF_INT && (SIZEOF_INT == 4)
typedef unsigned int uint32_t;
#define HAVE_UINT32_T 1
#endif
#if !defined HAVE_INT32_T && defined SIZEOF_SHORT_INT && (SIZEOF_SHORT_INT == 4)
typedef short int int32_t;
#define HAVE_INT32_T 1
#endif
#if !defined HAVE_UINT32_T && defined SIZEOF_SHORT_INT && (SIZEOF_SHORT_INT == 4)
typedef unsigned short int uint32_t;
#define HAVE_UINT32_T 1
#endif
#if !defined HAVE_INT64_T && defined SIZEOF_LONG && (SIZEOF_LONG == 8)
typedef long int64_t;
#define HAVE_INT64_T 1
#endif
#if !defined HAVE_UINT64_T && defined SIZEOF_LONG && (SIZEOF_LONG == 8)
typedef unsigned long uint64_t;
#define HAVE_UINT64_T 1
#endif
#if !defined HAVE_INT64_T && defined SIZEOF_LONG_LONG && (SIZEOF_LONG_LONG == 8)
typedef long long int64_t;
#define HAVE_INT64_T 1
#endif
#if !defined HAVE_UINT64_T && defined SIZEOF_LONG_LONG && (SIZEOF_LONG_LONG == 8)
typedef unsigned long long uint64_t;
#define HAVE_UINT64_T 1
#endif
#if !defined HAVE_INTPTR_T && defined SIZEOF_VOID_P && (SIZEOF_VOID_P == 4) && defined HAVE_INT32_T
typedef int32_t intptr_t;
#define HAVE_INTPTR_T 1
#endif
#if !defined HAVE_INTPTR_T && defined SIZEOF_VOID_P && (SIZEOF_VOID_P == 8) && defined HAVE_INT64_T
typedef int64_t intptr_t;
#define HAVE_INTPTR_T 1
#endif
#if !defined HAVE_UINTPTR_T && defined SIZEOF_VOID_P && (SIZEOF_VOID_P == 4) && defined HAVE_UINT32_T
typedef uint32_t uintptr_t;
#define HAVE_UINTPTR_T 1
#endif
#if !defined HAVE_UINTPTR_T && defined SIZEOF_VOID_P && (SIZEOF_VOID_P == 8) && defined HAVE_UINT64_T
typedef uint64_t uintptr_t;
#define HAVE_UINTPTR_T 1
#endif
/*
* With luck that will have regularised the situation with regard to
* integer types!
*/
#endif /* header_machine_h */
/* end machine.h */