Whamcloud - gitweb
Fix asm_types.h type conflicts
[tools/e2fsprogs.git] / config / parse-types.sh
diff --git a/config/parse-types.sh b/config/parse-types.sh
new file mode 100755 (executable)
index 0000000..f4014ea
--- /dev/null
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+ASM_TYPES=/usr/include/asm/types.h
+
+if test ! -f $ASM_TYPES
+then
+    echo "" > asm_types.h
+    echo "No asm_types file found"
+    exit 1
+fi
+
+cat > /tmp/sed.script << "EOF"
+/^#/d
+/^$/d
+s/__extension__ //
+s/typedef \(.*\) __u\([1-9]*\);/#define __U\2_TYPEDEF \1/
+s/typedef \(.*\) __s\([1-9]*\);/#define __S\2_TYPEDEF \1/
+EOF
+
+gcc -E $ASM_TYPES | sed -f /tmp/sed.script | grep ^# > asm_types.h
+
+cp asm_types.h asm_types.c
+
+cat >> asm_types.c <<EOF
+main(int argc, char **argv)
+{
+#ifdef __U8_TYPEDEF
+       if (sizeof(__U8_TYPEDEF) != 1) {
+               printf("Sizeof(__U8__TYPEDEF) is %d should be 1\n", 
+                      sizeof(__U8_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __U8_TYPEDEF not defined
+#endif
+#ifdef __S8_TYPEDEF
+       if (sizeof(__S8_TYPEDEF) != 1) {
+               printf("Sizeof(_S8__TYPEDEF) is %d should be 1\n", 
+                      sizeof(__S8_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __S8_TYPEDEF not defined
+#endif
+#ifdef __U16_TYPEDEF
+       if (sizeof(__U16_TYPEDEF) != 2) {
+               printf("Sizeof(__U16__TYPEDEF) is %d should be 2\n", 
+                      sizeof(__U16_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __U16_TYPEDEF not defined
+#endif
+#ifdef __S16_TYPEDEF
+       if (sizeof(__S16_TYPEDEF) != 2) {
+               printf("Sizeof(__S16__TYPEDEF) is %d should be 2\n", 
+                      sizeof(__S16_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __S16_TYPEDEF not defined
+#endif
+
+#ifdef __U32_TYPEDEF
+       if (sizeof(__U32_TYPEDEF) != 4) {
+               printf("Sizeof(__U32__TYPEDEF) is %d should be 4\n", 
+                      sizeof(__U32_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __U32_TYPEDEF not defined
+#endif
+#ifdef __S32_TYPEDEF
+       if (sizeof(__S32_TYPEDEF) != 4) {
+               printf("Sizeof(__S32__TYPEDEF) is %d should be 4\n", 
+                      sizeof(__S32_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __S32_TYPEDEF not defined
+#endif
+
+#ifdef __U64_TYPEDEF
+       if (sizeof(__U64_TYPEDEF) != 8) {
+               printf("Sizeof(__U64__TYPEDEF) is %d should be 8\n", 
+                      sizeof(__U64_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __U64_TYPEDEF not defined
+#endif
+#ifdef __S64_TYPEDEF
+       if (sizeof(__S64_TYPEDEF) != 8) {
+               printf("Sizeof(__S64__TYPEDEF) is %d should be 8\n", 
+                      sizeof(__S64_TYPEDEF));
+               exit(1);
+       }
+#else
+#warning __S64_TYPEDEF not defined
+#endif
+       exit(0);
+}
+EOF
+
+cc -o asm_types asm_types.c
+if ! ./asm_types 
+then
+    echo "Problem detected with asm_types.h"
+    echo "" > asm_types.h
+fi
+rm asm_types.c asm_types
+