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

Add sage-generate-meson script to sage-setup #37008

Open
wants to merge 20 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
288f9f5
Add generate-meson.py
tobiasdiez Dec 31, 2023
cb65611
Move generate-meson.py to src/sage_setup/autogen/meson/__init__.py
mkoeppe Jan 4, 2024
c44b1d0
pkgs/sage-setup/pyproject.toml: Add script sage-generate-meson
mkoeppe Jan 4, 2024
b4a2114
autopep8 -i src/sage_setup/autogen/meson/__init__.py
mkoeppe Jan 4, 2024
73825e7
sage-generate-meson: Conditionalize by distribution variables in meso…
mkoeppe Jan 5, 2024
58bda68
sage-generate-meson: Go depth-first to collect distributions
mkoeppe Jan 5, 2024
7ecf459
src/sage/meson.build.in: This is src/meson.build from PR Compile ever…
tobiasdiez Jan 1, 2024
da31242
sage-generate-meson: Paste meson.build.in if it exists
mkoeppe Jan 5, 2024
b4a7f58
src/sage/meson.build.in: Add non-auto-generated bits from other meson…
tobiasdiez Dec 31, 2023
24455f1
.gitignore: Ignore generated meson.build files
mkoeppe Jan 5, 2024
1d696be
sage-generate-meson: Fix up
mkoeppe Jan 5, 2024
dc0dd5c
src/sage/**/meson.build.in: Add non-auto-generated bits from other me…
tobiasdiez Dec 31, 2023
711bfe1
sage-generate-meson: Overwrite atomically, show diff
mkoeppe Jan 5, 2024
ea6317b
sage-generate-meson: Better logging
mkoeppe Jan 5, 2024
ceeda69
sage-generate-meson: Fix up creating files
mkoeppe Jan 5, 2024
901028c
sage-generate-meson: Add option --output-dir
mkoeppe Jan 5, 2024
c852802
sage-generate-meson: Add option --monolithic
mkoeppe Jan 5, 2024
cb810a1
sage-generate-meson: Improve option --monolithic
mkoeppe Jan 5, 2024
638591b
sage-generate-meson: Use install_subdir only when --monolithic
mkoeppe Jan 6, 2024
ec43bc5
src/sage_setup/autogen/meson/__init__.py: Output style changes to mat…
mkoeppe Mar 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,9 @@ src/*.egg-info/
/src/bin/sage-env-config
/src/bin/sage-src-env-config

# Generated by sage-generate-meson
/src/**/meson.build

# Virtual environments
/venv
src/.env
Expand Down
4 changes: 4 additions & 0 deletions pkgs/sage-setup/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,16 @@ content-type = "text/x-rst"
[project.optional-dependencies]
autogen = ["jinja2"]

[project.scripts]
sage-generate-meson = "sage_setup.autogen.meson:generate_meson"

[tool.setuptools]
packages = [
"sage_setup",
"sage_setup.autogen",
"sage_setup.autogen.interpreters",
"sage_setup.autogen.interpreters.specs",
"sage_setup.autogen.meson",
"sage_setup.command",
]
include-package-data = false
Expand Down
42 changes: 42 additions & 0 deletions src/sage/ext/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
interpreters = custom_target(
'sage.ext.interpreters',
output: 'all.py',
input: '../../sage_setup/autogen/interpreters/__init__.py',
command: [py, '-m', 'sage_setup.autogen.interpreters', meson.current_source_dir() / 'interpreters'],
# This is actually against the Meson philosophy, which does not like in-source builds.
# So normally you would do something like the following
# however, this we currently cannot pass the generated files as sources to install_sources
# properly fixing this is left for a follow-up
# command: [py, '-m', 'sage_setup.autogen.interpreters','@OUTDIR@'],
env: ['PYTHONPATH=' + meson.current_source_dir() / '..' / '..'],
)

# Manually create header files, which otherwise is not found
wrapper_el_header = custom_target(
'wrapper_el.h',
output : 'wrapper_el.h',
input : ['interpreters/wrapper_el.pyx', interpreters],
command : [cython.cmd_array(), '@INPUT0@', '-o', '@OUTPUT@', '-I', join_paths(meson.current_source_dir(), '../../')],
)
wrapper_cc_header = custom_target(
'wrapper_cc.h',
output : 'wrapper_cc.h',
input : ['interpreters/wrapper_cc.pyx', interpreters],
command : [cython.cmd_array(), '@INPUT0@', '-o', '@OUTPUT@', '-I', join_paths(meson.current_source_dir(), '../../')],
)
wrapper_cdf_header = custom_target(
'wrapper_cdf.h',
output : 'wrapper_cdf.h',
input : ['interpreters/wrapper_cdf.pyx', interpreters],
command : [cython.cmd_array(), '@INPUT0@', '-o', '@OUTPUT@', '-I', join_paths(meson.current_source_dir(), '../../')],
)
wrapper_rr_header = custom_target(
'wrapper_rr.h',
output : 'wrapper_rr.h',
input : ['interpreters/wrapper_rr.pyx', interpreters],
command : [cython.cmd_array(), '@INPUT0@', '-o', '@OUTPUT@', '-I', join_paths(meson.current_source_dir(), '../../')],
)

interpreters_dep = declare_dependency(
sources: [interpreters, wrapper_el_header, wrapper_cc_header, wrapper_cdf_header, wrapper_rr_header],
)
7 changes: 7 additions & 0 deletions src/sage/graphs/graph_decompositions/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
tdlib = cc.find_library('tdlib', required: false)
# Cannot be found via pkg-config
rw = declare_dependency(
dependencies: [
cc.find_library('rw'),
]
)
10 changes: 10 additions & 0 deletions src/sage/graphs/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
bliss = cc.find_library('bliss', required: false)
mcqd = cc.find_library('mcqd', required: false)
cliquer = cc.find_library('cliquer')

# Cannot be found via pkg-config
planarity = declare_dependency(
dependencies: [
cc.find_library('planarity'),
]
)
1 change: 1 addition & 0 deletions src/sage/libs/coxeter3/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
coxeter3 = cc.find_library('coxeter3', required: false)
5 changes: 5 additions & 0 deletions src/sage/libs/giac/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
giac = declare_dependency(
dependencies: [
cc.find_library('giac', required: false),
]
)
7 changes: 7 additions & 0 deletions src/sage/libs/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
sirocco = declare_dependency(
dependencies: [
cc.find_library('sirocco', required: false),
]
)
# cannot be found via pkg-config
ecl = cc.find_library('ecl')
6 changes: 6 additions & 0 deletions src/sage/libs/symmetrica/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Cannot be found by pkg-config
symmetrica = declare_dependency(
dependencies: [
cc.find_library('symmetrica'),
]
)
11 changes: 11 additions & 0 deletions src/sage/matrix/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Cannot be found via pkg-config
meataxe = declare_dependency(
dependencies: [
cc.find_library('meataxe', required: false),
]
)
iml = declare_dependency(
dependencies: [
cc.find_library('iml'),
]
)
150 changes: 150 additions & 0 deletions src/sage/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
# Setup dependencies that are needed by many modules

inc_numpy = run_command(py,
[
'-c',
'''
import numpy
print(numpy.get_include())
'''.strip()
],
check: true
).stdout().strip()
numpy = declare_dependency(
include_directories: inc_numpy,
)

inc_cysignals = run_command(py,
[
'-c',
'''
import cysignals
print(cysignals.__file__.replace('__init__.py', ''))
'''.strip()
],
check: true
).stdout().strip()
cysignals = declare_dependency(
include_directories: inc_cysignals,
)

inc_gmpy2 = run_command(py,
[
'-c',
'''
import gmpy2
print(gmpy2.__file__.replace('__init__.py', ''))
'''.strip()
],
check: true
).stdout().strip()
gmpy2 = declare_dependency(
include_directories: inc_gmpy2,
)
gmp = dependency('gmp', required: true)

inc_cypari2 = run_command(py,
[
'-c',
'''
import cypari2
print(cypari2.__file__.replace('__init__.py', ''))
'''.strip()
],
check: true
).stdout().strip()
cypari2 = declare_dependency(
include_directories: inc_cypari2,
)
pari = cc.find_library('pari')

mpfr = cc.find_library('mpfr')

# Cannot be found by pkg-config
flint = cc.find_library('flint')

cblas = dependency('cblas')
gsl = dependency('gsl', fallback: ['gsl', 'gsl_dep'], version : '>=2.5', required: true)
gd = cc.find_library('gd')
iml = cc.find_library('iml')
m = cc.find_library('m')
m4ri = cc.find_library('m4ri')
m4rie = cc.find_library('m4rie')
mtx = cc.find_library('mtx', required: false)
png = cc.find_library('png')
zlib = cc.find_library('z')
intl = cc.find_library('intl', required: false)
curl = cc.find_library('curl')
# Cannot be found via pkg-config
ec = cc.find_library('ec')
ecm = cc.find_library('ecm')
# Cannot be found via pkg-config
glpk = cc.find_library('glpk')
ppl = cc.find_library('ppl')
gmpxx = cc.find_library('gmpxx')
readline = cc.find_library('readline')
lfunction = cc.find_library('Lfunction', required: false)
fflas = cc.find_library('fflas')
givaro = cc.find_library('givaro')
linbox = cc.find_library('linbox')
braiding = cc.find_library('braiding')
gc = cc.find_library('gc')
homfly = cc.find_library('homfly')
mpc = cc.find_library('mpc')
mpfi = cc.find_library('mpfi')
mpc = cc.find_library('mpc')
# Cannot be found via pkg-config
gap = cc.find_library('gap')

singular = dependency('Singular')

maxima = find_program('maxima', required: true)

# Cannot be found via pkg-config
ntl = cc.find_library('ntl', required: true)

# It's strange but cython cannot find its own include files
# so we find them ourselves, and add them to the include path
inc_cython = run_command(py,
[
'-c',
'''
import Cython
print(Cython.__file__.replace('__init__.py', ''))
'''.strip()
],
check: true
).stdout().strip()
add_project_arguments('-I', inc_cython + 'Includes', language : 'cython')

# Meson currently ignores include_directories for Cython modules, so we
# have to add them manually.
# https://github.com/mesonbuild/meson/issues/9562
add_project_arguments('-I', meson.current_source_dir(), language : 'cython')

# Add global compiler flags
add_project_arguments('-X auto_pickle=False', language : 'cython')
add_project_arguments('-X autotestdict=False', language : 'cython')
add_project_arguments('-X binding=False', language : 'cython')
add_project_arguments('-X c_api_binop_methods=True', language : 'cython')
add_project_arguments('-X cdivision=True', language : 'cython')
add_project_arguments('-X cpow=True', language : 'cython')
add_project_arguments('-X embedsignature=True', language : 'cython')
add_project_arguments('--embed-positions', language : 'cython')
add_project_arguments('-X fast_getattr=True', language : 'cython')
#add_project_arguments('-X language_level="3"', language : 'cython')
add_project_arguments('-X legacy_implicit_noexcept=True', language : 'cython')
add_project_arguments('-X preliminary_late_includes_cy28=True', language : 'cython')

inc_cpython = include_directories('sage/cpython')
inc_rings = include_directories('sage/rings')
inc_rings_finite = include_directories('sage/rings/finite_rings')
inc_flint = include_directories('sage/libs/flint')
inc_gsl = include_directories('sage/libs/gsl')
inc_ntl = include_directories('sage/libs/ntl')
inc_arb = include_directories('sage/libs/arb')
inc_data_structures = include_directories('sage/data_structures')
inc_ext = include_directories('sage/ext')
inc_interpreters = include_directories('sage/ext/interpreters')
inc_partn_ref2 = include_directories('sage/groups/perm_gps/partn_ref2')
inc_src = include_directories('.')
7 changes: 7 additions & 0 deletions src/sage/modular/arithgroup/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Manually create header file, which otherwise is not found
farey_symbol_header = custom_target(
'farey_symbol.h',
output : 'farey_symbol.h',
input : 'farey_symbol.pyx',
command : [cython.cmd_array(), '--cplus', '@INPUT@', '-o', '@OUTPUT@', '-I', join_paths(meson.current_source_dir(), '../../../')],
)
5 changes: 5 additions & 0 deletions src/sage/rings/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pthread = declare_dependency(
dependencies: [
cc.find_library('pthread'),
]
)
7 changes: 7 additions & 0 deletions src/sage/rings/polynomial/pbori/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
brial = declare_dependency(
dependencies: [
cc.find_library('brial', required: false),
]
)
# Cannot be found via pkg-config
brial_groebner = cc.find_library('brial_groebner')
1 change: 1 addition & 0 deletions src/sage/schemes/hyperelliptic_curves/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
inc_hypellfrob = include_directories('hypellfrob')
2 changes: 2 additions & 0 deletions src/sage/symbolic/meson.build.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
inc_ginac = include_directories('ginac')
inc_pynac = include_directories('.')
Loading
Loading