endian_check.c
changeset 2713 9f06e1f94ce9
parent 2186 461a2aff3486
child 2719 146eaa0ec83c
--- a/endian_check.c	Sat Dec 03 13:43:54 2005 +0000
+++ b/endian_check.c	Sun Dec 04 17:36:19 2005 +0000
@@ -11,22 +11,39 @@
 //  care of the real writing to the file.
 
 int main (int argc, char *argv[]) {
-  unsigned char EndianTest[2] = { 1, 0 };
-  int force_BE = 0, force_LE = 0;
-
-  if (argc > 1 && strcmp(argv[1], "BE") == 0)
-    force_BE = 1;
-  if (argc > 1 && strcmp(argv[1], "LE") == 0)
-    force_LE = 1;
+	unsigned char EndianTest[2] = { 1, 0 };
+	int force_BE = 0, force_LE = 0;
 
-  printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
+	if (argc > 1 && strcmp(argv[1], "BE") == 0)
+		force_BE = 1;
+	if (argc > 1 && strcmp(argv[1], "LE") == 0)
+		force_LE = 1;
 
-  if ( (*(short *) EndianTest == 1 && force_BE != 1) || force_LE == 1)
-    printf("#define TTD_LITTLE_ENDIAN\n");
-  else
-    printf("#define TTD_BIG_ENDIAN\n");
+	printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
 
-  printf("#endif\n");
+	if (force_LE == 1) {
+		printf("#define TTD_LITTLE_ENDIAN\n");
+	} else {
+		if (force_BE == 1) {
+			printf("#define TTD_BIG_ENDIAN\n");
+		} else {
+#ifdef __APPLE__
+			// adding support for universal binaries on OSX
+			// Universal binaries supports both PPC and x86
+			printf("#ifdef __BIG_ENDIAN__\n");
+			printf("#define TTD_BIG_ENDIAN\n");
+			printf("#else\n");
+			printf("#define TTD_LITTLE_ENDIAN\n");
+			printf("#endif\n");
+#else
+			if ( *(short *) EndianTest == 1 )
+				printf("#define TTD_LITTLE_ENDIAN\n");
+			else
+				printf("#define TTD_BIG_ENDIAN\n");
+#endif
+		}
+	}
+	printf("#endif\n");
 
-  return 0;
+	return 0;
 }