diff mbox series

[3/3] meson: add support for 'headers-check'

Message ID 20250408-505-wire-up-sparse-via-meson-v1-3-17476e5cea3f@gmail.com (mailing list archive)
State Superseded
Headers show
Series meson: add corresponding target for Makefile's hdr-check | expand

Commit Message

Karthik Nayak April 8, 2025, 2:55 p.m. UTC
The Makefile supports a target called 'hdr-check', which checks if
individual header files can be independently compiled. Let's port this
functionality to meson, our new build system too.

Let's avoid the abbreviation and name the target 'headers-check', which
is easier to read.

The implementation resembles that of the Makefile and provides the same
check.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
---
 meson.build | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)

Comments

Junio C Hamano April 8, 2025, 10:19 p.m. UTC | #1
Karthik Nayak <karthik.188@gmail.com> writes:

> The Makefile supports a target called 'hdr-check', which checks if
> individual header files can be independently compiled. Let's port this
> functionality to meson, our new build system too.

Good goal.

> Let's avoid the abbreviation and name the target 'headers-check', which
> is easier to read.

This is a bit dubious.  Are developers supposed to keep track of
correspondence between the long establish name and the new name this
patch just came up with?  For how long?

If we make it one of our goals to name the build target in
pronounceable ways, that is perfectly fine, and it would be a good
task to allow "make headers-check" be a synonym for "make hdr-check"
(and do the same on the meson side), and deprecate hdr-check in a
cycle or two (this is not end-user facing, so the transition period
can legitimately be much shorter than usual.

But we still need to have some transition period to help those who
build from the source adjust their set-ups that have called "make
hdr-check" for a long time.
Karthik Nayak April 10, 2025, 9:13 a.m. UTC | #2
Junio C Hamano <gitster@pobox.com> writes:

> Karthik Nayak <karthik.188@gmail.com> writes:
>
>> The Makefile supports a target called 'hdr-check', which checks if
>> individual header files can be independently compiled. Let's port this
>> functionality to meson, our new build system too.
>
> Good goal.
>
>> Let's avoid the abbreviation and name the target 'headers-check', which
>> is easier to read.
>
> This is a bit dubious.  Are developers supposed to keep track of
> correspondence between the long establish name and the new name this
> patch just came up with?  For how long?
>

Fair enough.

> If we make it one of our goals to name the build target in
> pronounceable ways, that is perfectly fine, and it would be a good
> task to allow "make headers-check" be a synonym for "make hdr-check"
> (and do the same on the meson side), and deprecate hdr-check in a
> cycle or two (this is not end-user facing, so the transition period
> can legitimately be much shorter than usual.
>
> But we still need to have some transition period to help those who
> build from the source adjust their set-ups that have called "make
> hdr-check" for a long time.

Well put. My intention was that anyone using meson will anyways have to
change from `make <target>` to `meson compile <target>`. So they
wouldn't mind <target> changing too.

But it would be nicer to keep both the old target and the new
replacement and eventually remove the old target. Will do that and send
in a new version.
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index 790d178007..1e0ecd37d3 100644
--- a/meson.build
+++ b/meson.build
@@ -655,6 +655,12 @@  if git.found()
   endforeach
 endif
 
+headers_generated = [
+  'command-list.h',
+  'config-list.h',
+  'hook-list.h'
+]
+
 if not get_option('breaking_changes')
   builtin_sources += 'builtin/pack-redundant.c'
 endif
@@ -1995,6 +2001,107 @@  endif
 
 subdir('contrib')
 
+headers_check_exclude = headers_generated
+headers_check_exclude += [
+  'compat/apple-common-crypto.h',
+  'compat/bswap.h',
+  'compat/compiler.h',
+  'compat/disk.h',
+  'compat/fsmonitor/fsm-darwin-gcc.h',
+  'compat/fsmonitor/fsm-health.h',
+  'compat/fsmonitor/fsm-listen.h',
+  'compat/mingw.h',
+  'compat/msvc.h',
+  'compat/nedmalloc/malloc.c.h',
+  'compat/nedmalloc/nedmalloc.h',
+  'compat/nonblock.h',
+  'compat/obstack.h',
+  'compat/poll/poll.h',
+  'compat/precompose_utf8.h',
+  'compat/regex/regex.h',
+  'compat/regex/regex_internal.h',
+  'compat/sha1-chunked.h',
+  'compat/terminal.h',
+  'compat/vcbuild/include/sys/param.h',
+  'compat/vcbuild/include/sys/time.h',
+  'compat/vcbuild/include/sys/utime.h',
+  'compat/vcbuild/include/unistd.h',
+  'compat/vcbuild/include/utime.h',
+  'compat/win32.h',
+  'compat/win32/alloca.h',
+  'compat/win32/dirent.h',
+  'compat/win32/lazyload.h',
+  'compat/win32/path-utils.h',
+  'compat/win32/pthread.h',
+  'compat/win32/syslog.h',
+  'compat/zlib-compat.h',
+  't/unit-tests/clar/clar.h',
+  't/unit-tests/clar/clar/fixtures.h',
+  't/unit-tests/clar/clar/fs.h',
+  't/unit-tests/clar/clar/print.h',
+  't/unit-tests/clar/clar/sandbox.h',
+  't/unit-tests/clar/clar/summary.h',
+  't/unit-tests/clar/test/clar_test.h',
+  'unicode-width.h',
+  'xdiff/xdiff.h',
+  'xdiff/xdiffi.h',
+  'xdiff/xemit.h',
+  'xdiff/xinclude.h',
+  'xdiff/xmacros.h',
+  'xdiff/xprepare.h',
+  'xdiff/xtypes.h',
+  'xdiff/xutils.h',
+]
+
+if sha1_backend != 'openssl'
+  headers_check_exclude += 'sha1/openssl.h'
+endif
+if sha256_backend != 'openssl'
+  headers_check_exclude += 'sha256/openssl.h'
+endif
+if sha256_backend != 'nettle'
+  headers_check_exclude += 'sha256/nettle.h'
+endif
+if sha256_backend != 'gcrpyt'
+  headers_check_exclude += 'sha256/gcrypt.h'
+endif
+
+if headers.length() != 0 and compiler.get_argument_syntax() == 'gcc'
+  hco_targets = []
+  foreach h : headers
+    if headers_check_exclude.contains(h)
+      continue
+    endif
+
+    hcc = custom_target(
+      input: h,
+      output: h.underscorify() + 'cc',
+      command: [
+        shell,
+        '-c',
+        'echo \'#include "git-compat-util.h"\' > @OUTPUT@ && echo -n \'#include "' + h + '"\' >> @OUTPUT@'
+      ]
+    )
+
+    hco = custom_target(
+      input: hcc,
+      output: h.underscorify().replace('.h', '.hco'),
+      command: [
+        compiler.cmd_array(),
+        libgit_c_args,
+        '-I', meson.project_source_root(),
+        '-I', meson.project_source_root() / 't/unit-tests',
+        '-o', '/dev/null',
+        '-c', '-xc',
+        '@INPUT@'
+      ]
+    )
+    hco_targets += hco
+  endforeach
+
+  alias_target('headers-check', hco_targets)
+endif
+
 foreach key, value : {
   'DIFF': diff.full_path(),
   'GIT_SOURCE_DIR': meson.project_source_root(),