#! /bin/bash # # $HEADER$ # # This script is run on developer copies of LAM/MPI -- *not* # distribution tarballs. ############################################################################## # # User-definable parameters (search path and minimum supported versions) # ############################################################################## lam_aclocal_search="aclocal" lam_autoheader_search="autoheader" lam_autoconf_search="autoconf" lam_libtoolize_search="libtoolize glibtoolize" lam_automake_search="automake" lam_automake_version="1.6" lam_autoconf_version="2.58" lam_libtool_version="1.5" ############################################################################## # # Global variables - should not need to modify defaults # ############################################################################## lam_aclocal_version="$lam_automake_version" lam_autoheader_version="$lam_autoconf_version" lam_libtoolize_version="$lam_libtool_version" # program names to execute lam_aclocal="" lam_autoheader="" lam_autoconf="" lam_libtoolize="" lam_automake="" ############################################################################ # # Version check - does major,minor,release check (hopefully ignoring # beta et al) # # INPUT: # - minimum version allowable # - version we found # # OUTPUT: # - 0 version is ok # - 1 version is not ok # # SIDE EFFECTS: # none # ############################################################################## check_version() { local min_version="$1" local version="$2" local min_major_version="`echo $min_version | cut -f1 -d.`" local min_minor_version="`echo $min_version | cut -f2 -d.`" local min_release_version="`echo $min_version | cut -f3 -d.`" if test "$min_release_version" = "" ; then min_release_version=0 fi local major_version="`echo $version | cut -f1 -d.`" local minor_version="`echo $version | cut -f2 -d.`" local release_version="`echo $version | cut -f3 -d.`" if test "$release_version" = "" ; then release_version=0 fi if test $min_major_version -lt $major_version ; then return 0 elif test $min_major_version -gt $major_version ; then return 1 fi if test $min_minor_version -lt $minor_version ; then return 0 elif test $min_minor_version -gt $minor_version ; then return 1 fi if test $min_release_version -gt $release_version ; then return 1 fi return 0 } ############################################################################## # # find app - find a version of the given application that is new # enough for use # # INPUT: # - name of application (eg aclocal) # # OUTPUT: # none # # SIDE EFFECTS: # - sets application_name variable to working executable name # - aborts on error finding application # ############################################################################## find_app() { local app_name="$1" local version="0.0.0" local min_version="99.99.99" local found=0 eval "min_version=\"\$lam_${app_name}_version\"" eval "search_path=\"\$lam_${app_name}_search\"" for i in $search_path ; do version="`${i} --version 2>&1`" if test "$?" != 0 ; then continue fi version="`echo $version | cut -f2 -d')'`" version="`echo $version | cut -f1 -d' '`" if check_version $min_version $version ; then eval "lam_${app_name}=\"${i}\"" found=1 break fi done if test "$found" = "0" ; then cat < Errr... there's no configure.in or configure.ac file!" fi if test -n "$fad_cfile"; then auxdir="`grep AC_CONFIG_AUX_DIR $fad_cfile | cut -d\( -f 2 | cut -d\) -f 1`" fi if test -f "$auxdir/$fad_file"; then rm -f "$auxdir/$fad_file" fi fi } ############################################################################## # # run_gnu_tools - run the GNU tools on a given directory # # INPUT: # - directory to run in # - LAM top directory # # OUTPUT: # none # # SIDE EFFECTS: # - skips directories with .lam_no_gnu .lam_ignore # - uses provided autogen.sh if available # ############################################################################## run_gnu_tools() { rgt_dir="$1" rgt_lam_topdir="$2" rgt_cur_dir="`pwd`" if test -d "$rgt_dir"; then cd "$rgt_dir" # See if the package doesn't want us to set it up if test -f .lam_no_gnu; then cat < Found configure.params. Running mca_make_configure.pl" "$rgt_lam_topdir/config/mca_make_configure.pl" \ --lamdir "$rgt_lam_topdir" \ --moduledir "`pwd`" if test "$?" != "0"; then echo "*** autogen.sh failed to complete!" exit 1 fi happy=1 file=configure.ac elif test -f configure.in; then happy=1 file=configure.in elif test -f configure.ac; then happy=1 file=configure.ac else echo "---> Err... there's no configure.in or configure.ac file in this directory" echo "---> I'm confused, so I'm going to abort" exit 1 fi unset happy # Find and delete the GNU helper script files find_and_delete config.guess find_and_delete config.sub find_and_delete depcomp find_and_delete install-sh find_and_delete ltconfig find_and_delete ltmain.sh find_and_delete missing find_and_delete mkinstalldirs find_and_delete libtool # Run the GNU tools run_and_check $lam_aclocal if test "`grep AC_CONFIG_HEADER $file`" != "" -o \ "`grep AM_CONFIG_HEADER $file`" != ""; then run_and_check $lam_autoheader fi run_and_check $lam_autoconf # We only need the libltdl stuff for the top-level # configure, not any of the MCA modules. if test -f src/include/mpi.h; then rm -rf libltdl src/mca/libltdl src/mca/ltdl.h run_and_check $lam_libtoolize --automake --copy --ltdl mv libltdl src/mca echo "Adjusting libltdl for LAM :-(" echo " -- adding sym link for src/mca/ltdl.h" cd src/mca ln -s libltdl/ltdl.h ltdl.h cd ../.. echo " -- patching for argz bugfix in libtool 1.5" cd src/mca/libltdl patch -p0 <= *pargz) && (before[-1] != LT_EOS_CHAR)) + while ((before > *pargz) && (before[-1] != LT_EOS_CHAR)) --before; { EOF cd ../../.. echo " -- patching configure for broken -c/-o compiler test" sed -e 's/chmod -w \./#LAM\/MPI FIX: chmod -w ./' \ configure > configure.new mv configure.new configure chmod a+x configure else run_and_check $lam_libtoolize --automake --copy fi run_and_check $lam_automake --foreign -a --copy --include-deps fi # Go back to the original directory cd "$rgt_cur_dir" fi unset rgt_dir rgt_cur_dir } ############################################################################## # # run_global - run the config in the top LAM dir and all MCA modules # # INPUT: # none # # OUTPUT: # none # # SIDE EFFECTS: # ############################################################################## run_global() { # Run the config in the top-level directory run_gnu_tools . . # Now run the config in every directory in src/mca/[lam|mpi]/*/* # that has a configure.in or configure.ac script rg_cwd="`pwd`" echo $rg_cwd for type in src/mca/lam/* src/mca/mpi/*; do if test -d "$type"; then for module in "$type"/*; do if test -d "$module"; then if test -f "$module/configure.in" -o \ -f "$module/configure.params" -o \ -f "$module/configure.ac"; then run_gnu_tools "$module" "$rg_cwd" fi fi done fi done unset type module } ############################################################################## # # main - do the real work... # ############################################################################## # announce echo "[Checking] command line parameters" # Check the command line to see if we should run the whole shebang, or # just in this current directory. want_local=no lamdir= for arg in $*; do case $arg in -l) want_local=yes ;; -lamdir|--lamdir|-lam|--lam) lamdir="$1" ;; *) ;; esac done # announce echo "[Checking] prerequisites" # sanity check to make sure user isn't being stupid if test ! -d CVS ; then cat <