Merge branch 'es/meson-cleanup'

Code clean-up for meson-based build infrastructure.

* es/meson-cleanup:
  meson: only check for missing networking syms on non-Windows; add compat impls
  meson: fix typo in function check that prevented checking for hstrerror
  meson: add a couple missing networking dependencies
  meson: do a full usage-based compile check for sysinfo
  meson: check for getpagesize before using it
  meson: simplify and parameterize various standard function checks
This commit is contained in:
Junio C Hamano
2025-05-05 14:56:25 -07:00

View File

@@ -1086,10 +1086,6 @@ if compiler.has_header('alloca.h')
libgit_c_args += '-DHAVE_ALLOCA_H'
endif
if compiler.has_header('sys/sysinfo.h')
libgit_c_args += '-DHAVE_SYSINFO'
endif
# Windows has libgen.h and a basename implementation, but we still need our own
# implementation to threat things like drive prefixes specially.
if host_machine.system() == 'windows' or not compiler.has_header('libgen.h')
@@ -1112,18 +1108,22 @@ if host_machine.system() == 'windows'
networking_dependencies += winsock
endif
else
libresolv = compiler.find_library('resolv', required: false)
if libresolv.found()
networking_dependencies += libresolv
endif
networking_dependencies += [
compiler.find_library('nsl', required: false),
compiler.find_library('resolv', required: false),
compiler.find_library('socket', required: false),
]
endif
libgit_dependencies += networking_dependencies
foreach symbol : ['inet_ntop', 'inet_pton', 'strerror']
if not compiler.has_function(symbol, dependencies: networking_dependencies)
libgit_c_args += '-DNO_' + symbol.to_upper()
endif
endforeach
if host_machine.system() != 'windows'
foreach symbol : ['inet_ntop', 'inet_pton', 'hstrerror']
if not compiler.has_function(symbol, dependencies: networking_dependencies)
libgit_c_args += '-DNO_' + symbol.to_upper()
libgit_sources += 'compat/' + symbol + '.c'
endif
endforeach
endif
has_ipv6 = compiler.has_function('getaddrinfo', dependencies: networking_dependencies)
if not has_ipv6
@@ -1161,11 +1161,6 @@ else
build_options_config.set('NO_UNIX_SOCKETS', '1')
endif
if not compiler.has_function('pread')
libgit_c_args += '-DNO_PREAD'
libgit_sources += 'compat/pread.c'
endif
if host_machine.system() == 'darwin'
libgit_sources += 'compat/precompose_utf8.c'
libgit_c_args += '-DPRECOMPOSE_UNICODE'
@@ -1300,6 +1295,10 @@ if host_machine.system() != 'windows'
endif
endif
if compiler.has_member('struct sysinfo', 'totalram', prefix: '#include <sys/sysinfo.h>')
libgit_c_args += '-DHAVE_SYSINFO'
endif
if compiler.has_member('struct stat', 'st_mtimespec.tv_nsec', prefix: '#include <sys/stat.h>')
libgit_c_args += '-DUSE_ST_TIMESPEC'
elif not compiler.has_member('struct stat', 'st_mtim.tv_nsec', prefix: '#include <sys/stat.h>')
@@ -1318,77 +1317,57 @@ if not compiler.has_member('struct passwd', 'pw_gecos', prefix: '#include <pwd.h
libgit_c_args += '-DNO_GECOS_IN_PWENT'
endif
checkfuncs = {
'strcasestr' : ['strcasestr.c'],
'memmem' : ['memmem.c'],
'strlcpy' : ['strlcpy.c'],
'strtoull' : [],
'setenv' : ['setenv.c'],
'mkdtemp' : ['mkdtemp.c'],
'initgroups' : [],
'strtoumax' : ['strtoumax.c', 'strtoimax.c'],
'pread' : ['pread.c'],
}
if host_machine.system() == 'windows'
libgit_c_args += '-DUSE_WIN32_MMAP'
else
checkfuncs += {
'mmap' : ['mmap.c'],
# provided by compat/mingw.c.
'unsetenv' : ['unsetenv.c'],
# provided by compat/mingw.c.
'getpagesize' : [],
}
endif
foreach func, impls : checkfuncs
if not compiler.has_function(func)
libgit_c_args += '-DNO_' + func.to_upper()
foreach impl : impls
libgit_sources += 'compat/' + impl
endforeach
endif
endforeach
if compiler.has_function('sync_file_range')
libgit_c_args += '-DHAVE_SYNC_FILE_RANGE'
endif
if not compiler.has_function('strcasestr')
libgit_c_args += '-DNO_STRCASESTR'
libgit_sources += 'compat/strcasestr.c'
endif
if not compiler.has_function('memmem')
libgit_c_args += '-DNO_MEMMEM'
libgit_sources += 'compat/memmem.c'
endif
if not compiler.has_function('strlcpy')
libgit_c_args += '-DNO_STRLCPY'
libgit_sources += 'compat/strlcpy.c'
endif
if not compiler.has_function('strdup')
libgit_c_args += '-DOVERRIDE_STRDUP'
libgit_sources += 'compat/strdup.c'
endif
if not compiler.has_function('strtoumax')
libgit_c_args += '-DNO_STRTOUMAX'
libgit_sources += [
'compat/strtoumax.c',
'compat/strtoimax.c',
]
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'