]> rtime.felk.cvut.cz Git - orte.git/blob - admin/linux.m4
1f57d83b986b9eb5a90c648ba9ae3ecd23cde1a0
[orte.git] / admin / linux.m4
1
2
3 AC_DEFUN(DS_LINUX_DIR,
4 [
5         AC_ARG_WITH([linuxdir],
6                 [AC_HELP_STRING([--with-linuxdir=DIR],
7                         [specify path to Linux source directory])],
8                 [LINUX_DIR="${withval}"],
9                 [LINUX_DIR=default])
10
11         if test "${LINUX_DIR}" != "default" ; then
12                 DS_TRY_LINUX_DIR([${LINUX_DIR}], , AC_MSG_ERROR([Linux dir not found]) )
13         fi
14
15         if test "${LINUX_DIR}" = "default" ; then
16                 dir="/lib/modules/`uname -r`/build";
17                 DS_TRY_LINUX_DIR([${dir}], [LINUX_DIR=${dir}], )
18         fi
19         if test "${LINUX_DIR}" = "default" ; then
20                 dir="../linux";
21                 DS_TRY_LINUX_DIR([${dir}], [LINUX_DIR=${dir}], )
22         fi
23         if test "${LINUX_DIR}" = "default" ; then
24                 dir="/usr/src/linux";
25                 DS_TRY_LINUX_DIR([${dir}], [LINUX_DIR=${dir}], )
26         fi
27
28 #       if test "${LINUX_DIR}" = "default" ; then
29 #               AC_MSG_ERROR([Linux source directory not found])
30 #       fi
31
32         AC_SUBST(LINUX_DIR)
33 ])
34
35 AC_DEFUN(DS_TRY_LINUX_DIR,
36         [AC_MSG_CHECKING(for Linux in $1)
37
38         if test -f "$1/Makefile" ; then
39                 result=yes
40                 $2
41         else
42                 result="not found"
43                 $3
44         fi
45
46         AC_MSG_RESULT($result)
47 ])
48
49 AC_DEFUN(DS_LINUX,
50 [
51         DS_LINUX_DIR()
52         
53         AC_MSG_CHECKING([Linux version])
54         
55         if test "${LINUX_DIR}" != "default" ; then
56
57           if [[ ! -f "${LINUX_DIR}/.config" ]];then
58             AC_MSG_ERROR([
59             The kernel source tree at ${LINUX_DIR} is not configured.
60             Fix before continuing.])
61           fi
62
63           if [[ ! -f "${LINUX_DIR}/include/linux/version.h" ]];then
64             AC_MSG_ERROR([The header file include/linux/version.h does not exist.
65             For 2.6 kernels, it can be generated by running 'make prepare' in
66             the kernel source directory.])
67           fi
68
69           LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/version.h | \
70             sed 's/[[^"]]*"\(.*\)\{1\}"/\1/')
71
72           AC_MSG_RESULT([$LINUX_VERSION])
73
74           LINUX_VERSION_MAJOR=$(echo ${LINUX_VERSION} | cut -d. -f1)
75           LINUX_VERSION_MINOR=$(echo ${LINUX_VERSION} | cut -d. -f2)
76
77           case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
78             2.6)
79                 DS_LINUX_2_6()
80                 ;;
81             2.[[01234]])
82                 DS_LINUX_2_4()
83                 ;;
84             *)
85                 AC_MSG_ERROR([Unknown Linux major.minor $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR])
86                 ;;
87           esac
88         else
89           AC_MSG_RESULT(["none"])       
90         fi
91   
92   DS_RT()
93 ])
94
95 AC_DEFUN(DS_LINUX_2_6,
96 [
97         AC_MSG_CHECKING(for Linux CFLAGS)
98
99         tmpdir="`pwd`/tmp-noicrwa"
100
101         rm -rf ${tmpdir}
102         mkdir ${tmpdir}
103
104         cat >${tmpdir}/Makefile <<EOF
105 obj-m += fake.o
106
107 \$(obj)/fake.c: flags
108         touch \$(obj)/fake.c
109
110 .PHONY: flags
111 flags:
112         echo LINUX_ARCH=\"\$(ARCH)\" >>\$(obj)/flags
113         echo LINUX_AFLAGS=\"\$(AFLAGS)\" | sed 's_Iinclude_I"\$(LINUXDIR)/include"_g'>>\$(obj)/flags
114         echo LINUX_LDFLAGS=\"\" >>\$(obj)/flags
115         echo LINUX_ARFLAGS=\"\$(ARFLAGS)\" >>\$(obj)/flags
116         echo LINUX_CROSS_COMPILE=\"\$(CROSS_COMPILE)\" >>\$(obj)/flags
117         echo LINUX_KERNELRELEASE=\"\$(KERNELRELEASE)\" >>\$(obj)/flags
118         echo LINUX_CFLAGS=\"\$(CFLAGS)\" | sed 's_Iinclude_I"\$(LINUXDIR)/include"_g'>>\$(obj)/flags
119         echo LINUX_CC=\"\$(CC)\" >>\$(obj)/flags
120         echo LINUX_LD=\"\$(LD) \$(LDFLAGS)\" >>\$(obj)/flags
121         echo LINUX_AS=\"\$(AS)\" >>\$(obj)/flags
122 EOF
123
124         echo ${MAKE-make} -C ${LINUX_DIR} V=1 SUBDIRS=${tmpdir} LINUXDIR=${LINUX_DIR} MODVERDIR=${tmpdir} modules >&5 2>&5
125         ${MAKE-make} -C ${LINUX_DIR} V=1 SUBDIRS=${tmpdir} LINUXDIR=${LINUX_DIR} MODVERDIR=${tmpdir} modules >&5 2>&5
126         . ${tmpdir}/flags
127         rm -rf ${tmpdir}
128
129         LINUX_MODULE_EXT=".ko"
130
131         AC_SUBST(LINUX_ARCH)
132         AC_SUBST(LINUX_AFLAGS)
133         AC_SUBST(LINUX_LDFLAGS)
134         AC_SUBST(LINUX_ARFLAGS)
135         AC_SUBST(LINUX_CROSS_COMPILE)
136         AC_SUBST(LINUX_KERNELRELEASE)
137         AC_SUBST(LINUX_CFLAGS)
138         AC_SUBST(LINUX_CC)
139         AC_SUBST(LINUX_LD)
140         AC_SUBST(LINUX_AS)
141         AC_SUBST(LINUX_MODULE_EXT)
142
143         AC_MSG_RESULT([ok])
144 ])
145
146
147 AC_DEFUN(DS_LINUX_2_4,
148 [
149         AC_MSG_CHECKING(for Linux CFLAGS)
150
151         if [[ ! -f "${LINUX_DIR}/.hdepend" ]];then
152                 AC_MSG_ERROR([
153 You need to run 'make dep' on the kernel source before continuing.])
154         fi
155
156         tmpdir="`pwd`/tmp-noicrwa"
157
158         rm -rf ${tmpdir}
159         mkdir ${tmpdir}
160
161         cat >${tmpdir}/Makefile <<EOF
162
163 .PHONY: modules
164 modules:
165         echo LINUX_ARCH=\"\$(ARCH)\" >>flags
166         echo LINUX_AFLAGS=\"\$(AFLAGS)\" | sed 's_Iinclude_I\"\$(LINUXDIR)/include\"_g'>>flags
167         echo LINUX_LDFLAGS=\"\" >>flags
168         echo LINUX_ARFLAGS=\"\$(ARFLAGS)\" >>flags
169         echo LINUX_CROSS_COMPILE=\"\$(CROSS_COMPILE)\" >>flags
170         echo LINUX_KERNELRELEASE=\"\$(KERNELRELEASE)\" >>flags
171         echo LINUX_CFLAGS=\"\$(CFLAGS)\" | sed 's_Iinclude_I\"\$(LINUXDIR)/include\"_g'>>flags
172         echo LINUX_CC=\"\$(CC)\" >>flags
173         echo LINUX_LD=\"\$(LD) \$(LDFLAGS)\" >>flags
174         echo LINUX_AS=\"\$(AS)\" >>flags
175 EOF
176
177         echo ${MAKE-make} -C ${LINUX_DIR} SUBDIRS=${tmpdir} modules >&5 2>&5
178         ${MAKE-make} -C ${LINUX_DIR} SUBDIRS=${tmpdir} modules >&5 2>&5
179         . ${tmpdir}/flags
180         rm -rf ${tmpdir}
181
182         LINUX_MODULE_EXT=".o"
183
184         AC_SUBST(LINUX_ARCH)
185         AC_SUBST(LINUX_AFLAGS)
186         AC_SUBST(LINUX_LDFLAGS)
187         AC_SUBST(LINUX_ARFLAGS)
188         AC_SUBST(LINUX_CROSS_COMPILE)
189         AC_SUBST(LINUX_KERNELRELEASE)
190         AC_SUBST(LINUX_CFLAGS)
191         AC_SUBST(LINUX_CC)
192         AC_SUBST(LINUX_LD)
193         AC_SUBST(LINUX_AS)
194         AC_SUBST(LINUX_MODULE_EXT)
195
196         AC_MSG_RESULT([ok])
197 ])
198
199 AC_DEFUN(DS_CHECK_LINUX_CONFIG_OPTION,
200 [
201         AC_MSG_CHECKING([Linux config option $1])
202
203         if grep '^$1=y$' ${LINUX_DIR}/.config >/dev/null 2>/dev/null; then
204                 result=yes
205                 $2
206         else if grep '^$1=m$' ${LINUX_DIR}/.config >/dev/null 2>/dev/null; then
207                 result=module
208                 $3
209         else
210                 result=no
211                 $4
212         fi
213         fi
214
215         AC_MSG_RESULT([$result])
216 ])
217
218 AC_DEFUN(DS_LINUX_CONFIG_OPTION,
219 [
220         DS_CHECK_LINUX_CONFIG_OPTION([$1],
221                 [$1=yes],
222                 [$1=module],
223                 [$1=no])
224
225         AM_CONDITIONAL([$1],[test "${$1}" = yes])
226 ])
227
228 AC_DEFUN(DS_LINUX_CONFIG_OPTION_MODULE,
229 [
230         DS_CHECK_LINUX_CONFIG_OPTION([$1],
231                 [$1=yes],
232                 [$1=module],
233                 [$1=no])
234
235         AM_CONDITIONAL([$1],[test "${$1}" = yes -o "${$1}" = module])
236 ])
237
238 AC_DEFUN(DS_RTAI,
239 [
240         AC_ARG_WITH([rtaidir],
241                 [AC_HELP_STRING([--with-rtaidir=DIR],
242                         [specify path to RTAI source directory])],
243                 [RTAI_DIR="${withval}"],
244                 [RTAI_DIR=/usr/src/rtai])
245
246         DS_LINUX_CONFIG_OPTION_MODULE([CONFIG_RTHAL])
247
248         if test "${CONFIG_RTHAL}" != "no" ; then
249                 AC_MSG_CHECKING([RTAI directory ${RTAI_DIR}])
250                 if [[ -d ${RTAI_DIR}/include ]] ; then
251                         RTAI_CFLAGS="-I${RTAI_DIR}/include"
252                 else
253                         if [ -d ${RTAI_DIR}/rtai-core/include ] ; then
254                                 RTAI_CFLAGS="-I${RTAI_DIR}/rtai-core/include"
255                         else
256                                 AC_MSG_ERROR([incorrect RTAI directory?])
257                         fi
258                 fi
259                 $1
260                 AC_MSG_RESULT([found])
261                 AC_DEFINE([CONFIG_ORTE_RTAI],[1],[Define if kernel is RTAI patched])
262         else
263                 $2
264         fi
265         AC_SUBST(RTAI_CFLAGS)
266
267 ])
268
269 AC_DEFUN(DS_RTLINUX,
270 [
271         AC_ARG_WITH([rtlinuxdir],
272                 [AC_HELP_STRING([--with-rtlinuxdir=DIR],
273                         [specify path to RTLinux source directory])],
274                 [RTLINUX_DIR="${withval}"],
275                 [RTLINUX_DIR=/usr/src/rtlinux])
276
277         DS_LINUX_CONFIG_OPTION_MODULE([CONFIG_RTLINUX])
278
279         if test "${CONFIG_RTLINUX}" != "no" ; then
280                 AC_MSG_CHECKING([RTLinux directory ${RTLINUX_DIR} for rtl.mk])
281                 if [[ -d ${RTLINUX_DIR}/include ]] ; then
282                         RTLINUX_CFLAGS=`sed -n -e 's/^CFLAGS *=\(.*\)$/\1/p' ${RTLINUX_DIR}/rtl.mk`
283                 else
284                         AC_MSG_ERROR([incorrect RTLinux directory?])
285                 fi
286                 AC_MSG_RESULT([found])
287                 AC_DEFINE([CONFIG_ORTE_RTL],[1],[Define if kernel is RTLinux patched])
288                 $1
289         else
290                 $2
291         fi
292         AC_SUBST(RTLINUX_CFLAGS)
293 ])
294
295 AC_DEFUN(DS_RT,
296 [
297         DS_RTAI([USE_RTAI=yes],[USE_RTAI=no])
298         DS_RTLINUX([USE_RTLINUX=yes],[USE_RTLINUX=no])
299         if test ${USE_RTAI} == "yes" -o ${USE_RTLINUX} == "yes" ; then
300                 AC_DEFINE([CONFIG_ORTE_RT],[1],[Define to enable comedi's RT support])
301         fi
302         AM_CONDITIONAL([USE_RTAI],[test ${USE_RTAI} == "yes"])
303         AM_CONDITIONAL([USE_RTLINUX],[test ${USE_RTLINUX} == "yes"])
304         AM_CONDITIONAL([CONFIG_ORTE_RT],[test ${USE_RTAI} == "yes" -o ${USE_RTLINUX} == "yes"])
305 ])