build: move to a Cargo workspace
This is purely to let Cargo's dependency resolver do stuff for us, we do not actually intend to build this stuff with Cargo to begin with. Change-Id: I4c08d55595c7c27b7096375022581e1e34308a87
This commit is contained in:
parent
e38410799b
commit
dba615098d
7 changed files with 42 additions and 31 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -9,6 +9,10 @@ GTAGS
|
||||||
# ccls
|
# ccls
|
||||||
/.ccls-cache
|
/.ccls-cache
|
||||||
|
|
||||||
|
# auto-generated compilation database
|
||||||
|
compile_commands.json
|
||||||
|
rust-project.json
|
||||||
|
|
||||||
result
|
result
|
||||||
result-*
|
result-*
|
||||||
|
|
||||||
|
@ -29,3 +33,6 @@ buildtime.bin
|
||||||
/.pre-commit-config.yaml
|
/.pre-commit-config.yaml
|
||||||
/.nocontribmsg
|
/.nocontribmsg
|
||||||
/release
|
/release
|
||||||
|
|
||||||
|
# Rust build files when using Cargo (not actually supported for building but it spews the files anyway)
|
||||||
|
/target/
|
||||||
|
|
0
src/lix-doc/Cargo.lock → Cargo.lock
generated
0
src/lix-doc/Cargo.lock → Cargo.lock
generated
6
Cargo.toml
Normal file
6
Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[workspace]
|
||||||
|
resolver = "2"
|
||||||
|
members = ["src/lix-doc"]
|
||||||
|
|
||||||
|
[workspace.package]
|
||||||
|
edition = "2021"
|
26
meson.build
26
meson.build
|
@ -545,6 +545,32 @@ if cxx.get_id() in ['clang', 'gcc']
|
||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Until Meson 1.5¹, we can't just give Meson a Cargo.lock file and be done with it.
|
||||||
|
# Meson will *detect* what dependencies are needed from Cargo files; it just won't
|
||||||
|
# fetch them. The Meson 1.5 feature essentially internally translates Cargo.lock entries
|
||||||
|
# to .wrap files, and that translation is incredibly straightforward, so let's just
|
||||||
|
# use a simple Python script to generate the .wrap files ourselves while we wait for
|
||||||
|
# Meson 1.5. Weirdly, it seems Meson will only detect dependencies from other
|
||||||
|
# dependency() calls, so we have to specify lix-doc's two top-level dependencies,
|
||||||
|
# rnix and rowan, manually, and then their dependencies will be recursively translated
|
||||||
|
# into more dependency() calls.
|
||||||
|
#
|
||||||
|
# When Meson translates a Cargo dependency, the string passed to `dependency()` follows
|
||||||
|
# a fixed format, which is important as the .wrap files' basenames must match the string
|
||||||
|
# passed to `dependency()` exactly.
|
||||||
|
# In Meson 1.4, this format is `$packageName-rs`. Meson 1.5 changes this to
|
||||||
|
# `$packageName-$shortenedVersionString-rs`, because of course it does, but we'll cross
|
||||||
|
# that bridge when we get there...
|
||||||
|
#
|
||||||
|
# [1]: https://github.com/mesonbuild/meson/commit/9b8378985dbdc0112d11893dd42b33b7bc8d1e62
|
||||||
|
run_command(
|
||||||
|
python,
|
||||||
|
meson.project_source_root() / 'meson/cargo-lock-to-wraps.py',
|
||||||
|
meson.project_source_root() / 'Cargo.lock',
|
||||||
|
meson.project_source_root() / 'subprojects',
|
||||||
|
check : true,
|
||||||
|
)
|
||||||
|
|
||||||
if is_darwin
|
if is_darwin
|
||||||
configure_file(
|
configure_file(
|
||||||
input : 'misc/launchd/org.nixos.nix-daemon.plist.in',
|
input : 'misc/launchd/org.nixos.nix-daemon.plist.in',
|
||||||
|
|
|
@ -137,6 +137,8 @@ let
|
||||||
./meson
|
./meson
|
||||||
./scripts/meson.build
|
./scripts/meson.build
|
||||||
./subprojects
|
./subprojects
|
||||||
|
# Required for meson to generate Cargo wraps
|
||||||
|
./Cargo.lock
|
||||||
]);
|
]);
|
||||||
|
|
||||||
functionalTestFiles = fileset.unions [
|
functionalTestFiles = fileset.unions [
|
||||||
|
@ -288,7 +290,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
|
BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoDeps = rustPlatform.importCargoLock { lockFile = ./src/lix-doc/Cargo.lock; };
|
cargoDeps = rustPlatform.importCargoLock { lockFile = ./Cargo.lock; };
|
||||||
|
|
||||||
preConfigure =
|
preConfigure =
|
||||||
lib.optionalString (!finalAttrs.dontBuild && !hostPlatform.isStatic) ''
|
lib.optionalString (!finalAttrs.dontBuild && !hostPlatform.isStatic) ''
|
||||||
|
|
|
@ -8,9 +8,6 @@ license = "BSD-2-Clause OR MIT"
|
||||||
homepage = "https://github.com/lf-/nix-doc"
|
homepage = "https://github.com/lf-/nix-doc"
|
||||||
repository = "https://github.com/lf-/nix-doc"
|
repository = "https://github.com/lf-/nix-doc"
|
||||||
|
|
||||||
[lib]
|
|
||||||
crate_type = ["staticlib"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rnix = "0.11.0"
|
rnix = "0.11.0"
|
||||||
# Necessary because rnix fails to export a critical trait (Rowan's AstNode).
|
# Necessary because rnix fails to export a critical trait (Rowan's AstNode).
|
||||||
|
|
|
@ -1,30 +1,3 @@
|
||||||
# Until Meson 1.5¹, we can't just give Meson a Cargo.lock file and be done with it.
|
|
||||||
# Meson will *detect* what dependencies are needed from Cargo files; it just won't
|
|
||||||
# fetch them. The Meson 1.5 feature essentially internally translates Cargo.lock entries
|
|
||||||
# to .wrap files, and that translation is incredibly straightforward, so let's just
|
|
||||||
# use a simple Python script to generate the .wrap files ourselves while we wait for
|
|
||||||
# Meson 1.5. Weirdly, it seems Meson will only detect dependencies from other
|
|
||||||
# dependency() calls, so we have to specify lix-doc's two top-level dependencies,
|
|
||||||
# rnix and rowan, manually, and then their dependencies will be recursively translated
|
|
||||||
# into more dependency() calls.
|
|
||||||
#
|
|
||||||
# When Meson translates a Cargo dependency, the string passed to `dependency()` follows
|
|
||||||
# a fixed format, which is important as the .wrap files' basenames must match the string
|
|
||||||
# passed to `dependency()` exactly.
|
|
||||||
# In Meson 1.4, this format is `$packageName-rs`. Meson 1.5 changes this to
|
|
||||||
# `$packageName-$shortenedVersionString-rs`, because of course it does, but we'll cross
|
|
||||||
# that bridge when we get there...
|
|
||||||
#
|
|
||||||
# [1]: https://github.com/mesonbuild/meson/commit/9b8378985dbdc0112d11893dd42b33b7bc8d1e62
|
|
||||||
|
|
||||||
run_command(
|
|
||||||
python,
|
|
||||||
meson.project_source_root() / 'meson/cargo-lock-to-wraps.py',
|
|
||||||
meson.current_source_dir() / 'Cargo.lock',
|
|
||||||
meson.project_source_root() / 'subprojects',
|
|
||||||
check : true,
|
|
||||||
)
|
|
||||||
|
|
||||||
# The external crate rowan has an ambiguous pointer comparison warning, which
|
# The external crate rowan has an ambiguous pointer comparison warning, which
|
||||||
# we don't want to fail our whole build if werror is on.
|
# we don't want to fail our whole build if werror is on.
|
||||||
subproject('rowan-rs', default_options : ['werror=false'])
|
subproject('rowan-rs', default_options : ['werror=false'])
|
||||||
|
|
Loading…
Reference in a new issue