aio: test link against libaio using distutils (#1247)

This commit is contained in:
Adam Moody 2021-07-24 16:05:04 -05:00 коммит произвёл GitHub
Родитель 6ba9628970
Коммит 6ec84967ed
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 12 добавлений и 3 удалений

Просмотреть файл

@ -50,10 +50,14 @@ class AsyncIOBuilder(OpBuilder):
return ['-laio']
def is_compatible(self):
aio_libraries = ['libaio-dev']
aio_compatible = self.libraries_installed(aio_libraries)
# Check for the existence of libaio by using distutils
# to compile and link a test program that calls io_submit,
# which is a function provided by libaio that is used in the async_io op.
# If needed, one can define -I and -L entries in CFLAGS and LDFLAGS
# respectively to specify the directories for libaio.h and libaio.so.
aio_compatible = self.has_function('io_submit', ('aio', ))
if not aio_compatible:
self.warning(
f"{self.NAME} requires the libraries: {aio_libraries} but are missing. Can be fixed by: `apt install libaio-dev`."
f"{self.NAME} requires libaio but it is missing. Can be fixed by: `apt install libaio-dev`."
)
return super().is_compatible() and aio_compatible

Просмотреть файл

@ -7,6 +7,7 @@ import time
import importlib
from pathlib import Path
import subprocess
import distutils.ccompiler
from abc import ABC, abstractmethod
YELLOW = '\033[93m'
@ -160,6 +161,10 @@ class OpBuilder(ABC):
valid = valid or result.wait() == 0
return valid
def has_function(self, funcname, libraries):
compiler = distutils.ccompiler.new_compiler()
return compiler.has_function(funcname, libraries=libraries)
def strip_empty_entries(self, args):
'''
Drop any empty strings from the list of compile and link flags