<config.h> is generated by the configure script. As it contains our feature detection, it want to use it everywhere. Likewise, in some of our sources, we define _GNU_SOURCE. Such defines should also be defined before anything else. And there is no reason for not defining it for all our sources. It would be good to use autoconf's AC_USE_SYSTEM_EXTENSIONS, in which case we would also need to ensure that <config.h> is always included as first. Instead of going through all source files and include <config.h> as first, add a new header "include/nftdefault.h", which is supposed to be included in all our source (and as first). This will also allow us to prepare some common base, like include <stdbool.h> everywhere. The aim that internal headers are self-contained, so that they can be included in any order. Which, by the way, already didn't work because some headers define _GNU_SOURCE, which would only work if the header gets included as first. There is however an exception to the rule: everything we compile shall rely on having <nftdefault.h> header included as first. This applies to source files (which include it as first) and to internal header files (which are always included after). Note that <config.h> has no include guards, which is at least ugly to include multiple times. It doesn't cause problems in practice, because it only contains defines and the compiler doesn't warn about redefining a macro with the same value. Still, <nftdefault.h> ensures to include <config.h> exactly once. Signed-off-by: Thomas Haller <thaller@xxxxxxxxxx> --- include/Makefile.am | 3 ++- include/cli.h | 1 - include/gmputil.h | 2 -- include/nftdefault.h | 9 +++++++++ include/utils.h | 1 - src/cache.c | 2 ++ src/cli.c | 3 ++- src/cmd.c | 2 ++ src/ct.c | 2 ++ src/datatype.c | 2 ++ src/dccpopt.c | 2 ++ src/erec.c | 4 ++-- src/evaluate.c | 2 ++ src/expression.c | 2 ++ src/exthdr.c | 2 ++ src/fib.c | 2 ++ src/gmputil.c | 2 ++ src/hash.c | 2 ++ src/iface.c | 2 ++ src/intervals.c | 2 ++ src/ipopt.c | 2 ++ src/json.c | 3 ++- src/libnftables.c | 3 +++ src/main.c | 2 ++ src/mergesort.c | 2 ++ src/meta.c | 2 +- src/mini-gmp.c | 2 ++ src/misspell.c | 2 ++ src/mnl.c | 2 ++ src/monitor.c | 2 ++ src/netlink.c | 2 ++ src/netlink_delinearize.c | 2 ++ src/netlink_linearize.c | 2 ++ src/nfnl_osf.c | 2 ++ src/nftutils.c | 2 +- src/numgen.c | 2 ++ src/optimize.c | 3 ++- src/osf.c | 2 ++ src/owner.c | 2 ++ src/parser_json.c | 3 ++- src/payload.c | 2 ++ src/print.c | 2 ++ src/proto.c | 2 ++ src/rt.c | 2 ++ src/rule.c | 2 ++ src/scanner.l | 2 ++ src/sctp_chunk.c | 2 ++ src/segtree.c | 2 ++ src/socket.c | 2 ++ src/statement.c | 2 ++ src/tcpopt.c | 2 ++ src/utils.c | 2 ++ src/xfrm.c | 2 ++ src/xt.c | 2 ++ 54 files changed, 108 insertions(+), 13 deletions(-) create mode 100644 include/nftdefault.h diff --git a/include/Makefile.am b/include/Makefile.am index 1d20f404dbfe..f2818411e811 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,11 +1,12 @@ SUBDIRS = linux \ nftables -noinst_HEADERS = cli.h \ +noinst_HEADERS = cli.h \ cache.h \ cmd.h \ datatype.h \ dccpopt.h \ + nftdefault.h \ expression.h \ fib.h \ hash.h \ diff --git a/include/cli.h b/include/cli.h index c854948e4a16..f0a0d47a645f 100644 --- a/include/cli.h +++ b/include/cli.h @@ -2,7 +2,6 @@ #define _NFT_CLI_H_ #include <nftables/libnftables.h> -#include <config.h> #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDIT) || defined(HAVE_LIBLINENOISE) extern int cli_init(struct nft_ctx *nft); diff --git a/include/gmputil.h b/include/gmputil.h index 0cb85a7d0793..c524aced16ac 100644 --- a/include/gmputil.h +++ b/include/gmputil.h @@ -1,8 +1,6 @@ #ifndef NFTABLES_GMPUTIL_H #define NFTABLES_GMPUTIL_H -#include <config.h> - #ifdef HAVE_LIBGMP #include <gmp.h> #else diff --git a/include/nftdefault.h b/include/nftdefault.h new file mode 100644 index 000000000000..b7ebad7fddc0 --- /dev/null +++ b/include/nftdefault.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef NFTABLES_NFTDEFAULT_H +#define NFTABLES_NFTDEFAULT_H + +#define _GNU_SOURCE + +#include <config.h> + +#endif /* NFTABLES_NFTDEFAULT_H */ diff --git a/include/utils.h b/include/utils.h index d5073e061033..6764f9219ada 100644 --- a/include/utils.h +++ b/include/utils.h @@ -11,7 +11,6 @@ #include <list.h> #include <gmputil.h> -#include "config.h" #ifdef HAVE_VISIBILITY_HIDDEN # define __visible __attribute__((visibility("default"))) # define EXPORT_SYMBOL(x) typeof(x) (x) __visible; diff --git a/src/cache.c b/src/cache.c index db9a9a75074a..24f4abac7931 100644 --- a/src/cache.c +++ b/src/cache.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <expression.h> #include <statement.h> #include <rule.h> diff --git a/src/cli.c b/src/cli.c index 5f7e01ff9631..fc33204587ff 100644 --- a/src/cli.c +++ b/src/cli.c @@ -12,7 +12,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ -#include <config.h> +#include <nftdefault.h> + #include <stdlib.h> #include <stdio.h> #include <stdarg.h> diff --git a/src/cmd.c b/src/cmd.c index 98216d54e78d..93c2cefefa33 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <erec.h> #include <mnl.h> #include <cmd.h> diff --git a/src/ct.c b/src/ct.c index 64327561d089..f11156a85584 100644 --- a/src/ct.c +++ b/src/ct.c @@ -10,6 +10,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/datatype.c b/src/datatype.c index 64396db82a7e..0044160e99c7 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stdlib.h> #include <string.h> #include <inttypes.h> diff --git a/src/dccpopt.c b/src/dccpopt.c index 3a2eb9524a20..e1981ef0f780 100644 --- a/src/dccpopt.c +++ b/src/dccpopt.c @@ -1,3 +1,5 @@ +#include <nftdefault.h> + #include <stddef.h> #include <stdint.h> diff --git a/src/erec.c b/src/erec.c index aebb8632583a..fa4dd3c36805 100644 --- a/src/erec.c +++ b/src/erec.c @@ -8,8 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ -#define _GNU_SOURCE -#include <config.h> +#include <nftdefault.h> + #include <stdio.h> #include <string.h> #include <stdarg.h> diff --git a/src/evaluate.c b/src/evaluate.c index 2b158aee720b..a2e194f06379 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/expression.c b/src/expression.c index 34902c842d16..271a5ac231f7 100644 --- a/src/expression.c +++ b/src/expression.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/exthdr.c b/src/exthdr.c index 0358005b1b89..14616c43c653 100644 --- a/src/exthdr.c +++ b/src/exthdr.c @@ -10,6 +10,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/fib.c b/src/fib.c index 98c5786891f7..1d50e9152729 100644 --- a/src/fib.c +++ b/src/fib.c @@ -8,6 +8,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <erec.h> #include <expression.h> diff --git a/src/gmputil.c b/src/gmputil.c index b356460fa739..9f13e7620cde 100644 --- a/src/gmputil.c +++ b/src/gmputil.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdarg.h> diff --git a/src/hash.c b/src/hash.c index a3fd0872c3b9..49a6f1f4004f 100644 --- a/src/hash.c +++ b/src/hash.c @@ -8,6 +8,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <expression.h> #include <datatype.h> diff --git a/src/iface.c b/src/iface.c index 3647778c1f0d..aa6962fa8282 100644 --- a/src/iface.c +++ b/src/iface.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <stdio.h> #include <stdlib.h> #include <net/if.h> diff --git a/src/intervals.c b/src/intervals.c index d79c52c58710..1a565eff5472 100644 --- a/src/intervals.c +++ b/src/intervals.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <expression.h> #include <intervals.h> diff --git a/src/ipopt.c b/src/ipopt.c index 67e904ff3d88..79c9c3bb9551 100644 --- a/src/ipopt.c +++ b/src/ipopt.c @@ -1,3 +1,5 @@ +#include <nftdefault.h> + #include <stdint.h> #include <netinet/in.h> diff --git a/src/json.c b/src/json.c index 31dd185666b1..2c08a69dffe8 100644 --- a/src/json.c +++ b/src/json.c @@ -6,7 +6,8 @@ * later) as published by the Free Software Foundation. */ -#define _GNU_SOURCE +#include <nftdefault.h> + #include <stdio.h> #include <string.h> diff --git a/src/libnftables.c b/src/libnftables.c index 69ea9d4135b7..89a9ac234e48 100644 --- a/src/libnftables.c +++ b/src/libnftables.c @@ -5,6 +5,9 @@ * it under the terms of the GNU General Public License version 2 (or any * later) as published by the Free Software Foundation. */ + +#include <nftdefault.h> + #include <nftables/libnftables.h> #include <erec.h> #include <mnl.h> diff --git a/src/main.c b/src/main.c index 40dc60c2258c..2958235d322c 100644 --- a/src/main.c +++ b/src/main.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stdlib.h> #include <stddef.h> #include <unistd.h> diff --git a/src/mergesort.c b/src/mergesort.c index a3a9d6050ccb..9b4636ff8916 100644 --- a/src/mergesort.c +++ b/src/mergesort.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <stdint.h> #include <expression.h> #include <gmputil.h> diff --git a/src/meta.c b/src/meta.c index 8508b11e70ce..1ded655c6fca 100644 --- a/src/meta.c +++ b/src/meta.c @@ -10,7 +10,7 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ -#define _GNU_SOURCE +#include <nftdefault.h> #include <errno.h> #include <limits.h> diff --git a/src/mini-gmp.c b/src/mini-gmp.c index 04bed3f51ddb..061a0caff64c 100644 --- a/src/mini-gmp.c +++ b/src/mini-gmp.c @@ -41,6 +41,8 @@ see https://www.gnu.org/licenses/. */ mpn/generic/sbpi1_div_qr.c, mpn/generic/sub_n.c, mpn/generic/submul_1.c. */ +#include <nftdefault.h> + #include <assert.h> #include <ctype.h> #include <limits.h> diff --git a/src/misspell.c b/src/misspell.c index 8992c75e7bc1..db0914d8d131 100644 --- a/src/misspell.c +++ b/src/misspell.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <stdlib.h> #include <string.h> #include <limits.h> diff --git a/src/mnl.c b/src/mnl.c index 9406fc482123..43c2c6602ce2 100644 --- a/src/mnl.c +++ b/src/mnl.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <libmnl/libmnl.h> #include <libnftnl/common.h> #include <libnftnl/ruleset.h> diff --git a/src/monitor.c b/src/monitor.c index 3a1896917923..c31dac77bab5 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <string.h> #include <fcntl.h> #include <errno.h> diff --git a/src/netlink.c b/src/netlink.c index ed61cd896511..4f769a4e23eb 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -9,6 +9,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <string.h> #include <errno.h> #include <libmnl/libmnl.h> diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 125b6c685f80..67c2d0a2718d 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -9,6 +9,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stdlib.h> #include <stdbool.h> #include <string.h> diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c index f5b2d6bb6cea..172d483a91e5 100644 --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c @@ -9,6 +9,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <linux/netfilter/nf_tables.h> #include <linux/netfilter/nf_log.h> diff --git a/src/nfnl_osf.c b/src/nfnl_osf.c index 08e978de2f67..f989ce75ecce 100644 --- a/src/nfnl_osf.c +++ b/src/nfnl_osf.c @@ -19,6 +19,8 @@ * Based on iptables/utils/nfnl_osf.c. */ +#include <nftdefault.h> + #include <sys/time.h> #include <ctype.h> diff --git a/src/nftutils.c b/src/nftutils.c index 13f879ddc5c7..b16bf5232c17 100644 --- a/src/nftutils.c +++ b/src/nftutils.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ -#include <config.h> +#include <nftdefault.h> #include "nftutils.h" diff --git a/src/numgen.c b/src/numgen.c index 256514d14671..3d6414d40316 100644 --- a/src/numgen.c +++ b/src/numgen.c @@ -8,6 +8,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <expression.h> #include <datatype.h> diff --git a/src/optimize.c b/src/optimize.c index 7ca57ce73873..1457d45152d0 100644 --- a/src/optimize.c +++ b/src/optimize.c @@ -11,7 +11,8 @@ * programme. */ -#define _GNU_SOURCE +#include <nftdefault.h> + #include <string.h> #include <errno.h> #include <inttypes.h> diff --git a/src/osf.c b/src/osf.c index c611b542206d..8a89052bdd22 100644 --- a/src/osf.c +++ b/src/osf.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <expression.h> #include <utils.h> diff --git a/src/owner.c b/src/owner.c index c34b0c1501fa..f7988328c5c2 100644 --- a/src/owner.c +++ b/src/owner.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <stdio.h> #include <unistd.h> #include <stdlib.h> diff --git a/src/parser_json.c b/src/parser_json.c index 92cffee905e3..3b7c0a5ddd75 100644 --- a/src/parser_json.c +++ b/src/parser_json.c @@ -6,7 +6,8 @@ * later) as published by the Free Software Foundation. */ -#define _GNU_SOURCE +#include <nftdefault.h> + #include <errno.h> #include <stdint.h> /* needed by gmputil.h */ #include <string.h> diff --git a/src/payload.c b/src/payload.c index 7862745b2035..bb44f1f3bb3d 100644 --- a/src/payload.c +++ b/src/payload.c @@ -10,6 +10,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/print.c b/src/print.c index 4896e13c2ca5..220e266ec4ee 100644 --- a/src/print.c +++ b/src/print.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <stdarg.h> #include <nftables.h> #include <utils.h> diff --git a/src/proto.c b/src/proto.c index edf99e840c0c..c548a1d11614 100644 --- a/src/proto.c +++ b/src/proto.c @@ -9,6 +9,8 @@ * */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdint.h> diff --git a/src/rt.c b/src/rt.c index d7aa5edd93a3..8bee1f6128f9 100644 --- a/src/rt.c +++ b/src/rt.c @@ -8,6 +8,8 @@ * published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <errno.h> #include <stddef.h> #include <stdlib.h> diff --git a/src/rule.c b/src/rule.c index b59fcd3a9fa8..7951e9e9db7a 100644 --- a/src/rule.c +++ b/src/rule.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/scanner.l b/src/scanner.l index c903b8c3e02d..d79499e6e312 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -10,6 +10,8 @@ %{ +#include <nftdefault.h> + #include <limits.h> #include <glob.h> #include <netinet/in.h> diff --git a/src/sctp_chunk.c b/src/sctp_chunk.c index 6e73e72f8308..d5fdc0611596 100644 --- a/src/sctp_chunk.c +++ b/src/sctp_chunk.c @@ -6,6 +6,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <exthdr.h> #include <sctp_chunk.h> diff --git a/src/segtree.c b/src/segtree.c index 0e3d111fb7ab..ef3201b135c3 100644 --- a/src/segtree.c +++ b/src/segtree.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stdlib.h> #include <string.h> #include <inttypes.h> diff --git a/src/socket.c b/src/socket.c index 356557b4dbed..544f94e60d4f 100644 --- a/src/socket.c +++ b/src/socket.c @@ -8,6 +8,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <expression.h> #include <socket.h> diff --git a/src/statement.c b/src/statement.c index 9ca7e208cf79..72d0689aae4e 100644 --- a/src/statement.c +++ b/src/statement.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/tcpopt.c b/src/tcpopt.c index c3e07d7889ab..2677b9d8db4c 100644 --- a/src/tcpopt.c +++ b/src/tcpopt.c @@ -1,3 +1,5 @@ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/utils.c b/src/utils.c index a5815018c775..b43c281e39b7 100644 --- a/src/utils.c +++ b/src/utils.c @@ -8,6 +8,8 @@ * Development of this code funded by Astaro AG (http://www.astaro.com/) */ +#include <nftdefault.h> + #include <stddef.h> #include <stdlib.h> #include <stdarg.h> diff --git a/src/xfrm.c b/src/xfrm.c index b27821a922f5..7fff095f9768 100644 --- a/src/xfrm.c +++ b/src/xfrm.c @@ -8,6 +8,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <nftables.h> #include <erec.h> #include <expression.h> diff --git a/src/xt.c b/src/xt.c index b17aafd56538..7afd56526df9 100644 --- a/src/xt.c +++ b/src/xt.c @@ -7,6 +7,8 @@ * later) as published by the Free Software Foundation. */ +#include <nftdefault.h> + #include <stdlib.h> #include <time.h> #include <string.h> -- 2.41.0