Merge master into staging-next

gstqt5
Frederik Rietdijk 2020-08-29 13:30:25 +02:00
commit 7b56d26ae3
89 changed files with 2557 additions and 3738 deletions

View File

@ -46,7 +46,7 @@ rec {
armv7a-android-prebuilt = {
config = "armv7a-unknown-linux-androideabi";
sdkVer = "24";
sdkVer = "29";
ndkVer = "18b";
platform = platforms.armv7a-android;
useAndroidPrebuilt = true;
@ -54,7 +54,7 @@ rec {
aarch64-android-prebuilt = {
config = "aarch64-unknown-linux-android";
sdkVer = "24";
sdkVer = "29";
ndkVer = "18b";
platform = platforms.aarch64-multiplatform;
useAndroidPrebuilt = true;

View File

@ -3394,10 +3394,14 @@
name = "Hlodver Sigurdsson";
};
hugoreeves = {
email = "hugolreeves@gmail.com";
email = "hugo@hugoreeves.com";
github = "hugoreeves";
githubId = 20039091;
name = "Hugo Reeves";
keys = [{
longkeyid = "rsa4096/0x49FA39F8A7F735F9";
fingerprint = "78C2 E81C 828A 420B 269A EBC1 49FA 39F8 A7F7 35F9";
}];
};
hodapp = {
email = "hodapp87@gmail.com";
@ -7351,6 +7355,12 @@
githubId = 1153271;
name = "Sander van der Burg";
};
sarcasticadmin = {
email = "rob@sarcasticadmin.com";
github = "sarcasticadmin";
githubId = 30531572;
name = "Robert James Hernandez";
};
sargon = {
email = "danielehlers@mindeye.net";
github = "sargon";
@ -9484,6 +9494,12 @@
github = "fzakaria";
githubId = 605070;
};
nagisa = {
name = "Simonas Kazlauskas";
email = "nixpkgs@kazlauskas.me";
github = "nagisa";
githubId = 679122;
};
yevhenshymotiuk = {
name = "Yevhen Shymotiuk";
email = "yevhenshymotiuk@gmail.com";

View File

@ -204,6 +204,16 @@ GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION;
Note: Password support is only avaiable in GRUB version 2.
</para>
</listitem>
<listitem>
<para>
Following its deprecation in 20.03, the Perl NixOS test driver has been removed.
All remaining tests have been ported to the Python test framework.
Code outside nixpkgs using <filename>make-test.nix</filename> or
<filename>testing.nix</filename> needs to be ported to
<filename>make-test-python.nix</filename> and
<filename>testing-python.nix</filename> respectively.
</para>
</listitem>
</itemizedlist>
</section>
@ -223,6 +233,11 @@ GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION;
<para>
There is a new <xref linkend="opt-security.doas.enable"/> module that provides <command>doas</command>, a lighter alternative to <command>sudo</command> with many of the same features.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://hercules-ci.com">Hercules CI</link> Agent is a specialized build agent for projects built with Nix. See the <link xlink:href="https://nixos.org/nixos/options.html#services.hercules-ci-agent">options</link> and <link xlink:href="https://docs.hercules-ci.com/hercules-ci/getting-started/#deploy-agent">setup</link>.
</para>
</listitem>
</itemizedlist>

View File

@ -1,75 +0,0 @@
package Logger;
use strict;
use Thread::Queue;
use XML::Writer;
use Encode qw(decode encode);
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
sub new {
my ($class) = @_;
my $logFile = defined $ENV{LOGFILE} ? "$ENV{LOGFILE}" : "/dev/null";
my $log = new XML::Writer(OUTPUT => new IO::File(">$logFile"));
my $self = {
log => $log,
logQueue => Thread::Queue->new()
};
$self->{log}->startTag("logfile");
bless $self, $class;
return $self;
}
sub close {
my ($self) = @_;
$self->{log}->endTag("logfile");
$self->{log}->end;
}
sub drainLogQueue {
my ($self) = @_;
while (defined (my $item = $self->{logQueue}->dequeue_nb())) {
$self->{log}->dataElement("line", sanitise($item->{msg}), 'machine' => $item->{machine}, 'type' => 'serial');
}
}
sub maybePrefix {
my ($msg, $attrs) = @_;
$msg = $attrs->{machine} . ": " . $msg if defined $attrs->{machine};
return $msg;
}
sub nest {
my ($self, $msg, $coderef, $attrs) = @_;
print STDERR maybePrefix("$msg\n", $attrs);
$self->{log}->startTag("nest");
$self->{log}->dataElement("head", $msg, %{$attrs});
my $now = clock_gettime(CLOCK_MONOTONIC);
$self->drainLogQueue();
eval { &$coderef };
my $res = $@;
$self->drainLogQueue();
$self->log(sprintf("(%.2f seconds)", clock_gettime(CLOCK_MONOTONIC) - $now));
$self->{log}->endTag("nest");
die $@ if $@;
}
sub sanitise {
my ($s) = @_;
$s =~ s/[[:cntrl:]\xff]//g;
$s = decode('UTF-8', $s, Encode::FB_DEFAULT);
return encode('UTF-8', $s, Encode::FB_CROAK);
}
sub log {
my ($self, $msg, $attrs) = @_;
chomp $msg;
print STDERR maybePrefix("$msg\n", $attrs);
$self->drainLogQueue();
$self->{log}->dataElement("line", $msg, %{$attrs});
}
1;

View File

@ -1,734 +0,0 @@
package Machine;
use strict;
use threads;
use Socket;
use IO::Handle;
use POSIX qw(dup2);
use FileHandle;
use Cwd;
use File::Basename;
use File::Path qw(make_path);
use File::Slurp;
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
my $showGraphics = defined $ENV{'DISPLAY'};
my $sharedDir;
sub new {
my ($class, $args) = @_;
my $startCommand = $args->{startCommand};
my $name = $args->{name};
if (!$name) {
$startCommand =~ /run-(.*)-vm$/ if defined $startCommand;
$name = $1 || "machine";
}
if (!$startCommand) {
# !!! merge with qemu-vm.nix.
my $netBackend = "-netdev user,id=net0";
my $netFrontend = "-device virtio-net-pci,netdev=net0";
$netBackend .= "," . $args->{netBackendArgs}
if defined $args->{netBackendArgs};
$netFrontend .= "," . $args->{netFrontendArgs}
if defined $args->{netFrontendArgs};
$startCommand =
"qemu-kvm -m 384 $netBackend $netFrontend \$QEMU_OPTS ";
if (defined $args->{hda}) {
if ($args->{hdaInterface} eq "scsi") {
$startCommand .= "-drive id=hda,file="
. Cwd::abs_path($args->{hda})
. ",werror=report,if=none "
. "-device scsi-hd,drive=hda ";
} else {
$startCommand .= "-drive file=" . Cwd::abs_path($args->{hda})
. ",if=" . $args->{hdaInterface}
. ",werror=report ";
}
}
$startCommand .= "-cdrom $args->{cdrom} "
if defined $args->{cdrom};
$startCommand .= "-device piix3-usb-uhci -drive id=usbdisk,file=$args->{usb},if=none,readonly -device usb-storage,drive=usbdisk "
if defined $args->{usb};
$startCommand .= "-bios $args->{bios} "
if defined $args->{bios};
$startCommand .= $args->{qemuFlags} || "";
}
my $tmpDir = $ENV{'TMPDIR'} || "/tmp";
unless (defined $sharedDir) {
$sharedDir = $tmpDir . "/xchg-shared";
make_path($sharedDir, { mode => 0700, owner => $< });
}
my $allowReboot = 0;
$allowReboot = $args->{allowReboot} if defined $args->{allowReboot};
my $self = {
startCommand => $startCommand,
name => $name,
allowReboot => $allowReboot,
booted => 0,
pid => 0,
connected => 0,
socket => undef,
stateDir => "$tmpDir/vm-state-$name",
monitor => undef,
log => $args->{log},
redirectSerial => $args->{redirectSerial} // 1,
};
mkdir $self->{stateDir}, 0700;
bless $self, $class;
return $self;
}
sub log {
my ($self, $msg) = @_;
$self->{log}->log($msg, { machine => $self->{name} });
}
sub nest {
my ($self, $msg, $coderef, $attrs) = @_;
$self->{log}->nest($msg, $coderef, { %{$attrs || {}}, machine => $self->{name} });
}
sub name {
my ($self) = @_;
return $self->{name};
}
sub stateDir {
my ($self) = @_;
return $self->{stateDir};
}
sub start {
my ($self) = @_;
return if $self->{booted};
$self->log("starting vm");
# Create a socket pair for the serial line input/output of the VM.
my ($serialP, $serialC);
socketpair($serialP, $serialC, PF_UNIX, SOCK_STREAM, 0) or die;
# Create a Unix domain socket to which QEMU's monitor will connect.
my $monitorPath = $self->{stateDir} . "/monitor";
unlink $monitorPath;
my $monitorS;
socket($monitorS, PF_UNIX, SOCK_STREAM, 0) or die;
bind($monitorS, sockaddr_un($monitorPath)) or die "cannot bind monitor socket: $!";
listen($monitorS, 1) or die;
# Create a Unix domain socket to which the root shell in the guest will connect.
my $shellPath = $self->{stateDir} . "/shell";
unlink $shellPath;
my $shellS;
socket($shellS, PF_UNIX, SOCK_STREAM, 0) or die;
bind($shellS, sockaddr_un($shellPath)) or die "cannot bind shell socket: $!";
listen($shellS, 1) or die;
# Start the VM.
my $pid = fork();
die if $pid == -1;
if ($pid == 0) {
close $serialP;
close $monitorS;
close $shellS;
if ($self->{redirectSerial}) {
open NUL, "</dev/null" or die;
dup2(fileno(NUL), fileno(STDIN));
dup2(fileno($serialC), fileno(STDOUT));
dup2(fileno($serialC), fileno(STDERR));
}
$ENV{TMPDIR} = $self->{stateDir};
$ENV{SHARED_DIR} = $sharedDir;
$ENV{USE_TMPDIR} = 1;
$ENV{QEMU_OPTS} =
($self->{allowReboot} ? "" : "-no-reboot ") .
"-monitor unix:./monitor -chardev socket,id=shell,path=./shell " .
"-device virtio-serial -device virtconsole,chardev=shell " .
"-device virtio-rng-pci " .
($showGraphics ? "-serial stdio" : "-nographic") . " " . ($ENV{QEMU_OPTS} || "");
chdir $self->{stateDir} or die;
exec $self->{startCommand};
die "running VM script: $!";
}
# Process serial line output.
close $serialC;
threads->create(\&processSerialOutput, $self, $serialP)->detach;
sub processSerialOutput {
my ($self, $serialP) = @_;
while (<$serialP>) {
chomp;
s/\r$//;
print STDERR $self->{name}, "# $_\n";
$self->{log}->{logQueue}->enqueue({msg => $_, machine => $self->{name}}); # !!!
}
}
eval {
local $SIG{CHLD} = sub { die "QEMU died prematurely\n"; };
# Wait until QEMU connects to the monitor.
accept($self->{monitor}, $monitorS) or die;
# Wait until QEMU connects to the root shell socket. QEMU
# does so immediately; this doesn't mean that the root shell
# has connected yet inside the guest.
accept($self->{socket}, $shellS) or die;
$self->{socket}->autoflush(1);
};
die "$@" if $@;
$self->waitForMonitorPrompt;
$self->log("QEMU running (pid $pid)");
$self->{pid} = $pid;
$self->{booted} = 1;
}
# Send a command to the monitor and wait for it to finish. TODO: QEMU
# also has a JSON-based monitor interface now, but it doesn't support
# all commands yet. We should use it once it does.
sub sendMonitorCommand {
my ($self, $command) = @_;
$self->log("sending monitor command: $command");
syswrite $self->{monitor}, "$command\n";
return $self->waitForMonitorPrompt;
}
# Wait until the monitor sends "(qemu) ".
sub waitForMonitorPrompt {
my ($self) = @_;
my $res = "";
my $s;
while (sysread($self->{monitor}, $s, 1024)) {
$res .= $s;
last if $res =~ s/\(qemu\) $//;
}
return $res;
}
# Call the given code reference repeatedly, with 1 second intervals,
# until it returns 1 or a timeout is reached.
sub retry {
my ($coderef) = @_;
my $n;
for ($n = 899; $n >=0; $n--) {
return if &$coderef($n);
sleep 1;
}
die "action timed out after $n seconds";
}
sub connect {
my ($self) = @_;
return if $self->{connected};
$self->nest("waiting for the VM to finish booting", sub {
$self->start;
my $now = clock_gettime(CLOCK_MONOTONIC);
local $SIG{ALRM} = sub { die "timed out waiting for the VM to connect\n"; };
alarm 600;
readline $self->{socket} or die "the VM quit before connecting\n";
alarm 0;
$self->log("connected to guest root shell");
# We're interested in tracking how close we are to `alarm`.
$self->log(sprintf("(connecting took %.2f seconds)", clock_gettime(CLOCK_MONOTONIC) - $now));
$self->{connected} = 1;
});
}
sub waitForShutdown {
my ($self) = @_;
return unless $self->{booted};
$self->nest("waiting for the VM to power off", sub {
waitpid $self->{pid}, 0;
$self->{pid} = 0;
$self->{booted} = 0;
$self->{connected} = 0;
});
}
sub isUp {
my ($self) = @_;
return $self->{booted} && $self->{connected};
}
sub execute_ {
my ($self, $command) = @_;
$self->connect;
print { $self->{socket} } ("( $command ); echo '|!=EOF' \$?\n");
my $out = "";
while (1) {
my $line = readline($self->{socket});
die "connection to VM lost unexpectedly" unless defined $line;
#$self->log("got line: $line");
if ($line =~ /^(.*)\|\!\=EOF\s+(\d+)$/) {
$out .= $1;
$self->log("exit status $2");
return ($2, $out);
}
$out .= $line;
}
}
sub execute {
my ($self, $command) = @_;
my @res;
$self->nest("running command: $command", sub {
@res = $self->execute_($command);
});
return @res;
}
sub succeed {
my ($self, @commands) = @_;
my $res;
foreach my $command (@commands) {
$self->nest("must succeed: $command", sub {
my ($status, $out) = $self->execute_($command);
if ($status != 0) {
$self->log("output: $out");
die "command `$command' did not succeed (exit code $status)\n";
}
$res .= $out;
});
}
return $res;
}
sub mustSucceed {
succeed @_;
}
sub waitUntilSucceeds {
my ($self, $command) = @_;
$self->nest("waiting for success: $command", sub {
retry sub {
my ($status, $out) = $self->execute($command);
return 1 if $status == 0;
};
});
}
sub waitUntilFails {
my ($self, $command) = @_;
$self->nest("waiting for failure: $command", sub {
retry sub {
my ($status, $out) = $self->execute($command);
return 1 if $status != 0;
};
});
}
sub fail {
my ($self, $command) = @_;
$self->nest("must fail: $command", sub {
my ($status, $out) = $self->execute_($command);
die "command `$command' unexpectedly succeeded"
if $status == 0;
});
}
sub mustFail {
fail @_;
}
sub getUnitInfo {
my ($self, $unit, $user) = @_;
my ($status, $lines) = $self->systemctl("--no-pager show \"$unit\"", $user);
return undef if $status != 0;
my $info = {};
foreach my $line (split '\n', $lines) {
$line =~ /^([^=]+)=(.*)$/ or next;
$info->{$1} = $2;
}
return $info;
}
sub systemctl {
my ($self, $q, $user) = @_;
if ($user) {
$q =~ s/'/\\'/g;
return $self->execute("su -l $user -c \$'XDG_RUNTIME_DIR=/run/user/`id -u` systemctl --user $q'");
}
return $self->execute("systemctl $q");
}
# Fail if the given systemd unit is not in the "active" state.
sub requireActiveUnit {
my ($self, $unit) = @_;
$self->nest("checking if unit $unit has reached state 'active'", sub {
my $info = $self->getUnitInfo($unit);
my $state = $info->{ActiveState};
if ($state ne "active") {
die "Expected unit $unit to to be in state 'active' but it is in state $state\n";
};
});
}
# Wait for a systemd unit to reach the "active" state.
sub waitForUnit {
my ($self, $unit, $user) = @_;
$self->nest("waiting for unit $unit", sub {
retry sub {
my $info = $self->getUnitInfo($unit, $user);
my $state = $info->{ActiveState};
die "unit $unit reached state $state\n" if $state eq "failed";
if ($state eq "inactive") {
# If there are no pending jobs, then assume this unit
# will never reach active state.
my ($status, $jobs) = $self->systemctl("list-jobs --full 2>&1", $user);
if ($jobs =~ /No jobs/) { # FIXME: fragile
# Handle the case where the unit may have started
# between the previous getUnitInfo() and
# list-jobs.
my $info2 = $self->getUnitInfo($unit);
die "unit $unit is inactive and there are no pending jobs\n"
if $info2->{ActiveState} eq $state;
}
}
return 1 if $state eq "active";
};
});
}
sub waitForJob {
my ($self, $jobName) = @_;
return $self->waitForUnit($jobName);
}
# Wait until the specified file exists.
sub waitForFile {
my ($self, $fileName) = @_;
$self->nest("waiting for file $fileName", sub {
retry sub {
my ($status, $out) = $self->execute("test -e $fileName");
return 1 if $status == 0;
}
});
}
sub startJob {
my ($self, $jobName, $user) = @_;
$self->systemctl("start $jobName", $user);
# FIXME: check result
}
sub stopJob {
my ($self, $jobName, $user) = @_;
$self->systemctl("stop $jobName", $user);
}
# Wait until the machine is listening on the given TCP port.
sub waitForOpenPort {
my ($self, $port) = @_;
$self->nest("waiting for TCP port $port", sub {
retry sub {
my ($status, $out) = $self->execute("nc -z localhost $port");
return 1 if $status == 0;
}
});
}
# Wait until the machine is not listening on the given TCP port.
sub waitForClosedPort {
my ($self, $port) = @_;
retry sub {
my ($status, $out) = $self->execute("nc -z localhost $port");
return 1 if $status != 0;
}
}
sub shutdown {
my ($self) = @_;
return unless $self->{booted};
print { $self->{socket} } ("poweroff\n");
$self->waitForShutdown;
}
sub crash {
my ($self) = @_;
return unless $self->{booted};
$self->log("forced crash");
$self->sendMonitorCommand("quit");
$self->waitForShutdown;
}
# Make the machine unreachable by shutting down eth1 (the multicast
# interface used to talk to the other VMs). We keep eth0 up so that
# the test driver can continue to talk to the machine.
sub block {
my ($self) = @_;
$self->sendMonitorCommand("set_link virtio-net-pci.1 off");
}
# Make the machine reachable.
sub unblock {
my ($self) = @_;
$self->sendMonitorCommand("set_link virtio-net-pci.1 on");
}
# Take a screenshot of the X server on :0.0.
sub screenshot {
my ($self, $filename) = @_;
my $dir = $ENV{'out'} || Cwd::abs_path(".");
$filename = "$dir/${filename}.png" if $filename =~ /^\w+$/;
my $tmp = "${filename}.ppm";
my $name = basename($filename);
$self->nest("making screenshot $name", sub {
$self->sendMonitorCommand("screendump $tmp");
system("pnmtopng $tmp > ${filename}") == 0
or die "cannot convert screenshot";
unlink $tmp;
}, { image => $name } );
}
# Get the text of TTY<n>
sub getTTYText {
my ($self, $tty) = @_;
my ($status, $out) = $self->execute("fold -w\$(stty -F /dev/tty${tty} size | awk '{print \$2}') /dev/vcs${tty}");
return $out;
}
# Wait until TTY<n>'s text matches a particular regular expression
sub waitUntilTTYMatches {
my ($self, $tty, $regexp) = @_;
$self->nest("waiting for $regexp to appear on tty $tty", sub {
retry sub {
my ($retries_remaining) = @_;
if ($retries_remaining == 0) {
$self->log("Last chance to match /$regexp/ on TTY$tty, which currently contains:");
$self->log($self->getTTYText($tty));
}
return 1 if $self->getTTYText($tty) =~ /$regexp/;
}
});
}
# Debugging: Dump the contents of the TTY<n>
sub dumpTTYContents {
my ($self, $tty) = @_;
$self->execute("fold -w 80 /dev/vcs${tty} | systemd-cat");
}
# Take a screenshot and return the result as text using optical character
# recognition.
sub getScreenText {
my ($self) = @_;
system("command -v tesseract &> /dev/null") == 0
or die "getScreenText used but enableOCR is false";
my $text;
$self->nest("performing optical character recognition", sub {
my $tmpbase = Cwd::abs_path(".")."/ocr";
my $tmpin = $tmpbase."in.ppm";
$self->sendMonitorCommand("screendump $tmpin");
my $magickArgs = "-filter Catrom -density 72 -resample 300 "
. "-contrast -normalize -despeckle -type grayscale "
. "-sharpen 1 -posterize 3 -negate -gamma 100 "
. "-blur 1x65535";
my $tessArgs = "-c debug_file=/dev/null --psm 11 --oem 2";
$text = `convert $magickArgs $tmpin tiff:- | tesseract - - $tessArgs`;
my $status = $? >> 8;
unlink $tmpin;
die "OCR failed with exit code $status" if $status != 0;
});
return $text;
}
# Wait until a specific regexp matches the textual contents of the screen.
sub waitForText {
my ($self, $regexp) = @_;
$self->nest("waiting for $regexp to appear on the screen", sub {
retry sub {
my ($retries_remaining) = @_;
if ($retries_remaining == 0) {
$self->log("Last chance to match /$regexp/ on the screen, which currently contains:");
$self->log($self->getScreenText);
}
return 1 if $self->getScreenText =~ /$regexp/;
}
});
}
# Wait until it is possible to connect to the X server. Note that
# testing the existence of /tmp/.X11-unix/X0 is insufficient.
sub waitForX {
my ($self, $regexp) = @_;
$self->nest("waiting for the X11 server", sub {
retry sub {
my ($status, $out) = $self->execute("journalctl -b SYSLOG_IDENTIFIER=systemd | grep 'Reached target Current graphical'");
return 0 if $status != 0;
($status, $out) = $self->execute("[ -e /tmp/.X11-unix/X0 ]");
return 1 if $status == 0;
}
});
}
sub getWindowNames {
my ($self) = @_;
my $res = $self->mustSucceed(
q{xwininfo -root -tree | sed 's/.*0x[0-9a-f]* \"\([^\"]*\)\".*/\1/; t; d'});
return split /\n/, $res;
}
sub waitForWindow {
my ($self, $regexp) = @_;
$self->nest("waiting for a window to appear", sub {
retry sub {
my @names = $self->getWindowNames;
my ($retries_remaining) = @_;
if ($retries_remaining == 0) {
$self->log("Last chance to match /$regexp/ on the the window list, which currently contains:");
$self->log(join(", ", @names));
}
foreach my $n (@names) {
return 1 if $n =~ /$regexp/;
}
}
});
}
sub copyFileFromHost {
my ($self, $from, $to) = @_;
my $s = `cat $from` or die;
$s =~ s/'/'\\''/g;
$self->mustSucceed("echo '$s' > $to");
}
my %charToKey = (
'A' => "shift-a", 'N' => "shift-n", '-' => "0x0C", '_' => "shift-0x0C", '!' => "shift-0x02",
'B' => "shift-b", 'O' => "shift-o", '=' => "0x0D", '+' => "shift-0x0D", '@' => "shift-0x03",
'C' => "shift-c", 'P' => "shift-p", '[' => "0x1A", '{' => "shift-0x1A", '#' => "shift-0x04",
'D' => "shift-d", 'Q' => "shift-q", ']' => "0x1B", '}' => "shift-0x1B", '$' => "shift-0x05",
'E' => "shift-e", 'R' => "shift-r", ';' => "0x27", ':' => "shift-0x27", '%' => "shift-0x06",
'F' => "shift-f", 'S' => "shift-s", '\'' => "0x28", '"' => "shift-0x28", '^' => "shift-0x07",
'G' => "shift-g", 'T' => "shift-t", '`' => "0x29", '~' => "shift-0x29", '&' => "shift-0x08",
'H' => "shift-h", 'U' => "shift-u", '\\' => "0x2B", '|' => "shift-0x2B", '*' => "shift-0x09",
'I' => "shift-i", 'V' => "shift-v", ',' => "0x33", '<' => "shift-0x33", '(' => "shift-0x0A",
'J' => "shift-j", 'W' => "shift-w", '.' => "0x34", '>' => "shift-0x34", ')' => "shift-0x0B",
'K' => "shift-k", 'X' => "shift-x", '/' => "0x35", '?' => "shift-0x35",
'L' => "shift-l", 'Y' => "shift-y", ' ' => "spc",
'M' => "shift-m", 'Z' => "shift-z", "\n" => "ret",
);
sub sendKeys {
my ($self, @keys) = @_;
foreach my $key (@keys) {
$key = $charToKey{$key} if exists $charToKey{$key};
$self->sendMonitorCommand("sendkey $key");
}
}
sub sendChars {
my ($self, $chars) = @_;
$self->nest("sending keys $chars", sub {
$self->sendKeys(split //, $chars);
});
}
# Sleep N seconds (in virtual guest time, not real time).
sub sleep {
my ($self, $time) = @_;
$self->succeed("sleep $time");
}
# Forward a TCP port on the host to a TCP port on the guest. Useful
# during interactive testing.
sub forwardPort {
my ($self, $hostPort, $guestPort) = @_;
$hostPort = 8080 unless defined $hostPort;
$guestPort = 80 unless defined $guestPort;
$self->sendMonitorCommand("hostfwd_add tcp::$hostPort-:$guestPort");
}
1;

View File

@ -1,191 +0,0 @@
#! /somewhere/perl -w
use strict;
use Machine;
use Term::ReadLine;
use IO::File;
use IO::Pty;
use Logger;
use Cwd;
use POSIX qw(_exit dup2);
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
$SIG{PIPE} = 'IGNORE'; # because Unix domain sockets may die unexpectedly
STDERR->autoflush(1);
my $log = new Logger;
# Start vde_switch for each network required by the test.
my %vlans;
foreach my $vlan (split / /, $ENV{VLANS} || "") {
next if defined $vlans{$vlan};
# Start vde_switch as a child process. We don't run it in daemon
# mode because we want the child process to be cleaned up when we
# die. Since we have to make sure that the control socket is
# ready, we send a dummy command to vde_switch (via stdin) and
# wait for a reply. Note that vde_switch requires stdin to be a
# TTY, so we create one.
$log->log("starting VDE switch for network $vlan");
my $socket = Cwd::abs_path "./vde$vlan.ctl";
my $pty = new IO::Pty;
my ($stdoutR, $stdoutW); pipe $stdoutR, $stdoutW;
my $pid = fork(); die "cannot fork" unless defined $pid;
if ($pid == 0) {
dup2(fileno($pty->slave), 0);
dup2(fileno($stdoutW), 1);
exec "vde_switch -s $socket --dirmode 0700" or _exit(1);
}
close $stdoutW;
print $pty "version\n";
readline $stdoutR or die "cannot start vde_switch";
$ENV{"QEMU_VDE_SOCKET_$vlan"} = $socket;
$vlans{$vlan} = $pty;
die unless -e "$socket/ctl";
}
my %vms;
my $context = "";
sub createMachine {
my ($args) = @_;
my $vm = Machine->new({%{$args}, log => $log, redirectSerial => ($ENV{USE_SERIAL} // "0") ne "1"});
$vms{$vm->name} = $vm;
$context .= "my \$" . $vm->name . " = \$vms{'" . $vm->name . "'}; ";
return $vm;
}
foreach my $vmScript (@ARGV) {
my $vm = createMachine({startCommand => $vmScript});
}
sub startAll {
$log->nest("starting all VMs", sub {
$_->start foreach values %vms;
});
}
# Wait until all VMs have terminated.
sub joinAll {
$log->nest("waiting for all VMs to finish", sub {
$_->waitForShutdown foreach values %vms;
});
}
# In interactive tests, this allows the non-interactive test script to
# be executed conveniently.
sub testScript {
eval "$context $ENV{testScript};\n";
warn $@ if $@;
}
my $nrTests = 0;
my $nrSucceeded = 0;
sub subtest {
my ($name, $coderef) = @_;
$log->nest("subtest: $name", sub {
$nrTests++;
eval { &$coderef };
if ($@) {
$log->log("error: $@", { error => 1 });
} else {
$nrSucceeded++;
}
});
}
sub runTests {
if (defined $ENV{tests}) {
$log->nest("running the VM test script", sub {
eval "$context $ENV{tests}";
if ($@) {
$log->log("error: $@", { error => 1 });
die $@;
}
}, { expanded => 1 });
} else {
my $term = Term::ReadLine->new('nixos-vm-test');
$term->ReadHistory;
while (defined ($_ = $term->readline("> "))) {
eval "$context $_\n";
warn $@ if $@;
}
$term->WriteHistory;
}
# Copy the kernel coverage data for each machine, if the kernel
# has been compiled with coverage instrumentation.
$log->nest("collecting coverage data", sub {
foreach my $vm (values %vms) {
my $gcovDir = "/sys/kernel/debug/gcov";
next unless $vm->isUp();
my ($status, $out) = $vm->execute("test -e $gcovDir");
next if $status != 0;
# Figure out where to put the *.gcda files so that the
# report generator can find the corresponding kernel
# sources.
my $kernelDir = $vm->mustSucceed("echo \$(dirname \$(readlink -f /run/current-system/kernel))/.build/linux-*");
chomp $kernelDir;
my $coverageDir = "/tmp/xchg/coverage-data/$kernelDir";
# Copy all the *.gcda files.
$vm->execute("for d in $gcovDir/nix/store/*/.build/linux-*; do for i in \$(cd \$d && find -name '*.gcda'); do echo \$i; mkdir -p $coverageDir/\$(dirname \$i); cp -v \$d/\$i $coverageDir/\$i; done; done");
}
});
$log->nest("syncing", sub {
foreach my $vm (values %vms) {
next unless $vm->isUp();
$vm->execute("sync");
}
});
if ($nrTests != 0) {
$log->log("$nrSucceeded out of $nrTests tests succeeded",
($nrSucceeded < $nrTests ? { error => 1 } : { }));
}
}
# Create an empty raw virtual disk with the given name and size (in
# MiB).
sub createDisk {
my ($name, $size) = @_;
system("qemu-img create -f raw $name ${size}M") == 0
or die "cannot create image of size $size";
}
END {
$log->nest("cleaning up", sub {
foreach my $vm (values %vms) {
if ($vm->{pid}) {
$log->log("killing " . $vm->{name} . " (pid " . $vm->{pid} . ")");
kill 9, $vm->{pid};
}
}
});
$log->close();
}
my $now1 = clock_gettime(CLOCK_MONOTONIC);
runTests;
my $now2 = clock_gettime(CLOCK_MONOTONIC);
printf STDERR "test script finished in %.2fs\n", $now2 - $now1;
exit ($nrSucceeded < $nrTests ? 1 : 0);

View File

@ -1,258 +0,0 @@
{ system
, pkgs ? import ../.. { inherit system config; }
# Use a minimal kernel?
, minimal ? false
# Ignored
, config ? {}
# Modules to add to each VM
, extraConfigurations ? [] }:
with import ./build-vms.nix { inherit system pkgs minimal extraConfigurations; };
with pkgs;
rec {
inherit pkgs;
testDriver = lib.warn ''
Perl VM tests are deprecated and will be removed for 20.09.
Please update your tests to use the python test driver.
See https://github.com/NixOS/nixpkgs/pull/71684 for details.
'' stdenv.mkDerivation {
name = "nixos-test-driver";
buildInputs = [ makeWrapper perl ];
dontUnpack = true;
preferLocalBuild = true;
installPhase =
''
mkdir -p $out/bin
cp ${./test-driver/test-driver.pl} $out/bin/nixos-test-driver
chmod u+x $out/bin/nixos-test-driver
libDir=$out/${perl.libPrefix}
mkdir -p $libDir
cp ${./test-driver/Machine.pm} $libDir/Machine.pm
cp ${./test-driver/Logger.pm} $libDir/Logger.pm
wrapProgram $out/bin/nixos-test-driver \
--prefix PATH : "${lib.makeBinPath [ qemu_test vde2 netpbm coreutils ]}" \
--prefix PERL5LIB : "${with perlPackages; makePerlPath [ TermReadLineGnu XMLWriter IOTty FileSlurp ]}:$out/${perl.libPrefix}"
'';
};
# Run an automated test suite in the given virtual network.
# `driver' is the script that runs the network.
runTests = driver:
stdenv.mkDerivation {
name = "vm-test-run-${driver.testName}";
requiredSystemFeatures = [ "kvm" "nixos-test" ];
buildCommand =
''
mkdir -p $out
LOGFILE=/dev/null tests='eval $ENV{testScript}; die $@ if $@;' ${driver}/bin/nixos-test-driver
for i in */xchg/coverage-data; do
mkdir -p $out/coverage-data
mv $i $out/coverage-data/$(dirname $(dirname $i))
done
'';
};
makeTest =
{ testScript
, makeCoverageReport ? false
, enableOCR ? false
, name ? "unnamed"
, ...
} @ t:
let
# A standard store path to the vm monitor is built like this:
# /tmp/nix-build-vm-test-run-$name.drv-0/vm-state-machine/monitor
# The max filename length of a unix domain socket is 108 bytes.
# This means $name can at most be 50 bytes long.
maxTestNameLen = 50;
testNameLen = builtins.stringLength name;
testDriverName = with builtins;
if testNameLen > maxTestNameLen then
abort ("The name of the test '${name}' must not be longer than ${toString maxTestNameLen} " +
"it's currently ${toString testNameLen} characters long.")
else
"nixos-test-driver-${name}";
nodes = buildVirtualNetwork (
t.nodes or (if t ? machine then { machine = t.machine; } else { }));
testScript' =
# Call the test script with the computed nodes.
if lib.isFunction testScript
then testScript { inherit nodes; }
else testScript;
vlans = map (m: m.config.virtualisation.vlans) (lib.attrValues nodes);
vms = map (m: m.config.system.build.vm) (lib.attrValues nodes);
ocrProg = tesseract4.override { enableLanguages = [ "eng" ]; };
imagemagick_tiff = imagemagick_light.override { inherit libtiff; };
# Generate onvenience wrappers for running the test driver
# interactively with the specified network, and for starting the
# VMs from the command line.
driver = runCommand testDriverName
{ buildInputs = [ makeWrapper];
testScript = testScript';
preferLocalBuild = true;
testName = name;
}
''
mkdir -p $out/bin
echo "$testScript" > $out/test-script
ln -s ${testDriver}/bin/nixos-test-driver $out/bin/
vms=($(for i in ${toString vms}; do echo $i/bin/run-*-vm; done))
wrapProgram $out/bin/nixos-test-driver \
--add-flags "''${vms[*]}" \
${lib.optionalString enableOCR
"--prefix PATH : '${ocrProg}/bin:${imagemagick_tiff}/bin'"} \
--run "export testScript=\"\$(cat $out/test-script)\"" \
--set VLANS '${toString vlans}'
ln -s ${testDriver}/bin/nixos-test-driver $out/bin/nixos-run-vms
wrapProgram $out/bin/nixos-run-vms \
--add-flags "''${vms[*]}" \
${lib.optionalString enableOCR "--prefix PATH : '${ocrProg}/bin'"} \
--set tests 'startAll; joinAll;' \
--set VLANS '${toString vlans}' \
${lib.optionalString (builtins.length vms == 1) "--set USE_SERIAL 1"}
''; # "
passMeta = drv: drv // lib.optionalAttrs (t ? meta) {
meta = (drv.meta or {}) // t.meta;
};
test = passMeta (runTests driver);
report = passMeta (releaseTools.gcovReport { coverageRuns = [ test ]; });
nodeNames = builtins.attrNames nodes;
invalidNodeNames = lib.filter
(node: builtins.match "^[A-z_][A-z0-9_]+$" node == null) nodeNames;
in
if lib.length invalidNodeNames > 0 then
throw ''
Cannot create machines out of (${lib.concatStringsSep ", " invalidNodeNames})!
All machines are referenced as perl variables in the testing framework which will break the
script when special characters are used.
Please stick to alphanumeric chars and underscores as separation.
''
else
(if makeCoverageReport then report else test) // {
inherit nodes driver test;
};
runInMachine =
{ drv
, machine
, preBuild ? ""
, postBuild ? ""
, ... # ???
}:
let
vm = buildVM { }
[ machine
{ key = "run-in-machine";
networking.hostName = "client";
nix.readOnlyStore = false;
virtualisation.writableStore = false;
}
];
buildrunner = writeText "vm-build" ''
source $1
${coreutils}/bin/mkdir -p $TMPDIR
cd $TMPDIR
exec $origBuilder $origArgs
'';
testScript = ''
startAll;
$client->waitForUnit("multi-user.target");
${preBuild}
$client->succeed("env -i ${bash}/bin/bash ${buildrunner} /tmp/xchg/saved-env >&2");
${postBuild}
$client->succeed("sync"); # flush all data before pulling the plug
'';
vmRunCommand = writeText "vm-run" ''
xchg=vm-state-client/xchg
${coreutils}/bin/mkdir $out
${coreutils}/bin/mkdir -p $xchg
for i in $passAsFile; do
i2=''${i}Path
_basename=$(${coreutils}/bin/basename ''${!i2})
${coreutils}/bin/cp ''${!i2} $xchg/$_basename
eval $i2=/tmp/xchg/$_basename
${coreutils}/bin/ls -la $xchg
done
unset i i2 _basename
export | ${gnugrep}/bin/grep -v '^xchg=' > $xchg/saved-env
unset xchg
export tests='${testScript}'
${testDriver}/bin/nixos-test-driver ${vm.config.system.build.vm}/bin/run-*-vm
''; # */
in
lib.overrideDerivation drv (attrs: {
requiredSystemFeatures = [ "kvm" ];
builder = "${bash}/bin/sh";
args = ["-e" vmRunCommand];
origArgs = attrs.args;
origBuilder = attrs.builder;
});
runInMachineWithX = { require ? [], ... } @ args:
let
client =
{ ... }:
{
inherit require;
imports = [
../tests/common/auto.nix
];
virtualisation.memorySize = 1024;
services.xserver.enable = true;
test-support.displayManager.auto.enable = true;
services.xserver.displayManager.defaultSession = "none+icewm";
services.xserver.windowManager.icewm.enable = true;
};
in
runInMachine ({
machine = client;
preBuild =
''
$client->waitForX;
'';
} // args);
simpleTest = as: (makeTest as).test;
}

View File

@ -262,6 +262,7 @@
./services/continuous-integration/buildbot/worker.nix
./services/continuous-integration/buildkite-agents.nix
./services/continuous-integration/hail.nix
./services/continuous-integration/hercules-ci-agent/default.nix
./services/continuous-integration/hydra/default.nix
./services/continuous-integration/gitlab-runner.nix
./services/continuous-integration/gocd-agent/default.nix

View File

@ -23,11 +23,17 @@ in
default = [];
description = "List of packages to be added to apparmor's include path";
};
parserConfig = mkOption {
type = types.str;
default = "";
description = "AppArmor parser configuration file content";
};
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.apparmor-utils ];
environment.etc."apparmor/parser.conf".text = cfg.parserConfig;
boot.kernelParams = [ "apparmor=1" "security=apparmor" ];

View File

@ -0,0 +1,213 @@
/*
This file is for options that NixOS and nix-darwin have in common.
Platform-specific code is in the respective default.nix files.
*/
{ config, lib, options, pkgs, ... }:
let
inherit (lib) mkOption mkIf types filterAttrs literalExample mkRenamedOptionModule;
cfg =
config.services.hercules-ci-agent;
format = pkgs.formats.toml {};
settingsModule = { config, ... }: {
freeformType = format.type;
options = {
baseDirectory = mkOption {
type = types.path;
default = "/var/lib/hercules-ci-agent";
description = ''
State directory (secrets, work directory, etc) for agent
'';
};
concurrentTasks = mkOption {
description = ''
Number of tasks to perform simultaneously, such as evaluations, derivations.
You must have a total capacity across agents of at least 2 concurrent tasks on <literal>x86_64-linux</literal>
to allow for import from derivation.
'';
type = types.int;
default = 4;
};
workDirectory = mkOption {
description = ''
The directory in which temporary subdirectories are created for task state. This includes sources for Nix evaluation.
'';
type = types.path;
default = config.baseDirectory + "/work";
defaultText = literalExample ''baseDirectory + "/work"'';
};
staticSecretsDirectory = mkOption {
description = ''
This is the default directory to look for statically configured secrets like <literal>cluster-join-token.key</literal>.
'';
type = types.path;
default = config.baseDirectory + "/secrets";
defaultText = literalExample ''baseDirectory + "/secrets"'';
};
clusterJoinTokenPath = mkOption {
description = ''
Location of the cluster-join-token.key file.
'';
type = types.path;
default = config.staticSecretsDirectory + "/cluster-join-token.key";
defaultText = literalExample ''staticSecretsDirectory + "/cluster-join-token.key"'';
# internal: It's a bit too detailed to show by default in the docs,
# but useful to define explicitly to allow reuse by other modules.
internal = true;
};
binaryCachesPath = mkOption {
description = ''
Location of the binary-caches.json file.
'';
type = types.path;
default = config.staticSecretsDirectory + "/binary-caches.json";
defaultText = literalExample ''staticSecretsDirectory + "/binary-caches.json"'';
# internal: It's a bit too detailed to show by default in the docs,
# but useful to define explicitly to allow reuse by other modules.
internal = true;
};
};
};
checkNix =
if !cfg.checkNix
then ""
else if lib.versionAtLeast config.nix.package.version "2.4.0"
then ""
else pkgs.stdenv.mkDerivation {
name = "hercules-ci-check-system-nix-src";
inherit (config.nix.package) src patches;
configurePhase = ":";
buildPhase = ''
echo "Checking in-memory pathInfoCache expiry"
if ! grep 'struct PathInfoCacheValue' src/libstore/store-api.hh >/dev/null; then
cat 1>&2 <<EOF
You are deploying Hercules CI Agent on a system with an incompatible
nix-daemon. Please
- either upgrade Nix to version 2.4.0 (when released),
- or set option services.hercules-ci-agent.patchNix = true;
- or set option nix.package to a build of Nix 2.3 with this patch applied:
https://github.com/NixOS/nix/pull/3405
The patch is required for Nix-daemon clients that expect a change in binary
cache contents while running, like the agent's evaluator. Without it, import
from derivation will fail if your cluster has more than one machine.
We are conservative with changes to the overall system, which is why we
keep changes to a minimum and why we ask for confirmation in the form of
services.hercules-ci-agent.patchNix = true before applying.
EOF
exit 1
fi
'';
installPhase = "touch $out";
};
patchedNix = lib.mkIf (!lib.versionAtLeast pkgs.nix.version "2.4.0") (
if lib.versionAtLeast pkgs.nix.version "2.4pre"
then lib.warn "Hercules CI Agent module will not patch 2.4 pre-release. Make sure it includes (equivalently) PR #3043, commit d048577909 or is no older than 2020-03-13." pkgs.nix
else pkgs.nix.overrideAttrs (
o: {
patches = (o.patches or []) ++ [ backportNix3398 ];
}
)
);
backportNix3398 = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/hercules-ci/hercules-ci-agent/hercules-ci-agent-0.7.3/for-upstream/issue-3398-path-info-cache-ttls-backport-2.3.patch";
sha256 = "0jfckqjir9il2il7904yc1qyadw366y7xqzg81sp9sl3f1pw70ib";
};
in
{
imports = [
(mkRenamedOptionModule ["services" "hercules-ci-agent" "extraOptions"] ["services" "hercules-ci-agent" "settings"])
(mkRenamedOptionModule ["services" "hercules-ci-agent" "baseDirectory"] ["services" "hercules-ci-agent" "settings" "baseDirectory"])
(mkRenamedOptionModule ["services" "hercules-ci-agent" "concurrentTasks"] ["services" "hercules-ci-agent" "settings" "concurrentTasks"])
];
options.services.hercules-ci-agent = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable to run Hercules CI Agent as a system service.
<link xlink:href="https://hercules-ci.com">Hercules CI</link> is a
continuous integation service that is centered around Nix.
Support is available at <link xlink:href="mailto:help@hercules-ci.com">help@hercules-ci.com</link>.
'';
};
patchNix = mkOption {
type = types.bool;
default = false;
description = ''
Fix Nix 2.3 cache path metadata caching behavior. Has the effect of <literal>nix.package = patch pkgs.nix;</literal>
This option will be removed when Hercules CI Agent moves to Nix 2.4 (upcoming Nix release).
'';
};
checkNix = mkOption {
type = types.bool;
default = true;
description = ''
Whether to make sure that the system's Nix (nix-daemon) is compatible.
If you set this to false, please keep up with the change log.
'';
};
package = mkOption {
description = ''
Package containing the bin/hercules-ci-agent executable.
'';
type = types.package;
default = pkgs.hercules-ci-agent;
defaultText = literalExample "pkgs.hercules-ci-agent";
};
settings = mkOption {
description = ''
These settings are written to the <literal>agent.toml</literal> file.
Not all settings are listed as options, can be set nonetheless.
For the exhaustive list of settings, see <link xlink:href="https://docs.hercules-ci.com/hercules-ci/reference/agent-config/"/>.
'';
type = types.submoduleWith { modules = [ settingsModule ]; };
};
/*
Internal and/or computed values.
These are written as options instead of let binding to allow sharing with
default.nix on both NixOS and nix-darwin.
*/
tomlFile = mkOption {
type = types.path;
internal = true;
defaultText = "generated hercules-ci-agent.toml";
description = ''
The fully assembled config file.
'';
};
};
config = mkIf cfg.enable {
nix.extraOptions = lib.addContextFrom checkNix ''
# A store path that was missing at first may well have finished building,
# even shortly after the previous lookup. This *also* applies to the daemon.
narinfo-cache-negative-ttl = 0
'';
nix.package = mkIf cfg.patchNix patchedNix;
services.hercules-ci-agent.tomlFile =
format.generate "hercules-ci-agent.toml" cfg.settings;
};
}

View File

@ -0,0 +1,86 @@
/*
This file is for NixOS-specific options and configs.
Code that is shared with nix-darwin goes in common.nix.
*/
{ pkgs, config, lib, ... }:
let
inherit (lib) mkIf mkDefault;
cfg = config.services.hercules-ci-agent;
command = "${cfg.package}/bin/hercules-ci-agent --config ${cfg.tomlFile}";
testCommand = "${command} --test-configuration";
in
{
imports = [
./common.nix
(lib.mkRenamedOptionModule ["services" "hercules-ci-agent" "user"] ["systemd" "services" "hercules-ci-agent" "serviceConfig" "User"])
];
config = mkIf cfg.enable {
systemd.services.hercules-ci-agent = {
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
path = [ config.nix.package ];
serviceConfig = {
User = "hercules-ci-agent";
ExecStart = command;
ExecStartPre = testCommand;
Restart = "on-failure";
RestartSec = 120;
StartLimitBurst = 30 * 1000000; # practically infinite
};
};
# Changes in the secrets do not affect the unit in any way that would cause
# a restart, which is currently necessary to reload the secrets.
systemd.paths.hercules-ci-agent-restart-files = {
wantedBy = [ "hercules-ci-agent.service" ];
pathConfig = {
Unit = "hercules-ci-agent-restarter.service";
PathChanged = [ cfg.settings.clusterJoinTokenPath cfg.settings.binaryCachesPath ];
};
};
systemd.services.hercules-ci-agent-restarter = {
serviceConfig.Type = "oneshot";
script = ''
# Wait a bit, with the effect of bundling up file changes into a single
# run of this script and hopefully a single restart.
sleep 10
if systemctl is-active --quiet hercules-ci-agent.service; then
if ${testCommand}; then
systemctl restart hercules-ci-agent.service
else
echo 1>&2 "WARNING: Not restarting agent because config is not valid at this time."
fi
else
echo 1>&2 "Not restarting hercules-ci-agent despite config file update, because it is not already active."
fi
'';
};
# Trusted user allows simplified configuration and better performance
# when operating in a cluster.
nix.trustedUsers = [ config.systemd.services.hercules-ci-agent.serviceConfig.User ];
services.hercules-ci-agent.settings.nixUserIsTrusted = true;
users.users.hercules-ci-agent = {
home = cfg.settings.baseDirectory;
createHome = true;
group = "hercules-ci-agent";
description = "Hercules CI Agent system user";
isSystemUser = true;
};
users.groups.hercules-ci-agent = {};
};
}

View File

@ -322,7 +322,7 @@ https://nixos.org/nixpkgs/manual/#sec-modify-via-packageOverrides
If you want, you can tweak the Emacs package itself from your
<filename>emacs.nix</filename>. For example, if you want to have a
GTK 3-based Emacs instead of the default GTK 2-based binary and remove the
automatically generated <filename>emacs.desktop</filename> (useful is you
automatically generated <filename>emacs.desktop</filename> (useful if you
only use <command>emacsclient</command>), you can change your file
<filename>emacs.nix</filename> in this way:
</para>

View File

@ -106,11 +106,28 @@ in rec {
(onFullSupported "nixos.tests.networking.scripted.bridge")
(onFullSupported "nixos.tests.networking.scripted.dhcpOneIf")
(onFullSupported "nixos.tests.networking.scripted.dhcpSimple")
(onFullSupported "nixos.tests.networking.scripted.link")
(onFullSupported "nixos.tests.networking.scripted.loopback")
(onFullSupported "nixos.tests.networking.scripted.macvlan")
(onFullSupported "nixos.tests.networking.scripted.privacy")
(onFullSupported "nixos.tests.networking.scripted.routes")
(onFullSupported "nixos.tests.networking.scripted.sit")
(onFullSupported "nixos.tests.networking.scripted.static")
(onFullSupported "nixos.tests.networking.scripted.virtual")
(onFullSupported "nixos.tests.networking.scripted.vlan")
(onFullSupported "nixos.tests.networking.networkd.bond")
(onFullSupported "nixos.tests.networking.networkd.bridge")
(onFullSupported "nixos.tests.networking.networkd.dhcpOneIf")
(onFullSupported "nixos.tests.networking.networkd.dhcpSimple")
(onFullSupported "nixos.tests.networking.networkd.link")
(onFullSupported "nixos.tests.networking.networkd.loopback")
(onFullSupported "nixos.tests.networking.networkd.macvlan")
(onFullSupported "nixos.tests.networking.networkd.privacy")
(onFullSupported "nixos.tests.networking.networkd.routes")
(onFullSupported "nixos.tests.networking.networkd.sit")
(onFullSupported "nixos.tests.networking.networkd.static")
(onFullSupported "nixos.tests.networking.networkd.virtual")
(onFullSupported "nixos.tests.networking.networkd.vlan")
(onFullSupported "nixos.tests.systemd-networkd-ipv6-prefix-delegation")
(onFullSupported "nixos.tests.nfs3.simple")
(onFullSupported "nixos.tests.nfs4.simple")

View File

@ -49,6 +49,7 @@ in
ceph-multi-node = handleTestOn ["x86_64-linux"] ./ceph-multi-node.nix {};
certmgr = handleTest ./certmgr.nix {};
cfssl = handleTestOn ["x86_64-linux"] ./cfssl.nix {};
charliecloud = handleTest ./charliecloud.nix {};
chromium = (handleTestOn ["x86_64-linux"] ./chromium.nix {}).stable or {};
cjdns = handleTest ./cjdns.nix {};
clickhouse = handleTest ./clickhouse.nix {};

View File

@ -0,0 +1,43 @@
# This test checks charliecloud image construction and run
import ./make-test-python.nix ({ pkgs, ...} : let
dockerfile = pkgs.writeText "Dockerfile" ''
FROM nix
RUN mkdir /home /tmp
RUN touch /etc/passwd /etc/group
CMD ["true"]
'';
in {
name = "charliecloud";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ bzizou ];
};
nodes = {
host = { ... }: {
environment.systemPackages = [ pkgs.charliecloud ];
virtualisation.docker.enable = true;
users.users.alice = {
isNormalUser = true;
extraGroups = [ "docker" ];
};
};
};
testScript = ''
host.start()
host.wait_for_unit("docker.service")
host.succeed(
'su - alice -c "docker load --input=${pkgs.dockerTools.examples.nix}"'
)
host.succeed(
"cp ${dockerfile} /home/alice/Dockerfile"
)
host.succeed('su - alice -c "ch-build -t hello ."')
host.succeed('su - alice -c "ch-builder2tar hello /var/tmp"')
host.succeed('su - alice -c "ch-tar2dir /var/tmp/hello.tar.gz /var/tmp"')
host.succeed('su - alice -c "ch-run /var/tmp/hello -- echo Running_From_Container_OK"')
'';
})

View File

@ -1,9 +0,0 @@
f: {
system ? builtins.currentSystem,
pkgs ? import ../.. { inherit system; config = {}; },
...
} @ args:
with import ../lib/testing.nix { inherit system pkgs; };
makeTest (if pkgs.lib.isFunction f then f (args // { inherit pkgs; inherit (pkgs) lib; }) else f)

View File

@ -531,6 +531,12 @@ let
(attrs.nativeBuildInputs or [ ]) ++ [ external.git ];
}));
orgit-forge = super.orgit-forge.overrideAttrs (attrs: {
# searches for Git at build time
nativeBuildInputs =
(attrs.nativeBuildInputs or [ ]) ++ [ external.git ];
});
# tries to write to $HOME
php-auto-yasnippets = super.php-auto-yasnippets.overrideAttrs (attrs: {
HOME = "/tmp";

View File

@ -0,0 +1,26 @@
{ lib
, buildGoModule
, fetchFromGitHub
}:
buildGoModule rec {
pname = "gophernotes";
version = "0.7.1";
src = fetchFromGitHub {
owner = "gopherdata";
repo = "gophernotes";
rev = "v${version}";
sha256 = "0hs92bdrsjqafdkhg2fk3z16h307i32mvbm9f6bb80bgsciysh27";
};
vendorSha256 = "1ylqf1sx0h2kixnq9f3prn3sha43q3ybd5ay57yy5z79qr8zqvxs";
meta = with lib; {
description = "Go kernel for Jupyter notebooks";
homepage = "https://github.com/gopherdata/gophernotes";
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
platforms = platforms.all;
};
}

View File

@ -10,7 +10,7 @@ let
[ qscintilla-qt5 gdal jinja2 numpy psycopg2
chardet dateutil pyyaml pytz requests urllib3 pygments pyqt5 sip owslib six ];
in mkDerivation rec {
version = "3.10.7";
version = "3.10.9";
pname = "qgis";
name = "${pname}-unwrapped-${version}";
@ -18,7 +18,7 @@ in mkDerivation rec {
owner = "qgis";
repo = "QGIS";
rev = "final-${lib.replaceStrings ["."] ["_"] version}";
sha256 = "0z593n5g3zwhlzhs0z7nlpblz6z2rl3y7y3j1wf1rdx76i8p3qgf";
sha256 = "0d646hvrhhgsw789qc2g3iblmsvr64qh15jck1jkaljzrj3qbml6";
};
passthru = {

View File

@ -0,0 +1,53 @@
{ lib, stdenv, mkDerivation, dpkg, fetchurl, qtbase }:
let
# To obtain the version you will need to run the following command:
#
# dpkg-deb -I ${odafileconverter.src} | grep Version
version = "21.7.0.0";
rpath = "$ORIGIN:${lib.makeLibraryPath [ stdenv.cc.cc qtbase ]}";
in mkDerivation {
pname = "oda-file-converter";
inherit version;
nativeBuildInputs = [ dpkg ];
src = fetchurl {
# NB: this URL is not stable (i.e. the underlying file and the corresponding version will change over time)
url = "https://download.opendesign.com/guestfiles/ODAFileConverter/ODAFileConverter_QT5_lnxX64_7.2dll.deb";
sha256 = "0sa21nnwzqb6g7gl0z43smqgcd9h3xipj3cq2cl7ybfh3cvcxfi9";
};
unpackPhase = ''
dpkg -x $src oda_unpacked
sourceRoot=$PWD/oda_unpacked
'';
installPhase = ''
mkdir -p $out/bin $out/lib
cp -vr $sourceRoot/usr/bin/ODAFileConverter_${version} $out/libexec
cp -vr $sourceRoot/usr/share $out/share
'';
dontWrapQtApps = true;
fixupPhase = ''
echo "setting interpreter"
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/libexec/ODAFileConverter
patchelf --set-rpath '${rpath}' $out/libexec/ODAFileConverter
wrapQtApp $out/libexec/ODAFileConverter
mv $out/libexec/ODAFileConverter $out/bin
find $out/libexec -type f -executable | while read file; do
echo "patching $file"
patchelf --set-rpath '${rpath}' $file
done
'';
meta = with stdenv.lib; {
description = "For converting between different versions of .dwg and .dxf";
homepage = "https://www.opendesign.com/guestfiles/oda_file_converter";
license = licenses.unfree;
maintainers = with maintainers; [ nagisa ];
platforms = [ "x86_64-linux" ];
};
}

View File

@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "navi";
version = "2.8.0";
version = "2.9.0";
src = fetchFromGitHub {
owner = "denisidoro";
repo = "navi";
rev = "v${version}";
sha256 = "0w63yx4c60r05nfswv61jw3l3zbl5n1s396a6f4ayn52fb6rxwg1";
sha256 = "16rwhpyk0zqks9z9bv2a1a8vww2m6867kg33bjbr29hawjg68jql";
};
cargoSha256 = "06xpk04nxkm7h4nn235x8a4gi0qhscj8kkl2f9gqphlfmm56kjfn";
cargoSha256 = "19w9gm389lj1zwhyjifhc2fzkvrvqvyc80lwxz070cnj11ir2l9m";
nativeBuildInputs = [ makeWrapper ];

View File

@ -91,19 +91,19 @@ let
fteLibPath = makeLibraryPath [ stdenv.cc.cc gmp ];
# Upstream source
version = "9.5.3";
version = "9.5.4";
lang = "en-US";
srcs = {
x86_64-linux = fetchurl {
url = "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz";
sha256 = "1kqvr0sag94xdkq85k426qq1hz2b52m315yz51w6hvc87d8332b4";
sha256 = "sha256-XW2B2wTgqMU2w9XhPJNcUjGLrHykQIngMcG/fFTWb04=";
};
i686-linux = fetchurl {
url = "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz";
sha256 = "179g00xw964d6x11wvzs84r7d6rcczx7ganqrxrs499yklscc46b";
sha256 = "sha256-EyDyAxB5Og1Cn04tuBF9ob8BxqULy2Ur07BuDxZlmqQ=";
};
};
in

View File

@ -1,15 +1,14 @@
{ stdenv
, pkgconfig
, python3
, fetchhg
, fetchpatch
, fetchFromGitLab
, gtk3
, glib
, gdbm
, gtkspell3
, ofono
, itstool
, libappindicator-gtk3
, libayatana-appindicator-gtk3
, perlPackages
, glibcLocales
, meson
@ -18,22 +17,16 @@
stdenv.mkDerivation rec {
pname = "modem-manager-gui";
version = "0.0.19.1";
version = "0.0.20";
src = fetchhg {
url = "https://linuxonly@bitbucket.org/linuxonly/modem-manager-gui";
rev = "version ${version}";
sha256 = "11iibh36567814h2bz41sa1072b86p1l13xyj670pwkh9k8kw8fd";
src = fetchFromGitLab {
domain = "salsa.debian.org";
owner = "debian";
repo = "modem-manager-gui";
rev = "upstream%2F${version}";
sha256 = "1pjx4rbsxa7gcs628yjkwb0zqrm5xq8pkmp0cfk4flfk1ryflmgr";
};
patches = [
# Fix docs build
(fetchpatch {
url = "https://bitbucket.org/linuxonly/modem-manager-gui/commits/68fb09c12413b7de9b7477cbf4241c3527568325/raw";
sha256 = "033nrlhjlk0zvadv5g9n2id53ajagswf77mda0ixnrskyi7wiig7";
})
];
nativeBuildInputs = [
pkgconfig
python3
@ -49,7 +42,7 @@ stdenv.mkDerivation rec {
gdbm
gtkspell3
ofono
libappindicator-gtk3
libayatana-appindicator-gtk3
];
postPatch = ''
@ -66,7 +59,7 @@ stdenv.mkDerivation rec {
'';
homepage = "https://linuxonly.ru/page/modem-manager-gui";
license = licenses.gpl3;
maintainers = with maintainers; [ ahuzik ];
maintainers = with maintainers; [ ahuzik galagora ];
platforms = platforms.linux;
};
}

View File

@ -9,11 +9,11 @@ let
in stdenv.mkDerivation rec {
pname = "msmtp";
version = "1.8.11";
version = "1.8.12";
src = fetchurl {
url = "https://marlam.de/${pname}/releases/${pname}-${version}.tar.xz";
sha256 = "0q0fg235qk448l1xjcwyxr7vcpzk6w57jzhjbkb0m7nffyhhypzj";
sha256 = "0m33m5bc7ajmgy7vivnzj3mhybg37259hx79xypj769kfyafyvx8";
};
patches = [

View File

@ -0,0 +1,49 @@
{ stdenv, fetchFromGitHub, python3Packages
, x11Support ? !stdenv.isDarwin
, xclip ? null
, pbcopy ? null
, useGeoIP ? false # Require /var/lib/geoip-databases/GeoIP.dat
}:
let
wrapperPath = with stdenv.lib; makeBinPath (
optional x11Support xclip ++
optional stdenv.isDarwin pbcopy
);
in
python3Packages.buildPythonPackage rec {
version = "0.9.1";
pname = "tremc";
src = fetchFromGitHub {
owner = "tremc";
repo = pname;
rev = "0.9.1";
sha256 = "1yhwvlcyv1s830p5a7q5x3mkb3mbvr5cn5nh7y62l5b6iyyynlvm";
};
buildInputs = with python3Packages; [
python
wrapPython
];
pythonPath = with python3Packages; [
ipy
pyperclip
] ++
stdenv.lib.optional useGeoIP GeoIP;
phases = [ "unpackPhase" "installPhase" ];
makeWrapperArgs = ["--prefix PATH : ${wrapperPath}"];
installPhase = ''
make DESTDIR=$out install
wrapPythonPrograms
'';
meta = with stdenv.lib; {
description = "Curses interface for transmission";
homepage = "https://github.com/tremc/tremc";
license = licenses.gpl3;
};
}

View File

@ -2,29 +2,27 @@
let
pname = "alt-ergo";
version = "2.3.2";
version = "2.3.3";
src = fetchurl {
url = "https://alt-ergo.ocamlpro.com/http/alt-ergo-${version}/alt-ergo-${version}.tar.gz";
sha256 = "130hisjzkaslygipdaaqib92spzx9rapsd45dbh5ssczjn5qnhb9";
sha256 = "124k2a4ikk4wdpmvgjpgl97x9skvr9qznk8m68dzsynzpv6yksaj";
};
preConfigure = "patchShebangs ./configure";
nativeBuildInputs = [ which ];
in
let alt-ergo-lib = ocamlPackages.buildDunePackage rec {
pname = "alt-ergo-lib";
inherit version src preConfigure nativeBuildInputs;
inherit version src nativeBuildInputs;
configureFlags = pname;
propagatedBuildInputs = with ocamlPackages; [ num ocplib-simplex stdlib-shims zarith ];
}; in
let alt-ergo-parsers = ocamlPackages.buildDunePackage rec {
pname = "alt-ergo-parsers";
inherit version src preConfigure nativeBuildInputs;
inherit version src nativeBuildInputs;
configureFlags = pname;
buildInputs = with ocamlPackages; [ menhir ];
propagatedBuildInputs = [ alt-ergo-lib ] ++ (with ocamlPackages; [ camlzip psmt2-frontend ]);
@ -32,7 +30,7 @@ let alt-ergo-parsers = ocamlPackages.buildDunePackage rec {
ocamlPackages.buildDunePackage {
inherit pname version src preConfigure nativeBuildInputs;
inherit pname version src nativeBuildInputs;
configureFlags = pname;

View File

@ -1,22 +1,32 @@
{ stdenv, fetchFromGitHub, python }:
{ stdenv, fetchFromGitHub, python3, python3Packages, docker, autoreconfHook, coreutils, makeWrapper, gnused, gnutar, gzip, findutils, sudo, nixosTests }:
stdenv.mkDerivation rec {
version = "0.12";
version = "0.18";
pname = "charliecloud";
src = fetchFromGitHub {
owner = "hpc";
repo = "charliecloud";
rev = "v${version}";
sha256 = "177rcf1klcxsp6x9cw75cmz3y2izgd1hvi1rb9vc6iz9qx1nmk3v";
sha256 = "0x2kvp95ld0yii93z9i0k9sknfx7jkgy4rkw9l369fl7f73ghsiq";
};
buildInputs = [ python ];
nativeBuildInputs = [ autoreconfHook makeWrapper ];
buildInputs = [
docker
(python3.withPackages (ps: [ ps.lark-parser ps.requests ]))
];
configureFlags = let
pythonEnv = python3.withPackages (ps: [ ps.lark-parser ps.requests ]);
in [
"--with-python=${pythonEnv}/bin/python3"
];
preConfigure = ''
substituteInPlace Makefile --replace '/bin/bash' '${stdenv.shell}'
patchShebangs test/
substituteInPlace configure.ac --replace "/usr/bin/env" "${coreutils}/bin/env"
'';
makeFlags = [
@ -24,12 +34,16 @@ stdenv.mkDerivation rec {
"LIBEXEC_DIR=lib/charliecloud"
];
# Charliecloud calls some external system tools.
# Here we wrap those deps so they are resolved inside nixpkgs.
postInstall = ''
mkdir -p $out/share/charliecloud
mv $out/lib/charliecloud/examples $out/share/charliecloud
mv $out/lib/charliecloud/test $out/share/charliecloud
for file in $out/bin/* ; do \
wrapProgram $file --prefix PATH : ${stdenv.lib.makeBinPath [ coreutils docker gnused gnutar gzip findutils sudo ]}
done
'';
passthru.tests.charliecloud = nixosTests.charliecloud;
meta = {
description = "User-defined software stacks (UDSS) for high-performance computing (HPC) centers";
longDescription = ''

View File

@ -136,8 +136,13 @@ rec {
extraPath = optionals (stdenv.isLinux) (makeBinPath [ iproute iptables e2fsprogs xz xfsprogs procps utillinux git ]);
installPhase = optionalString (stdenv.isLinux) ''
installPhase = ''
cd ./go/src/${goPackagePath}
install -Dm755 ./components/cli/docker $out/libexec/docker/docker
makeWrapper $out/libexec/docker/docker $out/bin/docker \
--prefix PATH : "$out/libexec/docker:$extraPath"
'' + optionalString (stdenv.isLinux) ''
install -Dm755 ./components/engine/bundles/dynbinary-daemon/dockerd $out/libexec/docker/dockerd
makeWrapper $out/libexec/docker/dockerd $out/bin/dockerd \
@ -153,11 +158,6 @@ rec {
# systemd
install -Dm644 ./components/engine/contrib/init/systemd/docker.service $out/etc/systemd/system/docker.service
'' + ''
install -Dm755 ./components/cli/docker $out/libexec/docker/docker
makeWrapper $out/libexec/docker/docker $out/bin/docker \
--prefix PATH : "$out/libexec/docker:$extraPath"
# completion (cli)
installShellCompletion --bash ./components/cli/contrib/completion/bash/docker
installShellCompletion --fish ./components/cli/contrib/completion/fish/docker.fish

View File

@ -0,0 +1,27 @@
{ stdenv, fetchFromGitHub, libxcb, libXrandr
, xcbutil, xcbutilkeysyms, xcbutilwm, xcbproto
}:
stdenv.mkDerivation rec {
pname = "windowchef";
version = "0.5.0";
src = fetchFromGitHub {
owner = "tudurom";
repo = "windowchef";
rev = "v${version}";
sha256 = "02fvb8fxnkpzb0vpbsl6rf7ssdrvw6mlm43qvl2sxq7zb88zdw96";
};
buildInputs = [ libxcb libXrandr xcbutil xcbutilkeysyms xcbutilwm xcbproto];
makeFlags = [ "PREFIX=$(out)" ];
meta = with stdenv.lib; {
description = "A stacking window manager that cooks windows with orders from the Waitron";
homepage = "https://github.com/tudurom/windowchef";
maintainers = with maintainers; [ bhougland ];
license = licenses.isc;
platforms = platforms.linux;
};
}

View File

@ -68,7 +68,17 @@ done
mkdir -p $out/lib/firmware
for module in $(cat closure); do
for i in $(modinfo -F firmware $module); do
# for builtin modules, modinfo will reply with a wrong output looking like:
# $ modinfo -F firmware unix
# name: unix
#
# There is a pending attempt to fix this:
# https://github.com/NixOS/nixpkgs/pull/96153
# https://lore.kernel.org/linux-modules/20200823215433.j5gc5rnsmahpf43v@blumerang/T/#u
#
# For now, the workaround is just to filter out the extraneous lines out
# of its output.
for i in $(modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:'); do
mkdir -p "$out/lib/firmware/$(dirname "$i")"
echo "firmware for $module: $i"
cp "$firmware/lib/firmware/$i" "$out/lib/firmware/$i" 2>/dev/null || if test -z "$allowMissing"; then exit 1; fi

View File

@ -1,10 +1,13 @@
{ lib, fetchurl, unzip }:
{ crateName
{ crateName ? args.pname
, pname ? null
, version
, sha256
, ... } @ args:
assert pname == null || pname == crateName;
lib.overrideDerivation (fetchurl ({
name = "${crateName}-${version}.tar.gz";
@ -30,6 +33,6 @@ lib.overrideDerivation (fetchurl ({
fi
mv "$unpackDir/$fn" "$out"
'';
} // removeAttrs args [ "crateName" "version" ]))
} // removeAttrs args [ "crateName" "pname" "version" ]))
# Hackety-hack: we actually need unzip hooks, too
(x: {nativeBuildInputs = x.nativeBuildInputs++ [unzip];})

View File

@ -1,12 +1,12 @@
{ lib, fetchzip }:
let
version = "1.059";
version = "1.062";
in
fetchzip {
name = "recursive-${version}";
url = "https://github.com/arrowtype/recursive/releases/download/${version}/Recursive-${version}.zip";
url = "https://github.com/arrowtype/recursive/releases/download/${version}/ArrowType-Recursive-${version}.zip";
postFetch = ''
mkdir -p $out/share/fonts/
@ -15,7 +15,7 @@ fetchzip {
unzip -j $downloadedFile \*.woff2 -d $out/share/fonts/woff2
'';
sha256 = "0dlv8nrcqdn5vn3s918in5ph6kx6rg607kgp66p6ibpbg2s8ljy7";
sha256 = "06qilfa0c897shh7m7rpwia02nay8cjwnizzzba27ylzy5pwd96r";
meta = with lib; {
homepage = "https://recursive.design/";

View File

@ -30,4 +30,34 @@
androidndk = androidComposition.ndk-bundle;
targetAndroidndkPkgs = targetPackages.androidndkPkgs_18b;
};
"21" =
let
ndkVersion = "21.0.6113669";
buildAndroidComposition = buildPackages.buildPackages.androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
androidComposition = androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
in
import ./androidndk-pkgs.nix {
inherit (buildPackages)
makeWrapper;
inherit (pkgs)
stdenv
runCommand wrapBintoolsWith wrapCCWith;
# buildPackages.foo rather than buildPackages.buildPackages.foo would work,
# but for splicing messing up on infinite recursion for the variants we
# *dont't* use. Using this workaround, but also making a test to ensure
# these two really are the same.
buildAndroidndk = buildAndroidComposition.ndk-bundle;
androidndk = androidComposition.ndk-bundle;
targetAndroidndkPkgs = targetPackages.androidndkPkgs_21;
};
}

View File

@ -6,6 +6,7 @@ let
let files = builtins.attrNames (builtins.readDir dir);
in map (f: dir + ("/" + f)) files;
in {
mkFlutter = mkFlutter;
stable = mkFlutter rec {
pname = "flutter";
channel = "stable";

View File

@ -62,8 +62,15 @@ let
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
''
# We only need to build stage1 on most cross-compilation because
# we will be running the compiler on the native system. In some
# situations, like native Musl compilation, we need the compiler
# to actually link to our new Libc. The iOS simulator is a special
# exception because we cant actually run simulators binaries
# ourselves.
+ stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO

View File

@ -59,8 +59,15 @@ let
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
''
# We only need to build stage1 on most cross-compilation because
# we will be running the compiler on the native system. In some
# situations, like native Musl compilation, we need the compiler
# to actually link to our new Libc. The iOS simulator is a special
# exception because we cant actually run simulators binaries
# ourselves.
+ stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO

View File

@ -59,8 +59,15 @@ let
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
''
# We only need to build stage1 on most cross-compilation because
# we will be running the compiler on the native system. In some
# situations, like native Musl compilation, we need the compiler
# to actually link to our new Libc. The iOS simulator is a special
# exception because we cant actually run simulators binaries
# ourselves.
+ stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO

View File

@ -62,8 +62,15 @@ let
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
''
# We only need to build stage1 on most cross-compilation because
# we will be running the compiler on the native system. In some
# situations, like native Musl compilation, we need the compiler
# to actually link to our new Libc. The iOS simulator is a special
# exception because we cant actually run simulators binaries
# ourselves.
+ stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO

View File

@ -62,8 +62,15 @@ let
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
''
# We only need to build stage1 on most cross-compilation because
# we will be running the compiler on the native system. In some
# situations, like native Musl compilation, we need the compiler
# to actually link to our new Libc. The iOS simulator is a special
# exception because we cant actually run simulators binaries
# ourselves.
+ stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO

View File

@ -38,7 +38,7 @@
, # Whether to build terminfo.
enableTerminfo ? !stdenv.targetPlatform.isWindows
, version ? "8.11.20200731"
, version ? "8.11.20200824"
, # What flavour to build. An empty string indicates no
# specific flavour and falls back to ghc default values.
ghcFlavour ? stdenv.lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
@ -69,7 +69,7 @@ let
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
BIGNUM_BACKEND = ${if enableNativeBignum then "native" else "gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO
@ -110,8 +110,8 @@ stdenv.mkDerivation (rec {
src = fetchgit {
url = "https://gitlab.haskell.org/ghc/ghc.git/";
rev = "380638a33691ba43fdcd2e18bca636750e5f66f1";
sha256 = "029cgiyhddvwnx5zx31i0vgj13zsvzb8fna99zr6ifscz6x7rid1";
rev = "3f50154591ada9064351ccec4adfe6df53ca2439";
sha256 = "1w2p5bc74aswspzvgvrhcb95hvj5ky38rgqqjvrri19z2qyiky6d";
};
enableParallelBuilding = true;

View File

@ -1,11 +1,14 @@
{ haskellLib }:
let inherit (haskellLib) doJailbreak dontHaddock;
let inherit (haskellLib) doJailbreak dontHaddock dontCheck;
in self: super: {
ghcjs = super.ghcjs.override {
shelly = super.shelly_1_8_1;
};
ghc-api-ghcjs = super.ghc-api-ghcjs.override
{
happy = self.happy_1_19_5;
};
haddock-library-ghcjs = doJailbreak super.haddock-library-ghcjs;
haddock-library-ghcjs = doJailbreak (dontCheck super.haddock-library-ghcjs);
haddock-api-ghcjs = doJailbreak (dontHaddock super.haddock-api-ghcjs);
}

View File

@ -102,7 +102,6 @@ in stdenv.mkDerivation {
inherit passthru;
meta.broken = true; # build does not succeed
meta.platforms = lib.platforms.none; # passthru.bootPkgs.ghc.meta.platforms;
meta.platforms = passthru.bootPkgs.ghc.meta.platforms;
meta.maintainers = [lib.maintainers.elvishjerricco];
}

View File

@ -0,0 +1,25 @@
{ stdenv, fetchFromGitHub, cmake, bison, flex, boost }:
stdenv.mkDerivation rec {
pname = "kcc";
version = "4.0.0";
src = fetchFromGitHub {
owner = "KnightOS";
repo = "kcc";
rev = version;
sha256 = "1cd226nqbxq32mppkljavq1kb74jqfqns9r7fskszr42hbygynk4";
};
nativeBuildInputs = [ cmake bison flex ];
buildInputs = [ boost ];
meta = with stdenv.lib; {
homepage = "https://knightos.org/";
description = "KnightOS C compiler";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ siraben ];
};
}

View File

@ -375,6 +375,7 @@ self: super: {
tickle = dontCheck super.tickle;
tpdb = dontCheck super.tpdb;
translatable-intset = dontCheck super.translatable-intset;
trifecta = if pkgs.stdenv.hostPlatform.isAarch64 then dontCheck super.trifecta else super.trifecta; # affected by this bug https://gitlab.haskell.org/ghc/ghc/-/issues/15275#note_295461
ua-parser = dontCheck super.ua-parser;
unagi-chan = dontCheck super.unagi-chan;
wai-logger = dontCheck super.wai-logger;
@ -920,7 +921,12 @@ self: super: {
# Generate cli completions for dhall.
dhall = generateOptparseApplicativeCompletion "dhall" super.dhall;
dhall-json = generateOptparseApplicativeCompletions ["dhall-to-json" "dhall-to-yaml"] super.dhall-json;
dhall-nix = generateOptparseApplicativeCompletion "dhall-to-nix" (super.dhall-nix);
dhall-nix = generateOptparseApplicativeCompletion "dhall-to-nix" (
super.dhall-nix.overrideScope (self: super: {
dhall = super.dhall_1_34_0;
repline = self.repline_0_4_0_0;
haskeline = self.haskeline_0_8_1_0;
}));
# https://github.com/haskell-hvr/netrc/pull/2#issuecomment-469526558
netrc = doJailbreak super.netrc;
@ -1155,13 +1161,6 @@ self: super: {
# 2020-06-22: NOTE: QuickCheck upstreamed https://github.com/phadej/binary-instances/issues/7
binary-instances = dontCheck super.binary-instances;
# Disabling the test suite lets the build succeed on older CPUs
# that are unable to run the generated library because they
# lack support for AES-NI, like some of our Hydra build slaves
# do. See https://github.com/NixOS/nixpkgs/issues/81915 for
# details.
cryptonite = dontCheck super.cryptonite;
# The test suite depends on an impure cabal-install installation in
# $HOME, which we don't have in our build sandbox.
cabal-install-parsers = dontCheck super.cabal-install-parsers;
@ -1333,6 +1332,12 @@ self: super: {
# https://github.com/ennocramer/monad-dijkstra/issues/4
monad-dijkstra = dontCheck (doJailbreak super.monad-dijkstra);
# Fixed upstream but not released to Hackage yet:
# https://github.com/k0001/hs-libsodium/issues/2
libsodium = overrideCabal super.libsodium (drv: {
libraryToolDepends = (drv.libraryToolDepends or []) ++ [self.c2hs];
});
# https://github.com/kowainik/policeman/issues/57
policeman = doJailbreak super.policeman;
@ -1415,12 +1420,12 @@ self: super: {
});
# Testsuite trying to run `which haskeline-examples-Test`
haskeline_0_8_0_0 = dontCheck super.haskeline_0_8_0_0;
haskeline_0_8_1_0 = dontCheck super.haskeline_0_8_1_0;
# Requires repline 0.4 which is the default only for ghc8101, override for the rest
zre = super.zre.override {
repline = self.repline_0_4_0_0.override {
haskeline = self.haskeline_0_8_0_0;
haskeline = self.haskeline_0_8_1_0;
};
};
@ -1441,26 +1446,35 @@ self: super: {
# Tests rely on `Int` being 64-bit: https://github.com/hspec/hspec/issues/431.
# Also, we need QuickCheck-2.14.x to build the test suite, which isn't easy in LTS-16.x.
# So let's not go there any just disable the tests altogether.
# So let's not go there and just disable the tests altogether.
hspec-core = dontCheck super.hspec-core;
# github.com/ucsd-progsys/liquidhaskell/issues/1729
liquidhaskell = super.liquidhaskell.override { Diff = self.Diff_0_3_4; };
Diff_0_3_4 = dontCheck super.Diff_0_3_4;
# We want the latest version of cryptonite. This is a first step towards
# resolving https://github.com/NixOS/nixpkgs/issues/81915.
cryptonite = self.cryptonite_0_27;
# INSERT NEW OVERRIDES ABOVE THIS LINE
} // (let
hlsScopeOverride = self: super: {
# haskell-language-server uses its own fork of ghcide
# Test disabled: it seems to freeze (is it just that it takes a long time ?)
ghcide = dontCheck self.hls-ghcide;
ghcide = dontCheck super.hls-ghcide;
# we are faster than stack here
hie-bios = dontCheck self.hie-bios_0_6_2;
lsp-test = dontCheck self.lsp-test_0_11_0_4;
hie-bios = dontCheck super.hie-bios_0_7_0;
lsp-test = dontCheck super.lsp-test_0_11_0_4;
# fourmolu cant compile with an older aeson
aeson = dontCheck super.aeson_1_5_2_0;
# brittany has an aeson upper bound of 1.5
brittany = doJailbreak super.brittany;
};
in {
haskell-language-server = dontCheck (super.haskell-language-server.overrideScope hlsScopeOverride);
# jailbreaking for hie-bios 0.7.0 (upstream PR: https://github.com/haskell/haskell-language-server/pull/357)
haskell-language-server = dontCheck (doJailbreak (super.haskell-language-server.overrideScope hlsScopeOverride));
hls-ghcide = dontCheck (super.hls-ghcide.overrideScope hlsScopeOverride);
fourmolu = super.fourmolu.overrideScope hlsScopeOverride;
}

View File

@ -62,14 +62,16 @@ self: super: {
# Jailbreak to fix the build.
base-noprelude = doJailbreak super.base-noprelude;
pandoc = doJailbreak super.pandoc;
system-fileio = doJailbreak super.system-fileio;
unliftio-core = doJailbreak super.unliftio-core;
# Use the latest version to fix the build.
dhall = self.dhall_1_34_0;
lens = self.lens_4_19_2;
optics = self.optics_0_3;
optics-core = self.optics-core_0_3_0_1;
optics-extra = self.optics-extra_0_3;
optics-th = self.optics-th_0_3_0_2;
repline = self.repline_0_4_0_0;
singletons = self.singletons_2_7;
th-desugar = self.th-desugar_1_11;
@ -117,4 +119,10 @@ self: super: {
executableHaskellDepends = drv.executableToolDepends or [] ++ [ self.repline ];
}));
# We want the latest version of Pandoc.
pandoc = self.pandoc_2_10_1;
pandoc-citeproc = self.pandoc-citeproc_0_17_0_2;
pandoc-plot = self.pandoc-plot_0_9_2_0;
pandoc-types = self.pandoc-types_1_21;
}

View File

@ -64,7 +64,7 @@ core-packages:
#
# WARNING: This list is generated semiautomatically based on the most recent
# LTS package set. If you want to add entries to it, you must do so before the
# comment saying "# LTS Haskell x.y". Any changes after that commend will be
# comment saying "# LTS Haskell x.y". Any changes after that comment will be
# lost the next time `update-stackage.sh` runs.
default-package-overrides:
# This was only intended for ghc-7.0.4, and has very old deps, one hidden behind a flag
@ -72,7 +72,7 @@ default-package-overrides:
# gi-gdkx11-4.x requires gtk-4.x, which is still under development and
# not yet available in Nixpkgs
- gi-gdkx11 < 4
# LTS Haskell 16.10
# LTS Haskell 16.11
- abstract-deque ==0.3
- abstract-par ==0.3.3
- AC-Angle ==1.0
@ -207,7 +207,7 @@ default-package-overrides:
- amazonka-workspaces ==1.6.1
- amazonka-xray ==1.6.1
- amqp ==0.20.0
- amqp-utils ==0.4.4.0
- amqp-utils ==0.4.4.1
- annotated-wl-pprint ==0.7.0
- ansi-terminal ==0.10.3
- ansi-wl-pprint ==0.6.9
@ -262,7 +262,7 @@ default-package-overrides:
- attoparsec-path ==0.0.0.1
- audacity ==0.0.2
- aur ==7.0.3
- aura ==3.1.7
- aura ==3.1.8
- authenticate ==1.3.5
- authenticate-oauth ==1.6.0.1
- auto ==0.4.3.1
@ -366,7 +366,7 @@ default-package-overrides:
- bv ==0.5
- bv-little ==1.1.1
- byteable ==0.1.1
- byte-count-reader ==0.10.0.1
- byte-count-reader ==0.10.1.1
- bytedump ==1.0
- byte-order ==0.1.2.0
- byteorder ==1.0.4
@ -760,7 +760,7 @@ default-package-overrides:
- extended-reals ==0.2.4.0
- extensible-effects ==5.0.0.1
- extensible-exceptions ==0.1.1.4
- extra ==1.7.5
- extra ==1.7.6
- extractable-singleton ==0.0.1
- extrapolate ==0.4.2
- fail ==4.9.0.0
@ -808,7 +808,7 @@ default-package-overrides:
- floatshow ==0.2.4
- flow ==1.0.21
- flush-queue ==1.0.0
- fmlist ==0.9.3
- fmlist ==0.9.4
- fmt ==0.6.1.2
- fn ==0.3.0.2
- focus ==1.0.1.3
@ -1277,7 +1277,7 @@ default-package-overrides:
- jwt ==0.10.0
- kan-extensions ==5.2
- kanji ==3.4.1
- katip ==0.8.4.0
- katip ==0.8.5.0
- kawhi ==0.3.0
- kazura-queue ==0.1.0.4
- kdt ==0.2.4
@ -1348,7 +1348,7 @@ default-package-overrides:
- linux-file-extents ==0.2.0.0
- linux-namespaces ==0.1.3.0
- List ==0.6.2
- ListLike ==4.7.1
- ListLike ==4.7.2
- list-predicate ==0.1.0.1
- listsafe ==0.1.0.1
- list-singleton ==1.0.0.4
@ -1433,7 +1433,7 @@ default-package-overrides:
- midi ==0.2.2.2
- mighty-metropolis ==2.0.0
- mime-mail ==0.5.0
- mime-mail-ses ==0.4.1
- mime-mail-ses ==0.4.2
- mime-types ==0.1.0.9
- mini-egison ==1.0.0
- minimal-configuration ==0.1.4
@ -1558,7 +1558,7 @@ default-package-overrides:
- nonce ==1.0.7
- nondeterminism ==1.4
- non-empty ==0.3.2
- nonempty-containers ==0.3.4.0
- nonempty-containers ==0.3.4.1
- nonemptymap ==0.0.6.0
- non-empty-sequence ==0.2.0.4
- nonempty-vector ==0.2.0.2
@ -1613,7 +1613,7 @@ default-package-overrides:
- options ==1.2.1.1
- optparse-applicative ==0.15.1.0
- optparse-generic ==1.3.1
- optparse-simple ==0.1.1.2
- optparse-simple ==0.1.1.3
- optparse-text ==0.1.1.0
- ordered-containers ==0.2.2
- ormolu ==0.1.2.0
@ -1859,7 +1859,7 @@ default-package-overrides:
- regex-posix ==0.96.0.0
- regex-tdfa ==1.3.1.0
- regex-with-pcre ==1.1.0.0
- registry ==0.1.9.1
- registry ==0.1.9.3
- reinterpret-cast ==0.1.0
- relapse ==1.0.0.0
- relational-query ==0.12.2.3
@ -1902,7 +1902,7 @@ default-package-overrides:
- safe ==0.3.19
- safecopy ==0.10.3
- safe-decimal ==0.2.0.0
- safe-exceptions ==0.1.7.0
- safe-exceptions ==0.1.7.1
- safe-exceptions-checked ==0.1.0
- safe-foldable ==0.1.0.0
- safeio ==0.0.5.0
@ -1978,7 +1978,7 @@ default-package-overrides:
- servant-purescript ==0.10.0.0
- servant-rawm ==0.3.2.0
- servant-server ==0.16.2
- servant-static-th ==0.2.3.0
- servant-static-th ==0.2.4.0
- servant-subscriber ==0.7.0.0
- servant-swagger ==1.1.7.1
- servant-swagger-ui ==0.3.4.3.23.11
@ -2328,7 +2328,7 @@ default-package-overrides:
- unexceptionalio-trans ==0.5.1
- unicode ==0.0.1.1
- unicode-show ==0.1.0.4
- unicode-transforms ==0.3.6
- unicode-transforms ==0.3.7
- unification-fd ==0.10.0.1
- union-find ==0.2
- uniplate ==1.6.12
@ -2395,7 +2395,7 @@ default-package-overrides:
- vector-instances ==3.4
- vector-mmap ==0.0.3
- vector-rotcev ==0.1.0.0
- vector-sized ==1.4.1.0
- vector-sized ==1.4.2
- vector-space ==0.16
- vector-split ==1.0.0.2
- vector-th-unbox ==0.2.1.7
@ -2498,7 +2498,7 @@ default-package-overrides:
- xss-sanitize ==0.3.6
- xturtle ==0.2.0.0
- xxhash-ffi ==0.2.0.0
- yaml ==0.11.4.0
- yaml ==0.11.5.0
- yamlparse-applicative ==0.1.0.1
- yesod ==1.6.1.0
- yesod-auth ==1.6.10
@ -2560,12 +2560,13 @@ extra-packages:
- dbus <1 # for xmonad-0.26
- deepseq == 1.3.0.1 # required to build Cabal with GHC 6.12.3
- dhall == 1.29.0 # required for spago 0.14.0.
- Diff < 0.4 # required by liquidhaskell-0.8.10.2: https://github.com/ucsd-progsys/liquidhaskell/issues/1729
- doctemplates == 0.8 # required by pandoc-2.9.x
- gi-gdk == 3.0.23 # required for gi-pango 1.0.23
- gi-gtk == 3.0.35 # required for gi-pango 1.0.23
- generic-deriving == 1.10.5.* # new versions don't compile with GHC 7.10.x
- ghc-check == 0.3.0.1 # only version compatible with ghcide 0.2.0
- ghc-tcplugins-extra ==0.3.2 # required for polysemy-plugin 0.2.5.0
- gi-gdk == 3.0.23 # required for gi-pango 1.0.23
- gi-gtk == 3.0.35 # required for gi-pango 1.0.23
- gloss < 1.9.3 # new versions don't compile with GHC 7.8.x
- haddock == 2.22.* # required on GHC 8.0.x
- haddock == 2.23.* # required on GHC < 8.10.x
@ -2579,9 +2580,9 @@ extra-packages:
- haskell-src-exts == 1.19.* # required by hindent and structured-haskell-mode
- hinotify == 0.3.9 # for xmonad-0.26: https://github.com/kolmodin/hinotify/issues/29
- hoogle == 5.0.14 # required by hie-hoogle
- hslua == 1.1.2 # required for pandoc 2.10
- html-conduit ^>= 1.2 # pre-lts-11.x versions neeed by git-annex 6.20180227
- http-conduit ^>= 2.2 # pre-lts-11.x versions neeed by git-annex 6.20180227
- hslua == 1.1.2 # required for pandoc 2.10
- inline-c < 0.6 # required on GHC 8.0.x
- inline-c-cpp < 0.2 # required on GHC 8.0.x
- lens-labels == 0.1.* # required for proto-lens-descriptors
@ -2604,6 +2605,7 @@ extra-packages:
- resourcet ==1.1.* # pre-lts-11.x versions neeed by git-annex 6.20180227
- seqid < 0.2 # newer versions depend on transformers 0.4.x which we cannot provide in GHC 7.8.x
- seqid-streams < 0.2 # newer versions depend on transformers 0.4.x which we cannot provide in GHC 7.8.x
- shelly ==1.8.1 # ghcjs depends on shelly < 1.9
- split < 0.2 # newer versions don't work with GHC 6.12.3
- tar < 0.4.2.0 # later versions don't work with GHC < 7.6.x
- transformers == 0.4.3.* # the latest version isn't supported by mtl yet
@ -2756,17 +2758,26 @@ dont-distribute-packages:
- accelerate-examples
- accelerate-fft
- accelerate-fourier-benchmark
- accelerate-io-array
- accelerate-io-bmp
- accelerate-io-bytestring
- accelerate-io-cereal
- accelerate-io-JuicyPixels
- accelerate-io-repa
- accelerate-io-vector
- accelerate-llvm-ptx
- bindings-yices
- boolector
- ccelerate-cuda
- containers-accelerate
- cplex-hs
- cuda # 2020-08-18 because of dependency nvidia-x11
- cublas
- cuda # 2020-08-18 because of dependency nvidia-x11
- cufft
- cusolver
- cusparse
- gloss-raster-accelerate
- hashable-accelerate
- libnvvm
- matlab
- nvvm
@ -3670,6 +3681,7 @@ broken-packages:
- cap
- Capabilities
- capability
- capataz
- capnp
- capped-list
- capri
@ -3959,8 +3971,9 @@ broken-packages:
- complexity
- compose-trans
- composite-aeson
- composite-aeson-path
- composite-aeson-refined
- composite-base
- composite-binary
- composite-ekg
- composite-opaleye
- composite-swagger
@ -4292,6 +4305,7 @@ broken-packages:
- data-transform
- data-type
- data-util
- data-validation
- data-variant
- database-id-groundhog
- database-study
@ -4415,7 +4429,6 @@ broken-packages:
- dhall-check
- dhall-docs
- dhall-fly
- dhall-nix
- dhall-text
- dhall-to-cabal
- dhall-yaml
@ -4763,6 +4776,9 @@ broken-packages:
- EsounD
- espial
- ess
- essence-of-live-coding-gloss-example
- essence-of-live-coding-pulse-example
- essence-of-live-coding-warp
- estimators
- EstProgress
- estreps
@ -5322,6 +5338,23 @@ broken-packages:
- ghcprofview
- ght
- gi-cairo-again
- gi-cairo-connector
- gi-cairo-render
- gi-dbusmenu
- gi-dbusmenugtk3
- gi-gdkx11
- gi-graphene
- gi-gsk
- gi-gstpbutils
- gi-gsttag
- gi-gtk-declarative
- gi-gtk-declarative-app-simple
- gi-gtk-hs
- gi-gtkosxapplication
- gi-handy
- gi-poppler
- gi-wnck
- gi-xlib
- giak
- Gifcurry
- ginsu
@ -5402,6 +5435,7 @@ broken-packages:
- gloss-sodium
- glpk-headers
- glpk-hs
- gltf-codec
- glue
- GLUtil
- gmap
@ -5793,6 +5827,7 @@ broken-packages:
- haskell-src-exts-prisms
- haskell-src-exts-qq
- haskell-src-exts-sc
- haskell-src-match
- haskell-src-meta-mwotton
- haskell-stack-trace-plugin
- haskell-token-utils
@ -5876,6 +5911,7 @@ broken-packages:
- haskore-supercollider
- haskore-synthesizer
- HaskRel
- haskseg
- hasktorch
- hasktorch-codegen
- hasktorch-ffi-th
@ -6959,6 +6995,7 @@ broken-packages:
- jsonsql
- jsontsv
- jsonxlsx
- jsop
- jspath
- juandelacosa
- judge
@ -7060,6 +7097,7 @@ broken-packages:
- ks-test
- KSP
- ktx
- ktx-codec
- kubernetes-client
- kubernetes-client-core
- kuifje
@ -7248,6 +7286,7 @@ broken-packages:
- libconfig
- libcspm
- libexpect
- libfuse3
- libGenI
- libhbb
- libinfluxdb
@ -7265,7 +7304,6 @@ broken-packages:
- libraft
- librandomorg
- librato
- libsodium
- libssh2
- libssh2-conduit
- libsystemd-daemon
@ -7324,17 +7362,6 @@ broken-packages:
- lio-fs
- lio-simple
- lipsum-gen
- liquid
- liquid-base
- liquid-bytestring
- liquid-containers
- liquid-fixpoint
- liquid-ghc-prim
- liquid-parallel
- liquid-platform
- liquid-prelude
- liquid-vector
- liquidhaskell
- liquidhaskell-cabal
- Liquorice
- list-fusion-probe
@ -7403,6 +7430,7 @@ broken-packages:
- log4hs
- logentries
- logger
- logging-effect
- logging-effect-extra
- logging-effect-extra-file
- logging-effect-extra-handler
@ -7475,6 +7503,7 @@ broken-packages:
- lye
- Lykah
- lz4-conduit
- lz4-frame-conduit
- lzma-enumerator
- lzma-streams
- lzo
@ -7691,6 +7720,7 @@ broken-packages:
- ministg
- minst-idx
- mios
- MIP
- mirror-tweet
- misfortune
- miso-action-logger
@ -7733,6 +7763,7 @@ broken-packages:
- monad-atom
- monad-atom-simple
- monad-branch
- monad-classes-logging
- monad-exception
- monad-finally
- monad-fork
@ -7922,6 +7953,7 @@ broken-packages:
- mvc
- mvc-updates
- mvclient
- mwc-probability-transition
- mwc-random-accelerate
- mxnet
- mxnet-dataiter
@ -8605,6 +8637,7 @@ broken-packages:
- polydata
- polydata-core
- polynomial
- polysemy-http
- polysemy-optics
- polysemy-RandomFu
- polysemy-webserver
@ -8702,6 +8735,7 @@ broken-packages:
- pretty-ghci
- pretty-ncols
- prettyprinter-graphviz
- prettyprinter-lucid
- prettyprinter-vty
- preview
- prim
@ -9257,6 +9291,7 @@ broken-packages:
- ruler
- ruler-core
- rungekutta
- runhs
- runmany
- runtime-arbitrary
- rvar
@ -9530,6 +9565,7 @@ broken-packages:
- shadower
- shake-bindist
- shake-cabal-build
- shake-dhall
- shake-extras
- shake-minify
- shake-pack
@ -9805,6 +9841,7 @@ broken-packages:
- spanout
- sparkle
- sparrow
- spars
- sparse
- sparse-lin-alg
- sparsebit
@ -10045,6 +10082,7 @@ broken-packages:
- superconstraints
- superevent
- supermonad
- supernova
- supero
- supervisor
- supervisors
@ -10218,7 +10256,6 @@ broken-packages:
- termbox-bindings
- terminal-text
- termination-combinators
- termonad
- termplot
- terntup
- terrahs
@ -10656,6 +10693,7 @@ broken-packages:
- uri-parse
- uri-template
- uri-templater
- url-bytes
- url-decoders
- url-generic
- URLb

File diff suppressed because it is too large Load Diff

View File

@ -7,13 +7,13 @@ let
in
stdenv.mkDerivation rec {
pname = "mimalloc";
version = "1.6.3";
version = "1.6.4";
src = fetchFromGitHub {
owner = "microsoft";
repo = pname;
rev = "v${version}";
sha256 = "0hk30adrm0s1g5flfaqfr3lc72y3hlmhqnyrqd7p0y91rsaw86b9";
sha256 = "0b6ymi2a9is2q6n49dvlnjxknikj0rfff5ygbc4n7894h5mllvvr";
};
nativeBuildInputs = [ cmake ninja ];

View File

@ -14,7 +14,7 @@
, lldbVersions ? [ ]
, cmakeVersions ? [ ]
, includeNDK ? false
, ndkVersion ? "18.1.5063045"
, ndkVersion ? "21.0.6113669"
, useGoogleAPIs ? false
, useGoogleTVAddOns ? false
, includeExtras ? []

View File

@ -672,70 +672,6 @@
};
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha4";
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha4";
revision = "1";
displayName = "com.android.support.constraint:constraint-layout-solver:1.0.0-alpha4";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-alpha4.zip";
sha1 = "2aa2aceecc6ba172742d0af0b43f11d03924eeb8";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha4";
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha4";
revision = "1";
displayName = "com.android.support.constraint:constraint-layout-solver:1.0.0-alpha4";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-alpha4.zip";
sha1 = "2aa2aceecc6ba172742d0af0b43f11d03924eeb8";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha4";
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha4";
revision = "1";
displayName = "com.android.support.constraint:constraint-layout-solver:1.0.0-alpha4";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-alpha4.zip";
sha1 = "2aa2aceecc6ba172742d0af0b43f11d03924eeb8";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha8";
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha8";
revision = "1";
displayName = "Solver for ConstraintLayout 1.0.0-alpha8";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-alpha8.zip";
sha1 = "cd13d16a8f0198c1d6040ec8b1d0d4e5bb7feb6a";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha8";
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha8";
@ -896,70 +832,6 @@
};
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha4" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha4";
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha4";
revision = "1";
displayName = "com.android.support.constraint:constraint-layout:1.0.0-alpha4";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-alpha4.zip";
sha1 = "645a9be1f0c1177301e71cd0ddccf1dd67c554fe";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha4" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha4";
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha4";
revision = "1";
displayName = "com.android.support.constraint:constraint-layout:1.0.0-alpha4";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-alpha4.zip";
sha1 = "645a9be1f0c1177301e71cd0ddccf1dd67c554fe";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha4" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha4";
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha4";
revision = "1";
displayName = "com.android.support.constraint:constraint-layout:1.0.0-alpha4";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-alpha4.zip";
sha1 = "645a9be1f0c1177301e71cd0ddccf1dd67c554fe";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha8" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha8";
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha8";
revision = "1";
displayName = "ConstraintLayout for Android 1.0.0-alpha8";
archives = {
all = fetchurl {
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-alpha8.zip";
sha1 = "7912ba03b04831f918f523648f118c4ee4da7604";
};
};
};
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha8" = {
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha8";
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha8";

View File

@ -7,12 +7,14 @@ deployAndroidPackage {
inherit package os;
buildInputs = [ autoPatchelfHook makeWrapper pkgs.python2 ]
++ lib.optional (os == "linux") [ pkgs.glibc pkgs.stdenv.cc.cc pkgs.ncurses5 pkgs.zlib pkgs.libcxx.out ];
patchInstructions = lib.optionalString (os == "linux") ''
patchInstructions = lib.optionalString (os == "linux") (''
patchShebangs .
'' + lib.optionalString (builtins.compareVersions (lib.getVersion package) "21" > 0) ''
patch -p1 \
--no-backup-if-mismatch < ${./make_standalone_toolchain.py_18.patch}
wrapProgram $(pwd)/build/tools/make_standalone_toolchain.py --prefix PATH : "${runtime_paths}"
'' + ''
# TODO: allow this stuff
rm -rf docs tests
@ -46,6 +48,6 @@ deployAndroidPackage {
do
ln -sf ../libexec/android-sdk/ndk-bundle/$i $out/bin/$i
done
'';
'');
noAuditTmpdir = true; # Audit script gets invoked by the build/ component in the path for the make standalone script
}

View File

@ -0,0 +1,22 @@
{ stdenv, buildDunePackage, async, cohttp, conduit-async, uri, ppx_sexp_conv
, logs, magic-mime }:
if !stdenv.lib.versionAtLeast cohttp.version "0.99" then
cohttp
else if !stdenv.lib.versionAtLeast async.version "0.13" then
throw "cohttp-async needs async-0.13 (hence OCaml >= 4.08)"
else
buildDunePackage {
pname = "cohttp-async";
useDune2 = true;
inherit (cohttp) version src;
buildInputs = [ ppx_sexp_conv ];
propagatedBuildInputs = [ async cohttp conduit-async logs magic-mime uri ];
meta = cohttp.meta // {
description = "CoHTTP implementation for the Async concurrency library";
};
}

View File

@ -0,0 +1,19 @@
{ stdenv, buildDunePackage, async, async_ssl, ppx_sexp_conv, conduit }:
if !stdenv.lib.versionAtLeast conduit.version "1.0"
then conduit
else
buildDunePackage {
pname = "conduit-async";
useDune2 = true;
inherit (conduit) version src;
buildInputs = [ ppx_sexp_conv ];
propagatedBuildInputs = [ async async_ssl conduit ];
meta = conduit.meta // {
description = "A network connection establishment library for Async";
};
}

View File

@ -18,7 +18,7 @@ buildDunePackage rec {
propagatedBuildInputs = [ astring ipaddr ipaddr-sexp sexplib uri ];
meta = {
description = "Network connection library for TCP and SSL";
description = "A network connection establishment library";
license = stdenv.lib.licenses.isc;
maintainers = with stdenv.lib.maintainers; [ alexfmpe vbgl ];
homepage = "https://github.com/mirage/ocaml-conduit";

View File

@ -14,11 +14,11 @@ else
stdenv.mkDerivation rec
{
pname = "eliom";
version = "6.12.0";
version = "6.12.1";
src = fetchzip {
url = "https://github.com/ocsigen/eliom/archive/${version}.tar.gz";
sha256 = "015jh72v6ch9h9czd8sn5kjz3pv6lsnvvnhdjgrplwj443dn1xp8";
sha256 = "04c1sz113015gyhj3w7flw7l4bv0v50q6n04kk8dybcravzy2xgx";
};
buildInputs = [ ocaml which findlib js_of_ocaml-ocamlbuild js_of_ocaml-ppx_deriving_json opaline

View File

@ -1,5 +1,6 @@
{ janePackage
, ctypes
, dune-configurator
, num
, octavius
, ppxlib
@ -417,6 +418,15 @@ rec {
propagatedBuildInputs = [ async shell ];
};
async_ssl = janePackage {
pname = "async_ssl";
useDune2 = true;
hash = "0z5dbiam5k7ipx9ph4r8nqv0a1ldx1ymxw3xjxgrdjda90lmwf2k";
meta.description = "Async wrappers for SSL";
buildInputs = [ dune-configurator ];
propagatedBuildInputs = [ async ctypes openssl ];
};
core_bench = janePackage {
pname = "core_bench";
hash = "1nk0i3z8rqrljbf4bc7ljp71g0a4361nh85s2ang0lgxri74zacm";

View File

@ -7,7 +7,7 @@
, requests_download
, zipfile36
, pythonOlder
, pytest_4
, pytest
, testpath
, responses
, pytoml
@ -39,7 +39,7 @@ buildPythonPackage rec {
zipfile36
];
checkInputs = [ pytest_4 testpath responses ];
checkInputs = [ pytest testpath responses ];
# Disable test that needs some ini file.
# Disable test that wants hg

View File

@ -4,11 +4,11 @@
buildPythonPackage rec {
pname = "google-api-python-client";
version = "1.10.1";
version = "1.11.0";
src = fetchPypi {
inherit pname version;
sha256 = "0v4yzrmrp1l3nlkw9ibllgblwy8y45anzfkkky2vghkl6w8411xa";
sha256 = "0yxrz897kpjypfqzcy0ry90hc34w47q4fzqidp81h6pg01c03x6a";
};
# No tests included in archive

View File

@ -0,0 +1,31 @@
{ lib
, buildPythonPackage
, fetchPypi
, pythonOlder
, jupyterhub
}:
buildPythonPackage rec {
pname = "jupyterhub-tmpauthenticator";
version = "0.6";
disabled = pythonOlder "3.5";
src = fetchPypi {
inherit pname version;
sha256 = "064x1ypxwx1l270ic97p8czbzb7swl9758v40k3w2gaqf9762f0l";
};
propagatedBuildInputs = [ jupyterhub ];
# No tests available in the package
doCheck = false;
pythonImportsCheck = [ "tmpauthenticator" ];
meta = with lib; {
description = "Simple Jupyterhub authenticator that allows anyone to log in.";
license = with licenses; [ bsd3 ];
homepage = "https://github.com/jupyterhub/tmpauthenticator";
maintainers = with maintainers; [ chiroptical ];
};
}

View File

@ -4,11 +4,11 @@
buildPythonPackage rec {
pname = "mautrix";
version = "0.6.1";
version = "0.5.8";
src = fetchPypi {
inherit pname version;
sha256 = "a86c6448fb3c0f5e149f3347fbf0cd776431aec16a137a9b45298b6fe5991e42";
sha256 = "1hqg32n7pmjhap0ybfcf05zgfcyyirb4fm1m7gf44dwh40da6qz0";
};
propagatedBuildInputs = [

View File

@ -11,11 +11,11 @@ let
ft = freetype.overrideAttrs (oldArgs: { dontDisableStatic = true; });
in buildPythonPackage rec {
pname = "reportlab";
version = "3.5.47";
version = "3.5.48";
src = fetchPypi {
inherit pname version;
sha256 = "0gw0902yjszwxk0air69in7nk4h2q36r96ga3r4bz0p0cnmagcj5";
sha256 = "0bfe3fe6e1bd1d922f83683eae2ba1d2d29de94e25fb115eacca9530b4b02f76";
};
checkInputs = [ glibcLocales ];

View File

@ -0,0 +1,28 @@
{ stdenv
, buildPythonPackage
, fetchPypi
, setuptools_scm
, pytestCheckHook
}:
buildPythonPackage rec {
pname = "ujson";
version = "2.0.3";
src = fetchPypi {
inherit pname version;
sha256 = "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx";
};
nativeBuildInputs = [ setuptools_scm ];
checkInputs = [
pytestCheckHook
];
meta = with stdenv.lib; {
homepage = "https://pypi.python.org/pypi/ujson";
description = "Ultra fast JSON encoder and decoder for Python";
license = licenses.bsd3;
};
}

View File

@ -8,11 +8,11 @@ let
in
stdenv.mkDerivation rec {
pname = "coursier";
version = "2.0.0-RC6-18";
version = "2.0.0-RC6-25";
src = fetchurl {
url = "https://github.com/coursier/coursier/releases/download/v${version}/coursier";
sha256 = "0vym99fyn0g8l5y2zvhf73ww17wywrh503wg5aw4nilj8w1ncvn2";
sha256 = "0hkkfm18v2hvkf344ln9ka8gi3jdl6bvqpafc6h06f06vmp8prch";
};
nativeBuildInputs = [ makeWrapper ];

View File

@ -18,8 +18,8 @@ mkDerivation {
version = "0.2.0";
src = fetchgit {
url = "https://github.com/wz1000/ghcide";
sha256 = "1zq7ngaak8il91a309rl51dghzasnk4m2sm3av6d93cyqyra1hfc";
rev = "078e3d3c0d319f83841ccbcdc60ff5f0e243f6be";
sha256 = "112bsk2660750n94gnsgrvd30rk0ccxb8dbhka606a11pcqv5cgx";
rev = "3f6cd4553279ec47d1599b502720791a4f4613cd";
fetchSubmodules = true;
};
isLibrary = true;

View File

@ -0,0 +1,26 @@
{ stdenv, fetchFromGitHub, cmake, asciidoc, pkg-config, imagemagick }:
stdenv.mkDerivation rec {
pname = "kimg";
version = "0.3.0";
src = fetchFromGitHub {
owner = "KnightOS";
repo = "kimg";
rev = version;
sha256 = "00gj420m0jvhgm8kkslw8r69nl7r73bxrh6gqs2mx16ymcpkanpk";
};
nativeBuildInputs = [ cmake asciidoc pkg-config ];
buildInputs = [ imagemagick ];
hardeningDisable = [ "format" ];
meta = with stdenv.lib; {
homepage = "https://knightos.org/";
description = "Converts image formats supported by ImageMagick to the KnightOS image format";
license = licenses.mit;
maintainers = with maintainers; [ siraben ];
};
}

View File

@ -1,7 +1,7 @@
{ stdenv, buildGoPackage, fetchFromGitHub }:
buildGoPackage rec {
pname = "packer";
version = "1.6.1";
version = "1.6.2";
goPackagePath = "github.com/hashicorp/packer";
@ -11,7 +11,7 @@ buildGoPackage rec {
owner = "hashicorp";
repo = "packer";
rev = "v${version}";
sha256 = "0jm8950rk0cdf84z0yxm8ic3pm353cgmxr1akn6kq1bwg2w0vsrq";
sha256 = "104jw2jcshzds74d7m4yqn6mbk7lgps6qnqmp6h395b1mdyjhink";
};
meta = with stdenv.lib; {

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,22 @@
{ stdenv, fetchurl, runCommand, fetchFromGitHub, rustPlatform, Security, openssl, pkg-config
{ stdenv, fetchurl, runCommand, fetchCrate, rustPlatform, Security, openssl, pkg-config
, SystemConfiguration
}:
rustPlatform.buildRustPackage rec {
pname = "cargo-make";
version = "0.32.2";
version = "0.32.3";
src =
let
source = fetchFromGitHub {
owner = "sagiegurari";
repo = pname;
rev = version;
sha256 = "0l0pislc7pgx1m68kirvadraq88c86mm1k46wbz3a47ph2d4g912";
};
in
runCommand "source" {} ''
cp -R ${source} $out
chmod +w $out
cp ${./Cargo.lock} $out/Cargo.lock
'';
src = fetchCrate {
inherit pname version;
sha256 = "0qcwhmba83rrwqnlkcmvnmbj9jb2bwm0mka8rcp26y4yxmjm431n";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ openssl ]
++ stdenv.lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
cargoSha256 = "16ygkh8sbb37nfc41shxg9nh2mbszyschbqrrr1gr7xzf1z36ipp";
cargoSha256 = "1dmcdzdm7kzmrq2xsiaikns2xzjpdmh9w8pw653nlqfjjr2h6pxp";
# Some tests fail because they need network access.
# However, Travis ensures a proper build.

View File

@ -0,0 +1,35 @@
{ stdenv
, fetchFromGitHub
, wxGTK31
, meson
, ninja
}:
stdenv.mkDerivation {
pname = "wxFormBuilder";
version = "unstable-2020-08-18";
src = fetchFromGitHub {
owner = "wxFormBuilder";
repo = "wxFormBuilder";
rev = "d053665cc33a79dd935b518b5e7aea6baf493c92";
sha256 = "sha256-hTO7Fyp5ZWpq2CfIYEXB85oOkNrqr6Njfh8h0t9B6wU=";
fetchSubmodules = true;
};
nativeBuildInputs = [
ninja
meson
];
buildInputs = [
wxGTK31
];
meta = with stdenv.lib; {
description = "RAD tool for wxWidgets GUI design";
homepage = "https://github.com/wxFormBuilder/wxFormBuilder";
license = licenses.gpl2;
maintainers = with maintainers; [ matthuszagh ];
};
}

View File

@ -1,123 +0,0 @@
diff -aur exult-1.4.9rc1.orig/desktop/exult.desktop exult-1.4.9rc1/desktop/exult.desktop
--- exult-1.4.9rc1.orig/desktop/exult.desktop 2008-07-11 05:41:06.000000000 +0600
+++ exult-1.4.9rc1/desktop/exult.desktop 2012-05-19 13:15:30.616084585 +0600
@@ -1,9 +1,8 @@
[Desktop Entry]
-Encoding=UTF-8
Name=Exult
Comment=Exult Ultima 7 Engine
Exec=exult
-Icon=exult.png
+Icon=exult
Terminal=false
Type=Application
-Categories=Application;Game;RolePlaying;
+Categories=Game;RolePlaying;
diff -aur exult-1.4.9rc1.orig/files/databuf.h exult-1.4.9rc1/files/databuf.h
--- exult-1.4.9rc1.orig/files/databuf.h 2010-03-10 09:07:05.000000000 +0500
+++ exult-1.4.9rc1/files/databuf.h 2012-05-19 12:50:16.856076030 +0600
@@ -18,6 +18,7 @@
#define DATA_H
#include <cstdio>
+#include <cstddef>
#include <cstring>
#include <cassert>
#include <fstream>
diff -aur exult-1.4.9rc1.orig/files/U7obj.h exult-1.4.9rc1/files/U7obj.h
--- exult-1.4.9rc1.orig/files/U7obj.h 2010-02-25 07:52:07.000000000 +0500
+++ exult-1.4.9rc1/files/U7obj.h 2012-05-19 12:50:35.916076137 +0600
@@ -26,6 +26,7 @@
#include <string>
#include <vector>
#include <cstring>
+#include <cstddef>
#include "common_types.h"
#include "utils.h"
diff -aur exult-1.4.9rc1.orig/imagewin/manip.h exult-1.4.9rc1/imagewin/manip.h
--- exult-1.4.9rc1.orig/imagewin/manip.h 2010-08-29 20:26:00.000000000 +0600
+++ exult-1.4.9rc1/imagewin/manip.h 2012-05-19 13:02:45.159413596 +0600
@@ -319,7 +319,7 @@
static uintD copy(uintS src)
{
unsigned int r, g, b;
- split_source(src,r,g,b);
+ ManipBaseSrc<color_s,color_d>::split_source(src,r,g,b);
return ManipBaseDest<color_d>::rgb(r,g,b);
}
static void copy(uintD& dest, uintS src)
diff -aur exult-1.4.9rc1.orig/istring.h exult-1.4.9rc1/istring.h
--- exult-1.4.9rc1.orig/istring.h 2005-06-07 15:55:39.000000000 +0600
+++ exult-1.4.9rc1/istring.h 2012-05-19 13:01:14.886079750 +0600
@@ -162,19 +162,19 @@
_Myt& operator+=(const _Myt& _Right)
{ // append _Right
- append(_Right);
+ this->append(_Right);
return (*this);
}
_Myt& operator+=(const _Elem *_Ptr)
{ // append [_Ptr, <null>)
- append(_Ptr);
+ this->append(_Ptr);
return (*this);
}
_Myt& operator+=(_Elem _Ch)
{ // append 1 * _Ch
- append(static_cast<size_type>(1), _Ch);
+ this->append(static_cast<size_type>(1), _Ch);
return (*this);
}
diff -aur exult-1.4.9rc1.orig/shapes/pngio.cc exult-1.4.9rc1/shapes/pngio.cc
--- exult-1.4.9rc1.orig/shapes/pngio.cc 2010-02-15 18:48:11.000000000 -0200
+++ exult-1.4.9rc1/shapes/pngio.cc 2013-09-22 20:56:37.809763588 -0300
@@ -26,6 +26,7 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
+#include <string.h>
#ifdef HAVE_PNG_H
@@ -79,7 +80,7 @@
}
// Allocate info. structure.
png_infop info = png_create_info_struct(png);
- if (setjmp(png->jmpbuf)) // Handle errors.
+ if (setjmp(png_jmpbuf(png))) // Handle errors.
{
png_destroy_read_struct(&png, &info, 0);
fclose(fp);
@@ -208,7 +209,7 @@
}
// Allocate info. structure.
png_infop info = png_create_info_struct(png);
- if (setjmp(png->jmpbuf)) // Handle errors.
+ if (setjmp(png_jmpbuf(png))) // Handle errors.
{
png_destroy_write_struct(&png, &info);
fclose(fp);
@@ -306,7 +307,7 @@
}
// Allocate info. structure.
png_infop info = png_create_info_struct(png);
- if (setjmp(png->jmpbuf)) // Handle errors.
+ if (setjmp(png_jmpbuf(png))) // Handle errors.
{
png_destroy_read_struct(&png, &info, 0);
fclose(fp);
@@ -395,7 +396,7 @@
}
// Allocate info. structure.
png_infop info = png_create_info_struct(png);
- if (setjmp(png->jmpbuf)) // Handle errors.
+ if (setjmp(png_jmpbuf(png))) // Handle errors.
{
png_destroy_write_struct(&png, &info);
fclose(fp);

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, pkgconfig, SDL, libogg, libvorbis, zlib, unzip }:
{ stdenv, fetchurl, pkgconfig, SDL2, libogg, libvorbis, zlib, unzip }:
let
@ -12,27 +12,20 @@ let
in
stdenv.mkDerivation rec {
name = "exult-1.4.9rc1";
name = "exult-1.6";
src = fetchurl {
url = "mirror://sourceforge/exult/${name}.tar.gz";
sha256 = "0a03a2l3ji6h48n106d4w55l8v6lni1axniafnvvv5c5n3nz5bgd";
sha256 = "1dm27qkxj30567zb70q4acddsizn0xyi3z87hg7lysxdkyv49s3s";
};
configureFlags = [ "--disable-tools" ];
patches =
[ # Arch Linux patch set.
./arch.patch
];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ SDL libogg libvorbis zlib unzip ];
buildInputs = [ SDL2 libogg libvorbis zlib unzip ];
enableParallelBuilding = true;
makeFlags = [ "DESTDIR=$(out)" ];
NIX_LDFLAGS = "-lX11";
postInstall =

View File

@ -14,42 +14,43 @@
, ocl-icd ? null
, gperftools ? null
, eigen ? null
, gpuEnabled ? true
, useAVX2 ? false
, cudaSupport ? false
, useTcmalloc ? true}:
, enableAVX2 ? false
, enableBigBoards ? false
, enableCuda ? false
, enableGPU ? true
, enableTcmalloc ? true}:
assert !gpuEnabled -> (
assert !enableGPU -> (
eigen != null &&
!cudaSupport);
!enableCuda);
assert cudaSupport -> (
assert enableCuda -> (
libGL_driver != null &&
cudatoolkit != null &&
cudnn != null);
assert !cudaSupport -> (
!gpuEnabled || (
assert !enableCuda -> (
!enableGPU || (
opencl-headers != null &&
ocl-icd != null));
assert useTcmalloc -> (
assert enableTcmalloc -> (
gperftools != null);
let
env = if cudaSupport
env = if enableCuda
then gcc8Stdenv
else stdenv;
in env.mkDerivation rec {
pname = "katago";
version = "1.6.0";
version = "1.6.1";
src = fetchFromGitHub {
owner = "lightvector";
repo = "katago";
rev = "v${version}";
sha256 = "1r84ws2rj7j8085v1cqffy9rg65rzrhk6z8jbxivqxsmsgs2zs48";
sha256 = "030ff9prnvpadgcb4x4hx6b6ggg10bwqcj8vd8nwrdz9sjq67yf7";
};
nativeBuildInputs = [
@ -60,42 +61,44 @@ in env.mkDerivation rec {
buildInputs = [
libzip
boost
] ++ lib.optionals (!gpuEnabled) [
] ++ lib.optionals (!enableGPU) [
eigen
] ++ lib.optionals (gpuEnabled && cudaSupport) [
] ++ lib.optionals (enableGPU && enableCuda) [
cudnn
libGL_driver
] ++ lib.optionals (gpuEnabled && !cudaSupport) [
] ++ lib.optionals (enableGPU && !enableCuda) [
opencl-headers
ocl-icd
] ++ lib.optionals useTcmalloc [
] ++ lib.optionals enableTcmalloc [
gperftools
];
cmakeFlags = [
"-DNO_GIT_REVISION=ON"
] ++ lib.optionals (!gpuEnabled) [
] ++ lib.optionals (!enableGPU) [
"-DUSE_BACKEND=EIGEN"
] ++ lib.optionals useAVX2 [
] ++ lib.optionals enableAVX2 [
"-DUSE_AVX2=ON"
] ++ lib.optionals (gpuEnabled && cudaSupport) [
] ++ lib.optionals (enableGPU && enableCuda) [
"-DUSE_BACKEND=CUDA"
] ++ lib.optionals (gpuEnabled && !cudaSupport) [
] ++ lib.optionals (enableGPU && !enableCuda) [
"-DUSE_BACKEND=OPENCL"
] ++ lib.optionals useTcmalloc [
] ++ lib.optionals enableTcmalloc [
"-DUSE_TCMALLOC=ON"
] ++ lib.optionals enableBigBoards [
"-DUSE_BIGGER_BOARDS_EXPENSIVE=ON"
];
preConfigure = ''
cd cpp/
'' + lib.optionalString cudaSupport ''
'' + lib.optionalString enableCuda ''
export CUDA_PATH="${cudatoolkit}"
export EXTRA_LDFLAGS="-L/run/opengl-driver/lib"
'';
installPhase = ''
mkdir -p $out/bin; cp katago $out/bin;
'' + lib.optionalString cudaSupport ''
'' + lib.optionalString enableCuda ''
wrapProgram $out/bin/katago \
--prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib"
'';

View File

@ -130,7 +130,11 @@ let
libapparmor.python
];
prePatch = prePatchCommon;
prePatch = prePatchCommon + ''
substituteInPlace ./utils/apparmor/easyprof.py --replace "/sbin/apparmor_parser" "${apparmor-parser}/bin/apparmor_parser"
substituteInPlace ./utils/apparmor/aa.py --replace "/sbin/apparmor_parser" "${apparmor-parser}/bin/apparmor_parser"
substituteInPlace ./utils/logprof.conf --replace "/sbin/apparmor_parser" "${apparmor-parser}/bin/apparmor_parser"
'';
inherit patches;
postPatch = "cd ./utils";
makeFlags = [ "LANGS=" ];

View File

@ -5,11 +5,11 @@
python.pkgs.buildPythonApplication rec {
pname = "bcc";
version = "0.15.0";
version = "0.16.0";
src = fetchurl {
url = "https://github.com/iovisor/bcc/releases/download/v${version}/bcc-src-with-submodule.tar.gz";
sha256 = "1k00xbhdzdvqp4hfxpgg34bbhnx597jjhpg1x6dz2w80r7xzsj28";
sha256 = "sha256-ekVRyugpZOU1nr0N9kWCSoJTmtD2qGsn/DmWgK7XZ/c=";
};
format = "other";

View File

@ -9,11 +9,11 @@ in
stdenv.mkDerivation rec {
pname = "klibc";
version = "2.0.7";
version = "2.0.8";
src = fetchurl {
url = "mirror://kernel/linux/libs/klibc/2.0/klibc-${version}.tar.xz";
sha256 = "08li3aj9bvzabrih98jdxi3m19h85cp53s8cr7cqad42r8vjdvxb";
sha256 = "0dmlkhnn5q8fc6rkzsisir4chkzmmiq6xkjmvyvf0g7yihwz2j2f";
};
patches = [ ./no-reinstall-kernel-headers.patch ];

View File

@ -9,11 +9,11 @@ let
in
buildPythonApplication rec {
pname = "matrix-synapse";
version = "1.19.0";
version = "1.19.1";
src = fetchPypi {
inherit pname version;
sha256 = "1fl9p0cb442271hx7zjz8vp111xgvdpn4khk8bk3kl8z9hjs2l1p";
sha256 = "0ddn3g3q0nkxpmw0xpjhnl0m1g3lrlp89abqbal9k6n689h6kfly";
};
patches = [

View File

@ -8,7 +8,7 @@
stdenv.mkDerivation rec {
pname = "timescaledb";
version = "1.7.2";
version = "1.7.3";
nativeBuildInputs = [ cmake ];
buildInputs = [ postgresql openssl ];
@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
owner = "timescale";
repo = "timescaledb";
rev = "refs/tags/${version}";
sha256 = "0xqyq3a43j2rav5n87lv1d0f66h9kqjnlxq5nq5d54h5g5qbsr3y";
sha256 = "1y3w1ap1cxmi691wfz078r2h74pcwf38zs8lr985pfmb25w47q0l";
};
cmakeFlags = [ "-DSEND_TELEMETRY_DEFAULT=OFF" "-DREGRESS_CHECKS=OFF" ];

View File

@ -1,6 +1,6 @@
{ stdenv
, rustPlatform
, fetchFromGitHub
, fetchCrate
, installShellFiles
, makeWrapper
, coreutils
@ -12,11 +12,9 @@ rustPlatform.buildRustPackage rec {
pname = "broot";
version = "0.20.3";
src = fetchFromGitHub {
owner = "Canop";
repo = pname;
rev = "v${version}";
sha256 = "0hbz7cslngl77qka8sl84fjhijbqbw69dj058ghhsgaxw06nypg2";
src = fetchCrate {
inherit pname version;
sha256 = "0vw956c5xpjsbd9b0ardvgi9jjqb230m2x5n4h9ai0yiwizc8rh6";
};
cargoSha256 = "1zl4p3n327iq7nm7hi79zjxv2gvw9f3lwgkg1qp52kycv1af5gqp";

View File

@ -21,6 +21,12 @@ rustPlatform.buildRustPackage rec {
url = "https://github.com/NerdyPepper/eva/commit/cacf51dbb9748b1dbe97b35f3c593a0a272bd4db.patch";
sha256 = "11q7dkz2x1888f3awnlr1nbbxzzfjrr46kd0kk6sgjdkyfh50cvv";
})
# to fix `cargo test -- --test-threads $NIX_BUILD_CORES`
(fetchpatch {
url = "https://github.com/NerdyPepper/eva/commit/ccfb3d327567dbaf03b2283c7e684477e2e84590.patch";
sha256 = "003yxqlyi8jna0rf05q2a006r2pkz6pcwwfl3dv8zb6p83kk1kgj";
})
];
meta = with stdenv.lib; {

View File

@ -1,4 +1,4 @@
{ stdenv, fetchgit, flex, bison, python, autoconf, automake, gnulib, libtool
{ stdenv, fetchgit, flex, bison, python3, autoconf, automake, gnulib, libtool
, gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2, unifont, pkgconfig
, fuse # only needed for grub-mount
, zfs ? null
@ -53,7 +53,7 @@ stdenv.mkDerivation rec {
./fix-bash-completion.patch
];
nativeBuildInputs = [ bison flex python pkgconfig autoconf automake ];
nativeBuildInputs = [ bison flex python3 pkgconfig autoconf automake ];
buildInputs = [ ncurses libusb-compat-0_1 freetype gettext lvm2 fuse libtool ]
++ optional doCheck qemu
++ optional zfsSupport zfs;

View File

@ -1,11 +1,11 @@
{ fetchurl, stdenv, perl, makeWrapper, procps }:
stdenv.mkDerivation rec {
name = "parallel-20200722";
name = "parallel-20200822";
src = fetchurl {
url = "mirror://gnu/parallel/${name}.tar.bz2";
sha256 = "0vqd8nhf4lkvbfy7nnibxjkpzpfandpklqm0hrix5vki5x7x80a8";
sha256 = "02dy46g6f05p7s2qs8h6yg20p1zl3flxxf77n5jw74l3h1m24m4n";
};
outputs = [ "out" "man" ];

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, makeWrapper, jre, graphviz }:
stdenv.mkDerivation rec {
version = "1.2020.15";
version = "1.2020.16";
pname = "plantuml";
src = fetchurl {
url = "mirror://sourceforge/project/plantuml/${version}/plantuml.${version}.jar";
sha256 = "0dvm24ihdr71giz0mihg7wjqf2nrkk7a52vbbzimrvbilaih6s8v";
sha256 = "0k9dligb0b2kc8rl9k5wp9sh8z1kb8g97v5pfiiwa321lp8y6wpp";
};
nativeBuildInputs = [ makeWrapper ];

View File

@ -0,0 +1,28 @@
{ stdenv, fetchgit, cmake, pkgconfig, libftdi1, popt}:
stdenv.mkDerivation rec {
pname = "sd-mux-ctrl-unstable";
version = "2020-02-17";
src = fetchgit {
url = "https://git.tizen.org/cgit/tools/testlab/sd-mux";
rev = "9dd189d973da64e033a0c5c2adb3d94b23153d94";
sha256 = "0fxl8m1zkkyxkc2zi8930m0njfgnd04a22acny6vljnzag2shjvg";
};
nativeBuildInputs = [ cmake pkgconfig ];
buildInputs = [ libftdi1 popt ];
postInstall = ''
install -D -m 644 ../doc/man/sd-mux-ctrl.1 $out/share/man/man1/sd-mux-ctrl.1
'';
meta = with stdenv.lib; {
description = "Tool for controlling multiple sd-mux devices";
homepage = "https://wiki.tizen.org/SD_MUX";
license = licenses.asl20;
maintainers = with maintainers; [ sarcasticadmin ];
platforms = platforms.unix;
};
}

View File

@ -1,5 +1,8 @@
{ stdenv, makeWrapper
, buildGoModule, fetchFromGitHub, installShellFiles
{ stdenv
, makeWrapper
, buildGoModule
, fetchFromGitHub
, installShellFiles
, git
, gnupg
, xclip
@ -26,11 +29,13 @@ buildGoModule rec {
buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version} -X main.commit=${src.rev}" ];
wrapperPath = stdenv.lib.makeBinPath ([
git
gnupg
xclip
] ++ stdenv.lib.optional stdenv.isLinux wl-clipboard);
wrapperPath = stdenv.lib.makeBinPath (
[
git
gnupg
xclip
] ++ stdenv.lib.optional stdenv.isLinux wl-clipboard
);
postInstall = ''
for shell in bash fish zsh; do
@ -49,11 +54,11 @@ buildGoModule rec {
'';
meta = with stdenv.lib; {
description = "The slightly more awesome Standard Unix Password Manager for Teams. Written in Go.";
homepage = "https://www.gopass.pw/";
license = licenses.mit;
maintainers = with maintainers; [ andir rvolosatovs ];
platforms = platforms.unix;
description = "The slightly more awesome Standard Unix Password Manager for Teams. Written in Go.";
homepage = "https://www.gopass.pw/";
license = licenses.mit;
maintainers = with maintainers; [ andir rvolosatovs ];
platforms = platforms.unix;
longDescription = ''
gopass is a rewrite of the pass password manager in Go with the aim of

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation {
pname = "podiff";
version = "1.1";
version = "1.2";
src = fetchurl {
url = "ftp://download.gnu.org.ua/pub/release/podiff/podiff-1.1.tar.gz";
sha256 = "1zz6bcmka5zvk2rq775qv122lqh54aijkxlghvx7z0r6kh880x59";
url = "ftp://download.gnu.org.ua/pub/release/podiff/podiff-1.2.tar.gz";
sha256 = "1l2b4hh53xlx28riigwarzkhxpv1pcz059xj1ka33ccvxc6c20k9";
};
patchPhase = ''

View File

@ -6,13 +6,13 @@
buildGoModule rec {
pname = "cri-tools";
version = "1.18.0";
version = "1.19.0";
src = fetchFromGitHub {
owner = "kubernetes-sigs";
repo = pname;
rev = "v${version}";
sha256 = "06sxjhjpd893fn945c1s4adri2bf7s50ddvcw5pnwb6qndzfljw6";
sha256 = "0dx21ws4nzzizzjb0g172fzvjgwck88ikr5c2av08ii06rys1567";
};
vendorSha256 = null;

View File

@ -1183,6 +1183,7 @@ in
androidndkPkgs = androidndkPkgs_18b;
androidndkPkgs_18b = (callPackage ../development/androidndk-pkgs {})."18b";
androidndkPkgs_21 = (callPackage ../development/androidndk-pkgs {})."21";
androidsdk_9_0 = androidenv.androidPkgs_9_0.androidsdk;
@ -2268,6 +2269,8 @@ in
obinskit = callPackage ../applications/misc/obinskit {};
odafileconverter = libsForQt5.callPackage ../applications/graphics/odafileconverter {};
pastel = callPackage ../applications/misc/pastel {
inherit (darwin.apple_sdk.frameworks) Security;
};
@ -4884,6 +4887,11 @@ in
kippo = callPackage ../servers/kippo { };
kimg = callPackage ../development/tools/misc/kimg {
asciidoc = asciidoc-full;
imagemagick = imagemagick7Big;
};
kristall = libsForQt5.callPackage ../applications/networking/browsers/kristall { };
kzipmix = pkgsi686Linux.callPackage ../tools/compression/kzipmix { };
@ -6804,6 +6812,8 @@ in
inherit (darwin.apple_sdk.frameworks) Security;
};
sd-mux-ctrl = callPackage ../tools/misc/sd-mux-ctrl { };
sd-switch = callPackage ../os-specific/linux/sd-switch { };
sdate = callPackage ../tools/misc/sdate { };
@ -9234,6 +9244,8 @@ in
jwasm = callPackage ../development/compilers/jwasm { };
knightos-kcc = callPackage ../development/compilers/kcc { };
kotlin = callPackage ../development/compilers/kotlin { };
lazarus = callPackage ../development/compilers/fpc/lazarus.nix {
@ -15674,6 +15686,8 @@ in
wt3
wt4;
wxformbuilder = callPackage ../development/tools/wxformbuilder { };
wxGTK = wxGTK28;
wxGTK30 = wxGTK30-gtk2;
@ -20346,6 +20360,8 @@ in
gopher = callPackage ../applications/networking/gopher/gopher { };
gophernotes = callPackage ../applications/editors/gophernotes { };
goxel = callPackage ../applications/graphics/goxel { };
gpa = callPackage ../applications/misc/gpa { };
@ -20987,6 +21003,8 @@ in
i3-wk-switch = callPackage ../applications/window-managers/i3/wk-switch.nix { };
windowchef = callPackage ../applications/window-managers/windowchef/default.nix { };
wmfocus = callPackage ../applications/window-managers/i3/wmfocus.nix { };
wmfs = callPackage ../applications/window-managers/wmfs/default.nix { };
@ -23344,6 +23362,8 @@ in
treesheets = callPackage ../applications/office/treesheets { wxGTK = wxGTK31; };
tremc = callPackage ../applications/networking/p2p/tremc { };
tribler = callPackage ../applications/networking/p2p/tribler { };
trojita = libsForQt5.callPackage ../applications/networking/mailreaders/trojita {
@ -24692,13 +24712,13 @@ in
katago = callPackage ../games/katago { };
katagoWithCuda = katago.override {
cudaSupport = true;
enableCuda = true;
cudnn = cudnn_cudatoolkit_10_2;
cudatoolkit = cudatoolkit_10_2;
};
katagoCPU = katago.override {
gpuEnabled = false;
enableGPU = false;
};
klavaro = callPackage ../games/klavaro {};

View File

@ -137,12 +137,16 @@ let
cohttp = callPackage ../development/ocaml-modules/cohttp { };
cohttp-async = callPackage ../development/ocaml-modules/cohttp/async.nix { };
cohttp-lwt = callPackage ../development/ocaml-modules/cohttp/lwt.nix { };
cohttp-lwt-unix = callPackage ../development/ocaml-modules/cohttp/lwt-unix.nix { };
conduit = callPackage ../development/ocaml-modules/conduit { };
conduit-async = callPackage ../development/ocaml-modules/conduit/async.nix { };
conduit-lwt = callPackage ../development/ocaml-modules/conduit/lwt.nix { };
conduit-lwt-unix = callPackage ../development/ocaml-modules/conduit/lwt-unix.nix { };
@ -991,7 +995,7 @@ let
janeStreet =
if lib.versionOlder "4.08" ocaml.version
then import ../development/ocaml-modules/janestreet/0.13.nix {
inherit ctypes janePackage num octavius ppxlib re;
inherit ctypes dune-configurator janePackage num octavius ppxlib re;
inherit (pkgs) openssl;
}
else if lib.versionOlder "4.07" ocaml.version

View File

@ -4544,6 +4544,8 @@ in {
jupyterhub-ldapauthenticator = callPackage ../development/python-modules/jupyterhub-ldapauthenticator { };
jupyterhub-tmpauthenticator = callPackage ../development/python-modules/jupyterhub-tmpauthenticator { };
jupyterhub-systemdspawner = callPackage ../development/python-modules/jupyterhub-systemdspawner {
inherit (pkgs) bash;
};
@ -6991,7 +6993,9 @@ in {
carbon = callPackage ../development/python-modules/carbon { };
ujson = callPackage ../development/python-modules/ujson { };
ujson = if isPy27
then callPackage ../development/python-modules/ujson/2.nix { }
else callPackage ../development/python-modules/ujson { };
unidecode = callPackage ../development/python-modules/unidecode {};
@ -7851,7 +7855,7 @@ in {
rxv = callPackage ../development/python-modules/rxv { };
userpath = callPackage ../development/python-modules/userpath { };
pooch = callPackage ../development/python-modules/pooch {};
});