autotools: patch 'libtool' recursively in subdirectories (#18620)

Previous version was doing it only in the root build directory.
This commit is contained in:
Tomoki, Karatsu 2020-09-28 17:53:56 +09:00 committed by GitHub
parent c8ac61979b
commit b76189a2e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,17 +5,15 @@
import inspect import inspect
import fileinput
import os import os
import os.path import os.path
import shutil import shutil
import stat import stat
import sys
import re
from subprocess import PIPE from subprocess import PIPE
from subprocess import check_call from subprocess import check_call
import llnl.util.tty as tty import llnl.util.tty as tty
import llnl.util.filesystem as fs
from llnl.util.filesystem import working_dir, force_remove from llnl.util.filesystem import working_dir, force_remove
from spack.package import PackageBase, run_after, run_before from spack.package import PackageBase, run_after, run_before
from spack.util.executable import Executable from spack.util.executable import Executable
@ -196,20 +194,25 @@ def _do_patch_libtool(self):
detect the compiler (and patch_libtool is set), patch in the correct detect the compiler (and patch_libtool is set), patch in the correct
flags for the Arm, Clang/Flang, and Fujitsu compilers.""" flags for the Arm, Clang/Flang, and Fujitsu compilers."""
libtool = os.path.join(self.build_directory, "libtool") # Exit early if we are required not to patch libtool
if self.patch_libtool and os.path.exists(libtool): if not self.patch_libtool:
if self.spec.satisfies('%arm') or self.spec.satisfies('%clang') \ return
for libtool_path in fs.find(
self.build_directory, 'libtool', recursive=True):
self._patch_libtool(libtool_path)
def _patch_libtool(self, libtool_path):
if self.spec.satisfies('%arm')\
or self.spec.satisfies('%clang')\
or self.spec.satisfies('%fj'): or self.spec.satisfies('%fj'):
for line in fileinput.input(libtool, inplace=True): fs.filter_file('wl=""\n', 'wl="-Wl,"\n', libtool_path)
# Replace missing flags with those for Arm/Clang fs.filter_file('pic_flag=""\n',
if line == 'wl=""\n': 'pic_flag="{0}"\n'
line = 'wl="-Wl,"\n' .format(self.compiler.cc_pic_flag),
if line == 'pic_flag=""\n': libtool_path)
line = 'pic_flag="{0}"\n'\ if self.spec.satisfies('%fj'):
.format(self.compiler.cc_pic_flag) fs.filter_file(r'/\S*/fjhpctag.o', '', libtool_path)
if self.spec.satisfies('%fj') and 'fjhpctag.o' in line:
line = re.sub(r'/\S*/fjhpctag.o', '', line)
sys.stdout.write(line)
@property @property
def configure_directory(self): def configure_directory(self):