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

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

Re-enable auto-detection of process binding in Hydra by default. Also,
corrected some errors while building Hydra alone on Solaris.

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