summaryrefslogtreecommitdiff
path: root/fixincludes/mkfixinc.sh
blob: c353d89be50c945f8c1c83b317446729ad6fc0ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#! /bin/sh

if [ $# -ne 1 ]
then
  echo "Usage: $0 <target-mach-triplet>"
  exit 1
fi

machine=$1
target=fixinc.sh

# Check for special fix rules for particular targets
case $machine in
    alpha*-dec-*vms* | \
    i?86-moss-msdos* | \
    i?86-*-pe | \
    i?86-*-cygwin* | \
    i?86-*-interix* | \
    *-*-vxworks* | \
    powerpc-*-eabisim* | \
    powerpc-*-eabi*    | \
    powerpc-*-rtems*   | \
    powerpcle-*-eabisim* | \
    powerpcle-*-eabi* )
	#  IF there is no include fixing,
	#  THEN create a no-op fixer and exit
	(echo "#! /bin/sh" ; echo "exit 0" ) > ${target}
        ;;

    i?86-*-mingw32* | \
    x86_64-*-mingw32*)
        # We only want to fix stdlib.h in mingw.
	# FIXME: Is SED available on mingw? 
	(cat > ${target} << EOF
#! /bin/sh

OUTPUT_DIR=\$1
if [ "x\$OUTPUT_DIR" = "x" ]; then
  echo fixincludes: no output directory specified
  exit 1
fi

if [ ! -d \$OUTPUT_DIR ]; then
  echo fixincludes: output dir \"\$OUTPUT_DIR\" is an invalid directory
  exit 1
fi

INPUT_DIR=\$2
if [ "x\$INPUT_DIR" = "x" ]; then
  echo fixincludes: no input directory specified
  exit 1
fi

if [ ! -d \$INPUT_DIR ]; then
  echo fixincludes: input dir \"\$INPUT_DIR\" is an invalid directory
  exit 1
fi

INPUT_STDLIB_H=\$INPUT_DIR/stdlib.h
if [ ! -f \$INPUT_STDLIB_H ]; then
  echo fixincludes: \"stdlib.h\" is an invalid file
  exit 1
fi

OUTPUT_STDLIB_H=\$OUTPUT_DIR/stdlib.h
sed -e "s/\(.*_rotl.*\)/#if __GNUC__ < 4 || (__GNUC__ == 4 \&\& __GNUC_MINOR__ < 5)\n\1/" \
    -e "s/\(.*_lrotr.*\)/\1\n#else\n\#include <x86intrin.h>\n#endif/" \
   \$INPUT_STDLIB_H > \$OUTPUT_STDLIB_H

exit 0
EOF
)
        ;;

    *)
	cat < ${srcdir}/fixinc.in > ${target} || exit 1
	;;
esac
chmod 755 ${target}