Whamcloud - gitweb
Phase 1 of LNET Reorg
[fs/lustre-release.git] / build / autoconf / lustre-build.m4
1 #
2 # LB_CHECK_VERSION
3 #
4 # Verify that LUSTRE_VERSION was defined properly
5 #
6 AC_DEFUN([LB_CHECK_VERSION],
7 [if test "LUSTRE_VERSION" = "LUSTRE""_VERSION" ; then
8         AC_MSG_ERROR([This script was not built with a version number.])
9 fi
10 ])
11
12 #
13 # LB_CANONICAL_SYSTEM
14 #
15 # fixup $target_os for use in other places
16 #
17 AC_DEFUN([LB_CANONICAL_SYSTEM],
18 [case $target_os in
19         linux*)
20                 lb_target_os="linux"
21                 ;;
22         darwin*)
23                 lb_target_os="darwin"
24                 ;;
25 esac
26 AC_SUBST(lb_target_os)
27 ])
28
29 #
30 # LB_CHECK_FILE
31 #
32 # Check for file existance even when cross compiling
33 #
34 AC_DEFUN([LB_CHECK_FILE],
35 [AS_VAR_PUSHDEF([lb_File], [lb_cv_file_$1])dnl
36 AC_CACHE_CHECK([for $1], lb_File,
37 [if test -r "$1"; then
38   AS_VAR_SET(lb_File, yes)
39 else
40   AS_VAR_SET(lb_File, no)
41 fi])
42 AS_IF([test AS_VAR_GET(lb_File) = yes], [$2], [$3])[]dnl
43 AS_VAR_POPDEF([lb_File])dnl
44 ])# LB_CHECK_FILE
45
46 #
47 # LB_CHECK_FILES
48 #
49 # LB_CHECK_FILE over multiple files
50 #
51 AC_DEFUN([LB_CHECK_FILES],
52 [AC_FOREACH([AC_FILE_NAME], [$1],
53   [LB_CHECK_FILE(AC_FILE_NAME,
54                  [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_[]AC_FILE_NAME), 1,
55                                     [Define to 1 if you have the
56                                      file `]AC_File['.])
57 $2],
58                  [$3])])])
59
60 #
61 # LB_ARG_LIBS_INCLUDES
62 #
63 # support for --with-foo, --with-foo-includes, and --with-foo-libs in
64 # a single magical macro
65 #
66 AC_DEFUN([LB_ARG_LIBS_INCLUDES],
67 [lb_pathvar="m4_bpatsubst([$2], -, _)"
68 AC_MSG_CHECKING([for $1])
69 AC_ARG_WITH([$2],
70         AC_HELP_STRING([--with-$2=path],
71                 [path to $1]),
72         [],[withval=$4])
73
74 if test x$withval = xyes ; then
75         eval "$lb_pathvar='$3'"
76 else
77         eval "$lb_pathvar='$withval'"
78 fi
79 AC_MSG_RESULT([${!lb_pathvar:-no}])
80
81 if test x${!lb_pathvar} != x -a x${!lb_pathvar} != xno ; then
82         AC_MSG_CHECKING([for $1 includes])
83         AC_ARG_WITH([$2-includes],
84                 AC_HELP_STRING([--with-$2-includes=path],
85                         [path to $1 includes]),
86                 [],[withval='yes'])
87
88         lb_includevar="${lb_pathvar}_includes"
89         if test x$withval = xyes ; then
90                 eval "${lb_includevar}='${!lb_pathvar}/include'"
91         else
92                 eval "${lb_includevar}='$withval'"
93         fi
94         AC_MSG_RESULT([${!lb_includevar}])
95
96         AC_MSG_CHECKING([for $1 libs])
97         AC_ARG_WITH([$2-libs],
98                 AC_HELP_STRING([--with-$2-libs=path],
99                         [path to $1 libs]),
100                 [],[withval='yes'])
101
102         lb_libvar="${lb_pathvar}_libs"
103         if test x$withval = xyes ; then
104                 eval "${lb_libvar}='${!lb_pathvar}/lib'"
105         else
106                 eval "${lb_libvar}='$withval'"
107         fi
108         AC_MSG_RESULT([${!lb_libvar}])
109 fi
110 ])
111 ])
112
113 #
114 # LB_PATH_LIBSYSIO
115 #
116 # Handle internal/external libsysio
117 #
118 AC_DEFUN([LB_PATH_LIBSYSIO],
119 [AC_ARG_WITH([sysio],
120         AC_HELP_STRING([--with-sysio=path],
121                         [set path to libsysio source (default is included libsysio)]),
122         [],[
123                 case $lb_target_os in
124                         linux)
125                                 with_sysio='yes'
126                                 ;;
127                         *)
128                                 with_sysio='no'
129                                 ;;
130                 esac
131         ])
132 AC_MSG_CHECKING([location of libsysio])
133 enable_sysio="$with_sysio"
134 case x$with_sysio in
135         xyes)
136                 AC_MSG_RESULT([internal])
137                 LB_CHECK_FILE([$srcdir/libsysio/src/rmdir.c],[],[
138                         AC_MSG_ERROR([A complete internal libsysio was not found.])
139                 ])
140                 LIBSYSIO_SUBDIR="libsysio"
141                 SYSIO="$PWD/libsysio"
142                 ;;
143         xno)
144                 AC_MSG_RESULT([disabled])
145                 ;;
146         *)
147                 AC_MSG_RESULT([$with_sysio])
148                 LB_CHECK_FILE([$with_sysio/lib/libsysio.a],[],[
149                         AC_MSG_ERROR([A complete (built) external libsysio was not found.])
150                 ])
151                 SYSIO=$with_sysio
152                 with_sysio="yes"
153                 ;;
154 esac
155
156 # We have to configure even if we don't build here for make dist to
157 # work
158 AC_CONFIG_SUBDIRS(libsysio)
159 ])
160
161 #
162 # LB_PATH_CRAY_PORTALS
163 #
164 # Support for external Cray portals
165 #
166 AC_DEFUN([LB_PATH_CRAY_PORTALS],
167 [LB_ARG_LIBS_INCLUDES([Cray Portals],[cray-portals])
168
169 if test x$cray_portals_includes != x ; then
170         if test ! -r $cray_portals_includes/portals/api.h ; then
171                 AC_MSG_ERROR([Cray portals headers were not found in $cray_portals_includes.  Please check the paths passed to --with-cray-portals or --with-cray-portals-includes.])
172         fi
173 fi
174 if test x$cray_portals_libs != x ; then
175         if test ! -r $cray_portals_libs/libportals.a ; then
176                 AC_MSG_ERROR([Cray portals libraries were not found in $cray_portals_libs.  Please check the paths passed to --with-cray-portals or --with-cray-portals-libs.])
177         fi
178 fi
179
180 if test x$cray_portals_includes != x -a x$cray_portals_libs != x ; then
181         cray_portals=yes
182         AC_DEFINE(CRAY_PORTALS, 1, [Building with Cray Portals])
183         CPPFLAGS="-I$cray_portals_includes $CPPFLAGS"
184         EXTRA_KCFLAGS="-I$cray_portals_includes $EXTRA_KCFLAGS"
185         # for liblustre + b_cray
186         CRAY_PORTALS_LIBS="$cray_portals_libs"
187         AC_SUBST(CRAY_PORTALS_LIBS)
188 else
189         cray_portals=no
190 fi
191 ])
192
193 #
194 # LB_PATH_SNMP
195 #
196 # check for in-tree snmp support
197 #
198 AC_DEFUN([LB_PATH_SNMP],
199 [LB_CHECK_FILE([$srcdir/snmp/lustre-snmp.c],[SNMP_DIST_SUBDIR="snmp"])
200 AC_SUBST(SNMP_DIST_SUBDIR)
201 AC_SUBST(SNMP_SUBDIR)
202 ])
203
204 #
205 # LB_CONFIG_MODULES
206 #
207 # Build kernel modules?
208 #
209 AC_DEFUN([LB_CONFIG_MODULES],
210 [AC_MSG_CHECKING([whether to build kernel modules])
211 AC_ARG_ENABLE([modules],
212         AC_HELP_STRING([--disable-modules],
213                         [disable building of Lustre kernel modules]),
214         [],[
215                 LC_TARGET_SUPPORTED([
216                         enable_modules='yes'
217                 ],[
218                         enable_modules='no'
219                 ])
220         ])
221 AC_MSG_RESULT([$enable_modules ($target_os)])
222
223 if test x$enable_modules = xyes ; then
224         case $target_os in
225                 linux*)
226                         LB_PROG_LINUX
227                         ;;
228                 darwin*)
229                         LB_PROG_DARWIN
230                         ;;
231                 *)
232                         # This is strange - Lustre supports a target we don't
233                         AC_MSG_ERROR([Modules are not supported on $target_os])
234                         ;;
235         esac
236 fi
237 ])
238
239 #
240 # LB_CONFIG_UTILS
241 #
242 # Build utils?
243 #
244 AC_DEFUN([LB_CONFIG_UTILS],
245 [AC_MSG_CHECKING([whether to build utilities])
246 AC_ARG_ENABLE([utils],
247         AC_HELP_STRING([--disable-utils],
248                         [disable building of Lustre utility programs]),
249         [],[enable_utils='yes'])
250 AC_MSG_RESULT([$enable_utils])
251 if test x$enable_utils = xyes ; then 
252         LB_CONFIG_INIT_SCRIPTS
253 fi
254 ])
255
256 #
257 # LB_CONFIG_TESTS
258 #
259 # Build tests?
260 #
261 AC_DEFUN([LB_CONFIG_TESTS],
262 [AC_MSG_CHECKING([whether to build Lustre tests])
263 AC_ARG_ENABLE([tests],
264         AC_HELP_STRING([--disable-tests],
265                         [disable building of Lustre tests]),
266         [],
267         [
268                 if test x$cray_portals = xyes ; then
269                         enable_tests='no'
270                 else
271                         enable_tests='yes'
272                 fi
273         ])
274 AC_MSG_RESULT([$enable_tests])
275 ])
276
277 #
278 # LB_CONFIG_DOCS
279 #
280 # Build docs?
281 #
282 AC_DEFUN([LB_CONFIG_DOCS],
283 [AC_MSG_CHECKING([whether to build docs])
284 AC_ARG_ENABLE(doc,
285         AC_HELP_STRING([--disable-doc],
286                         [skip creation of pdf documentation]),
287         [
288                 if test x$enable_doc = xyes ; then
289                     ENABLE_DOC=1           
290                 else
291                     ENABLE_DOC=0
292                 fi
293         ],[
294                 ENABLE_DOC=0
295                 enable_doc='no'
296         ])
297 AC_MSG_RESULT([$enable_doc])
298 AC_SUBST(ENABLE_DOC)
299 ])
300
301 #
302 # LB_CONFIG_INIT_SCRIPTS
303 #
304 # our init scripts only work on red hat linux
305 #
306 AC_DEFUN([LB_CONFIG_INIT_SCRIPTS],
307 [ENABLE_INIT_SCRIPTS=0
308 if test x$enable_utils = xyes ; then
309         AC_MSG_CHECKING([whether to install init scripts])
310         # our scripts only work on red hat systems
311         if test -f /etc/init.d/functions -a -f /etc/sysconfig/network ; then
312                 ENABLE_INIT_SCRIPTS=1
313                 AC_MSG_RESULT([yes])
314         else
315                 AC_MSG_RESULT([no])
316         fi
317 fi
318 AC_SUBST(ENABLE_INIT_SCRIPTS)
319 ])
320
321 #
322 # LB_CONFIG_HEADERS
323 #
324 # add -include config.h
325 #
326 AC_DEFUN([LB_CONFIG_HEADERS],
327 [AC_CONFIG_HEADERS([config.h])
328 CPPFLAGS="-include \$(top_builddir)/config.h $CPPFLAGS"
329 EXTRA_KCFLAGS="-include $PWD/config.h $EXTRA_KCFLAGS"
330 AC_SUBST(EXTRA_KCFLAGS)
331 ])
332
333 #
334 # LB_INCLUDE_RULES
335 #
336 # defines for including the toplevel Rules
337 #
338 AC_DEFUN([LB_INCLUDE_RULES],
339 [INCLUDE_RULES="include $PWD/build/Rules"
340 AC_SUBST(INCLUDE_RULES)
341 ])
342
343 #
344 # LB_PATH_DEFAULTS
345 #
346 # 'fixup' default paths
347 #
348 AC_DEFUN([LB_PATH_DEFAULTS],
349 [# directories for binaries
350 AC_PREFIX_DEFAULT([/usr])
351
352 sysconfdir='/etc'
353 AC_SUBST(sysconfdir)
354
355 # Directories for documentation and demos.
356 docdir='${datadir}/doc/$(PACKAGE)'
357 AC_SUBST(docdir)
358
359 LN_PATH_DEFAULTS
360 #LP_PATH_DEFAULTS
361 LC_PATH_DEFAULTS
362 ])
363
364 #
365 # LB_PROG_CC
366 #
367 # checks on the C compiler
368 #
369 AC_DEFUN([LB_PROG_CC],
370 [AC_PROG_RANLIB
371 AC_MSG_CHECKING([for buggy compiler])
372 CC_VERSION=`$CC -v 2>&1 | grep "^gcc version"`
373 bad_cc() {
374         AC_MSG_RESULT([buggy compiler found!])
375         echo
376         echo "   '$CC_VERSION'"
377         echo "  has been known to generate bad code, "
378         echo "  please get an updated compiler."
379         AC_MSG_ERROR([sorry])
380 }
381 case "$CC_VERSION" in
382         "gcc version 2.95"*)
383                 bad_cc
384                 ;;
385         # ost_pack_niobuf putting 64bit NTOH temporaries on the stack
386         # without "sub    $0xc,%esp" to protect the stack from being
387         # stomped on by interrupts (bug 606)
388         "gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)")
389                 bad_cc
390                 ;;
391         # mandrake's similar sub 0xc compiler bug
392         # http://marc.theaimsgroup.com/?l=linux-kernel&m=104748366226348&w=2
393         "gcc version 2.96 20000731 (Mandrake Linux 8.1 2.96-0.62mdk)")
394                 bad_cc
395                 ;;
396         *)
397                 AC_MSG_RESULT([no known problems])
398                 ;;
399 esac
400
401 # ---------  unsigned long long sane? -------
402 AC_CHECK_SIZEOF(unsigned long long, 0)
403 echo "---> size SIZEOF $SIZEOF_unsigned_long_long"
404 echo "---> size SIZEOF $ac_cv_sizeof_unsigned_long_long"
405 if test $ac_cv_sizeof_unsigned_long_long != 8 ; then
406         AC_MSG_ERROR([** we assume that sizeof(long long) == 8.  Tell phil@clusterfs.com])
407 fi
408
409 AC_MSG_CHECKING([if $CC accepts -m64])
410 CC_save="$CC"
411 CC="$CC -m64"
412 AC_TRY_COMPILE([],[],[
413         AC_MSG_RESULT([yes])
414 ],[
415         AC_MSG_RESULT([no])
416         CC="$CC_save"
417 ])
418
419 CPPFLAGS="-I\$(top_builddir)/lnet/include -I\$(top_srcdir)/lnet/include -I\$(top_builddir)/lustre/include -I\$(top_srcdir)/lustre/include $CPPFLAGS"
420
421 LLCPPFLAGS="-D__arch_lib__ -D_LARGEFILE64_SOURCE=1"
422 AC_SUBST(LLCPPFLAGS)
423
424 LLCFLAGS="-g -Wall -fPIC"
425 AC_SUBST(LLCFLAGS)
426
427 # everyone builds against lnet and lustre
428 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -g -I$PWD/lnet/include -I$PWD/lustre/include"
429 AC_SUBST(EXTRA_KCFLAGS)
430 ])
431
432 #
433 # LB_CONTITIONALS
434 #
435 # AM_CONDITIONAL instances for everything
436 # (so that portals/lustre can disable some if needed)
437 AC_DEFUN([LB_CONDITIONALS],
438 [AM_CONDITIONAL(MODULES, test x$enable_modules = xyes)
439 AM_CONDITIONAL(UTILS, test x$enable_utils = xyes)
440 AM_CONDITIONAL(TESTS, test x$enable_tests = xyes)
441 AM_CONDITIONAL(DOC, test x$ENABLE_DOC = x1)
442 AM_CONDITIONAL(CRAY_PORTALS, test x$cray_portals != xno)
443 AM_CONDITIONAL(INIT_SCRIPTS, test x$ENABLE_INIT_SCRIPTS = "x1")
444 AM_CONDITIONAL(LINUX, test x$lb_target_os = "xlinux")
445 AM_CONDITIONAL(DARWIN, test x$lb_target_os = "xdarwin")
446
447 # this lets lustre cancel libsysio, per-branch or if liblustre is
448 # disabled
449 if test "x$LIBSYSIO_SUBDIR" = xlibsysio ; then
450         if test "x$with_sysio" != xyes ; then
451                 SYSIO=""
452                 LIBSYSIO_SUBDIR=""
453         fi
454 fi
455 AC_SUBST(LIBSYSIO_SUBDIR)
456 AC_SUBST(SYSIO)
457
458 LB_LINUX_CONDITIONALS
459 LB_DARWIN_CONDITIONALS
460
461 LN_CONDITIONALS
462 #LP_CONDITIONALS
463 LC_CONDITIONALS
464 ])
465
466 #
467 # LB_CONFIGURE
468 #
469 # main configure steps
470 #
471 AC_DEFUN([LB_CONFIGURE],
472 [LB_CANONICAL_SYSTEM
473
474 LB_INCLUDE_RULES
475
476 LB_PATH_DEFAULTS
477
478 LB_PROG_CC
479
480 LB_PATH_LIBSYSIO
481 LB_PATH_CRAY_PORTALS
482 LB_PATH_SNMP
483
484 LB_CONFIG_DOCS
485 LB_CONFIG_UTILS
486 LB_CONFIG_TESTS
487 LC_CONFIG_CLIENT_SERVER
488
489 LB_CONFIG_MODULES
490
491 LC_CONFIG_LIBLUSTRE
492
493 LN_CONFIGURE
494 #LP_CONFIGURE
495 LC_CONFIGURE
496 if test "$SNMP_DIST_SUBDIR" ; then
497         LS_CONFIGURE
498 fi
499
500 LB_CONDITIONALS
501 LB_CONFIG_HEADERS
502
503 AC_CONFIG_FILES(
504 [Makefile:build/Makefile.in.toplevel]
505 [autoMakefile
506 build/autoMakefile
507 build/autoconf/Makefile
508 build/Rules
509 build/lustre.spec
510 ])
511
512 LN_CONFIG_FILES
513 #LP_CONFIG_FILES
514 LC_CONFIG_FILES
515 if test "$SNMP_DIST_SUBDIR" ; then
516         LS_CONFIG_FILES
517 fi
518
519 AC_SUBST(ac_configure_args)
520
521 MOSTLYCLEANFILES='.*.cmd .*.flags *.o *.ko *.mod.c .depend .*.1.*'
522 AC_SUBST(MOSTLYCLEANFILES)
523
524 AC_OUTPUT
525
526 cat <<_ACEOF
527
528 CC:            $CC
529 LD:            $LD
530 CPPFLAGS:      $CPPFLAGS
531 LLCPPFLAGS:    $LLCPPFLAGS
532 CFLAGS:        $CFLAGS
533 EXTRA_KCFLAGS: $EXTRA_KCFLAGS
534 LLCFLAGS:      $LLCFLAGS
535
536 Type 'make' to build Lustre.
537 _ACEOF
538 ])