OSDN Git Service

Fixes from gentoo.
[uclinux-h8/uClibc.git] / extra / scripts / fix_includes.sh
1 #!/bin/sh
2 # Copyright (C) 2003 Erik Andersen <andersen@uclibc.org>
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Library General Public
6 # License as published by the Free Software Foundation; either
7 # version 2 of the License, or (at your option) any later
8 # version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Library General Public License for more details.
14 #
15 # You should have received a copy of the GNU Library General
16 # Public License along with this program; if not, write to the
17 # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 # Boston, MA 02111-1307 USA
19
20 usage () {
21     echo ""
22     echo "usage: "`basename $0`" -k KERNEL_SOURCE_DIRECTORY -t TARGET_ARCH"
23     echo ""
24     echo "This utility scans the KERNEL_SOURCE_DIRECTORY directory and"
25     echo "checks that it contains well formed kernel headers suitable"
26     echo "for inclusion as the include/linux/ directory provided by"
27     echo "uClibc."
28     echo ""
29     echo "If the specified kernel headers are present and already"
30     echo "configured for the architecture specified by TARGET_ARCH,"
31     echo "they will be used as-is."
32     echo ""
33     echo "If the specified kernel headers are missing entirely, this"
34     echo "script will return an error."
35     echo ""
36     echo "If the specified kernel headers are present, but are either"
37     echo "not yet configured or are configured for an architecture"
38     echo "different than that specified by TARGET_ARCH, this script"
39     echo "will attempt to 'fix' the kernel headers and make them"
40     echo "suitable for use by uClibc.  This fixing process may fail."
41     echo "It is therefore best to always provide kernel headers that"
42     echo "are already configured for the selected architecture."
43     echo ""
44     echo "Most Linux distributions provide 'kernel-headers' packages"
45     echo "that are suitable for use by uClibc."
46     echo ""
47     echo ""
48     exit 1;
49 }
50
51 HAS_MMU="y";
52 while [ -n "$1" ]; do
53     case $1 in
54         -k ) shift; if [ -n "$1" ]; then KERNEL_SOURCE=$1; shift; else usage; fi; ;;
55         -t ) shift; if [ -n "$1" ]; then TARGET_ARCH=$1; shift; else usage; fi; ;;
56         -n ) shift; HAS_MMU="n"; ;;
57         -* ) usage; ;;
58         * ) usage; ;;
59     esac;
60 done;
61
62 if [ ! -f "$KERNEL_SOURCE/Makefile" -a ! -f "$KERNEL_SOURCE/include/linux/version.h" ]; then
63     echo "";
64     echo "";
65     echo "The file $KERNEL_SOURCE/Makefile or $KERNEL_SOURCE/include/linux/version.h is missing!";
66     echo "Perhaps your kernel source is broken?"
67     echo "";
68     echo "";
69     exit 1;
70 fi;
71
72 if [ ! -d "$KERNEL_SOURCE" ]; then
73     echo "";
74     echo "";
75     echo "$KERNEL_SOURCE is not a directory";
76     echo "";
77     echo "";
78     exit 1;
79 fi;
80
81 if [ -f "$KERNEL_SOURCE/Makefile" ] ; then
82 # set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
83 eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile`
84 else
85 ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2`
86 VERSION=`echo "$ver" | cut -d '.' -f 1`
87 PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2`
88 if echo "$ver" | grep -q '-' ; then
89 SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1`
90 EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"`
91 else
92 SUBLEVEL=`echo "$ver" | cut -d '.' -f 3`
93 #EXTRAVERSION=
94 fi
95 fi
96 if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ]
97 then
98     echo "Unable to determine version for kernel headers"
99     echo -e "\tprovided in directory $KERNEL_SOURCE"
100     exit 1
101 fi
102
103 echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}"
104
105
106 echo -e "\n"
107 echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'"
108 echo -e "\tprovided in directory $KERNEL_SOURCE"
109 echo -e "\n"
110
111 # Create a symlink to include/asm
112
113 rm -f include/asm*
114 if [ ! -d "$KERNEL_SOURCE/include/asm" ]; then
115     echo "";
116     echo "";
117     echo "The symlink $KERNEL_SOURCE/include/asm is missing\!";
118     echo "Perhaps you forgot to configure your kernel source?";
119     echo "You really should configure your kernel source tree so I";
120     echo "do not have to try and guess about this sort of thing.";
121     echo ""
122     echo "Attempting to guess a usable value....";
123     echo ""
124     echo "";
125     sleep 1;
126
127     if [ "$TARGET_ARCH" = "powerpc" ];then
128         set -x;
129         ln -fs $KERNEL_SOURCE/include/asm-ppc include/asm;
130         set +x;
131     elif [ "$TARGET_ARCH" = "mips" ];then
132         set -x;
133         ln -fs $KERNEL_SOURCE/include/asm-mips include/asm;
134         set +x;
135     elif [ "$TARGET_ARCH" = "arm" ];then
136         set -x;
137         ln -fs $KERNEL_SOURCE/include/asm-arm include/asm;
138         set +x;
139         if [ ! -L $KERNEL_SOURCE/include/asm-arm/proc ] ; then
140             if [ ! -L proc ] ; then
141                 (cd include/asm;
142                 ln -fs proc-armv proc;
143                 ln -fs arch-ebsa285 arch);
144             fi
145         fi;
146     elif [ "$TARGET_ARCH" = "cris" ]; then
147         set -x;
148         ln -fs $KERNEL_SOURCE/include/asm-cris include/asm;
149         set +x;
150     elif [ "$HAS_MMU" != "y" ]; then
151             if [ -d $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu ] ; then
152                 set -x;
153                 ln -fs $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu include/asm;
154                 set +x;
155             else
156                 set -x;
157                 ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm;
158                 set +x;
159             fi;
160     else
161         set -x;
162         ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm;
163         set +x;
164     fi;
165 else
166 # No guessing required.....
167 ln -fs $KERNEL_SOURCE/include/asm include/asm
168 fi;
169
170
171 # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory
172 if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then
173     ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic
174 fi;
175
176
177 # Create the include/linux symlink.
178 rm -f include/linux
179 ln -fs $KERNEL_SOURCE/include/linux include/linux
180