git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/6] meson: simplify and parameterize various standard function checks
@ 2025-04-21 17:51 Eli Schwartz
  2025-04-21 17:51 ` [PATCH 2/6] meson: check for getpagesize before using it Eli Schwartz
                   ` (8 more replies)
  0 siblings, 9 replies; 40+ messages in thread
From: Eli Schwartz @ 2025-04-21 17:51 UTC (permalink / raw)
  To: git; +Cc: Sam James, Patrick Steinhardt

This is repetitive logic. We either want to use some -lc function, or if
it is not available we define it as -DNO_XXX and usually (but not
always) provide some custom compatibility impl instead.

Checking the intent of each block when reading through the file is slow
and not very DRY. Switch to taking an array of checkable functions
instead.

Not all functions are straightforward to move, since different macro
prefixes are used.

Signed-off-by: Eli Schwartz <eschwartz@gentoo.org>
---
 meson.build | 73 ++++++++++++++++++++++-------------------------------
 1 file changed, 30 insertions(+), 43 deletions(-)

diff --git a/meson.build b/meson.build
index c47cb79af0..6c147c22a4 100644
--- a/meson.build
+++ b/meson.build
@@ -1290,23 +1290,40 @@ if not compiler.has_member('struct passwd', 'pw_gecos', prefix: '#include <pwd.h
   libgit_c_args += '-DNO_GECOS_IN_PWENT'
 endif
 
-if compiler.has_function('sync_file_range')
-  libgit_c_args += '-DHAVE_SYNC_FILE_RANGE'
-endif
+checkfuncs = [
+  'strcasestr',
+  'memmem',
+  'strlcpy',
+  # no compat
+  'strtoull',
+  'setenv',
+  'mkdtemp',
+  # no compat
+  'initgroups',
+]
 
-if not compiler.has_function('strcasestr')
-  libgit_c_args += '-DNO_STRCASESTR'
-  libgit_sources += 'compat/strcasestr.c'
+if host_machine.system() == 'windows'
+  libgit_c_args += '-DUSE_WIN32_MMAP'
+else
+  checkfuncs += [
+    'mmap',
+    # unsetenv is provided by compat/mingw.c.
+    'unsetenv',
+  ]
 endif
 
-if not compiler.has_function('memmem')
-  libgit_c_args += '-DNO_MEMMEM'
-  libgit_sources += 'compat/memmem.c'
-endif
+foreach func: checkfuncs
+  if not compiler.has_function(func)
+    libgit_c_args += '-DNO_' + func.to_upper()
+    impl = 'compat/' + func + '.c'
+    if fs.exists(impl)
+      libgit_sources += impl
+    endif
+  endif
+endforeach
 
-if not compiler.has_function('strlcpy')
-  libgit_c_args += '-DNO_STRLCPY'
-  libgit_sources += 'compat/strlcpy.c'
+if compiler.has_function('sync_file_range')
+  libgit_c_args += '-DHAVE_SYNC_FILE_RANGE'
 endif
 
 if not compiler.has_function('strdup')
@@ -1322,45 +1339,15 @@ if not compiler.has_function('strtoumax')
   ]
 endif
 
-if not compiler.has_function('strtoull')
-  libgit_c_args += '-DNO_STRTOULL'
-endif
-
-if not compiler.has_function('setenv')
-  libgit_c_args += '-DNO_SETENV'
-  libgit_sources += 'compat/setenv.c'
-endif
-
 if not compiler.has_function('qsort')
   libgit_c_args += '-DINTERNAL_QSORT'
 endif
 libgit_sources += 'compat/qsort_s.c'
 
-# unsetenv is provided by compat/mingw.c.
-if host_machine.system() != 'windows' and not compiler.has_function('unsetenv')
-  libgit_c_args += '-DNO_UNSETENV'
-  libgit_sources += 'compat/unsetenv.c'
-endif
-
-if not compiler.has_function('mkdtemp')
-  libgit_c_args += '-DNO_MKDTEMP'
-  libgit_sources += 'compat/mkdtemp.c'
-endif
-
-if not compiler.has_function('initgroups')
-  libgit_c_args += '-DNO_INITGROUPS'
-endif
-
 if compiler.has_function('getdelim')
   libgit_c_args += '-DHAVE_GETDELIM'
 endif
 
-if host_machine.system() == 'windows'
-  libgit_c_args += '-DUSE_WIN32_MMAP'
-elif not compiler.has_function('mmap')
-  libgit_c_args += '-DNO_MMAP'
-  libgit_sources += 'compat/mmap.c'
-endif
 
 if compiler.has_function('clock_gettime')
   libgit_c_args += '-DHAVE_CLOCK_GETTIME'
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2025-04-25  9:53 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-21 17:51 [PATCH 1/6] meson: simplify and parameterize various standard function checks Eli Schwartz
2025-04-21 17:51 ` [PATCH 2/6] meson: check for getpagesize before using it Eli Schwartz
2025-04-22  7:31   ` Patrick Steinhardt
2025-04-24 23:48   ` Junio C Hamano
2025-04-25  0:06     ` Eli Schwartz
2025-04-21 17:51 ` [PATCH 3/6] meson: do a full usage-based compile check for sysinfo Eli Schwartz
2025-04-22  7:31   ` Patrick Steinhardt
2025-04-21 17:51 ` [PATCH 4/6] meson: add a couple missing networking dependencies Eli Schwartz
2025-04-22  7:31   ` Patrick Steinhardt
2025-04-21 17:51 ` [PATCH 5/6] meson: fix typo in function check that prevented checking for hstrerror Eli Schwartz
2025-04-22  7:31   ` Patrick Steinhardt
2025-04-21 17:51 ` [PATCH 6/6] meson: only check for missing networking syms on non-Windows; add compat impls Eli Schwartz
2025-04-22  7:31   ` Patrick Steinhardt
2025-04-22 15:27     ` Eli Schwartz
2025-04-23 11:25       ` Patrick Steinhardt
2025-04-21 20:04 ` [PATCH 1/6] meson: simplify and parameterize various standard function checks Eli Schwartz
2025-04-22  0:33   ` Junio C Hamano
2025-04-22  0:58     ` Eli Schwartz
2025-04-22  7:31   ` Patrick Steinhardt
2025-04-22 15:36     ` Eli Schwartz
2025-04-23 11:25       ` Patrick Steinhardt
2025-04-22  7:31 ` Patrick Steinhardt
2025-04-22 15:17   ` Junio C Hamano
2025-04-25  0:13 ` [PATCH v2 0/6] meson: miscellaneous system detection fixes Eli Schwartz
2025-04-25  0:13   ` [PATCH v2 1/6] meson: simplify and parameterize various standard function checks Eli Schwartz
2025-04-25  0:13   ` [PATCH v2 2/6] meson: check for getpagesize before using it Eli Schwartz
2025-04-25  0:13   ` [PATCH v2 3/6] meson: do a full usage-based compile check for sysinfo Eli Schwartz
2025-04-25  0:13   ` [PATCH v2 4/6] meson: add a couple missing networking dependencies Eli Schwartz
2025-04-25  0:13   ` [PATCH v2 5/6] meson: fix typo in function check that prevented checking for hstrerror Eli Schwartz
2025-04-25  0:13   ` [PATCH v2 6/6] meson: only check for missing networking syms on non-Windows; add compat impls Eli Schwartz
2025-04-25  4:39   ` [PATCH v2 0/6] meson: miscellaneous system detection fixes Patrick Steinhardt
2025-04-25  5:27     ` Eli Schwartz
2025-04-25  5:25 ` [PATCH v3 " Eli Schwartz
2025-04-25  5:25   ` [PATCH v3 1/6] meson: simplify and parameterize various standard function checks Eli Schwartz
2025-04-25  5:25   ` [PATCH v3 2/6] meson: check for getpagesize before using it Eli Schwartz
2025-04-25  5:25   ` [PATCH v3 3/6] meson: do a full usage-based compile check for sysinfo Eli Schwartz
2025-04-25  5:25   ` [PATCH v3 4/6] meson: add a couple missing networking dependencies Eli Schwartz
2025-04-25  5:25   ` [PATCH v3 5/6] meson: fix typo in function check that prevented checking for hstrerror Eli Schwartz
2025-04-25  5:25   ` [PATCH v3 6/6] meson: only check for missing networking syms on non-Windows; add compat impls Eli Schwartz
2025-04-25  9:53   ` [PATCH v3 0/6] meson: miscellaneous system detection fixes Patrick Steinhardt

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).