nix: setup Nix Flake file
* flake.nix, flake.lock: here
This commit is contained in:
parent
c4e3509d18
commit
932f670f86
2 changed files with 275 additions and 0 deletions
61
flake.lock
generated
Normal file
61
flake.lock
generated
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1741196730,
|
||||
"narHash": "sha256-0Sj6ZKjCpQMfWnN0NURqRCQn2ob7YtXTAOTwCuz7fkA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "48913d8f9127ea6530a2a2f1bd4daa1b8685d8a3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-24.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
214
flake.nix
Normal file
214
flake.nix
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||
flake-utils.lib.eachSystem
|
||||
[
|
||||
"x86_64-linux"
|
||||
]
|
||||
|
||||
(system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
lib = pkgs.lib;
|
||||
|
||||
mkSpotApps = appNames:
|
||||
pkgs.lib.genAttrs appNames
|
||||
(name: flake-utils.lib.mkApp {
|
||||
drv = self.packages.${system}.spot;
|
||||
name = name;
|
||||
});
|
||||
|
||||
spotPackage =
|
||||
let
|
||||
inherit (builtins)
|
||||
filter
|
||||
head
|
||||
isString
|
||||
match
|
||||
readFile
|
||||
split
|
||||
;
|
||||
|
||||
# NOTE: Maintaining the version separately would be a pain, and we
|
||||
# can't have a flake.nix.in with a @VERSION@ because it would make
|
||||
# the flake unusable without running autoconf first, defeating some
|
||||
# of its purpose.
|
||||
#
|
||||
# So let's get it the hard way instead :)
|
||||
extractVersionRegex = ''^AC_INIT\(\[spot], \[([^]]+)], \[spot@lrde\.epita\.fr]\)$'';
|
||||
getLines = (fileContent:
|
||||
filter isString (split "\n" fileContent)
|
||||
);
|
||||
findVersionLine = (lines:
|
||||
lib.lists.findFirst
|
||||
(l: lib.strings.hasPrefix "AC_INIT(" l)
|
||||
null
|
||||
lines
|
||||
);
|
||||
getVersion = (file:
|
||||
let
|
||||
lines = getLines (readFile file);
|
||||
versionLine = findVersionLine lines;
|
||||
version = head (match extractVersionRegex versionLine);
|
||||
in
|
||||
version
|
||||
);
|
||||
in
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
stdenv,
|
||||
# FIXME: do we want this flag?
|
||||
buildOrgDoc ? false,
|
||||
# Whether to enable Spot's Python 3 bindings
|
||||
enablePython ? false
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
pname = "spot";
|
||||
version = getVersion ./configure.ac;
|
||||
|
||||
src = self;
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
# NOTE: Nix enables a lot of hardening flags by default, some of
|
||||
# these probably harm performance so I've disabled everything
|
||||
# (haven't benchmarked with vs without these, though).
|
||||
hardeningDisable = [ "all" ];
|
||||
|
||||
# NOTE: mktexpk fails without a HOME set
|
||||
preBuild = ''
|
||||
export HOME=$TMPDIR
|
||||
patchShebangs tools
|
||||
'' + (if buildOrgDoc then ''
|
||||
ln -s ${pkgs.plantuml}/lib/plantuml.jar doc/org/plantuml.jar
|
||||
'' else ''
|
||||
touch doc/org-stamp
|
||||
'');
|
||||
|
||||
configureFlags = [
|
||||
"--disable-devel"
|
||||
"--enable-optimizations"
|
||||
] ++ lib.optional (!enablePython) [
|
||||
"--disable-python"
|
||||
];
|
||||
|
||||
nativeBuildInputs = with pkgs; [
|
||||
autoreconfHook
|
||||
|
||||
autoconf
|
||||
automake
|
||||
bison
|
||||
flex
|
||||
libtool
|
||||
perl
|
||||
] ++ lib.optional buildOrgDoc [
|
||||
graphviz
|
||||
groff
|
||||
plantuml
|
||||
pdf2svg
|
||||
R
|
||||
] ++ lib.optional enablePython [
|
||||
python3
|
||||
swig4
|
||||
];
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
# should provide the minimum amount of packages necessary for
|
||||
# building tl.pdf
|
||||
(texlive.combine {
|
||||
inherit (texlive)
|
||||
scheme-basic
|
||||
latexmk
|
||||
|
||||
booktabs
|
||||
cm-super
|
||||
doi
|
||||
doublestroke
|
||||
etoolbox
|
||||
koma-script
|
||||
mathabx-type1
|
||||
mathpazo
|
||||
metafont
|
||||
microtype
|
||||
nag
|
||||
pgf
|
||||
standalone
|
||||
stmaryrd
|
||||
tabulary
|
||||
todonotes
|
||||
wasy-type1
|
||||
wasysym
|
||||
;
|
||||
})
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
defaultPackage = self.packages.${system}.spot;
|
||||
|
||||
packages = {
|
||||
# binaries + library only
|
||||
spot = pkgs.callPackage spotPackage {};
|
||||
|
||||
# NOTE: clang build is broken on Nix when linking to stdlib++, using
|
||||
# libcxx instead. See:
|
||||
# https://github.com/NixOS/nixpkgs/issues/91285
|
||||
spotClang = pkgs.callPackage spotPackage {
|
||||
stdenv = pkgs.llvmPackages.libcxxStdenv;
|
||||
};
|
||||
|
||||
spotWithOrgDoc = pkgs.callPackage spotPackage {
|
||||
buildOrgDoc = true;
|
||||
};
|
||||
|
||||
spotWithPython = pkgs.python3Packages.toPythonModule (
|
||||
pkgs.callPackage spotPackage {
|
||||
enablePython = true;
|
||||
}
|
||||
);
|
||||
|
||||
spotFull = pkgs.python3Packages.toPythonModule (
|
||||
pkgs.callPackage spotPackage {
|
||||
buildOrgDoc = true; enablePython = true;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
apps = mkSpotApps [
|
||||
"autcross"
|
||||
"autfilt"
|
||||
"dstar2tgba"
|
||||
"genaut"
|
||||
"genltl"
|
||||
"ltl2tgba"
|
||||
"ltl2tgta"
|
||||
"ltlcross"
|
||||
"ltldo"
|
||||
"ltlfilt"
|
||||
"ltlgrind"
|
||||
"ltlmix"
|
||||
"ltlsynt"
|
||||
"randaut"
|
||||
"randltl"
|
||||
];
|
||||
|
||||
devShell = pkgs.mkShell {
|
||||
name = "spot-dev";
|
||||
inputsFrom = [ self.packages.${system}.spotFull ];
|
||||
buildInputs = [
|
||||
pkgs.gdb
|
||||
pkgs.clang-tools # for clangd
|
||||
pkgs.bear
|
||||
|
||||
(pkgs.python3.withPackages (p: [
|
||||
p.jupyter
|
||||
p.ipython # otherwise ipython module isn't found when running ipynb tests
|
||||
]))
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue