mirror of
https://github.com/NixOS/nix
synced 2025-06-27 21:01:16 +02:00
Merge pull request #23 from DeterminateSystems/sync-2.28.0
Sync with upstream 2.28.1
This commit is contained in:
commit
bc02da2a69
698 changed files with 4730 additions and 4169 deletions
11
.mergify.yml
11
.mergify.yml
|
@ -117,3 +117,14 @@ pull_request_rules:
|
||||||
labels:
|
labels:
|
||||||
- automatic backport
|
- automatic backport
|
||||||
- merge-queue
|
- merge-queue
|
||||||
|
|
||||||
|
- name: backport patches to 2.27
|
||||||
|
conditions:
|
||||||
|
- label=backport 2.27-maintenance
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- "2.27-maintenance"
|
||||||
|
labels:
|
||||||
|
- automatic backport
|
||||||
|
- merge-queue
|
||||||
|
|
2
.version
2
.version
|
@ -1 +1 @@
|
||||||
2.27.1
|
2.28.1
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
synopsis: Set FD_CLOEXEC on sockets created by curl
|
|
||||||
issues: []
|
|
||||||
prs: [12439]
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
Curl creates sockets without setting FD_CLOEXEC/SOCK_CLOEXEC, this can cause connections to remain open forever when using commands like `nix shell`
|
|
||||||
|
|
||||||
This change sets the FD_CLOEXEC flag using a CURLOPT_SOCKOPTFUNCTION callback.
|
|
|
@ -132,5 +132,6 @@
|
||||||
- [Release 3.0.0 (2025-03-04)](release-notes-determinate/rl-3.0.0.md)
|
- [Release 3.0.0 (2025-03-04)](release-notes-determinate/rl-3.0.0.md)
|
||||||
- [Nix Release Notes](release-notes/index.md)
|
- [Nix Release Notes](release-notes/index.md)
|
||||||
{{#include ./SUMMARY-rl-next.md}}
|
{{#include ./SUMMARY-rl-next.md}}
|
||||||
|
- [Release 2.28 (2025-04-02)](release-notes/rl-2.28.md)
|
||||||
- [Release 2.27 (2025-03-03)](release-notes/rl-2.27.md)
|
- [Release 2.27 (2025-03-03)](release-notes/rl-2.27.md)
|
||||||
- [Release 2.26 (2025-01-22)](release-notes/rl-2.26.md)
|
- [Release 2.26 (2025-01-22)](release-notes/rl-2.26.md)
|
||||||
|
|
|
@ -30,7 +30,7 @@ The unit tests are defined using the [googletest] and [rapidcheck] frameworks.
|
||||||
> src
|
> src
|
||||||
> ├── libexpr
|
> ├── libexpr
|
||||||
> │ ├── meson.build
|
> │ ├── meson.build
|
||||||
> │ ├── value/context.hh
|
> │ ├── include/nix/expr/value/context.hh
|
||||||
> │ ├── value/context.cc
|
> │ ├── value/context.cc
|
||||||
> │ …
|
> │ …
|
||||||
> │
|
> │
|
||||||
|
@ -46,8 +46,12 @@ The unit tests are defined using the [googletest] and [rapidcheck] frameworks.
|
||||||
> │ │
|
> │ │
|
||||||
> │ ├── libexpr-test-support
|
> │ ├── libexpr-test-support
|
||||||
> │ │ ├── meson.build
|
> │ │ ├── meson.build
|
||||||
|
> │ │ ├── include/nix/expr
|
||||||
|
> │ │ │ ├── meson.build
|
||||||
|
> │ │ │ └── tests
|
||||||
|
> │ │ │ ├── value/context.hh
|
||||||
|
> │ │ │ …
|
||||||
> │ │ └── tests
|
> │ │ └── tests
|
||||||
> │ │ ├── value/context.hh
|
|
||||||
> │ │ ├── value/context.cc
|
> │ │ ├── value/context.cc
|
||||||
> │ │ …
|
> │ │ …
|
||||||
> │ │
|
> │ │
|
||||||
|
@ -59,7 +63,7 @@ The unit tests are defined using the [googletest] and [rapidcheck] frameworks.
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
The tests for each Nix library (`libnixexpr`, `libnixstore`, etc..) live inside a directory `src/${library_name_without-nix}-test`.
|
The tests for each Nix library (`libnixexpr`, `libnixstore`, etc..) live inside a directory `src/${library_name_without-nix}-test`.
|
||||||
Given an interface (header) and implementation pair in the original library, say, `src/libexpr/value/context.{hh,cc}`, we write tests for it in `src/libexpr-tests/value/context.cc`, and (possibly) declare/define additional interfaces for testing purposes in `src/libexpr-test-support/tests/value/context.{hh,cc}`.
|
Given an interface (header) and implementation pair in the original library, say, `src/libexpr/include/nix/expr/value/context.hh` and `src/libexpr/value/context.cc`, we write tests for it in `src/libexpr-tests/value/context.cc`, and (possibly) declare/define additional interfaces for testing purposes in `src/libexpr-test-support/include/nix/expr/tests/value/context.hh` and `src/libexpr-test-support/tests/value/context.cc`.
|
||||||
|
|
||||||
Data for unit tests is stored in a `data` subdir of the directory for each unit test executable.
|
Data for unit tests is stored in a `data` subdir of the directory for each unit test executable.
|
||||||
For example, `libnixstore` code is in `src/libstore`, and its test data is in `src/libstore-tests/data`.
|
For example, `libnixstore` code is in `src/libstore`, and its test data is in `src/libstore-tests/data`.
|
||||||
|
@ -67,7 +71,7 @@ The path to the `src/${library_name_without-nix}-test/data` directory is passed
|
||||||
Note that each executable only gets the data for its tests.
|
Note that each executable only gets the data for its tests.
|
||||||
|
|
||||||
The unit test libraries are in `src/${library_name_without-nix}-test-support`.
|
The unit test libraries are in `src/${library_name_without-nix}-test-support`.
|
||||||
All headers are in a `tests` subdirectory so they are included with `#include "tests/"`.
|
All headers are in a `tests` subdirectory so they are included with `#include "nix/tests/"`.
|
||||||
|
|
||||||
The use of all these separate directories for the unit tests might seem inconvenient, as for example the tests are not "right next to" the part of the code they are testing.
|
The use of all these separate directories for the unit tests might seem inconvenient, as for example the tests are not "right next to" the part of the code they are testing.
|
||||||
But organizing the tests this way has one big benefit:
|
But organizing the tests this way has one big benefit:
|
||||||
|
|
|
@ -2,6 +2,83 @@
|
||||||
|
|
||||||
Derivations can declare some infrequently used optional attributes.
|
Derivations can declare some infrequently used optional attributes.
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
- [`exportReferencesGraph`]{#adv-attr-exportReferencesGraph}\
|
||||||
|
This attribute allows builders access to the references graph of
|
||||||
|
their inputs. The attribute is a list of inputs in the Nix store
|
||||||
|
whose references graph the builder needs to know. The value of
|
||||||
|
this attribute should be a list of pairs `[ name1 path1 name2
|
||||||
|
path2 ... ]`. The references graph of each *pathN* will be stored
|
||||||
|
in a text file *nameN* in the temporary build directory. The text
|
||||||
|
files have the format used by `nix-store --register-validity`
|
||||||
|
(with the deriver fields left empty). For example, when the
|
||||||
|
following derivation is built:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
derivation {
|
||||||
|
...
|
||||||
|
exportReferencesGraph = [ "libfoo-graph" libfoo ];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
the references graph of `libfoo` is placed in the file
|
||||||
|
`libfoo-graph` in the temporary build directory.
|
||||||
|
|
||||||
|
`exportReferencesGraph` is useful for builders that want to do
|
||||||
|
something with the closure of a store path. Examples include the
|
||||||
|
builders in NixOS that generate the initial ramdisk for booting
|
||||||
|
Linux (a `cpio` archive containing the closure of the boot script)
|
||||||
|
and the ISO-9660 image for the installation CD (which is populated
|
||||||
|
with a Nix store containing the closure of a bootable NixOS
|
||||||
|
configuration).
|
||||||
|
|
||||||
|
- [`passAsFile`]{#adv-attr-passAsFile}\
|
||||||
|
A list of names of attributes that should be passed via files rather
|
||||||
|
than environment variables. For example, if you have
|
||||||
|
|
||||||
|
```nix
|
||||||
|
passAsFile = ["big"];
|
||||||
|
big = "a very long string";
|
||||||
|
```
|
||||||
|
|
||||||
|
then when the builder runs, the environment variable `bigPath`
|
||||||
|
will contain the absolute path to a temporary file containing `a
|
||||||
|
very long string`. That is, for any attribute *x* listed in
|
||||||
|
`passAsFile`, Nix will pass an environment variable `xPath`
|
||||||
|
holding the path of the file containing the value of attribute
|
||||||
|
*x*. This is useful when you need to pass large strings to a
|
||||||
|
builder, since most operating systems impose a limit on the size
|
||||||
|
of the environment (typically, a few hundred kilobyte).
|
||||||
|
|
||||||
|
- [`__structuredAttrs`]{#adv-attr-structuredAttrs}\
|
||||||
|
If the special attribute `__structuredAttrs` is set to `true`, the other derivation
|
||||||
|
attributes are serialised into a file in JSON format. The environment variable
|
||||||
|
`NIX_ATTRS_JSON_FILE` points to the exact location of that file both in a build
|
||||||
|
and a [`nix-shell`](../command-ref/nix-shell.md). This obviates the need for
|
||||||
|
[`passAsFile`](#adv-attr-passAsFile) since JSON files have no size restrictions,
|
||||||
|
unlike process environments.
|
||||||
|
|
||||||
|
It also makes it possible to tweak derivation settings in a structured way; see
|
||||||
|
[`outputChecks`](#adv-attr-outputChecks) for example.
|
||||||
|
|
||||||
|
As a convenience to Bash builders,
|
||||||
|
Nix writes a script that initialises shell variables
|
||||||
|
corresponding to all attributes that are representable in Bash. The
|
||||||
|
environment variable `NIX_ATTRS_SH_FILE` points to the exact
|
||||||
|
location of the script, both in a build and a
|
||||||
|
[`nix-shell`](../command-ref/nix-shell.md). This includes non-nested
|
||||||
|
(associative) arrays. For example, the attribute `hardening.format = true`
|
||||||
|
ends up as the Bash associative array element `${hardening[format]}`.
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> If set to `true`, other advanced attributes such as [`allowedReferences`](#adv-attr-allowedReferences), [`allowedReferences`](#adv-attr-allowedReferences), [`allowedRequisites`](#adv-attr-allowedRequisites),
|
||||||
|
[`disallowedReferences`](#adv-attr-disallowedReferences) and [`disallowedRequisites`](#adv-attr-disallowedRequisites), maxSize, and maxClosureSize.
|
||||||
|
will have no effect.
|
||||||
|
|
||||||
|
## Output checks
|
||||||
|
|
||||||
- [`allowedReferences`]{#adv-attr-allowedReferences}\
|
- [`allowedReferences`]{#adv-attr-allowedReferences}\
|
||||||
The optional attribute `allowedReferences` specifies a list of legal
|
The optional attribute `allowedReferences` specifies a list of legal
|
||||||
references (dependencies) of the output of the builder. For example,
|
references (dependencies) of the output of the builder. For example,
|
||||||
|
@ -55,34 +132,89 @@ Derivations can declare some infrequently used optional attributes.
|
||||||
dependency on `foobar` or any other derivation depending recursively
|
dependency on `foobar` or any other derivation depending recursively
|
||||||
on `foobar`.
|
on `foobar`.
|
||||||
|
|
||||||
- [`exportReferencesGraph`]{#adv-attr-exportReferencesGraph}\
|
- [`outputChecks`]{#adv-attr-outputChecks}\
|
||||||
This attribute allows builders access to the references graph of
|
When using [structured attributes](#adv-attr-structuredAttrs), the `outputChecks`
|
||||||
their inputs. The attribute is a list of inputs in the Nix store
|
attribute allows defining checks per-output.
|
||||||
whose references graph the builder needs to know. The value of
|
|
||||||
this attribute should be a list of pairs `[ name1 path1 name2
|
In addition to
|
||||||
path2 ... ]`. The references graph of each *pathN* will be stored
|
[`allowedReferences`](#adv-attr-allowedReferences), [`allowedRequisites`](#adv-attr-allowedRequisites),
|
||||||
in a text file *nameN* in the temporary build directory. The text
|
[`disallowedReferences`](#adv-attr-disallowedReferences) and [`disallowedRequisites`](#adv-attr-disallowedRequisites),
|
||||||
files have the format used by `nix-store --register-validity`
|
the following attributes are available:
|
||||||
(with the deriver fields left empty). For example, when the
|
|
||||||
following derivation is built:
|
- `maxSize` defines the maximum size of the resulting [store object](@docroot@/store/store-object.md).
|
||||||
|
- `maxClosureSize` defines the maximum size of the output's closure.
|
||||||
|
- `ignoreSelfRefs` controls whether self-references should be considered when
|
||||||
|
checking for allowed references/requisites.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
derivation {
|
__structuredAttrs = true;
|
||||||
...
|
|
||||||
exportReferencesGraph = [ "libfoo-graph" libfoo ];
|
outputChecks.out = {
|
||||||
|
# The closure of 'out' must not be larger than 256 MiB.
|
||||||
|
maxClosureSize = 256 * 1024 * 1024;
|
||||||
|
|
||||||
|
# It must not refer to the C compiler or to the 'dev' output.
|
||||||
|
disallowedRequisites = [ stdenv.cc "dev" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
outputChecks.dev = {
|
||||||
|
# The 'dev' output must not be larger than 128 KiB.
|
||||||
|
maxSize = 128 * 1024;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
the references graph of `libfoo` is placed in the file
|
## Other output modifications
|
||||||
`libfoo-graph` in the temporary build directory.
|
|
||||||
|
|
||||||
`exportReferencesGraph` is useful for builders that want to do
|
- [`unsafeDiscardReferences`]{#adv-attr-unsafeDiscardReferences}\
|
||||||
something with the closure of a store path. Examples include the
|
|
||||||
builders in NixOS that generate the initial ramdisk for booting
|
When using [structured attributes](#adv-attr-structuredAttrs), the
|
||||||
Linux (a `cpio` archive containing the closure of the boot script)
|
attribute `unsafeDiscardReferences` is an attribute set with a boolean value for each output name.
|
||||||
and the ISO-9660 image for the installation CD (which is populated
|
If set to `true`, it disables scanning the output for runtime dependencies.
|
||||||
with a Nix store containing the closure of a bootable NixOS
|
|
||||||
configuration).
|
Example:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
__structuredAttrs = true;
|
||||||
|
unsafeDiscardReferences.out = true;
|
||||||
|
```
|
||||||
|
|
||||||
|
This is useful, for example, when generating self-contained filesystem images with
|
||||||
|
their own embedded Nix store: hashes found inside such an image refer
|
||||||
|
to the embedded store and not to the host's Nix store.
|
||||||
|
|
||||||
|
## Build scheduling
|
||||||
|
|
||||||
|
- [`preferLocalBuild`]{#adv-attr-preferLocalBuild}\
|
||||||
|
If this attribute is set to `true` and [distributed building is enabled](@docroot@/command-ref/conf-file.md#conf-builders), then, if possible, the derivation will be built locally instead of being forwarded to a remote machine.
|
||||||
|
This is useful for derivations that are cheapest to build locally.
|
||||||
|
|
||||||
|
- [`allowSubstitutes`]{#adv-attr-allowSubstitutes}\
|
||||||
|
If this attribute is set to `false`, then Nix will always build this derivation (locally or remotely); it will not try to substitute its outputs.
|
||||||
|
This is useful for derivations that are cheaper to build than to substitute.
|
||||||
|
|
||||||
|
This attribute can be ignored by setting [`always-allow-substitutes`](@docroot@/command-ref/conf-file.md#conf-always-allow-substitutes) to `true`.
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
>
|
||||||
|
> If set to `false`, the [`builder`] should be able to run on the system type specified in the [`system` attribute](./derivations.md#attr-system), since the derivation cannot be substituted.
|
||||||
|
|
||||||
|
[`builder`]: ./derivations.md#attr-builder
|
||||||
|
|
||||||
|
- [`requiredSystemFeatures`]{#adv-attr-requiredSystemFeatures}\
|
||||||
|
|
||||||
|
If a derivation has the `requiredSystemFeatures` attribute, then Nix will only build it on a machine that has the corresponding features set in its [`system-features` configuration](@docroot@/command-ref/conf-file.md#conf-system-features).
|
||||||
|
|
||||||
|
For example, setting
|
||||||
|
|
||||||
|
```nix
|
||||||
|
requiredSystemFeatures = [ "kvm" ];
|
||||||
|
```
|
||||||
|
|
||||||
|
ensures that the derivation can only be built on a machine with the `kvm` feature.
|
||||||
|
|
||||||
|
# Impure builder configuration
|
||||||
|
|
||||||
- [`impureEnvVars`]{#adv-attr-impureEnvVars}\
|
- [`impureEnvVars`]{#adv-attr-impureEnvVars}\
|
||||||
This attribute allows you to specify a list of environment variables
|
This attribute allows you to specify a list of environment variables
|
||||||
|
@ -119,128 +251,6 @@ Derivations can declare some infrequently used optional attributes.
|
||||||
[`impure-env`](@docroot@/command-ref/conf-file.md#conf-impure-env)
|
[`impure-env`](@docroot@/command-ref/conf-file.md#conf-impure-env)
|
||||||
configuration setting.
|
configuration setting.
|
||||||
|
|
||||||
- [`passAsFile`]{#adv-attr-passAsFile}\
|
|
||||||
A list of names of attributes that should be passed via files rather
|
|
||||||
than environment variables. For example, if you have
|
|
||||||
|
|
||||||
```nix
|
|
||||||
passAsFile = ["big"];
|
|
||||||
big = "a very long string";
|
|
||||||
```
|
|
||||||
|
|
||||||
then when the builder runs, the environment variable `bigPath`
|
|
||||||
will contain the absolute path to a temporary file containing `a
|
|
||||||
very long string`. That is, for any attribute *x* listed in
|
|
||||||
`passAsFile`, Nix will pass an environment variable `xPath`
|
|
||||||
holding the path of the file containing the value of attribute
|
|
||||||
*x*. This is useful when you need to pass large strings to a
|
|
||||||
builder, since most operating systems impose a limit on the size
|
|
||||||
of the environment (typically, a few hundred kilobyte).
|
|
||||||
|
|
||||||
- [`preferLocalBuild`]{#adv-attr-preferLocalBuild}\
|
|
||||||
If this attribute is set to `true` and [distributed building is enabled](@docroot@/command-ref/conf-file.md#conf-builders), then, if possible, the derivation will be built locally instead of being forwarded to a remote machine.
|
|
||||||
This is useful for derivations that are cheapest to build locally.
|
|
||||||
|
|
||||||
- [`allowSubstitutes`]{#adv-attr-allowSubstitutes}\
|
|
||||||
If this attribute is set to `false`, then Nix will always build this derivation (locally or remotely); it will not try to substitute its outputs.
|
|
||||||
This is useful for derivations that are cheaper to build than to substitute.
|
|
||||||
|
|
||||||
This attribute can be ignored by setting [`always-allow-substitutes`](@docroot@/command-ref/conf-file.md#conf-always-allow-substitutes) to `true`.
|
|
||||||
|
|
||||||
> **Note**
|
|
||||||
>
|
|
||||||
> If set to `false`, the [`builder`] should be able to run on the system type specified in the [`system` attribute](./derivations.md#attr-system), since the derivation cannot be substituted.
|
|
||||||
|
|
||||||
[`builder`]: ./derivations.md#attr-builder
|
|
||||||
|
|
||||||
- [`__structuredAttrs`]{#adv-attr-structuredAttrs}\
|
|
||||||
If the special attribute `__structuredAttrs` is set to `true`, the other derivation
|
|
||||||
attributes are serialised into a file in JSON format. The environment variable
|
|
||||||
`NIX_ATTRS_JSON_FILE` points to the exact location of that file both in a build
|
|
||||||
and a [`nix-shell`](../command-ref/nix-shell.md). This obviates the need for
|
|
||||||
[`passAsFile`](#adv-attr-passAsFile) since JSON files have no size restrictions,
|
|
||||||
unlike process environments.
|
|
||||||
|
|
||||||
It also makes it possible to tweak derivation settings in a structured way; see
|
|
||||||
[`outputChecks`](#adv-attr-outputChecks) for example.
|
|
||||||
|
|
||||||
As a convenience to Bash builders,
|
|
||||||
Nix writes a script that initialises shell variables
|
|
||||||
corresponding to all attributes that are representable in Bash. The
|
|
||||||
environment variable `NIX_ATTRS_SH_FILE` points to the exact
|
|
||||||
location of the script, both in a build and a
|
|
||||||
[`nix-shell`](../command-ref/nix-shell.md). This includes non-nested
|
|
||||||
(associative) arrays. For example, the attribute `hardening.format = true`
|
|
||||||
ends up as the Bash associative array element `${hardening[format]}`.
|
|
||||||
|
|
||||||
> **Warning**
|
|
||||||
>
|
|
||||||
> If set to `true`, other advanced attributes such as [`allowedReferences`](#adv-attr-allowedReferences), [`allowedReferences`](#adv-attr-allowedReferences), [`allowedRequisites`](#adv-attr-allowedRequisites),
|
|
||||||
[`disallowedReferences`](#adv-attr-disallowedReferences) and [`disallowedRequisites`](#adv-attr-disallowedRequisites), maxSize, and maxClosureSize.
|
|
||||||
will have no effect.
|
|
||||||
|
|
||||||
- [`outputChecks`]{#adv-attr-outputChecks}\
|
|
||||||
When using [structured attributes](#adv-attr-structuredAttrs), the `outputChecks`
|
|
||||||
attribute allows defining checks per-output.
|
|
||||||
|
|
||||||
In addition to
|
|
||||||
[`allowedReferences`](#adv-attr-allowedReferences), [`allowedRequisites`](#adv-attr-allowedRequisites),
|
|
||||||
[`disallowedReferences`](#adv-attr-disallowedReferences) and [`disallowedRequisites`](#adv-attr-disallowedRequisites),
|
|
||||||
the following attributes are available:
|
|
||||||
|
|
||||||
- `maxSize` defines the maximum size of the resulting [store object](@docroot@/store/store-object.md).
|
|
||||||
- `maxClosureSize` defines the maximum size of the output's closure.
|
|
||||||
- `ignoreSelfRefs` controls whether self-references should be considered when
|
|
||||||
checking for allowed references/requisites.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
__structuredAttrs = true;
|
|
||||||
|
|
||||||
outputChecks.out = {
|
|
||||||
# The closure of 'out' must not be larger than 256 MiB.
|
|
||||||
maxClosureSize = 256 * 1024 * 1024;
|
|
||||||
|
|
||||||
# It must not refer to the C compiler or to the 'dev' output.
|
|
||||||
disallowedRequisites = [ stdenv.cc "dev" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
outputChecks.dev = {
|
|
||||||
# The 'dev' output must not be larger than 128 KiB.
|
|
||||||
maxSize = 128 * 1024;
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
- [`unsafeDiscardReferences`]{#adv-attr-unsafeDiscardReferences}\
|
|
||||||
|
|
||||||
When using [structured attributes](#adv-attr-structuredAttrs), the
|
|
||||||
attribute `unsafeDiscardReferences` is an attribute set with a boolean value for each output name.
|
|
||||||
If set to `true`, it disables scanning the output for runtime dependencies.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
__structuredAttrs = true;
|
|
||||||
unsafeDiscardReferences.out = true;
|
|
||||||
```
|
|
||||||
|
|
||||||
This is useful, for example, when generating self-contained filesystem images with
|
|
||||||
their own embedded Nix store: hashes found inside such an image refer
|
|
||||||
to the embedded store and not to the host's Nix store.
|
|
||||||
|
|
||||||
- [`requiredSystemFeatures`]{#adv-attr-requiredSystemFeatures}\
|
|
||||||
|
|
||||||
If a derivation has the `requiredSystemFeatures` attribute, then Nix will only build it on a machine that has the corresponding features set in its [`system-features` configuration](@docroot@/command-ref/conf-file.md#conf-system-features).
|
|
||||||
|
|
||||||
For example, setting
|
|
||||||
|
|
||||||
```nix
|
|
||||||
requiredSystemFeatures = [ "kvm" ];
|
|
||||||
```
|
|
||||||
|
|
||||||
ensures that the derivation can only be built on a machine with the `kvm` feature.
|
|
||||||
|
|
||||||
## Setting the derivation type
|
## Setting the derivation type
|
||||||
|
|
||||||
As discussed in [Derivation Outputs and Types of Derivations](@docroot@/store/derivation/outputs/index.md), there are multiples kinds of derivations / kinds of derivation outputs.
|
As discussed in [Derivation Outputs and Types of Derivations](@docroot@/store/derivation/outputs/index.md), there are multiples kinds of derivations / kinds of derivation outputs.
|
||||||
|
|
|
@ -443,7 +443,7 @@ three kinds of patterns:
|
||||||
This works on any set that contains at least the three named
|
This works on any set that contains at least the three named
|
||||||
attributes.
|
attributes.
|
||||||
|
|
||||||
It is possible to provide *default values* for attributes, in
|
- It is possible to provide *default values* for attributes, in
|
||||||
which case they are allowed to be missing. A default value is
|
which case they are allowed to be missing. A default value is
|
||||||
specified by writing `name ? e`, where *e* is an arbitrary
|
specified by writing `name ? e`, where *e* is an arbitrary
|
||||||
expression. For example,
|
expression. For example,
|
||||||
|
@ -503,6 +503,45 @@ three kinds of patterns:
|
||||||
> [ 23 {} ]
|
> [ 23 {} ]
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
|
- All bindings introduced by the function are in scope in the entire function expression; not just in the body.
|
||||||
|
It can therefore be used in default values.
|
||||||
|
|
||||||
|
> **Example**
|
||||||
|
>
|
||||||
|
> A parameter (`x`), is used in the default value for another parameter (`y`):
|
||||||
|
>
|
||||||
|
> ```nix
|
||||||
|
> let
|
||||||
|
> f = { x, y ? [x] }: { inherit y; };
|
||||||
|
> in
|
||||||
|
> f { x = 3; }
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> This evaluates to:
|
||||||
|
>
|
||||||
|
> ```nix
|
||||||
|
> {
|
||||||
|
> y = [ 3 ];
|
||||||
|
> }
|
||||||
|
> ```
|
||||||
|
|
||||||
|
> **Example**
|
||||||
|
>
|
||||||
|
> The binding of an `@` pattern, `args`, is used in the default value for a parameter, `x`:
|
||||||
|
>
|
||||||
|
> ```nix
|
||||||
|
> let
|
||||||
|
> f = args@{ x ? args.a, ... }: x;
|
||||||
|
> in
|
||||||
|
> f { a = 1; }
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> This evaluates to:
|
||||||
|
>
|
||||||
|
> ```nix
|
||||||
|
> 1
|
||||||
|
> ```
|
||||||
|
|
||||||
Note that functions do not have names. If you want to give them a name,
|
Note that functions do not have names. If you want to give them a name,
|
||||||
you can bind them to an attribute, e.g.,
|
you can bind them to an attribute, e.g.,
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ The format of this specification is close to [Extended Backus–Naur form](https
|
||||||
Regular users do *not* need to know this information --- store paths can be treated as black boxes computed from the properties of the store objects they refer to.
|
Regular users do *not* need to know this information --- store paths can be treated as black boxes computed from the properties of the store objects they refer to.
|
||||||
But for those interested in exactly how Nix works, e.g. if they are reimplementing it, this information can be useful.
|
But for those interested in exactly how Nix works, e.g. if they are reimplementing it, this information can be useful.
|
||||||
|
|
||||||
[store path](@docroot@/store/store-path.md)
|
[store path]: @docroot@/store/store-path.md
|
||||||
|
|
||||||
## Store path proper
|
## Store path proper
|
||||||
|
|
||||||
|
@ -20,14 +20,17 @@ where
|
||||||
|
|
||||||
- `store-dir` = the [store directory](@docroot@/store/store-path.md#store-directory)
|
- `store-dir` = the [store directory](@docroot@/store/store-path.md#store-directory)
|
||||||
|
|
||||||
- `digest` = base-32 representation of the first 160 bits of a [SHA-256] hash of `fingerprint`
|
- `digest` = base-32 representation of the compressed to 160 bits [SHA-256] hash of `fingerprint`
|
||||||
|
|
||||||
This the hash part of the store name
|
For the definition of the hash compression algorithm, please refer to the section 5.1 of
|
||||||
|
the [Nix thesis](https://edolstra.github.io/pubs/phd-thesis.pdf), which also defines the
|
||||||
|
specifics of base-32 encoding. Note that base-32 encoding processes the hash bytestring from
|
||||||
|
the end, while base-16 processes in from the beginning.
|
||||||
|
|
||||||
## Fingerprint
|
## Fingerprint
|
||||||
|
|
||||||
- ```ebnf
|
- ```ebnf
|
||||||
fingerprint = type ":" sha256 ":" inner-digest ":" store ":" name
|
fingerprint = type ":sha256:" inner-digest ":" store ":" name
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that it includes the location of the store as well as the name to make sure that changes to either of those are reflected in the hash
|
Note that it includes the location of the store as well as the name to make sure that changes to either of those are reflected in the hash
|
||||||
|
@ -70,7 +73,8 @@ where
|
||||||
`id` is the name of the output (usually, "out").
|
`id` is the name of the output (usually, "out").
|
||||||
For content-addressed store objects, `id`, is always "out".
|
For content-addressed store objects, `id`, is always "out".
|
||||||
|
|
||||||
- `inner-digest` = base-16 representation of a SHA-256 hash of `inner-fingerprint`
|
- `inner-digest` = base-16 representation of a SHA-256 hash of `inner-fingerprint`.
|
||||||
|
The base-16 encoding uses lower-cased hex digits.
|
||||||
|
|
||||||
## Inner fingerprint
|
## Inner fingerprint
|
||||||
|
|
||||||
|
@ -82,7 +86,7 @@ where
|
||||||
|
|
||||||
- if `type` = `"source:" ...`:
|
- if `type` = `"source:" ...`:
|
||||||
|
|
||||||
the hash of the [Nix Archive (NAR)] serialization of the [file system object](@docroot@/store/file-system-object.md) of the store object.
|
the [Nix Archive (NAR)] serialization of the [file system object](@docroot@/store/file-system-object.md) of the store object.
|
||||||
|
|
||||||
- if `type` = `"output:" id`:
|
- if `type` = `"output:" id`:
|
||||||
|
|
||||||
|
|
105
doc/manual/source/release-notes/rl-2.28.md
Normal file
105
doc/manual/source/release-notes/rl-2.28.md
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
# Release 2.28.0 (2025-04-02)
|
||||||
|
|
||||||
|
This is an atypical release, and for almost all intents and purposes, it is just a continuation of 2.27; not a feature release.
|
||||||
|
|
||||||
|
We had originally set the goal of making 2.27 the Nixpkgs default for NixOS 25.05, but dependents that link to Nix need certain _interface breaking_ changes in the C++ headers. This is not something we should do in a patch release, so this is why we branched 2.28 right off 2.27 instead of `master`.
|
||||||
|
|
||||||
|
This completes the infrastructure overhaul for the [RFC 132](https://github.com/NixOS/rfcs/blob/master/rfcs/0132-meson-builds-nix.md) switchover to meson as our build system.
|
||||||
|
|
||||||
|
## Major changes
|
||||||
|
|
||||||
|
- Unstable C++ API reworked
|
||||||
|
[#12836](https://github.com/NixOS/nix/pull/12836)
|
||||||
|
[#12798](https://github.com/NixOS/nix/pull/12798)
|
||||||
|
[#12773](https://github.com/NixOS/nix/pull/12773)
|
||||||
|
|
||||||
|
Now the C++ interface confirms to common conventions much better than before:
|
||||||
|
|
||||||
|
- All headers are expected to be included with the initial `nix/`, e.g. as `#include "nix/....hh"` (what Nix's headers now do) or `#include <nix/....hh>` (what downstream projects may choose to do).
|
||||||
|
Likewise, the pkg-config files have `-I${includedir}` not `-I${includedir}/nix` or similar.
|
||||||
|
|
||||||
|
Including without the `nix/` like before sometimes worked because of how for `#include` C pre-process checks the directory containing the current file, not just the lookup path, but this was not reliable.
|
||||||
|
|
||||||
|
- All configuration headers are included explicitly by the (regular) headers that need them.
|
||||||
|
There is no more need to pass `-include` to force additional files to be included.
|
||||||
|
|
||||||
|
- The public, installed configuration headers no longer contain implementation-specific details that are not relevant to the API.
|
||||||
|
The vast majority of definitions that were previously in there are now moved to new headers that are not installed, but used during Nix's own compilation only.
|
||||||
|
The remaining macro definitions are renamed to have `NIX_` as a prefix.
|
||||||
|
|
||||||
|
- The name of the Nix component the header comes from
|
||||||
|
(e.g. `util`, `store`, `expr`, `flake`, etc.)
|
||||||
|
is now part of the path to the header, coming after `nix` and before the header name
|
||||||
|
(or rest of the header path, if it is already in a directory).
|
||||||
|
|
||||||
|
Here is a contrived diff showing a few of these changes at once:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
@@ @@
|
||||||
|
-#include "derived-path.hh"
|
||||||
|
+#include "nix/store/derived-path.hh"
|
||||||
|
@@ @@
|
||||||
|
+// Would include for the variables used before. But when other headers
|
||||||
|
+// need these variables. those will include these config themselves.
|
||||||
|
+#include "nix/store/config.hh"
|
||||||
|
+#include "nix/expr/config.hh"
|
||||||
|
@@ @@
|
||||||
|
-#include "config.hh"
|
||||||
|
+// Additionally renamed to distinguish from components' config headers.
|
||||||
|
+#include "nix/util/configuration.hh"
|
||||||
|
@@ @@
|
||||||
|
-#if HAVE_ACL_SUPPORT
|
||||||
|
+#if NIX_SUPPORT_ACL
|
||||||
|
@@ @@
|
||||||
|
-#if HAVE_BOEHMGC
|
||||||
|
+#if NIX_USE_BOEHMGC
|
||||||
|
@@ @@
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
@@ @@
|
||||||
|
-const char *s = "hi from " SYSTEM;
|
||||||
|
+const char *s = "hi from " NIX_LOCAL_SYSTEM;
|
||||||
|
```
|
||||||
|
|
||||||
|
- C API `nix_flake_init_global` removed [#5638](https://github.com/NixOS/nix/issues/5638) [#12759](https://github.com/NixOS/nix/pull/12759)
|
||||||
|
|
||||||
|
In order to improve the modularity of the code base, we are removing a use of global state, and therefore the `nix_flake_init_global` function.
|
||||||
|
|
||||||
|
Instead, use `nix_flake_settings_add_to_eval_state_builder`.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
- nix_flake_init_global(ctx, settings);
|
||||||
|
- HANDLE_ERROR(ctx);
|
||||||
|
-
|
||||||
|
nix_eval_state_builder * builder = nix_eval_state_builder_new(ctx, store);
|
||||||
|
HANDLE_ERROR(ctx);
|
||||||
|
|
||||||
|
+ nix_flake_settings_add_to_eval_state_builder(ctx, settings, builder);
|
||||||
|
+ HANDLE_ERROR(ctx);
|
||||||
|
```
|
||||||
|
|
||||||
|
Although this change is not as critical, we figured it would be good to do this API change at the same time, also.
|
||||||
|
Also note that we try to keep the C API compatible, but we decided to break this function because it was young and likely not in widespread use yet. This frees up time to make important progress on the rest of the C API.
|
||||||
|
|
||||||
|
# Contributors
|
||||||
|
|
||||||
|
This earlier-than-usual release was made possible by the following 16 contributors:
|
||||||
|
|
||||||
|
- Farid Zakaria [**(@fzakaria)**](https://github.com/fzakaria)
|
||||||
|
- Jörg Thalheim [**(@Mic92)**](https://github.com/Mic92)
|
||||||
|
- Eelco Dolstra [**(@edolstra)**](https://github.com/edolstra)
|
||||||
|
- Graham Christensen [**(@grahamc)**](https://github.com/grahamc)
|
||||||
|
- Thomas Miedema [**(@thomie)**](https://github.com/thomie)
|
||||||
|
- Brian McKenna [**(@puffnfresh)**](https://github.com/puffnfresh)
|
||||||
|
- Sergei Trofimovich [**(@trofi)**](https://github.com/trofi)
|
||||||
|
- Dmitry Bogatov [**(@KAction)**](https://github.com/KAction)
|
||||||
|
- Erik Nygren [**(@Kirens)**](https://github.com/Kirens)
|
||||||
|
- John Ericson [**(@Ericson2314)**](https://github.com/Ericson2314)
|
||||||
|
- Sergei Zimmerman [**(@xokdvium)**](https://github.com/xokdvium)
|
||||||
|
- Ruby Rose [**(@oldshensheep)**](https://github.com/oldshensheep)
|
||||||
|
- Robert Hensing [**(@roberth)**](https://github.com/roberth)
|
||||||
|
- jade [**(@lf-)**](https://github.com/lf-)
|
||||||
|
- Félix [**(@picnoir)**](https://github.com/picnoir)
|
||||||
|
- Valentin Gagarin [**(@fricklerhandwerk)**](https://github.com/fricklerhandwerk)
|
||||||
|
- Dmitry Bogatov
|
|
@ -1,7 +1,7 @@
|
||||||
# Derivation Outputs and Types of Derivations
|
# Derivation Outputs and Types of Derivations
|
||||||
|
|
||||||
As stated on the [main pages on derivations](../index.md#store-derivation),
|
As stated on the [main pages on derivations](../index.md#store-derivation),
|
||||||
a derivation produces [store objects], which are known as the *outputs* of the derivation.
|
a derivation produces [store objects](@docroot@/store/store-object.md), which are known as the *outputs* of the derivation.
|
||||||
Indeed, the entire point of derivations is to produce these outputs, and to reliably and reproducably produce these derivations each time the derivation is run.
|
Indeed, the entire point of derivations is to produce these outputs, and to reliably and reproducably produce these derivations each time the derivation is run.
|
||||||
|
|
||||||
One of the parts of a derivation is its *outputs specification*, which specifies certain information about the outputs the derivation produces when run.
|
One of the parts of a derivation is its *outputs specification*, which specifies certain information about the outputs the derivation produces when run.
|
||||||
|
@ -9,7 +9,7 @@ The outputs specification is a map, from names to specifications for individual
|
||||||
|
|
||||||
## Output Names {#outputs}
|
## Output Names {#outputs}
|
||||||
|
|
||||||
Output names can be any string which is also a valid [store path] name.
|
Output names can be any string which is also a valid [store path](@docroot@/store/store-path.md) name.
|
||||||
The name mapped to each output specification is not actually the name of the output.
|
The name mapped to each output specification is not actually the name of the output.
|
||||||
In the general case, the output store object has name `derivationName + "-" + outputSpecName`, not any other metadata about it.
|
In the general case, the output store object has name `derivationName + "-" + outputSpecName`, not any other metadata about it.
|
||||||
However, an output spec named "out" describes and output store object whose name is just the derivation name.
|
However, an output spec named "out" describes and output store object whose name is just the derivation name.
|
||||||
|
@ -24,11 +24,11 @@ However, an output spec named "out" describes and output store object whose name
|
||||||
>
|
>
|
||||||
> - The store path of `dev` will be: `/nix/store/<hash>-hello-dev`.
|
> - The store path of `dev` will be: `/nix/store/<hash>-hello-dev`.
|
||||||
|
|
||||||
The outputs are the derivations are the [store objects][store object] it is obligated to produce.
|
The outputs are the derivations are the [store objects](@docroot@/store/store-object.md) it is obligated to produce.
|
||||||
|
|
||||||
> **Note**
|
> **Note**
|
||||||
>
|
>
|
||||||
> The formal terminology here is somewhat at adds with everyday communication in the Nix community today.
|
> The formal terminology here is somewhat at odds with everyday communication in the Nix community today.
|
||||||
> "output" in casual usage tends to refer to either to the actual output store object, or the notional output spec, depending on context.
|
> "output" in casual usage tends to refer to either to the actual output store object, or the notional output spec, depending on context.
|
||||||
>
|
>
|
||||||
> For example "hello's `dev` output" means the store object referred to by the store path `/nix/store/<hash>-hello-dev`.
|
> For example "hello's `dev` output" means the store object referred to by the store path `/nix/store/<hash>-hello-dev`.
|
||||||
|
@ -64,7 +64,7 @@ The rules for this are fairly concise:
|
||||||
|
|
||||||
(This is an arbitrary restriction that could be lifted.)
|
(This is an arbitrary restriction that could be lifted.)
|
||||||
|
|
||||||
- The output is either *fixed* or *floating*, indicating whether the its store path is known prior to building it.
|
- The output is either *fixed* or *floating*, indicating whether the store path is known prior to building it.
|
||||||
|
|
||||||
- With fixed content-addressing it is fixed.
|
- With fixed content-addressing it is fixed.
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ be many different serialisations.
|
||||||
For these reasons, Nix has its very own archive format—the Nix Archive (NAR) format,
|
For these reasons, Nix has its very own archive format—the Nix Archive (NAR) format,
|
||||||
which is carefully designed to avoid the problems described above.
|
which is carefully designed to avoid the problems described above.
|
||||||
|
|
||||||
The exact specification of the Nix Archive format is in `protocols/nix-archive.md`
|
The exact specification of the Nix Archive format is in [specified here](../../protocols/nix-archive.md).
|
||||||
|
|
||||||
## Content addressing File System Objects beyond a single serialisation pass
|
## Content addressing File System Objects beyond a single serialisation pass
|
||||||
|
|
||||||
|
@ -80,6 +80,7 @@ Thus, Git can encode some, but not all of Nix's "File System Objects", and this
|
||||||
|
|
||||||
In the future, we may support a Git-like hash for such file system objects, or we may adopt another Merkle DAG format which is capable of representing all Nix file system objects.
|
In the future, we may support a Git-like hash for such file system objects, or we may adopt another Merkle DAG format which is capable of representing all Nix file system objects.
|
||||||
|
|
||||||
|
|
||||||
[file system object]: ../file-system-object.md
|
[file system object]: ../file-system-object.md
|
||||||
[store object]: ../store-object.md
|
[store object]: ../store-object.md
|
||||||
[xp-feature-git-hashing]: @docroot@/development/experimental-features.md#xp-feature-git-hashing
|
[xp-feature-git-hashing]: @docroot@/development/experimental-features.md#xp-feature-git-hashing
|
||||||
|
|
|
@ -50,7 +50,7 @@ The hashes of these modified input streams are used instead.
|
||||||
|
|
||||||
When validating the content address of a store object after the fact, the above process works as written.
|
When validating the content address of a store object after the fact, the above process works as written.
|
||||||
However, when first creating the store object we don't know the store object's store path, as explained just above.
|
However, when first creating the store object we don't know the store object's store path, as explained just above.
|
||||||
We therefore, strictly speaking, do not know what value we will be replacing with the sentinental value in the inputs to hash functions.
|
We therefore, strictly speaking, do not know what value we will be replacing with the sentinel value in the inputs to hash functions.
|
||||||
What instead happens is that the provisional store object --- the data from which we wish to create a store object --- is paired with a provisional "scratch" store path (that presumably was chosen when the data was created).
|
What instead happens is that the provisional store object --- the data from which we wish to create a store object --- is paired with a provisional "scratch" store path (that presumably was chosen when the data was created).
|
||||||
That provisional store path is instead what is replaced with the sentinel value, rather than the final store object which we do not yet know.
|
That provisional store path is instead what is replaced with the sentinel value, rather than the final store object which we do not yet know.
|
||||||
|
|
||||||
|
|
79
flake.nix
79
flake.nix
|
@ -155,6 +155,7 @@
|
||||||
inherit officialRelease;
|
inherit officialRelease;
|
||||||
pkgs = final;
|
pkgs = final;
|
||||||
src = self;
|
src = self;
|
||||||
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -228,24 +229,28 @@
|
||||||
This shouldn't build anything significant; just check that things
|
This shouldn't build anything significant; just check that things
|
||||||
(including derivations) are _set up_ correctly.
|
(including derivations) are _set up_ correctly.
|
||||||
*/
|
*/
|
||||||
packaging-overriding =
|
# Disabled due to a bug in `testEqualContents` (see
|
||||||
let
|
# https://github.com/NixOS/nix/issues/12690).
|
||||||
pkgs = nixpkgsFor.${system}.native;
|
/*
|
||||||
nix = self.packages.${system}.nix;
|
packaging-overriding =
|
||||||
in
|
let
|
||||||
assert (nix.appendPatches [ pkgs.emptyFile ]).libs.nix-util.src.patches == [ pkgs.emptyFile ];
|
pkgs = nixpkgsFor.${system}.native;
|
||||||
if pkgs.stdenv.buildPlatform.isDarwin then
|
nix = self.packages.${system}.nix;
|
||||||
lib.warn "packaging-overriding check currently disabled because of a permissions issue on macOS" pkgs.emptyFile
|
in
|
||||||
else
|
assert (nix.appendPatches [ pkgs.emptyFile ]).libs.nix-util.src.patches == [ pkgs.emptyFile ];
|
||||||
# If this fails, something might be wrong with how we've wired the scope,
|
if pkgs.stdenv.buildPlatform.isDarwin then
|
||||||
# or something could be broken in Nixpkgs.
|
lib.warn "packaging-overriding check currently disabled because of a permissions issue on macOS" pkgs.emptyFile
|
||||||
pkgs.testers.testEqualContents {
|
else
|
||||||
assertion = "trivial patch does not change source contents";
|
# If this fails, something might be wrong with how we've wired the scope,
|
||||||
expected = "${./.}";
|
# or something could be broken in Nixpkgs.
|
||||||
actual =
|
pkgs.testers.testEqualContents {
|
||||||
# Same for all components; nix-util is an arbitrary pick
|
assertion = "trivial patch does not change source contents";
|
||||||
(nix.appendPatches [ pkgs.emptyFile ]).libs.nix-util.src;
|
expected = "${./.}";
|
||||||
};
|
actual =
|
||||||
|
# Same for all components; nix-util is an arbitrary pick
|
||||||
|
(nix.appendPatches [ pkgs.emptyFile ]).libs.nix-util.src;
|
||||||
|
};
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
// (lib.optionalAttrs (builtins.elem system linux64BitSystems)) {
|
// (lib.optionalAttrs (builtins.elem system linux64BitSystems)) {
|
||||||
dockerImage = self.hydraJobs.dockerImage.${system};
|
dockerImage = self.hydraJobs.dockerImage.${system};
|
||||||
|
@ -261,18 +266,46 @@
|
||||||
flatMapAttrs
|
flatMapAttrs
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
"" = nixpkgsFor.${system}.native;
|
# Run all tests with UBSAN enabled. Running both with ubsan and
|
||||||
|
# without doesn't seem to have much immediate benefit for doubling
|
||||||
|
# the GHA CI workaround.
|
||||||
|
#
|
||||||
|
# TODO: Work toward enabling "address,undefined" if it seems feasible.
|
||||||
|
# This would maybe require dropping Boost coroutines and ignoring intentional
|
||||||
|
# memory leaks with detect_leaks=0.
|
||||||
|
"" = rec {
|
||||||
|
nixpkgs = nixpkgsFor.${system}.native;
|
||||||
|
nixComponents = nixpkgs.nixComponents.overrideScope (
|
||||||
|
nixCompFinal: nixCompPrev: {
|
||||||
|
mesonComponentOverrides = _finalAttrs: prevAttrs: {
|
||||||
|
mesonFlags =
|
||||||
|
(prevAttrs.mesonFlags or [ ])
|
||||||
|
# TODO: Macos builds instrumented with ubsan take very long
|
||||||
|
# to run functional tests.
|
||||||
|
++ lib.optionals (!nixpkgs.stdenv.hostPlatform.isDarwin) [
|
||||||
|
(lib.mesonOption "b_sanitize" "undefined")
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
// lib.optionalAttrs (!nixpkgsFor.${system}.native.stdenv.hostPlatform.isDarwin) {
|
// lib.optionalAttrs (!nixpkgsFor.${system}.native.stdenv.hostPlatform.isDarwin) {
|
||||||
# TODO: enable static builds for darwin, blocked on:
|
# TODO: enable static builds for darwin, blocked on:
|
||||||
# https://github.com/NixOS/nixpkgs/issues/320448
|
# https://github.com/NixOS/nixpkgs/issues/320448
|
||||||
# TODO: disabled to speed up GHA CI.
|
# TODO: disabled to speed up GHA CI.
|
||||||
#"static-" = nixpkgsFor.${system}.native.pkgsStatic;
|
# "static-" = {
|
||||||
|
# nixpkgs = nixpkgsFor.${system}.native.pkgsStatic;
|
||||||
|
# };
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
nixpkgsPrefix: nixpkgs:
|
nixpkgsPrefix:
|
||||||
flatMapAttrs nixpkgs.nixComponents (
|
{
|
||||||
|
nixpkgs,
|
||||||
|
nixComponents ? nixpkgs.nixComponents,
|
||||||
|
}:
|
||||||
|
flatMapAttrs nixComponents (
|
||||||
pkgName: pkg:
|
pkgName: pkg:
|
||||||
flatMapAttrs pkg.tests or { } (
|
flatMapAttrs pkg.tests or { } (
|
||||||
testName: test: {
|
testName: test: {
|
||||||
|
@ -281,7 +314,7 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
// lib.optionalAttrs (nixpkgs.stdenv.hostPlatform == nixpkgs.stdenv.buildPlatform) {
|
// lib.optionalAttrs (nixpkgs.stdenv.hostPlatform == nixpkgs.stdenv.buildPlatform) {
|
||||||
"${nixpkgsPrefix}nix-functional-tests" = nixpkgs.nixComponents.nix-functional-tests;
|
"${nixpkgsPrefix}nix-functional-tests" = nixComponents.nix-functional-tests;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
// devFlake.checks.${system} or { }
|
// devFlake.checks.${system} or { }
|
||||||
|
|
|
@ -145,5 +145,12 @@
|
||||||
"thebenmachine+git@gmail.com": "bmillwood",
|
"thebenmachine+git@gmail.com": "bmillwood",
|
||||||
"leandro@kip93.net": "kip93",
|
"leandro@kip93.net": "kip93",
|
||||||
"hello@briancamacho.me": "b-camacho",
|
"hello@briancamacho.me": "b-camacho",
|
||||||
"bcamacho@anduril.com": "bcamacho2"
|
"bcamacho@anduril.com": "bcamacho2",
|
||||||
|
"oldshensheep@gmail.com": "oldshensheep",
|
||||||
|
"thomasmiedema@gmail.com": "thomie",
|
||||||
|
"xokdvium@proton.me": "xokdvium",
|
||||||
|
"kaction@disroot.org": "KAction",
|
||||||
|
"serenity@kaction.cc": null,
|
||||||
|
"dev@erik.work": "Kirens",
|
||||||
|
"felix@alternativebit.fr": "picnoir"
|
||||||
}
|
}
|
|
@ -129,5 +129,9 @@
|
||||||
"SomeoneSerge": "Someone",
|
"SomeoneSerge": "Someone",
|
||||||
"b-camacho": "Brian Camacho",
|
"b-camacho": "Brian Camacho",
|
||||||
"MaxHearnden": null,
|
"MaxHearnden": null,
|
||||||
"kip93": "Leandro Emmanuel Reina Kiperman"
|
"kip93": "Leandro Emmanuel Reina Kiperman",
|
||||||
|
"oldshensheep": "Ruby Rose",
|
||||||
|
"KAction": "Dmitry Bogatov",
|
||||||
|
"thomie": "Thomas Miedema",
|
||||||
|
"Kirens": "Erik Nygren"
|
||||||
}
|
}
|
|
@ -84,340 +84,340 @@
|
||||||
''^precompiled-headers\.h$''
|
''^precompiled-headers\.h$''
|
||||||
''^src/build-remote/build-remote\.cc$''
|
''^src/build-remote/build-remote\.cc$''
|
||||||
''^src/libcmd/built-path\.cc$''
|
''^src/libcmd/built-path\.cc$''
|
||||||
''^src/libcmd/built-path\.hh$''
|
''^src/libcmd/include/nix/cmd/built-path\.hh$''
|
||||||
''^src/libcmd/common-eval-args\.cc$''
|
''^src/libcmd/common-eval-args\.cc$''
|
||||||
''^src/libcmd/common-eval-args\.hh$''
|
''^src/libcmd/include/nix/cmd/common-eval-args\.hh$''
|
||||||
''^src/libcmd/editor-for\.cc$''
|
''^src/libcmd/editor-for\.cc$''
|
||||||
''^src/libcmd/installable-attr-path\.cc$''
|
''^src/libcmd/installable-attr-path\.cc$''
|
||||||
''^src/libcmd/installable-attr-path\.hh$''
|
''^src/libcmd/include/nix/cmd/installable-attr-path\.hh$''
|
||||||
''^src/libcmd/installable-derived-path\.cc$''
|
''^src/libcmd/installable-derived-path\.cc$''
|
||||||
''^src/libcmd/installable-derived-path\.hh$''
|
''^src/libcmd/include/nix/cmd/installable-derived-path\.hh$''
|
||||||
''^src/libcmd/installable-flake\.cc$''
|
''^src/libcmd/installable-flake\.cc$''
|
||||||
''^src/libcmd/installable-flake\.hh$''
|
''^src/libcmd/include/nix/cmd/installable-flake\.hh$''
|
||||||
''^src/libcmd/installable-value\.cc$''
|
''^src/libcmd/installable-value\.cc$''
|
||||||
''^src/libcmd/installable-value\.hh$''
|
''^src/libcmd/include/nix/cmd/installable-value\.hh$''
|
||||||
''^src/libcmd/installables\.cc$''
|
''^src/libcmd/installables\.cc$''
|
||||||
''^src/libcmd/installables\.hh$''
|
''^src/libcmd/include/nix/cmd/installables\.hh$''
|
||||||
''^src/libcmd/legacy\.hh$''
|
''^src/libcmd/include/nix/cmd/legacy\.hh$''
|
||||||
''^src/libcmd/markdown\.cc$''
|
''^src/libcmd/markdown\.cc$''
|
||||||
''^src/libcmd/misc-store-flags\.cc$''
|
''^src/libcmd/misc-store-flags\.cc$''
|
||||||
''^src/libcmd/repl-interacter\.cc$''
|
''^src/libcmd/repl-interacter\.cc$''
|
||||||
''^src/libcmd/repl-interacter\.hh$''
|
''^src/libcmd/include/nix/cmd/repl-interacter\.hh$''
|
||||||
''^src/libcmd/repl\.cc$''
|
''^src/libcmd/repl\.cc$''
|
||||||
''^src/libcmd/repl\.hh$''
|
''^src/libcmd/include/nix/cmd/repl\.hh$''
|
||||||
''^src/libexpr-c/nix_api_expr\.cc$''
|
''^src/libexpr-c/nix_api_expr\.cc$''
|
||||||
''^src/libexpr-c/nix_api_external\.cc$''
|
''^src/libexpr-c/nix_api_external\.cc$''
|
||||||
''^src/libexpr/attr-path\.cc$''
|
''^src/libexpr/attr-path\.cc$''
|
||||||
''^src/libexpr/attr-path\.hh$''
|
''^src/libexpr/include/nix/expr/attr-path\.hh$''
|
||||||
''^src/libexpr/attr-set\.cc$''
|
''^src/libexpr/attr-set\.cc$''
|
||||||
''^src/libexpr/attr-set\.hh$''
|
''^src/libexpr/include/nix/expr/attr-set\.hh$''
|
||||||
''^src/libexpr/eval-cache\.cc$''
|
''^src/libexpr/eval-cache\.cc$''
|
||||||
''^src/libexpr/eval-cache\.hh$''
|
''^src/libexpr/include/nix/expr/eval-cache\.hh$''
|
||||||
''^src/libexpr/eval-error\.cc$''
|
''^src/libexpr/eval-error\.cc$''
|
||||||
''^src/libexpr/eval-inline\.hh$''
|
''^src/libexpr/include/nix/expr/eval-inline\.hh$''
|
||||||
''^src/libexpr/eval-settings\.cc$''
|
''^src/libexpr/eval-settings\.cc$''
|
||||||
''^src/libexpr/eval-settings\.hh$''
|
''^src/libexpr/include/nix/expr/eval-settings\.hh$''
|
||||||
''^src/libexpr/eval\.cc$''
|
''^src/libexpr/eval\.cc$''
|
||||||
''^src/libexpr/eval\.hh$''
|
''^src/libexpr/include/nix/expr/eval\.hh$''
|
||||||
''^src/libexpr/function-trace\.cc$''
|
''^src/libexpr/function-trace\.cc$''
|
||||||
''^src/libexpr/gc-small-vector\.hh$''
|
''^src/libexpr/include/nix/expr/gc-small-vector\.hh$''
|
||||||
''^src/libexpr/get-drvs\.cc$''
|
''^src/libexpr/get-drvs\.cc$''
|
||||||
''^src/libexpr/get-drvs\.hh$''
|
''^src/libexpr/include/nix/expr/get-drvs\.hh$''
|
||||||
''^src/libexpr/json-to-value\.cc$''
|
''^src/libexpr/json-to-value\.cc$''
|
||||||
''^src/libexpr/nixexpr\.cc$''
|
''^src/libexpr/nixexpr\.cc$''
|
||||||
''^src/libexpr/nixexpr\.hh$''
|
''^src/libexpr/include/nix/expr/nixexpr\.hh$''
|
||||||
''^src/libexpr/parser-state\.hh$''
|
''^src/libexpr/include/nix/expr/parser-state\.hh$''
|
||||||
''^src/libexpr/primops\.cc$''
|
''^src/libexpr/primops\.cc$''
|
||||||
''^src/libexpr/primops\.hh$''
|
''^src/libexpr/include/nix/expr/primops\.hh$''
|
||||||
''^src/libexpr/primops/context\.cc$''
|
''^src/libexpr/primops/context\.cc$''
|
||||||
''^src/libexpr/primops/fetchClosure\.cc$''
|
''^src/libexpr/primops/fetchClosure\.cc$''
|
||||||
''^src/libexpr/primops/fetchMercurial\.cc$''
|
''^src/libexpr/primops/fetchMercurial\.cc$''
|
||||||
''^src/libexpr/primops/fetchTree\.cc$''
|
''^src/libexpr/primops/fetchTree\.cc$''
|
||||||
''^src/libexpr/primops/fromTOML\.cc$''
|
''^src/libexpr/primops/fromTOML\.cc$''
|
||||||
''^src/libexpr/print-ambiguous\.cc$''
|
''^src/libexpr/print-ambiguous\.cc$''
|
||||||
''^src/libexpr/print-ambiguous\.hh$''
|
''^src/libexpr/include/nix/expr/print-ambiguous\.hh$''
|
||||||
''^src/libexpr/print-options\.hh$''
|
''^src/libexpr/include/nix/expr/print-options\.hh$''
|
||||||
''^src/libexpr/print\.cc$''
|
''^src/libexpr/print\.cc$''
|
||||||
''^src/libexpr/print\.hh$''
|
''^src/libexpr/include/nix/expr/print\.hh$''
|
||||||
''^src/libexpr/search-path\.cc$''
|
''^src/libexpr/search-path\.cc$''
|
||||||
''^src/libexpr/symbol-table\.hh$''
|
''^src/libexpr/include/nix/expr/symbol-table\.hh$''
|
||||||
''^src/libexpr/value-to-json\.cc$''
|
''^src/libexpr/value-to-json\.cc$''
|
||||||
''^src/libexpr/value-to-json\.hh$''
|
''^src/libexpr/include/nix/expr/value-to-json\.hh$''
|
||||||
''^src/libexpr/value-to-xml\.cc$''
|
''^src/libexpr/value-to-xml\.cc$''
|
||||||
''^src/libexpr/value-to-xml\.hh$''
|
''^src/libexpr/include/nix/expr/value-to-xml\.hh$''
|
||||||
''^src/libexpr/value\.hh$''
|
''^src/libexpr/include/nix/expr/value\.hh$''
|
||||||
''^src/libexpr/value/context\.cc$''
|
''^src/libexpr/value/context\.cc$''
|
||||||
''^src/libexpr/value/context\.hh$''
|
''^src/libexpr/include/nix/expr/value/context\.hh$''
|
||||||
''^src/libfetchers/attrs\.cc$''
|
''^src/libfetchers/attrs\.cc$''
|
||||||
''^src/libfetchers/cache\.cc$''
|
''^src/libfetchers/cache\.cc$''
|
||||||
''^src/libfetchers/cache\.hh$''
|
''^src/libfetchers/include/nix/fetchers/cache\.hh$''
|
||||||
''^src/libfetchers/fetch-settings\.cc$''
|
''^src/libfetchers/fetch-settings\.cc$''
|
||||||
''^src/libfetchers/fetch-settings\.hh$''
|
''^src/libfetchers/include/nix/fetchers/fetch-settings\.hh$''
|
||||||
''^src/libfetchers/fetch-to-store\.cc$''
|
''^src/libfetchers/fetch-to-store\.cc$''
|
||||||
''^src/libfetchers/fetchers\.cc$''
|
''^src/libfetchers/fetchers\.cc$''
|
||||||
''^src/libfetchers/fetchers\.hh$''
|
''^src/libfetchers/include/nix/fetchers/fetchers\.hh$''
|
||||||
''^src/libfetchers/filtering-source-accessor\.cc$''
|
''^src/libfetchers/filtering-source-accessor\.cc$''
|
||||||
''^src/libfetchers/filtering-source-accessor\.hh$''
|
''^src/libfetchers/include/nix/fetchers/filtering-source-accessor\.hh$''
|
||||||
''^src/libfetchers/fs-source-accessor\.cc$''
|
''^src/libfetchers/fs-source-accessor\.cc$''
|
||||||
''^src/libfetchers/fs-source-accessor\.hh$''
|
''^src/libfetchers/include/nix/fs-source-accessor\.hh$''
|
||||||
''^src/libfetchers/git-utils\.cc$''
|
''^src/libfetchers/git-utils\.cc$''
|
||||||
''^src/libfetchers/git-utils\.hh$''
|
''^src/libfetchers/include/nix/fetchers/git-utils\.hh$''
|
||||||
''^src/libfetchers/github\.cc$''
|
''^src/libfetchers/github\.cc$''
|
||||||
''^src/libfetchers/indirect\.cc$''
|
''^src/libfetchers/indirect\.cc$''
|
||||||
''^src/libfetchers/memory-source-accessor\.cc$''
|
''^src/libfetchers/memory-source-accessor\.cc$''
|
||||||
''^src/libfetchers/path\.cc$''
|
''^src/libfetchers/path\.cc$''
|
||||||
''^src/libfetchers/registry\.cc$''
|
''^src/libfetchers/registry\.cc$''
|
||||||
''^src/libfetchers/registry\.hh$''
|
''^src/libfetchers/include/nix/fetchers/registry\.hh$''
|
||||||
''^src/libfetchers/tarball\.cc$''
|
''^src/libfetchers/tarball\.cc$''
|
||||||
''^src/libfetchers/tarball\.hh$''
|
''^src/libfetchers/include/nix/fetchers/tarball\.hh$''
|
||||||
''^src/libfetchers/git\.cc$''
|
''^src/libfetchers/git\.cc$''
|
||||||
''^src/libfetchers/mercurial\.cc$''
|
''^src/libfetchers/mercurial\.cc$''
|
||||||
''^src/libflake/flake/config\.cc$''
|
''^src/libflake/flake/config\.cc$''
|
||||||
''^src/libflake/flake/flake\.cc$''
|
''^src/libflake/flake/flake\.cc$''
|
||||||
''^src/libflake/flake/flake\.hh$''
|
''^src/libflake/include/nix/flake/flake\.hh$''
|
||||||
''^src/libflake/flake/flakeref\.cc$''
|
''^src/libflake/flake/flakeref\.cc$''
|
||||||
''^src/libflake/flake/flakeref\.hh$''
|
''^src/libflake/include/nix/flake/flakeref\.hh$''
|
||||||
''^src/libflake/flake/lockfile\.cc$''
|
''^src/libflake/flake/lockfile\.cc$''
|
||||||
''^src/libflake/flake/lockfile\.hh$''
|
''^src/libflake/include/nix/flake/lockfile\.hh$''
|
||||||
''^src/libflake/flake/url-name\.cc$''
|
''^src/libflake/flake/url-name\.cc$''
|
||||||
''^src/libmain/common-args\.cc$''
|
''^src/libmain/common-args\.cc$''
|
||||||
''^src/libmain/common-args\.hh$''
|
''^src/libmain/include/nix/main/common-args\.hh$''
|
||||||
''^src/libmain/loggers\.cc$''
|
''^src/libmain/loggers\.cc$''
|
||||||
''^src/libmain/loggers\.hh$''
|
''^src/libmain/include/nix/main/loggers\.hh$''
|
||||||
''^src/libmain/progress-bar\.cc$''
|
''^src/libmain/progress-bar\.cc$''
|
||||||
''^src/libmain/shared\.cc$''
|
''^src/libmain/shared\.cc$''
|
||||||
''^src/libmain/shared\.hh$''
|
''^src/libmain/include/nix/main/shared\.hh$''
|
||||||
''^src/libmain/unix/stack\.cc$''
|
''^src/libmain/unix/stack\.cc$''
|
||||||
''^src/libstore/binary-cache-store\.cc$''
|
''^src/libstore/binary-cache-store\.cc$''
|
||||||
''^src/libstore/binary-cache-store\.hh$''
|
''^src/libstore/include/nix/store/binary-cache-store\.hh$''
|
||||||
''^src/libstore/build-result\.hh$''
|
''^src/libstore/include/nix/store/build-result\.hh$''
|
||||||
''^src/libstore/builtins\.hh$''
|
''^src/libstore/include/nix/store/builtins\.hh$''
|
||||||
''^src/libstore/builtins/buildenv\.cc$''
|
''^src/libstore/builtins/buildenv\.cc$''
|
||||||
''^src/libstore/builtins/buildenv\.hh$''
|
''^src/libstore/include/nix/store/builtins/buildenv\.hh$''
|
||||||
''^src/libstore/common-protocol-impl\.hh$''
|
''^src/libstore/include/nix/store/common-protocol-impl\.hh$''
|
||||||
''^src/libstore/common-protocol\.cc$''
|
''^src/libstore/common-protocol\.cc$''
|
||||||
''^src/libstore/common-protocol\.hh$''
|
''^src/libstore/include/nix/store/common-protocol\.hh$''
|
||||||
''^src/libstore/common-ssh-store-config\.hh$''
|
''^src/libstore/include/nix/store/common-ssh-store-config\.hh$''
|
||||||
''^src/libstore/content-address\.cc$''
|
''^src/libstore/content-address\.cc$''
|
||||||
''^src/libstore/content-address\.hh$''
|
''^src/libstore/include/nix/store/content-address\.hh$''
|
||||||
''^src/libstore/daemon\.cc$''
|
''^src/libstore/daemon\.cc$''
|
||||||
''^src/libstore/daemon\.hh$''
|
''^src/libstore/include/nix/store/daemon\.hh$''
|
||||||
''^src/libstore/derivations\.cc$''
|
''^src/libstore/derivations\.cc$''
|
||||||
''^src/libstore/derivations\.hh$''
|
''^src/libstore/include/nix/store/derivations\.hh$''
|
||||||
''^src/libstore/derived-path-map\.cc$''
|
''^src/libstore/derived-path-map\.cc$''
|
||||||
''^src/libstore/derived-path-map\.hh$''
|
''^src/libstore/include/nix/store/derived-path-map\.hh$''
|
||||||
''^src/libstore/derived-path\.cc$''
|
''^src/libstore/derived-path\.cc$''
|
||||||
''^src/libstore/derived-path\.hh$''
|
''^src/libstore/include/nix/store/derived-path\.hh$''
|
||||||
''^src/libstore/downstream-placeholder\.cc$''
|
''^src/libstore/downstream-placeholder\.cc$''
|
||||||
''^src/libstore/downstream-placeholder\.hh$''
|
''^src/libstore/include/nix/store/downstream-placeholder\.hh$''
|
||||||
''^src/libstore/dummy-store\.cc$''
|
''^src/libstore/dummy-store\.cc$''
|
||||||
''^src/libstore/export-import\.cc$''
|
''^src/libstore/export-import\.cc$''
|
||||||
''^src/libstore/filetransfer\.cc$''
|
''^src/libstore/filetransfer\.cc$''
|
||||||
''^src/libstore/filetransfer\.hh$''
|
''^src/libstore/include/nix/store/filetransfer\.hh$''
|
||||||
''^src/libstore/gc-store\.hh$''
|
''^src/libstore/include/nix/store/gc-store\.hh$''
|
||||||
''^src/libstore/globals\.cc$''
|
''^src/libstore/globals\.cc$''
|
||||||
''^src/libstore/globals\.hh$''
|
''^src/libstore/include/nix/store/globals\.hh$''
|
||||||
''^src/libstore/http-binary-cache-store\.cc$''
|
''^src/libstore/http-binary-cache-store\.cc$''
|
||||||
''^src/libstore/legacy-ssh-store\.cc$''
|
''^src/libstore/legacy-ssh-store\.cc$''
|
||||||
''^src/libstore/legacy-ssh-store\.hh$''
|
''^src/libstore/include/nix/store/legacy-ssh-store\.hh$''
|
||||||
''^src/libstore/length-prefixed-protocol-helper\.hh$''
|
''^src/libstore/include/nix/store/length-prefixed-protocol-helper\.hh$''
|
||||||
''^src/libstore/linux/personality\.cc$''
|
''^src/libstore/linux/personality\.cc$''
|
||||||
''^src/libstore/linux/personality\.hh$''
|
''^src/libstore/linux/include/nix/store/personality\.hh$''
|
||||||
''^src/libstore/local-binary-cache-store\.cc$''
|
''^src/libstore/local-binary-cache-store\.cc$''
|
||||||
''^src/libstore/local-fs-store\.cc$''
|
''^src/libstore/local-fs-store\.cc$''
|
||||||
''^src/libstore/local-fs-store\.hh$''
|
''^src/libstore/include/nix/store/local-fs-store\.hh$''
|
||||||
''^src/libstore/log-store\.cc$''
|
''^src/libstore/log-store\.cc$''
|
||||||
''^src/libstore/log-store\.hh$''
|
''^src/libstore/include/nix/store/log-store\.hh$''
|
||||||
''^src/libstore/machines\.cc$''
|
''^src/libstore/machines\.cc$''
|
||||||
''^src/libstore/machines\.hh$''
|
''^src/libstore/include/nix/store/machines\.hh$''
|
||||||
''^src/libstore/make-content-addressed\.cc$''
|
''^src/libstore/make-content-addressed\.cc$''
|
||||||
''^src/libstore/make-content-addressed\.hh$''
|
''^src/libstore/include/nix/store/make-content-addressed\.hh$''
|
||||||
''^src/libstore/misc\.cc$''
|
''^src/libstore/misc\.cc$''
|
||||||
''^src/libstore/names\.cc$''
|
''^src/libstore/names\.cc$''
|
||||||
''^src/libstore/names\.hh$''
|
''^src/libstore/include/nix/store/names\.hh$''
|
||||||
''^src/libstore/nar-accessor\.cc$''
|
''^src/libstore/nar-accessor\.cc$''
|
||||||
''^src/libstore/nar-accessor\.hh$''
|
''^src/libstore/include/nix/store/nar-accessor\.hh$''
|
||||||
''^src/libstore/nar-info-disk-cache\.cc$''
|
''^src/libstore/nar-info-disk-cache\.cc$''
|
||||||
''^src/libstore/nar-info-disk-cache\.hh$''
|
''^src/libstore/include/nix/store/nar-info-disk-cache\.hh$''
|
||||||
''^src/libstore/nar-info\.cc$''
|
''^src/libstore/nar-info\.cc$''
|
||||||
''^src/libstore/nar-info\.hh$''
|
''^src/libstore/include/nix/store/nar-info\.hh$''
|
||||||
''^src/libstore/outputs-spec\.cc$''
|
''^src/libstore/outputs-spec\.cc$''
|
||||||
''^src/libstore/outputs-spec\.hh$''
|
''^src/libstore/include/nix/store/outputs-spec\.hh$''
|
||||||
''^src/libstore/parsed-derivations\.cc$''
|
''^src/libstore/parsed-derivations\.cc$''
|
||||||
''^src/libstore/path-info\.cc$''
|
''^src/libstore/path-info\.cc$''
|
||||||
''^src/libstore/path-info\.hh$''
|
''^src/libstore/include/nix/store/path-info\.hh$''
|
||||||
''^src/libstore/path-references\.cc$''
|
''^src/libstore/path-references\.cc$''
|
||||||
''^src/libstore/path-regex\.hh$''
|
''^src/libstore/include/nix/store/path-regex\.hh$''
|
||||||
''^src/libstore/path-with-outputs\.cc$''
|
''^src/libstore/path-with-outputs\.cc$''
|
||||||
''^src/libstore/path\.cc$''
|
''^src/libstore/path\.cc$''
|
||||||
''^src/libstore/path\.hh$''
|
''^src/libstore/include/nix/store/path\.hh$''
|
||||||
''^src/libstore/pathlocks\.cc$''
|
''^src/libstore/pathlocks\.cc$''
|
||||||
''^src/libstore/pathlocks\.hh$''
|
''^src/libstore/include/nix/store/pathlocks\.hh$''
|
||||||
''^src/libstore/profiles\.cc$''
|
''^src/libstore/profiles\.cc$''
|
||||||
''^src/libstore/profiles\.hh$''
|
''^src/libstore/include/nix/store/profiles\.hh$''
|
||||||
''^src/libstore/realisation\.cc$''
|
''^src/libstore/realisation\.cc$''
|
||||||
''^src/libstore/realisation\.hh$''
|
''^src/libstore/include/nix/store/realisation\.hh$''
|
||||||
''^src/libstore/remote-fs-accessor\.cc$''
|
''^src/libstore/remote-fs-accessor\.cc$''
|
||||||
''^src/libstore/remote-fs-accessor\.hh$''
|
''^src/libstore/include/nix/store/remote-fs-accessor\.hh$''
|
||||||
''^src/libstore/remote-store-connection\.hh$''
|
''^src/libstore/include/nix/store/remote-store-connection\.hh$''
|
||||||
''^src/libstore/remote-store\.cc$''
|
''^src/libstore/remote-store\.cc$''
|
||||||
''^src/libstore/remote-store\.hh$''
|
''^src/libstore/include/nix/store/remote-store\.hh$''
|
||||||
''^src/libstore/s3-binary-cache-store\.cc$''
|
''^src/libstore/s3-binary-cache-store\.cc$''
|
||||||
''^src/libstore/s3\.hh$''
|
''^src/libstore/include/nix/store/s3\.hh$''
|
||||||
''^src/libstore/serve-protocol-impl\.cc$''
|
''^src/libstore/serve-protocol-impl\.cc$''
|
||||||
''^src/libstore/serve-protocol-impl\.hh$''
|
''^src/libstore/include/nix/store/serve-protocol-impl\.hh$''
|
||||||
''^src/libstore/serve-protocol\.cc$''
|
''^src/libstore/serve-protocol\.cc$''
|
||||||
''^src/libstore/serve-protocol\.hh$''
|
''^src/libstore/include/nix/store/serve-protocol\.hh$''
|
||||||
''^src/libstore/sqlite\.cc$''
|
''^src/libstore/sqlite\.cc$''
|
||||||
''^src/libstore/sqlite\.hh$''
|
''^src/libstore/include/nix/store/sqlite\.hh$''
|
||||||
''^src/libstore/ssh-store\.cc$''
|
''^src/libstore/ssh-store\.cc$''
|
||||||
''^src/libstore/ssh\.cc$''
|
''^src/libstore/ssh\.cc$''
|
||||||
''^src/libstore/ssh\.hh$''
|
''^src/libstore/include/nix/store/ssh\.hh$''
|
||||||
''^src/libstore/store-api\.cc$''
|
''^src/libstore/store-api\.cc$''
|
||||||
''^src/libstore/store-api\.hh$''
|
''^src/libstore/include/nix/store/store-api\.hh$''
|
||||||
''^src/libstore/store-dir-config\.hh$''
|
''^src/libstore/include/nix/store/store-dir-config\.hh$''
|
||||||
''^src/libstore/build/derivation-goal\.cc$''
|
''^src/libstore/build/derivation-goal\.cc$''
|
||||||
''^src/libstore/build/derivation-goal\.hh$''
|
''^src/libstore/include/nix/store/build/derivation-goal\.hh$''
|
||||||
''^src/libstore/build/drv-output-substitution-goal\.cc$''
|
''^src/libstore/build/drv-output-substitution-goal\.cc$''
|
||||||
''^src/libstore/build/drv-output-substitution-goal\.hh$''
|
''^src/libstore/include/nix/store/build/drv-output-substitution-goal\.hh$''
|
||||||
''^src/libstore/build/entry-points\.cc$''
|
''^src/libstore/build/entry-points\.cc$''
|
||||||
''^src/libstore/build/goal\.cc$''
|
''^src/libstore/build/goal\.cc$''
|
||||||
''^src/libstore/build/goal\.hh$''
|
''^src/libstore/include/nix/store/build/goal\.hh$''
|
||||||
''^src/libstore/unix/build/hook-instance\.cc$''
|
''^src/libstore/unix/build/hook-instance\.cc$''
|
||||||
''^src/libstore/unix/build/local-derivation-goal\.cc$''
|
''^src/libstore/unix/build/local-derivation-goal\.cc$''
|
||||||
''^src/libstore/unix/build/local-derivation-goal\.hh$''
|
''^src/libstore/unix/include/nix/store/build/local-derivation-goal\.hh$''
|
||||||
''^src/libstore/build/substitution-goal\.cc$''
|
''^src/libstore/build/substitution-goal\.cc$''
|
||||||
''^src/libstore/build/substitution-goal\.hh$''
|
''^src/libstore/include/nix/store/build/substitution-goal\.hh$''
|
||||||
''^src/libstore/build/worker\.cc$''
|
''^src/libstore/build/worker\.cc$''
|
||||||
''^src/libstore/build/worker\.hh$''
|
''^src/libstore/include/nix/store/build/worker\.hh$''
|
||||||
''^src/libstore/builtins/fetchurl\.cc$''
|
''^src/libstore/builtins/fetchurl\.cc$''
|
||||||
''^src/libstore/builtins/unpack-channel\.cc$''
|
''^src/libstore/builtins/unpack-channel\.cc$''
|
||||||
''^src/libstore/gc\.cc$''
|
''^src/libstore/gc\.cc$''
|
||||||
''^src/libstore/local-overlay-store\.cc$''
|
''^src/libstore/local-overlay-store\.cc$''
|
||||||
''^src/libstore/local-overlay-store\.hh$''
|
''^src/libstore/include/nix/store/local-overlay-store\.hh$''
|
||||||
''^src/libstore/local-store\.cc$''
|
''^src/libstore/local-store\.cc$''
|
||||||
''^src/libstore/local-store\.hh$''
|
''^src/libstore/include/nix/store/local-store\.hh$''
|
||||||
''^src/libstore/unix/user-lock\.cc$''
|
''^src/libstore/unix/user-lock\.cc$''
|
||||||
''^src/libstore/unix/user-lock\.hh$''
|
''^src/libstore/unix/include/nix/store/user-lock\.hh$''
|
||||||
''^src/libstore/optimise-store\.cc$''
|
''^src/libstore/optimise-store\.cc$''
|
||||||
''^src/libstore/unix/pathlocks\.cc$''
|
''^src/libstore/unix/pathlocks\.cc$''
|
||||||
''^src/libstore/posix-fs-canonicalise\.cc$''
|
''^src/libstore/posix-fs-canonicalise\.cc$''
|
||||||
''^src/libstore/posix-fs-canonicalise\.hh$''
|
''^src/libstore/include/nix/store/posix-fs-canonicalise\.hh$''
|
||||||
''^src/libstore/uds-remote-store\.cc$''
|
''^src/libstore/uds-remote-store\.cc$''
|
||||||
''^src/libstore/uds-remote-store\.hh$''
|
''^src/libstore/include/nix/store/uds-remote-store\.hh$''
|
||||||
''^src/libstore/windows/build\.cc$''
|
''^src/libstore/windows/build\.cc$''
|
||||||
''^src/libstore/worker-protocol-impl\.hh$''
|
''^src/libstore/include/nix/store/worker-protocol-impl\.hh$''
|
||||||
''^src/libstore/worker-protocol\.cc$''
|
''^src/libstore/worker-protocol\.cc$''
|
||||||
''^src/libstore/worker-protocol\.hh$''
|
''^src/libstore/include/nix/store/worker-protocol\.hh$''
|
||||||
''^src/libutil-c/nix_api_util_internal\.h$''
|
''^src/libutil-c/nix_api_util_internal\.h$''
|
||||||
''^src/libutil/archive\.cc$''
|
''^src/libutil/archive\.cc$''
|
||||||
''^src/libutil/archive\.hh$''
|
''^src/libutil/include/nix/util/archive\.hh$''
|
||||||
''^src/libutil/args\.cc$''
|
''^src/libutil/args\.cc$''
|
||||||
''^src/libutil/args\.hh$''
|
''^src/libutil/include/nix/util/args\.hh$''
|
||||||
''^src/libutil/args/root\.hh$''
|
''^src/libutil/include/nix/util/args/root\.hh$''
|
||||||
''^src/libutil/callback\.hh$''
|
''^src/libutil/include/nix/util/callback\.hh$''
|
||||||
''^src/libutil/canon-path\.cc$''
|
''^src/libutil/canon-path\.cc$''
|
||||||
''^src/libutil/canon-path\.hh$''
|
''^src/libutil/include/nix/util/canon-path\.hh$''
|
||||||
''^src/libutil/chunked-vector\.hh$''
|
''^src/libutil/include/nix/util/chunked-vector\.hh$''
|
||||||
''^src/libutil/closure\.hh$''
|
''^src/libutil/include/nix/util/closure\.hh$''
|
||||||
''^src/libutil/comparator\.hh$''
|
''^src/libutil/include/nix/util/comparator\.hh$''
|
||||||
''^src/libutil/compute-levels\.cc$''
|
''^src/libutil/compute-levels\.cc$''
|
||||||
''^src/libutil/config-impl\.hh$''
|
''^src/libutil/include/nix/util/config-impl\.hh$''
|
||||||
''^src/libutil/config\.cc$''
|
''^src/libutil/configuration\.cc$''
|
||||||
''^src/libutil/config\.hh$''
|
''^src/libutil/include/nix/util/configuration\.hh$''
|
||||||
''^src/libutil/current-process\.cc$''
|
''^src/libutil/current-process\.cc$''
|
||||||
''^src/libutil/current-process\.hh$''
|
''^src/libutil/include/nix/util/current-process\.hh$''
|
||||||
''^src/libutil/english\.cc$''
|
''^src/libutil/english\.cc$''
|
||||||
''^src/libutil/english\.hh$''
|
''^src/libutil/include/nix/util/english\.hh$''
|
||||||
''^src/libutil/error\.cc$''
|
''^src/libutil/error\.cc$''
|
||||||
''^src/libutil/error\.hh$''
|
''^src/libutil/include/nix/util/error\.hh$''
|
||||||
''^src/libutil/exit\.hh$''
|
''^src/libutil/include/nix/util/exit\.hh$''
|
||||||
''^src/libutil/experimental-features\.cc$''
|
''^src/libutil/experimental-features\.cc$''
|
||||||
''^src/libutil/experimental-features\.hh$''
|
''^src/libutil/include/nix/util/experimental-features\.hh$''
|
||||||
''^src/libutil/file-content-address\.cc$''
|
''^src/libutil/file-content-address\.cc$''
|
||||||
''^src/libutil/file-content-address\.hh$''
|
''^src/libutil/include/nix/util/file-content-address\.hh$''
|
||||||
''^src/libutil/file-descriptor\.cc$''
|
''^src/libutil/file-descriptor\.cc$''
|
||||||
''^src/libutil/file-descriptor\.hh$''
|
''^src/libutil/include/nix/util/file-descriptor\.hh$''
|
||||||
''^src/libutil/file-path-impl\.hh$''
|
''^src/libutil/include/nix/util/file-path-impl\.hh$''
|
||||||
''^src/libutil/file-path\.hh$''
|
''^src/libutil/include/nix/util/file-path\.hh$''
|
||||||
''^src/libutil/file-system\.cc$''
|
''^src/libutil/file-system\.cc$''
|
||||||
''^src/libutil/file-system\.hh$''
|
''^src/libutil/include/nix/util/file-system\.hh$''
|
||||||
''^src/libutil/finally\.hh$''
|
''^src/libutil/include/nix/util/finally\.hh$''
|
||||||
''^src/libutil/fmt\.hh$''
|
''^src/libutil/include/nix/util/fmt\.hh$''
|
||||||
''^src/libutil/fs-sink\.cc$''
|
''^src/libutil/fs-sink\.cc$''
|
||||||
''^src/libutil/fs-sink\.hh$''
|
''^src/libutil/include/nix/util/fs-sink\.hh$''
|
||||||
''^src/libutil/git\.cc$''
|
''^src/libutil/git\.cc$''
|
||||||
''^src/libutil/git\.hh$''
|
''^src/libutil/include/nix/util/git\.hh$''
|
||||||
''^src/libutil/hash\.cc$''
|
''^src/libutil/hash\.cc$''
|
||||||
''^src/libutil/hash\.hh$''
|
''^src/libutil/include/nix/util/hash\.hh$''
|
||||||
''^src/libutil/hilite\.cc$''
|
''^src/libutil/hilite\.cc$''
|
||||||
''^src/libutil/hilite\.hh$''
|
''^src/libutil/include/nix/util/hilite\.hh$''
|
||||||
''^src/libutil/source-accessor\.hh$''
|
''^src/libutil/source-accessor\.hh$''
|
||||||
''^src/libutil/json-impls\.hh$''
|
''^src/libutil/include/nix/util/json-impls\.hh$''
|
||||||
''^src/libutil/json-utils\.cc$''
|
''^src/libutil/json-utils\.cc$''
|
||||||
''^src/libutil/json-utils\.hh$''
|
''^src/libutil/include/nix/util/json-utils\.hh$''
|
||||||
''^src/libutil/linux/cgroup\.cc$''
|
''^src/libutil/linux/cgroup\.cc$''
|
||||||
''^src/libutil/linux/namespaces\.cc$''
|
''^src/libutil/linux/namespaces\.cc$''
|
||||||
''^src/libutil/logging\.cc$''
|
''^src/libutil/logging\.cc$''
|
||||||
''^src/libutil/logging\.hh$''
|
''^src/libutil/include/nix/util/logging\.hh$''
|
||||||
''^src/libutil/lru-cache\.hh$''
|
''^src/libutil/include/nix/util/lru-cache\.hh$''
|
||||||
''^src/libutil/memory-source-accessor\.cc$''
|
''^src/libutil/memory-source-accessor\.cc$''
|
||||||
''^src/libutil/memory-source-accessor\.hh$''
|
''^src/libutil/include/nix/util/memory-source-accessor\.hh$''
|
||||||
''^src/libutil/pool\.hh$''
|
''^src/libutil/include/nix/util/pool\.hh$''
|
||||||
''^src/libutil/position\.cc$''
|
''^src/libutil/position\.cc$''
|
||||||
''^src/libutil/position\.hh$''
|
''^src/libutil/include/nix/util/position\.hh$''
|
||||||
''^src/libutil/posix-source-accessor\.cc$''
|
''^src/libutil/posix-source-accessor\.cc$''
|
||||||
''^src/libutil/posix-source-accessor\.hh$''
|
''^src/libutil/include/nix/util/posix-source-accessor\.hh$''
|
||||||
''^src/libutil/processes\.hh$''
|
''^src/libutil/include/nix/util/processes\.hh$''
|
||||||
''^src/libutil/ref\.hh$''
|
''^src/libutil/include/nix/util/ref\.hh$''
|
||||||
''^src/libutil/references\.cc$''
|
''^src/libutil/references\.cc$''
|
||||||
''^src/libutil/references\.hh$''
|
''^src/libutil/include/nix/util/references\.hh$''
|
||||||
''^src/libutil/regex-combinators\.hh$''
|
''^src/libutil/regex-combinators\.hh$''
|
||||||
''^src/libutil/serialise\.cc$''
|
''^src/libutil/serialise\.cc$''
|
||||||
''^src/libutil/serialise\.hh$''
|
''^src/libutil/include/nix/util/serialise\.hh$''
|
||||||
''^src/libutil/signals\.hh$''
|
''^src/libutil/include/nix/util/signals\.hh$''
|
||||||
''^src/libutil/signature/local-keys\.cc$''
|
''^src/libutil/signature/local-keys\.cc$''
|
||||||
''^src/libutil/signature/local-keys\.hh$''
|
''^src/libutil/include/nix/util/signature/local-keys\.hh$''
|
||||||
''^src/libutil/signature/signer\.cc$''
|
''^src/libutil/signature/signer\.cc$''
|
||||||
''^src/libutil/signature/signer\.hh$''
|
''^src/libutil/include/nix/util/signature/signer\.hh$''
|
||||||
''^src/libutil/source-accessor\.cc$''
|
''^src/libutil/source-accessor\.cc$''
|
||||||
''^src/libutil/source-accessor\.hh$''
|
''^src/libutil/include/nix/util/source-accessor\.hh$''
|
||||||
''^src/libutil/source-path\.cc$''
|
''^src/libutil/source-path\.cc$''
|
||||||
''^src/libutil/source-path\.hh$''
|
''^src/libutil/include/nix/util/source-path\.hh$''
|
||||||
''^src/libutil/split\.hh$''
|
''^src/libutil/include/nix/util/split\.hh$''
|
||||||
''^src/libutil/suggestions\.cc$''
|
''^src/libutil/suggestions\.cc$''
|
||||||
''^src/libutil/suggestions\.hh$''
|
''^src/libutil/include/nix/util/suggestions\.hh$''
|
||||||
''^src/libutil/sync\.hh$''
|
''^src/libutil/include/nix/util/sync\.hh$''
|
||||||
''^src/libutil/terminal\.cc$''
|
''^src/libutil/terminal\.cc$''
|
||||||
''^src/libutil/terminal\.hh$''
|
''^src/libutil/include/nix/util/terminal\.hh$''
|
||||||
''^src/libutil/thread-pool\.cc$''
|
''^src/libutil/thread-pool\.cc$''
|
||||||
''^src/libutil/thread-pool\.hh$''
|
''^src/libutil/include/nix/util/thread-pool\.hh$''
|
||||||
''^src/libutil/topo-sort\.hh$''
|
''^src/libutil/include/nix/util/topo-sort\.hh$''
|
||||||
''^src/libutil/types\.hh$''
|
''^src/libutil/include/nix/util/types\.hh$''
|
||||||
''^src/libutil/unix/file-descriptor\.cc$''
|
''^src/libutil/unix/file-descriptor\.cc$''
|
||||||
''^src/libutil/unix/file-path\.cc$''
|
''^src/libutil/unix/file-path\.cc$''
|
||||||
''^src/libutil/unix/processes\.cc$''
|
''^src/libutil/unix/processes\.cc$''
|
||||||
''^src/libutil/unix/signals-impl\.hh$''
|
''^src/libutil/unix/include/nix/util/signals-impl\.hh$''
|
||||||
''^src/libutil/unix/signals\.cc$''
|
''^src/libutil/unix/signals\.cc$''
|
||||||
''^src/libutil/unix-domain-socket\.cc$''
|
''^src/libutil/unix-domain-socket\.cc$''
|
||||||
''^src/libutil/unix/users\.cc$''
|
''^src/libutil/unix/users\.cc$''
|
||||||
''^src/libutil/url-parts\.hh$''
|
''^src/libutil/include/nix/util/url-parts\.hh$''
|
||||||
''^src/libutil/url\.cc$''
|
''^src/libutil/url\.cc$''
|
||||||
''^src/libutil/url\.hh$''
|
''^src/libutil/include/nix/util/url\.hh$''
|
||||||
''^src/libutil/users\.cc$''
|
''^src/libutil/users\.cc$''
|
||||||
''^src/libutil/users\.hh$''
|
''^src/libutil/include/nix/util/users\.hh$''
|
||||||
''^src/libutil/util\.cc$''
|
''^src/libutil/util\.cc$''
|
||||||
''^src/libutil/util\.hh$''
|
''^src/libutil/include/nix/util/util\.hh$''
|
||||||
''^src/libutil/variant-wrapper\.hh$''
|
''^src/libutil/include/nix/util/variant-wrapper\.hh$''
|
||||||
''^src/libutil/widecharwidth/widechar_width\.h$'' # vendored source
|
''^src/libutil/widecharwidth/widechar_width\.h$'' # vendored source
|
||||||
''^src/libutil/windows/file-descriptor\.cc$''
|
''^src/libutil/windows/file-descriptor\.cc$''
|
||||||
''^src/libutil/windows/file-path\.cc$''
|
''^src/libutil/windows/file-path\.cc$''
|
||||||
''^src/libutil/windows/processes\.cc$''
|
''^src/libutil/windows/processes\.cc$''
|
||||||
''^src/libutil/windows/users\.cc$''
|
''^src/libutil/windows/users\.cc$''
|
||||||
''^src/libutil/windows/windows-error\.cc$''
|
''^src/libutil/windows/windows-error\.cc$''
|
||||||
''^src/libutil/windows/windows-error\.hh$''
|
''^src/libutil/windows/include/nix/util/windows-error\.hh$''
|
||||||
''^src/libutil/xml-writer\.cc$''
|
''^src/libutil/xml-writer\.cc$''
|
||||||
''^src/libutil/xml-writer\.hh$''
|
''^src/libutil/include/nix/util/xml-writer\.hh$''
|
||||||
''^src/nix-build/nix-build\.cc$''
|
''^src/nix-build/nix-build\.cc$''
|
||||||
''^src/nix-channel/nix-channel\.cc$''
|
''^src/nix-channel/nix-channel\.cc$''
|
||||||
''^src/nix-collect-garbage/nix-collect-garbage\.cc$''
|
''^src/nix-collect-garbage/nix-collect-garbage\.cc$''
|
||||||
|
@ -481,9 +481,9 @@
|
||||||
''^tests/nixos/ca-fd-leak/sender\.c''
|
''^tests/nixos/ca-fd-leak/sender\.c''
|
||||||
''^tests/nixos/ca-fd-leak/smuggler\.c''
|
''^tests/nixos/ca-fd-leak/smuggler\.c''
|
||||||
''^tests/nixos/user-sandboxing/attacker\.c''
|
''^tests/nixos/user-sandboxing/attacker\.c''
|
||||||
''^src/libexpr-test-support/tests/libexpr\.hh''
|
''^src/libexpr-test-support/include/nix/expr/tests/libexpr\.hh''
|
||||||
''^src/libexpr-test-support/tests/value/context\.cc''
|
''^src/libexpr-test-support/tests/value/context\.cc''
|
||||||
''^src/libexpr-test-support/tests/value/context\.hh''
|
''^src/libexpr-test-support/include/nix/expr/tests/value/context\.hh''
|
||||||
''^src/libexpr-tests/derived-path\.cc''
|
''^src/libexpr-tests/derived-path\.cc''
|
||||||
''^src/libexpr-tests/error_traces\.cc''
|
''^src/libexpr-tests/error_traces\.cc''
|
||||||
''^src/libexpr-tests/eval\.cc''
|
''^src/libexpr-tests/eval\.cc''
|
||||||
|
@ -498,13 +498,13 @@
|
||||||
''^src/libflake-tests/flakeref\.cc''
|
''^src/libflake-tests/flakeref\.cc''
|
||||||
''^src/libflake-tests/url-name\.cc''
|
''^src/libflake-tests/url-name\.cc''
|
||||||
''^src/libstore-test-support/tests/derived-path\.cc''
|
''^src/libstore-test-support/tests/derived-path\.cc''
|
||||||
''^src/libstore-test-support/tests/derived-path\.hh''
|
''^src/libstore-test-support/include/nix/store/tests/derived-path\.hh''
|
||||||
''^src/libstore-test-support/tests/nix_api_store\.hh''
|
''^src/libstore-test-support/include/nix/store/tests/nix_api_store\.hh''
|
||||||
''^src/libstore-test-support/tests/outputs-spec\.cc''
|
''^src/libstore-test-support/tests/outputs-spec\.cc''
|
||||||
''^src/libstore-test-support/tests/outputs-spec\.hh''
|
''^src/libstore-test-support/include/nix/store/tests/outputs-spec\.hh''
|
||||||
''^src/libstore-test-support/tests/path\.cc''
|
''^src/libstore-test-support/path\.cc''
|
||||||
''^src/libstore-test-support/tests/path\.hh''
|
''^src/libstore-test-support/include/nix/store/tests/path\.hh''
|
||||||
''^src/libstore-test-support/tests/protocol\.hh''
|
''^src/libstore-test-support/include/nix/store/tests/protocol\.hh''
|
||||||
''^src/libstore-tests/common-protocol\.cc''
|
''^src/libstore-tests/common-protocol\.cc''
|
||||||
''^src/libstore-tests/content-address\.cc''
|
''^src/libstore-tests/content-address\.cc''
|
||||||
''^src/libstore-tests/derivation\.cc''
|
''^src/libstore-tests/derivation\.cc''
|
||||||
|
@ -518,9 +518,9 @@
|
||||||
''^src/libstore-tests/path\.cc''
|
''^src/libstore-tests/path\.cc''
|
||||||
''^src/libstore-tests/serve-protocol\.cc''
|
''^src/libstore-tests/serve-protocol\.cc''
|
||||||
''^src/libstore-tests/worker-protocol\.cc''
|
''^src/libstore-tests/worker-protocol\.cc''
|
||||||
''^src/libutil-test-support/tests/characterization\.hh''
|
''^src/libutil-test-support/include/nix/util/tests/characterization\.hh''
|
||||||
''^src/libutil-test-support/tests/hash\.cc''
|
''^src/libutil-test-support/hash\.cc''
|
||||||
''^src/libutil-test-support/tests/hash\.hh''
|
''^src/libutil-test-support/include/nix/util/tests/hash\.hh''
|
||||||
''^src/libutil-tests/args\.cc''
|
''^src/libutil-tests/args\.cc''
|
||||||
''^src/libutil-tests/canon-path\.cc''
|
''^src/libutil-tests/canon-path\.cc''
|
||||||
''^src/libutil-tests/chunked-vector\.cc''
|
''^src/libutil-tests/chunked-vector\.cc''
|
||||||
|
|
83
maintainers/link-headers
Executable file
83
maintainers/link-headers
Executable file
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# This script must be run from the root of the Nix repository.
|
||||||
|
#
|
||||||
|
# For include path hygiene, we need to put headers in a separate
|
||||||
|
# directory than sources. But during development, it is nice to paths
|
||||||
|
# that are similar for headers and source files, e.g.
|
||||||
|
# `foo/bar/baz.{cc,hh}`, e.g. for less typing when opening one file, and
|
||||||
|
# then opening the other file.
|
||||||
|
#
|
||||||
|
# This script symlinks the headers next to the source files to
|
||||||
|
# facilitate such a development workflows. It also updates
|
||||||
|
# `.git/info/exclude` so that the symlinks are not accidentally committed
|
||||||
|
# by mistake.
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
# Path to the source directory
|
||||||
|
GIT_TOPLEVEL = Path(
|
||||||
|
subprocess.run(
|
||||||
|
["git", "rev-parse", "--show-toplevel"],
|
||||||
|
text=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
check=True,
|
||||||
|
).stdout.strip()
|
||||||
|
)
|
||||||
|
|
||||||
|
# Get header files from git
|
||||||
|
result = subprocess.run(
|
||||||
|
["git", "-C", str(GIT_TOPLEVEL), "ls-files", "*/include/nix/**.hh"],
|
||||||
|
text=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
check=True,
|
||||||
|
)
|
||||||
|
header_files = result.stdout.strip().split("\n")
|
||||||
|
header_files.sort()
|
||||||
|
|
||||||
|
links = []
|
||||||
|
for file_str in header_files:
|
||||||
|
project_str, header_str = file_str.split("/include/nix/", 1)
|
||||||
|
project = Path(project_str)
|
||||||
|
header = Path(header_str)
|
||||||
|
|
||||||
|
# Reconstruct the full path (relative to SRC_DIR) to the header file.
|
||||||
|
file = project / "include" / "nix" / header
|
||||||
|
|
||||||
|
# The symlink should be created at "project/header", i.e. next to the project's sources.
|
||||||
|
link = project / header
|
||||||
|
|
||||||
|
# Compute a relative path from the symlink's parent directory to the actual header file.
|
||||||
|
relative_source = os.path.relpath(
|
||||||
|
GIT_TOPLEVEL / file, GIT_TOPLEVEL / link.parent
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create the symbolic link.
|
||||||
|
full_link_path = GIT_TOPLEVEL / link
|
||||||
|
full_link_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
if full_link_path.is_symlink():
|
||||||
|
full_link_path.unlink()
|
||||||
|
full_link_path.symlink_to(relative_source)
|
||||||
|
links.append(link)
|
||||||
|
|
||||||
|
# Generate .gitignore file
|
||||||
|
gitignore_path = GIT_TOPLEVEL / ".git" / "info" / "exclude"
|
||||||
|
gitignore_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
with gitignore_path.open("w") as gitignore:
|
||||||
|
gitignore.write("# DO NOT EDIT! Autogenerated\n")
|
||||||
|
gitignore.write(
|
||||||
|
"# Symlinks for headers to be next to sources for development\n"
|
||||||
|
)
|
||||||
|
gitignore.write('# Run "maintainers/link-headers" to regenerate\n\n')
|
||||||
|
gitignore.write('# Run "maintainers/link-headers" to regenerate\n\n')
|
||||||
|
|
||||||
|
for link in links:
|
||||||
|
gitignore.write(f"/{link}\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -109,15 +109,15 @@ for sample in samples:
|
||||||
s = samples[sample]
|
s = samples[sample]
|
||||||
email = s["email"]
|
email = s["email"]
|
||||||
if not email in email_to_handle_cache.values:
|
if not email in email_to_handle_cache.values:
|
||||||
print(f"Querying GitHub API for {s['hash']}, to get handle for {s['email']}")
|
print(f"Querying GitHub API for {s['hash']}, to get handle for {s['email']}", file=sys.stderr)
|
||||||
ghc = get_github_commit(samples[sample])
|
ghc = get_github_commit(samples[sample])
|
||||||
gha = ghc["author"]
|
gha = ghc["author"]
|
||||||
if gha and gha["login"]:
|
if gha and gha["login"]:
|
||||||
handle = gha["login"]
|
handle = gha["login"]
|
||||||
print(f"Handle: {handle}")
|
print(f"Handle: {handle}", file=sys.stderr)
|
||||||
email_to_handle_cache.values[email] = handle
|
email_to_handle_cache.values[email] = handle
|
||||||
else:
|
else:
|
||||||
print(f"Found no handle for {s['email']}")
|
print(f"Found no handle for {s['email']}", file=sys.stderr)
|
||||||
email_to_handle_cache.values[email] = None
|
email_to_handle_cache.values[email] = None
|
||||||
handle = email_to_handle_cache.values[email]
|
handle = email_to_handle_cache.values[email]
|
||||||
if handle is not None:
|
if handle is not None:
|
||||||
|
|
|
@ -10,6 +10,7 @@ add_project_arguments(
|
||||||
'-Werror=suggest-override',
|
'-Werror=suggest-override',
|
||||||
'-Werror=switch',
|
'-Werror=switch',
|
||||||
'-Werror=switch-enum',
|
'-Werror=switch-enum',
|
||||||
|
'-Werror=undef',
|
||||||
'-Werror=unused-result',
|
'-Werror=unused-result',
|
||||||
'-Wignored-qualifiers',
|
'-Wignored-qualifiers',
|
||||||
'-Wimplicit-fallthrough',
|
'-Wimplicit-fallthrough',
|
||||||
|
|
|
@ -16,7 +16,6 @@ import('pkgconfig').generate(
|
||||||
filebase : meson.project_name(),
|
filebase : meson.project_name(),
|
||||||
name : 'Nix',
|
name : 'Nix',
|
||||||
description : 'Nix Package Manager',
|
description : 'Nix Package Manager',
|
||||||
subdirs : ['nix'],
|
|
||||||
extra_cflags : ['-std=c++2a'],
|
extra_cflags : ['-std=c++2a'],
|
||||||
requires : requires_public,
|
requires : requires_public,
|
||||||
requires_private : requires_private,
|
requires_private : requires_private,
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
src,
|
src,
|
||||||
officialRelease,
|
officialRelease,
|
||||||
|
maintainers,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
scope:
|
scope:
|
||||||
|
@ -101,7 +102,7 @@ let
|
||||||
let
|
let
|
||||||
n = lib.length finalScope.patches;
|
n = lib.length finalScope.patches;
|
||||||
in
|
in
|
||||||
if n == 0 then finalAttrs.version else finalAttrs.version + "+${toString n}";
|
if n == 0 then prevAttrs.version else prevAttrs.version + "+${toString n}";
|
||||||
|
|
||||||
# Clear what `derivation` can't/shouldn't serialize; see prevAttrs.workDir.
|
# Clear what `derivation` can't/shouldn't serialize; see prevAttrs.workDir.
|
||||||
fileset = null;
|
fileset = null;
|
||||||
|
@ -171,9 +172,24 @@ let
|
||||||
mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ];
|
mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
miscGoodPractice = finalAttrs: prevAttrs: {
|
nixDefaultsLayer = finalAttrs: prevAttrs: {
|
||||||
strictDeps = prevAttrs.strictDeps or true;
|
strictDeps = prevAttrs.strictDeps or true;
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
pos = builtins.unsafeGetAttrPos "pname" prevAttrs;
|
||||||
|
meta = prevAttrs.meta or { } // {
|
||||||
|
homepage = prevAttrs.meta.homepage or "https://nixos.org/nix";
|
||||||
|
longDescription =
|
||||||
|
prevAttrs.longDescription or ''
|
||||||
|
Nix is a powerful package manager for mainly Linux and other Unix systems that
|
||||||
|
makes package management reliable and reproducible. It provides atomic
|
||||||
|
upgrades and rollbacks, side-by-side installation of multiple versions of
|
||||||
|
a package, multi-user package management and easy setup of build
|
||||||
|
environments.
|
||||||
|
'';
|
||||||
|
license = prevAttrs.meta.license or lib.licenses.lgpl21Plus;
|
||||||
|
maintainers = prevAttrs.meta.maintainers or [ ] ++ scope.maintainers;
|
||||||
|
platforms = prevAttrs.meta.platforms or (lib.platforms.unix ++ lib.platforms.windows);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -193,6 +209,7 @@ in
|
||||||
{
|
{
|
||||||
version = baseVersion + versionSuffix;
|
version = baseVersion + versionSuffix;
|
||||||
inherit versionSuffix;
|
inherit versionSuffix;
|
||||||
|
inherit maintainers;
|
||||||
|
|
||||||
inherit filesetToSource;
|
inherit filesetToSource;
|
||||||
|
|
||||||
|
@ -228,6 +245,10 @@ in
|
||||||
but it does make the build non-granular; all components will use a complete source.
|
but it does make the build non-granular; all components will use a complete source.
|
||||||
|
|
||||||
Packaging expressions will be ignored.
|
Packaging expressions will be ignored.
|
||||||
|
|
||||||
|
Single argument: the source to use.
|
||||||
|
|
||||||
|
See also `appendPatches`
|
||||||
*/
|
*/
|
||||||
overrideSource =
|
overrideSource =
|
||||||
src:
|
src:
|
||||||
|
@ -256,6 +277,7 @@ in
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
resolvePath = p: finalScope.patchedSrc + "/${resolveRelPath p}";
|
resolvePath = p: finalScope.patchedSrc + "/${resolveRelPath p}";
|
||||||
|
filesetToSource = { root, fileset }: finalScope.resolvePath root;
|
||||||
appendPatches = appendPatches finalScope;
|
appendPatches = appendPatches finalScope;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -272,14 +294,14 @@ in
|
||||||
(scope.overrideSource "${./..}").appendPatches patches;
|
(scope.overrideSource "${./..}").appendPatches patches;
|
||||||
|
|
||||||
mkMesonDerivation = mkPackageBuilder [
|
mkMesonDerivation = mkPackageBuilder [
|
||||||
miscGoodPractice
|
nixDefaultsLayer
|
||||||
scope.sourceLayer
|
scope.sourceLayer
|
||||||
setVersionLayer
|
setVersionLayer
|
||||||
mesonLayer
|
mesonLayer
|
||||||
scope.mesonComponentOverrides
|
scope.mesonComponentOverrides
|
||||||
];
|
];
|
||||||
mkMesonExecutable = mkPackageBuilder [
|
mkMesonExecutable = mkPackageBuilder [
|
||||||
miscGoodPractice
|
nixDefaultsLayer
|
||||||
bsdNoLinkAsNeeded
|
bsdNoLinkAsNeeded
|
||||||
scope.sourceLayer
|
scope.sourceLayer
|
||||||
setVersionLayer
|
setVersionLayer
|
||||||
|
@ -288,7 +310,7 @@ in
|
||||||
scope.mesonComponentOverrides
|
scope.mesonComponentOverrides
|
||||||
];
|
];
|
||||||
mkMesonLibrary = mkPackageBuilder [
|
mkMesonLibrary = mkPackageBuilder [
|
||||||
miscGoodPractice
|
nixDefaultsLayer
|
||||||
bsdNoLinkAsNeeded
|
bsdNoLinkAsNeeded
|
||||||
scope.sourceLayer
|
scope.sourceLayer
|
||||||
mesonLayer
|
mesonLayer
|
||||||
|
@ -338,7 +360,7 @@ in
|
||||||
nix-perl-bindings = callPackage ../src/perl/package.nix { };
|
nix-perl-bindings = callPackage ../src/perl/package.nix { };
|
||||||
|
|
||||||
nix-everything = callPackage ../packaging/everything.nix { } // {
|
nix-everything = callPackage ../packaging/everything.nix { } // {
|
||||||
# Note: no `passthru.overrideAllMesonComponents`
|
# Note: no `passthru.overrideAllMesonComponents` etc
|
||||||
# This would propagate into `nix.overrideAttrs f`, but then discard
|
# This would propagate into `nix.overrideAttrs f`, but then discard
|
||||||
# `f` when `.overrideAllMesonComponents` is used.
|
# `f` when `.overrideAllMesonComponents` is used.
|
||||||
# Both "methods" should be views on the same fixpoint overriding mechanism
|
# Both "methods" should be views on the same fixpoint overriding mechanism
|
||||||
|
@ -346,6 +368,8 @@ in
|
||||||
# two-fixpoint solution.
|
# two-fixpoint solution.
|
||||||
/**
|
/**
|
||||||
Apply an extension function (i.e. overlay-shaped) to all component derivations, and return the nix package.
|
Apply an extension function (i.e. overlay-shaped) to all component derivations, and return the nix package.
|
||||||
|
|
||||||
|
Single argument: the extension function to apply (finalAttrs: prevAttrs: { ... })
|
||||||
*/
|
*/
|
||||||
overrideAllMesonComponents = f: (scope.overrideAllMesonComponents f).nix-everything;
|
overrideAllMesonComponents = f: (scope.overrideAllMesonComponents f).nix-everything;
|
||||||
|
|
||||||
|
@ -354,6 +378,10 @@ in
|
||||||
This affects all components.
|
This affects all components.
|
||||||
|
|
||||||
Changes to the packaging expressions will be ignored.
|
Changes to the packaging expressions will be ignored.
|
||||||
|
|
||||||
|
Single argument: list of patches to apply
|
||||||
|
|
||||||
|
See also `overrideSource`
|
||||||
*/
|
*/
|
||||||
appendPatches = ps: (scope.appendPatches ps).nix-everything;
|
appendPatches = ps: (scope.appendPatches ps).nix-everything;
|
||||||
|
|
||||||
|
@ -362,8 +390,26 @@ in
|
||||||
but it does make the build non-granular; all components will use a complete source.
|
but it does make the build non-granular; all components will use a complete source.
|
||||||
|
|
||||||
Packaging expressions will be ignored.
|
Packaging expressions will be ignored.
|
||||||
|
|
||||||
|
Filesets in the packaging expressions will be ignored.
|
||||||
|
|
||||||
|
Single argument: the source to use.
|
||||||
|
|
||||||
|
See also `appendPatches`
|
||||||
*/
|
*/
|
||||||
overrideSource = src: (scope.overrideSource src).nix-everything;
|
overrideSource = src: (scope.overrideSource src).nix-everything;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Override any internals of the Nix package set.
|
||||||
|
|
||||||
|
Single argument: the extension function to apply to the package set (finalScope: prevScope: { ... })
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
overrideScope (finalScope: prevScope: { aws-sdk-cpp = null; })
|
||||||
|
```
|
||||||
|
*/
|
||||||
|
overrideScope = f: (scope.overrideScope f).nix-everything;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,9 @@ let
|
||||||
# Despite the use of the 10.13 deployment target here, the aligned
|
# Despite the use of the 10.13 deployment target here, the aligned
|
||||||
# allocation function Clang uses with this setting actually works
|
# allocation function Clang uses with this setting actually works
|
||||||
# all the way back to 10.6.
|
# all the way back to 10.6.
|
||||||
|
# NOTE: this is not just a version constraint, but a request to make Darwin
|
||||||
|
# provide this version level of support. Removing this minimum version
|
||||||
|
# request will regress the above error.
|
||||||
darwinStdenv = pkgs.overrideSDK prevStdenv { darwinMinVersion = "10.13"; };
|
darwinStdenv = pkgs.overrideSDK prevStdenv { darwinMinVersion = "10.13"; };
|
||||||
|
|
||||||
in
|
in
|
||||||
|
@ -65,39 +68,37 @@ scope: {
|
||||||
installPhase = lib.replaceStrings [ "--without-python" ] [ "" ] old.installPhase;
|
installPhase = lib.replaceStrings [ "--without-python" ] [ "" ] old.installPhase;
|
||||||
});
|
});
|
||||||
|
|
||||||
libgit2 = pkgs.libgit2.overrideAttrs (
|
libgit2 =
|
||||||
attrs:
|
if lib.versionAtLeast pkgs.libgit2.version "1.9.0" then
|
||||||
{
|
pkgs.libgit2
|
||||||
cmakeFlags = attrs.cmakeFlags or [ ] ++ [ "-DUSE_SSH=exec" ];
|
else
|
||||||
}
|
pkgs.libgit2.overrideAttrs (attrs: {
|
||||||
# libgit2: Nixpkgs 24.11 has < 1.9.0, which needs our patches
|
# libgit2: Nixpkgs 24.11 has < 1.9.0, which needs our patches
|
||||||
// lib.optionalAttrs (!lib.versionAtLeast pkgs.libgit2.version "1.9.0") {
|
nativeBuildInputs =
|
||||||
nativeBuildInputs =
|
attrs.nativeBuildInputs or [ ]
|
||||||
attrs.nativeBuildInputs or [ ]
|
# gitMinimal does not build on Windows. See packbuilder patch.
|
||||||
# gitMinimal does not build on Windows. See packbuilder patch.
|
++ lib.optionals (!stdenv.hostPlatform.isWindows) [
|
||||||
++ lib.optionals (!stdenv.hostPlatform.isWindows) [
|
# Needed for `git apply`; see `prePatch`
|
||||||
# Needed for `git apply`; see `prePatch`
|
pkgs.buildPackages.gitMinimal
|
||||||
pkgs.buildPackages.gitMinimal
|
];
|
||||||
];
|
# Only `git apply` can handle git binary patches
|
||||||
# Only `git apply` can handle git binary patches
|
prePatch =
|
||||||
prePatch =
|
attrs.prePatch or ""
|
||||||
attrs.prePatch or ""
|
+ lib.optionalString (!stdenv.hostPlatform.isWindows) ''
|
||||||
+ lib.optionalString (!stdenv.hostPlatform.isWindows) ''
|
patch() {
|
||||||
patch() {
|
git apply
|
||||||
git apply
|
}
|
||||||
}
|
'';
|
||||||
'';
|
patches =
|
||||||
patches =
|
attrs.patches or [ ]
|
||||||
attrs.patches or [ ]
|
++ [
|
||||||
++ [
|
./patches/libgit2-mempack-thin-packfile.patch
|
||||||
./patches/libgit2-mempack-thin-packfile.patch
|
]
|
||||||
]
|
# gitMinimal does not build on Windows, but fortunately this patch only
|
||||||
# gitMinimal does not build on Windows, but fortunately this patch only
|
# impacts interruptibility
|
||||||
# impacts interruptibility
|
++ lib.optionals (!stdenv.hostPlatform.isWindows) [
|
||||||
++ lib.optionals (!stdenv.hostPlatform.isWindows) [
|
# binary patch; see `prePatch`
|
||||||
# binary patch; see `prePatch`
|
./patches/libgit2-packbuilder-callback-interruptible.patch
|
||||||
./patches/libgit2-packbuilder-callback-interruptible.patch
|
];
|
||||||
];
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,10 +72,6 @@ pkgs.nixComponents.nix-util.overrideAttrs (
|
||||||
src = null;
|
src = null;
|
||||||
|
|
||||||
env = {
|
env = {
|
||||||
# Needed for Meson to find Boost.
|
|
||||||
# https://github.com/NixOS/nixpkgs/issues/86131.
|
|
||||||
BOOST_INCLUDEDIR = "${lib.getDev pkgs.nixDependencies.boost}/include";
|
|
||||||
BOOST_LIBRARYDIR = "${lib.getLib pkgs.nixDependencies.boost}/lib";
|
|
||||||
# For `make format`, to work without installing pre-commit
|
# For `make format`, to work without installing pre-commit
|
||||||
_NIX_PRE_COMMIT_HOOKS_CONFIG = "${(pkgs.formats.yaml { }).generate "pre-commit-config.yaml"
|
_NIX_PRE_COMMIT_HOOKS_CONFIG = "${(pkgs.formats.yaml { }).generate "pre-commit-config.yaml"
|
||||||
modular.pre-commit.settings.rawConfig
|
modular.pre-commit.settings.rawConfig
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
lndir,
|
lndir,
|
||||||
buildEnv,
|
buildEnv,
|
||||||
|
|
||||||
|
maintainers,
|
||||||
|
|
||||||
nix-util,
|
nix-util,
|
||||||
nix-util-c,
|
nix-util-c,
|
||||||
nix-util-tests,
|
nix-util-tests,
|
||||||
|
@ -39,6 +41,8 @@
|
||||||
nix-perl-bindings,
|
nix-perl-bindings,
|
||||||
|
|
||||||
testers,
|
testers,
|
||||||
|
|
||||||
|
patchedSrc ? null,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -68,50 +72,8 @@ let
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
|
|
||||||
dev = stdenv.mkDerivation (finalAttrs: {
|
|
||||||
name = "determinate-nix-${nix-cli.version}-dev";
|
|
||||||
pname = "nix";
|
|
||||||
version = nix-cli.version;
|
|
||||||
dontUnpack = true;
|
|
||||||
dontBuild = true;
|
|
||||||
libs = map lib.getDev (lib.attrValues libs);
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/nix-support
|
|
||||||
echo $libs >> $out/nix-support/propagated-build-inputs
|
|
||||||
'';
|
|
||||||
passthru = {
|
|
||||||
tests = {
|
|
||||||
pkg-config = testers.hasPkgConfigModules {
|
|
||||||
package = finalAttrs.finalPackage;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# If we were to fully emulate output selection here, we'd confuse the Nix CLIs,
|
|
||||||
# because they rely on `drvPath`.
|
|
||||||
dev = finalAttrs.finalPackage.out;
|
|
||||||
|
|
||||||
libs = throw "`nix.dev.libs` is not meant to be used; use `nix.libs` instead.";
|
|
||||||
};
|
|
||||||
meta = {
|
|
||||||
mainProgram = "nix";
|
|
||||||
pkgConfigModules = [
|
|
||||||
"nix-cmd"
|
|
||||||
"nix-expr"
|
|
||||||
"nix-expr-c"
|
|
||||||
"nix-fetchers"
|
|
||||||
"nix-flake"
|
|
||||||
"nix-flake-c"
|
|
||||||
"nix-main"
|
|
||||||
"nix-main-c"
|
|
||||||
"nix-store"
|
|
||||||
"nix-store-c"
|
|
||||||
"nix-util"
|
|
||||||
"nix-util-c"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
});
|
|
||||||
devdoc = buildEnv {
|
devdoc = buildEnv {
|
||||||
name = "nix-${nix-cli.version}-devdoc";
|
name = "determinate-nix-${nix-cli.version}-devdoc";
|
||||||
paths = [
|
paths = [
|
||||||
nix-internal-api-docs
|
nix-internal-api-docs
|
||||||
nix-external-api-docs
|
nix-external-api-docs
|
||||||
|
@ -192,10 +154,15 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
devPaths = lib.mapAttrsToList (_k: lib.getDev) finalAttrs.finalPackage.libs;
|
devPaths = lib.mapAttrsToList (_k: lib.getDev) finalAttrs.finalPackage.libs;
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
mkdir -p $out $dev
|
mkdir -p $out $dev/nix-support
|
||||||
|
|
||||||
|
# Custom files
|
||||||
|
echo $libs >> $dev/nix-support/propagated-build-inputs
|
||||||
|
echo ${nix-cli} ${lib.escapeShellArgs devPaths} >> $dev/nix-support/propagated-build-inputs
|
||||||
|
|
||||||
# Merged outputs
|
# Merged outputs
|
||||||
lndir ${nix-cli} $out
|
lndir ${nix-cli} $out
|
||||||
|
|
||||||
for lib in ${lib.escapeShellArgs devPaths}; do
|
for lib in ${lib.escapeShellArgs devPaths}; do
|
||||||
lndir $lib $dev
|
lndir $lib $dev
|
||||||
done
|
done
|
||||||
|
@ -207,6 +174,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit (nix-cli) version;
|
inherit (nix-cli) version;
|
||||||
|
src = patchedSrc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
These are the libraries that are part of the Nix project. They are used
|
These are the libraries that are part of the Nix project. They are used
|
||||||
|
@ -248,7 +216,29 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
meta = {
|
meta = {
|
||||||
mainProgram = "nix";
|
mainProgram = "nix";
|
||||||
description = "The Nix package manager";
|
description = "The Nix package manager";
|
||||||
pkgConfigModules = dev.meta.pkgConfigModules;
|
longDescription = nix-cli.meta.longDescription;
|
||||||
|
homepage = nix-cli.meta.homepage;
|
||||||
|
license = nix-cli.meta.license;
|
||||||
|
maintainers = maintainers;
|
||||||
|
platforms = nix-cli.meta.platforms;
|
||||||
|
outputsToInstall = [
|
||||||
|
"out"
|
||||||
|
"man"
|
||||||
|
];
|
||||||
|
pkgConfigModules = [
|
||||||
|
"nix-cmd"
|
||||||
|
"nix-expr"
|
||||||
|
"nix-expr-c"
|
||||||
|
"nix-fetchers"
|
||||||
|
"nix-flake"
|
||||||
|
"nix-flake-c"
|
||||||
|
"nix-main"
|
||||||
|
"nix-main-c"
|
||||||
|
"nix-store"
|
||||||
|
"nix-store-c"
|
||||||
|
"nix-util"
|
||||||
|
"nix-util-c"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -29,32 +29,86 @@ let
|
||||||
# Technically we could just return `pkgs.nixComponents`, but for Hydra it's
|
# Technically we could just return `pkgs.nixComponents`, but for Hydra it's
|
||||||
# convention to transpose it, and to transpose it efficiently, we need to
|
# convention to transpose it, and to transpose it efficiently, we need to
|
||||||
# enumerate them manually, so that we don't evaluate unnecessary package sets.
|
# enumerate them manually, so that we don't evaluate unnecessary package sets.
|
||||||
forAllPackages = lib.genAttrs [
|
# See listingIsComplete below.
|
||||||
"nix-everything"
|
forAllPackages = forAllPackages' { };
|
||||||
"nix-util"
|
forAllPackages' =
|
||||||
"nix-util-c"
|
{
|
||||||
"nix-util-test-support"
|
enableBindings ? false,
|
||||||
"nix-util-tests"
|
enableDocs ? false, # already have separate attrs for these
|
||||||
"nix-store"
|
}:
|
||||||
"nix-store-c"
|
lib.genAttrs (
|
||||||
"nix-store-test-support"
|
[
|
||||||
"nix-store-tests"
|
"nix-everything"
|
||||||
"nix-fetchers"
|
"nix-util"
|
||||||
"nix-fetchers-tests"
|
"nix-util-c"
|
||||||
"nix-expr"
|
"nix-util-test-support"
|
||||||
"nix-expr-c"
|
"nix-util-tests"
|
||||||
"nix-expr-test-support"
|
"nix-store"
|
||||||
"nix-expr-tests"
|
"nix-store-c"
|
||||||
"nix-flake"
|
"nix-store-test-support"
|
||||||
"nix-flake-tests"
|
"nix-store-tests"
|
||||||
"nix-main"
|
"nix-fetchers"
|
||||||
"nix-main-c"
|
"nix-fetchers-tests"
|
||||||
"nix-cmd"
|
"nix-expr"
|
||||||
"nix-cli"
|
"nix-expr-c"
|
||||||
"nix-functional-tests"
|
"nix-expr-test-support"
|
||||||
];
|
"nix-expr-tests"
|
||||||
|
"nix-flake"
|
||||||
|
"nix-flake-c"
|
||||||
|
"nix-flake-tests"
|
||||||
|
"nix-main"
|
||||||
|
"nix-main-c"
|
||||||
|
"nix-cmd"
|
||||||
|
"nix-cli"
|
||||||
|
"nix-functional-tests"
|
||||||
|
]
|
||||||
|
++ lib.optionals enableBindings [
|
||||||
|
"nix-perl-bindings"
|
||||||
|
]
|
||||||
|
++ lib.optionals enableDocs [
|
||||||
|
"nix-manual"
|
||||||
|
"nix-internal-api-docs"
|
||||||
|
"nix-external-api-docs"
|
||||||
|
]
|
||||||
|
);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
An internal check to make sure our package listing is complete.
|
||||||
|
*/
|
||||||
|
listingIsComplete =
|
||||||
|
let
|
||||||
|
arbitrarySystem = "x86_64-linux";
|
||||||
|
listedPkgs = forAllPackages' {
|
||||||
|
enableBindings = true;
|
||||||
|
enableDocs = true;
|
||||||
|
} (_: null);
|
||||||
|
actualPkgs = lib.concatMapAttrs (
|
||||||
|
k: v: if lib.strings.hasPrefix "nix-" k then { ${k} = null; } else { }
|
||||||
|
) nixpkgsFor.${arbitrarySystem}.native.nixComponents;
|
||||||
|
diff = lib.concatStringsSep "\n" (
|
||||||
|
lib.concatLists (
|
||||||
|
lib.mapAttrsToList (
|
||||||
|
k: _:
|
||||||
|
if (listedPkgs ? ${k}) && !(actualPkgs ? ${k}) then
|
||||||
|
[ "- ${k}: redundant?" ]
|
||||||
|
else if !(listedPkgs ? ${k}) && (actualPkgs ? ${k}) then
|
||||||
|
[ "- ${k}: missing?" ]
|
||||||
|
else
|
||||||
|
[ ]
|
||||||
|
) (listedPkgs // actualPkgs)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
in
|
||||||
|
if listedPkgs == actualPkgs then
|
||||||
|
{ }
|
||||||
|
else
|
||||||
|
throw ''
|
||||||
|
Please update the components list in hydra.nix (or fix this check)
|
||||||
|
Differences:
|
||||||
|
${diff}
|
||||||
|
'';
|
||||||
|
|
||||||
# Binary package for various platforms.
|
# Binary package for various platforms.
|
||||||
build = forAllPackages (
|
build = forAllPackages (
|
||||||
pkgName: forAllSystems (system: nixpkgsFor.${system}.native.nixComponents.${pkgName})
|
pkgName: forAllSystems (system: nixpkgsFor.${system}.native.nixComponents.${pkgName})
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Only execute this file once per shell.
|
# Only execute this file once per shell.
|
||||||
# This file is tested by tests/installer/default.nix.
|
# This file is tested by tests/installer/default.nix.
|
||||||
if [ -n "${__ETC_PROFILE_NIX_SOURCED:-}" ]; then return; fi
|
if [ -n "${__ETC_PROFILE_NIX_SOURCED:-}" ]; then return; fi
|
||||||
__ETC_PROFILE_NIX_SOURCED=1
|
export __ETC_PROFILE_NIX_SOURCED=1
|
||||||
|
|
||||||
NIX_LINK=$HOME/.nix-profile
|
NIX_LINK=$HOME/.nix-profile
|
||||||
if [ -n "${XDG_STATE_HOME-}" ]; then
|
if [ -n "${XDG_STATE_HOME-}" ]; then
|
||||||
|
|
|
@ -5,23 +5,23 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#if __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "machines.hh"
|
#include "nix/store/machines.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "plugin.hh"
|
#include "nix/main/plugin.hh"
|
||||||
#include "pathlocks.hh"
|
#include "nix/store/pathlocks.hh"
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "serialise.hh"
|
#include "nix/util/serialise.hh"
|
||||||
#include "build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "strings.hh"
|
#include "nix/util/strings.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "local-store.hh"
|
#include "nix/store/local-store.hh"
|
||||||
#include "legacy.hh"
|
#include "nix/cmd/legacy.hh"
|
||||||
#include "experimental-features.hh"
|
#include "nix/util/experimental-features.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
using std::cin;
|
using std::cin;
|
||||||
|
@ -225,7 +225,7 @@ static int main_build_remote(int argc, char * * argv)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __APPLE__
|
#ifdef __APPLE__
|
||||||
futimes(bestSlotLock.get(), NULL);
|
futimes(bestSlotLock.get(), NULL);
|
||||||
#else
|
#else
|
||||||
futimens(bestSlotLock.get(), NULL);
|
futimens(bestSlotLock.get(), NULL);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "built-path.hh"
|
#include "nix/cmd/built-path.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "comparator.hh"
|
#include "nix/util/comparator.hh"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "command-installable-value.hh"
|
#include "nix/cmd/command-installable-value.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
#include "markdown.hh"
|
#include "nix/cmd/markdown.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "local-fs-store.hh"
|
#include "nix/store/local-fs-store.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "nixexpr.hh"
|
#include "nix/expr/nixexpr.hh"
|
||||||
#include "profiles.hh"
|
#include "nix/store/profiles.hh"
|
||||||
#include "repl.hh"
|
#include "nix/cmd/repl.hh"
|
||||||
#include "strings.hh"
|
#include "nix/util/strings.hh"
|
||||||
#include "environment-variables.hh"
|
#include "nix/util/environment-variables.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
#include "fetch-settings.hh"
|
#include "nix/fetchers/fetch-settings.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "config-global.hh"
|
#include "nix/util/config-global.hh"
|
||||||
#include "filetransfer.hh"
|
#include "nix/store/filetransfer.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "fetchers.hh"
|
#include "nix/fetchers/fetchers.hh"
|
||||||
#include "registry.hh"
|
#include "nix/fetchers/registry.hh"
|
||||||
#include "flake/flakeref.hh"
|
#include "nix/flake/flakeref.hh"
|
||||||
#include "flake/settings.hh"
|
#include "nix/flake/settings.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
#include "tarball.hh"
|
#include "nix/fetchers/tarball.hh"
|
||||||
#include "fetch-to-store.hh"
|
#include "nix/fetchers/fetch-to-store.hh"
|
||||||
#include "compatibility-settings.hh"
|
#include "nix/cmd/compatibility-settings.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "editor-for.hh"
|
#include "nix/cmd/editor-for.hh"
|
||||||
#include "environment-variables.hh"
|
#include "nix/util/environment-variables.hh"
|
||||||
#include "source-path.hh"
|
#include "nix/util/source-path.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "derived-path.hh"
|
#include "nix/store/derived-path.hh"
|
||||||
#include "realisation.hh"
|
#include "nix/store/realisation.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "installable-value.hh"
|
#include "nix/cmd/installable-value.hh"
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "installable-value.hh"
|
#include "nix/cmd/installable-value.hh"
|
||||||
#include "args.hh"
|
#include "nix/util/args.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "path.hh"
|
#include "nix/store/path.hh"
|
||||||
#include "flake/lockfile.hh"
|
#include "nix/flake/lockfile.hh"
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "args.hh"
|
#include "nix/util/args.hh"
|
||||||
#include "canon-path.hh"
|
#include "nix/util/canon-path.hh"
|
||||||
#include "common-args.hh"
|
#include "nix/main/common-args.hh"
|
||||||
#include "search-path.hh"
|
#include "nix/expr/search-path.hh"
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "config.hh"
|
#include "nix/util/configuration.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
struct CompatibilitySettings : public Config
|
struct CompatibilitySettings : public Config
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "types.hh"
|
#include "nix/util/types.hh"
|
||||||
#include "source-path.hh"
|
#include "nix/util/source-path.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "installable-value.hh"
|
#include "nix/cmd/installable-value.hh"
|
||||||
#include "outputs-spec.hh"
|
#include "nix/store/outputs-spec.hh"
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
#include "attr-path.hh"
|
#include "nix/expr/attr-path.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "get-drvs.hh"
|
#include "nix/expr/get-drvs.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "eval-cache.hh"
|
#include "nix/expr/eval-cache.hh"
|
||||||
#include "url.hh"
|
#include "nix/util/url.hh"
|
||||||
#include "registry.hh"
|
#include "nix/fetchers/registry.hh"
|
||||||
#include "build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
|
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <queue>
|
#include <queue>
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "installables.hh"
|
#include "nix/cmd/installables.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "installable-value.hh"
|
#include "nix/cmd/installable-value.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "installables.hh"
|
#include "nix/cmd/installables.hh"
|
||||||
#include "flake/flake.hh"
|
#include "nix/flake/flake.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "path.hh"
|
#include "nix/store/path.hh"
|
||||||
#include "outputs-spec.hh"
|
#include "nix/store/outputs-spec.hh"
|
||||||
#include "derived-path.hh"
|
#include "nix/store/derived-path.hh"
|
||||||
#include "built-path.hh"
|
#include "nix/cmd/built-path.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
23
src/libcmd/include/nix/cmd/meson.build
Normal file
23
src/libcmd/include/nix/cmd/meson.build
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Public headers directory
|
||||||
|
|
||||||
|
include_dirs = [include_directories('../..')]
|
||||||
|
|
||||||
|
headers = files(
|
||||||
|
'built-path.hh',
|
||||||
|
'command-installable-value.hh',
|
||||||
|
'command.hh',
|
||||||
|
'common-eval-args.hh',
|
||||||
|
'compatibility-settings.hh',
|
||||||
|
'editor-for.hh',
|
||||||
|
'installable-attr-path.hh',
|
||||||
|
'installable-derived-path.hh',
|
||||||
|
'installable-flake.hh',
|
||||||
|
'installable-value.hh',
|
||||||
|
'installables.hh',
|
||||||
|
'legacy.hh',
|
||||||
|
'markdown.hh',
|
||||||
|
'misc-store-flags.hh',
|
||||||
|
'network-proxy.hh',
|
||||||
|
'repl-interacter.hh',
|
||||||
|
'repl.hh',
|
||||||
|
)
|
|
@ -1,5 +1,5 @@
|
||||||
#include "args.hh"
|
#include "nix/util/args.hh"
|
||||||
#include "content-address.hh"
|
#include "nix/store/content-address.hh"
|
||||||
|
|
||||||
namespace nix::flag {
|
namespace nix::flag {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "types.hh"
|
#include "nix/util/types.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
/// @file
|
/// @file
|
||||||
|
|
||||||
#include "finally.hh"
|
#include "nix/util/finally.hh"
|
||||||
#include "types.hh"
|
#include "nix/util/types.hh"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "installable-attr-path.hh"
|
#include "nix/cmd/installable-attr-path.hh"
|
||||||
#include "outputs-spec.hh"
|
#include "nix/store/outputs-spec.hh"
|
||||||
#include "util.hh"
|
#include "nix/util/util.hh"
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
#include "attr-path.hh"
|
#include "nix/expr/attr-path.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "get-drvs.hh"
|
#include "nix/expr/get-drvs.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "flake/flake.hh"
|
#include "nix/flake/flake.hh"
|
||||||
#include "eval-cache.hh"
|
#include "nix/expr/eval-cache.hh"
|
||||||
#include "url.hh"
|
#include "nix/util/url.hh"
|
||||||
#include "registry.hh"
|
#include "nix/fetchers/registry.hh"
|
||||||
#include "build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
|
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "installable-derived-path.hh"
|
#include "nix/cmd/installable-derived-path.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "installable-flake.hh"
|
#include "nix/cmd/installable-flake.hh"
|
||||||
#include "installable-derived-path.hh"
|
#include "nix/cmd/installable-derived-path.hh"
|
||||||
#include "outputs-spec.hh"
|
#include "nix/store/outputs-spec.hh"
|
||||||
#include "util.hh"
|
#include "nix/util/util.hh"
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
#include "attr-path.hh"
|
#include "nix/expr/attr-path.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "get-drvs.hh"
|
#include "nix/expr/get-drvs.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "flake/flake.hh"
|
#include "nix/flake/flake.hh"
|
||||||
#include "eval-cache.hh"
|
#include "nix/expr/eval-cache.hh"
|
||||||
#include "url.hh"
|
#include "nix/util/url.hh"
|
||||||
#include "registry.hh"
|
#include "nix/fetchers/registry.hh"
|
||||||
#include "build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
|
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "installable-value.hh"
|
#include "nix/cmd/installable-value.hh"
|
||||||
#include "eval-cache.hh"
|
#include "nix/expr/eval-cache.hh"
|
||||||
#include "fetch-to-store.hh"
|
#include "nix/fetchers/fetch-to-store.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,33 @@
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "installables.hh"
|
#include "nix/cmd/installables.hh"
|
||||||
#include "installable-derived-path.hh"
|
#include "nix/cmd/installable-derived-path.hh"
|
||||||
#include "installable-attr-path.hh"
|
#include "nix/cmd/installable-attr-path.hh"
|
||||||
#include "installable-flake.hh"
|
#include "nix/cmd/installable-flake.hh"
|
||||||
#include "outputs-spec.hh"
|
#include "nix/store/outputs-spec.hh"
|
||||||
#include "users.hh"
|
#include "nix/util/users.hh"
|
||||||
#include "util.hh"
|
#include "nix/util/util.hh"
|
||||||
#include "command.hh"
|
#include "nix/cmd/command.hh"
|
||||||
#include "attr-path.hh"
|
#include "nix/expr/attr-path.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "get-drvs.hh"
|
#include "nix/expr/get-drvs.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "flake/flake.hh"
|
#include "nix/flake/flake.hh"
|
||||||
#include "eval-cache.hh"
|
#include "nix/expr/eval-cache.hh"
|
||||||
#include "url.hh"
|
#include "nix/util/url.hh"
|
||||||
#include "registry.hh"
|
#include "nix/fetchers/registry.hh"
|
||||||
#include "build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
|
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include "strings-inline.hh"
|
#include "nix/util/strings-inline.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "legacy.hh"
|
#include "nix/cmd/legacy.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
#include "markdown.hh"
|
#include "nix/cmd/markdown.hh"
|
||||||
#include "environment-variables.hh"
|
#include "nix/util/environment-variables.hh"
|
||||||
#include "error.hh"
|
#include "nix/util/error.hh"
|
||||||
#include "finally.hh"
|
#include "nix/util/finally.hh"
|
||||||
#include "terminal.hh"
|
#include "nix/util/terminal.hh"
|
||||||
|
|
||||||
|
#include "cmd-config-private.hh"
|
||||||
|
|
||||||
#if HAVE_LOWDOWN
|
#if HAVE_LOWDOWN
|
||||||
# include <sys/queue.h>
|
# include <sys/queue.h>
|
||||||
|
|
|
@ -44,30 +44,18 @@ if readline_flavor == 'editline'
|
||||||
elif readline_flavor == 'readline'
|
elif readline_flavor == 'readline'
|
||||||
readline = dependency('readline')
|
readline = dependency('readline')
|
||||||
deps_private += readline
|
deps_private += readline
|
||||||
configdata.set(
|
|
||||||
'USE_READLINE',
|
|
||||||
1,
|
|
||||||
description: 'Use readline instead of editline',
|
|
||||||
)
|
|
||||||
else
|
else
|
||||||
error('illegal editline flavor', readline_flavor)
|
error('illegal editline flavor', readline_flavor)
|
||||||
endif
|
endif
|
||||||
|
configdata.set(
|
||||||
config_h = configure_file(
|
'USE_READLINE',
|
||||||
configuration : configdata,
|
(readline_flavor == 'readline').to_int(),
|
||||||
output : 'config-cmd.hh',
|
description: 'Use readline instead of editline',
|
||||||
)
|
)
|
||||||
|
|
||||||
add_project_arguments(
|
config_priv_h = configure_file(
|
||||||
# TODO(Qyriad): Yes this is how the autoconf+Make system did it.
|
configuration : configdata,
|
||||||
# It would be nice for our headers to be idempotent instead.
|
output : 'cmd-config-private.hh',
|
||||||
'-include', 'config-util.hh',
|
|
||||||
'-include', 'config-store.hh',
|
|
||||||
# '-include', 'config-fetchers.h',
|
|
||||||
'-include', 'config-expr.hh',
|
|
||||||
'-include', 'config-main.hh',
|
|
||||||
'-include', 'config-cmd.hh',
|
|
||||||
language : 'cpp',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
subdir('nix-meson-build-support/common')
|
subdir('nix-meson-build-support/common')
|
||||||
|
@ -91,37 +79,23 @@ sources = files(
|
||||||
'repl.cc',
|
'repl.cc',
|
||||||
)
|
)
|
||||||
|
|
||||||
include_dirs = [include_directories('.')]
|
subdir('include/nix/cmd')
|
||||||
|
|
||||||
headers = [config_h] + files(
|
subdir('nix-meson-build-support/export-all-symbols')
|
||||||
'built-path.hh',
|
subdir('nix-meson-build-support/windows-version')
|
||||||
'command-installable-value.hh',
|
|
||||||
'command.hh',
|
|
||||||
'common-eval-args.hh',
|
|
||||||
'compatibility-settings.hh',
|
|
||||||
'editor-for.hh',
|
|
||||||
'installable-attr-path.hh',
|
|
||||||
'installable-derived-path.hh',
|
|
||||||
'installable-flake.hh',
|
|
||||||
'installable-value.hh',
|
|
||||||
'installables.hh',
|
|
||||||
'legacy.hh',
|
|
||||||
'markdown.hh',
|
|
||||||
'misc-store-flags.hh',
|
|
||||||
'network-proxy.hh',
|
|
||||||
'repl-interacter.hh',
|
|
||||||
'repl.hh',
|
|
||||||
)
|
|
||||||
|
|
||||||
this_library = library(
|
this_library = library(
|
||||||
'nixcmd',
|
'nixcmd',
|
||||||
sources,
|
sources,
|
||||||
|
config_priv_h,
|
||||||
dependencies : deps_public + deps_private + deps_other,
|
dependencies : deps_public + deps_private + deps_other,
|
||||||
|
include_directories : include_dirs,
|
||||||
|
link_args: linker_export_flags,
|
||||||
prelink : true, # For C++ static initializers
|
prelink : true, # For C++ static initializers
|
||||||
install : true,
|
install : true,
|
||||||
)
|
)
|
||||||
|
|
||||||
install_headers(headers, subdir : 'nix', preserve_path : true)
|
install_headers(headers, subdir : 'nix/cmd', preserve_path : true)
|
||||||
|
|
||||||
libraries_private = []
|
libraries_private = []
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "misc-store-flags.hh"
|
#include "nix/cmd/misc-store-flags.hh"
|
||||||
|
|
||||||
namespace nix::flag
|
namespace nix::flag
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "network-proxy.hh"
|
#include "nix/cmd/network-proxy.hh"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "environment-variables.hh"
|
#include "nix/util/environment-variables.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ mkMesonLibrary (finalAttrs: {
|
||||||
./.version
|
./.version
|
||||||
./meson.build
|
./meson.build
|
||||||
./meson.options
|
./meson.options
|
||||||
|
./include/nix/cmd/meson.build
|
||||||
(fileset.fileFilter (file: file.hasExt "cc") ./.)
|
(fileset.fileFilter (file: file.hasExt "cc") ./.)
|
||||||
(fileset.fileFilter (file: file.hasExt "hh") ./.)
|
(fileset.fileFilter (file: file.hasExt "hh") ./.)
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
#include "cmd-config-private.hh"
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
#ifdef USE_READLINE
|
#if USE_READLINE
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#else
|
#else
|
||||||
|
@ -14,12 +16,12 @@ extern "C" {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "signals.hh"
|
#include "nix/util/signals.hh"
|
||||||
#include "finally.hh"
|
#include "nix/util/finally.hh"
|
||||||
#include "repl-interacter.hh"
|
#include "nix/cmd/repl-interacter.hh"
|
||||||
#include "file-system.hh"
|
#include "nix/util/file-system.hh"
|
||||||
#include "repl.hh"
|
#include "nix/cmd/repl.hh"
|
||||||
#include "environment-variables.hh"
|
#include "nix/util/environment-variables.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -35,7 +37,7 @@ void sigintHandler(int signo)
|
||||||
|
|
||||||
static detail::ReplCompleterMixin * curRepl; // ugly
|
static detail::ReplCompleterMixin * curRepl; // ugly
|
||||||
|
|
||||||
#ifndef USE_READLINE
|
#if !USE_READLINE
|
||||||
static char * completionCallback(char * s, int * match)
|
static char * completionCallback(char * s, int * match)
|
||||||
{
|
{
|
||||||
auto possible = curRepl->completePrefix(s);
|
auto possible = curRepl->completePrefix(s);
|
||||||
|
@ -113,14 +115,14 @@ ReadlineLikeInteracter::Guard ReadlineLikeInteracter::init(detail::ReplCompleter
|
||||||
} catch (SystemError & e) {
|
} catch (SystemError & e) {
|
||||||
logWarning(e.info());
|
logWarning(e.info());
|
||||||
}
|
}
|
||||||
#ifndef USE_READLINE
|
#if !USE_READLINE
|
||||||
el_hist_size = 1000;
|
el_hist_size = 1000;
|
||||||
#endif
|
#endif
|
||||||
read_history(historyFile.c_str());
|
read_history(historyFile.c_str());
|
||||||
auto oldRepl = curRepl;
|
auto oldRepl = curRepl;
|
||||||
curRepl = repl;
|
curRepl = repl;
|
||||||
Guard restoreRepl([oldRepl] { curRepl = oldRepl; });
|
Guard restoreRepl([oldRepl] { curRepl = oldRepl; });
|
||||||
#ifndef USE_READLINE
|
#if !USE_READLINE
|
||||||
rl_set_complete_func(completionCallback);
|
rl_set_complete_func(completionCallback);
|
||||||
rl_set_list_possib_func(listPossibleCallback);
|
rl_set_list_possib_func(listPossibleCallback);
|
||||||
#endif
|
#endif
|
||||||
|
@ -183,7 +185,7 @@ bool ReadlineLikeInteracter::getLine(std::string & input, ReplPromptType promptT
|
||||||
// quite useful for reading the test output, so we add it here.
|
// quite useful for reading the test output, so we add it here.
|
||||||
if (auto e = getEnv("_NIX_TEST_REPL_ECHO"); s && e && *e == "1")
|
if (auto e = getEnv("_NIX_TEST_REPL_ECHO"); s && e && *e == "1")
|
||||||
{
|
{
|
||||||
#ifndef USE_READLINE
|
#if !USE_READLINE
|
||||||
// This is probably not right for multi-line input, but we don't use that
|
// This is probably not right for multi-line input, but we don't use that
|
||||||
// in the characterisation tests, so it's fine.
|
// in the characterisation tests, so it's fine.
|
||||||
std::cout << promptForType(promptType) << s << std::endl;
|
std::cout << promptForType(promptType) << s << std::endl;
|
||||||
|
|
|
@ -2,34 +2,34 @@
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include "error.hh"
|
#include "nix/util/error.hh"
|
||||||
#include "repl-interacter.hh"
|
#include "nix/cmd/repl-interacter.hh"
|
||||||
#include "repl.hh"
|
#include "nix/cmd/repl.hh"
|
||||||
|
|
||||||
#include "ansicolor.hh"
|
#include "nix/util/ansicolor.hh"
|
||||||
#include "shared.hh"
|
#include "nix/main/shared.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "attr-path.hh"
|
#include "nix/expr/attr-path.hh"
|
||||||
#include "signals.hh"
|
#include "nix/util/signals.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "log-store.hh"
|
#include "nix/store/log-store.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "nix/cmd/common-eval-args.hh"
|
||||||
#include "get-drvs.hh"
|
#include "nix/expr/get-drvs.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "flake/flake.hh"
|
#include "nix/flake/flake.hh"
|
||||||
#include "flake/lockfile.hh"
|
#include "nix/flake/lockfile.hh"
|
||||||
#include "users.hh"
|
#include "nix/util/users.hh"
|
||||||
#include "editor-for.hh"
|
#include "nix/cmd/editor-for.hh"
|
||||||
#include "finally.hh"
|
#include "nix/util/finally.hh"
|
||||||
#include "markdown.hh"
|
#include "nix/cmd/markdown.hh"
|
||||||
#include "local-fs-store.hh"
|
#include "nix/store/local-fs-store.hh"
|
||||||
#include "print.hh"
|
#include "nix/expr/print.hh"
|
||||||
#include "ref.hh"
|
#include "nix/util/ref.hh"
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
|
|
||||||
#include "strings.hh"
|
#include "nix/util/strings.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ std::string removeWhitespace(std::string s)
|
||||||
|
|
||||||
|
|
||||||
NixRepl::NixRepl(const LookupPath & lookupPath, nix::ref<Store> store, ref<EvalState> state,
|
NixRepl::NixRepl(const LookupPath & lookupPath, nix::ref<Store> store, ref<EvalState> state,
|
||||||
std::function<NixRepl::AnnotatedValues()> getValues, RunNix * runNix = nullptr)
|
std::function<NixRepl::AnnotatedValues()> getValues, RunNix * runNix)
|
||||||
: AbstractNixRepl(state)
|
: AbstractNixRepl(state)
|
||||||
, debugTraceIndex(0)
|
, debugTraceIndex(0)
|
||||||
, getValues(getValues)
|
, getValues(getValues)
|
||||||
|
@ -839,9 +839,10 @@ std::unique_ptr<AbstractNixRepl> AbstractNixRepl::create(
|
||||||
{
|
{
|
||||||
return std::make_unique<NixRepl>(
|
return std::make_unique<NixRepl>(
|
||||||
lookupPath,
|
lookupPath,
|
||||||
openStore(),
|
std::move(store),
|
||||||
state,
|
state,
|
||||||
getValues
|
getValues,
|
||||||
|
runNix
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -859,7 +860,8 @@ ReplExitStatus AbstractNixRepl::runSimple(
|
||||||
lookupPath,
|
lookupPath,
|
||||||
openStore(),
|
openStore(),
|
||||||
evalState,
|
evalState,
|
||||||
getValues
|
getValues,
|
||||||
|
/*runNix=*/nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
repl->initEnv();
|
repl->initEnv();
|
||||||
|
|
|
@ -14,8 +14,6 @@ cxx = meson.get_compiler('cpp')
|
||||||
|
|
||||||
subdir('nix-meson-build-support/deps-lists')
|
subdir('nix-meson-build-support/deps-lists')
|
||||||
|
|
||||||
configdata = configuration_data()
|
|
||||||
|
|
||||||
deps_private_maybe_subproject = [
|
deps_private_maybe_subproject = [
|
||||||
dependency('nix-util'),
|
dependency('nix-util'),
|
||||||
dependency('nix-store'),
|
dependency('nix-store'),
|
||||||
|
@ -27,30 +25,6 @@ deps_public_maybe_subproject = [
|
||||||
]
|
]
|
||||||
subdir('nix-meson-build-support/subprojects')
|
subdir('nix-meson-build-support/subprojects')
|
||||||
|
|
||||||
# TODO rename, because it will conflict with downstream projects
|
|
||||||
configdata.set_quoted('PACKAGE_VERSION', meson.project_version())
|
|
||||||
|
|
||||||
config_h = configure_file(
|
|
||||||
configuration : configdata,
|
|
||||||
output : 'config-expr.h',
|
|
||||||
)
|
|
||||||
|
|
||||||
add_project_arguments(
|
|
||||||
# TODO(Qyriad): Yes this is how the autoconf+Make system did it.
|
|
||||||
# It would be nice for our headers to be idempotent instead.
|
|
||||||
|
|
||||||
# From C++ libraries, only for internals
|
|
||||||
'-include', 'config-util.hh',
|
|
||||||
'-include', 'config-store.hh',
|
|
||||||
'-include', 'config-expr.hh',
|
|
||||||
|
|
||||||
# From C libraries, for our public, installed headers too
|
|
||||||
'-include', 'config-util.h',
|
|
||||||
'-include', 'config-store.h',
|
|
||||||
'-include', 'config-expr.h',
|
|
||||||
language : 'cpp',
|
|
||||||
)
|
|
||||||
|
|
||||||
subdir('nix-meson-build-support/common')
|
subdir('nix-meson-build-support/common')
|
||||||
|
|
||||||
sources = files(
|
sources = files(
|
||||||
|
@ -61,7 +35,7 @@ sources = files(
|
||||||
|
|
||||||
include_dirs = [include_directories('.')]
|
include_dirs = [include_directories('.')]
|
||||||
|
|
||||||
headers = [config_h] + files(
|
headers = files(
|
||||||
'nix_api_expr.h',
|
'nix_api_expr.h',
|
||||||
'nix_api_external.h',
|
'nix_api_external.h',
|
||||||
'nix_api_value.h',
|
'nix_api_value.h',
|
||||||
|
@ -83,7 +57,7 @@ this_library = library(
|
||||||
install : true,
|
install : true,
|
||||||
)
|
)
|
||||||
|
|
||||||
install_headers(headers, subdir : 'nix', preserve_path : true)
|
install_headers(headers, preserve_path : true)
|
||||||
|
|
||||||
libraries_private = []
|
libraries_private = []
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-gc.hh"
|
#include "nix/expr/eval-gc.hh"
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "ref.hh"
|
#include "nix/util/ref.hh"
|
||||||
|
|
||||||
#include "nix_api_expr.h"
|
#include "nix_api_expr.h"
|
||||||
#include "nix_api_expr_internal.h"
|
#include "nix_api_expr_internal.h"
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
#include "nix_api_util.h"
|
#include "nix_api_util.h"
|
||||||
#include "nix_api_util_internal.h"
|
#include "nix_api_util_internal.h"
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
# include <mutex>
|
# include <mutex>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ void nix_state_free(EvalState * state)
|
||||||
delete state;
|
delete state;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
std::unordered_map<
|
std::unordered_map<
|
||||||
const void *,
|
const void *,
|
||||||
unsigned int,
|
unsigned int,
|
||||||
|
@ -283,7 +283,7 @@ nix_err nix_value_decref(nix_c_context * context, nix_value *x)
|
||||||
|
|
||||||
void nix_gc_register_finalizer(void * obj, void * cd, void (*finalizer)(void * obj, void * cd))
|
void nix_gc_register_finalizer(void * obj, void * cd, void (*finalizer)(void * obj, void * cd))
|
||||||
{
|
{
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
GC_REGISTER_FINALIZER(obj, finalizer, cd, 0, 0);
|
GC_REGISTER_FINALIZER(obj, finalizer, cd, 0, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
#ifndef NIX_API_EXPR_INTERNAL_H
|
#ifndef NIX_API_EXPR_INTERNAL_H
|
||||||
#define NIX_API_EXPR_INTERNAL_H
|
#define NIX_API_EXPR_INTERNAL_H
|
||||||
|
|
||||||
#include "fetch-settings.hh"
|
#include "nix/fetchers/fetch-settings.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "attr-set.hh"
|
#include "nix/expr/attr-set.hh"
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "search-path.hh"
|
#include "nix/expr/search-path.hh"
|
||||||
|
|
||||||
struct nix_eval_state_builder
|
struct nix_eval_state_builder
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "attr-set.hh"
|
#include "nix/expr/attr-set.hh"
|
||||||
#include "config.hh"
|
#include "nix/util/configuration.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
|
|
||||||
#include "nix_api_expr.h"
|
#include "nix_api_expr.h"
|
||||||
#include "nix_api_expr_internal.h"
|
#include "nix_api_expr_internal.h"
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#include "nix_api_util.h"
|
#include "nix_api_util.h"
|
||||||
#include "nix_api_util_internal.h"
|
#include "nix_api_util_internal.h"
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "value/context.hh"
|
#include "nix/expr/value/context.hh"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ ExternalValue * nix_create_external_value(nix_c_context * context, NixCExternalV
|
||||||
context->last_err_code = NIX_OK;
|
context->last_err_code = NIX_OK;
|
||||||
try {
|
try {
|
||||||
auto ret = new
|
auto ret = new
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
(GC)
|
(GC)
|
||||||
#endif
|
#endif
|
||||||
NixCExternalValue(*desc, v);
|
NixCExternalValue(*desc, v);
|
||||||
|
|
|
@ -12,9 +12,10 @@
|
||||||
#include "nix_api_expr.h"
|
#include "nix_api_expr.h"
|
||||||
#include "nix_api_util.h"
|
#include "nix_api_util.h"
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "stdbool.h"
|
|
||||||
#include "stddef.h"
|
#include <stdbool.h>
|
||||||
#include "stdint.h"
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#include "attr-set.hh"
|
#include "nix/expr/attr-set.hh"
|
||||||
#include "config.hh"
|
#include "nix/util/configuration.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "path.hh"
|
#include "nix/store/path.hh"
|
||||||
#include "primops.hh"
|
#include "nix/expr/primops.hh"
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
|
|
||||||
#include "nix_api_expr.h"
|
#include "nix_api_expr.h"
|
||||||
#include "nix_api_expr_internal.h"
|
#include "nix_api_expr_internal.h"
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
#include "nix_api_util_internal.h"
|
#include "nix_api_util_internal.h"
|
||||||
#include "nix_api_store_internal.h"
|
#include "nix_api_store_internal.h"
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "value/context.hh"
|
#include "nix/expr/value/context.hh"
|
||||||
|
|
||||||
// Internal helper functions to check [in] and [out] `Value *` parameters
|
// Internal helper functions to check [in] and [out] `Value *` parameters
|
||||||
static const nix::Value & check_value_not_null(const nix_value * value)
|
static const nix::Value & check_value_not_null(const nix_value * value)
|
||||||
|
@ -125,7 +125,7 @@ PrimOp * nix_alloc_primop(
|
||||||
try {
|
try {
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
auto p = new
|
auto p = new
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
(GC)
|
(GC)
|
||||||
#endif
|
#endif
|
||||||
nix::PrimOp{
|
nix::PrimOp{
|
||||||
|
@ -497,7 +497,7 @@ ListBuilder * nix_make_list_builder(nix_c_context * context, EvalState * state,
|
||||||
try {
|
try {
|
||||||
auto builder = state->state.buildList(capacity);
|
auto builder = state->state.buildList(capacity);
|
||||||
return new
|
return new
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
(NoGC)
|
(NoGC)
|
||||||
#endif
|
#endif
|
||||||
ListBuilder{std::move(builder)};
|
ListBuilder{std::move(builder)};
|
||||||
|
@ -519,7 +519,7 @@ nix_list_builder_insert(nix_c_context * context, ListBuilder * list_builder, uns
|
||||||
|
|
||||||
void nix_list_builder_free(ListBuilder * list_builder)
|
void nix_list_builder_free(ListBuilder * list_builder)
|
||||||
{
|
{
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
GC_FREE(list_builder);
|
GC_FREE(list_builder);
|
||||||
#else
|
#else
|
||||||
delete list_builder;
|
delete list_builder;
|
||||||
|
@ -578,7 +578,7 @@ BindingsBuilder * nix_make_bindings_builder(nix_c_context * context, EvalState *
|
||||||
try {
|
try {
|
||||||
auto bb = state->state.buildBindings(capacity);
|
auto bb = state->state.buildBindings(capacity);
|
||||||
return new
|
return new
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
(NoGC)
|
(NoGC)
|
||||||
#endif
|
#endif
|
||||||
BindingsBuilder{std::move(bb)};
|
BindingsBuilder{std::move(bb)};
|
||||||
|
@ -600,7 +600,7 @@ nix_err nix_bindings_builder_insert(nix_c_context * context, BindingsBuilder * b
|
||||||
|
|
||||||
void nix_bindings_builder_free(BindingsBuilder * bb)
|
void nix_bindings_builder_free(BindingsBuilder * bb)
|
||||||
{
|
{
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
GC_FREE((nix::BindingsBuilder *) bb);
|
GC_FREE((nix::BindingsBuilder *) bb);
|
||||||
#else
|
#else
|
||||||
delete (nix::BindingsBuilder *) bb;
|
delete (nix::BindingsBuilder *) bb;
|
||||||
|
|
|
@ -10,9 +10,10 @@
|
||||||
|
|
||||||
#include "nix_api_util.h"
|
#include "nix_api_util.h"
|
||||||
#include "nix_api_store.h"
|
#include "nix_api_store.h"
|
||||||
#include "stdbool.h"
|
|
||||||
#include "stddef.h"
|
#include <stdbool.h>
|
||||||
#include "stdint.h"
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -4,16 +4,16 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
|
|
||||||
#include "fetch-settings.hh"
|
#include "nix/fetchers/fetch-settings.hh"
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
#include "nixexpr.hh"
|
#include "nix/expr/nixexpr.hh"
|
||||||
#include "nixexpr.hh"
|
#include "nix/expr/nixexpr.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-gc.hh"
|
#include "nix/expr/eval-gc.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
|
|
||||||
#include "tests/libstore.hh"
|
#include "nix/store/tests/libstore.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
class LibExprTest : public LibStoreTest {
|
class LibExprTest : public LibStoreTest {
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Public headers directory
|
||||||
|
|
||||||
|
include_dirs = [include_directories('../../..')]
|
||||||
|
|
||||||
|
headers = files(
|
||||||
|
'libexpr.hh',
|
||||||
|
'nix_api_expr.hh',
|
||||||
|
'value/context.hh',
|
||||||
|
)
|
|
@ -2,7 +2,7 @@
|
||||||
///@file
|
///@file
|
||||||
#include "nix_api_expr.h"
|
#include "nix_api_expr.h"
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "tests/nix_api_store.hh"
|
#include "nix/store/tests/nix_api_store.hh"
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include <rapidcheck/gen/Arbitrary.h>
|
#include <rapidcheck/gen/Arbitrary.h>
|
||||||
|
|
||||||
#include "value/context.hh"
|
#include "nix/expr/value/context.hh"
|
||||||
|
|
||||||
namespace rc {
|
namespace rc {
|
||||||
using namespace nix;
|
using namespace nix;
|
|
@ -29,28 +29,13 @@ subdir('nix-meson-build-support/subprojects')
|
||||||
rapidcheck = dependency('rapidcheck')
|
rapidcheck = dependency('rapidcheck')
|
||||||
deps_public += rapidcheck
|
deps_public += rapidcheck
|
||||||
|
|
||||||
add_project_arguments(
|
|
||||||
# TODO(Qyriad): Yes this is how the autoconf+Make system did it.
|
|
||||||
# It would be nice for our headers to be idempotent instead.
|
|
||||||
'-include', 'config-util.hh',
|
|
||||||
'-include', 'config-store.hh',
|
|
||||||
'-include', 'config-expr.hh',
|
|
||||||
language : 'cpp',
|
|
||||||
)
|
|
||||||
|
|
||||||
subdir('nix-meson-build-support/common')
|
subdir('nix-meson-build-support/common')
|
||||||
|
|
||||||
sources = files(
|
sources = files(
|
||||||
'tests/value/context.cc',
|
'tests/value/context.cc',
|
||||||
)
|
)
|
||||||
|
|
||||||
include_dirs = [include_directories('.')]
|
subdir('include/nix/expr/tests')
|
||||||
|
|
||||||
headers = files(
|
|
||||||
'tests/libexpr.hh',
|
|
||||||
'tests/nix_api_expr.hh',
|
|
||||||
'tests/value/context.hh',
|
|
||||||
)
|
|
||||||
|
|
||||||
subdir('nix-meson-build-support/export-all-symbols')
|
subdir('nix-meson-build-support/export-all-symbols')
|
||||||
subdir('nix-meson-build-support/windows-version')
|
subdir('nix-meson-build-support/windows-version')
|
||||||
|
@ -67,7 +52,7 @@ this_library = library(
|
||||||
install : true,
|
install : true,
|
||||||
)
|
)
|
||||||
|
|
||||||
install_headers(headers, subdir : 'nix', preserve_path : true)
|
install_headers(headers, subdir : 'nix/expr/tests', preserve_path : true)
|
||||||
|
|
||||||
libraries_private = []
|
libraries_private = []
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ mkMesonLibrary (finalAttrs: {
|
||||||
./.version
|
./.version
|
||||||
./meson.build
|
./meson.build
|
||||||
# ./meson.options
|
# ./meson.options
|
||||||
|
./include/nix/expr/tests/meson.build
|
||||||
(fileset.fileFilter (file: file.hasExt "cc") ./.)
|
(fileset.fileFilter (file: file.hasExt "cc") ./.)
|
||||||
(fileset.fileFilter (file: file.hasExt "hh") ./.)
|
(fileset.fileFilter (file: file.hasExt "hh") ./.)
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,30 +1,39 @@
|
||||||
#include <rapidcheck.h>
|
#include <rapidcheck.h>
|
||||||
|
|
||||||
#include "tests/path.hh"
|
#include "nix/store/tests/path.hh"
|
||||||
#include "tests/value/context.hh"
|
#include "nix/expr/tests/value/context.hh"
|
||||||
|
|
||||||
namespace rc {
|
namespace rc {
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
Gen<NixStringContextElem::DrvDeep> Arbitrary<NixStringContextElem::DrvDeep>::arbitrary()
|
Gen<NixStringContextElem::DrvDeep> Arbitrary<NixStringContextElem::DrvDeep>::arbitrary()
|
||||||
{
|
{
|
||||||
return gen::just(NixStringContextElem::DrvDeep {
|
return gen::map(gen::arbitrary<StorePath>(), [](StorePath drvPath) {
|
||||||
.drvPath = *gen::arbitrary<StorePath>(),
|
return NixStringContextElem::DrvDeep{
|
||||||
|
.drvPath = drvPath,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Gen<NixStringContextElem> Arbitrary<NixStringContextElem>::arbitrary()
|
Gen<NixStringContextElem> Arbitrary<NixStringContextElem>::arbitrary()
|
||||||
{
|
{
|
||||||
switch (*gen::inRange<uint8_t>(0, std::variant_size_v<NixStringContextElem::Raw>)) {
|
return gen::mapcat(
|
||||||
case 0:
|
gen::inRange<uint8_t>(0, std::variant_size_v<NixStringContextElem::Raw>),
|
||||||
return gen::just<NixStringContextElem>(*gen::arbitrary<NixStringContextElem::Opaque>());
|
[](uint8_t n) -> Gen<NixStringContextElem> {
|
||||||
case 1:
|
switch (n) {
|
||||||
return gen::just<NixStringContextElem>(*gen::arbitrary<NixStringContextElem::DrvDeep>());
|
case 0:
|
||||||
case 2:
|
return gen::map(
|
||||||
return gen::just<NixStringContextElem>(*gen::arbitrary<NixStringContextElem::Built>());
|
gen::arbitrary<NixStringContextElem::Opaque>(), [](NixStringContextElem a) { return a; });
|
||||||
default:
|
case 1:
|
||||||
assert(false);
|
return gen::map(
|
||||||
}
|
gen::arbitrary<NixStringContextElem::DrvDeep>(), [](NixStringContextElem a) { return a; });
|
||||||
|
case 2:
|
||||||
|
return gen::map(
|
||||||
|
gen::arbitrary<NixStringContextElem::Built>(), [](NixStringContextElem a) { return a; });
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <rapidcheck/gtest.h>
|
#include <rapidcheck/gtest.h>
|
||||||
|
|
||||||
#include "tests/derived-path.hh"
|
#include "nix/store/tests/derived-path.hh"
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@ RC_GTEST_FIXTURE_PROP(
|
||||||
* to worry about race conditions if the tests run concurrently.
|
* to worry about race conditions if the tests run concurrently.
|
||||||
*/
|
*/
|
||||||
ExperimentalFeatureSettings mockXpSettings;
|
ExperimentalFeatureSettings mockXpSettings;
|
||||||
mockXpSettings.set("experimental-features", "ca-derivations");
|
mockXpSettings.set("experimental-features", "ca-derivations dynamic-derivations");
|
||||||
|
|
||||||
auto * v = state.allocValue();
|
auto * v = state.allocValue();
|
||||||
state.mkOutputString(*v, b, std::nullopt, mockXpSettings);
|
state.mkOutputString(*v, b, std::nullopt, mockXpSettings);
|
||||||
auto [d, _] = state.coerceToSingleDerivedPathUnchecked(noPos, *v, "");
|
auto [d, _] = state.coerceToSingleDerivedPathUnchecked(noPos, *v, "", mockXpSettings);
|
||||||
RC_ASSERT(SingleDerivedPath { b } == d);
|
RC_ASSERT(SingleDerivedPath { b } == d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,9 +57,12 @@ RC_GTEST_FIXTURE_PROP(
|
||||||
prop_derived_path_built_out_path_round_trip,
|
prop_derived_path_built_out_path_round_trip,
|
||||||
(const SingleDerivedPath::Built & b, const StorePath & outPath))
|
(const SingleDerivedPath::Built & b, const StorePath & outPath))
|
||||||
{
|
{
|
||||||
|
ExperimentalFeatureSettings mockXpSettings;
|
||||||
|
mockXpSettings.set("experimental-features", "dynamic-derivations");
|
||||||
|
|
||||||
auto * v = state.allocValue();
|
auto * v = state.allocValue();
|
||||||
state.mkOutputString(*v, b, outPath);
|
state.mkOutputString(*v, b, outPath, mockXpSettings);
|
||||||
auto [d, _] = state.coerceToSingleDerivedPathUnchecked(noPos, *v, "");
|
auto [d, _] = state.coerceToSingleDerivedPathUnchecked(noPos, *v, "", mockXpSettings);
|
||||||
RC_ASSERT(SingleDerivedPath { b } == d);
|
RC_ASSERT(SingleDerivedPath { b } == d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
#include "value-to-json.hh"
|
#include "nix/expr/value-to-json.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
// Testing the conversion to JSON
|
// Testing the conversion to JSON
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "logging.hh"
|
#include "nix/util/logging.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ int main (int argc, char **argv) {
|
||||||
// Disable build hook. We won't be testing remote builds in these unit tests. If we do, fix the above build hook.
|
// Disable build hook. We won't be testing remote builds in these unit tests. If we do, fix the above build hook.
|
||||||
settings.buildHook = {};
|
settings.buildHook = {};
|
||||||
|
|
||||||
#if __linux__ // should match the conditional around sandboxBuildDir declaration.
|
#ifdef __linux__ // should match the conditional around sandboxBuildDir declaration.
|
||||||
|
|
||||||
// When building and testing nix within the host's Nix sandbox, our store dir will be located in the host's sandboxBuildDir, e.g.:
|
// When building and testing nix within the host's Nix sandbox, our store dir will be located in the host's sandboxBuildDir, e.g.:
|
||||||
// Host
|
// Host
|
||||||
|
@ -27,7 +27,7 @@ int main (int argc, char **argv) {
|
||||||
settings.sandboxBuildDir = "/test-build-dir-instead-of-usual-build-dir";
|
settings.sandboxBuildDir = "/test-build-dir-instead-of-usual-build-dir";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __APPLE__
|
#ifdef __APPLE__
|
||||||
// Avoid this error, when already running in a sandbox:
|
// Avoid this error, when already running in a sandbox:
|
||||||
// sandbox-exec: sandbox_apply: Operation not permitted
|
// sandbox-exec: sandbox_apply: Operation not permitted
|
||||||
settings.sandboxMode = smDisabled;
|
settings.sandboxMode = smDisabled;
|
||||||
|
|
|
@ -35,16 +35,12 @@ deps_private += gtest
|
||||||
gtest = dependency('gmock')
|
gtest = dependency('gmock')
|
||||||
deps_private += gtest
|
deps_private += gtest
|
||||||
|
|
||||||
add_project_arguments(
|
configdata = configuration_data()
|
||||||
# TODO(Qyriad): Yes this is how the autoconf+Make system did it.
|
configdata.set_quoted('PACKAGE_VERSION', meson.project_version())
|
||||||
# It would be nice for our headers to be idempotent instead.
|
|
||||||
'-include', 'config-util.hh',
|
config_priv_h = configure_file(
|
||||||
'-include', 'config-store.hh',
|
configuration : configdata,
|
||||||
'-include', 'config-expr.hh',
|
output : 'expr-tests-config.hh',
|
||||||
'-include', 'config-util.h',
|
|
||||||
'-include', 'config-store.h',
|
|
||||||
'-include', 'config-expr.h',
|
|
||||||
language : 'cpp',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
subdir('nix-meson-build-support/common')
|
subdir('nix-meson-build-support/common')
|
||||||
|
@ -72,6 +68,7 @@ include_dirs = [include_directories('.')]
|
||||||
this_exe = executable(
|
this_exe = executable(
|
||||||
meson.project_name(),
|
meson.project_name(),
|
||||||
sources,
|
sources,
|
||||||
|
config_priv_h,
|
||||||
dependencies : deps_private_subproject + deps_private + deps_other,
|
dependencies : deps_private_subproject + deps_private + deps_other,
|
||||||
include_directories : include_dirs,
|
include_directories : include_dirs,
|
||||||
# TODO: -lrapidcheck, see ../libutil-support/build.meson
|
# TODO: -lrapidcheck, see ../libutil-support/build.meson
|
||||||
|
|
|
@ -5,13 +5,15 @@
|
||||||
#include "nix_api_expr.h"
|
#include "nix_api_expr.h"
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
|
|
||||||
#include "tests/nix_api_expr.hh"
|
#include "nix/expr/tests/nix_api_expr.hh"
|
||||||
#include "tests/string_callback.hh"
|
#include "nix/util/tests/string_callback.hh"
|
||||||
#include "file-system.hh"
|
#include "nix/util/file-system.hh"
|
||||||
|
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "expr-tests-config.hh"
|
||||||
|
|
||||||
namespace nixC {
|
namespace nixC {
|
||||||
|
|
||||||
TEST_F(nix_api_store_test, nix_eval_state_lookup_path)
|
TEST_F(nix_api_store_test, nix_eval_state_lookup_path)
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "nix_api_external.h"
|
#include "nix_api_external.h"
|
||||||
|
|
||||||
#include "tests/nix_api_expr.hh"
|
#include "nix/expr/tests/nix_api_expr.hh"
|
||||||
#include "tests/string_callback.hh"
|
#include "nix/util/tests/string_callback.hh"
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "nix_api_expr_internal.h"
|
#include "nix_api_expr_internal.h"
|
||||||
|
|
||||||
#include "tests/nix_api_expr.hh"
|
#include "nix/expr/tests/nix_api_expr.hh"
|
||||||
#include "tests/string_callback.hh"
|
#include "nix/util/tests/string_callback.hh"
|
||||||
|
|
||||||
#include "gmock/gmock.h"
|
#include <gmock/gmock.h>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "memory-source-accessor.hh"
|
#include "nix/util/memory-source-accessor.hh"
|
||||||
|
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
class CaptureLogger : public Logger
|
class CaptureLogger : public Logger
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
|
|
||||||
#include "search-path.hh"
|
#include "nix/expr/search-path.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
// Testing of trivial expressions
|
// Testing of trivial expressions
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <rapidcheck/gtest.h>
|
#include <rapidcheck/gtest.h>
|
||||||
|
|
||||||
#include "tests/path.hh"
|
#include "nix/store/tests/path.hh"
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
#include "tests/value/context.hh"
|
#include "nix/expr/tests/value/context.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -124,7 +124,9 @@ RC_GTEST_PROP(
|
||||||
prop_round_rip,
|
prop_round_rip,
|
||||||
(const NixStringContextElem & o))
|
(const NixStringContextElem & o))
|
||||||
{
|
{
|
||||||
RC_ASSERT(o == NixStringContextElem::parse(o.to_string()));
|
ExperimentalFeatureSettings xpSettings;
|
||||||
|
xpSettings.set("experimental-features", "dynamic-derivations");
|
||||||
|
RC_ASSERT(o == NixStringContextElem::parse(o.to_string(), xpSettings));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "tests/libexpr.hh"
|
#include "nix/expr/tests/libexpr.hh"
|
||||||
|
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
#include "print.hh"
|
#include "nix/expr/print.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
|
|
||||||
#include "tests/libstore.hh"
|
#include "nix/store/tests/libstore.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "attr-path.hh"
|
#include "nix/expr/attr-path.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "attr-set.hh"
|
#include "nix/expr/attr-set.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include "users.hh"
|
#include "nix/util/users.hh"
|
||||||
#include "eval-cache.hh"
|
#include "nix/expr/eval-cache.hh"
|
||||||
#include "sqlite.hh"
|
#include "nix/store/sqlite.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
// Need specialization involving `SymbolStr` just in this one module.
|
// Need specialization involving `SymbolStr` just in this one module.
|
||||||
#include "strings-inline.hh"
|
#include "nix/util/strings-inline.hh"
|
||||||
|
|
||||||
namespace nix::eval_cache {
|
namespace nix::eval_cache {
|
||||||
|
|
||||||
|
@ -418,6 +418,14 @@ Value & AttrCursor::getValue()
|
||||||
return **_value;
|
return **_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AttrCursor::fetchCachedValue()
|
||||||
|
{
|
||||||
|
if (!cachedValue)
|
||||||
|
cachedValue = root->db->getAttr(getKey());
|
||||||
|
if (cachedValue && std::get_if<failed_t>(&cachedValue->second) && parent)
|
||||||
|
throw CachedEvalError(parent->first, parent->second);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<Symbol> AttrCursor::getAttrPath() const
|
std::vector<Symbol> AttrCursor::getAttrPath() const
|
||||||
{
|
{
|
||||||
if (parent) {
|
if (parent) {
|
||||||
|
@ -494,14 +502,13 @@ Suggestions AttrCursor::getSuggestionsForAttr(Symbol name)
|
||||||
std::shared_ptr<AttrCursor> AttrCursor::maybeGetAttr(Symbol name)
|
std::shared_ptr<AttrCursor> AttrCursor::maybeGetAttr(Symbol name)
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
|
|
||||||
if (cachedValue) {
|
if (cachedValue) {
|
||||||
if (auto attrs = std::get_if<std::vector<Symbol>>(&cachedValue->second)) {
|
if (auto attrs = std::get_if<std::vector<Symbol>>(&cachedValue->second)) {
|
||||||
for (auto & attr : *attrs)
|
for (auto & attr : *attrs)
|
||||||
if (attr == name)
|
if (attr == name)
|
||||||
return std::make_shared<AttrCursor>(root, std::make_pair(shared_from_this(), attr));
|
return std::make_shared<AttrCursor>(root, std::make_pair(ref(shared_from_this()), attr));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else if (std::get_if<placeholder_t>(&cachedValue->second)) {
|
} else if (std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
auto attr = root->db->getAttr({cachedValue->first, name});
|
auto attr = root->db->getAttr({cachedValue->first, name});
|
||||||
|
@ -512,7 +519,7 @@ std::shared_ptr<AttrCursor> AttrCursor::maybeGetAttr(Symbol name)
|
||||||
throw CachedEvalError(ref(shared_from_this()), name);
|
throw CachedEvalError(ref(shared_from_this()), name);
|
||||||
else
|
else
|
||||||
return std::make_shared<AttrCursor>(root,
|
return std::make_shared<AttrCursor>(root,
|
||||||
std::make_pair(shared_from_this(), name), nullptr, std::move(attr));
|
std::make_pair(ref(shared_from_this()), name), nullptr, std::move(attr));
|
||||||
}
|
}
|
||||||
// Incomplete attrset, so need to fall thru and
|
// Incomplete attrset, so need to fall thru and
|
||||||
// evaluate to see whether 'name' exists
|
// evaluate to see whether 'name' exists
|
||||||
|
@ -547,7 +554,7 @@ std::shared_ptr<AttrCursor> AttrCursor::maybeGetAttr(Symbol name)
|
||||||
}
|
}
|
||||||
|
|
||||||
return make_ref<AttrCursor>(
|
return make_ref<AttrCursor>(
|
||||||
root, std::make_pair(shared_from_this(), name), attr->value, std::move(cachedValue2));
|
root, std::make_pair(ref(shared_from_this()), name), attr->value, std::move(cachedValue2));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<AttrCursor> AttrCursor::maybeGetAttr(std::string_view name)
|
std::shared_ptr<AttrCursor> AttrCursor::maybeGetAttr(std::string_view name)
|
||||||
|
@ -585,8 +592,7 @@ OrSuggestions<ref<AttrCursor>> AttrCursor::findAlongAttrPath(const std::vector<S
|
||||||
std::string AttrCursor::getString()
|
std::string AttrCursor::getString()
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
if (auto s = std::get_if<string_t>(&cachedValue->second)) {
|
if (auto s = std::get_if<string_t>(&cachedValue->second)) {
|
||||||
debug("using cached string attribute '%s'", getAttrPathStr());
|
debug("using cached string attribute '%s'", getAttrPathStr());
|
||||||
|
@ -607,8 +613,7 @@ std::string AttrCursor::getString()
|
||||||
string_t AttrCursor::getStringWithContext()
|
string_t AttrCursor::getStringWithContext()
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
if (auto s = std::get_if<string_t>(&cachedValue->second)) {
|
if (auto s = std::get_if<string_t>(&cachedValue->second)) {
|
||||||
bool valid = true;
|
bool valid = true;
|
||||||
|
@ -654,8 +659,7 @@ string_t AttrCursor::getStringWithContext()
|
||||||
bool AttrCursor::getBool()
|
bool AttrCursor::getBool()
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
if (auto b = std::get_if<bool>(&cachedValue->second)) {
|
if (auto b = std::get_if<bool>(&cachedValue->second)) {
|
||||||
debug("using cached Boolean attribute '%s'", getAttrPathStr());
|
debug("using cached Boolean attribute '%s'", getAttrPathStr());
|
||||||
|
@ -676,8 +680,7 @@ bool AttrCursor::getBool()
|
||||||
NixInt AttrCursor::getInt()
|
NixInt AttrCursor::getInt()
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
if (auto i = std::get_if<int_t>(&cachedValue->second)) {
|
if (auto i = std::get_if<int_t>(&cachedValue->second)) {
|
||||||
debug("using cached integer attribute '%s'", getAttrPathStr());
|
debug("using cached integer attribute '%s'", getAttrPathStr());
|
||||||
|
@ -698,8 +701,7 @@ NixInt AttrCursor::getInt()
|
||||||
std::vector<std::string> AttrCursor::getListOfStrings()
|
std::vector<std::string> AttrCursor::getListOfStrings()
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
if (auto l = std::get_if<std::vector<std::string>>(&cachedValue->second)) {
|
if (auto l = std::get_if<std::vector<std::string>>(&cachedValue->second)) {
|
||||||
debug("using cached list of strings attribute '%s'", getAttrPathStr());
|
debug("using cached list of strings attribute '%s'", getAttrPathStr());
|
||||||
|
@ -731,8 +733,7 @@ std::vector<std::string> AttrCursor::getListOfStrings()
|
||||||
std::vector<Symbol> AttrCursor::getAttrs()
|
std::vector<Symbol> AttrCursor::getAttrs()
|
||||||
{
|
{
|
||||||
if (root->db) {
|
if (root->db) {
|
||||||
if (!cachedValue)
|
fetchCachedValue();
|
||||||
cachedValue = root->db->getAttr(getKey());
|
|
||||||
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
if (cachedValue && !std::get_if<placeholder_t>(&cachedValue->second)) {
|
||||||
if (auto attrs = std::get_if<std::vector<Symbol>>(&cachedValue->second)) {
|
if (auto attrs = std::get_if<std::vector<Symbol>>(&cachedValue->second)) {
|
||||||
debug("using cached attrset attribute '%s'", getAttrPathStr());
|
debug("using cached attrset attribute '%s'", getAttrPathStr());
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "eval-error.hh"
|
#include "nix/expr/eval-error.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "value.hh"
|
#include "nix/expr/value.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
#include "error.hh"
|
#include "nix/util/error.hh"
|
||||||
#include "environment-variables.hh"
|
#include "nix/util/environment-variables.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "config-global.hh"
|
#include "nix/util/config-global.hh"
|
||||||
#include "serialise.hh"
|
#include "nix/util/serialise.hh"
|
||||||
#include "eval-gc.hh"
|
#include "nix/expr/eval-gc.hh"
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#include "expr-config-private.hh"
|
||||||
|
|
||||||
|
#if NIX_USE_BOEHMGC
|
||||||
|
|
||||||
# include <pthread.h>
|
# include <pthread.h>
|
||||||
# if __FreeBSD__
|
# ifdef __FreeBSD__
|
||||||
# include <pthread_np.h>
|
# include <pthread_np.h>
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
@ -24,7 +26,7 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
/* Called when the Boehm GC runs out of memory. */
|
/* Called when the Boehm GC runs out of memory. */
|
||||||
static void * oomHandler(size_t requested)
|
static void * oomHandler(size_t requested)
|
||||||
{
|
{
|
||||||
|
@ -94,7 +96,7 @@ void initGC()
|
||||||
if (gcInitialised)
|
if (gcInitialised)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
initGCReal();
|
initGCReal();
|
||||||
|
|
||||||
gcCyclesAfterInit = GC_get_gc_no();
|
gcCyclesAfterInit = GC_get_gc_no();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "users.hh"
|
#include "nix/util/users.hh"
|
||||||
#include "globals.hh"
|
#include "nix/store/globals.hh"
|
||||||
#include "profiles.hh"
|
#include "nix/store/profiles.hh"
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -103,4 +103,4 @@ Path getNixDefExpr()
|
||||||
: getHome() + "/.nix-defexpr";
|
: getHome() + "/.nix-defexpr";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // namespace nix
|
|
@ -1,25 +1,26 @@
|
||||||
#include "eval.hh"
|
#include "nix/expr/eval.hh"
|
||||||
#include "eval-settings.hh"
|
#include "nix/expr/eval-settings.hh"
|
||||||
#include "primops.hh"
|
#include "nix/expr/primops.hh"
|
||||||
#include "print-options.hh"
|
#include "nix/expr/print-options.hh"
|
||||||
#include "exit.hh"
|
#include "nix/util/exit.hh"
|
||||||
#include "types.hh"
|
#include "nix/util/types.hh"
|
||||||
#include "util.hh"
|
#include "nix/util/util.hh"
|
||||||
#include "store-api.hh"
|
#include "nix/store/store-api.hh"
|
||||||
#include "derivations.hh"
|
#include "nix/store/derivations.hh"
|
||||||
#include "downstream-placeholder.hh"
|
#include "nix/store/downstream-placeholder.hh"
|
||||||
#include "eval-inline.hh"
|
#include "nix/expr/eval-inline.hh"
|
||||||
#include "filetransfer.hh"
|
#include "nix/store/filetransfer.hh"
|
||||||
#include "function-trace.hh"
|
#include "nix/expr/function-trace.hh"
|
||||||
#include "profiles.hh"
|
#include "nix/store/profiles.hh"
|
||||||
#include "print.hh"
|
#include "nix/expr/print.hh"
|
||||||
#include "filtering-source-accessor.hh"
|
#include "nix/fetchers/filtering-source-accessor.hh"
|
||||||
#include "memory-source-accessor.hh"
|
#include "nix/util/memory-source-accessor.hh"
|
||||||
#include "mounted-source-accessor.hh"
|
#include "nix/util/mounted-source-accessor.hh"
|
||||||
#include "gc-small-vector.hh"
|
#include "nix/expr/gc-small-vector.hh"
|
||||||
#include "url.hh"
|
#include "nix/util/url.hh"
|
||||||
#include "fetch-to-store.hh"
|
#include "nix/fetchers/fetch-to-store.hh"
|
||||||
#include "tarball.hh"
|
#include "nix/fetchers/tarball.hh"
|
||||||
|
|
||||||
#include "parser-tab.hh"
|
#include "parser-tab.hh"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -39,7 +40,7 @@
|
||||||
# include <sys/resource.h>
|
# include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "strings-inline.hh"
|
#include "nix/util/strings-inline.hh"
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
@ -290,17 +291,13 @@ EvalState::EvalState(
|
||||||
CanonPath("derivation-internal.nix"),
|
CanonPath("derivation-internal.nix"),
|
||||||
#include "primops/derivation.nix.gen.hh"
|
#include "primops/derivation.nix.gen.hh"
|
||||||
)}
|
)}
|
||||||
, callFlakeInternal{internalFS->addFile(
|
|
||||||
CanonPath("call-flake.nix"),
|
|
||||||
#include "call-flake.nix.gen.hh"
|
|
||||||
)}
|
|
||||||
, store(store)
|
, store(store)
|
||||||
, buildStore(buildStore ? buildStore : store)
|
, buildStore(buildStore ? buildStore : store)
|
||||||
, debugRepl(nullptr)
|
, debugRepl(nullptr)
|
||||||
, debugStop(false)
|
, debugStop(false)
|
||||||
, trylevel(0)
|
, trylevel(0)
|
||||||
, regexCache(makeRegexCache())
|
, regexCache(makeRegexCache())
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
, valueAllocCache(std::allocate_shared<void *>(traceable_allocator<void *>(), nullptr))
|
, valueAllocCache(std::allocate_shared<void *>(traceable_allocator<void *>(), nullptr))
|
||||||
, env1AllocCache(std::allocate_shared<void *>(traceable_allocator<void *>(), nullptr))
|
, env1AllocCache(std::allocate_shared<void *>(traceable_allocator<void *>(), nullptr))
|
||||||
, baseEnvP(std::allocate_shared<Env *>(traceable_allocator<Env *>(), &allocEnv(BASE_ENV_SIZE)))
|
, baseEnvP(std::allocate_shared<Env *>(traceable_allocator<Env *>(), &allocEnv(BASE_ENV_SIZE)))
|
||||||
|
@ -355,7 +352,7 @@ EvalState::EvalState(
|
||||||
#include "fetchurl.nix.gen.hh"
|
#include "fetchurl.nix.gen.hh"
|
||||||
);
|
);
|
||||||
|
|
||||||
createBaseEnv();
|
createBaseEnv(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2251,18 +2248,18 @@ std::string_view EvalState::forceString(Value & v, const PosIdx pos, std::string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void copyContext(const Value & v, NixStringContext & context)
|
void copyContext(const Value & v, NixStringContext & context, const ExperimentalFeatureSettings & xpSettings)
|
||||||
{
|
{
|
||||||
if (v.payload.string.context)
|
if (v.payload.string.context)
|
||||||
for (const char * * p = v.payload.string.context; *p; ++p)
|
for (const char * * p = v.payload.string.context; *p; ++p)
|
||||||
context.insert(NixStringContextElem::parse(*p));
|
context.insert(NixStringContextElem::parse(*p, xpSettings));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string_view EvalState::forceString(Value & v, NixStringContext & context, const PosIdx pos, std::string_view errorCtx)
|
std::string_view EvalState::forceString(Value & v, NixStringContext & context, const PosIdx pos, std::string_view errorCtx, const ExperimentalFeatureSettings & xpSettings)
|
||||||
{
|
{
|
||||||
auto s = forceString(v, pos, errorCtx);
|
auto s = forceString(v, pos, errorCtx);
|
||||||
copyContext(v, context);
|
copyContext(v, context, xpSettings);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2468,10 +2465,10 @@ StorePath EvalState::coerceToStorePath(const PosIdx pos, Value & v, NixStringCon
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::pair<SingleDerivedPath, std::string_view> EvalState::coerceToSingleDerivedPathUnchecked(const PosIdx pos, Value & v, std::string_view errorCtx)
|
std::pair<SingleDerivedPath, std::string_view> EvalState::coerceToSingleDerivedPathUnchecked(const PosIdx pos, Value & v, std::string_view errorCtx, const ExperimentalFeatureSettings & xpSettings)
|
||||||
{
|
{
|
||||||
NixStringContext context;
|
NixStringContext context;
|
||||||
auto s = forceString(v, context, pos, errorCtx);
|
auto s = forceString(v, context, pos, errorCtx, xpSettings);
|
||||||
auto csize = context.size();
|
auto csize = context.size();
|
||||||
if (csize != 1)
|
if (csize != 1)
|
||||||
error<EvalError>(
|
error<EvalError>(
|
||||||
|
@ -2817,7 +2814,7 @@ bool EvalState::eqValues(Value & v1, Value & v2, const PosIdx pos, std::string_v
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EvalState::fullGC() {
|
bool EvalState::fullGC() {
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
GC_gcollect();
|
GC_gcollect();
|
||||||
// Check that it ran. We might replace this with a version that uses more
|
// Check that it ran. We might replace this with a version that uses more
|
||||||
// of the boehm API to get this reliably, at a maintenance cost.
|
// of the boehm API to get this reliably, at a maintenance cost.
|
||||||
|
@ -2836,7 +2833,7 @@ void EvalState::maybePrintStats()
|
||||||
|
|
||||||
if (showStats) {
|
if (showStats) {
|
||||||
// Make the final heap size more deterministic.
|
// Make the final heap size more deterministic.
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
if (!fullGC()) {
|
if (!fullGC()) {
|
||||||
warn("failed to perform a full GC before reporting stats");
|
warn("failed to perform a full GC before reporting stats");
|
||||||
}
|
}
|
||||||
|
@ -2858,7 +2855,7 @@ void EvalState::printStatistics()
|
||||||
uint64_t bValues = nrValues * sizeof(Value);
|
uint64_t bValues = nrValues * sizeof(Value);
|
||||||
uint64_t bAttrsets = nrAttrsets * sizeof(Bindings) + nrAttrsInAttrsets * sizeof(Attr);
|
uint64_t bAttrsets = nrAttrsets * sizeof(Bindings) + nrAttrsInAttrsets * sizeof(Attr);
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
GC_word heapSize, totalBytes;
|
GC_word heapSize, totalBytes;
|
||||||
GC_get_heap_usage_safe(&heapSize, 0, 0, 0, &totalBytes);
|
GC_get_heap_usage_safe(&heapSize, 0, 0, 0, &totalBytes);
|
||||||
double gcFullOnlyTime = ({
|
double gcFullOnlyTime = ({
|
||||||
|
@ -2880,7 +2877,7 @@ void EvalState::printStatistics()
|
||||||
#ifndef _WIN32 // TODO implement
|
#ifndef _WIN32 // TODO implement
|
||||||
{"cpu", cpuTime},
|
{"cpu", cpuTime},
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
{GC_is_incremental_mode() ? "gcNonIncremental" : "gc", gcFullOnlyTime},
|
{GC_is_incremental_mode() ? "gcNonIncremental" : "gc", gcFullOnlyTime},
|
||||||
#ifndef _WIN32 // TODO implement
|
#ifndef _WIN32 // TODO implement
|
||||||
{GC_is_incremental_mode() ? "gcNonIncrementalFraction" : "gcFraction", gcFullOnlyTime / cpuTime},
|
{GC_is_incremental_mode() ? "gcNonIncrementalFraction" : "gcFraction", gcFullOnlyTime / cpuTime},
|
||||||
|
@ -2924,7 +2921,7 @@ void EvalState::printStatistics()
|
||||||
topObj["nrLookups"] = nrLookups;
|
topObj["nrLookups"] = nrLookups;
|
||||||
topObj["nrPrimOpCalls"] = nrPrimOpCalls;
|
topObj["nrPrimOpCalls"] = nrPrimOpCalls;
|
||||||
topObj["nrFunctionCalls"] = nrFunctionCalls;
|
topObj["nrFunctionCalls"] = nrFunctionCalls;
|
||||||
#if HAVE_BOEHMGC
|
#if NIX_USE_BOEHMGC
|
||||||
topObj["gc"] = {
|
topObj["gc"] = {
|
||||||
{"heapSize", heapSize},
|
{"heapSize", heapSize},
|
||||||
{"totalBytes", totalBytes},
|
{"totalBytes", totalBytes},
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "function-trace.hh"
|
#include "nix/expr/function-trace.hh"
|
||||||
#include "logging.hh"
|
#include "nix/util/logging.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue