From 29090a527af34bcc9c5d5414ce8e61ac42d40bb0 Mon Sep 17 00:00:00 2001
From: George Hartzell <hartzell@alerce.com>
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 452df0d613..165d684a9f 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
-- 
GitLab