kefla
This commit is contained in:
parent
3862ba03f0
commit
57d071645f
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1681389457,
|
||||
"narHash": "sha256-Z6TRJ2aI1eRd+kICdrkNyL2aH7XKw8ogzLdtGz1Q9qI=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c58e6fbf258df1572b535ac1868ec42faf7675dd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
14
flake.nix
14
flake.nix
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
description = "Kefla POC";
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
let
|
||||
kefla = import ./kefla nixpkgs;
|
||||
in {
|
||||
packages = kefla {
|
||||
package-all = ./package-all.nix;
|
||||
package-darwin = ./package-darwin.nix;
|
||||
package-linux = ./package-linux.nix;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
nixpkgs: packages:
|
||||
(import ./internal.nix nixpkgs).kefla packages
|
|
@ -0,0 +1,29 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "hello";
|
||||
version = "2.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
|
||||
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${finalAttrs.version}";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.darwin;
|
||||
};
|
||||
})
|
|
@ -0,0 +1,29 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "hello";
|
||||
version = "2.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
|
||||
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${finalAttrs.version}";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
})
|
|
@ -0,0 +1,71 @@
|
|||
nixpkgs:
|
||||
let
|
||||
dummyPkgs = import nixpkgs { system = "x86_64-linux"; };
|
||||
lib = dummyPkgs.lib;
|
||||
in rec {
|
||||
# Collects all the supported for drv leveraging the meta.platforms
|
||||
# Nixpkgs attribute.
|
||||
#
|
||||
# We callPackage the derivation with a dummy Nixpkgs x86_64
|
||||
# instance, regardless of the underlying arch. It doesn't matter
|
||||
# much, we won't build anything here, we just need callPackage to
|
||||
# evaluate the meta attributes.
|
||||
collectPlatformsForDrv = drv: (dummyPkgs.callPackage drv {}).meta.platforms;
|
||||
|
||||
# Generates the flake outputs for PATH for each PLATFORMS platform.
|
||||
# IE. from
|
||||
# {
|
||||
# path = /tmp/dummy/path;
|
||||
# pathName = "hello";
|
||||
# platforms = [ "x86_64-linux""aarch64-linux"];
|
||||
# };
|
||||
#
|
||||
# We get:
|
||||
#
|
||||
# {
|
||||
# aarch64-linux = { hello = /tmp/dummy/path; };
|
||||
# x86_64-linux = { hello = /tmp/dummy/path; };
|
||||
# }
|
||||
genFlakeOutputForPlatforms = { path, name, platforms }:
|
||||
lib.genAttrs platforms (platform: { ${name} = path; });
|
||||
|
||||
# Goes through a flake-like packages output attrs to inject the
|
||||
# relevant callPackage function call. Obviously, this callPackage
|
||||
# function is platform-dependant, we'll instantiate a different one
|
||||
# for each platform subtree.
|
||||
injectCallPackage = packages:
|
||||
let
|
||||
injectPlatformCallPackage = { attrs, platform }:
|
||||
let
|
||||
pkgs = import nixpkgs { system = platform; };
|
||||
callPackage = pkgs.lib.callPackageWith pkgs;
|
||||
in builtins.mapAttrs (_name: value: callPackage value {}) attrs;
|
||||
in builtins.mapAttrs (name: value:
|
||||
injectPlatformCallPackage { attrs = value; platform = name; }) packages;
|
||||
|
||||
#
|
||||
|
||||
kefla = packagesOutput:
|
||||
let
|
||||
packagesWithoutCallPackage = lib.foldlAttrs
|
||||
(acc: name: path:
|
||||
let
|
||||
platforms = collectPlatformsForDrv path;
|
||||
packageOutput = genFlakeOutputForPlatforms { inherit path platforms name; };
|
||||
in lib.recursiveUpdate acc packageOutput)
|
||||
{ }
|
||||
packagesOutput;
|
||||
in injectCallPackage packagesWithoutCallPackage;
|
||||
}
|
||||
|
||||
# lib.foldlAttrs
|
||||
# (acc: name: value:
|
||||
# let
|
||||
# platforms = (dummyPkgs.callPackage value {}).meta.platforms;
|
||||
# # TODO: découper ça avec des tests intermediaires.
|
||||
# entries = lib.genAttrs platforms (platform: )
|
||||
# in builtins.trace platforms (lib.recursiveUpdate acc { hello = platforms; }))
|
||||
# {}
|
||||
# packages
|
||||
|
||||
# }
|
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env bash
|
||||
nix-instantiate --eval --strict test.nix
|
|
@ -0,0 +1,27 @@
|
|||
let
|
||||
nixpkgs = <nixpkgs>;
|
||||
pkgs = import nixpkgs { };
|
||||
internal = import ./internal.nix nixpkgs;
|
||||
fixtures = {
|
||||
testDrv = import ./fixtures/test-drv.nix;
|
||||
testDrvDarwin = import ./fixtures/test-drv-darwin.nix;
|
||||
};
|
||||
in pkgs.lib.runTests {
|
||||
# CollectPlatforms
|
||||
##################
|
||||
testCollectPlatformsAllDrv = {
|
||||
expr = internal.collectPlatformsForDrv fixtures.testDrv ;
|
||||
expected = [ "i686-cygwin" "x86_64-cygwin" "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin" "i686-freebsd13" "x86_64-freebsd13" "aarch64-genode" "i686-genode" "x86_64-genode" "x86_64-solaris" "javascript-ghcjs" "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "m68k-linux" "microblaze-linux" "microblazeel-linux" "mipsel-linux" "mips64el-linux" "powerpc64-linux" "powerpc64le-linux" "riscv32-linux" "riscv64-linux" "s390-linux" "s390x-linux" "x86_64-linux" "mmix-mmixware" "aarch64-netbsd" "armv6l-netbsd" "armv7a-netbsd" "armv7l-netbsd" "i686-netbsd" "m68k-netbsd" "mipsel-netbsd" "powerpc-netbsd" "riscv32-netbsd" "riscv64-netbsd" "x86_64-netbsd" "aarch64_be-none" "aarch64-none" "arm-none" "armv6l-none" "avr-none" "i686-none" "microblaze-none" "microblazeel-none" "msp430-none" "or1k-none" "m68k-none" "powerpc-none" "powerpcle-none" "riscv32-none" "riscv64-none" "rx-none" "s390-none" "s390x-none" "vc4-none" "x86_64-none" "i686-openbsd" "x86_64-openbsd" "x86_64-redox" "wasm64-wasi" "wasm32-wasi" "x86_64-windows" "i686-windows" ];
|
||||
};
|
||||
testCollectPlatformsDarwinDrv = {
|
||||
expr = internal.collectPlatformsForDrv fixtures.testDrvDarwin ;
|
||||
expected = [ "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin" ];
|
||||
};
|
||||
|
||||
# genFlakeOutputForPlatforms
|
||||
############################
|
||||
testGenFlakeOutputForPlatforms = {
|
||||
expr = internal.genFlakeOutputForPlatforms { path = /tmp/dummy/path; name = "hello"; platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux"]; };
|
||||
expected = { aarch64-linux = { hello = /tmp/dummy/path; }; x86_64-darwin = { hello = /tmp/dummy/path; }; x86_64-linux = { hello = /tmp/dummy/path; };};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "hello";
|
||||
version = "2.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
|
||||
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${finalAttrs.version}";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
})
|
|
@ -0,0 +1,29 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "hello";
|
||||
version = "2.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
|
||||
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${finalAttrs.version}";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.darwin;
|
||||
};
|
||||
})
|
|
@ -0,0 +1,29 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "hello";
|
||||
version = "2.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
|
||||
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${finalAttrs.version}";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
})
|
Loading…
Reference in New Issue