Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MAINT: Update meson build infrastructure. #25049

Merged
merged 4 commits into from
Nov 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions numpy/core/include/numpy/npy_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,9 @@
#define npy_ftell ftell
#endif
#include <sys/types.h>
#ifndef _WIN32
#include <unistd.h>
#endif
#define npy_lseek lseek
#define npy_off_t off_t

Expand Down
46 changes: 14 additions & 32 deletions numpy/core/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -257,37 +257,6 @@ foreach filefunc_maybe: optional_file_funcs
endif
endforeach

# Optional locale function
have_strtold_l = cc.has_function('strtold_l', include_directories: inc_curdir,
prefix:'''
#include <stdlib.h>
#include <xlocale.h>
#include "feature_detection_locale.h"
''')
if not have_strtold_l
# Retry with locale.h, seems to vary across Linux distros
have_strtold_l = cc.has_function('strtold_l', include_directories: inc_curdir,
prefix:'''
#include <stdlib.h>
#include <locale.h>
#include "feature_detection_locale.h"
''')
endif
if have_strtold_l
cdata.set10('HAVE_STRTOLD_L', true)
else
# FIXME: this is wrong! the HAVE_ define should not exist, or it'll be
# interpreted as the function being available (true/false does nothing, see
# note on HAVE_ defines higher up). This is necessary though in order to make
# the Linux CI job pass. So either the check is wrong somehow, or this
# function is not available in CI. For the latter there is a fallback path,
# but that is broken because we don't have the exact long double
# representation checks.
if cc.get_argument_syntax() != 'msvc'
cdata.set10('HAVE_STRTOLD_L', false)
endif
endif

# Other optional functions
optional_misc_funcs = [
'backtrace',
Expand All @@ -305,7 +274,7 @@ endforeach
# SSE headers only enabled automatically on amd64/x32 builds
optional_headers = [
'features.h', # for glibc version linux
'xlocale.h', # see GH#8367
'xlocale.h', # removed in glibc 2.26, but may still be useful - see gh-8367
'dlfcn.h', # dladdr
'execinfo.h', # backtrace
'libunwind.h', # backtrace for LLVM/Clang using libunwind
Expand All @@ -317,6 +286,19 @@ foreach header: optional_headers
endif
endforeach

# Optional locale function - GNU-specific
_strtold_prefix = '''
#define _GNU_SOURCE
#include <locale.h>
#include <stdlib.h>
'''
if cdata.get('HAVE_XLOCALE_H', 0) == 1
_strtold_prefix += '#include <xlocale.h>'
endif
if cc.has_function('strtold_l', include_directories: inc_curdir, prefix: _strtold_prefix)
cdata.set10('HAVE_STRTOLD_L', true)
endif

# Optional compiler attributes
# TODO: this doesn't work with cc.has_function_attribute, see
# https://github.com/mesonbuild/meson/issues/10732
Expand Down
3 changes: 3 additions & 0 deletions numpy/core/src/common/numpyos.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@

#include "npy_pycompat.h"

#if defined(HAVE_STRTOLD_L) && !defined(_GNU_SOURCE)
# define _GNU_SOURCE
#endif
#include <locale.h>
#include <stdio.h>

Expand Down
5 changes: 3 additions & 2 deletions numpy/lib/tests/test_histograms.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,8 +398,9 @@ def test_histogram_bin_edges(self):
edges = histogram_bin_edges(arr, bins='auto', range=(0, 1))
assert_array_equal(edges, e)

@requires_memory(free_bytes=1e10)
@pytest.mark.slow
# @requires_memory(free_bytes=1e10)
# @pytest.mark.slow
@pytest.mark.skip(reason="Bad memory reports lead to OOM in ci testing")
def test_big_arrays(self):
sample = np.zeros([100000000, 3])
xbins = 400
Expand Down
19 changes: 12 additions & 7 deletions numpy/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,20 @@ endif

# Platform detection
is_windows = host_machine.system() == 'windows'
is_mingw = is_windows and cc.get_id() == 'gcc'
is_mingw = is_windows and cc.get_define('__MINGW32__') != ''

if is_mingw
# For mingw-w64, link statically against the UCRT.
gcc_link_args = ['-lucrt', '-static']
add_project_link_arguments(gcc_link_args, language: ['c', 'cpp'])
# Force gcc to float64 long doubles for compatibility with MSVC
# builds, for C only.
add_project_arguments('-mlong-double-64', language: 'c')
is_mingw_built_python = run_command(
py, ['-c', 'import sysconfig; print(sysconfig.get_platform())'],
check: true).stdout().strip().startswith('mingw')
if not is_mingw_built_python
# For mingw-w64, link statically against the UCRT.
gcc_link_args = ['-lucrt', '-static']
add_project_link_arguments(gcc_link_args, language: ['c', 'cpp'])
# Force gcc to float64 long doubles for compatibility with MSVC
# builds, for C only.
add_project_arguments('-mlong-double-64', language: 'c')
endif
# Make fprintf("%zd") work (see https://github.com/rgommers/scipy/issues/118)
add_project_arguments('-D__USE_MINGW_ANSI_STDIO=1', language: ['c', 'cpp'])
endif
Expand Down