DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: david.marchand@redhat.com, thomas@monjalon.net,
	Bruce Richardson <bruce.richardson@intel.com>
Subject: [dpdk-dev] [PATCH v3 0/4] add checking of header includes
Date: Mon, 25 Jan 2021 14:11:11 +0000	[thread overview]
Message-ID: <20210125141115.573122-1-bruce.richardson@intel.com> (raw)
In-Reply-To: <20210114110606.21142-1-bruce.richardson@intel.com>

As a general principle, each header file should include any other
headers it needs to provide data type definitions or macros. For
example, any header using the uintX_t types in structures or function
prototypes should include "stdint.h" to provide those type definitions.

In practice, while many, but not all, headers in DPDK did include all
necessary headers, it was never actually checked that each header could
be included in a C file and compiled without having any compiler errors
about missing definitions.  The script "check-includes.sh" could be used
for this job, but it was not called out in the documentation, so many
contributors may not have been aware of it's existance. It also was
difficult to run from a source-code directory, as the script did not
automatically allow finding of headers from one DPDK library directory
to another [this was probably based on running it on a build created by
the "make" build system, where all headers were in a single directory].
To attempt to have a build-system integrated replacement, this patchset
adds a "chkincs" app in the buildtools directory to verify this on an
ongoing basis.

This chkincs app does nothing when run, and is not installed as part of
a DPDK "ninja install", it's for build-time checking only. Its source
code consists of one C file per public DPDK header, where that C file
contains nothing except an include for that header.  Therefore, if any
header is added to the lib folder which fails to compile when included
alone, the build of chkincs will fail with a suitable error message.
Since this compile checking is not needed on most builds of DPDK, the
building of chkincs is disabled by default, but can be enabled by the
"test_includes" meson option. To catch errors with patch submissions,
the final patch of this series enables it for a single build in
test-meson-builds script.

Future work could involve doing similar checks on headers for C++
compatibility, which was something done by the check-includes.sh script
but which is missing here..

V3:
* Shrunk patchset as most header fixes already applied
* Moved chkincs from "apps" to the "buildtools" directory, which is a
  better location for something not for installation for end-user use.
* Added patch to drop check-includes script.

V2:
* Add maintainers file entry for new app
* Drop patch for c11 ring header
* Use build variable "headers_no_chkincs" for tracking exceptions

Bruce Richardson (4):
  eal: add missing include to mcslock
  build: separate out headers for include checking
  buildtools/chkincs: add app to verify header includes
  devtools: remove check-includes script

 MAINTAINERS                                  |   5 +-
 buildtools/chkincs/gen_c_file_for_header.py  |  12 +
 buildtools/chkincs/main.c                    |   4 +
 buildtools/chkincs/meson.build               |  40 +++
 devtools/check-includes.sh                   | 259 -------------------
 devtools/test-meson-builds.sh                |   2 +-
 doc/guides/contributing/coding_style.rst     |  12 +
 lib/librte_eal/include/generic/rte_mcslock.h |   1 +
 lib/librte_eal/include/meson.build           |   2 +-
 lib/librte_eal/x86/include/meson.build       |  14 +-
 lib/librte_ethdev/meson.build                |   4 +-
 lib/librte_hash/meson.build                  |   4 +-
 lib/librte_ipsec/meson.build                 |   3 +-
 lib/librte_lpm/meson.build                   |   2 +-
 lib/librte_regexdev/meson.build              |   2 +-
 lib/librte_ring/meson.build                  |   4 +-
 lib/librte_stack/meson.build                 |   4 +-
 lib/librte_table/meson.build                 |   7 +-
 lib/meson.build                              |   3 +
 meson.build                                  |   6 +
 meson_options.txt                            |   2 +
 21 files changed, 112 insertions(+), 280 deletions(-)
 create mode 100755 buildtools/chkincs/gen_c_file_for_header.py
 create mode 100644 buildtools/chkincs/main.c
 create mode 100644 buildtools/chkincs/meson.build
 delete mode 100755 devtools/check-includes.sh

--
2.27.0


  parent reply	other threads:[~2021-01-25 14:11 UTC|newest]

Thread overview: 165+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-14 11:05 [dpdk-dev] [PATCH 00/20] ensure headers have correct includes Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 01/20] eal: fix missing header inclusion Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 02/20] telemetry: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 03/20] ethdev: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 04/20] ring: fix missing includes for c11 model header Bruce Richardson
2021-01-14 12:57   ` David Marchand
2021-01-14 13:54     ` Ananyev, Konstantin
2021-01-14 11:05 ` [dpdk-dev] [PATCH 05/20] net: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 06/20] mbuf: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 07/20] bitratestats: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 08/20] rib: fix missing header includes Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 09/20] vhost: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 10/20] ipsec: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 11/20] fib: fix missing header includes Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 12/20] table: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 13/20] pipeline: fix missing header includes Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 14/20] metrics: fix variable declaration in header Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 15/20] node: fix missing header include Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 16/20] app: fix extra include paths for app builds Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 17/20] app/chkincs: add chkincs app to verify headers Bruce Richardson
2021-01-14 12:16   ` David Marchand
2021-01-14 12:28     ` Bruce Richardson
2021-01-14 12:49       ` David Marchand
2021-01-14 16:04   ` David Marchand
2021-01-14 16:18     ` Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 18/20] eal: add missing include to mcslock Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 19/20] eal/x86: add architecture-specific headers to chkincs Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 20/20] test-meson-builds: add includes check to default x86 build Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 00/19] ensure headers have correct includes Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 01/19] eal: fix missing header inclusion Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 02/19] telemetry: fix missing header include Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 03/19] ethdev: " Bruce Richardson
2021-01-15 15:38     ` Andrew Rybchenko
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 04/19] net: " Bruce Richardson
2021-01-16 12:10     ` Ophir Munk
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 05/19] mbuf: " Bruce Richardson
2021-01-15 15:40     ` Andrew Rybchenko
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 06/19] bitratestats: " Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 07/19] rib: fix missing header includes Bruce Richardson
2021-01-15 11:37     ` Medvedkin, Vladimir
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 08/19] vhost: " Bruce Richardson
2021-01-21  8:38     ` Maxime Coquelin
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 09/19] ipsec: fix missing header include Bruce Richardson
2021-01-15 11:35     ` Ananyev, Konstantin
2021-01-15 11:37     ` Medvedkin, Vladimir
2021-01-15 11:45       ` Medvedkin, Vladimir
2021-01-15 11:49         ` Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 10/19] fib: fix missing header includes Bruce Richardson
2021-01-15 11:37     ` Medvedkin, Vladimir
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 11/19] table: fix missing header include Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 12/19] pipeline: fix missing header includes Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 13/19] metrics: fix variable declaration in header Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 14/19] node: fix missing header include Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 15/19] app: fix extra include paths for app builds Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 16/19] app/chkincs: add chkincs app to verify headers Bruce Richardson
2021-01-15 11:51     ` Ferruh Yigit
2021-01-15 11:59       ` Bruce Richardson
2021-01-15 14:09         ` Thomas Monjalon
2021-01-15 14:55           ` Bruce Richardson
2021-01-15 14:59             ` Bruce Richardson
2021-01-20 14:34               ` Bruce Richardson
2021-01-20 15:05                 ` David Marchand
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 17/19] eal: add missing include to mcslock Bruce Richardson
2021-01-15 13:25     ` Honnappa Nagarahalli
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 18/19] eal/x86: add architecture-specific headers to chkincs Bruce Richardson
2021-01-15 11:10   ` [dpdk-dev] [PATCH v2 19/19] test-meson-builds: add includes check to default x86 build Bruce Richardson
2021-01-21  9:25   ` [dpdk-dev] [PATCH v2 00/19] ensure headers have correct includes David Marchand
2021-01-21  9:33     ` Bruce Richardson
2021-01-21  9:36       ` Thomas Monjalon
2021-01-21  9:43         ` Bruce Richardson
2021-01-21 15:15         ` Bruce Richardson
2021-01-21 23:20           ` Thomas Monjalon
2021-01-22 10:44             ` Bruce Richardson
2021-01-25 14:11 ` Bruce Richardson [this message]
2021-01-25 14:11   ` [dpdk-dev] [PATCH v3 1/4] eal: add missing include to mcslock Bruce Richardson
2021-01-25 14:11   ` [dpdk-dev] [PATCH v3 2/4] build: separate out headers for include checking Bruce Richardson
2021-01-25 14:11   ` [dpdk-dev] [PATCH v3 3/4] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-25 14:11   ` [dpdk-dev] [PATCH v3 4/4] devtools: remove check-includes script Bruce Richardson
2021-01-25 15:51   ` [dpdk-dev] [PATCH v3 0/4] add checking of header includes David Marchand
2021-01-25 18:17     ` Bruce Richardson
2021-01-26 11:15     ` Bruce Richardson
2021-01-26 14:04       ` David Marchand
2021-01-26 14:24         ` Bruce Richardson
2021-01-26 14:39           ` Bruce Richardson
2021-01-26 15:31             ` Thomas Monjalon
2021-01-26 15:42               ` Bruce Richardson
2021-01-26 15:50                 ` Thomas Monjalon
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 0/7] " Bruce Richardson
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 1/7] eal: add missing include to mcslock Bruce Richardson
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 2/7] eal: fix error attribute use for clang Bruce Richardson
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 3/7] rib: fix missing header include Bruce Richardson
2021-01-26 14:21     ` Medvedkin, Vladimir
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 4/7] build: separate out headers for include checking Bruce Richardson
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 5/7] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 6/7] devtools: remove check-includes script Bruce Richardson
2021-01-26 14:18   ` [dpdk-dev] [PATCH v4 7/7] ci: add checking of includes to CI builds Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 0/8] add checking of header includes Bruce Richardson
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 1/8] eal: add missing include to mcslock Bruce Richardson
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 2/8] eal: fix error attribute use for clang Bruce Richardson
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 3/8] ethdev: make driver-only headers private Bruce Richardson
2021-01-27  8:56     ` David Marchand
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 4/8] rib: fix missing header include Bruce Richardson
2021-01-27 11:08     ` Medvedkin, Vladimir
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 5/8] build: separate out headers for include checking Bruce Richardson
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 6/8] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 7/8] devtools: remove check-includes script Bruce Richardson
2021-01-26 21:38   ` [dpdk-dev] [PATCH v5 8/8] ci: add checking of includes to CI builds Bruce Richardson
2021-01-27 14:46     ` Aaron Conole
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 0/8] add checking of header includes Bruce Richardson
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 1/8] eal: add missing include to mcslock Bruce Richardson
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 2/8] eal: fix error attribute use for clang Bruce Richardson
2021-01-28 11:00     ` David Marchand
2021-01-28 11:20       ` Bruce Richardson
2021-01-28 13:36         ` David Marchand
2021-01-28 14:16           ` Bruce Richardson
2021-01-28 15:16             ` Bruce Richardson
2021-01-28 16:46               ` [dpdk-dev] [dpdk-techboard] " Thomas Monjalon
2021-01-28 17:36                 ` Bruce Richardson
2021-01-29  8:35                   ` David Marchand
2021-01-29  8:54                     ` Thomas Monjalon
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 3/8] rib: fix missing header include Bruce Richardson
2021-01-28 11:01     ` David Marchand
2021-01-28 11:20       ` Bruce Richardson
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 4/8] ethdev: make driver-only headers private Bruce Richardson
2021-01-27 17:48     ` Maxime Coquelin
2021-01-28 10:17     ` Thomas Monjalon
2021-01-28 11:01     ` David Marchand
2021-01-28 16:38     ` Webster, Steven
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 5/8] build: separate out headers for include checking Bruce Richardson
2021-01-28 11:07     ` Thomas Monjalon
2021-01-28 11:23       ` Bruce Richardson
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 6/8] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-28 11:02     ` David Marchand
2021-01-28 11:27       ` Bruce Richardson
2021-01-28 11:31         ` David Marchand
2021-01-28 11:48           ` Bruce Richardson
2021-01-28 17:23           ` Bruce Richardson
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 7/8] devtools: remove check-includes script Bruce Richardson
2021-01-28 11:10     ` Thomas Monjalon
2021-01-28 11:38       ` Bruce Richardson
2021-01-28 14:05         ` Thomas Monjalon
2021-01-27 17:33   ` [dpdk-dev] [PATCH v6 8/8] ci: add checking of includes to CI builds Bruce Richardson
2021-01-28 11:12     ` Thomas Monjalon
2021-01-28 11:41       ` Bruce Richardson
2021-01-28 18:34         ` Bruce Richardson
2021-01-29 17:42           ` David Marchand
2021-01-29 21:38             ` Aaron Conole
2021-01-28 10:55   ` [dpdk-dev] [PATCH v6 0/8] add checking of header includes David Marchand
2021-01-28 11:47     ` Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 00/10] " Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 01/10] eal: add missing include to mcslock Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 02/10] eal: fix error attribute use for clang Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 03/10] power: fix missing header includes Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 04/10] rib: fix missing header include Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 05/10] ethdev: make driver-only headers private Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 06/10] eventdev: " Bruce Richardson
2021-02-22 22:34     ` Stephen Hemminger
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 07/10] build: separate out headers for include checking Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 08/10] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-02-02 11:36     ` David Marchand
2021-02-02 12:23       ` Bruce Richardson
2021-01-29 16:48   ` [dpdk-dev] [PATCH v7 09/10] devtools: remove check-includes script Bruce Richardson
2021-01-29 16:55   ` [dpdk-dev] [PATCH v7 10/10] ci: add checking of includes to CI builds Bruce Richardson
2021-01-29 21:37     ` Aaron Conole
2021-01-29 20:14   ` [dpdk-dev] [PATCH v7 00/10] add checking of header includes David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210125141115.573122-1-bruce.richardson@intel.com \
    --to=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).