#! /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.7" 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="" mca_no_configure_modules_file="config/mca_no_configure_modules.m4" mca_no_config_list_file="mca_no_config_list" mca_no_config_amc_file="mca_no_config_amc" ############################################################################ # # 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 in a given directory # # INPUT: # - directory to run in # - LAM top directory # # OUTPUT: # none # # SIDE EFFECTS: # - assumes that the directory is ready to have the GNU tools run # in it (i.e., there's some form of configure.*) # - may preprocess the directory before running the GNU tools # (e.g., generale Makefile.am's from configure.params, etc.) # ############################################################################## run_gnu_tools() { rgt_dir="$1" rgt_lam_topdir="$2" # Sanity check to ensure that there's a configure.in or # configure.ac file here, or if there's a configure.params # file and we need to run make_configure.pl. if test -f configure.params -a -f configure.stub -a \ -x "$rgt_lam_topdir/config/mca_make_configure.pl"; then cat < Err... there's no configure.in or configure.ac file in this directory" --> Confused; aborting in despair EOF 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 echo "*** Running 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 include/mpi.h; then rm -rf libltdl src/libltdl src/ltdl.h run_and_check $lam_libtoolize --automake --copy --ltdl mv libltdl src echo "Adjusting libltdl for LAM :-(" echo " -- patching for argz bugfix in libtool 1.5" cd src/libltdl if test "`grep 'while ((before >= *pargz) && (before[-1] != LT_EOS_CHAR))' ltdl.c`" != ""; then patch -N -p0 <= *pargz) && (before[-1] != LT_EOS_CHAR)) + while ((before > *pargz) && (before[-1] != LT_EOS_CHAR)) --before; { EOF else echo " ==> your libtool doesn't need this! yay!" fi 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 } ############################################################################## # # process_dir - look at the files present in a given directory, and do # one of the following: # - skip/ignore it # - run custom autogen.sh in it # - run the GNU tools in it # - get a list of Makefile.am's to add to the top-level configure # # 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 # ############################################################################## process_dir() { pd_dir="$1" pd_lam_topdir="$2" pd_cur_dir="`pwd`" if test -d "$pd_dir"; then cd "$pd_dir" # See if the package doesn't want us to set it up if test -f .lam_no_gnu; then cat <> $pd_list_file <> $pd_amc_file <> $pd_list_file done # Get all the version numbers pd_ver="`sh $pd_get_ver $pd_ver_file --all`" pd_ver_full="`echo $pd_ver | cut -d: -f1`" pd_ver_major="`echo $pd_ver | cut -d: -f2`" pd_ver_minor="`echo $pd_ver | cut -d: -f3`" pd_ver_release="`echo $pd_ver | cut -d: -f4`" pd_ver_alpha="`echo $pd_ver | cut -d: -f5`" pd_ver_beta="`echo $pd_ver | cut -d: -f6`" pd_ver_svn="`echo $pd_ver | cut -d: -f7`" cat >> $pd_list_file <> $pd_amc_file < Adding to top-level configure no-configure subdirs: --> $pd_dir --> Adding to top-level configure AC_CONFIG_FILES list: --> $PARAM_CONFIG_FILES EOF fi else cat < "$mca_no_configure_modules_file" <