Merge master into haskell-updates

This commit is contained in:
github-actions[bot] 2022-04-04 00:11:26 +00:00 committed by GitHub
commit 493d6516dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
178 changed files with 12073 additions and 4538 deletions

View File

@ -78,21 +78,46 @@ If both the dependency and depending packages aren't compilers or other machine-
Finally, if the depending package is a compiler or other machine-code-producing tool, it might need dependencies that run at "emit time". This is for compilers that (regrettably) insist on being built together with their source languages' standard libraries. Assuming build != host != target, a run-time dependency of the standard library cannot be run at the compiler's build time or run time, but only at the run time of code emitted by the compiler.
Putting this all together, that means we have dependencies in the form "host → target", in at most the following six combinations:
Putting this all together, that means that we have dependency types of the form "X→ E", which means that the dependency executes on X and emits code for E; each of X and E can be `build`, `host`, or `target`, and E can be `*` to indicate that the dependency is not a compiler-like package.
Dependency types describe the relationships that a package has with each of its transitive dependencies. You could think of attaching one or more dependency types to each of the formal parameters at the top of a package's `.nix` file, as well as to all of *their* formal parameters, and so on. Triples like `(foo, bar, baz)`, on the other hand, are a property of an instantiated derivation -- you could would attach a triple `(mips-linux, mips-linux, sparc-solaris)` to a `.drv` file in `/nix/store`.
Only nine dependency types matter in practice:
#### Possible dependency types {#possible-dependency-types}
| Dependencys host platform | Dependencys target platform |
|----------------------------|------------------------------|
| build | build |
| build | host |
| build | target |
| host | host |
| host | target |
| target | target |
| Dependency type | Dependencys host platform | Dependencys target platform |
|-----------------|----------------------------|------------------------------|
| build → * | build | (none) |
| build → build | build | build |
| build → host | build | host |
| build → target | build | target |
| host → * | host | (none) |
| host → host | host | host |
| host → target | host | target |
| target → * | target | (none) |
| target → target | target | target |
Let's use `g++` as an example to make this table clearer. `g++` is a C++ compiler written in C. Suppose we are building `g++` with a `(build, host, target)` platform triple of `(foo, bar, baz)`. This means we are using a `foo`-machine to build a copy of `g++` which will run on a `bar`-machine and emit binaries for the `baz`-machine.
Some examples will make this table clearer. Suppose there's some package that is being built with a `(build, host, target)` platform triple of `(foo, bar, baz)`. If it has a build-time library dependency, that would be a "host → build" dependency with a triple of `(foo, foo, *)` (the target platform is irrelevant). If it needs a compiler to be built, that would be a "build → host" dependency with a triple of `(foo, foo, *)` (the target platform is irrelevant). That compiler, would be built with another compiler, also "build → host" dependency, with a triple of `(foo, foo, foo)`.
* `g++` links against the host platform's `glibc` C library, which is a "host→ *" dependency with a triple of `(bar, bar, *)`. Since it is a library, not a compiler, it has no "target".
* Since `g++` is written in C, the `gcc` compiler used to compile it is a "build→ host" dependency of `g++` with a triple of `(foo, foo, bar)`. This compiler runs on the build platform and emits code for the host platform.
* `gcc` links against the build platform's `glibc` C library, which is a "build→ *" dependency with a triple of `(foo, foo, *)`. Since it is a library, not a compiler, it has no "target".
* This `gcc` is itself compiled by an *earlier* copy of `gcc`. This earlier copy of `gcc` is a "build→ build" dependency of `g++` with a triple of `(foo, foo, foo)`. This "early `gcc`" runs on the build platform and emits code for the build platform.
* `g++` is bundled with `libgcc`, which includes a collection of target-machine routines for exception handling and
software floating point emulation. `libgcc` would be a "target→ *" dependency with triple `(foo, baz, *)`, because it consists of machine code which gets linked against the output of the compiler that we are building. It is a library, not a compiler, so it has no target of its own.
* `libgcc` is written in C and compiled with `gcc`. The `gcc` that compiles it will be a "build→ target" dependency with triple `(foo, foo, baz)`. It gets compiled *and run* at `g++`-build-time (on platform `foo`), but must emit code for the `baz`-platform.
* `g++` allows inline assembler code, so it depends on access to a copy of the `gas` assembler. This would be a "host→ target" dependency with triple `(foo, bar, baz)`.
* `g++` (and `gcc`) include a library `libgccjit.so`, which wrap the compiler in a library to create a just-in-time compiler. In nixpkgs, this library is in the `libgccjit` package; if C++ required that programs have access to a JIT, `g++` would need to add a "target→ target" dependency for `libgccjit` with triple `(foo, baz, baz)`. This would ensure that the compiler ships with a copy of `libgccjit` which both executes on and generates code for the `baz`-platform.
* If `g++` itself linked against `libgccjit.so` (for example, to allow compile-time-evaluated C++ expressions), then the `libgccjit` package used to provide this functionality would be a "host→ host" dependency of `g++`: it is code which runs on the `host` and emits code for execution on the `host`.
### Cross packaging cookbook {#ssec-cross-cookbook}

View File

@ -125,7 +125,7 @@ The extension of `PATH` with dependencies, alluded to above, proceeds according
A dependency is said to be **propagated** when some of its other-transitive (non-immediate) downstream dependencies also need it as an immediate dependency.
[^footnote-stdenv-propagated-dependencies]
It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`), representing how respectively its host and target platforms are "offset" from the depending derivations platforms. The following table summarize the different combinations that can be obtained:
It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`) representing its [dependency type](#possible-dependency-types), which captures how its host and target platforms are each "offset" from the depending derivations host and target platforms. The following table summarize the different combinations that can be obtained:
| `host → target` | attribute name | offset |
| ------------------- | ------------------- | -------- |

View File

@ -108,15 +108,6 @@ with lib.maintainers; {
shortName = "Chia Blockchain";
};
cleanup = {
members = [
ajs124
];
scope = "Cleaning of the nixpkgs source tree.";
shortName = "Cleanup";
enableFeatureFreezePing = true;
};
coq = {
members = [
cohencyril

View File

@ -411,6 +411,13 @@ OK
specify on which disk the GRUB boot loader is to be
installed. Without it, NixOS cannot boot.
</para>
<para>
If there are other operating systems running on the
machine before installing NixOS, the
<xref linkend="opt-boot.loader.grub.useOSProber" />
option can be set to <literal>true</literal> to
automatically add them to the grub menu.
</para>
</listitem>
</varlistentry>
<varlistentry>
@ -436,13 +443,6 @@ OK
</listitem>
</varlistentry>
</variablelist>
<para>
If there are other operating systems running on the machine
before installing NixOS, the
<xref linkend="opt-boot.loader.grub.useOSProber" /> option can
be set to <literal>true</literal> to automatically add them to
the grub menu.
</para>
<para>
If you need to configure networking for your machine the
configuration options are described in

View File

@ -1780,6 +1780,13 @@
desktop environments as needed.
</para>
</listitem>
<listitem>
<para>
<literal>services.xserver.desktopManager.xfce</literal> now
includes Xfces screen locker,
<literal>xfce4-screensaver</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>hadoop</literal> package has added support for

View File

@ -296,6 +296,11 @@ Use the following commands:
specify on which disk the GRUB boot loader is to be installed.
Without it, NixOS cannot boot.
: If there are other operating systems running on the machine before
installing NixOS, the [](#opt-boot.loader.grub.useOSProber)
option can be set to `true` to automatically add them to the grub
menu.
UEFI systems
: You *must* set the option [](#opt-boot.loader.systemd-boot.enable)
@ -307,11 +312,6 @@ Use the following commands:
[`boot.loader.systemd-boot`](#opt-boot.loader.systemd-boot.enable)
as well.
If there are other operating systems running on the machine before
installing NixOS, the [](#opt-boot.loader.grub.useOSProber)
option can be set to `true` to automatically add them to the grub
menu.
If you need to configure networking for your machine the
configuration options are described in [](#sec-networking). In
particular, while wifi is supported on the installation image, it is

View File

@ -615,6 +615,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- The polkit service, available at `security.polkit.enable`, is now disabled by default. It will automatically be enabled through services and desktop environments as needed.
- `services.xserver.desktopManager.xfce` now includes Xfce's screen locker, `xfce4-screensaver`.
- The `hadoop` package has added support for `aarch64-linux` and `aarch64-darwin` as of 3.3.1 ([#158613](https://github.com/NixOS/nixpkgs/pull/158613)).
- The `R` package now builds again on `aarch64-darwin` ([#158992](https://github.com/NixOS/nixpkgs/pull/158992)).

View File

@ -122,10 +122,15 @@ in rec {
(if isList value then value else [value]))
as));
generateUnits = generateUnits' true;
generateUnits' = allowCollisions: type: units: upstreamUnits: upstreamWants:
pkgs.runCommand "${type}-units"
generateUnits = { allowCollisions ? true, type, units, upstreamUnits, upstreamWants, packages ? cfg.packages, package ? cfg.package }:
let
typeDir = ({
system = "system";
initrd = "system";
user = "user";
nspawn = "nspawn";
}).${type};
in pkgs.runCommand "${type}-units"
{ preferLocalBuild = true;
allowSubstitutes = false;
} ''
@ -133,7 +138,7 @@ in rec {
# Copy the upstream systemd units we're interested in.
for i in ${toString upstreamUnits}; do
fn=${cfg.package}/example/systemd/${type}/$i
fn=${package}/example/systemd/${typeDir}/$i
if ! [ -e $fn ]; then echo "missing $fn"; false; fi
if [ -L $fn ]; then
target="$(readlink "$fn")"
@ -150,7 +155,7 @@ in rec {
# Copy .wants links, but only those that point to units that
# we're interested in.
for i in ${toString upstreamWants}; do
fn=${cfg.package}/example/systemd/${type}/$i
fn=${package}/example/systemd/${typeDir}/$i
if ! [ -e $fn ]; then echo "missing $fn"; false; fi
x=$out/$(basename $fn)
mkdir $x
@ -162,14 +167,14 @@ in rec {
done
# Symlink all units provided listed in systemd.packages.
packages="${toString cfg.packages}"
packages="${toString packages}"
# Filter duplicate directories
declare -A unique_packages
for k in $packages ; do unique_packages[$k]=1 ; done
for i in ''${!unique_packages[@]}; do
for fn in $i/etc/systemd/${type}/* $i/lib/systemd/${type}/*; do
for fn in $i/etc/systemd/${typeDir}/* $i/lib/systemd/${typeDir}/*; do
if ! [[ "$fn" =~ .wants$ ]]; then
if [[ -d "$fn" ]]; then
targetDir="$out/$(basename "$fn")"
@ -270,9 +275,9 @@ in rec {
{ Conflicts = toString config.conflicts; }
// optionalAttrs (config.requisite != [])
{ Requisite = toString config.requisite; }
// optionalAttrs (config.restartTriggers != [])
// optionalAttrs (config ? restartTriggers && config.restartTriggers != [])
{ X-Restart-Triggers = toString config.restartTriggers; }
// optionalAttrs (config.reloadTriggers != [])
// optionalAttrs (config ? reloadTriggers && config.reloadTriggers != [])
{ X-Reload-Triggers = toString config.reloadTriggers; }
// optionalAttrs (config.description != "") {
Description = config.description; }
@ -288,45 +293,24 @@ in rec {
};
};
serviceConfig = { name, config, ... }: {
config = mkMerge
[ { # Default path for systemd services. Should be quite minimal.
path = mkAfter
[ pkgs.coreutils
pkgs.findutils
pkgs.gnugrep
pkgs.gnused
systemd
];
environment.PATH = "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
}
(mkIf (config.preStart != "")
{ serviceConfig.ExecStartPre =
[ (makeJobScript "${name}-pre-start" config.preStart) ];
})
(mkIf (config.script != "")
{ serviceConfig.ExecStart =
makeJobScript "${name}-start" config.script + " " + config.scriptArgs;
})
(mkIf (config.postStart != "")
{ serviceConfig.ExecStartPost =
[ (makeJobScript "${name}-post-start" config.postStart) ];
})
(mkIf (config.reload != "")
{ serviceConfig.ExecReload =
makeJobScript "${name}-reload" config.reload;
})
(mkIf (config.preStop != "")
{ serviceConfig.ExecStop =
makeJobScript "${name}-pre-stop" config.preStop;
})
(mkIf (config.postStop != "")
{ serviceConfig.ExecStopPost =
makeJobScript "${name}-post-stop" config.postStop;
})
];
serviceConfig = { config, ... }: {
config.environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
};
stage2ServiceConfig = {
imports = [ serviceConfig ];
# Default path for systemd services. Should be quite minimal.
config.path = mkAfter [
pkgs.coreutils
pkgs.findutils
pkgs.gnugrep
pkgs.gnused
systemd
];
};
stage1ServiceConfig = serviceConfig;
mountConfig = { config, ... }: {
config = {
mountConfig =
@ -374,12 +358,12 @@ in rec {
# systemd max line length is now 1MiB
# https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af
in if stringLength s >= 1048576 then throw "The value of the environment variable ${n} in systemd service ${name}.service is too long." else s) (attrNames env)}
${if def.reloadIfChanged then ''
${if def ? reloadIfChanged && def.reloadIfChanged then ''
X-ReloadIfChanged=true
'' else if !def.restartIfChanged then ''
'' else if (def ? restartIfChanged && !def.restartIfChanged) then ''
X-RestartIfChanged=false
'' else ""}
${optionalString (!def.stopIfChanged) "X-StopIfChanged=false"}
${optionalString (def ? stopIfChanged && !def.stopIfChanged) "X-StopIfChanged=false"}
${attrsToSection def.serviceConfig}
'';
};

View File

@ -0,0 +1,37 @@
{ lib, systemdUtils }:
with systemdUtils.lib;
with systemdUtils.unitOptions;
with lib;
rec {
units = with types;
attrsOf (submodule ({ name, config, ... }: {
options = concreteUnitOptions;
config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); };
}));
services = with types; attrsOf (submodule [ stage2ServiceOptions unitConfig stage2ServiceConfig ]);
initrdServices = with types; attrsOf (submodule [ stage1ServiceOptions unitConfig stage1ServiceConfig ]);
targets = with types; attrsOf (submodule [ stage2CommonUnitOptions unitConfig ]);
initrdTargets = with types; attrsOf (submodule [ stage1CommonUnitOptions unitConfig ]);
sockets = with types; attrsOf (submodule [ stage2SocketOptions unitConfig ]);
initrdSockets = with types; attrsOf (submodule [ stage1SocketOptions unitConfig ]);
timers = with types; attrsOf (submodule [ stage2TimerOptions unitConfig ]);
initrdTimers = with types; attrsOf (submodule [ stage1TimerOptions unitConfig ]);
paths = with types; attrsOf (submodule [ stage2PathOptions unitConfig ]);
initrdPaths = with types; attrsOf (submodule [ stage1PathOptions unitConfig ]);
slices = with types; attrsOf (submodule [ stage2SliceOptions unitConfig ]);
initrdSlices = with types; attrsOf (submodule [ stage1SliceOptions unitConfig ]);
mounts = with types; listOf (submodule [ stage2MountOptions unitConfig mountConfig ]);
initrdMounts = with types; listOf (submodule [ stage1MountOptions unitConfig mountConfig ]);
automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
initrdAutomounts = with types; attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
}

View File

@ -94,7 +94,7 @@ in rec {
};
commonUnitOptions = sharedOptions // {
commonUnitOptions = { options = (sharedOptions // {
description = mkOption {
default = "";
@ -191,27 +191,6 @@ in rec {
'';
};
restartTriggers = mkOption {
default = [];
type = types.listOf types.unspecified;
description = ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be restarted.
'';
};
reloadTriggers = mkOption {
default = [];
type = types.listOf unitOption;
description = ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be reloaded. If anything but a reload trigger changes in the
unit file, the unit will be restarted instead.
'';
};
onFailure = mkOption {
default = [];
type = types.listOf unitNameType;
@ -239,10 +218,39 @@ in rec {
'';
};
}); };
stage2CommonUnitOptions = {
imports = [
commonUnitOptions
];
options = {
restartTriggers = mkOption {
default = [];
type = types.listOf types.unspecified;
description = ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be restarted.
'';
};
reloadTriggers = mkOption {
default = [];
type = types.listOf unitOption;
description = ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be reloaded. If anything but a reload trigger changes in the
unit file, the unit will be restarted instead.
'';
};
};
};
stage1CommonUnitOptions = commonUnitOptions;
serviceOptions = commonUnitOptions // {
serviceOptions = { options = {
environment = mkOption {
default = {};
@ -276,121 +284,164 @@ in rec {
'';
};
script = mkOption {
type = types.lines;
default = "";
description = "Shell commands executed as the service's main process.";
}; };
stage2ServiceOptions = { name, config, ... }: {
imports = [
stage2CommonUnitOptions
serviceOptions
];
options = {
script = mkOption {
type = types.lines;
default = "";
description = "Shell commands executed as the service's main process.";
};
scriptArgs = mkOption {
type = types.str;
default = "";
description = "Arguments passed to the main process script.";
};
preStart = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed before the service's main process
is started.
'';
};
postStart = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed after the service's main process
is started.
'';
};
reload = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed when the service's main process
is reloaded.
'';
};
preStop = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed to stop the service.
'';
};
postStop = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed after the service's main process
has exited.
'';
};
restartIfChanged = mkOption {
type = types.bool;
default = true;
description = ''
Whether the service should be restarted during a NixOS
configuration switch if its definition has changed.
'';
};
reloadIfChanged = mkOption {
type = types.bool;
default = false;
description = ''
Whether the service should be reloaded during a NixOS
configuration switch if its definition has changed. If
enabled, the value of <option>restartIfChanged</option> is
ignored.
This option should not be used anymore in favor of
<option>reloadTriggers</option> which allows more granular
control of when a service is reloaded and when a service
is restarted.
'';
};
stopIfChanged = mkOption {
type = types.bool;
default = true;
description = ''
If set, a changed unit is restarted by calling
<command>systemctl stop</command> in the old configuration,
then <command>systemctl start</command> in the new one.
Otherwise, it is restarted in a single step using
<command>systemctl restart</command> in the new configuration.
The latter is less correct because it runs the
<literal>ExecStop</literal> commands from the new
configuration.
'';
};
startAt = mkOption {
type = with types; either str (listOf str);
default = [];
example = "Sun 14:00:00";
description = ''
Automatically start this unit at the given date/time, which
must be in the format described in
<citerefentry><refentrytitle>systemd.time</refentrytitle>
<manvolnum>7</manvolnum></citerefentry>. This is equivalent
to adding a corresponding timer unit with
<option>OnCalendar</option> set to the value given here.
'';
apply = v: if isList v then v else [ v ];
};
};
scriptArgs = mkOption {
type = types.str;
default = "";
description = "Arguments passed to the main process script.";
};
preStart = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed before the service's main process
is started.
'';
};
postStart = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed after the service's main process
is started.
'';
};
reload = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed when the service's main process
is reloaded.
'';
};
preStop = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed to stop the service.
'';
};
postStop = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed after the service's main process
has exited.
'';
};
restartIfChanged = mkOption {
type = types.bool;
default = true;
description = ''
Whether the service should be restarted during a NixOS
configuration switch if its definition has changed.
'';
};
reloadIfChanged = mkOption {
type = types.bool;
default = false;
description = ''
Whether the service should be reloaded during a NixOS
configuration switch if its definition has changed. If
enabled, the value of <option>restartIfChanged</option> is
ignored.
This option should not be used anymore in favor of
<option>reloadTriggers</option> which allows more granular
control of when a service is reloaded and when a service
is restarted.
'';
};
stopIfChanged = mkOption {
type = types.bool;
default = true;
description = ''
If set, a changed unit is restarted by calling
<command>systemctl stop</command> in the old configuration,
then <command>systemctl start</command> in the new one.
Otherwise, it is restarted in a single step using
<command>systemctl restart</command> in the new configuration.
The latter is less correct because it runs the
<literal>ExecStop</literal> commands from the new
configuration.
'';
};
startAt = mkOption {
type = with types; either str (listOf str);
default = [];
example = "Sun 14:00:00";
description = ''
Automatically start this unit at the given date/time, which
must be in the format described in
<citerefentry><refentrytitle>systemd.time</refentrytitle>
<manvolnum>7</manvolnum></citerefentry>. This is equivalent
to adding a corresponding timer unit with
<option>OnCalendar</option> set to the value given here.
'';
apply = v: if isList v then v else [ v ];
};
config = mkMerge
[ (mkIf (config.preStart != "")
{ serviceConfig.ExecStartPre =
[ (makeJobScript "${name}-pre-start" config.preStart) ];
})
(mkIf (config.script != "")
{ serviceConfig.ExecStart =
makeJobScript "${name}-start" config.script + " " + config.scriptArgs;
})
(mkIf (config.postStart != "")
{ serviceConfig.ExecStartPost =
[ (makeJobScript "${name}-post-start" config.postStart) ];
})
(mkIf (config.reload != "")
{ serviceConfig.ExecReload =
makeJobScript "${name}-reload" config.reload;
})
(mkIf (config.preStop != "")
{ serviceConfig.ExecStop =
makeJobScript "${name}-pre-stop" config.preStop;
})
(mkIf (config.postStop != "")
{ serviceConfig.ExecStopPost =
makeJobScript "${name}-post-stop" config.postStop;
})
];
};
stage1ServiceOptions = {
imports = [
stage1CommonUnitOptions
serviceOptions
];
};
socketOptions = commonUnitOptions // {
socketOptions = { options = {
listenStreams = mkOption {
default = [];
@ -424,10 +475,24 @@ in rec {
'';
};
}; };
stage2SocketOptions = {
imports = [
stage2CommonUnitOptions
socketOptions
];
};
stage1SocketOptions = {
imports = [
stage1CommonUnitOptions
socketOptions
];
};
timerOptions = commonUnitOptions // {
timerOptions = { options = {
timerConfig = mkOption {
default = {};
@ -443,10 +508,24 @@ in rec {
'';
};
}; };
stage2TimerOptions = {
imports = [
stage2CommonUnitOptions
timerOptions
];
};
stage1TimerOptions = {
imports = [
stage1CommonUnitOptions
timerOptions
];
};
pathOptions = commonUnitOptions // {
pathOptions = { options = {
pathConfig = mkOption {
default = {};
@ -460,10 +539,24 @@ in rec {
'';
};
}; };
stage2PathOptions = {
imports = [
stage2CommonUnitOptions
pathOptions
];
};
stage1PathOptions = {
imports = [
stage1CommonUnitOptions
pathOptions
];
};
mountOptions = commonUnitOptions // {
mountOptions = { options = {
what = mkOption {
example = "/dev/sda1";
@ -505,9 +598,23 @@ in rec {
<manvolnum>5</manvolnum></citerefentry> for details.
'';
};
}; };
stage2MountOptions = {
imports = [
stage2CommonUnitOptions
mountOptions
];
};
automountOptions = commonUnitOptions // {
stage1MountOptions = {
imports = [
stage1CommonUnitOptions
mountOptions
];
};
automountOptions = { options = {
where = mkOption {
example = "/mnt";
@ -529,11 +636,23 @@ in rec {
<manvolnum>5</manvolnum></citerefentry> for details.
'';
};
}; };
stage2AutomountOptions = {
imports = [
stage2CommonUnitOptions
automountOptions
];
};
targetOptions = commonUnitOptions;
stage1AutomountOptions = {
imports = [
stage1CommonUnitOptions
automountOptions
];
};
sliceOptions = commonUnitOptions // {
sliceOptions = { options = {
sliceConfig = mkOption {
default = {};
@ -547,6 +666,20 @@ in rec {
'';
};
}; };
stage2SliceOptions = {
imports = [
stage2CommonUnitOptions
sliceOptions
];
};
stage1SliceOptions = {
imports = [
stage1CommonUnitOptions
sliceOptions
];
};
}

View File

@ -197,5 +197,6 @@ rec {
systemdUtils = {
lib = import ./systemd-lib.nix { inherit lib config pkgs; };
unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; };
types = import ./systemd-types.nix { inherit lib systemdUtils; };
};
}

View File

@ -15,6 +15,26 @@ let
mapAttrsToList (n: v: ''${n}=${escapeIfNeccessary (toString v)}'') attrs
);
osReleaseContents = {
NAME = "NixOS";
ID = "nixos";
VERSION = "${cfg.release} (${cfg.codeName})";
VERSION_CODENAME = toLower cfg.codeName;
VERSION_ID = cfg.release;
BUILD_ID = cfg.version;
PRETTY_NAME = "NixOS ${cfg.release} (${cfg.codeName})";
LOGO = "nix-snowflake";
HOME_URL = "https://nixos.org/";
DOCUMENTATION_URL = "https://nixos.org/learn.html";
SUPPORT_URL = "https://nixos.org/community.html";
BUG_REPORT_URL = "https://github.com/NixOS/nixpkgs/issues";
};
initrdReleaseContents = osReleaseContents // {
PRETTY_NAME = "${osReleaseContents.PRETTY_NAME} (Initrd)";
};
initrdRelease = pkgs.writeText "initrd-release" (attrsToText initrdReleaseContents);
in
{
imports = [
@ -119,20 +139,12 @@ in
DISTRIB_DESCRIPTION = "NixOS ${cfg.release} (${cfg.codeName})";
};
"os-release".text = attrsToText {
NAME = "NixOS";
ID = "nixos";
VERSION = "${cfg.release} (${cfg.codeName})";
VERSION_CODENAME = toLower cfg.codeName;
VERSION_ID = cfg.release;
BUILD_ID = cfg.version;
PRETTY_NAME = "NixOS ${cfg.release} (${cfg.codeName})";
LOGO = "nix-snowflake";
HOME_URL = "https://nixos.org/";
DOCUMENTATION_URL = "https://nixos.org/learn.html";
SUPPORT_URL = "https://nixos.org/community.html";
BUG_REPORT_URL = "https://github.com/NixOS/nixpkgs/issues";
};
"os-release".text = attrsToText osReleaseContents;
};
boot.initrd.systemd.contents = {
"/etc/os-release".source = initrdRelease;
"/etc/initrd-release".source = initrdRelease;
};
};

View File

@ -850,7 +850,6 @@
./services/networking/ofono.nix
./services/networking/oidentd.nix
./services/networking/onedrive.nix
./services/networking/openfire.nix
./services/networking/openvpn.nix
./services/networking/ostinato.nix
./services/networking/owamp.nix
@ -1181,6 +1180,7 @@
./system/boot/systemd/nspawn.nix
./system/boot/systemd/tmpfiles.nix
./system/boot/systemd/user.nix
./system/boot/systemd/initrd.nix
./system/boot/timesyncd.nix
./system/boot/tmp.nix
./system/etc/etc-activation.nix

View File

@ -23,8 +23,7 @@ with lib;
###### implementation
config = mkIf config.programs.adb.enable {
services.udev.packages = [ pkgs.android-udev-rules ];
# Give platform-tools lower priority so mke2fs+friends are taken from other packages first
environment.systemPackages = [ (lowPrio pkgs.androidenv.androidPkgs_9_0.platform-tools) ];
environment.systemPackages = [ pkgs.android-tools ];
users.groups.adbusers = {};
};
}

View File

@ -91,6 +91,7 @@ with lib;
(mkRemovedOptionModule [ "services" "shellinabox" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "gogoclient" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "virtuoso" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "openfire" ] "The corresponding package was removed from nixpkgs.")
# Do NOT add any option renames here, see top of the file
];

View File

@ -194,6 +194,7 @@ in {
extraGroups = [ cfg.group ];
home = "/var/lib/jupyter";
createHome = true;
isSystemUser = true;
useDefaultShell = true; # needed so that the user can start a terminal.
};
})

View File

@ -5,36 +5,15 @@ with lib;
let
cfg = config.services.collectd;
unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" ''
BaseDir "${cfg.dataDir}"
AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
Hostname "${config.networking.hostName}"
LoadPlugin syslog
<Plugin "syslog">
LogLevel "info"
NotifyLevel "OKAY"
</Plugin>
${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
LoadPlugin ${plugin}
<Plugin "${plugin}">
${pluginConfig}
</Plugin>
'') cfg.plugins)}
${concatMapStrings (f: ''
Include "${f}"
'') cfg.include}
${cfg.extraConfig}
'';
baseDirLine = ''BaseDir "${cfg.dataDir}"'';
unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" cfg.extraConfig;
conf = if cfg.validateConfig then
pkgs.runCommand "collectd.conf" {} ''
echo testing ${unvalidated_conf}
cp ${unvalidated_conf} collectd.conf
# collectd -t fails if BaseDir does not exist.
sed '1s/^BaseDir.*$/BaseDir "."/' ${unvalidated_conf} > collectd.conf
substituteInPlace collectd.conf --replace ${lib.escapeShellArgs [ baseDirLine ]} 'BaseDir "."'
${package}/bin/collectd -t -C collectd.conf
cp ${unvalidated_conf} $out
'' else unvalidated_conf;
@ -123,7 +102,8 @@ in {
extraConfig = mkOption {
default = "";
description = ''
Extra configuration for collectd.
Extra configuration for collectd. Use mkBefore to add lines before the
default config, and mkAfter to add them below.
'';
type = lines;
};
@ -131,6 +111,30 @@ in {
};
config = mkIf cfg.enable {
# 1200 is after the default (1000) but before mkAfter (1500).
services.collectd.extraConfig = lib.mkOrder 1200 ''
${baseDirLine}
AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
Hostname "${config.networking.hostName}"
LoadPlugin syslog
<Plugin "syslog">
LogLevel "info"
NotifyLevel "OKAY"
</Plugin>
${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
LoadPlugin ${plugin}
<Plugin "${plugin}">
${pluginConfig}
</Plugin>
'') cfg.plugins)}
${concatMapStrings (f: ''
Include "${f}"
'') cfg.include}
'';
systemd.tmpfiles.rules = [
"d '${cfg.dataDir}' - ${cfg.user} - - -"
];

View File

@ -9,20 +9,26 @@ with lib;
let
cfg = config.services.kea;
xor = x: y: (!x && y) || (x && !y);
format = pkgs.formats.json {};
ctrlAgentConfig = format.generate "kea-ctrl-agent.conf" {
chooseNotNull = x: y: if x != null then x else y;
ctrlAgentConfig = chooseNotNull cfg.ctrl-agent.configFile (format.generate "kea-ctrl-agent.conf" {
Control-agent = cfg.ctrl-agent.settings;
};
dhcp4Config = format.generate "kea-dhcp4.conf" {
});
dhcp4Config = chooseNotNull cfg.dhcp4.configFile (format.generate "kea-dhcp4.conf" {
Dhcp4 = cfg.dhcp4.settings;
};
dhcp6Config = format.generate "kea-dhcp6.conf" {
});
dhcp6Config = chooseNotNull cfg.dhcp6.configFile (format.generate "kea-dhcp6.conf" {
Dhcp6 = cfg.dhcp6.settings;
};
dhcpDdnsConfig = format.generate "kea-dhcp-ddns.conf" {
});
dhcpDdnsConfig = chooseNotNull cfg.dhcp-ddns.configFile (format.generate "kea-dhcp-ddns.conf" {
DhcpDdns = cfg.dhcp-ddns.settings;
};
});
package = pkgs.kea;
in
@ -45,6 +51,17 @@ in
'';
};
configFile = mkOption {
type = nullOr path;
default = null;
description = ''
Kea Control Agent configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html"/>.
Takes preference over <link linkend="opt-services.kea.ctrl-agent.settings">settings</link>.
Most users should prefer using <link linkend="opt-services.kea.ctrl-agent.settings">settings</link> instead.
'';
};
settings = mkOption {
type = format.type;
default = null;
@ -73,6 +90,17 @@ in
'';
};
configFile = mkOption {
type = nullOr path;
default = null;
description = ''
Kea DHCP4 configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html"/>.
Takes preference over <link linkend="opt-services.kea.dhcp4.settings">settings</link>.
Most users should prefer using <link linkend="opt-services.kea.dhcp4.settings">settings</link> instead.
'';
};
settings = mkOption {
type = format.type;
default = null;
@ -122,6 +150,17 @@ in
'';
};
configFile = mkOption {
type = nullOr path;
default = null;
description = ''
Kea DHCP6 configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html"/>.
Takes preference over <link linkend="opt-services.kea.dhcp6.settings">settings</link>.
Most users should prefer using <link linkend="opt-services.kea.dhcp6.settings">settings</link> instead.
'';
};
settings = mkOption {
type = format.type;
default = null;
@ -172,6 +211,17 @@ in
'';
};
configFile = mkOption {
type = nullOr path;
default = null;
description = ''
Kea DHCP-DDNS configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html"/>.
Takes preference over <link linkend="opt-services.kea.dhcp-ddns.settings">settings</link>.
Most users should prefer using <link linkend="opt-services.kea.dhcp-ddns.settings">settings</link> instead.
'';
};
settings = mkOption {
type = format.type;
default = null;
@ -214,6 +264,10 @@ in
}
(mkIf cfg.ctrl-agent.enable {
assertions = [{
assertion = xor (cfg.ctrl-agent.settings == null) (cfg.ctrl-agent.configFile == null);
message = "Either services.kea.ctrl-agent.settings or services.kea.ctrl-agent.configFile must be set to a non-null value.";
}];
environment.etc."kea/ctrl-agent.conf".source = ctrlAgentConfig;
@ -252,6 +306,10 @@ in
})
(mkIf cfg.dhcp4.enable {
assertions = [{
assertion = xor (cfg.dhcp4.settings == null) (cfg.dhcp4.configFile == null);
message = "Either services.kea.dhcp4.settings or services.kea.dhcp4.configFile must be set to a non-null value.";
}];
environment.etc."kea/dhcp4-server.conf".source = dhcp4Config;
@ -295,6 +353,10 @@ in
})
(mkIf cfg.dhcp6.enable {
assertions = [{
assertion = xor (cfg.dhcp6.settings == null) (cfg.dhcp6.configFile == null);
message = "Either services.kea.dhcp6.settings or services.kea.dhcp6.configFile must be set to a non-null value.";
}];
environment.etc."kea/dhcp6-server.conf".source = dhcp6Config;
@ -336,6 +398,10 @@ in
})
(mkIf cfg.dhcp-ddns.enable {
assertions = [{
assertion = xor (cfg.dhcp-ddns.settings == null) (cfg.dhcp-ddns.configFile == null);
message = "Either services.kea.dhcp-ddns.settings or services.kea.dhcp-ddns.configFile must be set to a non-null value.";
}];
environment.etc."kea/dhcp-ddns.conf".source = dhcpDdnsConfig;

View File

@ -1,56 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
{
###### interface
options = {
services.openfire = {
enable = mkEnableOption "OpenFire XMPP server";
usePostgreSQL = mkOption {
type = types.bool;
default = true;
description = "
Whether you use PostgreSQL service for your storage back-end.
";
};
};
};
###### implementation
config = mkIf config.services.openfire.enable {
assertions = singleton
{ assertion = !(config.services.openfire.usePostgreSQL -> config.services.postgresql.enable);
message = "OpenFire configured to use PostgreSQL but services.postgresql.enable is not enabled.";
};
systemd.services.openfire = {
description = "OpenFire XMPP server";
wantedBy = [ "multi-user.target" ];
after = [ "networking.target" ] ++
optional config.services.openfire.usePostgreSQL "postgresql.service";
path = with pkgs; [ jre openfire coreutils which gnugrep gawk gnused ];
script = ''
export HOME=/tmp
mkdir /var/log/openfire || true
mkdir /etc/openfire || true
for i in ${pkgs.openfire}/conf.inst/*; do
if ! test -f /etc/openfire/$(basename $i); then
cp $i /etc/openfire/
fi
done
openfire start
''; # */
};
};
}

View File

@ -99,6 +99,7 @@ in
ristretto
xfce4-appfinder
xfce4-notifyd
xfce4-screensaver
xfce4-screenshooter
xfce4-session
xfce4-settings
@ -168,5 +169,6 @@ in
xfce4-notifyd
];
security.pam.services.xfce4-screensaver.unixAuth = true;
};
}

View File

@ -703,8 +703,12 @@ in
}
];
system.build =
{ inherit bootStage1 initialRamdisk initialRamdiskSecretAppender extraUtils; };
system.build = mkMerge [
{ inherit bootStage1 initialRamdiskSecretAppender extraUtils; }
# generated in nixos/modules/system/boot/systemd/initrd.nix
(mkIf (!config.boot.initrd.systemd.enable) { inherit initialRamdisk; })
];
system.requiredKernelConfig = with config.lib.kernelConfig; [
(isYes "TMPFS")

View File

@ -12,10 +12,6 @@ for o in $(</proc/cmdline); do
# Show each command.
set -x
;;
resume=*)
set -- $(IFS==; echo $o)
resumeDevice=$2
;;
esac
done
@ -72,46 +68,12 @@ if [ -n "@readOnlyStore@" ]; then
fi
# Provide a /etc/mtab.
install -m 0755 -d /etc
test -e /etc/fstab || touch /etc/fstab # to shut up mount
rm -f /etc/mtab* # not that we care about stale locks
ln -s /proc/mounts /etc/mtab
# More special file systems, initialise required directories.
[ -e /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb # UML doesn't have USB by default
install -m 01777 -d /tmp
install -m 0755 -d /var/{log,lib,db} /nix/var /etc/nixos/ \
/run/lock /home /bin # for the /bin/sh symlink
# Miscellaneous boot time cleanup.
rm -rf /var/run /var/lock
rm -f /etc/{group,passwd,shadow}.lock
# Also get rid of temporary GC roots.
rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots
# For backwards compatibility, symlink /var/run to /run, and /var/lock
# to /run/lock.
ln -s /run /var/run
ln -s /run/lock /var/lock
# Clear the resume device.
if test -n "$resumeDevice"; then
mkswap "$resumeDevice" || echo 'Failed to clear saved image.'
fi
# Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
resolvconf -m 1000 -a host </etc/resolv.conf
fi
# Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
# Only at this point are all the necessary prerequisites ready for these commands.
exec {logOutFd}>&1 {logErrFd}>&2
@ -127,28 +89,20 @@ else
fi
# Required by the activation script
install -m 0755 -d /etc /etc/nixos
install -m 01777 -d /tmp
# Run the script that performs all configuration activation that does
# not have to be done at boot time.
echo "running activation script..."
$systemConfig/activate
# Restore the system time from the hardware clock. We do this after
# running the activation script to be sure that /etc/localtime points
# at the current time zone.
if [ -e /dev/rtc ]; then
hwclock --hctosys
fi
# Record the boot configuration.
ln -sfn "$systemConfig" /run/booted-system
# Prevent the booted system from being garbage-collected. If it weren't
# a gcroot, if we were running a different kernel, switched system,
# and garbage collected all, we could not load kernel modules anymore.
ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system
# Run any user-specified commands.
@shell@ @postBootCommands@
@ -169,4 +123,4 @@ exec {logOutFd}>&- {logErrFd}>&-
# Start systemd in a clean environment.
echo "starting systemd..."
exec env - @systemdExecutable@ "$@"
exec @systemdExecutable@ "$@"

View File

@ -11,14 +11,7 @@ let
systemd = cfg.package;
inherit (systemdUtils.lib)
makeUnit
generateUnits
makeJobScript
unitConfig
serviceConfig
mountConfig
automountConfig
commonUnitText
targetToUnit
serviceToUnit
socketToUnit
@ -185,13 +178,7 @@ in
systemd.units = mkOption {
description = "Definition of systemd units.";
default = {};
type = with types; attrsOf (submodule (
{ name, config, ... }:
{ options = concreteUnitOptions;
config = {
unit = mkDefault (makeUnit name config);
};
}));
type = systemdUtils.types.units;
};
systemd.packages = mkOption {
@ -203,37 +190,37 @@ in
systemd.targets = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] );
type = systemdUtils.types.targets;
description = "Definition of systemd target units.";
};
systemd.services = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ]);
type = systemdUtils.types.services;
description = "Definition of systemd service units.";
};
systemd.sockets = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ]);
type = systemdUtils.types.sockets;
description = "Definition of systemd socket units.";
};
systemd.timers = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ]);
type = systemdUtils.types.timers;
description = "Definition of systemd timer units.";
};
systemd.paths = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]);
type = systemdUtils.types.paths;
description = "Definition of systemd path units.";
};
systemd.mounts = mkOption {
default = [];
type = with types; listOf (submodule [ { options = mountOptions; } unitConfig mountConfig ]);
type = systemdUtils.types.mounts;
description = ''
Definition of systemd mount units.
This is a list instead of an attrSet, because systemd mandates the names to be derived from
@ -243,7 +230,7 @@ in
systemd.automounts = mkOption {
default = [];
type = with types; listOf (submodule [ { options = automountOptions; } unitConfig automountConfig ]);
type = systemdUtils.types.automounts;
description = ''
Definition of systemd automount units.
This is a list instead of an attrSet, because systemd mandates the names to be derived from
@ -253,7 +240,7 @@ in
systemd.slices = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig] );
type = systemdUtils.types.slices;
description = "Definition of slice configurations.";
};
@ -362,10 +349,11 @@ in
type = types.listOf types.str;
example = [ "systemd-backlight@.service" ];
description = ''
A list of units to suppress when generating system systemd configuration directory. This has
A list of units to skip when generating system systemd configuration directory. This has
priority over upstream units, <option>systemd.units</option>, and
<option>systemd.additionalUpstreamSystemUnits</option>. The main purpose of this is to
suppress a upstream systemd unit with any modifications made to it by other NixOS modules.
prevent a upstream systemd unit from being added to the initrd with any modifications made to it
by other NixOS modules.
'';
};
@ -482,7 +470,12 @@ in
enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedSystemUnits) cfg.units;
in ({
"systemd/system".source = generateUnits "system" enabledUnits enabledUpstreamSystemUnits upstreamSystemWants;
"systemd/system".source = generateUnits {
type = "system";
units = enabledUnits;
upstreamUnits = enabledUpstreamSystemUnits;
upstreamWants = upstreamSystemWants;
};
"systemd/system.conf".text = ''
[Manager]

View File

@ -0,0 +1,417 @@
{ lib, config, utils, pkgs, ... }:
with lib;
let
inherit (utils) systemdUtils escapeSystemdPath;
inherit (systemdUtils.lib)
generateUnits
pathToUnit
serviceToUnit
sliceToUnit
socketToUnit
targetToUnit
timerToUnit
mountToUnit
automountToUnit;
cfg = config.boot.initrd.systemd;
# Copied from fedora
upstreamUnits = [
"basic.target"
"ctrl-alt-del.target"
"emergency.service"
"emergency.target"
"final.target"
"halt.target"
"initrd-cleanup.service"
"initrd-fs.target"
"initrd-parse-etc.service"
"initrd-root-device.target"
"initrd-root-fs.target"
"initrd-switch-root.service"
"initrd-switch-root.target"
"initrd.target"
"initrd-udevadm-cleanup-db.service"
"kexec.target"
"kmod-static-nodes.service"
"local-fs-pre.target"
"local-fs.target"
"multi-user.target"
"paths.target"
"poweroff.target"
"reboot.target"
"rescue.service"
"rescue.target"
"rpcbind.target"
"shutdown.target"
"sigpwr.target"
"slices.target"
"sockets.target"
"swap.target"
"sysinit.target"
"sys-kernel-config.mount"
"syslog.socket"
"systemd-ask-password-console.path"
"systemd-ask-password-console.service"
"systemd-fsck@.service"
"systemd-halt.service"
"systemd-hibernate-resume@.service"
"systemd-journald-audit.socket"
"systemd-journald-dev-log.socket"
"systemd-journald.service"
"systemd-journald.socket"
"systemd-kexec.service"
"systemd-modules-load.service"
"systemd-poweroff.service"
"systemd-random-seed.service"
"systemd-reboot.service"
"systemd-sysctl.service"
"systemd-tmpfiles-setup-dev.service"
"systemd-tmpfiles-setup.service"
"systemd-udevd-control.socket"
"systemd-udevd-kernel.socket"
"systemd-udevd.service"
"systemd-udev-settle.service"
"systemd-udev-trigger.service"
"systemd-vconsole-setup.service"
"timers.target"
"umount.target"
# TODO: Networking
# "network-online.target"
# "network-pre.target"
# "network.target"
# "nss-lookup.target"
# "nss-user-lookup.target"
# "remote-fs-pre.target"
# "remote-fs.target"
] ++ cfg.additionalUpstreamUnits;
upstreamWants = [
"sysinit.target.wants"
];
enabledUpstreamUnits = filter (n: ! elem n cfg.suppressedUnits) upstreamUnits;
enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedUnits) cfg.units;
stage1Units = generateUnits {
type = "initrd";
units = enabledUnits;
upstreamUnits = enabledUpstreamUnits;
inherit upstreamWants;
inherit (cfg) packages package;
};
fileSystems = filter utils.fsNeededForBoot config.system.build.fileSystems;
fstab = pkgs.writeText "fstab" (lib.concatMapStringsSep "\n"
({ fsType, mountPoint, device, options, autoFormat, autoResize, ... }@fs: let
opts = options ++ optional autoFormat "x-systemd.makefs" ++ optional autoResize "x-systemd.growfs";
in "${device} /sysroot${mountPoint} ${fsType} ${lib.concatStringsSep "," opts}") fileSystems);
kernel-name = config.boot.kernelPackages.kernel.name or "kernel";
modulesTree = config.system.modulesTree.override { name = kernel-name + "-modules"; };
firmware = config.hardware.firmware;
# Determine the set of modules that we need to mount the root FS.
modulesClosure = pkgs.makeModulesClosure {
rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules;
kernel = modulesTree;
firmware = firmware;
allowMissing = false;
};
initrdBinEnv = pkgs.buildEnv {
name = "initrd-emergency-env";
paths = map getBin cfg.initrdBin;
pathsToLink = ["/bin" "/sbin"];
# Make recovery easier
postBuild = ''
ln -s ${cfg.package.util-linux}/bin/mount $out/bin/
ln -s ${cfg.package.util-linux}/bin/umount $out/bin/
'';
};
initialRamdisk = pkgs.makeInitrdNG {
contents = map (path: { object = path; symlink = ""; }) (subtractLists cfg.suppressedStorePaths cfg.storePaths)
++ mapAttrsToList (_: v: { object = v.source; symlink = v.target; }) (filterAttrs (_: v: v.enable) cfg.contents);
};
in {
options.boot.initrd.systemd = {
enable = mkEnableOption ''systemd in initrd.
Note: This is in very early development and is highly
experimental. Most of the features NixOS supports in initrd are
not yet supported by the intrd generated with this option.
'';
package = (mkPackageOption pkgs "systemd" {
default = "systemdMinimal";
}) // {
visible = false;
};
contents = mkOption {
description = "Set of files that have to be linked into the initrd";
example = literalExpression ''
{
"/etc/hostname".text = "mymachine";
}
'';
visible = false;
default = {};
type = types.attrsOf (types.submodule ({ config, options, name, ... }: {
options = {
enable = mkEnableOption "copying of this file to initrd and symlinking it" // { default = true; };
target = mkOption {
type = types.path;
description = ''
Path of the symlink.
'';
default = name;
};
text = mkOption {
default = null;
type = types.nullOr types.lines;
description = "Text of the file.";
};
source = mkOption {
type = types.path;
description = "Path of the source file.";
};
};
config = {
source = mkIf (config.text != null) (
let name' = "initrd-" + baseNameOf name;
in mkDerivedConfig options.text (pkgs.writeText name')
);
};
}));
};
storePaths = mkOption {
description = ''
Store paths to copy into the initrd as well.
'';
type = types.listOf types.singleLineStr;
default = [];
};
suppressedStorePaths = mkOption {
description = ''
Store paths specified in the storePaths option that
should not be copied.
'';
type = types.listOf types.singleLineStr;
default = [];
};
emergencyAccess = mkOption {
type = with types; oneOf [ bool singleLineStr ];
visible = false;
description = ''
Set to true for unauthenticated emergency access, and false for
no emergency access.
Can also be set to a hashed super user password to allow
authenticated access to the emergency mode.
'';
default = false;
};
initrdBin = mkOption {
type = types.listOf types.package;
default = [];
visible = false;
description = ''
Packages to include in /bin for the stage 1 emergency shell.
'';
};
additionalUpstreamUnits = mkOption {
default = [ ];
type = types.listOf types.str;
visible = false;
example = [ "debug-shell.service" "systemd-quotacheck.service" ];
description = ''
Additional units shipped with systemd that shall be enabled.
'';
};
suppressedUnits = mkOption {
default = [ ];
type = types.listOf types.str;
example = [ "systemd-backlight@.service" ];
visible = false;
description = ''
A list of units to skip when generating system systemd configuration directory. This has
priority over upstream units, <option>boot.initrd.systemd.units</option>, and
<option>boot.initrd.systemd.additionalUpstreamUnits</option>. The main purpose of this is to
prevent a upstream systemd unit from being added to the initrd with any modifications made to it
by other NixOS modules.
'';
};
units = mkOption {
description = "Definition of systemd units.";
default = {};
visible = false;
type = systemdUtils.types.units;
};
packages = mkOption {
default = [];
visible = false;
type = types.listOf types.package;
example = literalExpression "[ pkgs.systemd-cryptsetup-generator ]";
description = "Packages providing systemd units and hooks.";
};
targets = mkOption {
default = {};
visible = false;
type = systemdUtils.types.initrdTargets;
description = "Definition of systemd target units.";
};
services = mkOption {
default = {};
type = systemdUtils.types.initrdServices;
visible = false;
description = "Definition of systemd service units.";
};
sockets = mkOption {
default = {};
type = systemdUtils.types.initrdSockets;
visible = false;
description = "Definition of systemd socket units.";
};
timers = mkOption {
default = {};
type = systemdUtils.types.initrdTimers;
visible = false;
description = "Definition of systemd timer units.";
};
paths = mkOption {
default = {};
type = systemdUtils.types.initrdPaths;
visible = false;
description = "Definition of systemd path units.";
};
mounts = mkOption {
default = [];
type = systemdUtils.types.initrdMounts;
visible = false;
description = ''
Definition of systemd mount units.
This is a list instead of an attrSet, because systemd mandates the names to be derived from
the 'where' attribute.
'';
};
automounts = mkOption {
default = [];
type = systemdUtils.types.automounts;
visible = false;
description = ''
Definition of systemd automount units.
This is a list instead of an attrSet, because systemd mandates the names to be derived from
the 'where' attribute.
'';
};
slices = mkOption {
default = {};
type = systemdUtils.types.slices;
visible = false;
description = "Definition of slice configurations.";
};
};
config = mkIf (config.boot.initrd.enable && cfg.enable) {
system.build = { inherit initialRamdisk; };
boot.initrd.systemd = {
initrdBin = [pkgs.bash pkgs.coreutils pkgs.kmod cfg.package] ++ config.system.fsPackages;
contents = {
"/init".source = "${cfg.package}/lib/systemd/systemd";
"/etc/systemd/system".source = stage1Units;
"/etc/systemd/system.conf".text = ''
[Manager]
DefaultEnvironment=PATH=/bin:/sbin
'';
"/etc/fstab".source = fstab;
"/lib/modules".source = "${modulesClosure}/lib/modules";
"/etc/modules-load.d/nixos.conf".text = concatStringsSep "\n" config.boot.initrd.kernelModules;
"/etc/passwd".source = "${pkgs.fakeNss}/etc/passwd";
"/etc/shadow".text = "root:${if isBool cfg.emergencyAccess then "!" else cfg.emergencyAccess}:::::::";
"/bin".source = "${initrdBinEnv}/bin";
"/sbin".source = "${initrdBinEnv}/sbin";
"/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /sbin/modprobe";
};
storePaths = [
# TODO: Limit this to the bare necessities
"${cfg.package}/lib"
"${cfg.package.util-linux}/bin/mount"
"${cfg.package.util-linux}/bin/umount"
"${cfg.package.util-linux}/bin/sulogin"
# so NSS can look up usernames
"${pkgs.glibc}/lib/libnss_files.so"
];
targets.initrd.aliases = ["default.target"];
units =
mapAttrs' (n: v: nameValuePair "${n}.path" (pathToUnit n v)) cfg.paths
// mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.services
// mapAttrs' (n: v: nameValuePair "${n}.slice" (sliceToUnit n v)) cfg.slices
// mapAttrs' (n: v: nameValuePair "${n}.socket" (socketToUnit n v)) cfg.sockets
// mapAttrs' (n: v: nameValuePair "${n}.target" (targetToUnit n v)) cfg.targets
// mapAttrs' (n: v: nameValuePair "${n}.timer" (timerToUnit n v)) cfg.timers
// listToAttrs (map
(v: let n = escapeSystemdPath v.where;
in nameValuePair "${n}.mount" (mountToUnit n v)) cfg.mounts)
// listToAttrs (map
(v: let n = escapeSystemdPath v.where;
in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
services.emergency = mkIf (isBool cfg.emergencyAccess && cfg.emergencyAccess) {
environment.SYSTEMD_SULOGIN_FORCE = "1";
};
# The unit in /run/systemd/generator shadows the unit in
# /etc/systemd/system, but will still apply drop-ins from
# /etc/systemd/system/foo.service.d/
#
# We need IgnoreOnIsolate, otherwise the Requires dependency of
# a mount unit on its makefs unit causes it to be unmounted when
# we isolate for switch-root. Use a dummy package so that
# generateUnits will generate drop-ins instead of unit files.
packages = [(pkgs.runCommand "dummy" {} ''
mkdir -p $out/etc/systemd/system
touch $out/etc/systemd/system/systemd-{makefs,growfs}@.service
'')];
services."systemd-makefs@".unitConfig.IgnoreOnIsolate = true;
services."systemd-growfs@".unitConfig.IgnoreOnIsolate = true;
};
};
}

View File

@ -116,7 +116,13 @@ in {
in
mkMerge [
(mkIf (cfg != {}) {
environment.etc."systemd/nspawn".source = mkIf (cfg != {}) (generateUnits' false "nspawn" units [] []);
environment.etc."systemd/nspawn".source = mkIf (cfg != {}) (generateUnits {
allowCollisions = false;
type = "nspawn";
inherit units;
upstreamUnits = [];
upstreamWants = [];
});
})
{
systemd.targets.multi-user.wants = [ "machines.target" ];

View File

@ -100,5 +100,21 @@ in
'';
})
];
systemd.tmpfiles.rules = [
"d /nix/var 0755 root root - -"
"L+ /nix/var/nix/gcroots/booted-system 0755 root root - /run/booted-system"
"d /run/lock 0755 root root - -"
"d /var/db 0755 root root - -"
"L /etc/mtab - - - - ../proc/mounts"
"L /var/lock - - - - ../run/lock"
# Boot-time cleanup
"R! /etc/group.lock - - - - -"
"R! /etc/passwd.lock - - - - -"
"R! /etc/shadow.lock - - - - -"
"R! /etc/mtab* - - - - -"
"R! /nix/var/nix/gcroots/tmp - - - - -"
"R! /nix/var/nix/temproots - - - - -"
];
};
}

View File

@ -12,10 +12,6 @@ let
(systemdUtils.lib)
makeUnit
generateUnits
makeJobScript
unitConfig
serviceConfig
commonUnitText
targetToUnit
serviceToUnit
socketToUnit
@ -57,48 +53,42 @@ in {
systemd.user.units = mkOption {
description = "Definition of systemd per-user units.";
default = {};
type = with types; attrsOf (submodule (
{ name, config, ... }:
{ options = concreteUnitOptions;
config = {
unit = mkDefault (makeUnit name config);
};
}));
type = systemdUtils.types.units;
};
systemd.user.paths = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]);
type = systemdUtils.types.paths;
description = "Definition of systemd per-user path units.";
};
systemd.user.services = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ] );
type = systemdUtils.types.services;
description = "Definition of systemd per-user service units.";
};
systemd.user.slices = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig ] );
type = systemdUtils.types.slices;
description = "Definition of systemd per-user slice units.";
};
systemd.user.sockets = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ] );
type = systemdUtils.types.sockets;
description = "Definition of systemd per-user socket units.";
};
systemd.user.targets = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] );
type = systemdUtils.types.targets;
description = "Definition of systemd per-user target units.";
};
systemd.user.timers = mkOption {
default = {};
type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ] );
type = systemdUtils.types.timers;
description = "Definition of systemd per-user timer units.";
};
@ -119,7 +109,12 @@ in {
];
environment.etc = {
"systemd/user".source = generateUnits "user" cfg.units upstreamUserUnits [];
"systemd/user".source = generateUnits {
type = "user";
inherit (cfg) units;
upstreamUnits = upstreamUserUnits;
upstreamWants = [];
};
"systemd/user.conf".text = ''
[Manager]

View File

@ -352,7 +352,7 @@ in
unitConfig.DefaultDependencies = false; # needed to prevent a cycle
serviceConfig.Type = "oneshot";
};
in listToAttrs (map formatDevice (filter (fs: fs.autoFormat) fileSystems)) // {
in listToAttrs (map formatDevice (filter (fs: fs.autoFormat && !(utils.fsNeededForBoot fs)) fileSystems)) // {
# Mount /sys/fs/pstore for evacuating panic logs and crashdumps from persistent storage onto the disk using systemd-pstore.
# This cannot be done with the other special filesystems because the pstore module (which creates the mount point) is not loaded then.
"mount-pstore" = {

View File

@ -923,6 +923,8 @@ in
mkVMOverride (cfg.fileSystems //
{
"/".device = cfg.bootDevice;
"/".fsType = "ext4";
"/".autoFormat = true;
"/tmp" = mkIf config.boot.tmpOnTmpfs
{ device = "tmpfs";
@ -953,6 +955,28 @@ in
};
} // lib.mapAttrs' mkSharedDir cfg.sharedDirectories);
boot.initrd.systemd = lib.mkIf (config.boot.initrd.systemd.enable && cfg.writableStore) {
mounts = [{
where = "/sysroot/nix/store";
what = "overlay";
type = "overlay";
options = "lowerdir=/sysroot/nix/.ro-store,upperdir=/sysroot/nix/.rw-store/store,workdir=/sysroot/nix/.rw-store/work";
wantedBy = ["local-fs.target"];
before = ["local-fs.target"];
requires = ["sysroot-nix-.ro\\x2dstore.mount" "sysroot-nix-.rw\\x2dstore.mount" "rw-store.service"];
after = ["sysroot-nix-.ro\\x2dstore.mount" "sysroot-nix-.rw\\x2dstore.mount" "rw-store.service"];
unitConfig.IgnoreOnIsolate = true;
}];
services.rw-store = {
after = ["sysroot-nix-.rw\\x2dstore.mount"];
unitConfig.DefaultDependencies = false;
serviceConfig = {
Type = "oneshot";
ExecStart = "/bin/mkdir -p 0755 /sysroot/nix/.rw-store/store /sysroot/nix/.rw-store/work /sysroot/nix/store";
};
};
};
swapDevices = mkVMOverride [ ];
boot.initrd.luks.devices = mkVMOverride {};

View File

@ -514,6 +514,7 @@ in
systemd-confinement = handleTest ./systemd-confinement.nix {};
systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
systemd-escaping = handleTest ./systemd-escaping.nix {};
systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
systemd-journal = handleTest ./systemd-journal.nix {};
systemd-machinectl = handleTest ./systemd-machinectl.nix {};
systemd-networkd = handleTest ./systemd-networkd.nix {};

View File

@ -42,7 +42,7 @@ let
nodes = { };
testScript =
''
nodes.machine = create_machine(${machineConfig})
machine = create_machine(${machineConfig})
machine.start()
machine.wait_for_unit("multi-user.target")
machine.succeed("nix store verify --no-trust -r --option experimental-features nix-command /run/current-system")
@ -83,7 +83,7 @@ let
name = "boot-netboot-" + name;
nodes = { };
testScript = ''
nodes.machine = create_machine(${machineConfig})
machine = create_machine(${machineConfig})
machine.start()
machine.wait_for_unit("multi-user.target")
machine.shutdown()
@ -138,7 +138,7 @@ in {
if os.system("qemu-img create -f qcow2 -F raw -b ${sdImage} ${mutableImage}") != 0:
raise RuntimeError("Could not create mutable linked image")
nodes.machine = create_machine(${machineConfig})
machine = create_machine(${machineConfig})
machine.start()
machine.wait_for_unit("multi-user.target")
machine.succeed("nix store verify -r --no-trust --option experimental-features nix-command /run/current-system")

View File

@ -3,11 +3,14 @@ import ./make-test-python.nix ({ pkgs, ... }: {
meta = { };
nodes.machine =
{ pkgs, ... }:
{ pkgs, lib, ... }:
{
services.collectd = {
enable = true;
extraConfig = lib.mkBefore ''
Interval 30
'';
plugins = {
rrdtool = ''
DataDir "/var/lib/collectd/rrd"
@ -26,6 +29,8 @@ import ./make-test-python.nix ({ pkgs, ... }: {
machine.succeed(f"rrdinfo {file} | logger")
# check that this file contains a shortterm metric
machine.succeed(f"rrdinfo {file} | grep -F 'ds[shortterm].min = '")
# check that interval was set before the plugins
machine.succeed(f"rrdinfo {file} | grep -F 'step = 30'")
# check that there are frequent updates
machine.succeed(f"cp {file} before")
machine.wait_until_fails(f"cmp before {file}")

View File

@ -39,7 +39,7 @@ in makeTest {
nodes = {
# System configuration used for installing the installedConfig from above.
nodes.machine = { config, lib, pkgs, ... }: with lib; {
machine = { config, lib, pkgs, ... }: with lib; {
imports = [
../modules/profiles/installation-device.nix
../modules/profiles/base.nix
@ -117,6 +117,11 @@ in makeTest {
resume = create_named_machine("resume")
resume.start()
resume.succeed("grep 'not persisted to disk' /run/test/suspended")
# Ensure we don't restore from hibernation when booting again
resume.crash()
resume.wait_for_unit("default.target")
resume.fail("grep 'not persisted to disk' /run/test/suspended")
'';
}

View File

@ -0,0 +1,27 @@
import ./make-test-python.nix ({ lib, pkgs, ... }: {
name = "systemd-initrd-simple";
machine = { pkgs, ... }: {
boot.initrd.systemd = {
enable = true;
emergencyAccess = true;
};
fileSystems = lib.mkVMOverride {
"/".autoResize = true;
};
};
testScript = ''
import subprocess
oldAvail = machine.succeed("df --output=avail / | sed 1d")
machine.shutdown()
subprocess.check_call(["qemu-img", "resize", "vm-state-machine/machine.qcow2", "+1G"])
machine.start()
newAvail = machine.succeed("df --output=avail / | sed 1d")
assert int(oldAvail) < int(newAvail), "File system did not grow"
'';
})

View File

@ -1,29 +0,0 @@
{ lib, stdenv, fetchFromGitHub, libjack2, gtk2, lv2, faust, pkg-config }:
stdenv.mkDerivation {
version = "unstable-2015-05-21";
pname = "foo-yc20";
src = fetchFromGitHub {
owner = "sampov2";
repo = "foo-yc20";
rev = "edd9d14c91229429b14270a181743e1046160ca8";
sha256 = "0i8261n95n4xic766h70xkrpbvw3sag96n1883ahmg6h7yb94avq";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libjack2 gtk2 lv2 faust ];
makeFlags = [ "PREFIX=$(out)" ];
# remove lv2 until https://github.com/sampov2/foo-yc20/issues/6 is resolved
postInstallFixup = "rm -rf $out/lib/lv2";
meta = with lib; {
broken = true; # see: https://github.com/sampov2/foo-yc20/issues/7
description = "A Faust implementation of a 1969 designed Yamaha combo organ, the YC-20";
homepage = "https://github.com/sampov2/foo-yc20";
license = with licenses; [ bsd3 lgpl21 mpl11 ];
maintainers = [ maintainers.magnetophon ];
platforms = platforms.linux;
};
}

View File

@ -4,6 +4,7 @@
, llvmPackages
, protobuf
, rustPlatform
, stdenv
, writeShellScriptBin
, Security
}:
@ -33,7 +34,7 @@ rustPlatform.buildRustPackage rec {
cargoSha256 = "sha256-Gc5WbayQUlsl7Fk8NyLPh2Zg2yrLl3WJqKorNZMLi94=";
buildInputs = [ Security ];
buildInputs = lib.optional stdenv.isDarwin [ Security ];
nativeBuildInputs = [ clang ];

View File

@ -1,84 +0,0 @@
diff --git a/build/openal.cbd b/build/openal.cbd
index d18e62d..74af061 100644
--- a/build/openal.cbd
+++ b/build/openal.cbd
@@ -23,7 +23,7 @@ CFLAGS += ' -DUSE_OPENAL'
# --
do ifplat unix
- LDFLAGS += ' `openal-config --libs`'
+ LDFLAGS += ' -lopenal'
else
LDFLAGS += ' -lOpenAL32'
done
diff --git a/build/alleggl.cbd b/build/alleggl.cbd
index e2708ff..e826371 100644
--- a/build/alleggl.cbd
+++ b/build/alleggl.cbd
@@ -22,7 +22,7 @@ CFLAGS += ' -DUSE_ALLEGROGL'
# --
-LIBAGL = agl
+LIBAGL = alleggl
ifopt debug LIBAGL = 'agld'
diff --git a/src/apu.cpp b/src/apu.cpp
index af59f1c..893a798 100644
--- a/src/apu.cpp
+++ b/src/apu.cpp
@@ -1930,7 +1930,7 @@ static void amplify(real& sample)
gain -= releaseRate;
}
- real output = (1.0 / max(gain, EPSILON));
+ real output = (1.0 / MAX(gain, EPSILON));
output = fixf(output, apu_agc_gain_floor, apu_agc_gain_ceiling);
sample *= output;
}
diff --git a/src/audio.cpp b/src/audio.cpp
index b9650dc..c21c05e 100644
--- a/src/audio.cpp
+++ b/src/audio.cpp
@@ -7,6 +7,7 @@
You must read and accept the license prior to use. */
#include <allegro.h>
+#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
@@ -234,7 +235,7 @@ void audio_update(void)
const unsigned queuedFrames = (audioQueue.size() / audio_channels);
if(queuedFrames > 0) {
// Determine how many frames we want to make room for.
- const unsigned framesToAdd = min(queuedFrames, audio_buffer_size_frames);
+ const unsigned framesToAdd = MIN(queuedFrames, audio_buffer_size_frames);
// Make room for the frames in the buffer.
const unsigned framesToMove = (audioBufferedFrames - framesToAdd);
if(framesToMove > 0) {
@@ -258,7 +259,7 @@ void audio_update(void)
// Determine how many frames are available in the buffer.
const unsigned bufferableFrames = (audio_buffer_size_frames - audioBufferedFrames);
// Determine the number of frames to copy to the buffer.
- const unsigned framesToCopy = min(queuedFrames, bufferableFrames);
+ const unsigned framesToCopy = MIN(queuedFrames, bufferableFrames);
// Copy frames to the buffer.
for(unsigned frame = 0; frame < framesToCopy; frame++) {
diff --git a/src/include/common.h b/src/include/common.h
index be28795..e2d21d1 100644
--- a/src/include/common.h
+++ b/src/include/common.h
@@ -41,8 +41,10 @@ extern "C" {
#define true TRUE
#define false FALSE
+/*
#define min(x,y) MIN((x),(y))
#define max(x,y) MAX((x),(y))
+*/
#define true_or_false(x) ((x) ? true : false)

View File

@ -1,34 +0,0 @@
{lib, stdenv, fetchurl, allegro, openal, libGLU, libGL, zlib, hawknl, freeglut, libX11,
libXxf86vm, libXcursor, libXpm }:
stdenv.mkDerivation rec {
pname = "fakenes";
version = "0.5.9-beta3";
src = fetchurl {
url = "mirror://sourceforge/fakenes/fakenes-${version}.tar.gz";
sha256 = "026h67s4pzc1vma59pmzk02iy379255qbai2q74wln9bxqcpniy4";
};
buildInputs = [ allegro openal libGLU libGL zlib hawknl freeglut libX11
libXxf86vm libXcursor libXpm ];
hardeningDisable = [ "format" ];
installPhase = ''
mkdir -p $out/bin
cp fakenes $out/bin
'';
NIX_LDFLAGS = "-lX11 -lXxf86vm -lXcursor -lXpm";
patches = [ ./build.patch ];
meta = {
homepage = "http://fakenes.sourceforge.net/";
license = lib.licenses.gpl2Plus;
description = "Portable Open Source NES Emulator";
platforms = lib.platforms.linux;
broken = true;
};
}

View File

@ -1,41 +0,0 @@
{ lib, stdenv
, fetchurl, qttools, pkg-config
, minizip, zlib
, qtbase, qtsvg, qtmultimedia, qtwebkit, qttranslations, qtxmlpatterns
, rsync, SDL2, xwininfo
, util-linux
, xorg
}:
stdenv.mkDerivation rec {
pname = "qmc2";
version = "0.195";
src = fetchurl {
url = "mirror://sourceforge/project/qmc2/qmc2/${version}/${pname}-${version}.tar.gz";
sha256 = "1dzmjlfk8pdspns6zg1jmd5fqzg8igd4q38cz4a1vf39lx74svns";
};
preBuild = ''
patchShebangs scripts
'';
nativeBuildInputs = [ qttools pkg-config ];
buildInputs = [ minizip qtbase qtsvg qtmultimedia qtwebkit
qttranslations qtxmlpatterns rsync SDL2
xwininfo zlib util-linux xorg.libxcb ];
makeFlags = [ "DESTDIR=$(out)"
"PREFIX=/"
"DATADIR=/share/"
"SYSCONFDIR=/etc" ];
meta = with lib; {
description = "A Qt frontend for MAME/MESS";
homepage = "https://qmc2.batcom-it.net";
license = licenses.gpl2;
maintainers = [ ];
platforms = platforms.linux;
broken = true;
};
}

View File

@ -1,54 +0,0 @@
{ lib
, stdenv
, fetchhg
, fetchpatch
, cmake
, qt4
, fftw
, graphicsmagick_q16
, lcms2
, lensfun
, pkg-config
, libjpeg
, exiv2
, liblqr1
}:
stdenv.mkDerivation {
pname = "photivo";
version = "2014-01-25";
src = fetchhg {
url = "http://code.google.com/p/photivo/";
rev = "d687864489da";
sha256 = "0f6y18k7db2ci6xn664zcwm1g1k04sdv7gg1yd5jk41bndjb7z8h";
};
patches = [
# Patch fixing build with lensfun >= 0.3, taken from
# https://www.linuxquestions.org/questions/slackware-14/photivo-4175530230/#post5296578
(fetchpatch {
url = "https://www.linuxquestions.org/questions/attachment.php?attachmentid=17287&d=1420577220";
name = "lensfun-0.3.patch";
sha256 = "0ys45x4r4bjjlx0zpd5d56rgjz7k8gxili4r4k8zx3zfka4a3zwv";
})
./gcc6.patch
];
postPatch = '' # kinda icky
sed -e '/("@INSTALL@")/d' \
-e s,@INSTALL@,$out/share/photivo, \
-i Sources/ptSettings.cpp
sed '1i#include <math.h>' -i Sources/filters/ptFilter_StdCurve.cpp
'';
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ qt4 fftw graphicsmagick_q16 lcms2 lensfun libjpeg exiv2 liblqr1 ];
meta = with lib; {
platforms = platforms.linux;
license = licenses.gpl3;
broken = true; # exiv2 0.27.1 FTBFS
};
}

View File

@ -1,13 +0,0 @@
diff --git c/Sources/ptImage.cpp i/Sources/ptImage.cpp
index 9c95093..623c157 100755
--- c/Sources/ptImage.cpp
+++ i/Sources/ptImage.cpp
@@ -5291,7 +5291,7 @@ ptImage* ptImage::Box(const uint16_t MaxRadius, float* Mask) {
NewRow = NewRow < 0? -NewRow : NewRow > Height1? Height1_2-NewRow : NewRow ;
NewRow *= m_Width;
for(j = -IntRadius; j <= IntRadius; j++) {
- if (Dist[abs(i)][abs(j)] < Radius) {
+ if (Dist[int16_t(abs(i))][int16_t(abs(j))] < Radius) {
NewCol = Col+j;
NewCol = NewCol < 0? -NewCol : NewCol > Width1? Width1_2-NewCol : NewCol ;

View File

@ -4,6 +4,7 @@
# build inputs
, atk
, file
, gdk-pixbuf
, glib-networking
, gnome-desktop
@ -17,7 +18,7 @@
# check inputs
, xvfb-run
, nose
, nose2
, flake8
# python dependencies
@ -83,13 +84,13 @@ let
in
buildPythonApplication rec {
pname = "lutris-original";
version = "0.5.9.1";
version = "0.5.10";
src = fetchFromGitHub {
owner = "lutris";
repo = "lutris";
rev = "v${version}";
sha256 = "sha256-ykPJneCKbFKv0x/EDo9PkRb1LkMeFeYzTDmvE3ShNe0=";
sha256 = "sha256-PrnULCdQXNZ9OTa00NVyqiTdKRRkAYBcDj7lMwEqkw4=";
};
nativeBuildInputs = [ wrapGAppsHook ];
@ -103,6 +104,7 @@ buildPythonApplication rec {
libnotify
pango
webkitgtk
python_magic
] ++ gstDeps;
propagatedBuildInputs = [
@ -118,7 +120,13 @@ buildPythonApplication rec {
python_magic
];
checkInputs = [ xvfb-run nose flake8 ] ++ requiredTools;
postPatch = ''
substituteInPlace lutris/util/magic.py \
--replace "'libmagic.so.1'" "'${lib.getLib file}/lib/libmagic.so.1'"
'';
checkInputs = [ xvfb-run nose2 flake8 ] ++ requiredTools;
preCheck = "export HOME=$PWD";
checkPhase = ''
runHook preCheck
@ -126,12 +134,6 @@ buildPythonApplication rec {
runHook postCheck
'';
# unhardcodes xrandr and fixes nosetests
# upstream in progress: https://github.com/lutris/lutris/pull/3754
patches = [
./fixes.patch
];
# avoid double wrapping
dontWrapGApps = true;
makeWrapperArgs = [

View File

@ -1,67 +0,0 @@
diff --git a/Makefile b/Makefile
index 821a9500..75affa77 100644
--- a/Makefile
+++ b/Makefile
@@ -25,12 +25,12 @@ release: build-source upload upload-ppa
test:
rm tests/fixtures/pga.db -f
- nosetests3
+ nosetests
cover:
rm tests/fixtures/pga.db -f
rm tests/coverage/ -rf
- nosetests3 --with-coverage --cover-package=lutris --cover-html --cover-html-dir=tests/coverage
+ nosetests --with-coverage --cover-package=lutris --cover-html --cover-html-dir=tests/coverage
pgp-renew:
osc signkey --extend home:strycore
diff --git a/lutris/util/graphics/xrandr.py b/lutris/util/graphics/xrandr.py
index f788c94c..5544dbe9 100644
--- a/lutris/util/graphics/xrandr.py
+++ b/lutris/util/graphics/xrandr.py
@@ -5,6 +5,7 @@ from collections import namedtuple
from lutris.util.log import logger
from lutris.util.system import read_process_output
+from lutris.util.linux import LINUX_SYSTEM
Output = namedtuple("Output", ("name", "mode", "position", "rotation", "primary", "rate"))
@@ -12,7 +13,7 @@ Output = namedtuple("Output", ("name", "mode", "position", "rotation", "primary"
def _get_vidmodes():
"""Return video modes from XrandR"""
logger.debug("Retrieving video modes from XrandR")
- return read_process_output(["xrandr"]).split("\n")
+ return read_process_output([LINUX_SYSTEM.get("xrandr")]).split("\n")
def get_outputs(): # pylint: disable=too-many-locals
@@ -76,7 +77,7 @@ def turn_off_except(display):
for output in get_outputs():
if output.name != display:
logger.info("Turning off %s", output[0])
- subprocess.Popen(["xrandr", "--output", output.name, "--off"])
+ subprocess.Popen([LINUX_SYSTEM.get("xrandr"), "--output", output.name, "--off"])
def get_resolutions():
@@ -111,7 +112,7 @@ def change_resolution(resolution):
logger.warning("Resolution %s doesn't exist.", resolution)
else:
logger.info("Changing resolution to %s", resolution)
- subprocess.Popen(["xrandr", "-s", resolution])
+ subprocess.Popen([LINUX_SYSTEM.get("xrandr"), "-s", resolution])
else:
for display in resolution:
logger.debug("Switching to %s on %s", display.mode, display.name)
@@ -128,7 +129,7 @@ def change_resolution(resolution):
logger.info("Switching resolution of %s to %s", display.name, display.mode)
subprocess.Popen(
[
- "xrandr",
+ LINUX_SYSTEM.get("xrandr"),
"--output",
display.name,
"--mode",

View File

@ -6,18 +6,18 @@
buildGoModule rec {
pname = "arkade";
version = "0.8.16";
version = "0.8.18";
src = fetchFromGitHub {
owner = "alexellis";
repo = "arkade";
rev = version;
sha256 = "sha256-NiUv7yl1nA7a826FHDF+1MhYscXkQjUpxZo2ZWrL+VQ=";
sha256 = "sha256-VQI2eAxOkOkwYkTM/UyyK6lnXFoLFHWE/ekm5qLN9OE=";
};
CGO_ENABLED = 0;
vendorSha256 = "sha256-ipLVzBkliQSPBZTL5FU8xosTVjxFsUVlAvO0a0q+j2o=";
vendorSha256 = "sha256-An52QMjHaHRIicxCBpjgi+S2QeKXhB9rndjV+FIkS3c=";
# Exclude pkg/get: tests downloading of binaries which fail when sandbox=true
subPackages = [
@ -42,6 +42,6 @@ buildGoModule rec {
homepage = "https://github.com/alexellis/arkade";
description = "Open Source Kubernetes Marketplace";
license = licenses.mit;
maintainers = with maintainers; [ welteki ];
maintainers = with maintainers; [ welteki techknowlogick ];
};
}

View File

@ -1,30 +0,0 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config,
gettext, openssl
}:
with lib;
stdenv.mkDerivation {
pname = "notbit";
version = "2018-01-09";
src = fetchFromGitHub {
owner = "bpeel";
repo = "notbit";
rev = "8b5d3d2da8ce54abae2536b4d97641d2c798cff3";
sha256 = "1623n0lvx42mamvb2vwin5i38hh0nxpxzmkr5188ss2x7m20lmii";
};
nativeBuildInputs = [ autoreconfHook pkg-config ];
buildInputs = [ openssl gettext ];
meta = {
description = "A minimal Bitmessage client";
homepage = "https://github.com/bpeel/notbit";
license = licenses.mit;
platforms = platforms.unix;
maintainers = with maintainers; [ mog ];
broken = true;
};
}

View File

@ -1,100 +0,0 @@
diff --git a/data/assets/scene/solarsystem/planets/jupiter/jup310.asset b/data/assets/scene/solarsystem/planets/jupiter/jup310.asset
index c15f6d9..1f8ddaf 100755
--- a/data/assets/scene/solarsystem/planets/jupiter/jup310.asset
+++ b/data/assets/scene/solarsystem/planets/jupiter/jup310.asset
@@ -1,8 +1,8 @@
-local Kernels = asset.syncedResource({
- Name = "Jupiter Spice Kernels (jup310)",
- Type = "TorrentSynchronization",
- Identifier = "jup310",
- Magnet = "magnet:?xt=urn:btih:E8B7D7E136DE1C6249158B254BFC8B9ECE2A0539&dn=jup310.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
-})
+-- local Kernels = asset.syncedResource({
+-- Name = "Jupiter Spice Kernels (jup310)",
+-- Type = "TorrentSynchronization",
+-- Identifier = "jup310",
+-- Magnet = "magnet:?xt=urn:btih:E8B7D7E136DE1C6249158B254BFC8B9ECE2A0539&dn=jup310.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
+-- })
-asset.export("Kernels", Kernels .. '/jup310.bsp')
+-- asset.export("Kernels", Kernels .. '/jup310.bsp')
diff --git a/data/assets/scene/solarsystem/planets/mars/mar097.asset b/data/assets/scene/solarsystem/planets/mars/mar097.asset
index e77d67d..8d738a6 100755
--- a/data/assets/scene/solarsystem/planets/mars/mar097.asset
+++ b/data/assets/scene/solarsystem/planets/mars/mar097.asset
@@ -1,8 +1,8 @@
-local Kernels = asset.syncedResource({
- Name = "Mars Spice Kernels",
- Type = "TorrentSynchronization",
- Identifier = "mat097",
- Magnet = "magnet:?xt=urn:btih:308F326B9AF864294D73042FBBED33B17291E27E&dn=mar097.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
-})
+-- local Kernels = asset.syncedResource({
+-- Name = "Mars Spice Kernels",
+-- Type = "TorrentSynchronization",
+-- Identifier = "mat097",
+-- Magnet = "magnet:?xt=urn:btih:308F326B9AF864294D73042FBBED33B17291E27E&dn=mar097.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
+-- })
-asset.export("Kernels", Kernels .. '/mar097.bsp')
+-- asset.export("Kernels", Kernels .. '/mar097.bsp')
diff --git a/data/assets/scene/solarsystem/planets/neptune/nep081.asset b/data/assets/scene/solarsystem/planets/neptune/nep081.asset
index e9c49ce..cfb5fac 100755
--- a/data/assets/scene/solarsystem/planets/neptune/nep081.asset
+++ b/data/assets/scene/solarsystem/planets/neptune/nep081.asset
@@ -1,8 +1,8 @@
-local Kernels = asset.syncedResource({
- Name = "Neptune Spice Kernels (nep081)",
- Type = "TorrentSynchronization",
- Identifier = "nep081",
- Magnet = "magnet:?xt=urn:btih:A6079CF8D4BF3B6BB38F4F9F633CB7724FF91693&dn=nep081.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
-})
+-- local Kernels = asset.syncedResource({
+-- Name = "Neptune Spice Kernels (nep081)",
+-- Type = "TorrentSynchronization",
+-- Identifier = "nep081",
+-- Magnet = "magnet:?xt=urn:btih:A6079CF8D4BF3B6BB38F4F9F633CB7724FF91693&dn=nep081.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
+-- })
-asset.export("Kernels", Kernels .. '/nep081.bsp')
+-- asset.export("Kernels", Kernels .. '/nep081.bsp')
diff --git a/data/assets/scene/solarsystem/planets/saturn/sat375.asset b/data/assets/scene/solarsystem/planets/saturn/sat375.asset
index a55f2ed..f904b3c 100755
--- a/data/assets/scene/solarsystem/planets/saturn/sat375.asset
+++ b/data/assets/scene/solarsystem/planets/saturn/sat375.asset
@@ -1,8 +1,8 @@
-local Kernels = asset.syncedResource({
- Name = "Saturn Spice Kernels (sat375)",
- Type = "TorrentSynchronization",
- Identifier = "sat375",
- Magnet = "magnet:?xt=urn:btih:79083d2069df389e65d7688bb326c7aaf1953845&dn=sat375.bsp"
-})
+-- local Kernels = asset.syncedResource({
+-- Name = "Saturn Spice Kernels (sat375)",
+-- Type = "TorrentSynchronization",
+-- Identifier = "sat375",
+-- Magnet = "magnet:?xt=urn:btih:79083d2069df389e65d7688bb326c7aaf1953845&dn=sat375.bsp"
+-- })
-asset.export("Kernels", Kernels .. '/sat375.bsp')
+-- asset.export("Kernels", Kernels .. '/sat375.bsp')
diff --git a/data/assets/scene/solarsystem/planets/uranus/ura111.asset b/data/assets/scene/solarsystem/planets/uranus/ura111.asset
index 665d059..8f95f34 100755
--- a/data/assets/scene/solarsystem/planets/uranus/ura111.asset
+++ b/data/assets/scene/solarsystem/planets/uranus/ura111.asset
@@ -1,8 +1,8 @@
-local Kernels = asset.syncedResource({
- Name = "Uranus Spice Kernels (ura111)",
- Type = "TorrentSynchronization",
- Identifier = "ura111",
- Magnet = "magnet:?xt=urn:btih:26C4903D1A12AE439480F31B45BAEB5781D2B305&dn=ura111.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
-})
+-- local Kernels = asset.syncedResource({
+-- Name = "Uranus Spice Kernels (ura111)",
+-- Type = "TorrentSynchronization",
+-- Identifier = "ura111",
+-- Magnet = "magnet:?xt=urn:btih:26C4903D1A12AE439480F31B45BAEB5781D2B305&dn=ura111.bsp&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce"
+-- })
-asset.export("Kernels", Kernels .. '/ura111.bsp')
+-- asset.export("Kernels", Kernels .. '/ura111.bsp')

View File

@ -1,49 +0,0 @@
diff --git a/openspace.cfg b/openspace.cfg
index c86830b..e7f89d9 100755
--- a/openspace.cfg
+++ b/openspace.cfg
@@ -2,18 +2,21 @@
-- require('scripts/configuration_helper.lua')
-- which defines helper functions useful to customize the configuration
+userdir = os.getenv("HOME") .. "/.openspace/"
+os.execute("mkdir -p " .. userdir)
+
return {
-- Determines which SGCT configuration file is loaded, that is, if there rendering
-- occurs in a single window, a fisheye projection, or a dome cluster system
-- A regular 1280x720 window
- SGCTConfig = sgct.config.single{},
+ -- SGCTConfig = sgct.config.single{},
-- A regular 1920x1080 window
-- SGCTConfig = sgct.config.single{1920, 1080},
-- A windowed 1920x1080 fullscreen
- -- SGCTConfig = sgct.config.single{1920, 1080, border=false, windowPos={0,0}, shared=true, name="WV_OBS_SPOUT1"},
+ SGCTConfig = sgct.config.single{1920, 1080, border=false, windowPos={0,0}, shared=true, name="WV_OBS_SPOUT1"},
-- A 1k fisheye rendering
-- SGCTConfig = sgct.config.fisheye{1024, 1024},
@@ -53,15 +56,15 @@ return {
TASKS = "${DATA}/tasks",
WEB = "${DATA}/web",
- CACHE = "${BASE}/cache",
+ CACHE = userdir .. "cache",
CONFIG = "${BASE}/config",
- DOCUMENTATION = "${BASE}/documentation",
- LOGS = "${BASE}/logs",
+ DOCUMENTATION = userdir .. "documentation",
+ LOGS = userdir .. "logs",
MODULES = "${BASE}/modules",
SCRIPTS = "${BASE}/scripts",
SHADERS = "${BASE}/shaders",
- SYNC = "${BASE}/sync",
- TESTDIR = "${BASE}/tests"
+ SYNC = userdir .. "sync",
+ TESTDIR = userdir .. "tests"
},
Fonts = {
Mono = "${FONTS}/Bitstream-Vera-Sans-Mono/VeraMono.ttf",

View File

@ -1,91 +0,0 @@
diff --git a/include/openspace/util/distanceconversion.h b/include/openspace/util/distanceconversion.h
index 80a3a96..7059752 100755
--- a/include/openspace/util/distanceconversion.h
+++ b/include/openspace/util/distanceconversion.h
@@ -159,24 +159,34 @@ constexpr const char* nameForDistanceUnit(DistanceUnit unit, bool pluralForm = f
}
constexpr DistanceUnit distanceUnitFromString(const char* unitName) {
+ int result = -1;
+
int i = 0;
for (const char* val : DistanceUnitNamesSingular) {
if (ghoul::equal(unitName, val)) {
- return static_cast<DistanceUnit>(i);
+ result = i;
+ break;
}
++i;
}
- i = 0;
- for (const char* val : DistanceUnitNamesPlural) {
- if (ghoul::equal(unitName, val)) {
- return static_cast<DistanceUnit>(i);
+ if (result == -1) {
+ i = 0;
+ for (const char* val : DistanceUnitNamesPlural) {
+ if (ghoul::equal(unitName, val)) {
+ result = i;
+ break;
+ }
+ ++i;
}
- ++i;
}
- ghoul_assert(false, "Unit name is not a valid name");
- throw ghoul::MissingCaseException();
+ if (result != -1)
+ return static_cast<DistanceUnit>(result);
+ else {
+ ghoul_assert(false, "Unit name is not a valid name");
+ throw ghoul::MissingCaseException();
+ }
}
diff --git a/include/openspace/util/timeconversion.h b/include/openspace/util/timeconversion.h
index a36c92a..699bca9 100755
--- a/include/openspace/util/timeconversion.h
+++ b/include/openspace/util/timeconversion.h
@@ -142,23 +142,32 @@ constexpr const char* nameForTimeUnit(TimeUnit unit, bool pluralForm = false) {
}
constexpr TimeUnit timeUnitFromString(const char* unitName) {
+ int result = -1;
+
int i = 0;
for (const char* val : TimeUnitNamesSingular) {
if (ghoul::equal(unitName, val)) {
- return static_cast<TimeUnit>(i);
+ result = i;
+ break;
}
++i;
}
- i = 0;
- for (const char* val : TimeUnitNamesPlural) {
- if (ghoul::equal(unitName, val)) {
- return static_cast<TimeUnit>(i);
+ if (result == -1) {
+ i = 0;
+ for (const char* val : TimeUnitNamesPlural) {
+ if (ghoul::equal(unitName, val)) {
+ result = i;
+ break;
+ }
+ ++i;
}
- ++i;
}
- throw ghoul::MissingCaseException();
+ if (result != -1)
+ return static_cast<TimeUnit>(result);
+ else
+ throw ghoul::MissingCaseException();
}
std::pair<double, std::string> simplifyTime(double seconds,

View File

@ -1,90 +0,0 @@
{ lib, stdenv, fetchFromGitHub, fetchurl, makeWrapper, cmake
, curl, boost, gdal, glew, soil
, libX11, libXi, libXxf86vm, libXcursor, libXrandr, libXinerama }:
stdenv.mkDerivation rec {
version = "0.11.1";
pname = "openspace";
src = fetchFromGitHub {
owner = "OpenSpace";
repo = "OpenSpace";
rev = "a65eea61a1b8807ce3d69e9925e75f8e3dfb085d";
sha256 = "0msqixf30r0d41xmfmzkdfw6w9jkx2ph5clq8xiwrg1jc3z9q7nv";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake makeWrapper ];
buildInputs = [
curl boost gdal glew soil
libX11 libXi libXxf86vm libXcursor libXrandr libXinerama
];
glmPlatformH = fetchurl {
url = "https://raw.githubusercontent.com/g-truc/glm/dd48b56e44d699a022c69155c8672caacafd9e8a/glm/simd/platform.h";
sha256 = "0y91hlbgn5va7ijg5mz823gqkq9hqxl00lwmdwnf8q2g086rplzw";
};
# See <https://github.com/g-truc/glm/issues/726>
prePatch = ''
cp ${glmPlatformH} ext/sgct/include/glm/simd/platform.h
cp ${glmPlatformH} ext/ghoul/ext/glm/glm/simd/platform.h
'';
patches = [
# See <https://github.com/opensgct/sgct/issues/13>
./vrpn.patch
./constexpr.patch
./config.patch
# WARNING: This patch disables some slow torrents in a very dirty way.
./assets.patch
];
bundle = "$out/usr/share/openspace";
preConfigure = ''
cmakeFlagsArray=(
$cmakeFlagsArray
"-DCMAKE_BUILD_TYPE="
"-DCMAKE_INSTALL_PREFIX=${bundle}"
)
'';
preInstall = ''
mkdir -p $out/bin
mkdir -p ${bundle}
'';
postInstall = ''
cp ext/spice/libSpice.so ${bundle}/lib
cp ext/ghoul/ext/lua/libLua.so ${bundle}/lib
'';
postFixup = ''
for bin in ${bundle}/bin/*
do
rpath=$(patchelf --print-rpath $bin)
patchelf --set-rpath $rpath:${bundle}/lib $bin
name=$(basename $bin)
makeWrapper $bin $out/bin/$name --run "cd ${bundle}"
done
'';
meta = {
description = "Open-source astrovisualization project";
longDescription = ''
OpenSpace is open source interactive data visualization software
designed to visualize the entire known universe and portray our
ongoing efforts to investigate the cosmos.
WARNING: This build is not very usable for now.
'';
homepage = "https://www.openspaceproject.com/";
license = lib.licenses.mit;
platforms = lib.platforms.linux;
broken = true; # fails to build
};
}

View File

@ -1,13 +0,0 @@
diff --git a/ext/sgct/src/deps/vrpn/vrpn_Connection.C b/ext/sgct/src/deps/vrpn/vrpn_Connection.C
index d6ffdc5..f90a2b2 100755
--- a/ext/sgct/src/deps/vrpn/vrpn_Connection.C
+++ b/ext/sgct/src/deps/vrpn/vrpn_Connection.C
@@ -2489,7 +2489,7 @@ static int vrpn_start_server(const char *machine, char *server_name, char *args,
#if defined(sparc) || defined(FreeBSD) || defined(_AIX) || defined(__ANDROID__)
int status; // doesn't exist on sparc_solaris or FreeBSD
#else
- union wait status;
+ int status;
#endif
/* Check to see if they called back yet. */

View File

@ -1,34 +0,0 @@
{stdenv, fetchurl, cpio}:
# The NCBI package only builds on 32bits - on 64bits it breaks because
# of position dependent code. Debian packagers have written replacement
# make files(!). Either we use these, or negotiate a version which can
# be pushed upstream to NCBI.
#
# Another note: you may want the older and deprecated C-libs at ftp://ftp.ncbi.nih.gov/toolbox/ncbi_tools++/2008/Mar_17_2008/NCBI_C_Toolkit/ncbi_c--Mar_17_2008.tar.gz
stdenv.mkDerivation rec {
pname = "ncbi_tools";
version = "Dec_31_2008";
src = fetchurl {
url = "ftp://ftp.ncbi.nih.gov/toolbox/ncbi_tools++/2008/${version}/ncbi_cxx--${version}.tar.gz";
sha256 = "1b2v0dcdqn3bysgdkj57sxmd6s0hc9wpnxssviz399g6plhxggbr";
};
configureFlags = [
"--without-debug"
"--with-bin-release"
"--with-dll"
"--without-static"
];
buildInputs = [ cpio ];
meta = {
description = "NCBI Bioinformatics toolbox (incl. BLAST)";
longDescription = "The NCBI Bioinformatics toolsbox, including command-line utilties, libraries and include files. No X11 support";
homepage = "http://www.ncbi.nlm.nih.gov/IEB/ToolBox/";
license = "GPL";
priority = 5; # zlib.so gives a conflict with zlib
broken = true;
};
}

View File

@ -1,35 +0,0 @@
{ fetchgit, lib, stdenv, smlnj, which }:
stdenv.mkDerivation rec {
pname = "jonprl";
version = "0.1.0";
src = fetchgit {
url = "https://github.com/jonsterling/JonPRL.git";
deepClone = true;
rev = "refs/tags/v${version}";
sha256 = "0czs13syvnw8fz24d075n4pmsyfs8rs8c7ksmvd7cgb3h55fvp4p";
};
buildInputs = [ smlnj which ];
installPhase = ''
mkdir -p "$out/bin"
cp bin/.heapimg.* "$out/bin/"
build/mkexec.sh "${smlnj}/bin/sml" "$out" jonprl
'';
meta = {
description = "Proof Refinement Logic - Computational Type Theory";
longDescription = ''
An proof refinement logic for computational type theory
based on Brouwer-realizability & meaning explanations.
Inspired by Nuprl
'';
homepage = "https://github.com/jonsterling/JonPRL";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ puffnfresh ];
platforms = lib.platforms.linux;
broken = true;
};
}

View File

@ -1,37 +0,0 @@
{ lib, stdenv, fetchFromGitHub, cmake, gmp, mpfr, python2
, gperftools, ninja, makeWrapper }:
stdenv.mkDerivation {
pname = "lean2";
version = "2017-07-22";
src = fetchFromGitHub {
owner = "leanprover";
repo = "lean2";
rev = "34dbd6c3ae612186b8f0f80d12fbf5ae7a059ec9";
sha256 = "1xv3j487zhh1zf2b4v19xzw63s2sgjhg8d62a0kxxyknfmdf3khl";
};
nativeBuildInputs = [ cmake makeWrapper ninja ];
buildInputs = [ gmp mpfr python2 gperftools ];
preConfigure = ''
patchShebangs bin/leantags
cd src
'';
cmakeFlags = [ "-GNinja" ];
postInstall = ''
wrapProgram $out/bin/linja --prefix PATH : $out/bin:${ninja}/bin
'';
meta = with lib; {
description = "Automatic and interactive theorem prover (version with HoTT support)";
homepage = "http://leanprover.github.io";
license = licenses.asl20;
platforms = platforms.unix;
maintainers = with maintainers; [ thoughtpolice gebner ];
broken = true;
};
}

View File

@ -1,53 +0,0 @@
{lib, stdenv, fetchurl, tcsh, libXaw, libXt, libX11}:
let
s = # Generated upstream information
rec {
version = "3.3f";
name = "otter";
url = "https://www.cs.unm.edu/~mccune/otter/otter-${version}.tar.gz";
sha256 = "16mc1npl7sk9cmqhrf3ghfmvx29inijw76f1b1lsykllaxjqqb1r";
};
buildInputs = [
tcsh libXaw libXt libX11
];
in
stdenv.mkDerivation {
name = "${s.name}-${s.version}";
inherit buildInputs;
src = fetchurl {
inherit (s) url sha256;
};
hardeningDisable = [ "format" ];
buildPhase = ''
find . -name Makefile | xargs sed -i -e "s@/bin/rm@$(type -P rm)@g"
find . -name Makefile | xargs sed -i -e "s@/bin/mv@$(type -P mv)@g"
find . -perm -0100 -type f | xargs sed -i -e "s@/bin/csh@$(type -P csh)@g"
find . -perm -0100 -type f | xargs sed -i -e "s@/bin/rm@$(type -P rm)@g"
find . -perm -0100 -type f | xargs sed -i -e "s@/bin/mv@$(type -P mv)@g"
sed -i -e "s/^XLIBS *=.*/XLIBS=-lXaw -lXt -lX11/" source/formed/Makefile
make all
make -C examples all
make -C examples-mace2 all
make -C source/formed realclean
make -C source/formed formed
'';
installPhase = ''
mkdir -p "$out"/{bin,share/otter}
cp bin/* source/formed/formed "$out/bin/"
cp -r examples examples-mace2 documents README* Legal Changelog Contents index.html "$out/share/otter/"
'';
meta = {
inherit (s) version;
description = "A reliable first-order theorem prover";
license = lib.licenses.publicDomain ;
maintainers = [lib.maintainers.raskin];
platforms = lib.platforms.linux;
broken = true;
};
}

View File

@ -1,77 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, pkg-config
, cmake
, eigen
, opencv
, ceres-solver
, cgal
, boost
, vcg
, gmp
, mpfr
, glog
, gflags
, libjpeg_turbo
}:
stdenv.mkDerivation {
pname = "openmvs";
version = "unstable-2018-05-26";
src = fetchFromGitHub {
owner = "cdcseacave";
repo = "openmvs";
rev = "939033c55b50478339084431aac2c2318041afad";
sha256 = "12dgkwwfdp24581y3i41gsd1k9hq0aw917q0ja5s0if4qbmc8pni";
};
buildInputs = [ eigen opencv ceres-solver cgal boost vcg gmp mpfr glog gflags libjpeg_turbo ];
nativeBuildInputs = [ cmake pkg-config ];
preConfigure = ''
cmakeFlagsArray=(
$cmakeFlagsArray
"-DCMAKE_CXX_FLAGS=-std=c++11"
"-DBUILD_SHARED_LIBS=ON"
"-DBUILD_STATIC_RUNTIME=ON"
"-DINSTALL_BIN_DIR=$out/bin"
"-DVCG_DIR=${vcg}"
"-DCGAL_ROOT=${cgal}/lib/cmake/CGAL"
"-DCERES_DIR=${ceres-solver}/lib/cmake/Ceres/"
)
'';
postFixup = ''
rp=$(patchelf --print-rpath $out/bin/DensifyPointCloud)
patchelf --set-rpath $rp:$out/lib/OpenMVS $out/bin/DensifyPointCloud
rp=$(patchelf --print-rpath $out/bin/InterfaceVisualSFM)
patchelf --set-rpath $rp:$out/lib/OpenMVS $out/bin/InterfaceVisualSFM
rp=$(patchelf --print-rpath $out/bin/ReconstructMesh)
patchelf --set-rpath $rp:$out/lib/OpenMVS $out/bin/ReconstructMesh
rp=$(patchelf --print-rpath $out/bin/RefineMesh)
patchelf --set-rpath $rp:$out/lib/OpenMVS $out/bin/RefineMesh
rp=$(patchelf --print-rpath $out/bin/TextureMesh)
patchelf --set-rpath $rp:$out/lib/OpenMVS $out/bin/TextureMesh
'';
cmakeDir = "./";
dontUseCmakeBuildDir = true;
meta = with lib; {
description = "A library for computer-vision scientists and especially targeted to the Multi-View Stereo reconstruction community";
homepage = "http://cdcseacave.github.io/openMVS/";
license = licenses.agpl3;
platforms = platforms.linux;
maintainers = with maintainers; [ mdaiter ];
# 20190414-174115: CMake cannot find CGAL which is passed as build input
broken = true;
};
}

View File

@ -1,56 +0,0 @@
{ lib, stdenv, fetchurl, perl, gperf, bison, groff
, pkg-config, libXft, pcre
, libtomcrypt, libtommath, lz4 }:
stdenv.mkDerivation rec {
pname = "bitkeeper";
version = "7.3.1ce";
src = fetchurl {
url = "https://www.bitkeeper.org/downloads/${version}/bk-${version}.src.tar.gz";
sha256 = "0l6jwvcg4s1q00vb01hdv58jgv03l8x5mhjl73cwgfiff80zx147";
};
hardeningDisable = [ "fortify" ];
enableParallelBuilding = true;
nativeBuildInputs = [ pkg-config ];
buildInputs = [
perl gperf bison groff libXft
pcre libtomcrypt libtommath lz4
];
postPatch = ''
substituteInPlace port/unix_platform.sh \
--replace /bin/rm rm
substituteInPlace ./undo.c \
--replace /bin/cat cat
'';
sourceRoot = "bk-${version}/src";
buildPhase = ''
make -j6 V=1 p
make image
'';
installPhase = ''
./utils/bk-* $out/bitkeeper
mkdir -p $out/bin
$out/bitkeeper/bk links $out/bin
chmod g-w $out
'';
meta = {
description = "A distributed version control system";
longDescription = ''
BitKeeper is a fast, enterprise-ready, distributed SCM that
scales up to very large projects and down to tiny ones.
'';
homepage = "https://www.bitkeeper.org/";
license = lib.licenses.asl20;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ wscott thoughtpolice ];
broken = true; # seems to fail on recent glibc versions
};
}

View File

@ -1,58 +0,0 @@
{ lib, stdenv
, fetchFromGitHub
, openssl_1_0_2
, zlib
, libssh
, cmake
, perl
, pkg-config
, rustPlatform
, curl
, libiconv
, CoreFoundation
, Security
}:
with rustPlatform;
buildRustPackage rec {
pname = "git-dit";
version = "0.4.0";
src = fetchFromGitHub {
owner = "neithernut";
repo = "git-dit";
rev = "v${version}";
sha256 = "1sx6sc2dj3l61gbiqz8vfyhw5w4xjdyfzn1ixz0y8ipm579yc7a2";
};
cargoSha256 = "1vbcwl4aii0x4l8w9jhm70vi4s95jr138ly65jpkkv26rl6zjiph";
nativeBuildInputs = [
cmake
pkg-config
perl
];
buildInputs = [
openssl_1_0_2
libssh
zlib
] ++ lib.optionals (stdenv.isDarwin) [
curl
libiconv
CoreFoundation
Security
];
meta = with lib; {
inherit (src.meta) homepage;
description = "Decentralized Issue Tracking for git";
# This has not had a release in years and its cargo vendored dependencies
# fail to compile. It also depends on an unsupported openssl:
# https://github.com/NixOS/nixpkgs/issues/77503
broken = true;
license = licenses.gpl2;
maintainers = with maintainers; [ Profpatsch matthiasbeyer ];
};
}

View File

@ -1,51 +0,0 @@
{ lib, stdenv, fetchgit, autoconf, sbcl, lispPackages, xdpyinfo, texinfo4
, makeWrapper }:
stdenv.mkDerivation {
pname = "clfswm";
version = "unstable-2016-11-12";
src = fetchgit {
url = "https://gitlab.common-lisp.net/clfswm/clfswm.git";
rev = "3c7721dba6339ebb4f8c8d7ce2341740fa86f837";
sha256 = "0hynzh3a1zr719cxfb0k4cvh5lskzs616hwn7p942isyvhwzhynd";
};
buildInputs = [
texinfo4 makeWrapper autoconf
sbcl
lispPackages.clx
lispPackages.cl-ppcre
xdpyinfo
];
patches = [ ./require-clx.patch ];
# Stripping destroys the generated SBCL image
dontStrip = true;
configurePhase = ''
substituteInPlace load.lisp --replace \
";; (setf *contrib-dir* \"/usr/local/lib/clfswm/\")" \
"(setf *contrib-dir* \"$out/lib/clfswm/\")"
'';
installPhase = ''
mkdir -pv $out/bin
make DESTDIR=$out install
# Paths in the compressed image $out/bin/clfswm are not
# recognized by Nix. Add explicit reference here.
mkdir $out/nix-support
echo ${xdpyinfo} ${lispPackages.clx} ${lispPackages.cl-ppcre} > $out/nix-support/depends
'';
meta = with lib; {
description = "A(nother) Common Lisp FullScreen Window Manager";
homepage = "https://common-lisp.net/project/clfswm/";
license = licenses.gpl3;
maintainers = with maintainers; [ robgssp ];
platforms = platforms.linux;
broken = true;
};
}

View File

@ -1,13 +0,0 @@
diff --git a/load.lisp b/load.lisp
index c8c4cf0..8c9ca2e 100644
--- a/load.lisp
+++ b/load.lisp
@@ -111,6 +111,8 @@ from $XDG_CONFIG_HOME/clfswm/clfswmrc")
;;;------------------
(load-info "Requiring CLX")
+(require 'clx)
+
;;; Loading clisp dynamic module. This part needs clisp >= 2.50
;;#+(AND CLISP (not CLX))
;;(when (fboundp 'require)

View File

@ -6,6 +6,7 @@
, coreutils
, e2fsprogs
, fakechroot
, fakeNss
, fakeroot
, findutils
, go
@ -747,25 +748,7 @@ rec {
# Useful when packaging binaries that insist on using nss to look up
# username/groups (like nginx).
# /bin/sh is fine to not exist, and provided by another shim.
fakeNss = symlinkJoin {
name = "fake-nss";
paths = [
(writeTextDir "etc/passwd" ''
root:x:0:0:root user:/var/empty:/bin/sh
nobody:x:65534:65534:nobody:/var/empty:/bin/sh
'')
(writeTextDir "etc/group" ''
root:x:0:
nobody:x:65534:
'')
(writeTextDir "etc/nsswitch.conf" ''
hosts: files dns
'')
(runCommand "var-empty" { } ''
mkdir -p $out/var/empty
'')
];
};
inherit fakeNss; # alias
# This provides a /usr/bin/env, for shell scripts using the
# "#!/usr/bin/env executable" shebang.

View File

@ -0,0 +1,24 @@
# Provide a /etc/passwd and /etc/group that contain root and nobody.
# Useful when packaging binaries that insist on using nss to look up
# username/groups (like nginx).
# /bin/sh is fine to not exist, and provided by another shim.
{ symlinkJoin, writeTextDir, runCommand }:
symlinkJoin {
name = "fake-nss";
paths = [
(writeTextDir "etc/passwd" ''
root:x:0:0:root user:/var/empty:/bin/sh
nobody:x:65534:65534:nobody:/var/empty:/bin/sh
'')
(writeTextDir "etc/group" ''
root:x:0:
nobody:x:65534:
'')
(writeTextDir "etc/nsswitch.conf" ''
hosts: files dns
'')
(runCommand "var-empty" { } ''
mkdir -p $out/var/empty
'')
];
}

View File

@ -0,0 +1,9 @@
{ rustPlatform }:
rustPlatform.buildRustPackage {
pname = "make-initrd-ng";
version = "0.1.0";
src = ./make-initrd-ng;
cargoLock.lockFile = ./make-initrd-ng/Cargo.lock;
}

View File

@ -0,0 +1,79 @@
let
# Some metadata on various compression programs, relevant to naming
# the initramfs file and, if applicable, generating a u-boot image
# from it.
compressors = import ./initrd-compressor-meta.nix;
# Get the basename of the actual compression program from the whole
# compression command, for the purpose of guessing the u-boot
# compression type and filename extension.
compressorName = fullCommand: builtins.elemAt (builtins.match "([^ ]*/)?([^ ]+).*" fullCommand) 1;
in
{ stdenvNoCC, perl, cpio, ubootTools, lib, pkgsBuildHost, makeInitrdNGTool, patchelf, runCommand, glibc
# Name of the derivation (not of the resulting file!)
, name ? "initrd"
# Program used to compress the cpio archive; use "cat" for no compression.
# This can also be a function which takes a package set and returns the path to the compressor,
# such as `pkgs: "${pkgs.lzop}/bin/lzop"`.
, compressor ? "gzip"
, _compressorFunction ?
if lib.isFunction compressor then compressor
else if ! builtins.hasContext compressor && builtins.hasAttr compressor compressors then compressors.${compressor}.executable
else _: compressor
, _compressorExecutable ? _compressorFunction pkgsBuildHost
, _compressorName ? compressorName _compressorExecutable
, _compressorMeta ? compressors.${_compressorName} or {}
# List of arguments to pass to the compressor program, or null to use its defaults
, compressorArgs ? null
, _compressorArgsReal ? if compressorArgs == null then _compressorMeta.defaultArgs or [] else compressorArgs
# Filename extension to use for the compressed initramfs. This is
# included for clarity, but $out/initrd will always be a symlink to
# the final image.
# If this isn't guessed, you may want to complete the metadata above and send a PR :)
, extension ? _compressorMeta.extension or
(throw "Unrecognised compressor ${_compressorName}, please specify filename extension")
# List of { object = path_or_derivation; symlink = "/path"; }
# The paths are copied into the initramfs in their nix store path
# form, then linked at the root according to `symlink`.
, contents
# List of uncompressed cpio files to prepend to the initramfs. This
# can be used to add files in specified paths without them becoming
# symlinks to store paths.
, prepend ? []
# Whether to wrap the initramfs in a u-boot image.
, makeUInitrd ? stdenvNoCC.hostPlatform.linux-kernel.target == "uImage"
# If generating a u-boot image, the architecture to use. The default
# guess may not align with u-boot's nomenclature correctly, so it can
# be overridden.
# See https://gitlab.denx.de/u-boot/u-boot/-/blob/9bfb567e5f1bfe7de8eb41f8c6d00f49d2b9a426/common/image.c#L81-106 for a list.
, uInitrdArch ? stdenvNoCC.hostPlatform.linuxArch
# The name of the compression, as recognised by u-boot.
# See https://gitlab.denx.de/u-boot/u-boot/-/blob/9bfb567e5f1bfe7de8eb41f8c6d00f49d2b9a426/common/image.c#L195-204 for a list.
# If this isn't guessed, you may want to complete the metadata above and send a PR :)
, uInitrdCompression ? _compressorMeta.ubootName or
(throw "Unrecognised compressor ${_compressorName}, please specify uInitrdCompression")
}: runCommand name {
compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}";
passthru = {
compressorExecutableFunction = _compressorFunction;
compressorArgs = _compressorArgsReal;
};
passAsFile = ["contents"];
contents = lib.concatMapStringsSep "\n" ({ object, symlink, ... }: "${object}\n${if symlink == null then "" else symlink}") contents + "\n";
nativeBuildInputs = [makeInitrdNGTool patchelf glibc cpio];
} ''
mkdir ./root
make-initrd-ng "$contentsPath" ./root
mkdir "$out"
(cd root && find * .[^.*] -exec touch -h -d '@1' '{}' +)
(cd root && find * .[^.*] -print0 | sort -z | cpio -o -H newc -R +0:+0 --reproducible --null | eval -- $compress >> "$out/initrd")
''

View File

@ -0,0 +1,5 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "make-initrd-ng"
version = "0.1.0"

View File

@ -0,0 +1,9 @@
[package]
name = "make-initrd-ng"
version = "0.1.0"
authors = ["Will Fancher <elvishjerricco@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View File

@ -0,0 +1,79 @@
# What is this for?
NixOS's traditional initrd is generated by listing the paths that
should be included in initrd and copying the full runtime closure of
those paths into the archive. For most things, like almost any
executable, this involves copying the entirety of huge packages like
glibc, when only things like the shared library files are needed. To
solve this, NixOS does a variety of patchwork to edit the files being
copied in so they only refer to small, patched up paths. For instance,
executables and their shared library dependencies are copied into an
`extraUtils` derivation, and every ELF file is patched to refer to
files in that output.
The problem with this is that it is often difficult to correctly patch
some things. For instance, systemd bakes the path to the `mount`
command into the binary, so patchelf is no help. Instead, it's very
often easier to simply copy the desired files to their original store
locations in initrd and not copy their entire runtime closure. This
does mean that it is the burden of the developer to ensure that all
necessary dependencies are copied in, as closures won't be
consulted. However, it is rare that full closures are actually
desirable, so in the traditional initrd, the developer was likely to
do manual work on patching the dependencies explicitly anyway.
# How it works
This program is similar to its inspiration (`find-libs` from the
traditional initrd), except that it also handles symlinks and
directories according to certain rules. As input, it receives a
sequence of pairs of paths. The first path is an object to copy into
initrd. The second path (if not empty) is the path to a symlink that
should be placed in the initrd, pointing to that object. How that
object is copied depends on its type.
1. A regular file is copied directly to the same absolute path in the
initrd.
- If it is *also* an ELF file, then all of its direct shared
library dependencies are also listed as objects to be copied.
2. A directory's direct children are listed as objects to be copied,
and a directory at the same absolute path in the initrd is created.
3. A symlink's target is listed as an object to be copied.
There are a couple of quirks to mention here. First, the term "object"
refers to the final file path that the developer intends to have
copied into initrd. This means any parent directory is not considered
an object just because its child was listed as an object in the
program input; instead those intermediate directories are simply
created in support of the target object. Second, shared libraries,
directory children, and symlink targets aren't immediately recursed,
because they simply get listed as objects themselves, and are
therefore traversed when they themselves are processed. Finally,
symlinks in the intermediate directories leading to an object are
preserved, meaning an input object `/a/symlink/b` will just result in
initrd containing `/a/symlink -> /target/b` and `/target/b`, even if
`/target` has other children. Preserving symlinks in this manner is
important for things like systemd.
These rules automate the most important and obviously necessary
copying that needs to be done in most cases, allowing programs and
configuration files to go unpatched, while keeping the content of the
initrd to a minimum.
# Why Rust?
- A prototype of this logic was written in Bash, in an attempt to keep
with its `find-libs` ancestor, but that program was difficult to
write, and ended up taking several minutes to run. This program runs
in less than a second, and the code is substantially easier to work
with.
- This will not require end users to install a rust toolchain to use
NixOS, as long as this tool is cached by Hydra. And if you're
bootstrapping NixOS from source, rustc is already required anyway.
- Rust was favored over Python for its type system, and because if you
want to go fast, why not go *really fast*?

View File

@ -0,0 +1,208 @@
use std::collections::{HashSet, VecDeque};
use std::env;
use std::ffi::OsStr;
use std::fs;
use std::hash::Hash;
use std::io::{BufReader, BufRead, Error, ErrorKind};
use std::os::unix;
use std::path::{Component, Path, PathBuf};
use std::process::{Command, Stdio};
struct NonRepeatingQueue<T> {
queue: VecDeque<T>,
seen: HashSet<T>,
}
impl<T> NonRepeatingQueue<T> {
fn new() -> NonRepeatingQueue<T> {
NonRepeatingQueue {
queue: VecDeque::new(),
seen: HashSet::new(),
}
}
}
impl<T: Clone + Eq + Hash> NonRepeatingQueue<T> {
fn push_back(&mut self, value: T) -> bool {
if self.seen.contains(&value) {
false
} else {
self.seen.insert(value.clone());
self.queue.push_back(value);
true
}
}
fn pop_front(&mut self) -> Option<T> {
self.queue.pop_front()
}
}
fn patch_elf<S: AsRef<OsStr>, P: AsRef<OsStr>>(mode: S, path: P) -> Result<String, Error> {
let output = Command::new("patchelf")
.arg(&mode)
.arg(&path)
.stderr(Stdio::inherit())
.output()?;
if output.status.success() {
Ok(String::from_utf8(output.stdout).expect("Failed to parse output"))
} else {
Err(Error::new(ErrorKind::Other, format!("failed: patchelf {:?} {:?}", OsStr::new(&mode), OsStr::new(&path))))
}
}
fn copy_file<P: AsRef<Path> + AsRef<OsStr>, S: AsRef<Path>>(
source: P,
target: S,
queue: &mut NonRepeatingQueue<Box<Path>>,
) -> Result<(), Error> {
fs::copy(&source, target)?;
if !Command::new("ldd").arg(&source).output()?.status.success() {
//stdout(Stdio::inherit()).stderr(Stdio::inherit()).
println!("{:?} is not dynamically linked. Not recursing.", OsStr::new(&source));
return Ok(());
}
let rpath_string = patch_elf("--print-rpath", &source)?;
let needed_string = patch_elf("--print-needed", &source)?;
// Shared libraries don't have an interpreter
if let Ok(interpreter_string) = patch_elf("--print-interpreter", &source) {
queue.push_back(Box::from(Path::new(&interpreter_string.trim())));
}
let rpath = rpath_string.trim().split(":").map(|p| Box::<Path>::from(Path::new(p))).collect::<Vec<_>>();
for line in needed_string.lines() {
let mut found = false;
for path in &rpath {
let lib = path.join(line);
if lib.exists() {
// No need to recurse. The queue will bring it back round.
queue.push_back(Box::from(lib.as_path()));
found = true;
break;
}
}
if !found {
// glibc makes it tricky to make this an error because
// none of the files have a useful rpath.
println!("Warning: Couldn't satisfy dependency {} for {:?}", line, OsStr::new(&source));
}
}
Ok(())
}
fn queue_dir<P: AsRef<Path>>(
source: P,
queue: &mut NonRepeatingQueue<Box<Path>>,
) -> Result<(), Error> {
for entry in fs::read_dir(source)? {
let entry = entry?;
// No need to recurse. The queue will bring us back round here on its own.
queue.push_back(Box::from(entry.path().as_path()));
}
Ok(())
}
fn handle_path(
root: &Path,
p: &Path,
queue: &mut NonRepeatingQueue<Box<Path>>,
) -> Result<(), Error> {
let mut source = PathBuf::new();
let mut target = Path::new(root).to_path_buf();
let mut iter = p.components().peekable();
while let Some(comp) = iter.next() {
match comp {
Component::Prefix(_) => panic!("This tool is not meant for Windows"),
Component::RootDir => {
target.clear();
target.push(root);
source.clear();
source.push("/");
}
Component::CurDir => {}
Component::ParentDir => {
// Don't over-pop the target if the path has too many ParentDirs
if source.pop() {
target.pop();
}
}
Component::Normal(name) => {
target.push(name);
source.push(name);
let typ = fs::symlink_metadata(&source)?.file_type();
if typ.is_file() && !target.exists() {
copy_file(&source, &target, queue)?;
} else if typ.is_symlink() {
let link_target = fs::read_link(&source)?;
// Create the link, then push its target to the queue
if !target.exists() {
unix::fs::symlink(&link_target, &target)?;
}
source.pop();
source.push(link_target);
while let Some(c) = iter.next() {
source.push(c);
}
let link_target_path = source.as_path();
if link_target_path.exists() {
queue.push_back(Box::from(link_target_path));
}
break;
} else if typ.is_dir() {
if !target.exists() {
fs::create_dir(&target)?;
}
// Only recursively copy if the directory is the target object
if iter.peek().is_none() {
queue_dir(&source, queue)?;
}
}
}
}
}
Ok(())
}
fn main() -> Result<(), Error> {
let args: Vec<String> = env::args().collect();
let input = fs::File::open(&args[1])?;
let output = &args[2];
let out_path = Path::new(output);
let mut queue = NonRepeatingQueue::<Box<Path>>::new();
let mut lines = BufReader::new(input).lines();
while let Some(obj) = lines.next() {
// Lines should always come in pairs
let obj = obj?;
let sym = lines.next().unwrap()?;
let obj_path = Path::new(&obj);
queue.push_back(Box::from(obj_path));
if !sym.is_empty() {
println!("{} -> {}", &sym, &obj);
// We don't care about preserving symlink structure here
// nearly as much as for the actual objects.
let link_string = format!("{}/{}", output, sym);
let link_path = Path::new(&link_string);
let mut link_parent = link_path.to_path_buf();
link_parent.pop();
fs::create_dir_all(link_parent)?;
unix::fs::symlink(obj_path, link_path)?;
}
}
while let Some(obj) = queue.pop_front() {
println!("{:?}", obj);
handle_path(out_path, &*obj, &mut queue)?;
}
Ok(())
}

View File

@ -1,7 +0,0 @@
{ fetchurl, stdenv, texinfo }:
import ./common.nix {
inherit fetchurl stdenv texinfo;
revision = 3;
sha256 = "0knrpkr74s8yn4xcqxkqpgxmzdmzrvahh1n1csqc1wwd2rb4vnpr";
}

View File

@ -0,0 +1,49 @@
{ mkXfceDerivation
, dbus-glib
, garcon
, glib
, gtk3
, libX11
, libXScrnSaver
, libXrandr
, libwnck
, libxfce4ui
, libxklavier
, pam
, systemd
, xfconf
, lib
}:
mkXfceDerivation {
category = "apps";
pname = "xfce4-screensaver";
version = "4.16.0";
sha256 = "1vblqhhzhv85yd5bz1xg14yli82ys5qrjdcabg3l53glbk61n99p";
buildInputs = [
dbus-glib
garcon
glib
gtk3
libX11
libXScrnSaver
libXrandr
libwnck
libxfce4ui
libxklavier
pam
systemd
xfconf
];
configureFlags = [ "--without-console-kit" ];
makeFlags = [ "DBUS_SESSION_SERVICE_DIR=$(out)/etc" ];
meta = {
description = "Screensaver for Xfce";
maintainers = with lib.maintainers; [ symphorien ];
};
}

View File

@ -82,6 +82,8 @@ lib.makeScope pkgs.newScope (self: with self; {
xfce4-terminal = callPackage ./applications/xfce4-terminal { };
xfce4-screensaver = callPackage ./applications/xfce4-screensaver { };
xfce4-screenshooter = callPackage ./applications/xfce4-screenshooter {
inherit (pkgs.gnome) libsoup;
};

View File

@ -1,54 +0,0 @@
{ fetchFromGitHub, lib, stdenv, gmp, which, flex, bison, makeWrapper
, autoconf, automake, libtool, jdk, perl }:
stdenv.mkDerivation {
pname = "aldor";
version = "1.2.0";
src = fetchFromGitHub {
owner = "aldorlang";
repo = "aldor";
rev = "15471e75f3d65b93150f414ebcaf59a03054b68d";
sha256 = "sha256-phKCghCeM+/QlxjIxfNQySo+5XMRqfOqlS9kgp07YKc=";
};
nativeBuildInputs = [ makeWrapper autoconf automake ];
buildInputs = [ gmp which flex bison libtool jdk perl ];
preConfigure = ''
cd aldor ;
./autogen.sh ;
'';
postInstall = ''
for prog in aldor unicl javagen ;
do
wrapProgram $out/bin/$prog --set ALDORROOT $out \
--prefix PATH : ${jdk}/bin \
--prefix PATH : ${stdenv.cc}/bin ;
done
'';
meta = {
# Please become a maintainer to fix this package
broken = true;
homepage = "http://www.aldor.org/";
description = "Programming language with an expressive type system";
license = lib.licenses.asl20;
longDescription = ''
Aldor is a programming language with an expressive type system well-suited
for mathematical computing and which has been used to develop a number of
computer algebra libraries. Originally known as A#, Aldor was conceived as
an extension language for the Axiom system, but is now used more in other settings.
In Aldor, types and functions are first class values that can be constructed
and manipulated within programs. Pervasive support for dependent types allows
static checking of dynamic objects. What does this mean for a normal user? Aldor
solves many difficulties encountered in widely-used object-oriented programming
languages. It allows programs to use a natural style, combining the more attractive
and powerful properties of functional, object-oriented and aspect-oriented styles.
'';
platforms = lib.platforms.linux;
};
}

View File

@ -1,59 +0,0 @@
{lib, stdenv, gcc, glibc, fetchurl, fetchgit, libtool, autoconf, automake, file, gnumake, which, zsh, m4, pkg-config, perl, gnome2, gtk2, pango, sqlite, libxml2, zlib, gmp, smlnj }:
stdenv.mkDerivation {
pname = "aliceml";
version = "1.4-7d44dc8e";
src = fetchgit {
url = "https://github.com/aliceml/aliceml";
rev = "7d44dc8e4097c6f85888bbf4ff86d51fe05b0a08";
sha256 = "1xpvia00cpig0i7qvz29sx7xjic6kd472ng722x4rapz8mjnf8bk";
fetchSubmodules = true;
};
gecodeSrc = fetchurl {
url = "http://www.gecode.org/download/gecode-1.3.1.tar.gz";
sha256 = "0mgc6llbq166jmlq3alvagqsg3730670zvbwwkdgsqklw70v9355";
};
nativeBuildInputs = [ autoconf automake ];
buildInputs = [
gcc glibc
libtool gnumake
file which zsh m4 gtk2 zlib gmp
gnome2.libgnomecanvas pango sqlite
libxml2 pkg-config perl smlnj
];
makePatch = ./make.patch;
seamPatch = ./seam.patch;
phases = [ "unpackPhase" "patchPhase" "configurePhase" "buildPhase" ];
patchPhase = ''
sed -i -e "s@wget ..GECODE_URL. -O - | tar xz@tar xf $gecodeSrc@" make/Makefile
patch -p1 <$makePatch
patch -p1 <$seamPatch
'';
configurePhase = ''
make -C make setup PREFIX="$out"
'';
buildPhase = ''
gmp="${gmp.dev}" zlib="${zlib.dev}" PATH=$PATH:`pwd`/seam-support/install/bin make -C make all PREFIX="$out"
'';
meta = {
description = "Functional programming language based on Standard ML";
longDescription = ''
Alice ML is a functional programming language based on Standard ML,
extended with rich support for concurrent, distributed, and constraint
programming.
'';
homepage = "https://www.ps.uni-saarland.de/alice/";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.doublec ];
broken = true;
};
}

View File

@ -1,20 +0,0 @@
diff --git a/Makefile b/Makefile
index 6a55b06..84a6000 100644
--- a/make/Makefile
+++ b/make/Makefile
@@ -387,6 +387,7 @@ configure-seam-linux64:
../sources/configure \
--prefix='$(PREFIX)' \
--with-warnings=yes \
+ --with-zlib='$(zlib)' \
--disable-lightning)
.PHONY: configure-seam-darwin64
@@ -434,6 +435,7 @@ configure-alice-ll-linux:
(cd $(PWD)/alice/build && \
../sources/vm-seam/configure \
--prefix='$(PREFIX)' \
+ --with-gmp='$(gmp)' \
--with-warnings=yes)
.PHONY: rebuild-alice-ll

View File

@ -1,13 +0,0 @@
diff --git a/Makefile.cvs b/Makefile.cvs
index b59434a..cd1316f 100644
--- a/seam/sources/Makefile.cvs
+++ b/seam/sources/Makefile.cvs
@@ -32,7 +32,7 @@ autotools:
aclocal -I .
autoconf
automake --add-missing
- cd libltdl; aclocal; autoconf; automake --add-missing
+ cd libltdl; chmod +w *; aclocal; autoconf; automake --add-missing
lightning:
rm -rf lightning

View File

@ -86,5 +86,9 @@ rec {
gcc = gcc10; # can bump to 11 along with stdenv.cc
};
# Make sure to only ever update this to a version that is compatible with the
# latest cudnn, nccl, cutensor, etc! It sometimes happens that CUDA versions
# are released prior to compatibility with the rest of the ecosystem. And
# don't forget to request a review from @NixOS/cuda-maintainers!
cudatoolkit_11 = cudatoolkit_11_5;
}

View File

@ -1,68 +0,0 @@
{ lib, stdenv, fetchgit, cmake, pkg-config, boost, libunwind, libmemcached
, pcre, libevent, gd, curl, libxml2, icu, flex, bison, openssl, zlib, php
, expat, libcap, oniguruma, libdwarf, libmcrypt, tbb, gperftools, glog, libkrb5
, bzip2, openldap, readline, libelf, uwimap, binutils, cyrus_sasl, pam, libpng
, libxslt, freetype, gdb, git, perl, libmysqlclient, gmp, libyaml, libedit
, libvpx, imagemagick, fribidi, gperf, which, ocamlPackages
}:
stdenv.mkDerivation rec {
pname = "hhvm";
version = "3.23.2";
# use git version since we need submodules
src = fetchgit {
url = "https://github.com/facebook/hhvm.git";
rev = "HHVM-${version}";
sha256 = "1nic49j8nghx82lgvz0b95r78sqz46qaaqv4nx48p8yrj9ysnd7i";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake pkg-config flex bison ];
buildInputs =
[ boost libunwind libmysqlclient libmemcached pcre gdb git perl
libevent gd curl libxml2 icu openssl zlib php expat libcap
oniguruma libdwarf libmcrypt tbb gperftools bzip2 openldap readline
libelf uwimap binutils cyrus_sasl pam glog libpng libxslt libkrb5
gmp libyaml libedit libvpx imagemagick fribidi gperf which
ocamlPackages.ocaml ocamlPackages.ocamlbuild
];
patches = [
./flexible-array-members-gcc6.patch
];
dontUseCmakeBuildDir = true;
NIX_LDFLAGS = "-lpam -L${pam}/lib";
# work around broken build system
NIX_CFLAGS_COMPILE = "-I${freetype.dev}/include/freetype2";
# the cmake package does not handle absolute CMAKE_INSTALL_INCLUDEDIR correctly
# (setting it to an absolute path causes include files to go to $out/$out/include,
# because the absolute path is interpreted with root at $out).
cmakeFlags = [ "-DCMAKE_INSTALL_INCLUDEDIR=include" ];
prePatch = ''
substituteInPlace ./configure \
--replace "/usr/bin/env bash" ${stdenv.shell}
substituteInPlace ./third-party/ocaml/CMakeLists.txt \
--replace "/bin/bash" ${stdenv.shell}
perl -pi -e 's/([ \t(])(isnan|isinf)\(/$1std::$2(/g' \
hphp/runtime/base/*.cpp \
hphp/runtime/ext/std/*.cpp \
hphp/runtime/ext_zend_compat/php-src/main/*.cpp \
hphp/runtime/ext_zend_compat/php-src/main/*.h
sed '1i#include <functional>' -i third-party/mcrouter/src/mcrouter/lib/cycles/Cycles.h
patchShebangs .
'';
meta = {
description = "High-performance JIT compiler for PHP/Hack";
homepage = "https://hhvm.com";
license = "PHP/Zend";
platforms = [ "x86_64-linux" ];
maintainers = [ lib.maintainers.thoughtpolice ];
broken = true; # Since 2018-04-21, see https://hydra.nixos.org/build/73059373
};
}

View File

@ -1,20 +0,0 @@
diff --git a/third-party/re2/src/re2/dfa.cc b/third-party/re2/src/re2/dfa.cc
index 483f678..3aa3610 100644
--- a/third-party/re2/src/re2/dfa.cc
+++ b/third-party/re2/src/re2/dfa.cc
@@ -101,8 +101,13 @@ class DFA {
uint flag_; // Empty string bitfield flags in effect on the way
// into this state, along with kFlagMatch if this
// is a matching state.
- std::atomic<State*> next_[]; // Outgoing arrows from State,
- // one per input byte class
+// Work around the bug affecting flexible array members in GCC 6.1 and 6.2.
+// (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70932)
+#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ == 6 && __GNUC_MINOR__ >= 1
+ std::atomic<State*> next_[0]; // Outgoing arrows from State, one per input byte class
+#else
+ std::atomic<State*> next_[]; // Outgoing arrows from State, one per input byte class
+#endif
};
enum {

View File

@ -1,34 +0,0 @@
{ lib, stdenv, fetchurl, xlibsWrapper, ncurses }:
stdenv.mkDerivation ({
pname = "metaocaml";
version = "3.09-alpha-30";
src = fetchurl {
url = "http://www.metaocaml.org/dist/old/MetaOCaml_309_alpha_030.tar.gz";
sha256 = "0migbn0zwfb7yb24dy7qfqi19sv3drqcv4369xi7xzpds2cs35fd";
};
prefixKey = "-prefix ";
configureFlags = ["-no-tk" "-x11lib" xlibsWrapper];
buildFlags = [ "world" "bootstrap" "world.opt" ];
buildInputs = [xlibsWrapper ncurses];
installTargets = "install installopt";
patchPhase = ''
CAT=$(type -tp cat)
sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang
'';
postBuild = ''
mkdir -p $out/include
ln -sv $out/lib/ocaml/caml $out/include/caml
'';
meta = {
homepage = "http://www.metaocaml.org/";
license = with lib.licenses; [ qpl lgpl2 ];
description = "A compiled, type-safe, multi-stage programming language";
broken = true;
};
})

View File

@ -1,64 +0,0 @@
{ lib, stdenv, fetchFromGitHub
, gcc-arm-embedded, binutils-arm-embedded, python2
, skipTargets ? [
# These targets do not build, for the reasons listed, along with the last version checked.
# Probably all of the issues with these targets need to be addressed upstream.
"AG3X" # 3.4.0-rc4: has not specified a valid STM group, must be one of F1, F3, F405, F411 or F7x5. Have you prepared a valid target.mk?
"ALIENWHOOP" # 3.4.0-rc4: has not specified a valid STM group, must be one of F1, F3, F405, F411 or F7x5. Have you prepared a valid target.mk?
"FURYF3" # 3.4.0-rc4: flash region overflow
"OMNINXT" # 3.4.0-rc4: has not specified a valid STM group, must be one of F1, F3, F405, F411 or F7x5. Have you prepared a valid target.mk?
]}:
stdenv.mkDerivation rec {
pname = "betaflight";
version = "3.4.0-rc4";
src = fetchFromGitHub {
owner = "betaflight";
repo = "betaflight";
rev = "8e9e7574481b1abba9354b24f41eb31054943785"; # Always use a commit id here!
sha256 = "1wyp23p876xbfi9z6gm4xn1nwss3myvrjjjq9pd3s0vf5gkclkg5";
};
nativeBuildInputs = [
gcc-arm-embedded binutils-arm-embedded
python2
];
postPatch = ''
sed -ri "s/REVISION.*=.*git log.*/REVISION = ${builtins.substring 0 10 src.rev}/" Makefile # Simulate abbrev'd rev.
sed -ri "s/binary hex/hex/" Makefile # No need for anything besides .hex
substituteInPlace Makefile \
--replace "--specs=nano.specs" ""
'';
enableParallelBuilding = true;
preBuild = ''
buildFlagsArray=(
"NOBUILD_TARGETS=${toString skipTargets}"
"GCC_REQUIRED_VERSION=$(arm-none-eabi-gcc -dumpversion)"
all
)
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp obj/*.hex $out
runHook postInstall
'';
meta = with lib; {
description = "Flight controller software (firmware) used to fly multi-rotor craft and fixed wing craft";
homepage = "https://github.com/betaflight/betaflight";
license = licenses.gpl3;
maintainers = with maintainers; [ elitak ];
broken = true;
};
}

View File

@ -1,56 +0,0 @@
{ lib, stdenv, fetchFromGitHub
, gcc-arm-embedded, binutils-arm-embedded, ruby
}:
stdenv.mkDerivation rec {
pname = "inav";
version = "2.0.0-rc2";
src = fetchFromGitHub {
owner = "iNavFlight";
repo = "inav";
rev = "a8415e89c2956d133d8175827c079bcf3bc3766c"; # Always use a commit id here!
sha256 = "15zai8qf43b06fmws1sbkmdgip51zp7gkfj7pp9b6gi8giarzq3y";
};
nativeBuildInputs = [
gcc-arm-embedded binutils-arm-embedded
ruby
];
postPatch = ''
sed -ri "s/REVISION.*=.*shell git.*/REVISION = ${builtins.substring 0 10 src.rev}/" Makefile # Simulate abbrev'd rev.
sed -ri "s/-j *[0-9]+//" Makefile # Eliminate parallel build args in submakes
sed -ri "s/binary hex/hex/" Makefile # No need for anything besides .hex
substituteInPlace Makefile \
--replace "--specs=nano.specs" ""
'';
enableParallelBuilding = true;
preBuild = ''
buildFlagsArray=(
all
)
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp obj/*.hex $out
runHook postInstall
'';
meta = with lib; {
description = "Navigation-enabled flight control software";
homepage = "https://inavflight.github.io";
license = licenses.gpl3;
maintainers = with maintainers; [ elitak ];
broken = true;
};
}

View File

@ -1,46 +0,0 @@
{ lib, stdenv, fetchurl, makeWrapper,
libllvm, gmp, mpfr, readline, bison, flex }:
stdenv.mkDerivation rec {
baseName="pure";
version="0.68";
name="${baseName}-${version}";
src = fetchurl {
url="https://github.com/agraef/pure-lang/releases/download/${name}/${name}.tar.gz";
sha256="0px6x5ivcdbbp2pz5n1r1cwg1syadklhjw8piqhl63n91i4r7iyb";
};
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ bison flex ];
propagatedBuildInputs = [ libllvm gmp mpfr readline ];
NIX_LDFLAGS = "-lLLVMJIT";
postPatch = ''
for f in expr.cc matcher.cc printer.cc symtable.cc parserdefs.hh; do
sed -i '1i\#include <stddef.h>' $f
done
'';
configureFlags = [ "--enable-release" ];
doCheck = true;
checkPhase = ''
LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${libllvm}/lib make check
'';
postInstall = ''
wrapProgram $out/bin/pure --prefix LD_LIBRARY_PATH : ${libllvm}/lib
'';
meta = {
description = "A modern-style functional programming language based on term rewriting";
maintainers = with lib.maintainers;
[
raskin
asppsa
];
platforms = with lib.platforms;
linux;
license = lib.licenses.gpl3Plus;
broken = true;
};
}

View File

@ -0,0 +1,23 @@
{ lib, fetchFromGitHub, buildGoModule }:
buildGoModule rec {
pname = "starlark";
version = "unstable-2022-03-02";
src = fetchFromGitHub {
owner = "google";
repo = "starlark-go";
rev = "5411bad688d12781515a91cc032645331b4fc302";
sha256 = "sha256-JNsGyGlIVMS5w0W4jHVsrPqqNms3Xfpa4n/XcEWqt6I=";
};
vendorSha256 = "sha256-lgL5o3MQfZekZ++BNESwV0LeoTxwEZfziQAe99zm4RY=";
ldflags = [ "-s" "-w" ];
meta = with lib; {
homepage = "https://github.com/google/starlark-go";
description = "An interpreter for Starlark, implemented in Go";
license = licenses.bsd3;
maintainers = with maintainers; [ aaronjheng ];
};
}

View File

@ -1,31 +1,41 @@
{ rustPlatform, fetchFromGitHub, lib, python3, cmake, llvmPackages, clang, stdenv, darwin }:
{ rustPlatform, fetchFromGitHub, lib, v8 }:
rustPlatform.buildRustPackage rec {
pname = "wasmtime";
version = "0.21.0";
version = "0.35.2";
src = fetchFromGitHub {
owner = "bytecodealliance";
repo = pname;
rev = "v${version}";
sha256 = "0q7wsnq5zdskxwzsxwm98jfnv2frnwca1dkhwndcn9yyz2gyw57m";
sha256 = "sha256-4oZglk7MInLIsvbeCfs4InAcmSmzZp16XL5+8eoYXJk=";
fetchSubmodules = true;
};
cargoSha256 = "1wlig9gls7s1k1swxwhl82vfga30bady8286livxc4y2zp0vb18w";
cargoSha256 = "sha256-IqFOw9bGdM3IEoMeqDlxKfLnZvR80PSnwP9kr1tI/h0=";
nativeBuildInputs = [ python3 cmake clang ];
buildInputs = [ llvmPackages.libclang ] ++
lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
# This environment variable is required so that when wasmtime tries
# to run tests by using the rusty_v8 crate, it does not try to
# download a static v8 build from the Internet, what would break
# build hermetism.
RUSTY_V8_ARCHIVE = "${v8}/lib/libv8.a";
doCheck = true;
checkFlags = [
"--skip=cli_tests::run_cwasm"
"--skip=commands::compile::test::test_successful_compile"
"--skip=commands::compile::test::test_aarch64_flags_compile"
"--skip=commands::compile::test::test_unsupported_flags_compile"
"--skip=commands::compile::test::test_x64_flags_compile"
"--skip=commands::compile::test::test_x64_presets_compile"
"--skip=traps::parse_dwarf_info"
];
meta = with lib; {
description = "Standalone JIT-style runtime for WebAssembly, using Cranelift";
homepage = "https://github.com/bytecodealliance/wasmtime";
license = licenses.asl20;
maintainers = [ maintainers.matthewbauer ];
platforms = platforms.unix;
platforms = platforms.linux;
};
}

View File

@ -86,6 +86,46 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true;
doInstallCheck = true;
# preCheck rather than preInstallCheck because this is what pytestCheckHook
# calls (coming from the python world)
preCheck = ''
pushd ../autotest
# something has made files here read-only by this point
chmod -R u+w .
export HOME=$(mktemp -d)
export PYTHONPATH="$out/${pythonPackages.python.sitePackages}:$PYTHONPATH"
'';
installCheckInputs = with pythonPackages; [
pytestCheckHook
pytest-env
lxml
];
disabledTestPaths = [
# tests that attempt to make network requests
"gcore/vsis3.py"
"gdrivers/gdalhttp.py"
"gdrivers/wms.py"
];
disabledTests = [
# tests that attempt to make network requests
"test_jp2openjpeg_45"
# tests that require the full proj dataset which we don't package yet
# https://github.com/OSGeo/gdal/issues/5523
"test_transformer_dem_overrride_srs"
"test_osr_ct_options_area_of_interest"
] ++ lib.optionals (!stdenv.isx86_64) [
# likely precision-related expecting x87 behaviour
"test_jp2openjpeg_22"
] ++ lib.optionals stdenv.isDarwin [
# flaky on macos
"test_rda_download_queue"
];
postCheck = ''
popd # ../autotest
'';
meta = {
description = "Translator library for raster geospatial data formats";
homepage = "https://www.gdal.org/";

View File

@ -1,42 +0,0 @@
{ lib, stdenv, fetchsvn, pkg-config, mono, dotnetPackages }:
let
newtonsoft-json = dotnetPackages.NewtonsoftJson;
in stdenv.mkDerivation {
pname = "gdata-sharp";
version = "2.2.0.0";
src = fetchsvn {
url = "http://google-gdata.googlecode.com/svn/trunk/";
rev = "1217";
sha256 = "0b0rvgg3xsbbg2fdrpz0ywsy9rcahlyfskndaagd3yzm83gi6bhk";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ mono newtonsoft-json ];
sourceRoot = "svn-r1217/clients/cs";
dontStrip = true;
postPatch = ''
sed -i -e 's#^\(DEFINES=.*\)\(.\)#\1 /r:third_party/Newtonsoft.Json.dll\2#' Makefile
# carriage return ^
'';
makeFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
homepage = "https://code.google.com/archive/p/google-gdata/";
description = "The Google Data APIs";
longDescription = ''
The Google Data APIs provide a simple protocol for reading and writing
data on the web.
'';
license = licenses.asl20;
platforms = platforms.linux;
broken = true;
};
}

View File

@ -1,12 +0,0 @@
{ callPackage, fetchFromGitHub, autoreconfHook, ... } @ args:
callPackage ./generic.nix (args // {
version = "1.0";
src = fetchFromGitHub {
owner = "arpa2";
repo = "gnutls-kdh";
rev = "ff3bb36f70a746f28554641d466e124098dfcb25";
sha256 = "1rr3p4r145lnprxn8hqyyzh3qkj3idsbqp08g07ndrhqnxq0k0sw";
};
})

View File

@ -1,95 +0,0 @@
{ config, lib, stdenv, zlib, lzo, libtasn1, nettle, pkg-config, lzip
, perl, gmp, autogen, libidn, p11-kit, unbound, libiconv
, guileBindings ? config.gnutls.guile or false, guile
, tpmSupport ? true, trousers, nettools, gperftools, gperf, gettext, automake
, bison, texinfo
# Version dependent args
, version, src, patches ? [], postPatch ? "", nativeBuildInputs ? []
, ...}:
assert guileBindings -> guile != null;
let
# XXX: Gnulib's `test-select' fails on FreeBSD:
# https://hydra.nixos.org/build/2962084/nixlog/1/raw .
doCheck = !stdenv.isFreeBSD && !stdenv.isDarwin && lib.versionAtLeast version "3.4";
in
stdenv.mkDerivation {
pname = "gnutls-kdh";
inherit version;
inherit src patches;
outputs = [ "bin" "dev" "out" ];
patchPhase = ''
# rm -fR ./po
# substituteInPlace configure "po/Makefile.in" " "
substituteInPlace doc/manpages/Makefile.in --replace "gnutls_cipher_list.3" " "
substituteInPlace doc/manpages/Makefile.in --replace "gnutls_cipher_self_test.3" " "
substituteInPlace doc/manpages/Makefile.in --replace "gnutls_digest_self_test.3" " "
substituteInPlace doc/manpages/Makefile.in --replace "gnutls_mac_self_test.3" " "
substituteInPlace doc/manpages/Makefile.in --replace "gnutls_pk_self_test.3" " "
printf "all: ;\n\ninstall: ;" > "po/Makefile.in"
printf "all: ;\n\ninstall: ;" > "po/Makefile.in.in"
'';
postPatch = lib.optionalString (lib.versionAtLeast version "3.4") ''
sed '2iecho "name constraints tests skipped due to datefudge problems"\nexit 0' \
-i tests/cert-tests/name-constraints
'' + postPatch;
preConfigure = "patchShebangs .";
configureFlags =
lib.optional stdenv.isLinux "--with-default-trust-store-file=/etc/ssl/certs/ca-certificates.crt"
++ [
"--disable-dependency-tracking"
"--enable-fast-install"
] ++ lib.optional guileBindings
[ "--enable-guile" "--with-guile-site-dir=\${out}/share/guile/site" ];
# Build of the Guile bindings is not parallel-safe. See
# <https://github.com/arpa2/gnutls-kdh/commit/330995a920037b6030ec0282b51dde3f8b493cad>
# for the actual fix. Also an apparent race in the generation of
# systemkey-args.h.
enableParallelBuilding = false;
buildInputs = [ lzo lzip nettle libtasn1 libidn p11-kit zlib gmp
autogen gperftools gperf gettext automake bison texinfo ]
++ lib.optional doCheck nettools
++ lib.optional (stdenv.isFreeBSD || stdenv.isDarwin) libiconv
++ lib.optional (tpmSupport && stdenv.isLinux) trousers
++ [ unbound ]
++ lib.optional guileBindings guile;
nativeBuildInputs = [ perl pkg-config ] ++ nativeBuildInputs;
#inherit doCheck;
doCheck = false;
# Fixup broken libtool and pkg-config files
preFixup = lib.optionalString (!stdenv.isDarwin) ''
sed ${lib.optionalString tpmSupport "-e 's,-ltspi,-L${trousers}/lib -ltspi,'"} \
-e 's,-lz,-L${zlib.out}/lib -lz,' \
-e 's,-L${gmp.dev}/lib,-L${gmp.out}/lib,' \
-e 's,-lgmp,-L${gmp.out}/lib -lgmp,' \
-i $out/lib/*.la "$dev/lib/pkgconfig/gnutls.pc"
'';
meta = with lib; {
description = "GnuTLS with additional TLS-KDH ciphers: Kerberos + Diffie-Hellman";
longDescription = ''
The ARPA2 project aims to add security. This is an enhanced
version of GnuTLS, a project that aims to develop a library which
provides a secure layer, over a reliable transport
layer. It adds TLS-KDH ciphers: Kerberos + Diffie-Hellman.
'';
homepage = "https://github.com/arpa2/gnutls-kdh";
license = licenses.lgpl21Plus;
maintainers = with maintainers; [ leenaars ];
platforms = platforms.all;
broken = true;
};
}

View File

@ -1,29 +0,0 @@
{lib, stdenv, fetchurl, pkg-config, gtk2, t1lib, glib, libxml2, popt, gmetadom ? null }:
let
pname = "gtkmathview";
version = "0.8.0";
in
stdenv.mkDerivation {
name = "${pname}-${version}";
src = fetchurl {
url = "http://helm.cs.unibo.it/mml-widget/sources/${pname}-${version}.tar.gz";
sha256 = "0hwcamf5fi35frg7q6kgisc9v0prqbhsplb2gl55cg3av9sh3hqx";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ t1lib glib gmetadom libxml2 popt];
propagatedBuildInputs = [gtk2 t1lib];
patches = [ ./gcc-4.3-build-fixes.patch ./gcc-4.4-build-fixes.patch ];
meta = {
homepage = "http://helm.cs.unibo.it/mml-widget/";
description = "C++ rendering engine for MathML documents";
license = lib.licenses.lgpl3Plus;
maintainers = [ lib.maintainers.roconnor ];
broken = true;
};
}

View File

@ -1,74 +0,0 @@
From: Stefano Zacchiroli <zack@upsilon.cc>
Date: Fri, 11 Dec 2009 12:58:56 +0100
Subject: [PATCH] gcc 4.3 build fixes
---
mathmlps/main.cc | 1 +
mathmlsvg/SMS.cc | 1 +
mathmlsvg/main.cc | 1 +
src/backend/ps/T1_FontDataBase.cc | 2 +-
src/engine/mathml/mathVariantAux.cc | 1 +
5 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/mathmlps/main.cc b/mathmlps/main.cc
index cc6cd1c..48339af 100644
--- a/mathmlps/main.cc
+++ b/mathmlps/main.cc
@@ -19,6 +19,7 @@
#include <config.h>
#include <cassert>
+#include <cstring>
#include <fstream>
#include <popt.h>
diff --git a/mathmlsvg/SMS.cc b/mathmlsvg/SMS.cc
index a76266e..be7add8 100644
--- a/mathmlsvg/SMS.cc
+++ b/mathmlsvg/SMS.cc
@@ -18,6 +18,7 @@
#include <config.h>
+#include <cstring>
#include <sstream>
#include "defs.h"
#include "AbstractLogger.hh"
diff --git a/mathmlsvg/main.cc b/mathmlsvg/main.cc
index 259d67e..c49e8ac 100644
--- a/mathmlsvg/main.cc
+++ b/mathmlsvg/main.cc
@@ -19,6 +19,7 @@
#include <config.h>
#include <cassert>
+#include <cstring>
#include <fstream>
#include <popt.h>
diff --git a/src/backend/ps/T1_FontDataBase.cc b/src/backend/ps/T1_FontDataBase.cc
index b6490eb..3dd436c 100644
--- a/src/backend/ps/T1_FontDataBase.cc
+++ b/src/backend/ps/T1_FontDataBase.cc
@@ -19,7 +19,7 @@
#include <t1lib.h>
#include <config.h>
#include <map>
-#include <string>
+#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <list>
diff --git a/src/engine/mathml/mathVariantAux.cc b/src/engine/mathml/mathVariantAux.cc
index 736acc1..dcf1826 100644
--- a/src/engine/mathml/mathVariantAux.cc
+++ b/src/engine/mathml/mathVariantAux.cc
@@ -19,6 +19,7 @@
#include <config.h>
#include <cassert>
+#include <cstring>
#include "mathVariantAux.hh"
--

View File

@ -1,21 +0,0 @@
From: Stefano Zacchiroli <zack@upsilon.cc>
Date: Fri, 11 Dec 2009 13:26:26 +0100
Subject: [PATCH] gcc 4.4 build fixes
---
src/common/AbstractLogger.cc | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/common/AbstractLogger.cc b/src/common/AbstractLogger.cc
index 6f638fb..c5b7e3d 100644
--- a/src/common/AbstractLogger.cc
+++ b/src/common/AbstractLogger.cc
@@ -19,6 +19,7 @@
#include <config.h>
#include <stdarg.h>
+#include <stdio.h>
#include "AbstractLogger.hh"
--

View File

@ -1,35 +0,0 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, directfb, libsigcxx, libxml2, fontconfig }:
# TODO: optional deps: baresip, FusionDale, FusionSound, SaWMan, doxygen,
# Reflex, Wnn, NLS
stdenv.mkDerivation rec {
pname = "ilixi";
version = "1.0.0";
src = fetchFromGitHub {
owner = "ilixi";
repo = "ilixi";
rev = version;
sha256 = "05h862r9mhis26v8yf967n86qf8y1gdgfzhbqfsr6pjw1k3v3wdr";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ directfb libsigcxx libxml2 fontconfig ];
configureFlags = [
"--enable-log-debug"
"--enable-debug"
"--enable-trace"
"--with-examples"
];
meta = with lib; {
description = "Lightweight C++ GUI toolkit for embedded Linux systems";
homepage = "https://github.com/ilixi/ilixi";
license = licenses.lgpl3;
platforms = platforms.linux;
maintainers = [ maintainers.bjornfor ];
broken = true; # broken by the directfb 1.6.3 -> 1.7.6 update
};
}

View File

@ -1,15 +1,23 @@
{ lib, stdenv, fetchurl }:
{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool }:
stdenv.mkDerivation rec {
pname = "libnet";
version = "1.2-rc3";
version = "1.2";
src = fetchurl {
url = "mirror://sourceforge/libnet-dev/${pname}-${version}.tar.gz";
sha256 = "0qsapqa7dzq9f6lb19kzilif0pj82b64fjv5bq086hflb9w81hvj";
src = fetchFromGitHub {
owner = "sam-github";
repo = "libnet";
rev = "v${version}";
sha256 = "sha256-Y/wd9c4whUbfpvWvKzJV6vJN3AlA14XBejchRG6wBc4=";
};
patches = [ ./fix-includes.patch ];
nativeBuildInputs = [
autoconf
automake
libtool
];
preConfigure = "./autogen.sh";
meta = with lib; {
homepage = "https://github.com/sam-github/libnet";

View File

@ -1,29 +0,0 @@
--- libnet-1.1.6.orig/src/libnet_link_linux.c
+++ libnet-1.1.6/src/libnet_link_linux.c
@@ -30,26 +30,15 @@
#include <sys/time.h>
#include <net/if.h>
-#if (__GLIBC__)
#include <netinet/if_ether.h>
#include <net/if_arp.h>
-#else
-#include <linux/if_arp.h>
-#include <linux/if_ether.h>
-#endif
#if (HAVE_PACKET_SOCKET)
#ifndef SOL_PACKET
#define SOL_PACKET 263
#endif /* SOL_PACKET */
-#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
#include <netpacket/packet.h>
#include <net/ethernet.h> /* the L2 protocols */
-#else
-#include <asm/types.h>
-#include <linux/if_packet.h>
-#include <linux/if_ether.h> /* The L2 protocols */
-#endif
#endif /* HAVE_PACKET_SOCKET */
#include "../include/libnet.h"

View File

@ -1,34 +0,0 @@
{ lib, stdenv, which, coreutils, fetchzip, qt4 }:
stdenv.mkDerivation rec {
pname = "qxt";
version = "0.6.2";
src = fetchzip {
url = "https://bitbucket.org/libqxt/libqxt/get/v${version}.tar.gz";
sha256 = "0zmqfn0h8cpky7wgaaxlfh0l89r9r0isi87587kaicyap7a6kxwz";
};
buildInputs = [ qt4 which ];
patchPhase = ''
patchShebangs configure
substituteInPlace configure --replace "/bin/pwd" "${coreutils}/bin/pwd"
'';
prefixKey = "-prefix ";
meta = {
homepage = "http://libqxt.org";
description = "An extension library for Qt";
longDescription = ''
An extension library for Qt providing a suite of cross-platform utility
classes to add functionality not readily available in the Qt toolkit by Qt
Development Frameworks, Nokia.
'';
license = lib.licenses.gpl2;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ forkk ];
broken = true;
};
}

View File

@ -81,31 +81,27 @@ rec {
cudnn_8_1_cudatoolkit_11_2 = cudnn_8_1_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_2; };
cudnn_8_1_cudatoolkit_10 = cudnn_8_1_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_10; };
cudnn_8_1_cudatoolkit_11 = cudnn_8_1_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11; };
# cuDNN 8.3 is necessary for the latest jaxlib, esp. jaxlib-bin. See
# https://github.com/google/jax/discussions/9455 for more info.
cudnn_8_3_cudatoolkit_10_2 =
generic
rec {
version = "8.3.2";
cudatoolkit = cudatoolkit_10_2;
# See https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-832/support-matrix/index.html#cudnn-cuda-hardware-versions.
minCudaVersion = "10.2.00000";
maxCudaVersion = "11.5.99999";
mkSrc = cudatoolkit:
let v = if lib.versions.majorMinor cudatoolkit.version == "10.2" then "10.2" else "11.5"; in
fetchurl {
# Starting at version 8.3.1 there's a new directory layout including
# a subdirectory `local_installers`.
url = "https://developer.download.nvidia.com/compute/redist/cudnn/v${version}/local_installers/${v}/cudnn-linux-x86_64-8.3.2.44_cuda${v}-archive.tar.xz";
hash = {
"10.2" = "sha256-1vVu+cqM+PketzIQumw9ykm6REbBZhv6/lXB7EC2aaw=";
"11.5" = "sha256-VQCVPAjF5dHd3P2iNPnvvdzb5DpTsm3AqCxyP6FwxFc=";
}."${v}";
};
}
;
cudnn_8_3_cudatoolkit_10_2 = generic rec {
version = "8.3.2";
cudatoolkit = cudatoolkit_10_2;
# See https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-832/support-matrix/index.html#cudnn-cuda-hardware-versions.
minCudaVersion = "10.2.00000";
maxCudaVersion = "11.5.99999";
mkSrc = cudatoolkit:
let v = if lib.versions.majorMinor cudatoolkit.version == "10.2" then "10.2" else "11.5"; in
fetchurl {
# Starting at version 8.3.1 there's a new directory layout including
# a subdirectory `local_installers`.
url = "https://developer.download.nvidia.com/compute/redist/cudnn/v${version}/local_installers/${v}/cudnn-linux-x86_64-8.3.2.44_cuda${v}-archive.tar.xz";
hash = {
"10.2" = "sha256-1vVu+cqM+PketzIQumw9ykm6REbBZhv6/lXB7EC2aaw=";
"11.5" = "sha256-VQCVPAjF5dHd3P2iNPnvvdzb5DpTsm3AqCxyP6FwxFc=";
}."${v}";
};
};
cudnn_8_3_cudatoolkit_11_0 = cudnn_8_3_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_0; };
cudnn_8_3_cudatoolkit_11_1 = cudnn_8_3_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_1; };
cudnn_8_3_cudatoolkit_11_2 = cudnn_8_3_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_2; };

View File

@ -1,6 +1,14 @@
{ callPackage
, cudatoolkit_10_1, cudatoolkit_10_2
, cudatoolkit_11_0, cudatoolkit_11_1, cudatoolkit_11_2, cudatoolkit_11_3, cudatoolkit_11_4
, cudatoolkit_10_1
, cudatoolkit_10_2
, cudatoolkit_11
, cudatoolkit_11_0
, cudatoolkit_11_1
, cudatoolkit_11_2
, cudatoolkit_11_3
, cudatoolkit_11_4
, cudatoolkit_11_5
, cudatoolkit_11_6
}:
rec {
@ -8,18 +16,18 @@ rec {
version = "1.2.2.5";
libPath = "lib/10.1";
cudatoolkit = cudatoolkit_10_1;
# 1.2.2 is compatible with CUDA 11.0, 11.1, and 11.2:
# ephemeral doc at https://developer.nvidia.com/cutensor/downloads
sha256 = "1dl9bd71frhac9cb8lvnh71zfsnqxbxbfhndvva2zf6nh0my4klm";
# 1.2.2 is compatible with CUDA 10.1, 10.2, and 11.x.
# See https://docs.nvidia.com/cuda/cutensor/release_notes.html#cutensor-v1-2-2.
hash = "sha256-lU7iK4DWuC/U3s1Ct/rq2Gr3w4F2U7RYYgpmF05bibY=";
};
cutensor_cudatoolkit_10_2 = cutensor_cudatoolkit_10_1.override {
version = "1.3.1.3";
libPath = "lib/10.2";
cudatoolkit = cudatoolkit_10_2;
# 1.3.1 is compatible with CUDA 11.0, 11.1, and 11.2:
# ephemeral doc at https://developer.nvidia.com/cutensor/downloads
sha256 = "sha256-mNlVnabB2IC3HnYY0mb06RLqQzDxN9ePGVeBy3hkBC8=";
# 1.3.1 is compatible with CUDA 10.2 and 11.x.
# See https://docs.nvidia.com/cuda/cutensor/release_notes.html#cutensor-v1-3-1.
hash = "sha256-mNlVnabB2IC3HnYY0mb06RLqQzDxN9ePGVeBy3hkBC8=";
};
cutensor_cudatoolkit_10 = cutensor_cudatoolkit_10_2;
@ -29,21 +37,12 @@ rec {
cudatoolkit = cudatoolkit_11_0;
};
cutensor_cudatoolkit_11_1 = cutensor_cudatoolkit_11_0.override {
cudatoolkit = cudatoolkit_11_1;
};
cutensor_cudatoolkit_11_1 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_1; };
cutensor_cudatoolkit_11_2 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_2; };
cutensor_cudatoolkit_11_3 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_3; };
cutensor_cudatoolkit_11_4 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_4; };
cutensor_cudatoolkit_11_5 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_5; };
cutensor_cudatoolkit_11_6 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_6; };
cutensor_cudatoolkit_11_2 = cutensor_cudatoolkit_11_0.override {
cudatoolkit = cudatoolkit_11_2;
};
cutensor_cudatoolkit_11_3 = cutensor_cudatoolkit_11_0.override {
cudatoolkit = cudatoolkit_11_3;
};
cutensor_cudatoolkit_11_4 = cutensor_cudatoolkit_11_0.override {
cudatoolkit = cudatoolkit_11_4;
};
cutensor_cudatoolkit_11 = cutensor_cudatoolkit_11_4;
cutensor_cudatoolkit_11 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11; };
}

View File

@ -7,7 +7,7 @@
, addOpenGLRunpath
, version
, sha256
, hash
}:
let
@ -21,7 +21,7 @@ stdenv.mkDerivation {
src = fetchurl {
url = "https://developer.download.nvidia.com/compute/cutensor/${mostOfVersion}/local_installers/libcutensor-${stdenv.hostPlatform.parsed.kernel.name}-${stdenv.hostPlatform.parsed.cpu.name}-${version}.tar.gz";
inherit sha256;
inherit hash;
};
outputs = [ "out" "dev" ];

View File

@ -38,6 +38,10 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true;
passthru = {
inherit cudatoolkit;
};
meta = with lib; {
description = "Multi-GPU and multi-node collective communication primitives for NVIDIA GPUs";
homepage = "https://developer.nvidia.com/nccl";

View File

@ -1,31 +0,0 @@
{ lib, stdenv, fetchurl, ocaml, findlib, camlp4 }:
if !lib.versionAtLeast ocaml.version "3.12"
|| lib.versionAtLeast ocaml.version "4.03"
then throw "type_conv-108.08.00 is not available for OCaml ${ocaml.version}" else
stdenv.mkDerivation rec {
pname = "ocaml-type_conv";
version = "108.08.00";
src = fetchurl {
url = "https://ocaml.janestreet.com/ocaml-core/${version}/individual/type_conv-${version}.tar.gz";
sha256 = "08ysikwwp69zvc147lzzg79nwlrzrk738rj0ggcfadi8h5il42sl";
};
nativeBuildInputs = [ ocaml findlib ];
buildInputs = [ camlp4 ];
strictDeps = true;
createFindlibDestdir = true;
meta = with lib; {
homepage = "https://ocaml.janestreet.com/";
description = "Support library for OCaml preprocessor type conversions";
license = licenses.asl20;
branch = "108";
platforms = ocaml.meta.platforms or [ ];
maintainers = with maintainers; [ maggesi ];
};
}

View File

@ -1,32 +0,0 @@
{ stdenv, lib, fetchFromGitHub, ocaml, findlib, camlp4 }:
if !lib.versionAtLeast ocaml.version "4.00"
|| lib.versionAtLeast ocaml.version "4.03"
then throw "type_conv-109.60.01 is not available for OCaml ${ocaml.version}" else
stdenv.mkDerivation rec {
pname = "ocaml-type_conv";
version = "109.60.01";
src = fetchFromGitHub {
owner = "janestreet";
repo = "type_conv";
rev = version;
sha256 = "sha256-8Oz/fPL3+RghyxQp5u6seSEdf0BgfP6XNcsMYty0rNs=";
};
nativeBuildInputs = [ ocaml findlib ];
buildInputs = [ camlp4 ];
strictDeps = true;
createFindlibDestdir = true;
meta = {
homepage = "http://forge.ocamlcore.org/projects/type-conv/";
description = "Support library for OCaml preprocessor type conversions";
license = lib.licenses.lgpl21;
platforms = ocaml.meta.platforms or [ ];
maintainers = with lib.maintainers; [ maggesi ];
};
}

Some files were not shown because too many files have changed in this diff Show More