pullup 3232
[pkgsrcv2.git] / mk / endian.mk
1 # $NetBSD: endian.mk,v 1.5 2007/03/08 23:11:20 rillig Exp $
2 #
3 # Determine the endianness of the platform by checking header files.
4 #
5 # This file is used as follows:
6 #
7 # .include "../../mk/endian.mk"
8 #
9 # .if ${MACHINE_ENDIAN} == "big"
10 # # ...big endian stuff...
11 # .elif ${MACHINE_ENDIAN} == "little"
12 # # ...little endian stuff...
13 # .else
14 # BROKEN=       "Unknown endianness"
15 # .endif
16
17 .include "../../mk/bsd.prefs.mk"
18
19 .if !defined(MACHINE_ENDIAN)
20 .  if exists(/usr/include/endian.h)
21 _ENDIAN_H=      endian.h                        # Linux
22 .  elif exists(/usr/include/sys/endian.h)
23 _ENDIAN_H=      sys/endian.h                    # NetBSD>=1.5
24 .  elif exists(/usr/include/machine/endian.h)
25 _ENDIAN_H=      machine/endian.h                # NetBSD<1.5
26 .  elif exists(/usr/include/sys/byteorder.h)
27 _ENDIAN_H=      sys/byteorder.h                 # Solaris
28 .  else
29 _ENDIAN_H=      /dev/null
30 .  endif
31
32 MACHINE_ENDIAN!=                                                        \
33         { ${ECHO} "\#if defined(__sgi)";                                \
34           ${ECHO} "\#  include <standards.h>";                          \
35           ${ECHO} "\#endif";                                            \
36           ${ECHO} "\#include <${_ENDIAN_H}>";                           \
37           ${ECHO} "\#ifndef BYTE_ORDER";                                \
38           ${ECHO} "\#ifdef _BIG_ENDIAN";                                \
39           ${ECHO} "\#define BYTE_ORDER 4321";                           \
40           ${ECHO} "\#else";                                             \
41           ${ECHO} "\#define BYTE_ORDER 1234";                           \
42           ${ECHO} "\#endif";                                            \
43           ${ECHO} "\#endif";                                            \
44           ${ECHO} "BYTE_ORDER"; } | ${CC} -E - |                        \
45         { while read line; do                                           \
46                 case $$line in                                          \
47                 1234)   ${ECHO} "little"; exit 0 ;;                     \
48                 4321)   ${ECHO} "big"; exit 0 ;;                        \
49                 esac;                                                   \
50           done;                                                         \
51           ${ECHO} "unknown"; }
52
53 MAKEFLAGS+=     MACHINE_ENDIAN=${MACHINE_ENDIAN:Q}
54 .endif