Merge branch 'master' into perl/Gtk2GladeXML

This commit is contained in:
Jörg Thalheim 2018-02-19 21:52:11 +00:00 committed by GitHub
commit 01e388cafc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
99 changed files with 2596 additions and 906 deletions

View File

@ -545,6 +545,12 @@ rec {
name = "riscv-multiplatform";
kernelArch = "riscv";
bfdEmulation = "elf${bits}lriscv";
kernelTarget = "vmlinux";
kernelAutoModules = true;
kernelBaseConfig = "defconfig";
kernelExtraConfig = ''
FTRACE n
'';
};
selectBySystem = system: {

View File

@ -12,7 +12,7 @@ interfaces. However, you can configure an interface manually as
follows:
<programlisting>
networking.interfaces.eth0.ip4 = [ { address = "192.168.1.2"; prefixLength = 24; } ];
networking.interfaces.eth0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
</programlisting>
Typically youll also want to set a default gateway and set of name

View File

@ -26,7 +26,7 @@ boot.kernel.sysctl."net.ipv6.conf.eth0.disable_ipv6" = true;
DHCPv6. You can configure an interface manually:
<programlisting>
networking.interfaces.eth0.ip6 = [ { address = "fe00:aa:bb:cc::2"; prefixLength = 64; } ];
networking.interfaces.eth0.ipv6.addresses = [ { address = "fe00:aa:bb:cc::2"; prefixLength = 64; } ];
</programlisting>
</para>

View File

@ -36,7 +36,7 @@ let
package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}'") pkgs);
in "<listitem>"
+ "<para><literal>pkgs.${name} (${package.meta.name})</literal>"
+ lib.optionalString (!package.meta.evaluates) " <emphasis>[UNAVAILABLE]</emphasis>"
+ lib.optionalString (!package.meta.available) " <emphasis>[UNAVAILABLE]</emphasis>"
+ ": ${package.meta.description or "???"}.</para>"
+ lib.optionalString (args ? comment) "\n<para>${args.comment}</para>"
# Lots of `longDescription's break DocBook, so we just wrap them into <programlisting>

View File

@ -261,10 +261,42 @@ following incompatible changes:</para>
</listitem>
<listitem>
<para>
The option <option>services.xserver.desktopManager.default</option> is now <literal>none</literal> by default.
An assertion failure is thrown if WM's and DM's default are <literal>none</literal>.
To explicitly run a plain X session without and DM or WM, the newly introduced option <option>services.xserver.plainX</option>
must be set to true.
In the module <option>networking.interfaces.&lt;name&gt;</option> the
following options have been removed:
<itemizedlist>
<listitem>
<para><option>ipAddress</option></para>
</listitem>
<listitem>
<para><option>ipv6Address</option></para>
</listitem>
<listitem>
<para><option>prefixLength</option></para>
</listitem>
<listitem>
<para><option>ipv6PrefixLength</option></para>
</listitem>
<listitem>
<para><option>subnetMask</option></para>
</listitem>
</itemizedlist>
To assign static addresses to an interface the options
<option>ipv4.addresses</option> and <option>ipv6.addresses</option>
should be used instead.
The options <option>ip4</option> and <option>ip6</option> have been
renamed to <option>ipv4.addresses</option> <option>ipv6.addresses</option>
respectively.
The new options <option>ipv4.routes</option> and <option>ipv6.routes</option>
have been added to set up static routing.
</para>
</listitem>
<listitem>
<para>
The option <option>services.xserver.desktopManager.default</option> is now
<literal>none</literal> by default. An assertion failure is thrown if WM's
and DM's default are <literal>none</literal>.
To explicitly run a plain X session without and DM or WM, the newly
introduced option <option>services.xserver.plainX</option> must be set to true.
</para>
</listitem>
<listitem>

View File

@ -51,7 +51,7 @@ rec {
let
interfacesNumbered = zipLists config.virtualisation.vlans (range 1 255);
interfaces = flip map interfacesNumbered ({ fst, snd }:
nameValuePair "eth${toString snd}" { ip4 =
nameValuePair "eth${toString snd}" { ipv4.addresses =
[ { address = "192.168.${toString fst}.${toString m.snd}";
prefixLength = 24;
} ];
@ -64,7 +64,7 @@ rec {
networking.interfaces = listToAttrs interfaces;
networking.primaryIPAddress =
optionalString (interfaces != []) (head (head interfaces).value.ip4).address;
optionalString (interfaces != []) (head (head interfaces).value.ipv4.addresses).address;
# Put the IP addresses of all VMs in this machine's
# /etc/hosts file. If a machine has multiple

View File

@ -84,7 +84,7 @@ let format' = format; in let
nixpkgs = cleanSource pkgs.path;
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}" {} ''
channelSources = pkgs.runCommand "nixos-${config.system.nixos.version}" {} ''
mkdir -p $out
cp -prd ${nixpkgs} $out/nixos
chmod -R u+w $out/nixos
@ -92,7 +92,7 @@ let format' = format; in let
ln -s . $out/nixos/nixpkgs
fi
rm -rf $out/nixos/.git
echo -n ${config.system.nixosVersionSuffix} > $out/nixos/.version-suffix
echo -n ${config.system.nixos.versionSuffix} > $out/nixos/.version-suffix
'';
metaClosure = pkgs.writeText "meta" ''

View File

@ -12,7 +12,7 @@ let
# CD. These are installed into the "nixos" channel of the root
# user, as expected by nixos-rebuild/nixos-install. FIXME: merge
# with make-channel.nix.
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}"
channelSources = pkgs.runCommand "nixos-${config.system.nixos.version}"
{ }
''
mkdir -p $out
@ -21,7 +21,7 @@ let
if [ ! -e $out/nixos/nixpkgs ]; then
ln -s . $out/nixos/nixpkgs
fi
echo -n ${config.system.nixosVersionSuffix} > $out/nixos/.version-suffix
echo -n ${config.system.nixos.versionSuffix} > $out/nixos/.version-suffix
'';
in

View File

@ -16,7 +16,7 @@ with lib;
];
# ISO naming.
isoImage.isoName = "${config.isoImage.isoBaseName}-${config.system.nixosLabel}-${pkgs.stdenv.system}.iso";
isoImage.isoName = "${config.isoImage.isoBaseName}-${config.system.nixos.label}-${pkgs.stdenv.system}.iso";
isoImage.volumeID = substring 0 11 "NIXOS_ISO";

View File

@ -39,31 +39,31 @@ let
DEFAULT boot
LABEL boot
MENU LABEL NixOS ${config.system.nixosLabel}${config.isoImage.appendToMenuLabel}
LINUX /boot/bzImage
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
LINUX /boot/${config.system.boot.loader.kernelFile}
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}
INITRD /boot/initrd
INITRD /boot/${config.system.boot.loader.initrdFile}
# A variant to boot with 'nomodeset'
LABEL boot-nomodeset
MENU LABEL NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (nomodeset)
LINUX /boot/bzImage
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (nomodeset)
LINUX /boot/${config.system.boot.loader.kernelFile}
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} nomodeset
INITRD /boot/initrd
INITRD /boot/${config.system.boot.loader.initrdFile}
# A variant to boot with 'copytoram'
LABEL boot-copytoram
MENU LABEL NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (copytoram)
LINUX /boot/bzImage
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (copytoram)
LINUX /boot/${config.system.boot.loader.kernelFile}
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} copytoram
INITRD /boot/initrd
INITRD /boot/${config.system.boot.loader.initrdFile}
# A variant to boot with verbose logging to the console
LABEL boot-nomodeset
MENU LABEL NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (debug)
LINUX /boot/bzImage
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (debug)
LINUX /boot/${config.system.boot.loader.kernelFile}
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} loglevel=7
INITRD /boot/initrd
INITRD /boot/${config.system.boot.loader.initrdFile}
'';
isolinuxMemtest86Entry = ''
@ -82,35 +82,35 @@ let
mkdir -p $out/loader/entries
cat << EOF > $out/loader/entries/nixos-iso.conf
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel}
linux /boot/bzImage
initrd /boot/initrd
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
linux /boot/${config.system.boot.loader.kernelFile}
initrd /boot/${config.system.boot.loader.initrdFile}
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}
EOF
# A variant to boot with 'nomodeset'
cat << EOF > $out/loader/entries/nixos-iso-nomodeset.conf
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel}
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
version nomodeset
linux /boot/bzImage
initrd /boot/initrd
linux /boot/${config.system.boot.loader.kernelFile}
initrd /boot/${config.system.boot.loader.initrdFile}
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} nomodeset
EOF
# A variant to boot with 'copytoram'
cat << EOF > $out/loader/entries/nixos-iso-copytoram.conf
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel}
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
version copytoram
linux /boot/bzImage
initrd /boot/initrd
linux /boot/${config.system.boot.loader.kernelFile}
initrd /boot/${config.system.boot.loader.initrdFile}
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} copytoram
EOF
# A variant to boot with verbose logging to the console
cat << EOF > $out/loader/entries/nixos-iso-debug.conf
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (debug)
linux /boot/bzImage
initrd /boot/initrd
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (debug)
linux /boot/${config.system.boot.loader.kernelFile}
initrd /boot/${config.system.boot.loader.initrdFile}
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} loglevel=7
EOF
@ -127,8 +127,8 @@ let
mkdir ./contents && cd ./contents
cp -rp "${efiDir}"/* .
mkdir ./boot
cp -p "${config.boot.kernelPackages.kernel}/bzImage" \
"${config.system.build.initialRamdisk}/initrd" ./boot/
cp -p "${config.boot.kernelPackages.kernel}/${config.system.boot.loader.kernelFile}" \
"${config.system.build.initialRamdisk}/${config.system.boot.loader.initrdFile}" ./boot/
touch --date=@0 ./*
usage_size=$(du -sb --apparent-size . | tr -cd '[:digit:]')
@ -346,11 +346,11 @@ in
};
target = "/isolinux/isolinux.cfg";
}
{ source = config.boot.kernelPackages.kernel + "/bzImage";
target = "/boot/bzImage";
{ source = config.boot.kernelPackages.kernel + "/" + config.system.boot.loader.kernelFile;
target = "/boot/" + config.system.boot.loader.kernelFile;
}
{ source = config.system.build.initialRamdisk + "/initrd";
target = "/boot/initrd";
{ source = config.system.build.initialRamdisk + "/" + config.system.boot.loader.initrdFile;
target = "/boot/" + config.system.boot.loader.initrdFile;
}
{ source = config.system.build.squashfsStore;
target = "/nix-store.squashfs";
@ -361,7 +361,7 @@ in
{ source = config.isoImage.splashImage;
target = "/isolinux/background.png";
}
{ source = pkgs.writeText "version" config.system.nixosVersion;
{ source = pkgs.writeText "version" config.system.nixos.label;
target = "/version.txt";
}
] ++ optionals config.isoImage.makeEfiBootable [

View File

@ -8,7 +8,7 @@ with lib;
let
versionFile = pkgs.writeText "nixos-version" config.system.nixosVersion;
versionFile = pkgs.writeText "nixos-label" config.system.nixos.label;
in
@ -58,8 +58,8 @@ in
# Individual files to be included on the CD, outside of the Nix
# store on the CD.
tarball.contents =
[ { source = config.system.build.initialRamdisk + "/initrd";
target = "/boot/initrd";
[ { source = config.system.build.initialRamdisk + "/" + config.system.boot.loader.initrdFile;
target = "/boot/" + config.system.boot.loader.initrdFile;
}
{ source = versionFile;
target = "/nixos-version.txt";

View File

@ -625,7 +625,7 @@ $bootLoaderConfig
# compatible, in order to avoid breaking some software such as database
# servers. You should change this only after NixOS release notes say you
# should.
system.stateVersion = "${\(qw(@nixosRelease@))}"; # Did you read the comment?
system.stateVersion = "${\(qw(@release@))}"; # Did you read the comment?
}
EOF

View File

@ -6,9 +6,9 @@ case "$1" in
exit 1
;;
--hash|--revision)
echo "@nixosRevision@"
echo "@revision@"
;;
*)
echo "@nixosVersion@ (@nixosCodeName@)"
echo "@version@ (@codeName@)"
;;
esac

View File

@ -55,7 +55,7 @@ let
src = ./nixos-generate-config.pl;
path = [ pkgs.btrfs-progs ];
perl = "${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl";
inherit (config.system) nixosRelease;
inherit (config.system.nixos) release;
};
nixos-option = makeProg {
@ -66,7 +66,7 @@ let
nixos-version = makeProg {
name = "nixos-version";
src = ./nixos-version.sh;
inherit (config.system) nixosVersion nixosCodeName nixosRevision;
inherit (config.system.nixos) version codeName revision;
};
in

View File

@ -0,0 +1,72 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.system.nixos;
in
{
options.system = {
nixos.label = mkOption {
type = types.str;
description = ''
NixOS version name to be used in the names of generated
outputs and boot labels.
If you ever wanted to influence the labels in your GRUB menu,
this is the option for you.
The default is <option>system.nixos.tags</option> separated by
"-" + "-" + <envar>NIXOS_LABEL_VERSION</envar> environment
variable (defaults to the value of
<option>system.nixos.version</option>).
Can be overriden by setting <envar>NIXOS_LABEL</envar>.
Useful for not loosing track of configurations built from different
nixos branches/revisions, e.g.:
<screen>
#!/bin/sh
today=`date +%Y%m%d`
branch=`(cd nixpkgs ; git branch 2>/dev/null | sed -n '/^\* / { s|^\* ||; p; }')`
revision=`(cd nixpkgs ; git rev-parse HEAD)`
export NIXOS_LABEL_VERSION="$today.$branch-''${revision:0:7}"
nixos-rebuild switch</screen>
'';
};
nixos.tags = mkOption {
type = types.listOf types.str;
default = [];
example = [ "with-xen" ];
description = ''
Strings to prefix to the default
<option>system.nixos.label</option>.
Useful for not loosing track of configurations built with
different options, e.g.:
<screen>
{
system.nixos.tags = [ "with-xen" ];
virtualisation.xen.enable = true;
}
</screen>
'';
};
};
config = {
# This is set here rather than up there so that changing it would
# not rebuild the manual
system.nixos.label = mkDefault (maybeEnv "NIXOS_LABEL"
(concatStringsSep "-" (sort (x: y: x < y) cfg.tags)
+ "-" + maybeEnv "NIXOS_LABEL_VERSION" cfg.version));
};
}

View File

@ -3,7 +3,7 @@
with lib;
let
cfg = config.system;
cfg = config.system.nixos;
releaseFile = "${toString pkgs.path}/.version";
suffixFile = "${toString pkgs.path}/.version-suffix";
@ -16,9 +16,44 @@ in
options.system = {
nixos.version = mkOption {
internal = true;
type = types.str;
description = "The full NixOS version (e.g. <literal>16.03.1160.f2d4ee1</literal>).";
};
nixos.release = mkOption {
readOnly = true;
type = types.str;
default = fileContents releaseFile;
description = "The NixOS release (e.g. <literal>16.03</literal>).";
};
nixos.versionSuffix = mkOption {
internal = true;
type = types.str;
default = if pathExists suffixFile then fileContents suffixFile else "pre-git";
description = "The NixOS version suffix (e.g. <literal>1160.f2d4ee1</literal>).";
};
nixos.revision = mkOption {
internal = true;
type = types.str;
default = if pathIsDirectory gitRepo then commitIdFromGitRepo gitRepo
else if pathExists revisionFile then fileContents revisionFile
else "master";
description = "The Git revision from which this NixOS configuration was built.";
};
nixos.codeName = mkOption {
readOnly = true;
type = types.str;
description = "The NixOS release code name (e.g. <literal>Emu</literal>).";
};
stateVersion = mkOption {
type = types.str;
default = cfg.nixosRelease;
default = cfg.release;
description = ''
Every once in a while, a new NixOS release may change
configuration defaults in a way incompatible with stateful
@ -32,49 +67,6 @@ in
'';
};
nixosLabel = mkOption {
type = types.str;
description = ''
Label to be used in the names of generated outputs and boot
labels.
'';
};
nixosVersion = mkOption {
internal = true;
type = types.str;
description = "The full NixOS version (e.g. <literal>16.03.1160.f2d4ee1</literal>).";
};
nixosRelease = mkOption {
readOnly = true;
type = types.str;
default = fileContents releaseFile;
description = "The NixOS release (e.g. <literal>16.03</literal>).";
};
nixosVersionSuffix = mkOption {
internal = true;
type = types.str;
default = if pathExists suffixFile then fileContents suffixFile else "pre-git";
description = "The NixOS version suffix (e.g. <literal>1160.f2d4ee1</literal>).";
};
nixosRevision = mkOption {
internal = true;
type = types.str;
default = if pathIsDirectory gitRepo then commitIdFromGitRepo gitRepo
else if pathExists revisionFile then fileContents revisionFile
else "master";
description = "The Git revision from which this NixOS configuration was built.";
};
nixosCodeName = mkOption {
readOnly = true;
type = types.str;
description = "The NixOS release code name (e.g. <literal>Emu</literal>).";
};
defaultChannel = mkOption {
internal = true;
type = types.str;
@ -86,16 +78,15 @@ in
config = {
system = {
system.nixos = {
# These defaults are set here rather than up there so that
# changing them would not rebuild the manual
nixosLabel = mkDefault cfg.nixosVersion;
nixosVersion = mkDefault (cfg.nixosRelease + cfg.nixosVersionSuffix);
nixosRevision = mkIf (pathIsDirectory gitRepo) (mkDefault gitCommitId);
nixosVersionSuffix = mkIf (pathIsDirectory gitRepo) (mkDefault (".git." + gitCommitId));
version = mkDefault (cfg.release + cfg.versionSuffix);
revision = mkIf (pathIsDirectory gitRepo) (mkDefault gitCommitId);
versionSuffix = mkIf (pathIsDirectory gitRepo) (mkDefault (".git." + gitCommitId));
# Note: code names must only increase in alphabetical order.
nixosCodeName = "Impala";
codeName = "Impala";
};
# Generate /etc/os-release. See
@ -105,10 +96,10 @@ in
''
NAME=NixOS
ID=nixos
VERSION="${config.system.nixosVersion} (${config.system.nixosCodeName})"
VERSION_CODENAME=${toLower config.system.nixosCodeName}
VERSION_ID="${config.system.nixosVersion}"
PRETTY_NAME="NixOS ${config.system.nixosVersion} (${config.system.nixosCodeName})"
VERSION="${cfg.version} (${cfg.codeName})"
VERSION_CODENAME=${toLower cfg.codeName}
VERSION_ID="${cfg.version}"
PRETTY_NAME="NixOS ${cfg.version} (${cfg.codeName})"
HOME_URL="https://nixos.org/"
SUPPORT_URL="https://nixos.org/nixos/support.html"
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"

View File

@ -60,6 +60,7 @@
./misc/extra-arguments.nix
./misc/ids.nix
./misc/lib.nix
./misc/label.nix
./misc/locate.nix
./misc/meta.nix
./misc/nixpkgs.nix

View File

@ -189,6 +189,14 @@ with lib;
# Profile splitting
(mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ])
# misc/version.nix
(mkRenamedOptionModule [ "config" "system" "nixosVersion" ] [ "config" "system" "nixos" "version" ])
(mkRenamedOptionModule [ "config" "system" "nixosRelease" ] [ "config" "system" "nixos" "release" ])
(mkRenamedOptionModule [ "config" "system" "nixosVersionSuffix" ] [ "config" "system" "nixos" "versionSuffix" ])
(mkRenamedOptionModule [ "config" "system" "nixosRevision" ] [ "config" "system" "nixos" "revision" ])
(mkRenamedOptionModule [ "config" "system" "nixosCodeName" ] [ "config" "system" "nixos" "codeName" ])
(mkRenamedOptionModule [ "config" "system" "nixosLabel" ] [ "config" "system" "nixos" "label" ])
# Options that are obsolete and have no replacement.
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "")
(mkRemovedOptionModule [ "programs" "bash" "enable" ] "")

View File

@ -16,10 +16,10 @@ let
It isn't perfect, but it seems to cover a vast majority of use cases.
Caveat: even if the package is reached by a different means,
the path above will be shown and not e.g. `${config.services.foo.package}`. */
manual = import ../../../doc/manual {
manual = import ../../../doc/manual rec {
inherit pkgs config;
version = config.system.nixosRelease;
revision = "release-${config.system.nixosRelease}";
version = config.system.nixos.release;
revision = "release-${version}";
options =
let
scrubbedEval = evalModules {

View File

@ -12,7 +12,7 @@ let
case "$1" in
-i) echo "nixos";;
-r) echo "${config.system.nixosVersion}";;
-r) echo "${config.system.nixos.version}";;
esac
'';
in {

View File

@ -16,7 +16,7 @@ let
# Don't start dhcpcd on explicitly configured interfaces or on
# interfaces that are part of a bridge, bond or sit device.
ignoredInterfaces =
map (i: i.name) (filter (i: if i.useDHCP != null then !i.useDHCP else i.ip4 != [ ] || i.ipAddress != null) interfaces)
map (i: i.name) (filter (i: if i.useDHCP != null then !i.useDHCP else i.ipv4.addresses != [ ]) interfaces)
++ mapAttrsToList (i: _: i) config.networking.sits
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.bridges))
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.vswitches))

View File

@ -35,10 +35,9 @@ in {
config = mkIf cfg.enable {
boot.kernelModules = [ "dummy" ];
networking.interfaces.dummy0 = {
ipAddress = "169.254.169.254";
prefixLength = 32;
};
networking.interfaces.dummy0.ipv4.addresses = [
{ address = "169.254.169.254"; prefixLength = 32; }
];
systemd.services.hologram-agent = {
description = "Provide EC2 instance credentials to machines outside of EC2";

View File

@ -64,8 +64,8 @@ in
config = {
# Note: this is set here rather than up there so that changing
# nixosLabel would not rebuild manual pages
services.mingetty.greetingLine = mkDefault ''<<< Welcome to NixOS ${config.system.nixosLabel} (\m) - \l >>>'';
# nixos.label would not rebuild manual pages
services.mingetty.greetingLine = mkDefault ''<<< Welcome to NixOS ${config.system.nixos.label} (\m) - \l >>>'';
systemd.services."getty@" =
{ serviceConfig.ExecStart = [

View File

@ -30,6 +30,8 @@ let
let
kernelPath = "${config.boot.kernelPackages.kernel}/" +
"${config.system.boot.loader.kernelFile}";
initrdPath = "${config.system.build.initialRamdisk}/" +
"${config.system.boot.loader.initrdFile}";
in ''
mkdir $out
@ -50,7 +52,7 @@ let
echo -n "$kernelParams" > $out/kernel-params
ln -s ${config.system.build.initialRamdisk}/initrd $out/initrd
ln -s ${initrdPath} $out/initrd
ln -s ${config.system.build.initialRamdiskSecretAppender}/bin/append-initrd-secrets $out
@ -106,7 +108,7 @@ let
if [] == failed then pkgs.stdenvNoCC.mkDerivation {
name = let hn = config.networking.hostName;
nn = if (hn != "") then hn else "unnamed";
in "nixos-system-${nn}-${config.system.nixosLabel}";
in "nixos-system-${nn}-${config.system.nixos.label}";
preferLocalBuild = true;
allowSubstitutes = false;
buildCommand = systemBuilder;
@ -120,7 +122,7 @@ let
config.system.build.installBootLoader
or "echo 'Warning: do not know how to make this configuration bootable; please enable a boot loader.' 1>&2; true";
activationScript = config.system.activationScripts.script;
nixosLabel = config.system.nixosLabel;
nixosLabel = config.system.nixos.label;
configurationName = config.boot.loader.grub.configurationName;
@ -179,6 +181,15 @@ in
'';
};
system.boot.loader.initrdFile = mkOption {
internal = true;
default = "initrd";
type = types.str;
description = ''
Name of the initrd file to be passed to the bootloader.
'';
};
system.copySystemConfiguration = mkOption {
type = types.bool;
default = false;

View File

@ -10,7 +10,7 @@ let
breezePlymouth = pkgs.breeze-plymouth.override {
nixosBranding = true;
nixosVersion = config.system.nixosRelease;
nixosVersion = config.system.nixos.release;
};
themesEnv = pkgs.buildEnv {

View File

@ -20,14 +20,8 @@ let
"sys-subsystem-net-devices-${escapeSystemdPath interface}.device";
interfaceIps = i:
i.ip4 ++ optionals cfg.enableIPv6 i.ip6
++ optional (i.ipAddress != null) {
address = i.ipAddress;
prefixLength = i.prefixLength;
} ++ optional (cfg.enableIPv6 && i.ipv6Address != null) {
address = i.ipv6Address;
prefixLength = i.ipv6PrefixLength;
};
i.ipv4.addresses
++ optionals cfg.enableIPv6 i.ipv6.addresses;
destroyBond = i: ''
while true; do
@ -185,33 +179,58 @@ let
path = [ pkgs.iproute ];
script =
''
# FIXME: shouldn't this be done in network-link?
echo "bringing up interface..."
ip link set "${i.name}" up
state="/run/nixos/network/addresses/${i.name}"
mkdir -p $(dirname "$state")
'' + flip concatMapStrings (ips) (ip:
let
address = "${ip.address}/${toString ip.prefixLength}";
in
''
echo "${address}" >> $state
if out=$(ip addr add "${address}" dev "${i.name}" 2>&1); then
echo "added ip ${address}"
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
echo "failed to add ${address}"
exit 1
fi
'');
${flip concatMapStrings ips (ip:
let
cidr = "${ip.address}/${toString ip.prefixLength}";
in
''
echo "${cidr}" >> $state
echo -n "adding address ${cidr}... "
if out=$(ip addr add "${cidr}" dev "${i.name}" 2>&1); then
echo "done"
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
echo "failed"
exit 1
fi
''
)}
state="/run/nixos/network/routes/${i.name}"
mkdir -p $(dirname "$state")
${flip concatMapStrings (i.ipv4.routes ++ i.ipv6.routes) (route:
let
cidr = "${route.address}/${toString route.prefixLength}";
via = optionalString (route.via != null) ''via "${route.via}"'';
options = concatStrings (mapAttrsToList (name: val: "${name} ${val} ") route.options);
in
''
echo "${cidr}" >> $state
echo -n "adding route ${cidr}... "
if out=$(ip route add "${cidr}" ${options} ${via} dev "${i.name}" 2>&1); then
echo "done"
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
echo "failed"
exit 1
fi
''
)}
'';
preStop = ''
state="/run/nixos/network/routes/${i.name}"
while read cidr; do
echo -n "deleting route $cidr... "
ip route del "$cidr" dev "${i.name}" >/dev/null 2>&1 && echo "done" || echo "failed"
done < "$state"
rm -f "$state"
state="/run/nixos/network/addresses/${i.name}"
while read address; do
echo -n "deleting $address..."
ip addr del "$address" dev "${i.name}" >/dev/null 2>&1 || echo -n " Failed"
echo ""
while read cidr; do
echo -n "deleting address $cidr... "
ip addr del "$cidr" dev "${i.name}" >/dev/null 2>&1 && echo "done" || echo "failed"
done < "$state"
rm -f "$state"
'';

View File

@ -9,14 +9,8 @@ let
interfaces = attrValues cfg.interfaces;
interfaceIps = i:
i.ip4 ++ optionals cfg.enableIPv6 i.ip6
++ optional (i.ipAddress != null) {
address = i.ipAddress;
prefixLength = i.prefixLength;
} ++ optional (cfg.enableIPv6 && i.ipv6Address != null) {
address = i.ipv6Address;
prefixLength = i.ipv6PrefixLength;
};
i.ipv4.addresses
++ optionals cfg.enableIPv6 i.ipv6.addresses;
dhcpStr = useDHCP: if useDHCP == true || useDHCP == null then "both" else "none";

View File

@ -1,4 +1,4 @@
{ config, lib, pkgs, utils, stdenv, ... }:
{ config, options, lib, pkgs, utils, stdenv, ... }:
with lib;
with utils;
@ -101,7 +101,7 @@ let
address = mkOption {
type = types.str;
description = ''
IPv${toString v} address of the interface. Leave empty to configure the
IPv${toString v} address of the interface. Leave empty to configure the
interface using DHCP.
'';
};
@ -116,6 +116,40 @@ let
};
};
routeOpts = v:
{ options = {
address = mkOption {
type = types.str;
description = "IPv${toString v} address of the network.";
};
prefixLength = mkOption {
type = types.addCheck types.int (n: n >= 0 && n <= (if v == 4 then 32 else 128));
description = ''
Subnet mask of the network, specified as the number of
bits in the prefix (<literal>${if v == 4 then "24" else "64"}</literal>).
'';
};
via = mkOption {
type = types.nullOr types.str;
default = null;
description = "IPv${toString v} address of the next hop.";
};
options = mkOption {
type = types.attrsOf types.str;
default = { };
example = { mtu = "1492"; window = "524288"; };
description = ''
Other route options. See the symbol <literal>OPTION</literal>
in the <literal>ip-route(8)</literal> manual page for the details.
'';
};
};
};
gatewayCoerce = address: { inherit address; };
gatewayOpts = { ... }: {
@ -148,7 +182,6 @@ let
interfaceOpts = { name, ... }: {
options = {
name = mkOption {
example = "eth0";
type = types.str;
@ -175,7 +208,7 @@ let
'';
};
ip4 = mkOption {
ipv4.addresses = mkOption {
default = [ ];
example = [
{ address = "10.0.0.1"; prefixLength = 16; }
@ -187,7 +220,7 @@ let
'';
};
ip6 = mkOption {
ipv6.addresses = mkOption {
default = [ ];
example = [
{ address = "fdfd:b3f0:482::1"; prefixLength = 48; }
@ -199,50 +232,27 @@ let
'';
};
ipAddress = mkOption {
default = null;
example = "10.0.0.1";
type = types.nullOr types.str;
ipv4.routes = mkOption {
default = [];
example = [
{ address = "10.0.0.0"; prefixLength = 16; }
{ address = "192.168.2.0"; prefixLength = 24; via = "192.168.1.1"; }
];
type = with types; listOf (submodule (routeOpts 4));
description = ''
IP address of the interface. Leave empty to configure the
interface using DHCP.
List of extra IPv4 static routes that will be assigned to the interface.
'';
};
prefixLength = mkOption {
default = null;
example = 24;
type = types.nullOr types.int;
ipv6.routes = mkOption {
default = [];
example = [
{ address = "fdfd:b3f0::"; prefixLength = 48; }
{ address = "2001:1470:fffd:2098::"; prefixLength = 64; via = "fdfd:b3f0::1"; }
];
type = with types; listOf (submodule (routeOpts 6));
description = ''
Subnet mask of the interface, specified as the number of
bits in the prefix (<literal>24</literal>).
'';
};
subnetMask = mkOption {
default = null;
description = ''
Defunct, supply the prefix length instead.
'';
};
ipv6Address = mkOption {
default = null;
example = "2001:1470:fffd:2098::e006";
type = types.nullOr types.str;
description = ''
IPv6 address of the interface. Leave empty to configure the
interface using NDP.
'';
};
ipv6PrefixLength = mkOption {
default = 64;
example = 64;
type = types.int;
description = ''
Subnet mask of the interface, specified as the number of
bits in the prefix (<literal>64</literal>).
List of extra IPv6 static routes that will be assigned to the interface.
'';
};
@ -317,6 +327,32 @@ let
name = mkDefault name;
};
# Renamed or removed options
imports =
let
defined = x: x != "_mkMergedOptionModule";
in [
(mkRenamedOptionModule [ "ip4" ] [ "ipv4" "addresses"])
(mkRenamedOptionModule [ "ip6" ] [ "ipv6" "addresses"])
(mkRemovedOptionModule [ "subnetMask" ] ''
Supply a prefix length instead; use option
networking.interfaces.<name>.ipv{4,6}.addresses'')
(mkMergedOptionModule
[ [ "ipAddress" ] [ "prefixLength" ] ]
[ "ipv4" "addresses" ]
(cfg: with cfg;
optional (defined ipAddress && defined prefixLength)
{ address = ipAddress; prefixLength = prefixLength; }))
(mkMergedOptionModule
[ [ "ipv6Address" ] [ "ipv6PrefixLength" ] ]
[ "ipv6" "addresses" ]
(cfg: with cfg;
optional (defined ipv6Address && defined ipv6PrefixLength)
{ address = ipv6Address; prefixLength = ipv6PrefixLength; }))
({ options.warnings = options.warnings; })
];
};
hexChars = stringToCharacters "0123456789abcdef";
@ -453,7 +489,7 @@ in
networking.interfaces = mkOption {
default = {};
example =
{ eth0.ip4 = [ {
{ eth0.ipv4 = [ {
address = "131.211.84.78";
prefixLength = 25;
} ];
@ -932,13 +968,10 @@ in
config = {
warnings = concatMap (i: i.warnings) interfaces;
assertions =
(flip map interfaces (i: {
assertion = i.subnetMask == null;
message = ''
The networking.interfaces."${i.name}".subnetMask option is defunct. Use prefixLength instead.
'';
})) ++ (flip map interfaces (i: {
# With the linux kernel, interface name length is limited by IFNAMSIZ
# to 16 bytes, including the trailing null byte.
# See include/linux/if.h in the kernel sources
@ -947,7 +980,7 @@ in
The name of networking.interfaces."${i.name}" is too long, it needs to be less than 16 characters.
'';
})) ++ (flip map slaveIfs (i: {
assertion = i.ip4 == [ ] && i.ipAddress == null && i.ip6 == [ ] && i.ipv6Address == null;
assertion = i.ipv4.addresses == [ ] && i.ipv6.addresses == [ ];
message = ''
The networking.interfaces."${i.name}" must not have any defined ips when it is a slave.
'';
@ -1089,6 +1122,9 @@ in
'' + optionalString (i.mtu != null) ''
echo "setting MTU to ${toString i.mtu}..."
ip link set "${i.name}" mtu "${toString i.mtu}"
'' + ''
echo -n "bringing up interface... "
ip link set "${i.name}" up && echo "done" || (echo "failed"; exit 1)
'';
})));

View File

@ -26,7 +26,7 @@ in
rm $diskImageBase
popd
'';
diskImageBase = "nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw";
diskImageBase = "nixos-image-${config.system.nixos.label}-${pkgs.stdenv.system}.raw";
buildInputs = [ pkgs.utillinux pkgs.perl ];
exportReferencesGraph =
[ "closure" config.system.build.toplevel ];

View File

@ -14,7 +14,7 @@ in
PATH=$PATH:${pkgs.stdenv.lib.makeBinPath [ pkgs.gnutar pkgs.gzip ]}
pushd $out
mv $diskImage disk.raw
tar -Szcf nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw.tar.gz disk.raw
tar -Szcf nixos-image-${config.system.nixos.label}-${pkgs.stdenv.system}.raw.tar.gz disk.raw
rm $out/disk.raw
popd
'';

View File

@ -124,7 +124,7 @@ in
'';
};
networking.interfaces.vboxnet0.ip4 = [ { address = "192.168.56.1"; prefixLength = 24; } ];
networking.interfaces.vboxnet0.ipv4.addresses = [{ address = "192.168.56.1"; prefixLength = 24; }];
# Make sure NetworkManager won't assume this interface being up
# means we have internet access.
networking.networkmanager.unmanaged = ["vboxnet0"];

View File

@ -22,7 +22,7 @@ in {
config = {
system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix {
name = "nixos-ova-${config.system.nixosLabel}-${pkgs.stdenv.system}";
name = "nixos-ova-${config.system.nixos.label}-${pkgs.stdenv.system}";
inherit pkgs lib config;
partitionTableType = "legacy";
@ -37,7 +37,7 @@ in {
VBoxManage internalcommands createrawvmdk -filename disk.vmdk -rawdisk $diskImage
echo "creating VirtualBox VM..."
vmName="NixOS ${config.system.nixosLabel} (${pkgs.stdenv.system})"
vmName="NixOS ${config.system.nixos.label} (${pkgs.stdenv.system})"
VBoxManage createvm --name "$vmName" --register \
--ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"}
VBoxManage modifyvm "$vmName" \
@ -53,7 +53,7 @@ in {
echo "exporting VirtualBox VM..."
mkdir -p $out
fn="$out/nixos-${config.system.nixosLabel}-${pkgs.stdenv.system}.ova"
fn="$out/nixos-${config.system.nixos.label}-${pkgs.stdenv.system}.ova"
VBoxManage export "$vmName" --output "$fn"
rm -v $diskImage

View File

@ -35,8 +35,8 @@ let
versionModule =
{ system.nixosVersionSuffix = versionSuffix;
system.nixosRevision = nixpkgs.rev or nixpkgs.shortRev;
{ system.nixos.versionSuffix = versionSuffix;
system.nixos.revision = nixpkgs.rev or nixpkgs.shortRev;
};

View File

@ -16,7 +16,7 @@ let
miniupnpdConf = nodes: pkgs.writeText "miniupnpd.conf"
''
ext_ifname=eth1
listening_ip=${(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ip4).address}/24
listening_ip=${(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ipv4.addresses).address}/24
allow 1024-65535 192.168.2.0/24 1024-65535
'';
@ -56,7 +56,7 @@ in
{ environment.systemPackages = [ pkgs.transmission ];
virtualisation.vlans = [ 2 ];
networking.defaultGateway =
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ip4).address;
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ipv4.addresses).address;
networking.firewall.enable = false;
};
@ -84,7 +84,7 @@ in
# Create the torrent.
$tracker->succeed("mkdir /tmp/data");
$tracker->succeed("cp ${file} /tmp/data/test.tar.bz2");
$tracker->succeed("transmission-create /tmp/data/test.tar.bz2 -p -t http://${(pkgs.lib.head nodes.tracker.config.networking.interfaces.eth1.ip4).address}:6969/announce -o /tmp/test.torrent");
$tracker->succeed("transmission-create /tmp/data/test.tar.bz2 -p -t http://${(pkgs.lib.head nodes.tracker.config.networking.interfaces.eth1.ipv4.addresses).address}:6969/announce -o /tmp/test.torrent");
$tracker->succeed("chmod 644 /tmp/test.torrent");
# Start the tracker. !!! use a less crappy tracker

View File

@ -12,7 +12,6 @@ let
# the sequence of address assignment less stochastic.
networking.useDHCP = false;
networking.interfaces.eth1.prefixLength = 24;
# CJDNS output is incompatible with the XML log.
systemd.services.cjdns.serviceConfig.StandardOutput = "null";
#networking.firewall.enable = true;
@ -49,7 +48,9 @@ import ./make-test.nix ({ pkgs, ...} : {
{ imports = [ basicConfig ];
networking.interfaces.eth1.ipAddress = "192.168.0.2";
networking.interfaces.eth1.ipv4.addresses = [
{ address = "192.168.0.2"; prefixLength = 24; }
];
services.cjdns =
{ UDPInterface =
@ -76,7 +77,9 @@ import ./make-test.nix ({ pkgs, ...} : {
CJDNS_ADMIN_PASSWORD=FOOBAR
'';
networking.interfaces.eth1.ipAddress = "192.168.0.1";
networking.interfaces.eth1.ipv4.addresses = [
{ address = "192.168.0.1"; prefixLength = 24; }
];
services.cjdns =
{ authorizedPasswords = [ carolPassword ];

View File

@ -26,8 +26,8 @@ import ./make-test.nix ({ pkgs, ...} : {
};
networking.interfaces = {
br0 = {
ip4 = [{ address = hostIp; prefixLength = 24; }];
ip6 = [{ address = hostIp6; prefixLength = 7; }];
ipv4.addresses = [{ address = hostIp; prefixLength = 24; }];
ipv6.addresses = [{ address = hostIp6; prefixLength = 7; }];
};
};

View File

@ -21,11 +21,11 @@ import ./make-test.nix ({ pkgs, ...} : {
};
networking.interfaces = {
br0 = {
ip4 = [{ address = "192.168.0.1"; prefixLength = 24; }];
ip6 = [{ address = "fc00::1"; prefixLength = 7; }];
ipv4.addresses = [{ address = "192.168.0.1"; prefixLength = 24; }];
ipv6.addresses = [{ address = "fc00::1"; prefixLength = 7; }];
};
br1 = {
ip4 = [{ address = "192.168.1.1"; prefixLength = 24; }];
ipv4.addresses = [{ address = "192.168.1.1"; prefixLength = 24; }];
};
};

View File

@ -13,9 +13,9 @@ import ./make-test.nix ({ pkgs, ...} : {
virtualisation.vlans = [];
networking.bridges.br0.interfaces = [];
networking.interfaces.br0 = {
ip4 = [ { address = "10.11.0.254"; prefixLength = 24; } ];
};
networking.interfaces.br0.ipv4.addresses = [
{ address = "10.11.0.254"; prefixLength = 24; }
];
# Force /etc/hosts to be the only source for host name resolution
environment.etc."nsswitch.conf".text = lib.mkForce ''

View File

@ -26,9 +26,9 @@ import ./make-test.nix ({ pkgs, ...} : {
interface = "eth1";
mode = "bridge";
};
networking.interfaces.eth1.ip4 = lib.mkForce [];
networking.interfaces.eth1.ipv4.addresses = lib.mkForce [];
networking.interfaces.mv-eth1-host = {
ip4 = [ { address = "192.168.1.1"; prefixLength = 24; } ];
ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ];
};
containers.test1 = {
@ -37,7 +37,7 @@ import ./make-test.nix ({ pkgs, ...} : {
config = {
networking.interfaces.mv-eth1 = {
ip4 = [ { address = containerIp1; prefixLength = 24; } ];
ipv4.addresses = [ { address = containerIp1; prefixLength = 24; } ];
};
};
};
@ -48,7 +48,7 @@ import ./make-test.nix ({ pkgs, ...} : {
config = {
networking.interfaces.mv-eth1 = {
ip4 = [ { address = containerIp2; prefixLength = 24; } ];
ipv4.addresses = [ { address = containerIp2; prefixLength = 24; } ];
};
};
};

View File

@ -16,9 +16,9 @@ import ./make-test.nix ({ pkgs, ...} : {
interfaces = [ "eth1" ];
config = {
networking.interfaces.eth1 = {
ip4 = [ { address = "10.10.0.1"; prefixLength = 24; } ];
};
networking.interfaces.eth1.ipv4.addresses = [
{ address = "10.10.0.1"; prefixLength = 24; }
];
networking.firewall.enable = false;
};
};
@ -33,9 +33,9 @@ import ./make-test.nix ({ pkgs, ...} : {
config = {
networking.bridges.br0.interfaces = [ "eth1" ];
networking.interfaces.br0 = {
ip4 = [ { address = "10.10.0.2"; prefixLength = 24; } ];
};
networking.interfaces.br0.ipv4.addresses = [
{ address = "10.10.0.2"; prefixLength = 24; }
];
networking.firewall.enable = false;
};
};
@ -54,9 +54,9 @@ import ./make-test.nix ({ pkgs, ...} : {
interfaces = [ "eth1" ];
mode = "active-backup";
};
networking.interfaces.bond0 = {
ip4 = [ { address = "10.10.0.3"; prefixLength = 24; } ];
};
networking.interfaces.bond0.ipv4.addresses = [
{ address = "10.10.0.3"; prefixLength = 24; }
];
networking.firewall.enable = false;
};
};
@ -76,9 +76,9 @@ import ./make-test.nix ({ pkgs, ...} : {
mode = "active-backup";
};
networking.bridges.br0.interfaces = [ "bond0" ];
networking.interfaces.br0 = {
ip4 = [ { address = "10.10.0.4"; prefixLength = 24; } ];
};
networking.interfaces.br0.ipv4.addresses = [
{ address = "10.10.0.4"; prefixLength = 24; }
];
networking.firewall.enable = false;
};
};

View File

@ -11,7 +11,7 @@ let
# prevent make-test.nix to change IP
networking.interfaces = {
eth1.ip4 = lib.mkOverride 0 [ ];
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
};
};
in {

View File

@ -11,7 +11,7 @@ let
config = {
networking.firewall.enable = false;
networking.firewall.allowPing = true;
networking.interfaces.eth0.ip4 = [
networking.interfaces.eth0.ipv4.addresses = [
{ address = "192.168.1.122"; prefixLength = 24; }
];
};
@ -33,8 +33,8 @@ in import ./make-test.nix ({ pkgs, lib, ...} :
rstp = false;
};
networking.interfaces = {
eth1.ip4 = lib.mkOverride 0 [ ];
br0.ip4 = [{ address = "192.168.1.1"; prefixLength = 24; }];
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
br0.ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ];
};
};
@ -44,8 +44,8 @@ in import ./make-test.nix ({ pkgs, lib, ...} :
rstp = false;
};
networking.interfaces = {
eth1.ip4 = lib.mkOverride 0 [ ];
br0.ip4 = [{ address = "192.168.1.2"; prefixLength = 24; }];
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
br0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
};
};
client_eth1_rstp = { lib, pkgs, ... }: client_base // {
@ -54,8 +54,8 @@ in import ./make-test.nix ({ pkgs, lib, ...} :
rstp = true;
};
networking.interfaces = {
eth1.ip4 = lib.mkOverride 0 [ ];
br0.ip4 = [{ address = "192.168.1.2"; prefixLength = 24; }];
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
br0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
};
};
};

View File

@ -11,8 +11,8 @@ import ./make-test.nix ({ pkgs, ...} : {
with pkgs.lib;
{
networking = {
interfaces.eth1.ip6 = mkOverride 0 [ { address = "fd00::2"; prefixLength = 64; } ];
interfaces.eth1.ip4 = mkOverride 0 [ { address = "192.168.1.2"; prefixLength = 24; } ];
interfaces.eth1.ipv6.addresses = mkOverride 0 [ { address = "fd00::2"; prefixLength = 64; } ];
interfaces.eth1.ipv4.addresses = mkOverride 0 [ { address = "192.168.1.2"; prefixLength = 24; } ];
};
};
server =
@ -20,8 +20,8 @@ import ./make-test.nix ({ pkgs, ...} : {
with pkgs.lib;
{
networking = {
interfaces.eth1.ip6 = mkOverride 0 [ { address = "fd00::1"; prefixLength = 64; } ];
interfaces.eth1.ip4 = mkOverride 0 [ { address = "192.168.1.1"; prefixLength = 24; } ];
interfaces.eth1.ipv6.addresses = mkOverride 0 [ { address = "fd00::1"; prefixLength = 64; } ];
interfaces.eth1.ipv4.addresses = mkOverride 0 [ { address = "192.168.1.1"; prefixLength = 24; } ];
};
services = {

View File

@ -11,9 +11,7 @@ import ../make-test.nix ({ pkgs, lib, ... }:
{ config, pkgs, ... }:
{
boot.kernelParams = [
"ip=${
(head config.networking.interfaces.eth1.ip4).address
}:::255.255.255.0::eth1:none"
"ip=${config.networking.primaryIPAddress}:::255.255.255.0::eth1:none"
];
boot.initrd.network = {
enable = true;

View File

@ -35,7 +35,7 @@ import ./make-test.nix ({ pkgs, lib, withFirewall, withConntrackHelpers ? false,
{ virtualisation.vlans = [ 1 ];
networking.firewall.allowPing = true;
networking.defaultGateway =
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ip4).address;
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ipv4.addresses).address;
}
(lib.optionalAttrs withConntrackHelpers {
networking.firewall.connectionTrackingModules = [ "ftp" ];

View File

@ -21,10 +21,8 @@ let
firewall.allowedUDPPorts = [ 547 ];
interfaces = mkOverride 0 (listToAttrs (flip map vlanIfs (n:
nameValuePair "eth${toString n}" {
ipAddress = "192.168.${toString n}.1";
prefixLength = 24;
ipv6Address = "fd00:1234:5678:${toString n}::1";
ipv6PrefixLength = 64;
ipv4.addresses = [ { address = "192.168.${toString n}.1"; prefixLength = 24; } ];
ipv6.addresses = [ { address = "fd00:1234:5678:${toString n}::1"; prefixLength = 64; } ];
})));
};
services.dhcpd4 = {
@ -90,12 +88,12 @@ let
firewall.allowPing = true;
useDHCP = false;
defaultGateway = "192.168.1.1";
interfaces.eth1.ip4 = mkOverride 0 [
interfaces.eth1.ipv4.addresses = mkOverride 0 [
{ address = "192.168.1.2"; prefixLength = 24; }
{ address = "192.168.1.3"; prefixLength = 32; }
{ address = "192.168.1.10"; prefixLength = 32; }
];
interfaces.eth2.ip4 = mkOverride 0 [
interfaces.eth2.ipv4.addresses = mkOverride 0 [
{ address = "192.168.2.2"; prefixLength = 24; }
];
};
@ -143,12 +141,12 @@ let
firewall.allowPing = true;
useDHCP = true;
interfaces.eth1 = {
ip4 = mkOverride 0 [ ];
ip6 = mkOverride 0 [ ];
ipv4.addresses = mkOverride 0 [ ];
ipv6.addresses = mkOverride 0 [ ];
};
interfaces.eth2 = {
ip4 = mkOverride 0 [ ];
ip6 = mkOverride 0 [ ];
ipv4.addresses = mkOverride 0 [ ];
ipv6.addresses = mkOverride 0 [ ];
};
};
};
@ -198,10 +196,10 @@ let
firewall.allowPing = true;
useDHCP = false;
interfaces.eth1 = {
ip4 = mkOverride 0 [ ];
ipv4.addresses = mkOverride 0 [ ];
useDHCP = true;
};
interfaces.eth2.ip4 = mkOverride 0 [ ];
interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
};
};
testScript = { nodes, ... }:
@ -241,9 +239,9 @@ let
interfaces = [ "eth1" "eth2" ];
driverOptions.mode = "balance-rr";
};
interfaces.eth1.ip4 = mkOverride 0 [ ];
interfaces.eth2.ip4 = mkOverride 0 [ ];
interfaces.bond.ip4 = mkOverride 0
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
interfaces.bond.ipv4.addresses = mkOverride 0
[ { inherit address; prefixLength = 30; } ];
};
};
@ -274,7 +272,7 @@ let
useNetworkd = networkd;
firewall.allowPing = true;
useDHCP = false;
interfaces.eth1.ip4 = mkOverride 0
interfaces.eth1.ipv4.addresses = mkOverride 0
[ { inherit address; prefixLength = 24; } ];
};
};
@ -289,9 +287,9 @@ let
firewall.allowPing = true;
useDHCP = false;
bridges.bridge.interfaces = [ "eth1" "eth2" ];
interfaces.eth1.ip4 = mkOverride 0 [ ];
interfaces.eth2.ip4 = mkOverride 0 [ ];
interfaces.bridge.ip4 = mkOverride 0
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
interfaces.bridge.ipv4.addresses = mkOverride 0
[ { address = "192.168.1.1"; prefixLength = 24; } ];
};
};
@ -328,7 +326,7 @@ let
firewall.allowPing = true;
useDHCP = true;
macvlans.macvlan.interface = "eth1";
interfaces.eth1.ip4 = mkOverride 0 [ ];
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
};
};
testScript = { nodes, ... }:
@ -369,9 +367,9 @@ let
local = address4;
dev = "eth1";
};
interfaces.eth1.ip4 = mkOverride 0
interfaces.eth1.ipv4.addresses = mkOverride 0
[ { address = address4; prefixLength = 24; } ];
interfaces.sit.ip6 = mkOverride 0
interfaces.sit.ipv6.addresses = mkOverride 0
[ { address = address6; prefixLength = 64; } ];
};
};
@ -410,9 +408,9 @@ let
id = 1;
interface = "eth0";
};
interfaces.eth0.ip4 = mkOverride 0 [ ];
interfaces.eth1.ip4 = mkOverride 0 [ ];
interfaces.vlan.ip4 = mkOverride 0
interfaces.eth0.ipv4.addresses = mkOverride 0 [ ];
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
interfaces.vlan.ipv4.addresses = mkOverride 0
[ { inherit address; prefixLength = 24; } ];
};
};
@ -437,13 +435,13 @@ let
name = "Virtual";
machine = {
networking.interfaces."tap0" = {
ip4 = [ { address = "192.168.1.1"; prefixLength = 24; } ];
ip6 = [ { address = "2001:1470:fffd:2096::"; prefixLength = 64; } ];
ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ];
ipv6.addresses = [ { address = "2001:1470:fffd:2096::"; prefixLength = 64; } ];
virtual = true;
};
networking.interfaces."tun0" = {
ip4 = [ { address = "192.168.1.2"; prefixLength = 24; } ];
ip6 = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
ipv6.addresses = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
virtual = true;
};
};
@ -483,9 +481,9 @@ let
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = true;
networking = {
useNetworkd = networkd;
interfaces.eth1 = {
ipv6Address = "fd00:1234:5678:1::1";
ipv6PrefixLength = 64;
interfaces.eth1.ipv6.addresses = singleton {
address = "fd00:1234:5678:1::1";
prefixLength = 64;
};
};
services.radvd = {
@ -511,8 +509,8 @@ let
useDHCP = true;
interfaces.eth1 = {
preferTempAddress = true;
ip4 = mkOverride 0 [ ];
ip6 = mkOverride 0 [ ];
ipv4.addresses = mkOverride 0 [ ];
ipv6.addresses = mkOverride 0 [ ];
};
};
};
@ -533,6 +531,69 @@ let
$client->waitUntilSucceeds("! ip route get fd00:1234:5678:1::1 | grep -q ':[a-f0-9]*ff:fe[a-f0-9]*:'");
'';
};
routes = {
name = "routes";
machine = {
networking.useDHCP = false;
networking.interfaces."eth0" = {
ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
ipv6.addresses = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
ipv6.routes = [
{ address = "fdfd:b3f0::"; prefixLength = 48; }
{ address = "2001:1470:fffd:2098::"; prefixLength = 64; via = "fdfd:b3f0::1"; }
];
ipv4.routes = [
{ address = "10.0.0.0"; prefixLength = 16; options = { mtu = "1500"; }; }
{ address = "192.168.2.0"; prefixLength = 24; via = "192.168.1.1"; }
];
};
virtualisation.vlans = [ ];
};
testScript = ''
my $targetIPv4Table = <<'END';
10.0.0.0/16 scope link mtu 1500
192.168.1.0/24 proto kernel scope link src 192.168.1.2
192.168.2.0/24 via 192.168.1.1
END
my $targetIPv6Table = <<'END';
2001:1470:fffd:2097::/64 proto kernel metric 256 pref medium
2001:1470:fffd:2098::/64 via fdfd:b3f0::1 metric 1024 pref medium
fdfd:b3f0::/48 metric 1024 pref medium
END
$machine->start;
$machine->waitForUnit("network.target");
# test routing tables
my $ipv4Table = $machine->succeed("ip -4 route list dev eth0 | head -n3");
my $ipv6Table = $machine->succeed("ip -6 route list dev eth0 | head -n3");
"$ipv4Table" eq "$targetIPv4Table" or die(
"The IPv4 routing table does not match the expected one:\n",
"Result:\n", "$ipv4Table\n",
"Expected:\n", "$targetIPv4Table\n"
);
"$ipv6Table" eq "$targetIPv6Table" or die(
"The IPv6 routing table does not match the expected one:\n",
"Result:\n", "$ipv6Table\n",
"Expected:\n", "$targetIPv6Table\n"
);
# test clean-up of the tables
$machine->succeed("systemctl stop network-addresses-eth0");
my $ipv4Residue = $machine->succeed("ip -4 route list dev eth0 | head -n-3");
my $ipv6Residue = $machine->succeed("ip -6 route list dev eth0 | head -n-3");
$ipv4Residue eq "" or die(
"The IPv4 routing table has not been properly cleaned:\n",
"$ipv4Residue\n"
);
$ipv6Residue eq "" or die(
"The IPv6 routing table has not been properly cleaned:\n",
"$ipv6Residue\n"
);
'';
};
};
in mapAttrs (const (attrs: makeTest (attrs // {

View File

@ -15,25 +15,31 @@ in import ./make-test.nix ({ pkgs, ...} : {
clientv4 = { lib, nodes, ... }: {
imports = [ common ];
networking.nameservers = lib.mkForce [
nodes.server.config.networking.interfaces.eth1.ipAddress
(lib.head nodes.server.config.networking.interfaces.eth1.ipv4.addresses).address
];
networking.interfaces.eth1.ipv4.addresses = [
{ address = "192.168.0.2"; prefixLength = 24; }
];
networking.interfaces.eth1.ipAddress = "192.168.0.2";
networking.interfaces.eth1.prefixLength = 24;
};
clientv6 = { lib, nodes, ... }: {
imports = [ common ];
networking.nameservers = lib.mkForce [
nodes.server.config.networking.interfaces.eth1.ipv6Address
(lib.head nodes.server.config.networking.interfaces.eth1.ipv6.addresses).address
];
networking.interfaces.eth1.ipv4.addresses = [
{ address = "dead:beef::2"; prefixLength = 24; }
];
networking.interfaces.eth1.ipv6Address = "dead:beef::2";
};
server = { lib, ... }: {
imports = [ common ];
networking.interfaces.eth1.ipAddress = "192.168.0.1";
networking.interfaces.eth1.prefixLength = 24;
networking.interfaces.eth1.ipv6Address = "dead:beef::1";
networking.interfaces.eth1.ipv4.addresses = [
{ address = "192.168.0.1"; prefixLength = 24; }
];
networking.interfaces.eth1.ipv6.addresses = [
{ address = "dead:beef::1"; prefixLength = 64; }
];
services.nsd.enable = true;
services.nsd.interfaces = lib.mkForce [];
services.nsd.zones."example.com.".data = ''

View File

@ -8,7 +8,7 @@
import ./make-test.nix ({ pkgs, ... }:
let
ifAddr = node: iface: (pkgs.lib.head node.config.networking.interfaces.${iface}.ip4).address;
ifAddr = node: iface: (pkgs.lib.head node.config.networking.interfaces.${iface}.ipv4.addresses).address;
ospfConf = ''
interface eth2

View File

@ -0,0 +1,45 @@
{ stdenv, fetchurl, cmake, qt5, zlib, taglib, pkgconfig, pcre, gst_all_1 }:
let
version = "1.0.0-git5-20180115";
in
stdenv.mkDerivation {
name = "sayonara-player-${version}";
src = fetchurl {
url = "https://sayonara-player.com/sw/sayonara-player-${version}.tar.gz";
sha256 = "1fl7zplnrrvbv1xm4g348bpd46jj39jvbm808hyjjq92i64wqg37";
};
nativeBuildInputs = [ cmake pkgconfig ];
buildInputs = with qt5; with gst_all_1;
[ gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly
pcre qtbase qttools taglib zlib
];
# CMake Error at src/GUI/Resources/Icons/cmake_install.cmake:49 (file):
# file cannot create directory: /usr/share/icons. Maybe need administrative
# privileges.
# Call Stack (most recent call first):
# src/GUI/Resources/cmake_install.cmake:50 (include)
# src/GUI/cmake_install.cmake:50 (include)
# src/cmake_install.cmake:59 (include)
# cmake_install.cmake:42 (include)
postPatch = ''
substituteInPlace src/GUI/Resources/Icons/CMakeLists.txt \
--replace "/usr/share" "$out/share"
'';
# [ 65%] Building CXX object src/Components/Engine/CMakeFiles/say_comp_engine.dir/AbstractPipeline.cpp.o
# /tmp/nix-build-sayonara-player-1.0.0-git5-20180115.drv-0/sayonara-player/src/Components/Engine/AbstractPipeline.cpp:28:32: fatal error: gst/app/gstappsink.h: No such file or directory
# #include <gst/app/gstappsink.h>
NIX_CFLAGS_COMPILE = "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0";
meta = with stdenv.lib;
{ description = "Sayonara music player";
homepage = https://sayonara-player.com/;
license = licenses.gpl3;
platforms = qt5.qtbase.meta.platforms;
maintainers = [ maintainers.deepfire ];
};
}

View File

@ -1,7 +0,0 @@
source 'https://rubygems.org'
gem 'jekyll'
gem 'jekyll-feed'
gem 'jekyll-paginate'
gem 'rdiscount'
gem 'RedCloth'
gem 'minima'

View File

@ -1,59 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
RedCloth (4.3.2)
addressable (2.5.0)
public_suffix (~> 2.0, >= 2.0.2)
colorator (1.1.0)
ffi (1.9.18)
forwardable-extended (2.6.0)
jekyll (3.4.1)
addressable (~> 2.4)
colorator (~> 1.0)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1)
kramdown (~> 1.3)
liquid (~> 3.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (~> 1.7)
safe_yaml (~> 1.0)
jekyll-feed (0.9.1)
jekyll (~> 3.3)
jekyll-paginate (1.1.0)
jekyll-sass-converter (1.5.0)
sass (~> 3.4)
jekyll-watch (1.5.0)
listen (~> 3.0, < 3.1)
kramdown (1.13.2)
liquid (3.0.6)
listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
mercenary (0.3.6)
minima (2.1.0)
jekyll (~> 3.3)
pathutil (0.14.0)
forwardable-extended (~> 2.6)
public_suffix (2.0.5)
rb-fsevent (0.9.8)
rb-inotify (0.9.8)
ffi (>= 0.5.0)
rdiscount (2.2.0.1)
rouge (1.11.1)
safe_yaml (1.0.4)
sass (3.4.23)
PLATFORMS
ruby
DEPENDENCIES
RedCloth
jekyll
jekyll-feed
jekyll-paginate
minima
rdiscount
BUNDLED WITH
1.14.4

View File

@ -0,0 +1,10 @@
source "https://rubygems.org"
gem "jekyll"
# jekyll alone might be enough for most use-cases
gem "rouge"
gem "activesupport", "~> 4.2"
gem "jekyll-avatar"
gem "jekyll-mentions"
gem "jekyll-seo-tag"
gem "jekyll-sitemap"
gem "jemoji"

View File

@ -0,0 +1,101 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (4.2.10)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
colorator (1.1.0)
concurrent-ruby (1.0.5)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.5)
ffi (1.9.21)
forwardable-extended (2.6.0)
gemoji (3.0.0)
html-pipeline (2.7.1)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.6.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jekyll (3.7.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (~> 1.14)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-avatar (0.5.0)
jekyll (~> 3.0)
jekyll-mentions (1.2.0)
activesupport (~> 4.0)
html-pipeline (~> 2.3)
jekyll (~> 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.4.0)
jekyll (~> 3.3)
jekyll-sitemap (1.2.0)
jekyll (~> 3.3)
jekyll-watch (2.0.0)
listen (~> 3.0)
jemoji (0.9.0)
activesupport (~> 4.0, >= 4.2.9)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (~> 3.0)
kramdown (1.16.2)
liquid (4.0.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
mercenary (0.3.6)
mini_portile2 (2.3.0)
minitest (5.11.3)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
pathutil (0.16.1)
forwardable-extended (~> 2.6)
public_suffix (3.0.2)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rouge (3.1.1)
ruby_dep (1.5.0)
safe_yaml (1.0.4)
sass (3.5.5)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
thread_safe (0.3.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
PLATFORMS
ruby
DEPENDENCIES
activesupport (~> 4.2)
jekyll
jekyll-avatar
jekyll-mentions
jekyll-seo-tag
jekyll-sitemap
jemoji
rouge
BUNDLED WITH
1.14.6

View File

@ -0,0 +1,326 @@
{
activesupport = {
dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0s12j8vl8vrxfngkdlz9g8bpz9akq1z42d57mx5r537b2pji8nr7";
type = "gem";
};
version = "4.2.10";
};
addressable = {
dependencies = ["public_suffix"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
type = "gem";
};
version = "2.5.2";
};
colorator = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
type = "gem";
};
version = "1.1.0";
};
concurrent-ruby = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
type = "gem";
};
version = "1.0.5";
};
em-websocket = {
dependencies = ["eventmachine" "http_parser.rb"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
type = "gem";
};
version = "0.5.1";
};
eventmachine = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
type = "gem";
};
version = "1.2.5";
};
ffi = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0c2dl10pi6a30kcvx2s6p2v1wb4kbm48iv38kmz2ff600nirhpb8";
type = "gem";
};
version = "1.9.21";
};
forwardable-extended = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
type = "gem";
};
version = "2.6.0";
};
gemoji = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1h85qpn2xbmsn8ssf2fqzlqg181j000m5z4l3g26r7vblncg162d";
type = "gem";
};
version = "3.0.0";
};
html-pipeline = {
dependencies = ["activesupport" "nokogiri"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0hkx70z9ijgnncmrna9qdh9ajn9m7v146k91j257lrzyq2f6jdjd";
type = "gem";
};
version = "2.7.1";
};
"http_parser.rb" = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
type = "gem";
};
version = "0.6.0";
};
i18n = {
dependencies = ["concurrent-ruby"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
type = "gem";
};
version = "0.9.5";
};
jekyll = {
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05f61rqwz1isci7by34zyz38ah2rv5b8i5h618cxcl97hwqps8n2";
type = "gem";
};
version = "3.7.2";
};
jekyll-avatar = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0y2w7pnahkm3ddxrq589wv1w53ay7p1pvfs6khcmh6wq85r6wpsf";
type = "gem";
};
version = "0.5.0";
};
jekyll-mentions = {
dependencies = ["activesupport" "html-pipeline" "jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00nqm1ng4iiibmv4vx0ayzq7fqm2sm1af98r4ykvld6asqj5qkyd";
type = "gem";
};
version = "1.2.0";
};
jekyll-sass-converter = {
dependencies = ["sass"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "008ikh5fk0n6ri54mylcl8jn0mq8p2nfyfqif2q3pp0lwilkcxsk";
type = "gem";
};
version = "1.5.2";
};
jekyll-seo-tag = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f9b2mvmx57zj49afb3x8cmzdmb1kh4rbpbv3v7w5bh47g2c9big";
type = "gem";
};
version = "2.4.0";
};
jekyll-sitemap = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xy93ysl1q8r4xhbnffycvsslja0dskh2z2pl1jnykwsy27dc89n";
type = "gem";
};
version = "1.2.0";
};
jekyll-watch = {
dependencies = ["listen"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
type = "gem";
};
version = "2.0.0";
};
jemoji = {
dependencies = ["activesupport" "gemoji" "html-pipeline" "jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0acmi7mgr844dmzgfi9flcqkkb0jh5l21h579cidxwf1409w588b";
type = "gem";
};
version = "0.9.0";
};
kramdown = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0mkrqpp01rrfn3rx6wwsjizyqmafp0vgg8ja1dvbjs185r5zw3za";
type = "gem";
};
version = "1.16.2";
};
liquid = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
type = "gem";
};
version = "4.0.0";
};
listen = {
dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
type = "gem";
};
version = "3.1.5";
};
mercenary = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
type = "gem";
};
version = "0.3.6";
};
mini_portile2 = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
type = "gem";
};
version = "2.3.0";
};
minitest = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
type = "gem";
};
version = "5.11.3";
};
nokogiri = {
dependencies = ["mini_portile2"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05fm3xh462glvs0rwnfmc1spmgl4ljg2giifynbmwwqvl42zaaiq";
type = "gem";
};
version = "1.8.2";
};
pathutil = {
dependencies = ["forwardable-extended"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
type = "gem";
};
version = "0.16.1";
};
public_suffix = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1x5h1dh1i3gwc01jbg01rly2g6a1qwhynb1s8a30ic507z1nh09s";
type = "gem";
};
version = "3.0.2";
};
rb-fsevent = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fbpmjypwxkb8r7y1kmhmyp6gawa4byw0yb3jc3dn9ly4ld9lizf";
type = "gem";
};
version = "0.10.2";
};
rb-inotify = {
dependencies = ["ffi"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
type = "gem";
};
version = "0.9.10";
};
rouge = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1sfhy0xxqjnzqa7qxmpz1bmy0mzcr55qyvi410gsb6d6i4ialbw3";
type = "gem";
};
version = "3.1.1";
};
ruby_dep = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
type = "gem";
};
version = "1.5.0";
};
safe_yaml = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
type = "gem";
};
version = "1.0.4";
};
sass = {
dependencies = ["sass-listen"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10401m2xlv6vaxfwzy4xxmk51ddcnkvwi918cw3jkki0qqdl7d8v";
type = "gem";
};
version = "3.5.5";
};
sass-listen = {
dependencies = ["rb-fsevent" "rb-inotify"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
type = "gem";
};
version = "4.0.0";
};
thread_safe = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
type = "gem";
};
version = "0.3.6";
};
tzinfo = {
dependencies = ["thread_safe"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
type = "gem";
};
version = "1.2.5";
};
}

View File

@ -1,19 +1,34 @@
{ stdenv, lib, bundlerEnv, ruby }:
{ lib, bundlerEnv, ruby
, withOptionalDependencies ? false
}:
bundlerEnv rec {
name = "jekyll-${version}";
name = pname + "-" + version;
pname = "jekyll";
version = (import
(if withOptionalDependencies
then ./full/gemset.nix
else ./basic/gemset.nix))
.jekyll.version;
version = (import gemset).jekyll.version;
inherit ruby;
gemfile = ./Gemfile;
lockfile = ./Gemfile.lock;
gemset = ./gemset.nix;
gemdir = if withOptionalDependencies
then ./full
else ./basic;
meta = with lib; {
description = "Simple, blog aware, static site generator";
homepage = https://jekyllrb.com/;
description = "A blog-aware, static site generator, written in Ruby";
longDescription = ''
Jekyll is a simple, blog-aware, static site generator, written in Ruby.
Think of it like a file-based CMS, without all the complexity. Jekyll
takes your content, renders Markdown and Liquid templates, and spits out a
complete, static website ready to be served by Apache, Nginx or another
web server. Jekyll is the engine behind GitHub Pages, which you can use to
host sites right from your GitHub repositories.
'';
homepage = https://jekyllrb.com/;
license = licenses.mit;
maintainers = with maintainers; [ pesterhazy ];
maintainers = with maintainers; [ primeos pesterhazy ];
platforms = platforms.unix;
};
}

View File

@ -0,0 +1,30 @@
source "https://rubygems.org"
gem "jekyll"
gem "rouge"
gem "activesupport", "~> 4.2"
gem "jekyll-avatar"
gem "jekyll-mentions"
gem "jekyll-seo-tag"
gem "jekyll-sitemap"
gem "jemoji"
# Optional dependencies:
gem "coderay", "~> 1.1.0"
gem "jekyll-coffeescript"
gem "jekyll-docs"
gem "jekyll-feed", "~> 0.9"
gem "jekyll-gist"
gem "jekyll-paginate"
gem "jekyll-redirect-from"
gem "kramdown", "~> 1.14"
gem "mime-types", "~> 3.0"
gem "rdoc", RUBY_VERSION >= "2.2.2" ? "~> 6.0" : "~> 5.1"
gem "tomlrb", "~> 1.2"
platform :ruby, :mswin, :mingw, :x64_mingw do
gem "classifier-reborn", "~> 2.2.0"
gem "liquid-c", "~> 3.0"
gem "pygments.rb", "~> 1.0"
gem "rdiscount", "~> 2.0"
gem "redcarpet", "~> 3.2", ">= 3.2.3"
gem "yajl-ruby", "~> 1.3.1"
end

View File

@ -0,0 +1,160 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (4.2.10)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
classifier-reborn (2.2.0)
fast-stemmer (~> 1.0)
coderay (1.1.2)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.11.1)
colorator (1.1.0)
concurrent-ruby (1.0.5)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.5)
execjs (2.7.0)
faraday (0.14.0)
multipart-post (>= 1.2, < 3)
fast-stemmer (1.0.2)
ffi (1.9.21)
forwardable-extended (2.6.0)
gemoji (3.0.0)
html-pipeline (2.7.1)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.6.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jekyll (3.7.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (~> 1.14)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-avatar (0.5.0)
jekyll (~> 3.0)
jekyll-coffeescript (1.1.1)
coffee-script (~> 2.2)
coffee-script-source (~> 1.11.1)
jekyll-docs (3.7.2)
jekyll (= 3.7.2)
jekyll-feed (0.9.3)
jekyll (~> 3.3)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-mentions (1.2.0)
activesupport (~> 4.0)
html-pipeline (~> 2.3)
jekyll (~> 3.0)
jekyll-paginate (1.1.0)
jekyll-redirect-from (0.13.0)
jekyll (~> 3.3)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.4.0)
jekyll (~> 3.3)
jekyll-sitemap (1.2.0)
jekyll (~> 3.3)
jekyll-watch (2.0.0)
listen (~> 3.0)
jemoji (0.9.0)
activesupport (~> 4.0, >= 4.2.9)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (~> 3.0)
kramdown (1.16.2)
liquid (4.0.0)
liquid-c (3.0.0)
liquid (>= 3.0.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
mercenary (0.3.6)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_portile2 (2.3.0)
minitest (5.11.3)
multi_json (1.13.1)
multipart-post (2.0.0)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
octokit (4.8.0)
sawyer (~> 0.8.0, >= 0.5.3)
pathutil (0.16.1)
forwardable-extended (~> 2.6)
public_suffix (3.0.2)
pygments.rb (1.2.1)
multi_json (>= 1.0.0)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rdiscount (2.2.0.1)
rdoc (6.0.1)
redcarpet (3.4.0)
rouge (3.1.1)
ruby_dep (1.5.0)
safe_yaml (1.0.4)
sass (3.5.5)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sawyer (0.8.1)
addressable (>= 2.3.5, < 2.6)
faraday (~> 0.8, < 1.0)
thread_safe (0.3.6)
tomlrb (1.2.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
yajl-ruby (1.3.1)
PLATFORMS
ruby
DEPENDENCIES
activesupport (~> 4.2)
classifier-reborn (~> 2.2.0)
coderay (~> 1.1.0)
jekyll
jekyll-avatar
jekyll-coffeescript
jekyll-docs
jekyll-feed (~> 0.9)
jekyll-gist
jekyll-mentions
jekyll-paginate
jekyll-redirect-from
jekyll-seo-tag
jekyll-sitemap
jemoji
kramdown (~> 1.14)
liquid-c (~> 3.0)
mime-types (~> 3.0)
pygments.rb (~> 1.0)
rdiscount (~> 2.0)
rdoc (~> 6.0)
redcarpet (~> 3.2, >= 3.2.3)
rouge
tomlrb (~> 1.2)
yajl-ruby (~> 1.3.1)
BUNDLED WITH
1.14.6

View File

@ -0,0 +1,547 @@
{
activesupport = {
dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0s12j8vl8vrxfngkdlz9g8bpz9akq1z42d57mx5r537b2pji8nr7";
type = "gem";
};
version = "4.2.10";
};
addressable = {
dependencies = ["public_suffix"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
type = "gem";
};
version = "2.5.2";
};
classifier-reborn = {
dependencies = ["fast-stemmer"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "04nxmm5b7j7r0ij9pcpdr7xqpig559gfzrw042ycxcfyav2pv6ij";
type = "gem";
};
version = "2.2.0";
};
coderay = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
type = "gem";
};
version = "1.1.2";
};
coffee-script = {
dependencies = ["coffee-script-source" "execjs"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
type = "gem";
};
version = "2.4.1";
};
coffee-script-source = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xfshhlz808f8639wc88wgls1mww35sid8rd55vn0a4yqajf4vh9";
type = "gem";
};
version = "1.11.1";
};
colorator = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
type = "gem";
};
version = "1.1.0";
};
concurrent-ruby = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
type = "gem";
};
version = "1.0.5";
};
em-websocket = {
dependencies = ["eventmachine" "http_parser.rb"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
type = "gem";
};
version = "0.5.1";
};
eventmachine = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
type = "gem";
};
version = "1.2.5";
};
execjs = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
type = "gem";
};
version = "2.7.0";
};
faraday = {
dependencies = ["multipart-post"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1c3x3s8vb5nf7inyfvhdxwa4q3swmnacpxby6pish5fgmhws7zrr";
type = "gem";
};
version = "0.14.0";
};
fast-stemmer = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh";
type = "gem";
};
version = "1.0.2";
};
ffi = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0c2dl10pi6a30kcvx2s6p2v1wb4kbm48iv38kmz2ff600nirhpb8";
type = "gem";
};
version = "1.9.21";
};
forwardable-extended = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
type = "gem";
};
version = "2.6.0";
};
gemoji = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1h85qpn2xbmsn8ssf2fqzlqg181j000m5z4l3g26r7vblncg162d";
type = "gem";
};
version = "3.0.0";
};
html-pipeline = {
dependencies = ["activesupport" "nokogiri"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0hkx70z9ijgnncmrna9qdh9ajn9m7v146k91j257lrzyq2f6jdjd";
type = "gem";
};
version = "2.7.1";
};
"http_parser.rb" = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
type = "gem";
};
version = "0.6.0";
};
i18n = {
dependencies = ["concurrent-ruby"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
type = "gem";
};
version = "0.9.5";
};
jekyll = {
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05f61rqwz1isci7by34zyz38ah2rv5b8i5h618cxcl97hwqps8n2";
type = "gem";
};
version = "3.7.2";
};
jekyll-avatar = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0y2w7pnahkm3ddxrq589wv1w53ay7p1pvfs6khcmh6wq85r6wpsf";
type = "gem";
};
version = "0.5.0";
};
jekyll-coffeescript = {
dependencies = ["coffee-script" "coffee-script-source"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "06qf4j9f6ysjb4bq6gsdaiz2ksmhc5yb484v458ra3s6ybccqvvy";
type = "gem";
};
version = "1.1.1";
};
jekyll-docs = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0dw8pvxr0q02rivc0n0v4w6151zi6s212xwl27iam6pjc8skbg9b";
type = "gem";
};
version = "3.7.2";
};
jekyll-feed = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0kr3kyaq4z3jixn6ay8h16bxxlv6slvvp7nqnl05jdymhkl0bmm9";
type = "gem";
};
version = "0.9.3";
};
jekyll-gist = {
dependencies = ["octokit"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "03wz9j6yq3552nzf4g71qrdm9pfdgbm68abml9sjjgiaan1n8ns9";
type = "gem";
};
version = "1.5.0";
};
jekyll-mentions = {
dependencies = ["activesupport" "html-pipeline" "jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00nqm1ng4iiibmv4vx0ayzq7fqm2sm1af98r4ykvld6asqj5qkyd";
type = "gem";
};
version = "1.2.0";
};
jekyll-paginate = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
type = "gem";
};
version = "1.1.0";
};
jekyll-redirect-from = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1crm5xqgv5asbbbaxfgky4ppib5rih59yzpa3yc94gh8b9cjixrj";
type = "gem";
};
version = "0.13.0";
};
jekyll-sass-converter = {
dependencies = ["sass"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "008ikh5fk0n6ri54mylcl8jn0mq8p2nfyfqif2q3pp0lwilkcxsk";
type = "gem";
};
version = "1.5.2";
};
jekyll-seo-tag = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f9b2mvmx57zj49afb3x8cmzdmb1kh4rbpbv3v7w5bh47g2c9big";
type = "gem";
};
version = "2.4.0";
};
jekyll-sitemap = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xy93ysl1q8r4xhbnffycvsslja0dskh2z2pl1jnykwsy27dc89n";
type = "gem";
};
version = "1.2.0";
};
jekyll-watch = {
dependencies = ["listen"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
type = "gem";
};
version = "2.0.0";
};
jemoji = {
dependencies = ["activesupport" "gemoji" "html-pipeline" "jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0acmi7mgr844dmzgfi9flcqkkb0jh5l21h579cidxwf1409w588b";
type = "gem";
};
version = "0.9.0";
};
kramdown = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0mkrqpp01rrfn3rx6wwsjizyqmafp0vgg8ja1dvbjs185r5zw3za";
type = "gem";
};
version = "1.16.2";
};
liquid = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
type = "gem";
};
version = "4.0.0";
};
liquid-c = {
dependencies = ["liquid"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0a5n7q314ma32y7v9a1g6ps60b14zfn2q4nip4j5aknblz51v7gi";
type = "gem";
};
version = "3.0.0";
};
listen = {
dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
type = "gem";
};
version = "3.1.5";
};
mercenary = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
type = "gem";
};
version = "0.3.6";
};
mime-types = {
dependencies = ["mime-types-data"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m";
type = "gem";
};
version = "3.1";
};
mime-types-data = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm";
type = "gem";
};
version = "3.2016.0521";
};
mini_portile2 = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
type = "gem";
};
version = "2.3.0";
};
minitest = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
type = "gem";
};
version = "5.11.3";
};
multi_json = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
type = "gem";
};
version = "1.13.1";
};
multipart-post = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
type = "gem";
};
version = "2.0.0";
};
nokogiri = {
dependencies = ["mini_portile2"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05fm3xh462glvs0rwnfmc1spmgl4ljg2giifynbmwwqvl42zaaiq";
type = "gem";
};
version = "1.8.2";
};
octokit = {
dependencies = ["sawyer"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hp77svmpxcwnfajb324i1g2b7jazg23fn4ccjr5y3lww0rnj1dg";
type = "gem";
};
version = "4.8.0";
};
pathutil = {
dependencies = ["forwardable-extended"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
type = "gem";
};
version = "0.16.1";
};
public_suffix = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1x5h1dh1i3gwc01jbg01rly2g6a1qwhynb1s8a30ic507z1nh09s";
type = "gem";
};
version = "3.0.2";
};
"pygments.rb" = {
dependencies = ["multi_json"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lbvnwvz770ambm4d6lxgc2097rydn5rcc5d6986bnkzyxfqqjnv";
type = "gem";
};
version = "1.2.1";
};
rb-fsevent = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fbpmjypwxkb8r7y1kmhmyp6gawa4byw0yb3jc3dn9ly4ld9lizf";
type = "gem";
};
version = "0.10.2";
};
rb-inotify = {
dependencies = ["ffi"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
type = "gem";
};
version = "0.9.10";
};
rdiscount = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
type = "gem";
};
version = "2.2.0.1";
};
rdoc = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vzhv04lp76iax258dh47zsxhjg34r9sg76vgikbyfywjzflvfyj";
type = "gem";
};
version = "6.0.1";
};
redcarpet = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7";
type = "gem";
};
version = "3.4.0";
};
rouge = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1sfhy0xxqjnzqa7qxmpz1bmy0mzcr55qyvi410gsb6d6i4ialbw3";
type = "gem";
};
version = "3.1.1";
};
ruby_dep = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
type = "gem";
};
version = "1.5.0";
};
safe_yaml = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
type = "gem";
};
version = "1.0.4";
};
sass = {
dependencies = ["sass-listen"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10401m2xlv6vaxfwzy4xxmk51ddcnkvwi918cw3jkki0qqdl7d8v";
type = "gem";
};
version = "3.5.5";
};
sass-listen = {
dependencies = ["rb-fsevent" "rb-inotify"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
type = "gem";
};
version = "4.0.0";
};
sawyer = {
dependencies = ["addressable" "faraday"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd";
type = "gem";
};
version = "0.8.1";
};
thread_safe = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
type = "gem";
};
version = "0.3.6";
};
tomlrb = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "09gh67v8s1pr7c37490sjp782gi4wf9k9cadp4l926h1sp27bcgz";
type = "gem";
};
version = "1.2.6";
};
tzinfo = {
dependencies = ["thread_safe"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
type = "gem";
};
version = "1.2.5";
};
yajl-ruby = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rn4kc9fha990yd252wglh6rcyh35cavm1vpyfj8krlcwph09g30";
type = "gem";
};
version = "1.3.1";
};
}

View File

@ -1,183 +0,0 @@
{
addressable = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1j5r0anj8m4qlf2psnldip4b8ha2bsscv11lpdgnfh4nnchzjnxw";
type = "gem";
};
version = "2.5.0";
};
colorator = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
type = "gem";
};
version = "1.1.0";
};
ffi = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "034f52xf7zcqgbvwbl20jwdyjwznvqnwpbaps9nk18v9lgb1dpx0";
type = "gem";
};
version = "1.9.18";
};
forwardable-extended = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
type = "gem";
};
version = "2.6.0";
};
jekyll = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qbnjx7bpshbcam6p9ss2g6gpd3gxz6h4w9yszphj3ip335yhawb";
type = "gem";
};
version = "3.4.1";
};
jekyll-feed = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1dj62gy1jskkn703mi5h0bkg1psbpkdm2qqdw3bhjfid9358qvay";
type = "gem";
};
version = "0.9.1";
};
jekyll-paginate = {
source = {
sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
type = "gem";
};
version = "1.1.0";
};
jekyll-sass-converter = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "01m921763yfgx1gc33k5ixqz623f4c4azgnpqhgsc2q61fyfk3q1";
type = "gem";
};
version = "1.5.0";
};
jekyll-watch = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "02rg3wi95w2l0bg1igl5k6pza723vn2b2gj975gycz1cpmhdjn6z";
type = "gem";
};
version = "1.5.0";
};
kramdown = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1isiqc40q44zg57bd6cfnw1a2l0s2j5skw2awn2cz3gcm7wsf49d";
type = "gem";
};
version = "1.13.2";
};
liquid = {
source = {
sha256 = "033png37ym4jrjz5bi7zb4ic4yxacwvnllm1xxmrnr4swgyyygc2";
type = "gem";
};
version = "3.0.6";
};
listen = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1l0y7hbyfiwpvk172r28hsdqsifq1ls39hsfmzi1vy4ll0smd14i";
type = "gem";
};
version = "3.0.8";
};
mercenary = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
type = "gem";
};
version = "0.3.6";
};
minima = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1s7ks9fqfvqx7qicnkrg76wavg9mjas52f7iyhr89lz9mqiy7p39";
type = "gem";
};
version = "2.1.0";
};
pathutil = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f444wx6vjd30lkkb2zn1k5a6g33lidrpyy7lmgy66n1gsiipzn7";
type = "gem";
};
version = "0.14.0";
};
public_suffix = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "040jf98jpp6w140ghkhw2hvc1qx41zvywx5gj7r2ylr1148qnj7q";
type = "gem";
};
version = "2.0.5";
};
rb-fsevent = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pdiasp9zlr306yld19szapi6kdjk38rpv1hih9x0ry40x6mb63n";
type = "gem";
};
version = "0.9.8";
};
rb-inotify = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bq14f3md5nm00kgxgf0r9lcbn0vgbwljgajif0slxcwv622fjg9";
type = "gem";
};
version = "0.9.8";
};
rdiscount = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
type = "gem";
};
version = "2.2.0.1";
};
RedCloth = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0m9dv7ya9q93r8x1pg2gi15rxlbck8m178j1fz7r5v6wr1avrrqy";
type = "gem";
};
version = "4.3.2";
};
rouge = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "13amckbdknnc5491ag28y8pqbyfpbzx5n4rlmadxhd3wkrhp92c8";
type = "gem";
};
version = "1.11.1";
};
safe_yaml = {
source = {
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
type = "gem";
};
version = "1.0.4";
};
sass = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0da4mn3n60cm1ss1pw1rrpa7fxagglxiwcgvz1asf1qgf4mvcwyr";
type = "gem";
};
version = "3.4.23";
};
}

View File

@ -3,13 +3,13 @@
let
xorgxrdp = stdenv.mkDerivation rec {
name = "xorgxrdp-${version}";
version = "0.2.3";
version = "0.2.5";
src = fetchFromGitHub {
owner = "neutrinolabs";
repo = "xorgxrdp";
rev = "v${version}";
sha256 = "0l1b38j3q9mxyb8ffpdplbqs6rnabj92i8wngrwlkhfh2c88szn1";
sha256 = "05ix0bvbgpg0l0f6pyxp64a4785yv16dxf522y7k84b0rag4bxr7";
};
nativeBuildInputs = [ pkgconfig autoconf automake which libtool nasm ];
@ -34,7 +34,7 @@ let
};
xrdp = stdenv.mkDerivation rec {
version = "0.9.3";
version = "0.9.5";
name = "xrdp-${version}";
src = fetchFromGitHub {
@ -42,7 +42,7 @@ let
repo = "xrdp";
rev = "refs/heads/runtime-cfg-path-${version}"; # Fixes https://github.com/neutrinolabs/xrdp/issues/609; not a patch on top of the official repo because "xorgxrdp.configureFlags" above includes "xrdp.src" which must be patched already
fetchSubmodules = true;
sha256 = "0xqyg3m688fj442zgg9fqmbz7nnzvqpd7a9ki2cwh1hyibacpmz7";
sha256 = "1sm994dic72zvxgwxw9z6an6050976nlnnn2my42pnzj9l5842d8";
};
nativeBuildInputs = [ pkgconfig autoconf automake which libtool nasm ];

View File

@ -1,4 +1,4 @@
{ stdenvNoCC, curl }: # Note that `curl' may be `null', in case of the native stdenvNoCC.
{ lib, stdenvNoCC, curl }: # Note that `curl' may be `null', in case of the native stdenvNoCC.
let
@ -20,7 +20,7 @@ let
# "gnu", etc.).
sites = builtins.attrNames mirrors;
impureEnvVars = stdenvNoCC.lib.fetchers.proxyImpureEnvVars ++ [
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
# This variable allows the user to pass additional options to curl
"NIX_CURL_FLAGS"
@ -89,22 +89,28 @@ in
, passthru ? {}
}:
assert builtins.isList urls;
assert (urls == []) != (url == "");
assert sha512 != "" -> builtins.compareVersions "1.11" builtins.nixVersion <= 0;
let
hasHash = showURLs || (outputHash != "" && outputHashAlgo != "")
|| sha1 != "" || sha256 != "" || sha512 != "";
urls_ = if urls != [] then urls else [url];
urls_ =
if urls != [] && url == "" then
(if lib.isList urls then urls
else throw "`urls` is not a list")
else if urls == [] && url != "" then [url]
else throw "fetchurl requires either `url` or `urls` to be set";
hash_ =
if md5 != "" then throw "fetchurl does not support md5 anymore, please use sha256 or sha512"
else if (outputHash != "" && outputHashAlgo != "") then { inherit outputHashAlgo outputHash; }
else if sha512 != "" then { outputHashAlgo = "sha512"; outputHash = sha512; }
else if sha256 != "" then { outputHashAlgo = "sha256"; outputHash = sha256; }
else if sha1 != "" then { outputHashAlgo = "sha1"; outputHash = sha1; }
else throw "fetchurl requires a hash for fixed-output derivation: ${lib.concatStringsSep ", " urls_}";
in
if md5 != "" then throw "fetchurl does not support md5 anymore, please use sha256 or sha512"
else if (!hasHash) then throw "Specify hash for fetchurl fixed-output derivation: ${stdenvNoCC.lib.concatStringsSep ", " urls_}"
else stdenvNoCC.mkDerivation {
stdenvNoCC.mkDerivation {
name =
if showURLs then "urls"
else if name != "" then name
@ -121,10 +127,7 @@ else stdenvNoCC.mkDerivation {
preferHashedMirrors = true;
# New-style output content requirements.
outputHashAlgo = if outputHashAlgo != "" then outputHashAlgo else
if sha512 != "" then "sha512" else if sha256 != "" then "sha256" else "sha1";
outputHash = if outputHash != "" then outputHash else
if sha512 != "" then sha512 else if sha256 != "" then sha256 else sha1;
inherit (hash_) outputHashAlgo outputHash;
outputHashMode = if (recursiveHash || executable) then "recursive" else "flat";

View File

@ -43,6 +43,8 @@ let
# Patch for standalone doc building
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/Tools.cpp
'';
outputs = [ "out" "lib" "python" ];

View File

@ -0,0 +1,33 @@
From d12ecb83d01dcb580dd94f4d57828f33d3eb4c35 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 18 Feb 2016 15:33:21 +0100
Subject: [PATCH 3/3] Fix DynamicLibrary to build with musl libc
stdin/out/err is part of the libc and not the kernel so we check for the
specific libc that does the unexpected instead of linux.
This is needed for making it build with musl libc.
---
lib/Support/DynamicLibrary.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp
index 9a7aeb5..0c1c8f8 100644
--- a/lib/Support/DynamicLibrary.cpp
+++ b/lib/Support/DynamicLibrary.cpp
@@ -140,10 +140,10 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) {
#define EXPLICIT_SYMBOL(SYM) \
if (!strcmp(symbolName, #SYM)) return &SYM
-// On linux we have a weird situation. The stderr/out/in symbols are both
+// On GNU libc we have a weird situation. The stderr/out/in symbols are both
// macros and global variables because of standards requirements. So, we
// boldly use the EXPLICIT_SYMBOL macro without checking for a #define first.
-#if defined(__linux__) and !defined(__ANDROID__)
+#if defined(__GLIBC__)
{
EXPLICIT_SYMBOL(stderr);
EXPLICIT_SYMBOL(stdout);
--
2.7.3

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetch, cmake, llvm, libcxxabi, fixDarwinDylibNames, version }:
{ lib, stdenv, fetch, cmake, python, llvm, libcxxabi, fixDarwinDylibNames, version }:
stdenv.mkDerivation rec {
name = "libc++-${version}";
@ -15,6 +15,9 @@ stdenv.mkDerivation rec {
./pthread_mach_thread_np.patch
# glibc 2.26 fix
./xlocale-glibc-2.26.patch
] ++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [
../../libcxx-0001-musl-hacks.patch
./max_align_t.patch
];
prePatch = ''
@ -24,9 +27,10 @@ stdenv.mkDerivation rec {
preConfigure = ''
# Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR")
'' + lib.optionalString stdenv.hostPlatform.isMusl ''
patchShebangs utils/cat_files.py
'';
nativeBuildInputs = [ cmake ];
nativeBuildInputs = [ cmake ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl python;
buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
@ -34,7 +38,7 @@ stdenv.mkDerivation rec {
"-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib"
"-DLIBCXX_LIBCPPABI_VERSION=2"
"-DLIBCXX_CXX_ABI=libcxxabi"
];
] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl "-DLIBCXX_HAS_MUSL_LIBC=1";
enableParallelBuilding = true;

View File

@ -0,0 +1,54 @@
From 917331c88bd2afce0cf0fdbcab55a64541b5bcf0 Mon Sep 17 00:00:00 2001
From: "David L. Jones" <dlj@google.com>
Date: Fri, 10 Feb 2017 01:27:42 +0000
Subject: [PATCH] Check for musl-libc's max_align_t in addition to other
variants.
Summary:
Libcxx will define its own max_align_t when it is not available. However, the
availability checks today only check for Clang's definition and GCC's
definition. In particular, it does not check for musl's definition, which is the
same as GCC's but guarded with a different macro.
Reviewers: mclow.lists, EricWF
Reviewed By: EricWF
Subscribers: chandlerc, cfe-commits
Differential Revision: https://reviews.llvm.org/D28478
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@294683 91177308-0d34-0410-b5e6-96231b3b80d8
---
include/cstddef | 3 ++-
include/stddef.h | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/cstddef b/include/cstddef
index edd106c00..103898b7d 100644
--- a/include/cstddef
+++ b/include/cstddef
@@ -48,7 +48,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
using ::ptrdiff_t;
using ::size_t;
-#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T)
+#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T) || \
+ defined(__DEFINED_max_align_t)
// Re-use the compiler's <stddef.h> max_align_t where possible.
using ::max_align_t;
#else
diff --git a/include/stddef.h b/include/stddef.h
index 8841bbea2..faf8552d8 100644
--- a/include/stddef.h
+++ b/include/stddef.h
@@ -53,7 +53,8 @@ using std::nullptr_t;
}
// Re-use the compiler's <stddef.h> max_align_t where possible.
-#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T)
+#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T) && \
+ !defined(__DEFINED_max_align_t)
typedef long double max_align_t;
#endif

View File

@ -14,6 +14,9 @@ stdenv.mkDerivation {
export cmakeFlags="-DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_PATH=$PWD/$(ls -d libcxx-*)"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export TRIPLE=x86_64-apple-darwin
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch}
patch -p1 -d $(ls -d libcxx-*) -i ${./libc++/max_align_t.patch}
'';
installPhase = if stdenv.isDarwin

View File

@ -80,6 +80,9 @@ in stdenv.mkDerivation (rec {
)
'' + stdenv.lib.optionalString stdenv.isAarch64 ''
patch -p0 < ${../aarch64.patch}
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
patch -p1 -i ${../TLI-musl.patch}
patch -p1 -i ${./dynamiclibrary-musl.patch}
'';
# hacky fix: created binaries need to be run before installation
@ -110,6 +113,14 @@ in stdenv.mkDerivation (rec {
++ stdenv.lib.optionals (isDarwin) [
"-DLLVM_ENABLE_LIBCXX=ON"
"-DCAN_TARGET_i386=false"
]
++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.targetPlatform.config}"
"-DTARGET_TRIPLE=${stdenv.targetPlatform.config}"
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
"-DCOMPILER_RT_BUILD_XRAY=OFF"
];
postBuild = ''

View File

@ -44,6 +44,8 @@ let
# Patch for standalone doc building
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
'';
outputs = [ "out" "lib" "python" ];

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetch, cmake, llvm, libcxxabi, fixDarwinDylibNames, version }:
{ lib, stdenv, fetch, cmake, python, llvm, libcxxabi, fixDarwinDylibNames, version }:
stdenv.mkDerivation rec {
name = "libc++-${version}";
@ -10,6 +10,12 @@ stdenv.mkDerivation rec {
export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include"
'';
# on next rebuild, this can be replaced with optionals; for now set to null to avoid
# patches = stdenv.lib.optionals stdenv.hostPlatform.isMusl [
patches = if stdenv.hostPlatform.isMusl then [
../../libcxx-0001-musl-hacks.patch
] else null;
prePatch = ''
substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++"
'';
@ -17,9 +23,10 @@ stdenv.mkDerivation rec {
preConfigure = ''
# Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR")
'' + lib.optionalString stdenv.hostPlatform.isMusl ''
patchShebangs utils/cat_files.py
'';
nativeBuildInputs = [ cmake ];
nativeBuildInputs = [ cmake ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl python;
buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
@ -27,7 +34,7 @@ stdenv.mkDerivation rec {
"-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib"
"-DLIBCXX_LIBCPPABI_VERSION=2"
"-DLIBCXX_CXX_ABI=libcxxabi"
];
] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl "-DLIBCXX_HAS_MUSL_LIBC=1";
enableParallelBuilding = true;

View File

@ -14,6 +14,8 @@ stdenv.mkDerivation {
export cmakeFlags="-DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_PATH=$PWD/$(ls -d libcxx-*)"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export TRIPLE=x86_64-apple-darwin
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch}
'';
installPhase = if stdenv.isDarwin

View File

@ -74,6 +74,11 @@ in stdenv.mkDerivation (rec {
patch -p1 -i ${./compiler-rt-codesign.patch} -d projects/compiler-rt
'' + stdenv.lib.optionalString stdenv.isAarch64 ''
patch -p0 < ${../aarch64.patch}
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
patch -p1 -i ${../TLI-musl.patch}
substituteInPlace unittests/Support/CMakeLists.txt \
--replace "add_subdirectory(DynamicLibrary)" ""
rm unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
'';
# hacky fix: created binaries need to be run before installation
@ -104,6 +109,14 @@ in stdenv.mkDerivation (rec {
++ stdenv.lib.optionals (isDarwin) [
"-DLLVM_ENABLE_LIBCXX=ON"
"-DCAN_TARGET_i386=false"
]
++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.targetPlatform.config}"
"-DTARGET_TRIPLE=${stdenv.targetPlatform.config}"
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
"-DCOMPILER_RT_BUILD_XRAY=OFF"
];
postBuild = ''

View File

@ -0,0 +1,35 @@
From 5c571082fdaf61f6df19d9b7137dc26d71334058 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 18 Feb 2016 10:33:04 +0100
Subject: [PATCH 2/3] Fix build with musl libc
On musl libc the fopen64 and fopen are the same thing, but for
compatibility they have a `#define fopen64 fopen`. Same applies for
fseek64, fstat64, fstatvfs64, ftello64, lstat64, stat64 and tmpfile64.
---
include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
index 7becdf0..7f14427 100644
--- a/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/include/llvm/Analysis/TargetLibraryInfo.h
@@ -18,6 +18,15 @@
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
+#undef fopen64
+#undef fseeko64
+#undef fstat64
+#undef fstatvfs64
+#undef ftello64
+#undef lstat64
+#undef stat64
+#undef tmpfile64
+
namespace llvm {
/// VecDesc - Describes a possible vectorization of a function.
/// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
--
2.7.3

View File

@ -0,0 +1,39 @@
From 1c936d7fda3275265e37f93697232a1ed652390f Mon Sep 17 00:00:00 2001
From: Will Dietz <w@wdtz.org>
Date: Sat, 9 Jul 2016 19:22:54 -0500
Subject: [PATCH] musl fixes/hacks
Conflicts:
include/__config
include/locale
src/locale.cpp
---
include/locale | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/locale b/include/locale
index 3d804e8..9b01f5b 100644
--- a/include/locale
+++ b/include/locale
@@ -695,7 +695,7 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
typename remove_reference<decltype(errno)>::type __save_errno = errno;
errno = 0;
char *__p2;
- long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
+ long long __ll = strtoll(__a, &__p2, __base);
typename remove_reference<decltype(errno)>::type __current_errno = errno;
if (__current_errno == 0)
errno = __save_errno;
@@ -735,7 +735,7 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
typename remove_reference<decltype(errno)>::type __save_errno = errno;
errno = 0;
char *__p2;
- unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
+ unsigned long long __ll = strtoull(__a, &__p2, __base);
typename remove_reference<decltype(errno)>::type __current_errno = errno;
if (__current_errno == 0)
errno = __save_errno;
--
1.7.1

View File

@ -88,12 +88,34 @@ self: super: {
## from the context: a
constraints = super.constraints_0_10;
## Needs bump to a versioned attribute
##
## • Could not deduce (Semigroup (IterT m a))
## arising from the superclasses of an instance declaration
## from the context: (Monad m, Monoid a)
free = super.free_5;
funcmp = overrideCabal super.funcmp_1_9 (drv: {
## Needs bump to a versioned attribute
##
## Needed for (<>) in prelude
## Setup: Encountered missing dependencies:
## base >=3 && <4.11
jailbreak = true;
});
hspec-core = overrideCabal super.hspec-core_2_4_8 (drv: {
## Needs bump to a versioned attribute
##
## • No instance for (Semigroup Summary)
## arising from the superclasses of an instance declaration
## • In the instance declaration for Monoid Summary
## error: while evaluating the attribute buildInputs of the derivation hspec-core-2.4.8 at /home/deepfire/src/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:148:11:
## while evaluating the attribute buildInputs of the derivation silently-1.2.5 at /home/deepfire/src/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:148:11:
## while evaluating the attribute buildInputs of the derivation temporary-1.2.1.1 at /home/deepfire/src/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:148:11:
## while evaluating the attribute buildInputs of the derivation base-compat-0.9.3 at /home/deepfire/src/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:148:11:
## while evaluating the attribute propagatedBuildInputs of the derivation hspec-2.4.8 at /home/deepfire/src/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:148:11:
## infinite recursion encountered, at undefined position
doCheck = false;
});
@ -104,105 +126,87 @@ self: super: {
## hspec-discover ==2.4.7
hspec-discover = super.hspec-discover_2_4_8;
## Needs bump to a versioned attribute
##
## • Could not deduce (Semigroup (a :->: b))
## arising from the superclasses of an instance declaration
## from the context: (HasTrie a, Monoid b)
MemoTrie = super.MemoTrie_0_6_9;
lens = overrideCabal super.lens_4_16 (drv: {
## Needs bump to a versioned attribute
##
## • Could not deduce (Apply f)
## arising from the superclasses of an instance declaration
## from the context: (Contravariant f, Applicative f)
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
semigroupoids = overrideCabal super.semigroupoids_5_2_2 (drv: {
## Needs bump to a versioned attribute
##
## • Variable not in scope: mappend :: Seq a -> Seq a -> Seq a
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
## Needs bump to a versioned attribute
##
## • Could not deduce (Semigroup (Traversal f))
## • No instance for (Semigroup Builder)
## arising from the superclasses of an instance declaration
## from the context: Applicative f
tasty = super.tasty_1_0_1;
## • In the instance declaration for Monoid Builder
stringbuilder = super.stringbuilder_0_5_1;
## Needs bump to a versioned attribute
##
## Module Data.Semigroup does not export Monoid(..)
## |
## 80 | import Data.Semigroup (Semigroup(..), Monoid(..))
unordered-containers = super.unordered-containers_0_2_9_0;
## On Hackage:
happy = overrideCabal super.happy (drv: {
tasty = overrideCabal super.tasty (drv: {
## On Hackage, awaiting for import
##
## Ambiguous occurrence <>
## It could refer to either Prelude.<>,
## imported from Prelude at src/PrettyGrammar.hs:1:8-20
version = "1.19.9";
sha256 = "138xpxdb7x62lpmgmb6b3v3vgdqqvqn4273jaap3mjmc2gla709y";
## • No instance for (Semigroup OptionSet)
## arising from the superclasses of an instance declaration
## • In the instance declaration for Monoid OptionSet
version = "1.0.0.1";
sha256 = "0ggqffw9kbb6nlq1pplk131qzxndqqzqyf4s2p7576nljx11a7qf";
});
## Upstreamed
free = overrideCabal super.free (drv: {
## Upstreamed, awaiting a Hackage release
##
## • Could not deduce (Semigroup (IterT m a))
## arising from the superclasses of an instance declaration
## from the context: (Monad m, Monoid a)
src = pkgs.fetchFromGitHub {
owner = "ekmett";
repo = "free";
rev = "fcefc71ed302f2eaf60f020046bad392338b3109";
sha256 = "0mfrd7y97pgqmb2i66jn5xwjpcrgnfcqq8dzkxqgx1b5wjdydq70";
};
## Setup: Encountered missing dependencies:
## transformers-base <0.5
## builder for /nix/store/3yvaqx5qcg1fb3nnyc273fkhgfh73pgv-free-4.12.4.drv failed with exit code 1
## error: build of /nix/store/3yvaqx5qcg1fb3nnyc273fkhgfh73pgv-free-4.12.4.drv failed
libraryHaskellDepends = drv.libraryHaskellDepends ++ [ self.transformers-base ];
});
haskell-gi = overrideCabal super.haskell-gi (drv: {
## Upstreamed, awaiting a Hackage release
##
## Setup: Encountered missing dependencies:
## haskell-gi-base ==0.20.*
## builder for /nix/store/q0qkq2gzmdnkvdz6xl7svv5305chbr4b-haskell-gi-0.20.3.drv failed with exit code 1
## error: build of /nix/store/q0qkq2gzmdnkvdz6xl7svv5305chbr4b-haskell-gi-0.20.3.drv failed
src = pkgs.fetchFromGitHub {
owner = "haskell-gi";
repo = "haskell-gi";
rev = "30d2e6415c5b57760f8754cd3003eb07483d60e6";
sha256 = "1l3qm97gcjih695hhj80rbpnd72prnc81lg5y373yj8jk9f6ypbr";
};
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
haskell-gi-base = overrideCabal super.haskell-gi-base (drv: {
## Upstreamed, awaiting a Hackage release
##
## breaks haskell-gi:
## Setup: Encountered missing dependencies:
## haskell-gi-base ==0.21.*
## cannot build derivation /nix/store/b3d6yr1rzk4hpzg87yk4n5i4321i824f-gi-cairo-1.0.14.drv: 1 dependencies couldn't be built
src = pkgs.fetchFromGitHub {
owner = "haskell-gi";
repo = "haskell-gi";
rev = "30d2e6415c5b57760f8754cd3003eb07483d60e6";
sha256 = "1l3qm97gcjih695hhj80rbpnd72prnc81lg5y373yj8jk9f6ypbr";
};
## Setup: Encountered missing dependencies:
## attoparsec ==0.13.*,
## doctest >=0.8,
## haskell-gi-base ==0.21.*,
## pretty-show -any,
## regex-tdfa >=1.2,
prePatch = "cd base; ";
});
@ -220,20 +224,6 @@ self: super: {
};
});
hedgehog = overrideCabal super.hedgehog (drv: {
## Upstreamed, awaiting a Hackage release
##
## /nix/store/78sxg2kvl2klplqfx22s6b42lds7qq23-stdenv/setup: line 99: cd: hedgehog: No such file or directory
src = pkgs.fetchFromGitHub {
owner = "hedgehogqa";
repo = "haskell-hedgehog";
rev = "7a4fab73670bc33838f2b5f25eb824ee550079ce";
sha256 = "1l8maassmklf6wgairk7llxvlbwxngv0dzx0fwnqx6hsb32sms05";
};
## jailbreak-cabal: dieVerbatim: user error (jailbreak-cabal: Error Parsing: file "hedgehog.cabal" doesn't exist. Cannot
prePatch = "cd hedgehog; ";
});
lambdacube-compiler = overrideCabal super.lambdacube-compiler (drv: {
## Upstreamed, awaiting a Hackage release
##
@ -254,42 +244,17 @@ self: super: {
lambdacube-ir = overrideCabal super.lambdacube-ir (drv: {
## Upstreamed, awaiting a Hackage release
##
## /nix/store/78sxg2kvl2klplqfx22s6b42lds7qq23-stdenv/setup: line 99: cd: lambdacube-ir.haskell: No such file or directory
## Setup: Encountered missing dependencies:
## aeson >=0.9 && <0.12, base >=4.8 && <4.10, vector ==0.11.*
src = pkgs.fetchFromGitHub {
owner = "lambdacube3d";
repo = "lambdacube-ir";
rev = "b86318b510ef59606c5b7c882cad33af52ce257c";
sha256 = "0j4r6b32lcm6jg653xzg9ijxkfjahlb4x026mv5dhs18kvgqhr8x";
};
## Setup: No cabal file found.
prePatch = "cd lambdacube-ir.haskell; ";
});
lens = overrideCabal super.lens (drv: {
## Upstreamed, awaiting a Hackage release
##
## • Could not deduce (Apply f)
## arising from the superclasses of an instance declaration
## from the context: (Contravariant f, Applicative f)
src = pkgs.fetchFromGitHub {
owner = "ekmett";
repo = "lens";
rev = "4ad49eaf2448d856f0433fe5a4232f1e8fa87eb0";
sha256 = "0sd08v6syadplhk5d21yi7qffbjncn8z1bqlwz9nyyb0xja8s8wa";
};
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
doCheck = false;
## Setup: Encountered missing dependencies:
## template-haskell >=2.4 && <2.13
## builder for /nix/store/fvrc4s96ym33i74y794nap7xai9p69fa-lens-4.15.4.drv failed with exit code 1
## error: build of /nix/store/fvrc4s96ym33i74y794nap7xai9p69fa-lens-4.15.4.drv failed
jailbreak = true;
});
simple-reflect = overrideCabal super.simple-reflect (drv: {
## Upstreamed, awaiting a Hackage release
##
@ -309,8 +274,6 @@ self: super: {
##
## Setup: Encountered missing dependencies:
## th-desugar ==1.7.*
## builder for /nix/store/g5jl22kpq8fnrg8ldphxndri759nxwzf-singletons-2.3.1.drv failed with exit code 1
## error: build of /nix/store/g5jl22kpq8fnrg8ldphxndri759nxwzf-singletons-2.3.1.drv failed
src = pkgs.fetchFromGitHub {
owner = "goldfirere";
repo = "singletons";
@ -319,20 +282,6 @@ self: super: {
};
});
stringbuilder = overrideCabal super.stringbuilder (drv: {
## Upstreamed, awaiting a Hackage release
##
## • No instance for (Semigroup Builder)
## arising from the superclasses of an instance declaration
## • In the instance declaration for Monoid Builder
src = pkgs.fetchFromGitHub {
owner = "sol";
repo = "stringbuilder";
rev = "4a1b689d3c8a462b28e0d21224b96165f622e6f7";
sha256 = "0h3nva4mwxkdg7hh7b7a3v561wi1bvmj0pshhd3sl7dy3lpvnrah";
};
});
th-desugar = overrideCabal super.th-desugar (drv: {
## Upstreamed, awaiting a Hackage release
##
@ -347,20 +296,6 @@ self: super: {
};
});
unordered-containers = overrideCabal super.unordered-containers (drv: {
## Upstreamed, awaiting a Hackage release
##
## Module Data.Semigroup does not export Monoid(..)
## |
## 80 | import Data.Semigroup (Semigroup(..), Monoid(..))
src = pkgs.fetchFromGitHub {
owner = "tibbe";
repo = "unordered-containers";
rev = "0a6b84ec103e28b73458f385ef846a7e2d3ea42f";
sha256 = "128q8k4py2wr1v0gmyvqvzikk6sksl9aqj0lxzf46763lis8x9my";
};
});
websockets = overrideCabal super.websockets (drv: {
## Upstreamed, awaiting a Hackage release
##
@ -412,22 +347,20 @@ self: super: {
doCheck = false;
## Setup: Encountered missing dependencies:
## data-or ==1.0.*
## builder for /nix/store/iw3xsljnygsv9q2jglcv54mqd94fig7n-bytestring-trie-0.2.4.1.drv failed with exit code 1
## error: build of /nix/store/iw3xsljnygsv9q2jglcv54mqd94fig7n-bytestring-trie-0.2.4.1.drv failed
libraryHaskellDepends = drv.libraryHaskellDepends ++ [ self.data-or ];
});
gtk2hs-buildtools = overrideCabal super.gtk2hs-buildtools (drv: {
## Unmerged. PR: https://github.com/gtk2hs/gtk2hs/pull/233
##
## /nix/store/78sxg2kvl2klplqfx22s6b42lds7qq23-stdenv/setup: line 99: cd: tools: No such file or directory
## Setup: Encountered missing dependencies:
## Cabal >=1.24.0.0 && <2.1
src = pkgs.fetchFromGitHub {
owner = "deepfire";
repo = "gtk2hs";
rev = "08c68d5afc22dd5761ec2c92ebf49c6d252e545b";
sha256 = "06prn5wqq8x225n9wlbyk60f50jyjj8fm2hf181dyqjpf8wq75xa";
};
## Setup: No cabal file found.
prePatch = "cd tools; ";
});
@ -503,41 +436,12 @@ self: super: {
rev = "4fb50139db45a37493b91973eeaad9885b4c63ca";
sha256 = "0i7pp6cw394m2vbwcqv9z5ngdarp01sabqr1jkkgchxdkkii94nx";
};
## mergeIncrementalWithMove ::
## GCompare k =>
## Incremental t (PatchDMapWithMove k (Event t))
## -> Event t (DMap k Identity)
## currentIncremental ::
## Patch p => Incremental t p -> Behavior t (PatchTarget p)
## updatedIncremental :: Patch p => Incremental t p -> Event t p
## incrementalToDynamic ::
## Patch p => Incremental t p -> Dynamic t (PatchTarget p)
## behaviorCoercion ::
## Coercion a b -> Coercion (Behavior t a) (Behavior t b)
## eventCoercion :: Coercion a b -> Coercion (Event t a) (Event t b)
## dynamicCoercion ::
## Coercion a b -> Coercion (Dynamic t a) (Dynamic t b)
## mergeIntIncremental ::
## Incremental t (PatchIntMap (Event t a)) -> Event t (IntMap a)
## fanInt :: Event t (IntMap a) -> EventSelectorInt t a
## {-# MINIMAL never, constant, push, pushCheap, pull, merge, fan,
## switch, coincidence, current, updated, unsafeBuildDynamic,
## unsafeBuildIncremental, mergeIncremental, mergeIncrementalWithMove,
## currentIncremental, updatedIncremental, incrementalToDynamic,
## behaviorCoercion, eventCoercion, dynamicCoercion,
## mergeIntIncremental, fanInt #-}
## Matches:
## []
## Call stack:
## CallStack (from HasCallStack):
## callStackDoc, called at compiler/utils/Outputable.hs:1150:37 in ghc:Outputable
## pprPanic, called at utils/haddock/haddock-api/src/Haddock/Interface/Create.hs:1013:16 in main:Haddock.Interface.Create
## Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
## haddock: internal error: internal: extractDecl (ClsInstD)
## CallStack (from HasCallStack):
## error, called at utils/haddock/haddock-api/src/Haddock/Interface/Create.hs:1058:16 in main:Haddock.Interface.Create
doHaddock = false;
## Setup: Encountered missing dependencies:
## base >=4.7 && <4.11, bifunctors >=5.2 && <5.5
## builder for /nix/store/93ka24600m4mipsgn2cq8fwk124q97ca-reflex-0.4.0.1.drv failed with exit code 1
## error: build of /nix/store/93ka24600m4mipsgn2cq8fwk124q97ca-reflex-0.4.0.1.drv failed
jailbreak = true;
## Setup: Encountered missing dependencies:
## data-default -any,
@ -562,6 +466,20 @@ self: super: {
};
});
securemem = overrideCabal super.securemem (drv: {
## Unmerged. PR: https://github.com/vincenthz/hs-securemem/pull/12
##
## • No instance for (Semigroup SecureMem)
## arising from the superclasses of an instance declaration
## • In the instance declaration for Monoid SecureMem
src = pkgs.fetchFromGitHub {
owner = "shlevy";
repo = "hs-securemem";
rev = "6168d90b00bfc6a559d3b9160732343644ef60fb";
sha256 = "06dhx1z44j5gshpdlsb4aryr3g4was3x4c2sgv1px8j57zrvlypx";
};
});
text-format = overrideCabal super.text-format (drv: {
## Unmerged. PR: https://github.com/bos/text-format/pull/21
##
@ -596,237 +514,153 @@ self: super: {
adjunctions = overrideCabal super.adjunctions (drv: {
## Setup: Encountered missing dependencies:
## free ==4.*
## builder for /nix/store/64pvqslahgby4jlg9rpz29n8w4njb670-adjunctions-4.3.drv failed with exit code 1
## error: build of /nix/store/64pvqslahgby4jlg9rpz29n8w4njb670-adjunctions-4.3.drv failed
jailbreak = true;
});
async = overrideCabal super.async (drv: {
## Setup: Encountered missing dependencies:
## base >=4.3 && <4.11
## builder for /nix/store/2xf491hgsmckz2akrn765kvvy2k8crbd-async-2.1.1.1.drv failed with exit code 1
## error: build of /nix/store/2xf491hgsmckz2akrn765kvvy2k8crbd-async-2.1.1.1.drv failed
jailbreak = true;
});
bifunctors = overrideCabal super.bifunctors (drv: {
## Setup: Encountered missing dependencies:
## template-haskell >=2.4 && <2.13
## builder for /nix/store/dy1hzdy14pz96cvx37yggbv6a88sgxq4-bifunctors-5.5.drv failed with exit code 1
## error: build of /nix/store/dy1hzdy14pz96cvx37yggbv6a88sgxq4-bifunctors-5.5.drv failed
jailbreak = true;
});
bindings-GLFW = overrideCabal super.bindings-GLFW (drv: {
## Setup: Encountered missing dependencies:
## template-haskell >=2.10 && <2.13
## builder for /nix/store/ykc786r2bby5kkbpqjg0y10wb9jhmsa9-bindings-GLFW-3.1.2.3.drv failed with exit code 1
## error: build of /nix/store/ykc786r2bby5kkbpqjg0y10wb9jhmsa9-bindings-GLFW-3.1.2.3.drv failed
jailbreak = true;
});
bytes = overrideCabal super.bytes (drv: {
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
cabal-doctest = overrideCabal super.cabal-doctest (drv: {
## Setup: Encountered missing dependencies:
## Cabal >=1.10 && <2.1, base >=4.3 && <4.11
## builder for /nix/store/zy3l0ll0r9dq29lgxajv12rz1jzjdkrn-cabal-doctest-1.0.5.drv failed with exit code 1
## error: build of /nix/store/zy3l0ll0r9dq29lgxajv12rz1jzjdkrn-cabal-doctest-1.0.5.drv failed
jailbreak = true;
});
ChasingBottoms = overrideCabal super.ChasingBottoms (drv: {
## Setup: Encountered missing dependencies:
## base >=4.2 && <4.11
## builder for /nix/store/wsyjjf4x6pmx84kxnjaka7zwakyrca03-ChasingBottoms-1.3.1.3.drv failed with exit code 1
## error: build of /nix/store/wsyjjf4x6pmx84kxnjaka7zwakyrca03-ChasingBottoms-1.3.1.3.drv failed
jailbreak = true;
});
comonad = overrideCabal super.comonad (drv: {
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
deepseq-generics = overrideCabal super.deepseq-generics (drv: {
## https://github.com/haskell-hvr/deepseq-generics/pull/4
jailbreak = true;
});
distributive = overrideCabal super.distributive (drv: {
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
exception-transformers = overrideCabal super.exception-transformers (drv: {
## Setup: Encountered missing dependencies:
## HUnit >=1.2 && <1.6
## builder for /nix/store/qs4g7lzq1ixcgg5rw4xb5545g7r34md8-exception-transformers-0.4.0.5.drv failed with exit code 1
## error: build of /nix/store/qs4g7lzq1ixcgg5rw4xb5545g7r34md8-exception-transformers-0.4.0.5.drv failed
jailbreak = true;
});
hashable = overrideCabal super.hashable (drv: {
## Setup: Encountered missing dependencies:
## base >=4.4 && <4.11
## builder for /nix/store/4qlxxypfhbwcv227cmsja1asgqnq37gf-hashable-1.2.6.1.drv failed with exit code 1
## error: build of /nix/store/4qlxxypfhbwcv227cmsja1asgqnq37gf-hashable-1.2.6.1.drv failed
jailbreak = true;
});
hashable-time = overrideCabal super.hashable-time (drv: {
## Setup: Encountered missing dependencies:
## base >=4.7 && <4.11
## builder for /nix/store/38dllcgxpmkd2fgvs6wd7ji86py0wbnh-hashable-time-0.2.0.1.drv failed with exit code 1
## error: build of /nix/store/38dllcgxpmkd2fgvs6wd7ji86py0wbnh-hashable-time-0.2.0.1.drv failed
jailbreak = true;
});
haskell-src-meta = overrideCabal super.haskell-src-meta (drv: {
## Setup: Encountered missing dependencies:
## base >=4.6 && <4.11, template-haskell >=2.8 && <2.13
## builder for /nix/store/g5wkb14sydvyv484agvaa7hxl84a0wr9-haskell-src-meta-0.8.0.2.drv failed with exit code 1
## error: build of /nix/store/g5wkb14sydvyv484agvaa7hxl84a0wr9-haskell-src-meta-0.8.0.2.drv failed
jailbreak = true;
});
hspec-meta = overrideCabal super.hspec-meta (drv: {
## Linking dist/build/hspec-meta-discover/hspec-meta-discover ...
## running tests
## Package has no test suites.
## haddockPhase
## Running hscolour for hspec-meta-2.4.6...
## Preprocessing library for hspec-meta-2.4.6..
## Preprocessing executable 'hspec-meta-discover' for hspec-meta-2.4.6..
## Preprocessing library for hspec-meta-2.4.6..
## Running Haddock on library for hspec-meta-2.4.6..
## Haddock coverage:
## haddock: panic! (the 'impossible' happened)
## (GHC version 8.4.20180122 for x86_64-unknown-linux):
## extractDecl
## Ambiguous decl for Arg in class:
## class Example e where
## type Arg e
## type Arg e = ()
## evaluateExample ::
## e
## -> Params
## -> (ActionWith (Arg e) -> IO ()) -> ProgressCallback -> IO Result
## {-# MINIMAL evaluateExample #-}
## Matches:
## []
## Call stack:
## CallStack (from HasCallStack):
## callStackDoc, called at compiler/utils/Outputable.hs:1150:37 in ghc:Outputable
## pprPanic, called at utils/haddock/haddock-api/src/Haddock/Interface/Create.hs:1013:16 in main:Haddock.Interface.Create
## Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
doHaddock = false;
});
integer-logarithms = overrideCabal super.integer-logarithms (drv: {
## Setup: Encountered missing dependencies:
## base >=4.3 && <4.11
## builder for /nix/store/zdiicv0jmjsw6bprs8wxxaq5m0z0a75f-integer-logarithms-1.0.2.drv failed with exit code 1
## error: build of /nix/store/zdiicv0jmjsw6bprs8wxxaq5m0z0a75f-integer-logarithms-1.0.2.drv failed
jailbreak = true;
});
kan-extensions = overrideCabal super.kan-extensions (drv: {
## Setup: Encountered missing dependencies:
## free ==4.*
## builder for /nix/store/kvnlcj6zdqi2d2yq988l784hswjwkk4c-kan-extensions-5.0.2.drv failed with exit code 1
## error: build of /nix/store/kvnlcj6zdqi2d2yq988l784hswjwkk4c-kan-extensions-5.0.2.drv failed
jailbreak = true;
});
keys = overrideCabal super.keys (drv: {
## Setup: Encountered missing dependencies:
## free ==4.*
## builder for /nix/store/khkbn7wmjr10nyq0wwkmn888bj1l4fmh-keys-3.11.drv failed with exit code 1
## error: build of /nix/store/khkbn7wmjr10nyq0wwkmn888bj1l4fmh-keys-3.11.drv failed
jailbreak = true;
});
lambdacube-gl = overrideCabal super.lambdacube-gl (drv: {
## Setup: Encountered missing dependencies:
## vector ==0.11.*
## builder for /nix/store/a98830jm4yywfg1d6264p4yngbiyvssp-lambdacube-gl-0.5.2.4.drv failed with exit code 1
## error: build of /nix/store/a98830jm4yywfg1d6264p4yngbiyvssp-lambdacube-gl-0.5.2.4.drv failed
jailbreak = true;
});
lifted-async = overrideCabal super.lifted-async (drv: {
## Setup: Encountered missing dependencies:
## base >=4.5 && <4.11
## builder for /nix/store/l3000vil24jyq66a5kfqvxfdmy7agwic-lifted-async-0.9.3.3.drv failed with exit code 1
## error: build of /nix/store/l3000vil24jyq66a5kfqvxfdmy7agwic-lifted-async-0.9.3.3.drv failed
jailbreak = true;
});
linear = overrideCabal super.linear (drv: {
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
newtype-generics = overrideCabal super.newtype-generics (drv: {
## Setup: Encountered missing dependencies:
## base >=4.6 && <4.11
## builder for /nix/store/l3rzsjbwys4rjrpv1703iv5zwbd4bwy6-newtype-generics-0.5.1.drv failed with exit code 1
## error: build of /nix/store/l3rzsjbwys4rjrpv1703iv5zwbd4bwy6-newtype-generics-0.5.1.drv failed
jailbreak = true;
});
parallel = overrideCabal super.parallel (drv: {
## Setup: Encountered missing dependencies:
## base >=4.3 && <4.11
## builder for /nix/store/c16gcgn7d7gql8bbjqngx7wbw907hnwb-parallel-3.2.1.1.drv failed with exit code 1
## error: build of /nix/store/c16gcgn7d7gql8bbjqngx7wbw907hnwb-parallel-3.2.1.1.drv failed
jailbreak = true;
});
quickcheck-instances = overrideCabal super.quickcheck-instances (drv: {
## Setup: Encountered missing dependencies:
## base >=4.5 && <4.11
## builder for /nix/store/r3fx9f7ksp41wfn6cp4id3mzgv04pwij-quickcheck-instances-0.3.16.1.drv failed with exit code 1
## error: build of /nix/store/r3fx9f7ksp41wfn6cp4id3mzgv04pwij-quickcheck-instances-0.3.16.1.drv failed
jailbreak = true;
});
tasty-ant-xml = overrideCabal super.tasty-ant-xml (drv: {
rapid = overrideCabal super.rapid (drv: {
## Setup: Encountered missing dependencies:
## tasty >=0.10 && <1.0
## builder for /nix/store/86dlb96cdw9jpq95xbndf4axj1z542d6-tasty-ant-xml-1.1.2.drv failed with exit code 1
## error: build of /nix/store/86dlb96cdw9jpq95xbndf4axj1z542d6-tasty-ant-xml-1.1.2.drv failed
## base >=4.8 && <4.11
jailbreak = true;
});
tasty-expected-failure = overrideCabal super.tasty-expected-failure (drv: {
## Setup: Encountered missing dependencies:
## base >=4.5 && <4.11
## builder for /nix/store/gdm01qb8ppxgrl6dgzhlj8fzmk4x8dj3-tasty-expected-failure-0.11.0.4.drv failed with exit code 1
## error: build of /nix/store/gdm01qb8ppxgrl6dgzhlj8fzmk4x8dj3-tasty-expected-failure-0.11.0.4.drv failed
jailbreak = true;
});
tasty-hedgehog = overrideCabal super.tasty-hedgehog (drv: {
## Setup: Encountered missing dependencies:
## base >=4.8 && <4.11, tasty ==0.11.*
## builder for /nix/store/bpxyzzbmb03n88l4xz4k2rllj4227fwv-tasty-hedgehog-0.1.0.1.drv failed with exit code 1
## error: build of /nix/store/bpxyzzbmb03n88l4xz4k2rllj4227fwv-tasty-hedgehog-0.1.0.1.drv failed
jailbreak = true;
});
@ -842,33 +676,25 @@ self: super: {
th-abstraction = overrideCabal super.th-abstraction (drv: {
## Setup: Encountered missing dependencies:
## template-haskell >=2.5 && <2.13
## builder for /nix/store/la3zdphp3nqzl590n25zyrgj62ga8cl6-th-abstraction-0.2.6.0.drv failed with exit code 1
## error: build of /nix/store/la3zdphp3nqzl590n25zyrgj62ga8cl6-th-abstraction-0.2.6.0.drv failed
jailbreak = true;
});
these = overrideCabal super.these (drv: {
## Setup: Encountered missing dependencies:
## base >=4.5 && <4.11
## builder for /nix/store/1wwqq67pinjj95fgqg13bchh0kbyrb83-these-0.7.4.drv failed with exit code 1
## error: build of /nix/store/1wwqq67pinjj95fgqg13bchh0kbyrb83-these-0.7.4.drv failed
jailbreak = true;
});
trifecta = overrideCabal super.trifecta (drv: {
## CABAL-MISSING-DEPS
## Setup: Encountered missing dependencies:
## ghc >=7.0 && <8.4
## builder for /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed with exit code 1
## error: build of /nix/store/yklyv4lw4d02316p31x7a2pni1z6gjgk-doctest-0.13.0.drv failed
## /run/current-system/sw/bin/nix-shell: failed to build all dependencies
doCheck = false;
});
unliftio-core = overrideCabal super.unliftio-core (drv: {
## Setup: Encountered missing dependencies:
## base >=4.5 && <4.11
## builder for /nix/store/bn8w06wlq7zzli0858hfwlai7wbj6dmq-unliftio-core-0.1.1.0.drv failed with exit code 1
## error: build of /nix/store/bn8w06wlq7zzli0858hfwlai7wbj6dmq-unliftio-core-0.1.1.0.drv failed
jailbreak = true;
});
@ -880,23 +706,6 @@ self: super: {
wavefront = overrideCabal super.wavefront (drv: {
## Setup: Encountered missing dependencies:
## base >=4.8 && <4.11
## builder for /nix/store/iy6ccxh4dvp6plalx4ww81qrnhxm7jgr-wavefront-0.7.1.1.drv failed with exit code 1
## error: build of /nix/store/iy6ccxh4dvp6plalx4ww81qrnhxm7jgr-wavefront-0.7.1.1.drv failed
jailbreak = true;
});
# Needed for (<>) in prelude
funcmp = super.funcmp_1_9;
# https://github.com/haskell-hvr/deepseq-generics/pull/4
deepseq-generics = doJailbreak super.deepseq-generics;
# SMP compat
# https://github.com/vincenthz/hs-securemem/pull/12
securemem =
let patch = pkgs.fetchpatch
{ url = https://github.com/vincenthz/hs-securemem/commit/6168d90b00bfc6a559d3b9160732343644ef60fb.patch;
sha256 = "0pfjmq57kcvxq7mhljd40whg2g77vdlvjyycdqmxxzz1crb6pipf";
};
in appendPatch super.securemem patch;
}

View File

@ -1,32 +1,113 @@
{stdenv, fetchurl, aspell, which}:
{lib, stdenv, fetchurl, aspell, which}:
with lib;
/* HOWTO:
* Add some of these to your profile or systemPackages.
~~~~
environment.systemPackages = [
aspell
aspellDicts.en
aspellDicts.en-computers
aspellDicts.en-science
];
~~~~
* Rebuild and switch to the new profile.
* Add something like
~~~~
master en_US
extra-dicts en-computers.rws
add-extra-dicts en_US-science.rws
~~~~
to `/etc/aspell.conf` or `~/.aspell.conf`.
* Check that `aspell -a` starts without errors.
* (optional) Check your config with `aspell dump config | grep -vE '^(#|$)'`.
* Enjoy.
*/
let
/* Function to compile an Aspell dictionary. Fortunately, they all
build in the exact same way. */
buildDict =
{shortName, fullName, src, postInstall ? ""}:
{shortName, fullName, ...}@args:
stdenv.mkDerivation {
stdenv.mkDerivation ({
name = "aspell-dict-${shortName}";
inherit src;
buildInputs = [aspell which];
dontAddPrefix = true;
preBuild = "makeFlagsArray=(dictdir=$out/lib/aspell datadir=$out/lib/aspell)";
inherit postInstall;
meta = {
description = "Aspell dictionary for ${fullName}";
platforms = stdenv.lib.platforms.all;
};
};
} // (args.meta or {});
} // removeAttrs args [ "meta" ]);
in {
/* Function to compile txt dict files into Aspell dictionaries. */
buildTxtDict =
{langInputs ? [], ...}@args:
buildDict ({
propagatedUserEnvPackages = langInputs;
preBuild = ''
# Aspell can't handle multiple data-dirs
# Copy everything we might possibly need
${concatMapStringsSep "\n" (p: ''
cp -a ${p}/lib/aspell/* .
'') ([ aspell ] ++ langInputs)}
export ASPELL_CONF="data-dir $(pwd)"
aspell-create() {
target=$1
shift
echo building $target
aspell create "$@" master ./$target.rws
}
words-only() {
awk -F'\t' '{print $1}' | sort | uniq
}
# drop comments
aspell-affix() {
words-only \
| grep -v '#' \
| aspell-create "$@"
}
# Hack: drop comments and words with affixes
aspell-plain() {
words-only \
| grep -v '#' \
| grep -v '/' \
| aspell-create "$@"
}
aspell-install() {
install -d $out/lib/aspell
for a in "$@"; do
echo installing $a
install -t $out/lib/aspell $a.rws
done
}
'';
phases = [ "preBuild" "buildPhase" "installPhase" ];
} // args);
in rec {
### Languages
ca = buildDict {
shortName = "ca-2.1.5-1";
@ -230,4 +311,53 @@ in {
};
};
### Jargons
en-computers = buildTxtDict rec {
shortName = "en-computers";
fullName = "English Computer Jargon";
src = fetchurl {
url = https://mrsatterly.com/computer.dic;
sha256 = "1vzk7cdvcm9r1c6mgxpabrdcpvghdv9mjmnf6iq5wllcif5nsw2b";
};
langInputs = [ en ];
buildPhase = "cat $src | aspell-affix en-computers --dont-validate-words --lang=en";
installPhase = "aspell-install en-computers";
meta = {
homepage = https://mrsatterly.com/spelling.html;
};
};
en-science = buildTxtDict rec {
shortName = "en-science";
fullName = "English Scientific Jargon";
src1 = fetchurl {
url = http://jpetrie.net/wp-content/uploads/custom_scientific_US.txt;
sha256 = "1psqm094zl4prk2f8h18jv0d471hxykzd1zdnrlx7gzrzy6pz5r3";
};
src2 = fetchurl {
url = http://jpetrie.net/wp-content/uploads/custom_scientific_UK.txt;
sha256 = "17ss1sdr3k70zbyx2z9xf74345slrp41gbkpih8axrmg4x92fgm1";
};
langInputs = [ en ];
buildPhase = ''
cat $src1 | aspell-plain en_US-science --dont-validate-words --lang=en
cat $src2 | aspell-plain en_GB-science --dont-validate-words --lang=en
'';
installPhase = "aspell-install en_US-science en_GB-science";
meta = {
homepage = http://www.jpetrie.net/scientific-word-list-for-spell-checkersspelling-dictionaries/;
};
};
}

View File

@ -0,0 +1,27 @@
{ stdenv, fetchzip, autoreconfHook, which, ocaml, findlib }:
if !stdenv.lib.versionAtLeast ocaml.version "4.02"
then throw "bitv is not available for OCaml ${ocaml.version}"
else
stdenv.mkDerivation rec {
name = "ocaml${ocaml.version}-bitv-${version}";
version = "1.3";
src = fetchzip {
url = "https://github.com/backtracking/bitv/archive/${version}.tar.gz";
sha256 = "0vkh1w9fpi5m1sgiqg6r38j3fqglhdajmbyiyr91113lrpljm75i";
};
buildInputs = [ autoreconfHook which ocaml findlib ];
createFindlibDestdir = true;
meta = {
description = "A bit vector library for OCaml";
license = stdenv.lib.licenses.lgpl21;
homepage = "https://github.com/backtracking/bitv";
maintainers = [ stdenv.lib.maintainers.vbgl ];
inherit (ocaml.meta) platforms;
};
}

View File

@ -4,14 +4,14 @@
with lib;
stdenv.mkDerivation rec {
version = "0.65.0";
version = "0.66.0";
name = "flow-${version}";
src = fetchFromGitHub {
owner = "facebook";
repo = "flow";
rev = "v${version}";
sha256 = "00m9wqfqpnv7p2kz0970254jfaqakb12lsnhk95hw47ghfyb2f7p";
sha256 = "0l1sdd1n0llmz8m81vym3zhcn824sr9w46h9jpb7i7wrcm4y410d";
};
installPhase = ''

View File

@ -4,8 +4,6 @@ assert guileSupport -> ( pkgconfig != null && guile != null );
let
version = "4.2.1";
needGlibcPatch = (stdenv.cc.libc.version or "") == "2.27";
in
stdenv.mkDerivation {
name = "gnumake-${version}";
@ -22,7 +20,7 @@ stdenv.mkDerivation {
# included Makefiles, don't look in /usr/include and friends.
./impure-dirs.patch
./pselect.patch
] ++ stdenv.lib.optional needGlibcPatch ./glibc-2.27.patch;
];
nativeBuildInputs = stdenv.lib.optionals guileSupport [ pkgconfig ];
buildInputs = stdenv.lib.optionals guileSupport [ guile ];

View File

@ -0,0 +1,69 @@
{ stdenv, fetchurl, texinfo, guileSupport ? false, pkgconfig , guile ? null, autoreconfHook }:
assert guileSupport -> ( guile != null );
let
version = "4.2.90";
revision = "48c8a116a914a325a0497721f5d8b58d5bba34d4";
revCount = "2491";
shortRev = "48c8a11";
baseVersion = "4.2.1";
baseTarball = fetchurl {
url = "mirror://gnu/make/make-${baseVersion}.tar.bz2";
sha256 = "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn";
};
in
stdenv.mkDerivation {
name = "gnumake-${version}pre${revCount}_${shortRev}";
src = fetchurl {
url = "http://git.savannah.gnu.org/cgit/make.git/snapshot/make-${revision}.tar.gz";
sha256 = "0k6yvhr2a5lh1qhflv02dyvq5p20ikgaakm8w6gr4xmkspljwpwx";
};
postUnpack = ''
unpackFile ${baseTarball}
cp make-${baseVersion}/po/*.po $sourceRoot/po
cp make-${baseVersion}/doc/{fdl,make-stds}.texi $sourceRoot/doc
'';
patches = [
# Purity: don't look for library dependencies (of the form `-lfoo') in /lib
# and /usr/lib. It's a stupid feature anyway. Likewise, when searching for
# included Makefiles, don't look in /usr/include and friends.
./impure-dirs-head.patch
];
postPatch = ''
# These aren't in the 4.2.1 tarball yet.
sed -i -e 's/sr//' -e 's/zh_TW//' po/LINGUAS
'';
nativeBuildInputs = [ autoreconfHook pkgconfig texinfo ];
buildInputs = stdenv.lib.optional guileSupport guile;
configureFlags = stdenv.lib.optional guileSupport "--with-guile";
outputs = [ "out" "man" "info" ];
meta = with stdenv.lib; {
homepage = http://www.gnu.org/software/make/;
description = "A tool to control the generation of non-source files from sources";
license = licenses.gpl3Plus;
longDescription = ''
Make is a tool which controls the generation of executables and
other non-source files of a program from the program's source files.
Make gets its knowledge of how to build your program from a file
called the makefile, which lists each of the non-source files and
how to compute it from other files. When you write a program, you
should write a makefile for it, so that it is possible to use Make
to build and install the program.
'';
platforms = platforms.all;
maintainers = [ maintainers.vrthra ];
};
}

View File

@ -0,0 +1,31 @@
diff -Naur a/src/read.c b/src/read.c
--- a/src/read.c 2017-11-19 15:17:47.000000000 -0500
+++ b/src/read.c 2018-02-19 08:53:51.548755213 -0500
@@ -109,10 +109,12 @@
#endif
INCLUDEDIR,
#ifndef _AMIGA
+#if 0
"/usr/gnu/include",
"/usr/local/include",
"/usr/include",
#endif
+#endif
0
};
diff -Naur a/src/remake.c b/src/remake.c
--- a/src/remake.c 2017-11-19 15:17:47.000000000 -0500
+++ b/src/remake.c 2018-02-19 08:54:08.304101943 -0500
@@ -1601,9 +1601,11 @@
static const char *dirs[] =
{
#ifndef _AMIGA
+#if 0
"/lib",
"/usr/lib",
#endif
+#endif
#if defined(WINDOWS32) && !defined(LIBDIR)
/*
* This is completely up to the user at product install time. Just define

View File

@ -1,4 +1,4 @@
{ stdenv, fetchFromGitHub, autoreconfHook }: let
{ stdenv, fetchFromGitHub, autoreconfHook, payload ? null }: let
rev = "e5846a2bc707eaa58dc8ab6a8d20a090c6ee8570";
sha256 = "1clynpp70fnbgsjgxx7xi0vrdrj1v0h8zpv0x26i324kp2gwylf4";
revCount = "438";
@ -21,6 +21,9 @@ in stdenv.mkDerivation {
configureScript = "../configure";
configureFlags = stdenv.lib.optional (payload != null)
"--with-payload=${payload}";
hardeningDisable = [ "all" ];
meta = {

View File

@ -0,0 +1,18 @@
{ stdenv, buildPackages, hostPlatform, fetchFromGitHub, perl, buildLinux, libelf, utillinux, ... } @ args:
buildLinux (args // rec {
version = "4.16-rc1";
modDirVersion = "4.16.0-rc1";
extraMeta.branch = "4.16";
src = fetchFromGitHub {
owner = "riscv";
repo ="riscv-linux";
rev = "a31991a9c6ce2c86fd676cf458a0ec10edc20d37";
sha256 = "0n97wfbi3pnp5c70xfj7s0fk8zjjkjz6ldxh7n54kbf64l4in01f";
};
# Should the testing kernels ever be built on Hydra?
extraMeta.hydraPlatforms = [];
} // (args.argsOverride or {}))

View File

@ -155,14 +155,13 @@ let
if platform.kernelTarget == "zImage" || platform.kernelTarget == "Image.gz" then "zinstall" else
"install") ];
postInstall = ''
mkdir -p $dev
cp vmlinux $dev/
'' + (optionalString installsFirmware ''
postInstall = (optionalString installsFirmware ''
mkdir -p $out/lib/firmware
'') + (if (platform ? kernelDTB && platform.kernelDTB) then ''
make $makeFlags "''${makeFlagsArray[@]}" dtbs dtbs_install INSTALL_DTBS_PATH=$out/dtbs
'' else "") + (if isModular then ''
mkdir -p $dev
cp vmlinux $dev/
if [ -z "$dontStrip" ]; then
installFlagsArray+=("INSTALL_MOD_STRIP=1")
fi

View File

@ -72,4 +72,20 @@ rec {
sha256 = "09096npxpgvlwdz3pb3m9brvxh7vy0xc9z9p8hh85xyczyzcsjhr";
};
};
riscv_modules = {
name = "riscv-modules";
patch = ./riscv-modules.patch;
};
riscv_irq_busy = {
name = "riscv-irq-busy";
patch = ./riscv-irq-busy.patch;
};
riscv_install = {
name = "riscv-install";
patch = ./riscv-install.patch;
};
}

View File

@ -0,0 +1,65 @@
commit 365fc1312f4911bfae25c5914c398f9aca21948f
Author: Shea Levy <shea@shealevy.com>
Date: Mon Feb 19 10:50:58 2018 -0500
riscv: Add install target to Makefile.
Signed-off-by: Shea Levy <shea@shealevy.com>
diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
index 6719dd30ec5b..26892daefa05 100644
--- a/arch/riscv/Makefile
+++ b/arch/riscv/Makefile
@@ -70,3 +70,7 @@ core-y += arch/riscv/kernel/ arch/riscv/mm/
libs-y += arch/riscv/lib/
all: vmlinux
+
+PHONY += install
+install: vmlinux
+ sh $(srctree)/arch/riscv/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)"
diff --git a/arch/riscv/install.sh b/arch/riscv/install.sh
new file mode 100644
index 000000000000..8b3155a11a4a
--- /dev/null
+++ b/arch/riscv/install.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# arch/riscv/install.sh
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License. See the file "COPYING" in the main directory of this archive
+# for more details.
+#
+# Copyright (C) 1995 by Linus Torvalds
+#
+# Adapted from code in arch/ia64/Makefile by Shea Levy
+#
+# "make install" script for riscv architecture
+#
+# Arguments:
+# $1 - kernel version
+# $2 - kernel image file
+# $3 - kernel map file
+# $4 - default install path (blank if root directory)
+#
+
+# User may have a custom install script
+
+if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
+if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
+
+# Default install - no bootloader configuration (yet?)
+base=$(basename $2)
+
+if [ -f $4/$base ]; then
+ mv $4/$base $4/$base.old
+fi
+
+if [ -f $4/System.map ]; then
+ mv $4/System.map $4/System.old
+fi
+
+cat $2 > $4/$base
+cp $3 $4/System.map

View File

@ -0,0 +1,42 @@
commit 2603e6087b26e9428b806b267aee6bcb919abcea
Author: Shea Levy <shea@shealevy.com>
Date: Sun Feb 18 20:08:30 2018 -0500
set_handle_irq: Return EBUSY if the handler has already been registered.
This is what's expected by the comments and at least by irq-riscv-intc.c
Signed-off-by: Shea Levy <shea@shealevy.com>
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 2930fd2572e4..77e97872a13e 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -1179,7 +1179,7 @@ int ipi_send_mask(unsigned int virq, const struct cpumask *dest);
* Returns 0 on success, or -EBUSY if an IRQ handler has already been
* registered.
*/
-void __init set_handle_irq(void (*handle_irq)(struct pt_regs *));
+int __init set_handle_irq(void (*handle_irq)(struct pt_regs *));
/*
* Allows interrupt handlers to find the irqchip that's been registered as the
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index dee4f9a172ca..3570c715c3e7 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -213,11 +213,12 @@ irqreturn_t handle_irq_event(struct irq_desc *desc)
}
#ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER
-void __init set_handle_irq(void (*handle_irq)(struct pt_regs *))
+int __init set_handle_irq(void (*handle_irq)(struct pt_regs *))
{
if (handle_arch_irq)
- return;
+ return -EBUSY;
handle_arch_irq = handle_irq;
+ return 0;
}
#endif

View File

@ -0,0 +1,11 @@
diff -Naur linux-4.15.4-orig/arch/riscv/configs/defconfig linux-4.15.4/arch/riscv/configs/defconfig
--- linux-4.15.4-orig/arch/riscv/configs/defconfig 2018-02-16 14:07:01.000000000 -0500
+++ linux-4.15.4/arch/riscv/configs/defconfig 2018-02-18 18:33:09.488431900 -0500
@@ -12,6 +12,7 @@
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
CONFIG_BLK_DEV_INITRD=y
+CONFIG_MODULES=y
CONFIG_EXPERT=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_BPF_SYSCALL=y

View File

@ -118,6 +118,7 @@ in rec {
initialPath = [ bootstrapTools ];
fetchurlBoot = import ../../build-support/fetchurl {
inherit lib;
stdenvNoCC = stage0.stdenv;
curl = bootstrapTools;
};

View File

@ -29,7 +29,8 @@ let inherit (localSystem) system; in
inherit bootstrapTools;
fetchurl = import ../../build-support/fetchurl {
inherit stdenv;
inherit lib;
stdenvNoCC = stdenv;
curl = bootstrapTools;
};

View File

@ -159,7 +159,7 @@ let
executables = listOf str;
outputsToInstall = listOf str;
position = str;
evaluates = bool;
available = bool;
repositories = attrsOf str;
isBuildPythonPackage = platforms;
schedulingPriority = int;

View File

@ -238,9 +238,9 @@ rec {
position = pos.file + ":" + toString pos.line;
# Expose the result of the checks for everyone to see.
} // {
evaluates = validity.valid
available = validity.valid
&& (if config.checkMetaRecursively or false
then lib.all (d: d.meta.evaluates or true) references
then lib.all (d: d.meta.available or true) references
else true);
};

View File

@ -131,7 +131,7 @@ in
};
fetchurl = import ../../build-support/fetchurl {
inherit stdenv;
inherit lib stdenvNoCC;
# Curl should be in /usr/bin or so.
curl = null;
};

View File

@ -126,12 +126,12 @@ in rec {
nixUnstable = (lib.lowPrio (common rec {
name = "nix-2.0${suffix}";
suffix = "pre5951_690ac7c9";
suffix = "pre5968_a6c0b773";
src = fetchFromGitHub {
owner = "NixOS";
repo = "nix";
rev = "690ac7c90b5bf3c599e210c53365c7d229c8b0ff";
sha256 = "1yn2p38kp1i67makbawr1rhdiwihgnvk2zwrz0gvf6q65mj2k89c";
rev = "a6c0b773b72d4e30690e01f1f1dcffc28f2d9ea1";
sha256 = "0i8wcblcjw3291ba6ki4llw3fgm8ylp9q52kajkyr58dih537346";
};
fromGit = true;
})) // { perl-bindings = perl-bindings { nix = nixUnstable; }; };

View File

@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
# Note: libcgroup isn't needed for building, just for the afl-cgroup
# script.
buildInputs = [ makeWrapper clang llvm which ];
buildInputs = [ makeWrapper llvm which ];
buildPhase = ''
make PREFIX=$out
@ -53,8 +53,7 @@ stdenv.mkDerivation rec {
for x in $out/bin/afl-clang-fast $out/bin/afl-clang-fast++; do
wrapProgram $x \
--prefix AFL_PATH : "$out/lib/afl" \
--prefix AFL_CC : "${clang}/bin/clang" \
--prefix AFL_CXX : "${clang}/bin/clang++"
--run 'export AFL_CC=''${AFL_CC:-${clang}/bin/clang} AFL_CXX=''${AFL_CXX:-${clang}/bin/clang++}'
done
'';
@ -76,7 +75,7 @@ stdenv.mkDerivation rec {
'';
homepage = "http://lcamtuf.coredump.cx/afl/";
license = stdenv.lib.licenses.asl20;
platforms = stdenv.lib.platforms.linux;
platforms = ["x86_64-linux" "i686-linux"];
maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
};
}

View File

@ -8,6 +8,8 @@ stdenv.mkDerivation {
sha256 = "1c2nkxx83vmlh1v3ib6r2xqh121gdb1rharwsimcb2h0xwc558dm";
};
outputs = [ "out" "man" ];
makeFlags = "TREE=\$(out) MANTREE=\$(TREE)/share/man";
preBuild = ''

View File

@ -195,7 +195,7 @@ with pkgs;
# `fetchurl' downloads a file from the network.
fetchurl = import ../build-support/fetchurl {
inherit stdenvNoCC;
inherit lib stdenvNoCC;
# On darwin, libkrb5 needs bootstrap_cmds which would require
# converting many packages to fetchurl_boot to avoid evaluation cycles.
curl = buildPackages.curl.override (lib.optionalAttrs stdenv.isDarwin { gssSupport = false; });
@ -7661,7 +7661,10 @@ with pkgs;
gnumake382 = callPackage ../development/tools/build-managers/gnumake/3.82 { };
gnumake3 = gnumake382;
gnumake42 = callPackage ../development/tools/build-managers/gnumake/4.2 { };
gnumake = gnumake42;
gnumake = if hostPlatform.isRiscV # Technically this check should be for glibc version.
then gnumake42HEAD
else gnumake42;
gnumake42HEAD = callPackage ../development/tools/build-managers/gnumake/4.2/head.nix { };
gnustep = recurseIntoAttrs (callPackage ../desktops/gnustep {});
@ -13104,6 +13107,13 @@ with pkgs;
];
};
linux_riscv = callPackage ../os-specific/linux/kernel/linux-riscv.nix {
kernelPatches = [
kernelPatches.bridge_stp_helper
kernelPatches.modinst_arg_list_too_long
] ++ lib.optionals hostPlatform.isRiscV [ kernelPatches.riscv_modules kernelPatches.riscv_irq_busy kernelPatches.riscv_install ];
};
linux_samus_4_12 = callPackage ../os-specific/linux/kernel/linux-samus-4.12.nix {
kernelPatches =
[ kernelPatches.bridge_stp_helper
@ -13321,7 +13331,7 @@ with pkgs;
linux_samus_latest = linuxPackages_samus_latest.kernel;
# A function to build a manually-configured kernel
linuxManualConfig = pkgs.buildLinux;
linuxManualConfig = makeOverridable (callPackage ../os-specific/linux/kernel/manual-config.nix {});
buildLinux = makeOverridable (callPackage ../os-specific/linux/kernel/generic.nix {});
keyutils = callPackage ../os-specific/linux/keyutils { };
@ -13555,6 +13565,10 @@ with pkgs;
riscv-pk = callPackage ../misc/riscv-pk { };
riscv-pk-with-kernel = riscv-pk.override {
payload = "${linux_riscv}/vmlinux";
};
rtkit = callPackage ../os-specific/linux/rtkit { };
rt5677-firmware = callPackage ../os-specific/linux/firmware/rt5677 { };
@ -17164,6 +17178,8 @@ with pkgs;
vte = gnome3.vte;
};
sayonara = callPackage ../applications/audio/sayonara { };
sbagen = callPackage ../applications/misc/sbagen { };
scantailor = callPackage ../applications/graphics/scantailor { };
@ -20661,6 +20677,8 @@ with pkgs;
cc-wrapper-libcxx = callPackage ../test/cc-wrapper { stdenv = llvmPackages.libcxxStdenv; };
cc-wrapper-clang-39 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_39.stdenv; };
cc-wrapper-libcxx-39 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_39.libcxxStdenv; };
cc-wrapper-clang-4 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_4.stdenv; };
cc-wrapper-libcxx-4 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_4.libcxxStdenv; };
cc-wrapper-clang-5 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_5.stdenv; };
cc-wrapper-libcxx-5 = callPackage ../test/cc-wrapper { stdenv = llvmPackages_5.libcxxStdenv; };
stdenv-inputs = callPackage ../test/stdenv-inputs { };

View File

@ -60,6 +60,8 @@ let
bitstring = callPackage ../development/ocaml-modules/bitstring { };
bitv = callPackage ../development/ocaml-modules/bitv { };
bolt = callPackage ../development/ocaml-modules/bolt { };
bos = callPackage ../development/ocaml-modules/bos { };

View File

@ -6301,6 +6301,17 @@ let self = _self // overrides; _self = with self; {
propagatedBuildInputs = [ ExtUtilsDepends ExtUtilsPkgConfig Glib Gtk2 Pango pkgs.gnome2.libglade pkgs.gtk2 ];
meta = {
description = "Create user interfaces directly from Glade XML files";
};
};
Gtk2TrayIcon = buildPerlPackage rec {
name = "Gtk2-TrayIcon-0.06";
src = fetchurl {
url = "mirror://cpan/authors/id/B/BO/BORUP/${name}.tar.gz";
sha256 = "cbb7632b75d7f41554dfe8ee9063dbfd1d8522291077c65d0d82e9ceb5e94ae2";
};
propagatedBuildInputs = [ ExtUtilsDepends ExtUtilsPkgConfig Glib Gtk2 Pango pkgs.gtk2 ];
meta = {
license = stdenv.lib.licenses.gpl2;
};
};

View File

@ -112,6 +112,14 @@ let
jobs.tests.cc-wrapper-clang-39.x86_64-darwin
jobs.tests.cc-wrapper-libcxx-39.x86_64-linux
jobs.tests.cc-wrapper-libcxx-39.x86_64-darwin
jobs.tests.cc-wrapper-clang-4.x86_64-linux
jobs.tests.cc-wrapper-clang-4.x86_64-darwin
jobs.tests.cc-wrapper-libcxx-4.x86_64-linux
jobs.tests.cc-wrapper-libcxx-4.x86_64-darwin
jobs.tests.cc-wrapper-clang-5.x86_64-linux
jobs.tests.cc-wrapper-clang-5.x86_64-darwin
jobs.tests.cc-wrapper-libcxx-5.x86_64-linux
jobs.tests.cc-wrapper-libcxx-5.x86_64-darwin
jobs.tests.cc-multilib-gcc.x86_64-linux
jobs.tests.cc-multilib-clang.x86_64-linux
jobs.tests.stdenv-inputs.x86_64-linux