Skip to content

Commit

Permalink
build: add --local-flint to set rpath in dev build
Browse files Browse the repository at this point in the history
  • Loading branch information
oscarbenjamin committed May 8, 2024
1 parent 57b7386 commit 5d52824
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
build/*
build-install/*
dist/*
src/flint/**/*.c
src/flint/*.html
Expand Down
53 changes: 53 additions & 0 deletions .spin/cmds.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import os.path
import click
from spin.cmds import meson

#
# Wrap spin's build command to add the --local-flint argument
#

@click.command()
@click.argument("meson_args", nargs=-1)
@click.option("-j", "--jobs", help="Number of parallel tasks to launch", type=int)
@click.option("--clean", is_flag=True, help="Clean build directory before build")
@click.option(
"-v", "--verbose", is_flag=True, help="Print all build output, even installation"
)

@click.option("--local-flint",
help="Path to pkgconfig directory for a local build of flint and other directories")

@click.pass_context
def build(ctx, *args, local_flint=None, **kwargs):
"""🔧 Build package with Meson/ninja and install
To link against a local build of flint use e.g.
spin build --local-flint=.local/lib/pkgconfig
MESON_ARGS are passed through e.g.:
spin build -- -Dpkg_config_path=/lib64/pkgconfig
The package is installed to build-install
By default meson-python does release builds. To be able to use a debugger,
tell meson to build in debug mode:
spin build -- -Dbuildtype=debug
or set CFLAGS appropriately:
CFLAGS="-O0 -g" spin build
"""
if local_flint is not None:
pkg_config_path = os.path.abspath(local_flint)
ctx.params["meson_args"] += (
f'-Dpkg_config_path={pkg_config_path}',
f'-Dadd_flint_rpath=true',
)

del ctx.params["local_flint"]

# Call spin's build function
ctx.forward(meson.build)
10 changes: 10 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ gmp_dep = dependency('gmp')
mpfr_dep = dependency('mpfr')
flint_dep = dependency('flint')

# Add rpaths for a local build of flint found via pkgconfig
# https://github.com/mesonbuild/meson/issues/13046
if get_option('add_flint_rpath')
flint_lib_dir = flint_dep.get_pkgconfig_variable('libdir')
add_project_link_arguments(
'-Wl,-rpath=' + flint_lib_dir,
language: 'c',
)
endif

# flint.pc was missing -lflint until Flint 3.1.0
if flint_dep.version().version_compare('<3.1')
flint_dep = cc.find_library('flint')
Expand Down
1 change: 1 addition & 0 deletions meson.options
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
option('add_flint_rpath', type : 'boolean', value : false)
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ package = "flint"
[tool.spin.commands]

"Build" = [
"spin.cmds.meson.build",
".spin/cmds.py:build",
"spin.cmds.meson.test",
"spin.cmds.build.sdist",
"spin.cmds.pip.install",
Expand Down
7 changes: 7 additions & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
cython
spin
meson
meson-python
pytest
coverage
pytest-cov

0 comments on commit 5d52824

Please sign in to comment.