From 4577bb6c899abccaf70b48d3c955e0538eada90b Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Wed, 26 Jul 2017 10:28:25 +0000 Subject: [PATCH] m4: macroize union bpf_attr field checks * m4/st_bpf.m4: New file. * configure.ac: Use st_CHECK_UNION_BPF_ATTR. --- configure.ac | 36 +++--------------------------------- m4/st_bpf.m4 | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 m4/st_bpf.m4 diff --git a/configure.ac b/configure.ac index 0d407aff..0d0dab15 100644 --- a/configure.ac +++ b/configure.ac @@ -428,39 +428,9 @@ AC_CHECK_HEADERS([linux/input.h], [ ]) AC_CHECK_HEADERS([linux/bpf.h], [ - AC_CACHE_CHECK([whether union bpf_attr.log_buf initialization works], - [st_cv_have_union_bpf_attr_log_buf], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[union bpf_attr a = { .log_buf = 0 };]])], - [st_cv_have_union_bpf_attr_log_buf=yes], - [st_cv_have_union_bpf_attr_log_buf=no])]) - if test $st_cv_have_union_bpf_attr_log_buf = yes; then - AC_DEFINE(HAVE_UNION_BPF_ATTR_LOG_BUF, [1], - [Define to 1 if union bpf_attr.log_buf initialization works]) - fi - AC_CACHE_CHECK([whether union bpf_attr.bpf_fd initialization works], - [st_cv_have_union_bpf_attr_bpf_fd], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[union bpf_attr a = { .bpf_fd = 0 };]])], - [st_cv_have_union_bpf_attr_bpf_fd=yes], - [st_cv_have_union_bpf_attr_bpf_fd=no])]) - if test $st_cv_have_union_bpf_attr_bpf_fd = yes; then - AC_DEFINE(HAVE_UNION_BPF_ATTR_BPF_FD, [1], - [Define to 1 if union bpf_attr.bpf_fd initialization works]) - fi - AC_CACHE_CHECK([whether union bpf_attr.attach_flags initialization works], - [st_cv_have_union_bpf_attr_attach_flags], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[union bpf_attr a = { .attach_flags = 0 };]])], - [st_cv_have_union_bpf_attr_attach_flags=yes], - [st_cv_have_union_bpf_attr_attach_flags=no])]) - if test $st_cv_have_union_bpf_attr_attach_flags = yes; then - AC_DEFINE(HAVE_UNION_BPF_ATTR_ATTACH_FLAGS, [1], - [Define to 1 if union bpf_attr.attach_flags initialization works]) - fi + st_CHECK_UNION_BPF_ATTR([log_buf]) + st_CHECK_UNION_BPF_ATTR([bpf_fd]) + st_CHECK_UNION_BPF_ATTR([attach_flags]) ]) AC_CHECK_TYPES([struct statfs], [ diff --git a/m4/st_bpf.m4 b/m4/st_bpf.m4 new file mode 100644 index 00000000..ae44d287 --- /dev/null +++ b/m4/st_bpf.m4 @@ -0,0 +1,50 @@ +#!/usr/bin/m4 +# +# Copyright (c) 2015-2017 Dmitry V. Levin +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +AC_DEFUN([st_CHECK_UNION_BPF_ATTR],[ + +pushdef([ATTR_NAME], translit([$1], [a-z], [A-Z])) +pushdef([attr_text], [union bpf_attr.][$1]) +pushdef([have_attr], [st_cv_member_union_bpf_attr_][$1]) + +AC_CACHE_CHECK([whether attr_text initialization works], + [have_attr], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [union bpf_attr a = { .$1 = 0 };])], + [have_attr=yes], + [have_attr=no])]) + +if test $have_attr = yes; then + AC_DEFINE([HAVE_UNION_BPF_ATTR_]ATTR_NAME, [1], + [Define to 1 if attr_text initialization works]) +fi + +popdef([have_attr]) +popdef([attr_text]) +popdef([ATTR_NAME]) +])