From 29090a527af34bcc9c5d5414ce8e61ac42d40bb0 Mon Sep 17 00:00:00 2001 From: George Hartzell Date: Wed, 7 Jun 2017 09:51:46 -0700 Subject: [PATCH] Bug/cctools syscall (#4440) * Handle missing defn of __NR_memfd_create Generally SYS_foo is defined to __NR_foo (in sys/syscall.h) which is then defined to a syscall number (in asm/unistd_64.h). Certain CentOS systems have SYS_memfd_create defined to __NR_memfd_create but are missing the second definition. This is a belt and suspenders solution to the problem. See [this post][syscall] for a nice general description of how these parts fit together. [syscall]: https://www.uninformativ.de/blog/postings/2017-02-11/0/POSTING-en.html * Avoid flake8 warning --- var/spack/repos/builtin/packages/cctools/package.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/var/spack/repos/builtin/packages/cctools/package.py b/var/spack/repos/builtin/packages/cctools/package.py index 452df0d613d..165d684a9ff 100644 --- a/var/spack/repos/builtin/packages/cctools/package.py +++ b/var/spack/repos/builtin/packages/cctools/package.py @@ -44,6 +44,18 @@ class Cctools(AutotoolsPackage): # depends_on('xrootd') depends_on('zlib') + # Generally SYS_foo is defined to __NR_foo (sys/syscall.h) which + # is then defined to a syscall number (asm/unistd_64.h). Certain + # CentOS systems have SYS_memfd_create defined to + # __NR_memfd_create but are missing the second definition. + # This is a belt and suspenders solution to the problem. + def patch(self): + before = '#if defined(__linux__) && defined(SYS_memfd_create)' + after = '#if defined(__linux__) && defined(SYS_memfd_create) && defined(__NR_memfd_create)' # noqa: E501 + f = 'dttools/src/memfdexe.c' + kwargs = {'ignore_absent': False, 'backup': True, 'string': True} + filter_file(before, after, f, **kwargs) + def configure_args(self): args = [] # disable these bits