Patch libtool when using the Arm compiler (#12004)

* Patch libtool when using the arm, clang, and fujitsu compilers

If libtool does not have values for linker/pic flags, patch them in
This commit is contained in:
Nick Forrington 2019-10-24 10:51:00 -04:00 committed by Greg Becker
parent 44485c56b6
commit 845df79ac6

View File

@ -5,10 +5,12 @@
import inspect
import fileinput
import os
import os.path
import shutil
import stat
import sys
from subprocess import PIPE
from subprocess import check_call
@ -56,6 +58,9 @@ class AutotoolsPackage(PackageBase):
build_system_class = 'AutotoolsPackage'
#: Whether or not to update ``config.guess`` on old architectures
patch_config_guess = True
#: Whether or not to update ``libtool``
#: (currently only for Arm/Clang/Fujitsu compilers)
patch_libtool = True
#: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.build`
#: phase
@ -148,6 +153,25 @@ def _do_patch_config_guess(self):
raise RuntimeError('Failed to find suitable config.guess')
@run_after('configure')
def _do_patch_libtool(self):
"""If configure generates a "libtool" script that does not correctly
detect the compiler (and patch_libtool is set), patch in the correct
flags for the Arm, Clang/Flang, and Fujitsu compilers."""
libtool = os.path.join(self.build_directory, "libtool")
if self.patch_libtool and os.path.exists(libtool):
if self.spec.satisfies('%arm') or self.spec.satisfies('%clang') \
or self.spec.satisfies('%fj'):
for line in fileinput.input(libtool, inplace=True):
# Replace missing flags with those for Arm/Clang
if line == 'wl=""\n':
line = 'wl="-Wl,"\n'
if line == 'pic_flag=""\n':
line = 'pic_flag="{0}"\n'\
.format(self.compiler.pic_flag)
sys.stdout.write(line)
@property
def configure_directory(self):
"""Returns the directory where 'configure' resides.