Patch autotools output in all sub directories where autoreconf will be invoked. Fixes trac:2599.
This commit was SVN r24171. The following Trac tickets were found above: Ticket 2599 --> https://svn.open-mpi.org/trac/ompi/ticket/2599
Этот коммит содержится в:
родитель
de97962aac
Коммит
679317f632
198
autogen.pl
198
autogen.pl
@ -65,7 +65,13 @@ my $hostname;
|
|||||||
my $full_hostname;
|
my $full_hostname;
|
||||||
|
|
||||||
# Patch program
|
# Patch program
|
||||||
my $patch_prog;
|
my $patch_prog = "patch";
|
||||||
|
# Solaris "patch" doesn't understand unified diffs, and will cause
|
||||||
|
# autogen.pl to hang with a "File to patch:" prompt. Default to Linux
|
||||||
|
# "patch", but use "gpatch" on Solaris.
|
||||||
|
if ($^O eq "solaris") {
|
||||||
|
$patch_prog = "gpatch";
|
||||||
|
}
|
||||||
|
|
||||||
$username = getpwuid($>);
|
$username = getpwuid($>);
|
||||||
$full_hostname = `hostname`;
|
$full_hostname = `hostname`;
|
||||||
@ -139,7 +145,7 @@ sub process_subdir {
|
|||||||
|
|
||||||
# Chdir to the subdir
|
# Chdir to the subdir
|
||||||
print "\n=== Processing subdir: $dir\n";
|
print "\n=== Processing subdir: $dir\n";
|
||||||
my $start = cwd();
|
my $start = Cwd::cwd();
|
||||||
chdir($dir);
|
chdir($dir);
|
||||||
|
|
||||||
# Run an action depending on what we find in that subdir
|
# Run an action depending on what we find in that subdir
|
||||||
@ -152,6 +158,8 @@ sub process_subdir {
|
|||||||
} elsif (-f "configure.in" || -f "configure.ac") {
|
} elsif (-f "configure.in" || -f "configure.ac") {
|
||||||
print "--- Found configure.in|ac; running autoreconf...\n";
|
print "--- Found configure.in|ac; running autoreconf...\n";
|
||||||
safe_system("autoreconf -ivf");
|
safe_system("autoreconf -ivf");
|
||||||
|
print "--- Patching autotools output... :-(\n";
|
||||||
|
patch_autotools_output($start);
|
||||||
} else {
|
} else {
|
||||||
die "Found subdir, but no autogen.sh or configure.in|ac to do anything";
|
die "Found subdir, but no autogen.sh or configure.in|ac to do anything";
|
||||||
}
|
}
|
||||||
@ -774,6 +782,101 @@ sub safe_system {
|
|||||||
$ret;
|
$ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
sub patch_autotools_output {
|
||||||
|
my ($topdir) = @_;
|
||||||
|
|
||||||
|
# Set indentation string for verbose output depending on current directory.
|
||||||
|
my $indent_str = " ";
|
||||||
|
if ($topdir eq ".") {
|
||||||
|
$indent_str = "=== ";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Patch ltmain.sh error for PGI version numbers. Redirect stderr to
|
||||||
|
# /dev/null because this patch is only necessary for some versions of
|
||||||
|
# Libtool (e.g., 2.2.6b); it'll [rightfully] fail if you have a new
|
||||||
|
# enough Libtool that dosn't need this patch. But don't alarm the
|
||||||
|
# user and make them think that autogen failed if this patch fails --
|
||||||
|
# make the errors be silent.
|
||||||
|
if (-f "config/ltmain.sh") {
|
||||||
|
verbose "$indent_str"."Patching PGI compiler version numbers in ltmain.sh\n";
|
||||||
|
system("$patch_prog -N -p0 < $topdir/config/ltmain_pgi_tp.diff >/dev/null 2>&1");
|
||||||
|
unlink("config/ltmain.sh.rej");
|
||||||
|
}
|
||||||
|
|
||||||
|
# Total ugh. We have to patch the configure script itself. See below
|
||||||
|
# for explainations why.
|
||||||
|
open(IN, "configure") || die "Can't open configure";
|
||||||
|
my $c;
|
||||||
|
$c .= $_
|
||||||
|
while(<IN>);
|
||||||
|
close(IN);
|
||||||
|
|
||||||
|
# LT <=2.2.6b need to be patched for the PGI 10.0 fortran compiler
|
||||||
|
# name (pgfortran). The following comes from the upstream LT patches:
|
||||||
|
# http://lists.gnu.org/archive/html/libtool-patches/2009-11/msg00012.html
|
||||||
|
# http://lists.gnu.org/archive/html/bug-libtool/2009-11/msg00045.html
|
||||||
|
# Note that that patch is part of Libtool (which is not in this OMPI
|
||||||
|
# source tree); we can't fix it. So all we can do is patch the
|
||||||
|
# resulting configure script. :-(
|
||||||
|
verbose "$indent_str"."Patching configure for Libtool PGI 10 fortran compiler name\n";
|
||||||
|
$c =~ s/gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn/gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn/g;
|
||||||
|
$c =~ s/pgcc\* \| pgf77\* \| pgf90\* \| pgf95\*\)/pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)/g;
|
||||||
|
$c =~ s/pgf77\* \| pgf90\* \| pgf95\*\)/pgf77* | pgf90* | pgf95* | pgfortran*)/g;
|
||||||
|
|
||||||
|
# Similar issue as above -- the PGI 10 version number broke <=LT
|
||||||
|
# 2.2.6b's version number checking regexps. Again, we can't fix the
|
||||||
|
# Libtool install; all we can do is patch the resulting configure
|
||||||
|
# script. :-( The following comes from the upstream patch:
|
||||||
|
# http://lists.gnu.org/archive/html/libtool-patches/2009-11/msg00016.html
|
||||||
|
verbose "$indent_str"."Patching configure for Libtool PGI version number regexps\n";
|
||||||
|
$c =~ s/\*pgCC\\ \[1-5\]\* \| \*pgcpp\\ \[1-5\]\*/*pgCC\\ [1-5]\.* | *pgcpp\\ [1-5]\.*/g;
|
||||||
|
|
||||||
|
# Similar issue as above -- fix the case statements that handle the Sun
|
||||||
|
# Fortran version strings.
|
||||||
|
#
|
||||||
|
# Note: we have to use octal escapes to match '*Sun\ F*) and the
|
||||||
|
# four succeeding lines in the bourne shell switch statement.
|
||||||
|
# \ = 134
|
||||||
|
# ) = 051
|
||||||
|
# * = 052
|
||||||
|
#
|
||||||
|
# Below is essentially an upstream patch for Libtool which we want
|
||||||
|
# made available to Open MPI users running older versions of Libtool
|
||||||
|
|
||||||
|
foreach my $tag (("", "_F77", "_FC")) {
|
||||||
|
|
||||||
|
# We have to change the search pattern and substitution on each
|
||||||
|
# iteration to take into account the tag changing
|
||||||
|
my $search_string = '\052Sun\134 F\052.*\n.*\n\s+' .
|
||||||
|
"lt_prog_compiler_pic${tag}" . '.*\n.*\n.*\n.*\n';
|
||||||
|
my $replace_string = "
|
||||||
|
*Sun\\ Ceres\\ Fortran* | *Sun*Fortran*\\ [[1-7]].* | *Sun*Fortran*\\ 8.[[0-3]]*)
|
||||||
|
# Sun Fortran 8.3 passes all unrecognized flags to the linker
|
||||||
|
lt_prog_compiler_pic${tag}='-KPIC'
|
||||||
|
lt_prog_compiler_static${tag}='-Bstatic'
|
||||||
|
lt_prog_compiler_wl${tag}=''
|
||||||
|
;;
|
||||||
|
*Sun\\ F* | *Sun*Fortran*)
|
||||||
|
lt_prog_compiler_pic${tag}='-KPIC'
|
||||||
|
lt_prog_compiler_static${tag}='-Bstatic'
|
||||||
|
lt_prog_compiler_wl${tag}='-Qoption ld '
|
||||||
|
;;
|
||||||
|
";
|
||||||
|
|
||||||
|
verbose "$indent_str"."Patching configure for Sun Studio Fortran version strings ($tag)\n";
|
||||||
|
$c =~ s/$search_string/$replace_string/;
|
||||||
|
}
|
||||||
|
|
||||||
|
open(OUT, ">configure.patched") || die "Can't open configure.patched";
|
||||||
|
print OUT $c;
|
||||||
|
close(OUT);
|
||||||
|
# Use cp so that we preserve permissions on configure
|
||||||
|
safe_system("cp configure.patched configure");
|
||||||
|
unlink("configure.patched");
|
||||||
|
}
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
##############################################################################
|
##############################################################################
|
||||||
## main - do the real work...
|
## main - do the real work...
|
||||||
@ -1060,16 +1163,7 @@ system("chmod u+w opal/libltdl/configure");
|
|||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
++$step;
|
++$step;
|
||||||
verbose "\n$step. Patching autotools output :-(\n\n";
|
verbose "\n$step. Patching autotools output on top-level tree :-(\n\n";
|
||||||
|
|
||||||
# Solaris "patch" doesn't understand unified diffs, and will cause
|
|
||||||
# autogen.pl to hang with a "File to patch:" prompt. Default to Linux
|
|
||||||
# "patch", but use "gpatch" on Solaris.
|
|
||||||
$patch_prog = "patch";
|
|
||||||
if ($^O eq "solaris") {
|
|
||||||
$patch_prog = "gpatch";
|
|
||||||
}
|
|
||||||
verbose "--- Using $^O $patch_prog program\n";
|
|
||||||
|
|
||||||
# Patch preopen error in libltdl
|
# Patch preopen error in libltdl
|
||||||
if (-f "opal/libltdl/loaders/preopen.c") {
|
if (-f "opal/libltdl/loaders/preopen.c") {
|
||||||
@ -1078,86 +1172,8 @@ if (-f "opal/libltdl/loaders/preopen.c") {
|
|||||||
unlink("opal/libltdl/loaders/preopen.c.rej");
|
unlink("opal/libltdl/loaders/preopen.c.rej");
|
||||||
}
|
}
|
||||||
|
|
||||||
# Patch ltmain.sh error for PGI version numbers. Redirect stderr to
|
patch_autotools_output(".");
|
||||||
# /dev/null because this patch is only necessary for some versions of
|
|
||||||
# Libtool (e.g., 2.2.6b); it'll [rightfully] fail if you have a new
|
|
||||||
# enough Libtool that dosn't need this patch. But don't alarm the
|
|
||||||
# user and make them think that autogen failed if this patch fails --
|
|
||||||
# make the errors be silent.
|
|
||||||
verbose "=== Patching PGI compiler version numbers in ltmain.sh\n";
|
|
||||||
system("$patch_prog -N -p0 < config/ltmain_pgi_tp.diff >/dev/null 2>&1");
|
|
||||||
unlink("config/ltmain.sh.rej");
|
|
||||||
|
|
||||||
# Total ugh. We have to patch the configure script itself. See below
|
|
||||||
# for explainations why.
|
|
||||||
open(IN, "configure") || die "Can't open configure";
|
|
||||||
my $c;
|
|
||||||
$c .= $_
|
|
||||||
while(<IN>);
|
|
||||||
close(IN);
|
|
||||||
|
|
||||||
# LT <=2.2.6b need to be patched for the PGI 10.0 fortran compiler
|
|
||||||
# name (pgfortran). The following comes from the upstream LT patches:
|
|
||||||
# http://lists.gnu.org/archive/html/libtool-patches/2009-11/msg00012.html
|
|
||||||
# http://lists.gnu.org/archive/html/bug-libtool/2009-11/msg00045.html
|
|
||||||
# Note that that patch is part of Libtool (which is not in this OMPI
|
|
||||||
# source tree); we can't fix it. So all we can do is patch the
|
|
||||||
# resulting configure script. :-(
|
|
||||||
print("=== Patching configure for Libtool PGI 10 fortran compiler name\n");
|
|
||||||
$c =~ s/gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn/gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn/g;
|
|
||||||
$c =~ s/pgcc\* \| pgf77\* \| pgf90\* \| pgf95\*\)/pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)/g;
|
|
||||||
$c =~ s/pgf77\* \| pgf90\* \| pgf95\*\)/pgf77* | pgf90* | pgf95* | pgfortran*)/g;
|
|
||||||
|
|
||||||
# Similar issue as above -- the PGI 10 version number broke <=LT
|
|
||||||
# 2.2.6b's version number checking regexps. Again, we can't fix the
|
|
||||||
# Libtool install; all we can do is patch the resulting configure
|
|
||||||
# script. :-( The following comes from the upstream patch:
|
|
||||||
# http://lists.gnu.org/archive/html/libtool-patches/2009-11/msg00016.html
|
|
||||||
print("=== Patching configure for Libtool PGI version number regexps\n");
|
|
||||||
$c =~ s/\*pgCC\\ \[1-5\]\* \| \*pgcpp\\ \[1-5\]\*/*pgCC\\ [1-5]\.* | *pgcpp\\ [1-5]\.*/g;
|
|
||||||
|
|
||||||
# Similar issue as above -- fix the case statements that handle the Sun
|
|
||||||
# Fortran version strings.
|
|
||||||
#
|
|
||||||
# Note: we have to use octal escapes to match '*Sun\ F*) and the
|
|
||||||
# four succeeding lines in the bourne shell switch statement.
|
|
||||||
# \ = 134
|
|
||||||
# ) = 051
|
|
||||||
# * = 052
|
|
||||||
#
|
|
||||||
# Below is essentially an upstream patch for Libtool which we want
|
|
||||||
# made available to Open MPI users running older versions of Libtool
|
|
||||||
|
|
||||||
foreach my $tag (("", "_F77", "_FC")) {
|
|
||||||
|
|
||||||
# We have to change the search pattern and substitution on each
|
|
||||||
# iteration to take into account the tag changing
|
|
||||||
my $search_string = '\052Sun\134 F\052.*\n.*\n\s+' .
|
|
||||||
"lt_prog_compiler_pic${tag}" . '.*\n.*\n.*\n.*\n';
|
|
||||||
my $replace_string = "
|
|
||||||
*Sun\\ Ceres\\ Fortran* | *Sun*Fortran*\\ [[1-7]].* | *Sun*Fortran*\\ 8.[[0-3]]*)
|
|
||||||
# Sun Fortran 8.3 passes all unrecognized flags to the linker
|
|
||||||
lt_prog_compiler_pic${tag}='-KPIC'
|
|
||||||
lt_prog_compiler_static${tag}='-Bstatic'
|
|
||||||
lt_prog_compiler_wl${tag}=''
|
|
||||||
;;
|
|
||||||
*Sun\\ F* | *Sun*Fortran*)
|
|
||||||
lt_prog_compiler_pic${tag}='-KPIC'
|
|
||||||
lt_prog_compiler_static${tag}='-Bstatic'
|
|
||||||
lt_prog_compiler_wl${tag}='-Qoption ld '
|
|
||||||
;;
|
|
||||||
";
|
|
||||||
|
|
||||||
print("=== Patching configure for Sun Studio Fortran version strings ($tag)\n");
|
|
||||||
$c =~ s/$search_string/$replace_string/;
|
|
||||||
}
|
|
||||||
|
|
||||||
open(OUT, ">configure.patched") || die "Can't open configure.patched";
|
|
||||||
print OUT $c;
|
|
||||||
close(OUT);
|
|
||||||
# Use cp so that we preserve permissions on configure
|
|
||||||
safe_system("cp configure.patched configure");
|
|
||||||
unlink("configure.patched");
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
verbose "
|
verbose "
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user