root/mpich2/trunk/src/pm/hydra/configure.in @ 4887

Revision 4887, 13.0 KB (checked in by balaji, 5 months ago)

Warning stomp.

Line 
1AC_PREREQ(2.62)
2#
3# (C) 2008 by Argonne National Laboratory.
4#     See COPYRIGHT in top-level directory.
5#
6
7AC_INIT([Hydra], [0.1])
8AC_CONFIG_AUX_DIR(mpl/confdb)
9AM_INIT_AUTOMAKE([-Wall -Werror foreign 1.11])
10
11dnl When built as a subconfigure, pull in FLAGS from above
12PAC_SUBCONFIG_INIT()
13
14AC_CONFIG_HEADER(include/hydra_config.h)
15
16dnl Bug in autoconf adds -O2 and -g by default. Make sure we only get
17dnl the flags we want.
18save_cflags=$CFLAGS
19AC_PROG_CC
20AC_TYPE_SIZE_T
21CFLAGS=$save_cflags
22
23AM_PROG_MKDIR_P
24AC_PROG_RANLIB
25PAC_ARG_CACHING
26PAC_ARG_STRICT
27PAC_C_GNU_ATTRIBUTE
28PAC_CC_FUNCTION_NAME_SYMBOL
29
30dnl Check if the necessary headers are available
31AC_CHECK_HEADERS(unistd.h stdlib.h string.h strings.h stdarg.h sys/types.h sys/socket.h \
32                 sched.h pthread.h sys/stat.h sys/param.h netinet/in.h netinet/tcp.h \
33                 sys/un.h netdb.h)
34
35dnl Check if the pthread library is present. Apparently, just checking
36dnl for pthread.h is not sufficient.
37AC_CHECK_LIB(pthread,pthread_create,pthread_lib_exists=yes,pthread_lib_exists=no)
38
39dnl Check if the upper-level enabled threads support
40if test "$MPICH2_THREAD_PACKAGE" != "none" -a "$pthread_lib_exists" = "yes" ; then
41   AC_DEFINE(HAVE_THREAD_SUPPORT,1,[Define thread support])
42   LDFLAGS="$LDFLAGS -lpthread"
43fi
44
45AC_CHECK_LIB(socket,socket,LDFLAGS="$LDFLAGS -lsocket",)
46AC_CHECK_LIB(gethostbyname,nsl,LDFLAGS="$LDFLAGS -lnsl",)
47
48dnl Check for necessary functions
49AC_CHECK_FUNCS(gettimeofday time strdup sigaction signal usleep alloca unsetenv \
50               strerror strsignal putenv)
51
52# putenv() sets environment variable
53AC_HAVE_FUNCS(putenv)
54if test "$ac_cv_func_putenv" = "yes" ; then
55    PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],putenv)
56fi
57
58dnl Check what we need to do about the environ extern
59AC_CACHE_CHECK([for environ in unistd.h],pac_cv_environ_in_unistd,
60        [AC_TRY_COMPILE([#include <unistd.h>],[char **x = environ;],
61        pac_cv_environ_in_unistd=yes,pac_cv_environ_in_unistd=no)])
62if test "$pac_cv_environ_in_unistd" = "yes" ; then
63    # We have environ defined in unistd.h; we are done
64    AC_DEFINE(HAVE_EXTERN_ENVIRON,1,[Define if environ extern is available])
65else
66    # See if we can declare it
67    AC_CACHE_CHECK([for manually declared extern environ], pac_cv_manual_extern_environ,
68        [AC_TRY_LINK([#include <unistd.h>],[extern char ** environ; char **x = environ;],
69        pac_cv_manual_extern_environ=yes,pac_cv_manual_extern_environ=no)])
70    if test "$pac_cv_manual_extern_environ" = "yes" ; then
71        # We can manually declare the extern
72        AC_DEFINE(MANUAL_EXTERN_ENVIRON,1,[Define if environ decl needed])
73        AC_DEFINE(HAVE_EXTERN_ENVIRON,1,[Define if environ extern is available])
74    fi
75fi
76
77dnl Check what boot-strap server we should use
78AC_ARG_WITH(hydra-bss, [  --with-hydra-bss           Boot-strap Server],
79                    [ hydra_bss=$withval ],
80                    [ hydra_bss="ssh,rsh,fork,slurm" ])
81AC_MSG_CHECKING(boot-strap server)
82AC_MSG_RESULT($hydra_bss)
83hydra_bss_names="`echo $hydra_bss | sed -e 's/:/ /g' -e 's/,/ /g'`"
84AC_DEFINE_UNQUOTED(HYDRA_BSS_NAMES,"$hydra_bss_names",[Definition of enabled bootstrap servers])
85AM_SUBST_NOTMAKE(hydra_bss_names)
86AC_SUBST(hydra_bss_names)
87
88hydra_bss_ssh=false
89hydra_bss_rsh=false
90hydra_bss_fork=false
91hydra_bss_slurm=false
92for hydra_bss_name in ${hydra_bss_names}; do
93    if test -z "${hydra_default_bss}" ; then
94       hydra_default_bss=$hydra_bss_name
95    fi
96    hydra_bss_makefiles="$hydra_bss_makefiles bootstrap/${hydra_bss_name}/Makefile"
97    hydra_bss_init_decl="${hydra_bss_init_decl}
98HYD_Status HYD_BSCI_${hydra_bss_name}_init(void);"
99    hydra_bss_name_array="${hydra_bss_name_array} \"${hydra_bss_name}\", "
100    hydra_bss_init_array="${hydra_bss_init_array} HYD_BSCI_${hydra_bss_name}_init, "
101
102    case "$hydra_bss_name" in
103        ssh)
104                hydra_bss_ssh=true
105                ;;             
106        rsh)
107                hydra_bss_rsh=true
108                ;;
109        fork)
110                hydra_bss_fork=true
111                ;;
112        slurm)
113                hydra_bss_slurm=true
114                ;;
115        *)
116                ;;
117    esac
118
119done
120hydra_bss_name_array="${hydra_bss_name_array} NULL"
121hydra_bss_init_array="${hydra_bss_init_array} NULL"
122AC_DEFINE_UNQUOTED(HYDRA_DEFAULT_BSS,"$hydra_default_bss",[Default bootstrap server])
123AM_SUBST_NOTMAKE(hydra_bss_init_decl)
124AM_SUBST_NOTMAKE(hydra_bss_name_array)
125AM_SUBST_NOTMAKE(hydra_bss_init_array)
126AC_SUBST(hydra_bss_init_decl)
127AC_SUBST(hydra_bss_name_array)
128AC_SUBST(hydra_bss_init_array)
129AM_CONDITIONAL([hydra_bss_ssh], [$hydra_bss_ssh])
130AM_CONDITIONAL([hydra_bss_rsh], [$hydra_bss_rsh])
131AM_CONDITIONAL([hydra_bss_fork], [$hydra_bss_fork])
132AM_CONDITIONAL([hydra_bss_slurm], [$hydra_bss_slurm])
133
134
135dnl Check what communication sub-system we should use
136AC_ARG_WITH(hydra-css, [  --with-hydra-css           Communication Sub-system],
137                    [ hydra_css=$withval ],
138                    [ hydra_css="none" ])
139AC_MSG_CHECKING(communication subsystem)
140AC_MSG_RESULT($hydra_css)
141hydra_css_names="`echo $hydra_css | sed -e 's/:/ /g' -e 's/,/ /g'`"
142AC_DEFINE_UNQUOTED(HYDRA_CSS_NAMES,"$hydra_css_names",[Definition of enabled communication systems])
143AM_SUBST_NOTMAKE(hydra_css_names)
144AC_SUBST(hydra_css_names)
145
146hydra_css_none=false
147for hydra_css_name in ${hydra_css_names}; do
148    if test -z "${hydra_default_css}" ; then
149       hydra_default_css=$hydra_css_name
150    fi
151    hydra_css_makefiles="$hydra_css_makefiles css/${hydra_css_name}/Makefile"
152    hydra_css_init_decl="${hydra_css_init_decl}
153HYD_Status HYD_CSSI_${hydra_css_name}_init(void);"
154    hydra_css_name_array="${hydra_css_name_array} \"${hydra_css_name}\", "
155    hydra_css_init_array="${hydra_css_init_array} HYD_CSSI_${hydra_css_name}_init, "
156
157    case "$hydra_css_name" in
158        dummy)
159                hydra_css_none=true
160                ;;             
161        *)
162                ;;
163    esac
164
165done
166hydra_css_name_array="${hydra_css_name_array} NULL"
167hydra_css_init_array="${hydra_css_init_array} NULL"
168AC_DEFINE_UNQUOTED(HYDRA_DEFAULT_CSS,"$hydra_default_css",[Default communication sub-system])
169AM_SUBST_NOTMAKE(hydra_css_init_decl)
170AM_SUBST_NOTMAKE(hydra_css_name_array)
171AM_SUBST_NOTMAKE(hydra_css_init_array)
172AC_SUBST(hydra_css_init_decl)
173AC_SUBST(hydra_css_name_array)
174AC_SUBST(hydra_css_init_array)
175AM_CONDITIONAL([hydra_css_none], [$hydra_css_none])
176
177
178dnl Check what resource management kernel we should use
179AC_ARG_WITH(hydra-rmk, [  --with-hydra-rmk        Resource Management Kernel],
180                    [ hydra_rmk=$withval ],
181                    [ hydra_rmk="dummy" ])
182AC_MSG_CHECKING(resource management kernel)
183AC_MSG_RESULT($hydra_rmk)
184hydra_rmk_names="`echo $hydra_rmk | sed -e 's/:/ /g' -e 's/,/ /g'`"
185AC_DEFINE_UNQUOTED(HYDRA_RMK_NAMES,"$hydra_rmk_names",[Enabled resource management kernels])
186AM_SUBST_NOTMAKE(hydra_rmk_names)
187AC_SUBST(hydra_rmk_names)
188
189hydra_rmk_dummy=false
190for hydra_rmk_name in ${hydra_rmk_names}; do
191    if test -z "${hydra_default_rmk}" ; then
192       hydra_default_rmk=$hydra_rmk_name
193    fi
194    hydra_rmk_makefiles="$hydra_rmk_makefiles rmk/${hydra_rmk_name}/Makefile"
195    hydra_rmk_init_decl="${hydra_rmk_init_decl}
196HYD_Status HYD_RMKI_${hydra_rmk_name}_init(void);"
197    hydra_rmk_name_array="${hydra_rmk_name_array} \"${hydra_rmk_name}\", "
198    hydra_rmk_init_array="${hydra_rmk_init_array} HYD_RMKI_${hydra_rmk_name}_init, "
199
200    case "$hydra_rmk_name" in
201        dummy)
202                hydra_rmk_dummy=true
203                ;;             
204        *)
205                ;;
206    esac
207
208done
209hydra_rmk_name_array="${hydra_rmk_name_array} NULL"
210hydra_rmk_init_array="${hydra_rmk_init_array} NULL"
211AC_DEFINE_UNQUOTED(HYDRA_DEFAULT_RMK,"$hydra_default_rmk",[Default resource management kernel])
212AM_SUBST_NOTMAKE(hydra_rmk_init_decl)
213AM_SUBST_NOTMAKE(hydra_rmk_name_array)
214AM_SUBST_NOTMAKE(hydra_rmk_init_array)
215AC_SUBST(hydra_rmk_init_decl)
216AC_SUBST(hydra_rmk_name_array)
217AC_SUBST(hydra_rmk_init_array)
218AM_CONDITIONAL([hydra_rmk_dummy], [$hydra_rmk_dummy])
219
220
221dnl Check what process manager we should use
222AC_ARG_WITH(hydra-pm, [  --with-hydra-pm               Process Manager],
223                [ hydra_pm=$withval ],
224                [ hydra_pm=pmiserv ])
225AC_MSG_CHECKING(process manager)
226AC_MSG_RESULT($hydra_pm)
227AC_SUBST(hydra_pm)
228AM_CONDITIONAL([hydra_pm_pmiserv], [test $hydra_pm = "pmiserv"])
229
230
231dnl Check what UI we should use
232AC_ARG_WITH(hydra-ui, [  --with-hydra-ui         User Interface],
233                [ hydra_ui=$withval ],
234                [ hydra_ui=mpiexec ])
235AC_MSG_CHECKING(user interface)
236AC_MSG_RESULT($hydra_ui)
237AC_SUBST(hydra_ui)
238AM_CONDITIONAL([hydra_ui_mpiexec], [test $hydra_ui = "mpiexec"])
239
240dnl Check what communication sub-system we should use
241AC_ARG_WITH(hydra-css, [  --with-hydra-css               Communication Sub-system],
242                [ hydra_css=$withval ],
243                [ hydra_css= ])
244AC_MSG_CHECKING(communication subsystem)
245if test "x$hydra_css" != "x" ; then
246   AC_MSG_RESULT($hydra_css)
247else
248   AC_MSG_RESULT(none)
249fi
250AC_SUBST(hydra_css)
251
252dnl Debugging support
253AC_ARG_ENABLE(g, [  --enable-g              Enable Debugging],
254                 [ debug=$enableval ],
255                 [ debug=no ])
256AC_MSG_CHECKING(debugging support)
257AC_MSG_RESULT($debug)
258if test "$debug" = "yes"; then
259   CFLAGS="$CFLAGS -g"
260   AC_DEFINE(ENABLE_DEBUG,1,[Define if debugging support is enabled])
261fi
262
263dnl Warning messages
264AC_ARG_ENABLE(warnings, [  --enable-warnings              Enable warnings],
265                        [ WARNINGS=$enableval ],
266                        [ WARNINGS=no ])
267AC_MSG_CHECKING(warnings)
268AC_MSG_RESULT($WARNINGS)
269if test "$WARNINGS" = "yes"; then
270   AC_DEFINE(ENABLE_WARNINGS,1,[Define if warnings are enabled])
271fi
272
273dnl Process Binding
274AC_ARG_ENABLE(hydra-procbind, [  --enable-hydra-procbind       Process Binding],
275                              [ procbind=$enableval ],
276                              [ procbind=auto ])
277AC_MSG_CHECKING(process binding)
278
279if test "$procbind" = "auto" ; then
280   old_CFLAGS=$CFLAGS
281   CFLAGS="$CFLAGS -I${srcdir}/utils/plpa"
282   AC_TRY_LINK([#include <plpa_internal.h>],[
283PLPA_NAME(api_type_t) p;
284PLPA_NAME(api_probe)(&p);
285],plpa_works=yes,plpa_works=no)
286   CFLAGS=$old_CFLAGS
287   if test "$plpa_works" = "yes" ; then
288      procbind=yes
289   else
290      procbind=no
291   fi
292fi
293
294AC_MSG_RESULT($procbind)
295if test "$procbind" = "yes"; then
296   AC_DEFINE(HAVE_PROC_BINDING,1,[Define if process binding is enabled])
297   opt_utils_makefiles="${opt_utils_makefiles} utils/plpa/Makefile utils/bind/Makefile"
298   opt_utils="${opt_utils} plpa bind"
299fi
300AM_CONDITIONAL([hydra_procbind], [test "${procbind}" = "yes"])
301AC_SUBST(opt_utils)
302
303dnl Check if __VA_ARGS__ is defined by the compiler
304AC_MSG_CHECKING([whether the compiler allows __VA_ARGS__])
305rm -f conftest.c
306cat > conftest.c <<EOF
307#include <stdio.h>
308#define my_print(...) printf(__VA_ARGS__)
309int main()
310{
311    my_print("woohoo!");
312    return 0;
313}
314EOF
315pac_tmp_compile='$CC $CFLAGS conftest.c -o conftest'
316if AC_TRY_EVAL(pac_tmp_compile) && test -s conftest ; then
317   AC_DEFINE(COMPILER_ACCEPTS_VA_ARGS,1,[Define if compiler supports __VA_ARGS__])
318fi
319rm -f conftest*
320
321dnl Check for functions.  This invokes another test if the function is
322dnl found.  The braces around the second test are essential.
323dnl AC_CHECK_FUNC(setpgrp,[AC_FUNC_SETPGRP])
324AC_CHECK_FUNCS(strsignal)
325if test "$ac_cv_func_strsignal" = "yes" ; then
326    PAC_FUNC_NEEDS_DECL([#include <string.h>],strsignal)
327fi
328
329dnl Check for signal handlers
330AC_CHECK_FUNCS(sigaction signal sigset)
331sigaction_ok=no
332if test "$ac_cv_func_sigaction" = "yes" ; then
333    # Make sure that the fields that we need in sigaction are defined
334    AC_CACHE_CHECK([for struct sigaction and sa_handler],
335    pac_cv_struct_sigaction_with_sa_handler,[
336    AC_TRY_COMPILE([#include <signal.h>],[
337struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
338act.sa_handler = SIG_IGN;],
339    pac_cv_struct_sigaction_with_sa_handler=yes,
340    pac_cv_struct_sigaction_with_sa_handler=no)])
341    if test "$pac_cv_struct_sigaction_with_sa_handler" = "no" ; then
342        AC_CACHE_CHECK([for struct sigaction and sa_handler with _POSIX_SOURCE],
343        pac_cv_struct_sigaction_with_sa_handler_needs_posix,[
344        AC_TRY_COMPILE([#define _POSIX_SOURCE
345#include <signal.h>],[
346struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
347act.sa_handler = SIG_IGN;],
348        pac_cv_struct_sigaction_with_sa_handler_needs_posix=yes,
349        pac_cv_struct_sigaction_with_sa_handler_needs_posix=no)])
350        if test "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" = "yes" ; then
351            sigaction_ok=yes
352        fi
353    else
354        sigaction_ok=yes
355    fi
356fi
357
358# Decide on the signal handler to use
359if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
360    if test "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" = yes ; then
361        AC_DEFINE(NEEDS_POSIX_FOR_SIGACTION,1,[Define if _POSIX_SOURCE needed to get sigaction])
362    fi
363    AC_DEFINE(USE_SIGACTION,,[Define if sigaction should be used to set signals])
364elif test "$ac_cv_func_signal" = "yes" ; then
365    AC_DEFINE(USE_SIGNAL,,[Define if signal should be used to set signals])
366fi
367
368# gethostname() returns host name
369AC_CHECK_FUNCS(gethostname)
370if test "$ac_cv_func_gethostname" = "yes" ; then
371    # Do we need to declare gethostname?
372    PAC_FUNC_NEEDS_DECL([#include <unistd.h>],gethostname)
373fi
374
375dnl Substitute common variables. Some versions of autoconf have
376dnl trouble with this.
377AC_SUBST(CC)
378AC_SUBST(CFLAGS)
379AC_SUBST(LDFLAGS)
380AC_SUBST(CC_SHL)
381AC_SUBST(C_LINK_SHL)
382
383ENABLE_SHLIB=none
384AC_SUBST(ENABLE_SHLIB)
385AC_SUBST(RANLIB)
386AC_SUBST(MAKE_DEPEND_C)
387
388AC_PROG_INSTALL
389
390AC_CONFIG_SUBDIRS(mpl)
391
392dnl Place holder macro for finalization
393PAC_SUBCONFIG_FINALIZE()
394
395dnl Final output
396AC_OUTPUT(Makefile
397        bootstrap/src/bsci_init.c
398        bootstrap/include/bsci.h
399        rmk/src/rmki_init.c
400        rmk/include/rmki.h
401        css/src/cssi_init.c
402        css/include/cssi.h
403)
Note: See TracBrowser for help on using the browser.