1 #!/bin/sh 2 3 cat > sed.script << "EOF" 4 /^#/d 5 /^$/d 6 s/__extension__ // 7 s/typedef \(.*\) __u\([1-9]*\);/#define __U\2_TYPEDEF \1/ 8 s/typedef \(.*\) __s\([1-9]*\);/#define __S\2_TYPEDEF \1/ 9 EOF 10 11 if test -z "$CC"; then 12 CC=gcc 13 fi 14 15 if test -z "$CPP"; then 16 CPP="$CC -E" 17 fi 18 19 /bin/echo -n "checking for __uNN types... " 20 # can't check [ -f /usr/include/asm/types.h ] directly, since 21 # the include path might be different if cross-compiling 22 if echo '#include <asm/types.h>' | $CPP - 2> parse-types.log | \ 23 sed -f sed.script | grep '^#' > asm_types.h; then 24 echo "using <asm/types.h>" 25 else 26 echo "using generic types" 27 fi 28 29 rm sed.script 30 31 cp asm_types.h asm_types.c 32 33 cat >> asm_types.c <<EOF 34 #include <stdio.h> 35 #include <stdlib.h> 36 int main(int argc, char **argv) 37 { 38 #ifdef __U8_TYPEDEF 39 if (sizeof(__U8_TYPEDEF) != 1) { 40 printf("Sizeof(__U8__TYPEDEF) is %d should be 1\n", 41 (int) sizeof(__U8_TYPEDEF)); 42 exit(1); 43 } 44 #elif defined(__linux__) 45 #warning __U8_TYPEDEF not defined 46 #endif 47 #ifdef __S8_TYPEDEF 48 if (sizeof(__S8_TYPEDEF) != 1) { 49 printf("Sizeof(_S8__TYPEDEF) is %d should be 1\n", 50 (int) sizeof(__S8_TYPEDEF)); 51 exit(1); 52 } 53 #elif defined(__linux__) 54 #warning __S8_TYPEDEF not defined 55 #endif 56 #ifdef __U16_TYPEDEF 57 if (sizeof(__U16_TYPEDEF) != 2) { 58 printf("Sizeof(__U16__TYPEDEF) is %d should be 2\n", 59 (int) sizeof(__U16_TYPEDEF)); 60 exit(1); 61 } 62 #elif defined(__linux__) 63 #warning __U16_TYPEDEF not defined 64 #endif 65 #ifdef __S16_TYPEDEF 66 if (sizeof(__S16_TYPEDEF) != 2) { 67 printf("Sizeof(__S16__TYPEDEF) is %d should be 2\n", 68 (int) sizeof(__S16_TYPEDEF)); 69 exit(1); 70 } 71 #elif defined(__linux__) 72 #warning __S16_TYPEDEF not defined 73 #endif 74 75 #ifdef __U32_TYPEDEF 76 if (sizeof(__U32_TYPEDEF) != 4) { 77 printf("Sizeof(__U32__TYPEDEF) is %d should be 4\n", 78 (int) sizeof(__U32_TYPEDEF)); 79 exit(1); 80 } 81 #elif defined(__linux__) 82 #warning __U32_TYPEDEF not defined 83 #endif 84 #ifdef __S32_TYPEDEF 85 if (sizeof(__S32_TYPEDEF) != 4) { 86 printf("Sizeof(__S32__TYPEDEF) is %d should be 4\n", 87 (int) sizeof(__S32_TYPEDEF)); 88 exit(1); 89 } 90 #elif defined(__linux__) 91 #warning __S32_TYPEDEF not defined 92 #endif 93 94 #ifdef __U64_TYPEDEF 95 if (sizeof(__U64_TYPEDEF) != 8) { 96 printf("Sizeof(__U64__TYPEDEF) is %d should be 8\n", 97 (int) sizeof(__U64_TYPEDEF)); 98 exit(1); 99 } 100 #elif defined(__linux__) 101 #warning __U64_TYPEDEF not defined 102 #endif 103 #ifdef __S64_TYPEDEF 104 if (sizeof(__S64_TYPEDEF) != 8) { 105 printf("Sizeof(__S64__TYPEDEF) is %d should be 8\n", 106 (int) sizeof(__S64_TYPEDEF)); 107 exit(1); 108 } 109 #elif defined(__linux__) 110 #warning __S64_TYPEDEF not defined 111 #endif 112 return 0; 113 } 114 EOF 115 116 ${BUILD_CC-${CC-gcc}} -o asm_types asm_types.c 117 if ./asm_types 118 then 119 true 120 else 121 echo "Problem detected with asm_types.h" 122 echo "" > asm_types.h 123 fi 124 rm asm_types.c asm_types 125 126