Whamcloud - gitweb
Fix asm_types.h type conflicts
[tools/e2fsprogs.git] / config / parse-types.sh
1 #!/bin/sh
2
3 ASM_TYPES=/usr/include/asm/types.h
4
5 if test ! -f $ASM_TYPES
6 then
7     echo "" > asm_types.h
8     echo "No asm_types file found"
9     exit 1
10 fi
11
12 cat > /tmp/sed.script << "EOF"
13 /^#/d
14 /^$/d
15 s/__extension__ //
16 s/typedef \(.*\) __u\([1-9]*\);/#define __U\2_TYPEDEF \1/
17 s/typedef \(.*\) __s\([1-9]*\);/#define __S\2_TYPEDEF \1/
18 EOF
19
20 gcc -E $ASM_TYPES | sed -f /tmp/sed.script | grep ^# > asm_types.h
21
22 cp asm_types.h asm_types.c
23
24 cat >> asm_types.c <<EOF
25 main(int argc, char **argv)
26 {
27 #ifdef __U8_TYPEDEF
28         if (sizeof(__U8_TYPEDEF) != 1) {
29                 printf("Sizeof(__U8__TYPEDEF) is %d should be 1\n", 
30                        sizeof(__U8_TYPEDEF));
31                 exit(1);
32         }
33 #else
34 #warning __U8_TYPEDEF not defined
35 #endif
36 #ifdef __S8_TYPEDEF
37         if (sizeof(__S8_TYPEDEF) != 1) {
38                 printf("Sizeof(_S8__TYPEDEF) is %d should be 1\n", 
39                        sizeof(__S8_TYPEDEF));
40                 exit(1);
41         }
42 #else
43 #warning __S8_TYPEDEF not defined
44 #endif
45 #ifdef __U16_TYPEDEF
46         if (sizeof(__U16_TYPEDEF) != 2) {
47                 printf("Sizeof(__U16__TYPEDEF) is %d should be 2\n", 
48                        sizeof(__U16_TYPEDEF));
49                 exit(1);
50         }
51 #else
52 #warning __U16_TYPEDEF not defined
53 #endif
54 #ifdef __S16_TYPEDEF
55         if (sizeof(__S16_TYPEDEF) != 2) {
56                 printf("Sizeof(__S16__TYPEDEF) is %d should be 2\n", 
57                        sizeof(__S16_TYPEDEF));
58                 exit(1);
59         }
60 #else
61 #warning __S16_TYPEDEF not defined
62 #endif
63
64 #ifdef __U32_TYPEDEF
65         if (sizeof(__U32_TYPEDEF) != 4) {
66                 printf("Sizeof(__U32__TYPEDEF) is %d should be 4\n", 
67                        sizeof(__U32_TYPEDEF));
68                 exit(1);
69         }
70 #else
71 #warning __U32_TYPEDEF not defined
72 #endif
73 #ifdef __S32_TYPEDEF
74         if (sizeof(__S32_TYPEDEF) != 4) {
75                 printf("Sizeof(__S32__TYPEDEF) is %d should be 4\n", 
76                        sizeof(__S32_TYPEDEF));
77                 exit(1);
78         }
79 #else
80 #warning __S32_TYPEDEF not defined
81 #endif
82
83 #ifdef __U64_TYPEDEF
84         if (sizeof(__U64_TYPEDEF) != 8) {
85                 printf("Sizeof(__U64__TYPEDEF) is %d should be 8\n", 
86                        sizeof(__U64_TYPEDEF));
87                 exit(1);
88         }
89 #else
90 #warning __U64_TYPEDEF not defined
91 #endif
92 #ifdef __S64_TYPEDEF
93         if (sizeof(__S64_TYPEDEF) != 8) {
94                 printf("Sizeof(__S64__TYPEDEF) is %d should be 8\n", 
95                        sizeof(__S64_TYPEDEF));
96                 exit(1);
97         }
98 #else
99 #warning __S64_TYPEDEF not defined
100 #endif
101         exit(0);
102 }
103 EOF
104
105 cc -o asm_types asm_types.c
106 if ! ./asm_types 
107 then
108     echo "Problem detected with asm_types.h"
109     echo "" > asm_types.h
110 fi
111 rm asm_types.c asm_types
112