build: generate all union bpf_attr checks automatically
Rather than list by hand some members of union bpf_attr that we check for availability, automatically list all members of union bpf_attr we are aware of. * m4/gen_bpf_attr_m4.sh: New file. * bootstrap: Invoke it. * configure.ac (AC_CHECK_HEADERS([linux/bpf.h])): Use st_BPF_ATTR. * m4/.gitignore: New file.
This commit is contained in:
parent
b93c952ba5
commit
442560c875
@ -1,5 +1,6 @@
|
||||
#!/bin/sh -eu
|
||||
|
||||
./m4/gen_bpf_attr_m4.sh
|
||||
./generate_mpers_am.sh
|
||||
./xlat/gen.sh
|
||||
./tests/gen_pure_executables.sh
|
||||
|
13
configure.ac
13
configure.ac
@ -464,18 +464,7 @@ AC_CHECK_HEADERS([linux/input.h], [
|
||||
AC_CHECK_MEMBERS([struct input_absinfo.resolution],,, [#include <linux/input.h>])
|
||||
])
|
||||
|
||||
AC_CHECK_HEADERS([linux/bpf.h], [
|
||||
AC_CHECK_MEMBERS(m4_normalize([
|
||||
union bpf_attr.attach_flags,
|
||||
union bpf_attr.bpf_fd,
|
||||
union bpf_attr.flags,
|
||||
union bpf_attr.info.info,
|
||||
union bpf_attr.next_id,
|
||||
union bpf_attr.numa_node,
|
||||
union bpf_attr.prog_flags,
|
||||
union bpf_attr.test.duration
|
||||
]),,, [#include <linux/bpf.h>])
|
||||
])
|
||||
AC_CHECK_HEADERS([linux/bpf.h], [st_BPF_ATTR])
|
||||
|
||||
AC_CHECK_TYPES(m4_normalize([
|
||||
struct br_mdb_entry,
|
||||
|
1
m4/.gitignore
vendored
Normal file
1
m4/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
bpf_attr.m4
|
73
m4/gen_bpf_attr_m4.sh
Executable file
73
m4/gen_bpf_attr_m4.sh
Executable file
@ -0,0 +1,73 @@
|
||||
#!/bin/sh -efu
|
||||
# Copyright (c) 2018 Dmitry V. Levin <ldv@altlinux.org>
|
||||
# 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.
|
||||
|
||||
input=bpf_attr.h
|
||||
output="${0%/*}"/bpf_attr.m4
|
||||
exec > "$output"
|
||||
|
||||
cat <<EOF
|
||||
dnl Generated by $0 from $input; do not edit.
|
||||
AC_DEFUN([st_BPF_ATTR], [dnl
|
||||
AC_CHECK_MEMBERS(m4_normalize([
|
||||
EOF
|
||||
|
||||
fetch_structs()
|
||||
{
|
||||
local name="${1:-}"
|
||||
local name_re=
|
||||
[ -z "$name" ] ||
|
||||
name_re='\/\* '"$name"' \*\/ '
|
||||
|
||||
sed -n '/^struct BPF_[^[:space:]]\+_struct '"$name_re"'{/,/^};/p' < "$input"
|
||||
}
|
||||
|
||||
filter_entries()
|
||||
{
|
||||
local name="${1:-}"
|
||||
local subtype=
|
||||
[ -z "$name" ] ||
|
||||
subtype=".$name"
|
||||
local search='^[[:space:]]\+[^;]*[[:space:]]\([^[:space:];]\+\);$'
|
||||
local replacement='\t\tunion bpf_attr'"$subtype"'.\1,'
|
||||
sed -n "s/$search/$replacement/p" |
|
||||
sort -u
|
||||
}
|
||||
|
||||
# nameless structures in union bpf_attr
|
||||
fetch_structs |
|
||||
filter_entries
|
||||
|
||||
# named structures in union bpf_attr
|
||||
for name in $(sed -n 's/^struct BPF_[^[:space:]]\+_struct \/\* \([^[:space:]]\+\) \*\/ {.*/\1/p' < "$input"); do
|
||||
fetch_structs "$name" |
|
||||
filter_entries "$name"
|
||||
done
|
||||
|
||||
cat <<'EOF'
|
||||
union bpf_attr.dummy
|
||||
]),,, [#include <linux/bpf.h>])
|
||||
])
|
||||
EOF
|
Loading…
x
Reference in New Issue
Block a user