aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xdefault.nix108
-rw-r--r--flake.nix6
-rw-r--r--makefile19
-rw-r--r--nix/dub.selections.nix2
-rw-r--r--nix/mkDub.nix108
-rw-r--r--nix/pkglst/shell-pkgs.nix16
-rwxr-xr-xnix/shell/shell_spine.nix18
-rw-r--r--org/spine_build_scaffold.org742
-rwxr-xr-xproject.nix40
-rwxr-xr-xshell.nix14
-rwxr-xr-xspine.nix150
-rw-r--r--src/build_depends/dub2nix.meta3
-rw-r--r--src/build_depends/dub2nix/.github/workflows/main.yml31
-rw-r--r--src/build_depends/dub2nix/.gitignore5
-rw-r--r--src/build_depends/dub2nix/LICENSE21
-rw-r--r--src/build_depends/dub2nix/README.md82
-rw-r--r--src/build_depends/dub2nix/default.nix2
-rw-r--r--src/build_depends/dub2nix/dub.json15
-rw-r--r--src/build_depends/dub2nix/dub.selections.json7
-rw-r--r--src/build_depends/dub2nix/dub.selections.nix26
-rw-r--r--src/build_depends/dub2nix/dub2nix.nix17
-rw-r--r--src/build_depends/dub2nix/mkDub.nix121
-rw-r--r--src/build_depends/dub2nix/shell.nix16
-rw-r--r--src/build_depends/dub2nix/src/dub2nix.d263
-rw-r--r--src/build_depends/shaHEADdep_dub2nix1
25 files changed, 356 insertions, 1477 deletions
diff --git a/default.nix b/default.nix
index f3ad1cd..fa1969f 100755
--- a/default.nix
+++ b/default.nix
@@ -1,22 +1,110 @@
-{ pkgs ? import <nixpkgs> {} }:
-with import ./nix/mkDub.nix { inherit pkgs; };
+#!/usr/bin/env -S nix-build
+{ pkgs ? import <nixpkgs> {},
+ stdenv ? pkgs.stdenv,
+ lib ? pkgs.lib,
+ ldc ? null,
+ dcompiler ? pkgs.ldc,
+ dub ? pkgs.dub
+}:
+assert dcompiler != null;
+with (
+ assert dcompiler != null;
+ with lib;
+ let
+ # Filter function to remove the .dub package folder from src
+ filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
+ type == "directory" && baseName == ".dub"
+ );
+ targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
+ # Remove reference to build tools and library sources
+ disallowedReferences = deps: [ dcompiler dub ];
+ removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
+ in {
+ mkDubDerivation = lib.makeOverridable ({
+ src,
+ nativeBuildInputs ? [],
+ dubJSON ? src + "/dub.json",
+ passthru ? {},
+ package ? lib.importJSON dubJSON,
+ ...
+ } @ attrs: stdenv.mkDerivation (attrs // {
+ pname = package.name;
+ nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
+ disallowedReferences = disallowedReferences deps;
+ passthru = passthru // {
+ inherit dub dcompiler pkgs;
+ };
+ src = lib.cleanSourceWith {
+ filter = filterDub;
+ src = lib.cleanSource src;
+ };
+ preFixup = ''
+ find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
+ '';
+ buildPhase = ''
+ runHook preBuild
+ export HOME=$PWD
+ for dc_ in dmd ldmd2 gdmd; do
+ echo "- check for D compiler $dc_"
+ dc=$(type -P $dc_ || echo "")
+ if [ ! "$dc" == "" ]; then
+ break
+ fi
+ done
+ if [ "$dc" == "" ]; then
+ exit "Error: could not find D compiler"
+ fi
+ echo "$dc_ used as D compiler to build $pname"
+ dub build --compiler=$dc --build=release --combined --skip-registry=all
+ runHook postBuild
+ '';
+ checkPhase = ''
+ runHook preCheck
+ export HOME=$PWD
+ dub test --combined --skip-registry=all
+ runHook postCheck
+ '';
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/bin
+ cp -r "${targetOf package}" $out/bin
+ runHook postInstall
+ '';
+ meta = lib.optionalAttrs (package ? description) {
+ description = package.description;
+ } // attrs.meta or {};
+ } // lib.optionalAttrs (!(attrs ? version)) {
+ # Use name from dub.json, unless pname and version are specified
+ name = package.name;
+ }));
+ }
+);
mkDubDerivation rec {
name = "spine-${version}";
version = "0.11.3";
src = ./.;
buildInputs = [
pkgs.sqlite
- (import ./nix/pkglst/shell-pkgs.nix { inherit pkgs; })
+ (
+ with pkgs; [
+ nixFlakes
+ rund
+ dub
+ ldc
+ sqlite
+ ]
+ )
];
- # installPhase = ''
- # install -m755 -D spine $out/bin/spine
- # echo "built $out/bin/spine"
- # '';
+ # buildPhase = [ ];
+ installPhase = ''
+ install -m755 -D spine $out/bin/spine
+ echo "built $out/bin/spine"
+ '';
meta = with pkgs.lib; {
- homepage = https://sisudoc.org;
+ homepage = https://sisudoc.org;
description = "a sisu like document parser";
- license = licenses.agpl3Plus;
- platforms = platforms.linux;
+ license = licenses.agpl3Plus;
+ platforms = platforms.linux;
maintainers = [ RalphAmissah ];
};
}
diff --git a/flake.nix b/flake.nix
index aa8bf39..759fb8b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,12 +3,8 @@
inputs = {
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "/nixpkgs-ra/nixpkgs";
- dub2nix-src = {
- url = "github:lionello/dub2nix";
- flake = false;
- };
};
- outputs = { self, dub2nix-src, nixpkgs, flake-utils }:
+ outputs = { self, nixpkgs, flake-utils }:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
diff --git a/makefile b/makefile
index 40d1026..400d0cf 100644
--- a/makefile
+++ b/makefile
@@ -133,25 +133,6 @@ get_depends:
fi; \
fi; \
done; \
- ewd="$${hwd}/src/build_depends" && \
- dirs=$$(echo `ls -gx $${ewd}`) && \
- cd $${ewd} && \
- for dir in $${dirs}; do \
- if [ -d $${dir} ]; then \
- echo $${dir} && \
- if [[ "dub2nix" == $${dir} ]]; then \
- echo $${dir} && \
- rm -rf $${dir} && \
- git clone --depth=1 https://github.com/lionello/$${dir} && \
- cd $${dir} && \
- echo "$${dir} `git rev-parse HEAD | cut -c 1-8`" > ../$${dir}.meta && \
- echo "https://github.com/lionello/$${dir}" >> ../$${dir}.meta && \
- echo "MIT License" >> ../$${dir}.meta && \
- cd $${ewd} && \
- rm -rf $${dir}/.git; \
- fi; \
- fi; \
- done; \
cd $${hwd}
set_depends: get_depends
dub describe | sed 's~$(shell echo `pwd | sed 's_/_\\/_g'`)~.~g' > dub_describe.json
diff --git a/nix/dub.selections.nix b/nix/dub.selections.nix
deleted file mode 100644
index 9316b60..0000000
--- a/nix/dub.selections.nix
+++ /dev/null
@@ -1,2 +0,0 @@
-# This file was generated by https://github.com/lionello/dub2nix v0.2.3
-[ ]
diff --git a/nix/mkDub.nix b/nix/mkDub.nix
deleted file mode 100644
index 2121166..0000000
--- a/nix/mkDub.nix
+++ /dev/null
@@ -1,108 +0,0 @@
-{ pkgs ? import <nixpkgs> {},
- stdenv ? pkgs.stdenv,
- lib ? pkgs.lib,
- ldc ? null,
- dcompiler ? pkgs.ldc,
- dub ? pkgs.dub
-}:
-assert dcompiler != null;
-with stdenv lib;
-let
- # Filter function to remove the .dub package folder from src
- filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
- type == "directory" && baseName == ".dub"
- );
- # Convert a GIT rev string (tag) to a simple semver version
- rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""];
- dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; };
- # Fetch a dependency (source only for now)
- fromDub = dubDep: mkDerivation rec {
- name = "${src.name}-${version}";
- version = rev-to-version dubDep.fetch.rev;
- nativeBuildInputs = [ dcompiler dub ];
- src = dep2src dubDep;
- buildPhase = ''
- runHook preBuild
- export HOME=$NIX_BUILD_TOP
- #export HOME=$PWD
- dub build -b=release
- runHook postBuild
- '';
- # outputs = [ "lib" ];
- # installPhase = ''
- # runHook preInstall
- # mkdir -p $out/bin
- # runHook postInstall
- # '';
- };
- # Adds a local package directory (e.g. a git repository) to Dub
- dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}";
- # The target output of the Dub package
- targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
- # Remove reference to build tools and library sources
- disallowedReferences = deps: [ dcompiler dub ] ++ builtins.map dep2src deps;
- removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
-in {
- inherit fromDub;
- mkDubDerivation = lib.makeOverridable ({
- src,
- nativeBuildInputs ? [],
- dubJSON ? src + "/dub.json",
- selections ? src + "/nix/dub.selections.nix",
- deps ? import selections,
- passthru ? {},
- package ? lib.importJSON dubJSON,
- ...
- } @ attrs: stdenv.mkDerivation (attrs // {
- pname = package.name;
- nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
- disallowedReferences = disallowedReferences deps;
- passthru = passthru // {
- inherit dub dcompiler pkgs;
- };
- src = lib.cleanSourceWith {
- filter = filterDub;
- src = lib.cleanSource src;
- };
- preFixup = ''
- find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
- '';
- buildPhase = ''
- runHook preBuild
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- for dc_ in dmd ldmd2 gdmd; do
- echo "- check for D compiler $dc_"
- dc=$(type -P $dc_ || echo "")
- if [ ! "$dc" == "" ]; then
- break
- fi
- done
- if [ "$dc" == "" ]; then
- exit "Error: could not find D compiler"
- fi
- echo "$dc_ used as D compiler to build $pname"
- dub build --compiler=$dc --build=release --combined --skip-registry=all
- runHook postBuild
- '';
- checkPhase = ''
- runHook preCheck
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- dub test --combined --skip-registry=all
- runHook postCheck
- '';
- installPhase = ''
- runHook preInstall
- mkdir -p $out/bin
- cp -r "${targetOf package}" $out/bin
- runHook postInstall
- '';
- meta = lib.optionalAttrs (package ? description) {
- description = package.description;
- } // attrs.meta or {};
- } // lib.optionalAttrs (!(attrs ? version)) {
- # Use name from dub.json, unless pname and version are specified
- name = package.name;
- }));
-}
diff --git a/nix/pkglst/shell-pkgs.nix b/nix/pkglst/shell-pkgs.nix
deleted file mode 100644
index b11ae94..0000000
--- a/nix/pkglst/shell-pkgs.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{ pkgs ? import <nixpkgs> {} }:
-let
- dub2nix-src = ./src/build_depends/dub2nix/.;
- dub2nix = (import dub2nix-src) { inherit pkgs; };
-in
-with pkgs; [
- nixFlakes
- rund
- dub
- ldc
- sqlite
- nix-prefetch-git
- validatePkgConfig
- jq
- git
-]
diff --git a/nix/shell/shell_spine.nix b/nix/shell/shell_spine.nix
deleted file mode 100755
index 766f6ee..0000000
--- a/nix/shell/shell_spine.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{ pkgs ? import <nixpkgs> {} }:
-pkgs.mkShell {
- buildInputs = with pkgs; [
- (import ../pkglst/shell-pkgs.nix { inherit pkgs; })
- ];
- buildPhase = "nix build -f default.nix";
- shellHook = ''
- if [[ -e ".envrc" ]]; then
- source .envrc
- fi
- nix-build
- RUN="./result/bin/spine --very-verbose --theme-light --html --epub --sqlite-discrete --output=/tmp/www ./data/pod/sisu-spine-markup"
- $RUN
- echo "built spine ... @ ./result/bin/spine"
- echo "& (tested with) run:"
- echo " $RUN"
- '';
-}
diff --git a/org/spine_build_scaffold.org b/org/spine_build_scaffold.org
index be0bbab..0b8f763 100644
--- a/org/spine_build_scaffold.org
+++ b/org/spine_build_scaffold.org
@@ -394,25 +394,6 @@ get_depends:
fi; \
fi; \
done; \
- ewd="$${hwd}/src/build_depends" && \
- dirs=$$(echo `ls -gx $${ewd}`) && \
- cd $${ewd} && \
- for dir in $${dirs}; do \
- if [ -d $${dir} ]; then \
- echo $${dir} && \
- if [[ "dub2nix" == $${dir} ]]; then \
- echo $${dir} && \
- rm -rf $${dir} && \
- git clone --depth=1 https://github.com/lionello/$${dir} && \
- cd $${dir} && \
- echo "$${dir} `git rev-parse HEAD | cut -c 1-8`" > ../$${dir}.meta && \
- echo "https://github.com/lionello/$${dir}" >> ../$${dir}.meta && \
- echo "MIT License" >> ../$${dir}.meta && \
- cd $${ewd} && \
- rm -rf $${dir}/.git; \
- fi; \
- fi; \
- done; \
cd $${hwd}
set_depends: get_depends
dub describe | sed 's~$(shell echo `pwd | sed 's_/_\\/_g'`)~.~g' > dub_describe.json
@@ -2052,67 +2033,6 @@ tinyendian_dep = declare_dependency(
- default.nix
- shell.nix
-- dub2.nix
-
-** dub2nix notes (from author (Lionello Lunesu) email reply, 2020-10-12) NOTE
-
-- https://github.com/lionello/dub2nix
-
-- see shell.nix minimal content:
-
-- run: nix-shell
-
-- run: dub init
-
-- add d2sqlite3 dependency (provide as dependency during “dub init” or add it to
- the dub.json manually)
-
-#+BEGIN_SRC json :NO-tangle ../dub.json
-{
- "authors": [
- "Ralph Amissah"
- ],
- "copyright": "Copyright © 2021, Ralph Amissah",
- "description": "A minimal D application.",
- "license": "AGPL-3",
- "name": "d2sqlite3_dub2nix",
- "dependencies": {
- "d2sqlite3": "~><<version_d2sqlite3>>"
- },
- "subConfigurations": {
- "d2sqlite3": "with-lib"
- }
-}
-#+END_SRC
-
-- run: dub build
-
-- run: dub2nix save
- creates: dub.selections.nix
-
-- Create a new file default.nix with this content:
-
-#+BEGIN_SRC nix :NO-tangle default.nix
-{ pkgs ? import <nixpkgs> {} }:
-with import ./mkDub.nix { inherit pkgs; };
-mkDubDerivation {
- src = ./.;
- buildInputs = [
- pkgs.sqlite
- ];
-}
-#+END_SRC
-
-- Copy mkDub.nix from the dub2nix project.
-
-#+BEGIN_SRC sh
-aria2c https://raw.githubusercontent.com/lionello/dub2nix/master/mkDub.nix
-#+END_SRC
-
-make modificatons if desired
-
-- run: nix-build
- nix-build -I nixpkgs=[path-to]/nixpkgs
** envrc :envrc:
*** .envrc
@@ -2179,6 +2099,7 @@ fi
export NIX_PATH=/nix/var/nix/profiles/per-user/root/channels/nixos
#export NIX_PATH=nixpkgs=<<nixpkgs_path>>
## reload when these files change
+use flake
watch_file flake.nix
# watch_file flake.lock
## load the flake devShell
@@ -2188,6 +2109,7 @@ export SpineVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1
export SpineSRC=<<project_path_local_src>>
export SpineDOC=<<project_path_local_doc>>
export SpineOUT=<<project_path_local_out>>
+export SpineOUTstatic=<<project_path_local_out_static>>
echo '-*- mode: org -*-
@@ -2209,6 +2131,8 @@ echo '
nix-instantiate | nix-build
nix build `nix-instantiate`
+ nix develop
+
nix-instantiate | nix show-derivation | jq
nix-instantiate | nix show-derivation --recursive | jq
@@ -2224,6 +2148,7 @@ echo '
SpineSRC=<<project_path_local_src>>
SpineDOC=<<project_path_local_doc>>
SpineOUT=<<project_path_local_out>>
+ SpineOUTstatic=<<project_path_local_out_static>>
,* spine run instruction examples
,** parallelized tasks
@@ -2264,14 +2189,38 @@ echo '
- composite command: source pod, html, epub, harvest, sqlite
$SpineSRC/result/bin/spine --verbose --no-parallel --dark --pod --epub --html --html-link-harvest --harvest --sqlite-discrete --output="$SpineOUT" $SpineDOC/markup/pod/*
-,** config [./pod/].dr/config_local_site
+,** cgi operations (output to $SpineOUTstatic /var/www)
cat $SpineDOC/markup/pod/.dr/config_local_site
$SpineSRC/result/bin/spine --show-config $SpineDOC/markup/pod
$SpineSRC/result/bin/spine --show-config --output="$SpineOUT" $SpineDOC/markup/pod
+,** cgi operations (output to /var/www)
+
+ $SpineSRC/result/bin/spine --very-verbose --sqlite-db-create --output="$SpineOUTstatic" $SpineDOC/markup/pod/*
+
+ $SpineSRC/result/bin/spine -v --cgi-search-form-codegen --output=$SpineOUTstatic/html $SpineDOC/markup/pod/*
+
+ $SpineSRC/result/bin/spine -v --show-config --config=$SpineDOC/markup/pod/.dr
+
+ $SpineSRC/result/bin/spine --html $SpineDOC/markup/pod/*
+
+ $SpineSRC/result/bin/spine -v --sqlite-db-create --sqlite-filename="spine.search.db" --output="$SpineOUTstatic/html" $SpineDOC/markup/pod/*
+
+ $SpineSRC/result/bin/spine -v --sqlite-db-create --sqlite-filename="spine.search.db" --cgi-sqlite-search-filename="spine-search" --output=$SpineOUTstatic/html $SpineDOC/markup/pod/*
+
+ $SpineSRC/result/bin/spine -v --sqlite-db-recreate --sqlite-filename="spine.search.db" --cgi-sqlite-search-filename="spine-search" --output=$SpineOUTstatic/html $SpineDOC/markup/pod/*
+
+ $SpineSRC/result/bin/spine -v --sqlite-update --sqlite-filename="spine.search.db" --output=$SpineOUTstatic/html $SpineDOC/markup/pod/*
+
+ - make search form
+ $SpineSRC/result/bin/spine -v --cgi-search-form-codegen --config=$SpineDOC/markup/pod/.dr/config_local_site
+ - generate html linked to search form
+ $SpineSRC/result/bin/spine -v --html --html-link-search --html-link-harvest --harvest --output=$SpineOUTstatic/html $SpineDOC/markup/pod/*
+
' >> SHELL_NIX_NOTE_
cat SHELL_NIX_NOTE_
+echo "cat SHELL_NIX_NOTE_"
#+END_SRC
@@ -2318,6 +2267,11 @@ cat SHELL_NIX_NOTE_
/tmp/spine/$SpineVER/www
#+END_SRC
+#+NAME: project_path_local_out_static
+#+BEGIN_SRC nix
+/var/www
+#+END_SRC
+
** flake :flake:
- flake.nix
@@ -2327,9 +2281,7 @@ cat SHELL_NIX_NOTE_
./pkgs/shell-pkgs.nix
- pkgs/shell-pkgs.nix
- default.nix
- ./nix/mkDub.nix
- - mkdub.nix
- ./nix/dub.selections.nix
+ ./nix/dub.selections.nix #
- dub.selections.nix
nix develop
@@ -2342,12 +2294,8 @@ nix flake update
inputs = {
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "/nixpkgs-ra/nixpkgs";
- dub2nix-src = {
- url = "github:lionello/dub2nix";
- flake = false;
- };
};
- outputs = { self, dub2nix-src, nixpkgs, flake-utils }:
+ outputs = { self, nixpkgs, flake-utils }:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
@@ -2387,12 +2335,8 @@ nix flake update
url = "github:lgvz/imageformats";
flake = false;
};
- dub2nix-src = {
- url = "github:lionello/dub2nix";
- flake = false;
- };
};
- outputs = { self, d2sqlite3, tinyendian, dyaml, imageformats, dub2nix-src, nixpkgs, flake-utils }:
+ outputs = { self, d2sqlite3, tinyendian, dyaml, imageformats, nixpkgs, flake-utils }:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
@@ -2479,7 +2423,19 @@ nix flake update
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = with pkgs; [
- (import ./nix/pkglst/shell-pkgs.nix { inherit pkgs; })
+ (
+ with pkgs; [
+ nixFlakes
+ rund
+ dub
+ ldc
+ sqlite
+ nix-prefetch-git
+ validatePkgConfig
+ jq
+ git
+ ]
+ )
];
shellHook = ''
if [[ -e ".envrc" ]]; then
@@ -2489,7 +2445,6 @@ pkgs.mkShell {
}
#+END_SRC
-
#+BEGIN_SRC nix :NO-tangle ../shell.nix :tangle-mode (identity #o755) :-shebang "#!/usr/bin/env -S nix-shell"
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
@@ -2505,101 +2460,6 @@ pkgs.mkShell {
nix-instantiate | nix show-derivation | jq
'';
}
-
-nix-shell nix/shell/shell_spine.nix --pure
-
-#+BEGIN_SRC nix :tangle ../nix/shell/shell_spine.nix :tangle-mode (identity #o755) :-shebang "#!/usr/bin/env -S nix-shell"
-{ pkgs ? import <nixpkgs> {} }:
-pkgs.mkShell {
- buildInputs = with pkgs; [
- (import ../pkglst/shell-pkgs.nix { inherit pkgs; })
- ];
- buildPhase = "nix build -f default.nix";
- shellHook = ''
- if [[ -e ".envrc" ]]; then
- source .envrc
- fi
- nix-build
- RUN="./result/bin/spine --very-verbose --theme-light --html --epub --sqlite-discrete --output=/tmp/www ./data/pod/sisu-spine-markup"
- $RUN
- echo "built spine ... @ ./result/bin/spine"
- echo "& (tested with) run:"
- echo " $RUN"
- '';
-}
-#+END_SRC
-
-- combining shell.nix & default.nix to build package:
-
-#+BEGIN_SRC nix :NO-tangle ../shell.nix :tangle-mode (identity #o755) :shebang "#!/usr/bin/env -S nix-shell"
-#!/usr/bin/env -S nix-shell
-{ pkgs ? import <nixpkgs> {} }:
-with import ./nix/mkDub.nix { inherit pkgs; };
-mkDubDerivation rec {
- name = "spine-${version}";
- version = "<<version_spine>>";
- src = ./.;
- buildInputs = with pkgs; [(
- import ./nix/pkglst/shell-pkgs.nix
- { inherit pkgs; }
- )];
- meta = with pkgs.lib; {
- homepage = https://sisudoc.org;
- description = "a sisu like document parser";
- license = licenses.agpl3Plus;
- platforms = platforms.linux;
- maintainers = [ RalphAmissah ];
- };
-}
-#+END_SRC
-
-- package import incorporated, all in one file
-
-#+BEGIN_SRC nix :NO-tangle ../shell.nix :tangle-mode (identity #o755) :shebang "#!/usr/bin/env -S nix-shell"
-{ pkgs ? import <nixpkgs> {},
- stdenv ? pkgs.stdenv,
-}:
-with import ./nix/mkDub.nix { inherit pkgs; };
-mkDubDerivation rec {
- name = "spine-${version}";
- version = "<<version_spine>>";
- src = ./.;
- buildInputs = [
- pkgs.sqlite
- (
- let
- dub2nix-src = fetchTarball {
- url = "https://github.com/lionello/dub2nix/archive/master.tar.gz";
- };
- dub2nix = (import dub2nix-src) { inherit pkgs; };
- in
- with pkgs; [
- nixFlakes
- dub
- ldc
- sqlite
- nix-prefetch-git
- validatePkgConfig
- ]
- )
- ];
- shellHook = ''
- # nix-build -I nixpkgs=<provide local nix path>
- nix-build
- echo "built spine"
- '';
- installPhase = ''
- install -m755 -D spine $out/bin/spine
- echo "built $out/bin/spine"
- '';
- meta = with pkgs.lib; {
- homepage = https://sisudoc.org;
- description = "a sisu like document parser";
- license = licenses.agpl3Plus;
- platforms = platforms.linux;
- maintainers = [ RalphAmissah ];
- };
-}
#+END_SRC
** default.nix :default:
@@ -2621,52 +2481,7 @@ mkDubDerivation rec {
nix build -f project.nix
nix build -f spine.nix
-#+BEGIN_SRC nix :tangle ../default.nix :tangle-mode (identity #o755) :-shebang "#!/usr/bin/env -S nix-build"
-{ pkgs ? import <nixpkgs> {} }:
-with import ./nix/mkDub.nix { inherit pkgs; };
-mkDubDerivation rec {
- name = "spine-${version}";
- version = "<<version_spine>>";
- src = ./.;
- buildInputs = [
- pkgs.sqlite
- (import ./nix/pkglst/shell-pkgs.nix { inherit pkgs; })
- ];
- # installPhase = ''
- # install -m755 -D spine $out/bin/spine
- # echo "built $out/bin/spine"
- # '';
- <<nix_project_meta>>
-}
-#+END_SRC
-
-** project.nix :project:
-
-#+BEGIN_SRC nix :tangle ../project.nix :tangle-mode (identity #o755) :shebang "#!/usr/bin/env -S nix-build"
-{ pkgs ? import <nixpkgs> {} }:
-with import ./nix/mkDub.nix { inherit pkgs; };
-mkDubDerivation rec {
- name = "spine-${version}";
- version = "<<version_spine>>";
- src = ./.;
- buildInputs = [
- pkgs.sqlite
- (
- <<nix_dub2nix_with_pkgs>>
- )
- ];
- # buildPhase = [ ];
- installPhase = ''
- install -m755 -D spine $out/bin/spine
- echo "built $out/bin/spine"
- '';
- <<nix_project_meta>>
-}
-#+END_SRC
-
-** spine.nix (project.nix including import mkDub.nix) :project:
-
-#+BEGIN_SRC nix :tangle ../spine.nix :tangle-mode (identity #o755) :shebang "#!/usr/bin/env -S nix-build"
+#+BEGIN_SRC nix :tangle ../default.nix :tangle-mode (identity #o755) :shebang "#!/usr/bin/env -S nix-build"
{ pkgs ? import <nixpkgs> {},
stdenv ? pkgs.stdenv,
lib ? pkgs.lib,
@@ -2675,9 +2490,77 @@ mkDubDerivation rec {
dub ? pkgs.dub
}:
assert dcompiler != null;
-#with import ./nix/mkDub.nix { inherit pkgs; };
-with ( # mkDub.nix
- <<mkDub_nix>>
+with (
+ assert dcompiler != null;
+ with lib;
+ let
+ # Filter function to remove the .dub package folder from src
+ filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
+ type == "directory" && baseName == ".dub"
+ );
+ targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
+ # Remove reference to build tools and library sources
+ disallowedReferences = deps: [ dcompiler dub ];
+ removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
+ in {
+ mkDubDerivation = lib.makeOverridable ({
+ src,
+ nativeBuildInputs ? [],
+ dubJSON ? src + "/dub.json",
+ passthru ? {},
+ package ? lib.importJSON dubJSON,
+ ...
+ } @ attrs: stdenv.mkDerivation (attrs // {
+ pname = package.name;
+ nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
+ disallowedReferences = disallowedReferences deps;
+ passthru = passthru // {
+ inherit dub dcompiler pkgs;
+ };
+ src = lib.cleanSourceWith {
+ filter = filterDub;
+ src = lib.cleanSource src;
+ };
+ preFixup = ''
+ find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
+ '';
+ buildPhase = ''
+ runHook preBuild
+ export HOME=$PWD
+ for dc_ in dmd ldmd2 gdmd; do
+ echo "- check for D compiler $dc_"
+ dc=$(type -P $dc_ || echo "")
+ if [ ! "$dc" == "" ]; then
+ break
+ fi
+ done
+ if [ "$dc" == "" ]; then
+ exit "Error: could not find D compiler"
+ fi
+ echo "$dc_ used as D compiler to build $pname"
+ dub build --compiler=$dc --build=release --combined --skip-registry=all
+ runHook postBuild
+ '';
+ checkPhase = ''
+ runHook preCheck
+ export HOME=$PWD
+ dub test --combined --skip-registry=all
+ runHook postCheck
+ '';
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/bin
+ cp -r "${targetOf package}" $out/bin
+ runHook postInstall
+ '';
+ meta = lib.optionalAttrs (package ? description) {
+ description = package.description;
+ } // attrs.meta or {};
+ } // lib.optionalAttrs (!(attrs ? version)) {
+ # Use name from dub.json, unless pname and version are specified
+ name = package.name;
+ }));
+ }
);
mkDubDerivation rec {
name = "spine-${version}";
@@ -2686,7 +2569,13 @@ mkDubDerivation rec {
buildInputs = [
pkgs.sqlite
(
- <<nix_dub2nix_with_pkgs>>
+ with pkgs; [
+ nixFlakes
+ rund
+ dub
+ ldc
+ sqlite
+ ]
)
];
# buildPhase = [ ];
@@ -2714,149 +2603,14 @@ installPhase = ''
#+NAME: nix_project_meta
#+BEGIN_SRC nix
meta = with pkgs.lib; {
- homepage = https://sisudoc.org;
+ homepage = https://sisudoc.org;
description = "a sisu like document parser";
- license = licenses.agpl3Plus;
- platforms = platforms.linux;
+ license = licenses.agpl3Plus;
+ platforms = platforms.linux;
maintainers = [ RalphAmissah ];
};
#+END_SRC
-** mkDub.nix :mkDub:
-
-Get current mkDub.nix from the dub2nix project:
-
-#+BEGIN_SRC sh
-aria2c https://raw.githubusercontent.com/lionello/dub2nix/master/mkDub.nix ./nix/.
-#+END_SRC
-
-*** dub2nix
-
-#+BEGIN_SRC nix :tangle ../nix/pkglst/shell-pkgs.nix
-{ pkgs ? import <nixpkgs> {} }:
-<<nix_dub2nix_with_pkgs>>
-#+END_SRC
-
-*** mkDub
-
-#+BEGIN_SRC nix :tangle ../nix/mkDub.nix
-{ pkgs ? import <nixpkgs> {},
- stdenv ? pkgs.stdenv,
- lib ? pkgs.lib,
- ldc ? null,
- dcompiler ? pkgs.ldc,
- dub ? pkgs.dub
-}:
-<<mkDub_nix>>
-#+END_SRC
-
-** mkDub.nix shared
-
-#+NAME: mkDub_nix
-#+BEGIN_SRC nix
-assert dcompiler != null;
-with stdenv lib;
-let
- # Filter function to remove the .dub package folder from src
- filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
- type == "directory" && baseName == ".dub"
- );
- # Convert a GIT rev string (tag) to a simple semver version
- rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""];
- dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; };
- # Fetch a dependency (source only for now)
- fromDub = dubDep: mkDerivation rec {
- name = "${src.name}-${version}";
- version = rev-to-version dubDep.fetch.rev;
- nativeBuildInputs = [ dcompiler dub ];
- src = dep2src dubDep;
- buildPhase = ''
- runHook preBuild
- export HOME=$NIX_BUILD_TOP
- #export HOME=$PWD
- dub build -b=release
- runHook postBuild
- '';
- # outputs = [ "lib" ];
- # installPhase = ''
- # runHook preInstall
- # mkdir -p $out/bin
- # runHook postInstall
- # '';
- };
- # Adds a local package directory (e.g. a git repository) to Dub
- dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}";
- # The target output of the Dub package
- targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
- # Remove reference to build tools and library sources
- disallowedReferences = deps: [ dcompiler dub ] ++ builtins.map dep2src deps;
- removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
-in {
- inherit fromDub;
- mkDubDerivation = lib.makeOverridable ({
- src,
- nativeBuildInputs ? [],
- dubJSON ? src + "/dub.json",
- selections ? src + "/nix/dub.selections.nix",
- deps ? import selections,
- passthru ? {},
- package ? lib.importJSON dubJSON,
- ...
- } @ attrs: stdenv.mkDerivation (attrs // {
- pname = package.name;
- nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
- disallowedReferences = disallowedReferences deps;
- passthru = passthru // {
- inherit dub dcompiler pkgs;
- };
- src = lib.cleanSourceWith {
- filter = filterDub;
- src = lib.cleanSource src;
- };
- preFixup = ''
- find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
- '';
- buildPhase = ''
- runHook preBuild
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- for dc_ in dmd ldmd2 gdmd; do
- echo "- check for D compiler $dc_"
- dc=$(type -P $dc_ || echo "")
- if [ ! "$dc" == "" ]; then
- break
- fi
- done
- if [ "$dc" == "" ]; then
- exit "Error: could not find D compiler"
- fi
- echo "$dc_ used as D compiler to build $pname"
- dub build --compiler=$dc --build=release --combined --skip-registry=all
- runHook postBuild
- '';
- checkPhase = ''
- runHook preCheck
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- dub test --combined --skip-registry=all
- runHook postCheck
- '';
- installPhase = ''
- runHook preInstall
- mkdir -p $out/bin
- cp -r "${targetOf package}" $out/bin
- runHook postInstall
- '';
- meta = lib.optionalAttrs (package ? description) {
- description = package.description;
- } // attrs.meta or {};
- } // lib.optionalAttrs (!(attrs ? version)) {
- # Use name from dub.json, unless pname and version are specified
- name = package.name;
- }));
-}
-#+END_SRC
-
** dub.selections.json
#+BEGIN_SRC nix :NO-tangle ../dub.selections.json
@@ -2929,35 +2683,13 @@ in {
** dub2nix & shared pkgs SHARED
*** dub2nix with pkgs shared
-#+NAME: nix_dub2nix_with_pkgs
+#+NAME: nix_with_pkgs
#+BEGIN_SRC nix
-let
- <<nix_shell_dub2nix_srcLocalPreFetched>>
-in
with pkgs; [
<<nix_shell_with_pkgs_list>>
]
#+END_SRC
-*** get dub2nix
-**** source local
-
-#+NAME: nix_shell_dub2nix_srcLocalPreFetched
-#+BEGIN_SRC nix
-dub2nix-src = ./src/build_depends/dub2nix/.;
-dub2nix = (import dub2nix-src) { inherit pkgs; };
-#+END_SRC
-
-**** source remote (github)
-
-#+NAME: nix_shell_dub2nix_srcRemoteGitHub
-#+BEGIN_SRC nix
-dub2nix-src = fetchTarball {
- url = "https://github.com/lionello/dub2nix/archive/master.tar.gz";
-};
-dub2nix = (import dub2nix-src) { inherit pkgs; };
-#+END_SRC
-
*** with pkgs list
#+NAME: nix_shell_with_pkgs_list
@@ -3386,16 +3118,54 @@ table
toc
#+END_SRC
+** dub REFERENCE
+*** SET version
+
+#+NAME: version_dub
+#+BEGIN_SRC nix
+<<version_dub_next>>
+#+END_SRC
+
+#+NAME: nix_sha_dub
+#+BEGIN_SRC nix
+<<nix_sha_dub_next>>
+#+END_SRC
+
+*** SELECT version
+**** dub 1.24.0
+
+#+NAME: version_dub_next
+#+BEGIN_SRC nix
+1.24.0
+#+END_SRC
+
+#+NAME: nix_sha_dub_next
+#+BEGIN_SRC nix
+0wirm6msz8kw2a7v2ax9ab6i48cmfv6qjwpfrl9vrr4k4xdg3vn6
+#+END_SRC
+
+**** dub 1.23.0
+
+#+NAME: version_dub_current
+#+BEGIN_SRC nix
+1.23.0
+#+END_SRC
+
+#+NAME: nix_sha_dub_current
+#+BEGIN_SRC nix
+06a4whsl1m600k096nwif83n7za3vr7pj1xwapncy5fcad1gmady
+#+END_SRC
+
*** dub (using ldc rather than dmd) overlay REFERENCE :overlay:
#+BEGIN_SRC nix :NO-tangle ~/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix
-{ lib, stdenv, fetchFromGitHub, curl, libevent, rsync, ldc ? null, dcompiler ? ldc }:
+{ lib, stdenv, fetchFromGitHub, curl, libevent, rsync, ldc, dcompiler ? ldc }:
assert dcompiler != null;
stdenv.mkDerivation rec {
pname = "dub";
- version = "1.23.0";
+ version = "<<version_dub>>";
enableParallelBuilding = true;
@@ -3403,8 +3173,7 @@ stdenv.mkDerivation rec {
owner = "dlang";
repo = "dub";
rev = "v${version}";
- sha256 = "06a4whsl1m600k096nwif83n7za3vr7pj1xwapncy5fcad1gmady";
- # nix-prefetch-url https://github.com/dlang/dub/archive/v1.23.0.tar.gz
+ sha256 = "<<nix_sha_dub>>";
};
postUnpack = ''
@@ -3423,7 +3192,7 @@ stdenv.mkDerivation rec {
buildPhase = ''
for dc_ in dmd ldmd2 gdmd; do
- echo "- check for D compiler $dc_"
+ echo "... check for D compiler $dc_ ..."
dc=$(type -P $dc_ || echo "")
if [ ! "$dc" == "" ]; then
break
@@ -3432,7 +3201,8 @@ stdenv.mkDerivation rec {
if [ "$dc" == "" ]; then
exit "Error: could not find D compiler"
fi
- echo "$dc_ used as D compiler to build $pname"
+ export DC_NAME=$dc_
+ echo "$dc_ found and used as D compiler to build $pname"
$dc ./build.d
./build
'';
@@ -3442,104 +3212,18 @@ stdenv.mkDerivation rec {
checkPhase = ''
export DUB=$NIX_BUILD_TOP/source/bin/dub
export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
- export DC=${dcompiler.out}/bin/${dcompiler.pname}
+ export DC=${dcompiler.out}/bin/$DC_NAME
echo "DC out --> $DC"
export HOME=$TMP
- #rm -rf test/*
- rm -rf test/issue502-root-import
- rm test/issue674-concurrent-dub.sh
- rm test/issue672-upgrade-optional.sh
- rm test/issue990-download-optional-selected.sh
- rm test/issue877-auto-fetch-package-on-run.sh
- rm test/issue1037-better-dependency-messages.sh
- # rm test/issue1040-run-with-ver.sh
- rm test/issue1416-maven-repo-pkg-supplier.sh
- rm test/issue1180-local-cache-broken.sh
- rm test/issue1574-addcommand.sh
- rm test/issue1524-maven-upgrade-dependency-tree.sh
- rm test/issue1773-lint.sh
- rm test/ddox.sh
- rm test/fetchzip.sh
- rm test/feat663-search.sh
- rm -rf test/git-dependency
- rm test/interactive-remove.sh
- rm test/timeout.sh
- rm test/version-spec.sh
- rm test/0-init-multi.sh
- rm test/4-describe-data-1-list.sh
- rm test/4-describe-data-3-zero-delim.sh
- rm test/4-describe-import-paths.sh
- rm test/4-describe-string-import-paths.sh
- rm test/4-describe-json.sh
- rm test/5-convert-stdout.sh
- rm test/0-init-multi-json.sh
- rm test/issue1003-check-empty-ld-flags.sh
- rm test/issue103-single-file-package.sh
- rm test/issue1040-run-with-ver.sh
- rm test/issue1091-bogus-rebuild.sh
- # rm test/issue1180-local-cache-broken.sh
- rm test/issue1194-warn-wrong-subconfig.sh
- rm test/issue1277.sh
- rm test/issue1372-ignore-files-in-hidden-dirs.sh
- rm test/issue1447-build-settings-vars.sh
- rm test/issue1531-toolchain-requirements.sh
- # rm test/issue1773-lint.sh
- rm test/issue346-redundant-flags.sh
- rm test/issue361-optional-deps.sh
- rm test/issue564-invalid-upgrade-dependency.sh
- rm test/issue586-subpack-dep.sh
- rm test/issue616-describe-vs-generate-commands.sh
- rm test/issue686-multiple-march.sh
- rm test/issue813-fixed-dependency.sh
- rm test/issue813-pure-sub-dependency.sh
- rm test/issue820-extra-fields-after-convert.sh
- # rm test/issue877-auto-fetch-package-on-run.sh
- rm test/issue923-subpackage-deps.sh
- rm test/single-file-sdl-default-name.sh
- rm test/subpackage-common-with-sourcefile-globbing.sh
- rm test/issue934-path-dep.sh
- # rm test/version-spec.sh
- rm -rf test/1-dynLib-simple
- rm -rf test/1-exec-simple-package-json
- rm -rf test/1-exec-simple
- rm -rf test/1-staticLib-simple
- rm -rf test/2-dynLib-dep
- rm -rf test/2-staticLib-dep
- rm -rf test/2-dynLib-with-staticLib-dep
- rm -rf test/2-sourceLib-dep/
- rm -rf test/3-copyFiles
- rm -rf test/custom-source-main-bug487
- rm -rf test/custom-unittest
- rm -rf test/issue1262-version-inheritance-diamond
- rm -rf test/git-dependency
- rm -rf test/issue1003-check-empty-ld-flags
- rm -rf test/ignore-hidden-1
- rm -rf test/ignore-hidden-2
- rm -rf test/issue1427-betterC
- rm -rf test/issue130-unicode-*
- rm -rf test/issue1262-version-inheritance
- rm -rf test/issue1372-ignore-files-in-hidden-dirs
- rm -rf test/issue1350-transitive-none-deps
- rm -rf test/issue1775
- rm -rf test/issue1447-build-settings-vars
- rm -rf test/issue1408-inherit-linker-files
- rm -rf test/issue1551-var-escaping
- rm -rf test/issue754-path-selection-fail
- rm -rf test/issue1788-incomplete-string-import-override
- rm -rf test/subpackage-ref
- rm -rf test/issue777-bogus-path-dependency
- rm -rf test/issue959-path-based-subpack-dep
- rm -rf test/issue97-targettype-none-nodeps
- rm -rf test/issue97-targettype-none-onerecipe
- rm -rf test/path-subpackage-ref
- rm -rf test/sdl-package-simple
+
+ <<build_dub_tests>>
+
./test/run-unittest.sh
'';
installPhase = ''
mkdir -p $out/bin
cp bin/dub $out/bin
- #cp $NIX_BUILD_TOP/dub $out/bin
'';
meta = with lib; {
@@ -3551,3 +3235,65 @@ stdenv.mkDerivation rec {
};
}
#+END_SRC
+
+***** removed failing tests
+
+#+NAME: build_dub_tests
+#+BEGIN_SRC nix
+rm test/0-init-multi.sh
+rm test/0-init-multi-json.sh
+rm test/5-convert-stdout.sh
+rm test/dc-env.sh
+rm test/ddox.sh
+rm test/feat663-search.sh
+rm test/fetchzip.sh
+rm test/interactive-remove.sh
+rm test/issue672-upgrade-optional.sh
+rm test/issue674-concurrent-dub.sh
+rm test/issue820-extra-fields-after-convert.sh
+rm test/issue877-auto-fetch-package-on-run.sh
+rm test/issue990-download-optional-selected.sh
+rm test/issue1003-check-empty-ld-flags.sh
+rm test/issue1037-better-dependency-messages.sh
+rm test/issue1040-run-with-ver.sh
+rm test/issue1091-bogus-rebuild.sh
+rm test/issue1180-local-cache-broken.sh
+rm test/issue1194-warn-wrong-subconfig.sh
+rm test/issue1277.sh
+rm test/issue1372-ignore-files-in-hidden-dirs.sh
+rm test/issue1416-maven-repo-pkg-supplier.sh
+rm test/issue1447-build-settings-vars.sh
+rm test/issue1574-addcommand.sh
+rm test/issue1524-maven-upgrade-dependency-tree.sh
+rm test/issue1773-lint.sh
+rm test/removed-dub-obj.sh
+rm test/version-spec.sh
+rm -r test/git-dependency
+rm -r test/issue502-root-import
+#+END_SRC
+
+* NOTE
+** manually set version
+
+DRV=0.10.0; git tag -f doc-reform_v\${DRV} -m\"doc-reform spine-\${DRV}\" e5452d46475785c78fe4462717bdb74f17c4197
+
+V_MAJOR=0; V_MINOR=10; V_PATCH=0
+for i in org/spine.org; do; sed -i "s/Version(\s*[0-9]\+,\s\+[0-9]\+,\s\+[0-9]\+\s*)/Version(${V_MAJOR}, ${V_MINOR}, ${V_PATCH})/g" $i; done
+for i in org/spine_build_scaffold.org; do; sed -i "0,/\(version:\)\s\+['][0-9]\+\.[0-9]\+\.[0-9]\+['],/s//\1 \'${V_MAJOR}.${V_MINOR}.${V_PATCH}\',/g" $i; done
+
+** check cgi build operations
+
+~dr/bin/spine-ldc -v --cgi-search-form-codegen --output=/var/www/html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod
+
+~dr/bin/spine-ldc -v --show-config --config=/grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod/.dr
+~dr/bin/spine-ldc --show-config --html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod/*
+
+~dr/bin/spine-ldc -v --sqlite-db-create --sqlite-filename="spine.search.db" --output=/var/www/html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod
+~dr/bin/spine-ldc -v --sqlite-db-create --sqlite-filename="spine.search.db" --cgi-sqlite-search-filename="spine-search" --output=/var/www/html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod
+~dr/bin/spine-ldc -v --sqlite-db-recreate --sqlite-filename="spine.search.db" --cgi-sqlite-search-filename="spine-search" --output=/var/www/html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod
+
+~dr/bin/spine-ldc -v --sqlite-update --sqlite-filename="spine.search.db" --output=/var/www/html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod/*
+
+~dr/bin/spine-ldc -v --cgi-search-form-codegen --config=/grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod/.dr/config_local_site
+
+~dr/bin/spine-ldc -v --html --html-link-search --html-link-harvest --harvest --output=/var/www/html ~grotto/repo/git.repo/code/project-spine/doc-reform-markup/markup_samples/markup/pod/*
diff --git a/project.nix b/project.nix
deleted file mode 100755
index bfd44fb..0000000
--- a/project.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env -S nix-build
-{ pkgs ? import <nixpkgs> {} }:
-with import ./nix/mkDub.nix { inherit pkgs; };
-mkDubDerivation rec {
- name = "spine-${version}";
- version = "0.11.3";
- src = ./.;
- buildInputs = [
- pkgs.sqlite
- (
- let
- dub2nix-src = ./src/build_depends/dub2nix/.;
- dub2nix = (import dub2nix-src) { inherit pkgs; };
- in
- with pkgs; [
- nixFlakes
- rund
- dub
- ldc
- sqlite
- nix-prefetch-git
- validatePkgConfig
- jq
- git
- ]
- )
- ];
- # buildPhase = [ ];
- installPhase = ''
- install -m755 -D spine $out/bin/spine
- echo "built $out/bin/spine"
- '';
- meta = with pkgs.lib; {
- homepage = https://sisudoc.org;
- description = "a sisu like document parser";
- license = licenses.agpl3Plus;
- platforms = platforms.linux;
- maintainers = [ RalphAmissah ];
- };
-}
diff --git a/shell.nix b/shell.nix
index 445e0b1..a426e51 100755
--- a/shell.nix
+++ b/shell.nix
@@ -1,7 +1,19 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = with pkgs; [
- (import ./nix/pkglst/shell-pkgs.nix { inherit pkgs; })
+ (
+ with pkgs; [
+ nixFlakes
+ rund
+ dub
+ ldc
+ sqlite
+ nix-prefetch-git
+ validatePkgConfig
+ jq
+ git
+ ]
+ )
];
shellHook = ''
if [[ -e ".envrc" ]]; then
diff --git a/spine.nix b/spine.nix
deleted file mode 100755
index cc45422..0000000
--- a/spine.nix
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env -S nix-build
-{ pkgs ? import <nixpkgs> {},
- stdenv ? pkgs.stdenv,
- lib ? pkgs.lib,
- ldc ? null,
- dcompiler ? pkgs.ldc,
- dub ? pkgs.dub
-}:
-assert dcompiler != null;
-#with import ./nix/mkDub.nix { inherit pkgs; };
-with ( # mkDub.nix
- assert dcompiler != null;
- with stdenv lib;
- let
- # Filter function to remove the .dub package folder from src
- filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
- type == "directory" && baseName == ".dub"
- );
- # Convert a GIT rev string (tag) to a simple semver version
- rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""];
- dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; };
- # Fetch a dependency (source only for now)
- fromDub = dubDep: mkDerivation rec {
- name = "${src.name}-${version}";
- version = rev-to-version dubDep.fetch.rev;
- nativeBuildInputs = [ dcompiler dub ];
- src = dep2src dubDep;
- buildPhase = ''
- runHook preBuild
- export HOME=$NIX_BUILD_TOP
- #export HOME=$PWD
- dub build -b=release
- runHook postBuild
- '';
- # outputs = [ "lib" ];
- # installPhase = ''
- # runHook preInstall
- # mkdir -p $out/bin
- # runHook postInstall
- # '';
- };
- # Adds a local package directory (e.g. a git repository) to Dub
- dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}";
- # The target output of the Dub package
- targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
- # Remove reference to build tools and library sources
- disallowedReferences = deps: [ dcompiler dub ] ++ builtins.map dep2src deps;
- removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
- in {
- inherit fromDub;
- mkDubDerivation = lib.makeOverridable ({
- src,
- nativeBuildInputs ? [],
- dubJSON ? src + "/dub.json",
- selections ? src + "/nix/dub.selections.nix",
- deps ? import selections,
- passthru ? {},
- package ? lib.importJSON dubJSON,
- ...
- } @ attrs: stdenv.mkDerivation (attrs // {
- pname = package.name;
- nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
- disallowedReferences = disallowedReferences deps;
- passthru = passthru // {
- inherit dub dcompiler pkgs;
- };
- src = lib.cleanSourceWith {
- filter = filterDub;
- src = lib.cleanSource src;
- };
- preFixup = ''
- find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
- '';
- buildPhase = ''
- runHook preBuild
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- for dc_ in dmd ldmd2 gdmd; do
- echo "- check for D compiler $dc_"
- dc=$(type -P $dc_ || echo "")
- if [ ! "$dc" == "" ]; then
- break
- fi
- done
- if [ "$dc" == "" ]; then
- exit "Error: could not find D compiler"
- fi
- echo "$dc_ used as D compiler to build $pname"
- dub build --compiler=$dc --build=release --combined --skip-registry=all
- runHook postBuild
- '';
- checkPhase = ''
- runHook preCheck
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- dub test --combined --skip-registry=all
- runHook postCheck
- '';
- installPhase = ''
- runHook preInstall
- mkdir -p $out/bin
- cp -r "${targetOf package}" $out/bin
- runHook postInstall
- '';
- meta = lib.optionalAttrs (package ? description) {
- description = package.description;
- } // attrs.meta or {};
- } // lib.optionalAttrs (!(attrs ? version)) {
- # Use name from dub.json, unless pname and version are specified
- name = package.name;
- }));
- }
-);
-mkDubDerivation rec {
- name = "spine-${version}";
- version = "0.11.3";
- src = ./.;
- buildInputs = [
- pkgs.sqlite
- (
- let
- dub2nix-src = ./src/build_depends/dub2nix/.;
- dub2nix = (import dub2nix-src) { inherit pkgs; };
- in
- with pkgs; [
- nixFlakes
- rund
- dub
- ldc
- sqlite
- nix-prefetch-git
- validatePkgConfig
- jq
- git
- ]
- )
- ];
- # buildPhase = [ ];
- installPhase = ''
- install -m755 -D spine $out/bin/spine
- echo "built $out/bin/spine"
- '';
- meta = with pkgs.lib; {
- homepage = https://sisudoc.org;
- description = "a sisu like document parser";
- license = licenses.agpl3Plus;
- platforms = platforms.linux;
- maintainers = [ RalphAmissah ];
- };
-}
diff --git a/src/build_depends/dub2nix.meta b/src/build_depends/dub2nix.meta
deleted file mode 100644
index 211a6f0..0000000
--- a/src/build_depends/dub2nix.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-dub2nix 8f68d27c
-https://github.com/lionello/dub2nix
-MIT License
diff --git a/src/build_depends/dub2nix/.github/workflows/main.yml b/src/build_depends/dub2nix/.github/workflows/main.yml
deleted file mode 100644
index fe9e10a..0000000
--- a/src/build_depends/dub2nix/.github/workflows/main.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-# This is a basic workflow to help you get started with Actions
-
-name: CI
-
-# Controls when the action will run. Triggers the workflow on push or pull request
-# events but only for the master branch
-on:
- push:
- branches: [ master ]
- pull_request:
- branches: [ master ]
-
-# A workflow run is made up of one or more jobs that can run sequentially or in parallel
-jobs:
- # This workflow contains a single job called "build"
- build:
- # The type of runner that the job will run on
- runs-on: ubuntu-latest
-
- # Steps represent a sequence of tasks that will be executed as part of the job
- steps:
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- - uses: actions/checkout@v2
-
- - name: Install Nix
- uses: cachix/install-nix-action@v12
- with:
- nix_path: nixpkgs=channel:nixos-unstable
-
- - name: Build in shell
- run: nix-shell --run "dub test"
diff --git a/src/build_depends/dub2nix/.gitignore b/src/build_depends/dub2nix/.gitignore
deleted file mode 100644
index 19eefee..0000000
--- a/src/build_depends/dub2nix/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-dub2nix
-/.dub/
-/result
-/bin
-.envrc
diff --git a/src/build_depends/dub2nix/LICENSE b/src/build_depends/dub2nix/LICENSE
deleted file mode 100644
index 88e0035..0000000
--- a/src/build_depends/dub2nix/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 Lionello Lunesu
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/src/build_depends/dub2nix/README.md b/src/build_depends/dub2nix/README.md
deleted file mode 100644
index bfb8e3a..0000000
--- a/src/build_depends/dub2nix/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# dub2nix
-CLI tool to create Nix expressions for D-lang Dub projects.
-
-![CI](https://github.com/lionello/dub2nix/workflows/CI/badge.svg)
-
-## Installation
-Install with `nix-env`:
-```sh
-nix-env -if https://github.com/lionello/dub2nix/archive/master.tar.gz
-```
-or add to your `shell.nix` and run `nix-shell`:
-```nix
-with import <nixpkgs> {};
-let
- dub2nix-src = fetchTarball {
- url = "https://github.com/lionello/dub2nix/archive/master.tar.gz";
- };
- dub2nix = (import dub2nix-src) { inherit pkgs; };
-in mkShell {
- buildInputs = [
- dub2nix # dub dmd rdmd ldc etc..
- ];
-}
-```
-
-## Development
-Do `git clone` and `nix-shell` to build with `dub`:
-```sh
-nix-shell
-dub
-```
-Alternatively, use `direnv`:
-```sh
-echo use nix >> .envrc
-direnv allow
-dub
-```
-
-## Usage
-```
-Usage: dub2nix [OPTIONS] COMMAND
-
-Create Nix derivations for Dub package dependencies.
-
-Commands:
- save Write Nix files for Dub project
-
-Options:
--i --input Path of selections JSON; defaults to ./dub.selections.json
--o --output Output Nix file for Dub project
--r --registry URL to Dub package registry; default http://code.dlang.org/packages/
--d --deps-file Output Nix file with dependencies; defaults to ./dub.selections.nix
--h --help This help information.
-```
-First, use `dub build` to generate the `dub.selections.json` for your Dub project.
-Then, run `dub2nix save` to read the `dub.selections.json` in the current folder and write a new file `dub.selections.nix`.
-
-This `dub.selections.nix` is used in `mkDubDerivation` (from `mkDub.nix`) to create a new derivation for your Dub project:
-```nix
-{pkgs}:
-with (import ./mkDub.nix {
- inherit pkgs;
-});
-mkDubDerivation {
- version = "0.1.0"; # optional
- src = ./.;
-}
-```
-
-When your project has no dependencies at all, this will fail because `dub.selections.nix` is missing. Set `deps` to override the dependencies:
-```nix
-{pkgs}:
-with (import ./mkDub.nix {
- inherit pkgs;
-});
-mkDubDerivation {
- src = ./.;
- deps = [];
-}
-```
-
-Use the `--output` option to write a `.nix` file with a skeleton derivation for your dub project. This will also create the `mkDub.nix` file for importing into the derivation.
diff --git a/src/build_depends/dub2nix/default.nix b/src/build_depends/dub2nix/default.nix
deleted file mode 100644
index d967504..0000000
--- a/src/build_depends/dub2nix/default.nix
+++ /dev/null
@@ -1,2 +0,0 @@
-{ pkgs ? import <nixpkgs> {} }:
-pkgs.callPackage ./dub2nix.nix {}
diff --git a/src/build_depends/dub2nix/dub.json b/src/build_depends/dub2nix/dub.json
deleted file mode 100644
index 18ed81d..0000000
--- a/src/build_depends/dub2nix/dub.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "dub2nix",
- "authors": [
- "Lionello Lunesu"
- ],
- "dependencies": {
- "vibe-d:data": "*"
- },
- "stringImportPaths": ["."],
- "description": "Create Nix derivations for Dub package dependencies",
- "targetPath": "./bin/",
- "copyright": "Copyright © 2020, Lionello Lunesu",
- "license": "MIT",
- "targetType": "executable"
-}
diff --git a/src/build_depends/dub2nix/dub.selections.json b/src/build_depends/dub2nix/dub.selections.json
deleted file mode 100644
index de6fe4d..0000000
--- a/src/build_depends/dub2nix/dub.selections.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "fileVersion": 1,
- "versions": {
- "stdx-allocator": "2.77.5",
- "vibe-d": "0.8.5"
- }
-}
diff --git a/src/build_depends/dub2nix/dub.selections.nix b/src/build_depends/dub2nix/dub.selections.nix
deleted file mode 100644
index 26a9c05..0000000
--- a/src/build_depends/dub2nix/dub.selections.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-# This file was generated by https://github.com/lionello/dub2nix v0.2.4
-[ {
- fetch = {
- type = "git";
- url = "https://github.com/vibe-d/vibe.d.git";
- rev = "v0.8.5";
- sha256 = "0s1caxqmq2497j5x8h06f44nr597h9zac8qxxml953lkaqkhbzgy";
- fetchSubmodules = false;
- date = "2019-03-24T14:45:15+01:00";
- deepClone = false;
- leaveDotGit = false;
- path = "/nix/store/kz5g44dncvznlkm38a74cmm4qyl9nr6b-vibe.d";
- };
-} {
- fetch = {
- type = "git";
- url = "https://github.com/wilzbach/stdx-allocator.git";
- rev = "v2.77.5";
- sha256 = "03av8zp5p6vf6fg005xbmwnjfw96jyrr4dcj4m56c4a3vx7v72pk";
- fetchSubmodules = false;
- date = "2018-12-23T13:54:22+01:00";
- deepClone = false;
- leaveDotGit = false;
- path = "/nix/store/b3h25asfh205wzwjfzjf2k2kkccpp96k-stdx-allocator";
- };
-} ] \ No newline at end of file
diff --git a/src/build_depends/dub2nix/dub2nix.nix b/src/build_depends/dub2nix/dub2nix.nix
deleted file mode 100644
index ef4bd5f..0000000
--- a/src/build_depends/dub2nix/dub2nix.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{pkgs}:
-with (import ./mkDub.nix {
- inherit pkgs;
-});
-mkDubDerivation {
- src = pkgs.lib.cleanSource ./.;
- # dubJSON = ./dub.json;
- # selections = ./dub.selections.nix;
- version = "0.2.4";
- # doCheck = true;
- propagatedBuildInputs = [ pkgs.nix-prefetch-git pkgs.cacert ];
- meta = with pkgs.stdenv.lib; {
- homepage = "https://github.com/lionello/dub2nix";
- maintainers = [ maintainers.lionello ];
- license = licenses.mit;
- };
-}
diff --git a/src/build_depends/dub2nix/mkDub.nix b/src/build_depends/dub2nix/mkDub.nix
deleted file mode 100644
index 7fddf14..0000000
--- a/src/build_depends/dub2nix/mkDub.nix
+++ /dev/null
@@ -1,121 +0,0 @@
-{ pkgs ? import <nixpkgs> {},
- stdenv ? pkgs.stdenv,
- rdmd ? pkgs.rdmd,
- dmd ? pkgs.dmd,
- dub ? pkgs.dub }:
-
-with stdenv;
-let
- # Filter function to remove the .dub package folder from src
- filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
- type == "directory" && baseName == ".dub"
- );
-
- # Convert a GIT rev string (tag) to a simple semver version
- rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""];
-
- dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; };
-
- # Fetch a dependency (source only for now)
- fromDub = dubDep: mkDerivation rec {
- name = "${src.name}-${version}";
- version = rev-to-version dubDep.fetch.rev;
- nativeBuildInputs = [ rdmd dmd dub ];
- src = dep2src dubDep;
-
- buildPhase = ''
- runHook preBuild
- export HOME=$PWD
- dub build -b=release
- runHook postBuild
- '';
-
- # outputs = [ "lib" ];
-
- # installPhase = ''
- # runHook preInstall
- # mkdir -p $out/bin
- # runHook postInstall
- # '';
- };
-
- # Adds a local package directory (e.g. a git repository) to Dub
- dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}";
-
- # The target output of the Dub package
- targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
-
- # Remove reference to build tools and library sources
- disallowedReferences = deps: [ dmd rdmd dub ] ++ builtins.map dep2src deps;
-
- removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
-
-in {
- inherit fromDub;
-
- mkDubDerivation = lib.makeOverridable ({
- src,
- nativeBuildInputs ? [],
- dubJSON ? src + "/dub.json",
- selections ? src + "/dub.selections.nix",
- deps ? import selections,
- passthru ? {},
- package ? lib.importJSON dubJSON,
- ...
- } @ attrs: stdenv.mkDerivation ((removeAttrs attrs ["package" "deps" "selections" "dubJSON"]) // {
-
- pname = package.name;
-
- nativeBuildInputs = [ rdmd dmd dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
- disallowedReferences = disallowedReferences deps;
-
- passthru = passthru // {
- inherit dub dmd rdmd pkgs;
- };
-
- src = lib.cleanSourceWith {
- filter = filterDub;
- src = lib.cleanSource src;
- };
-
- preFixup = ''
- find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
- '';
-
- buildPhase = ''
- runHook preBuild
-
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- dub build -b release --combined --skip-registry=all
-
- runHook postBuild
- '';
-
- checkPhase = ''
- runHook preCheck
-
- export HOME=$PWD
- ${lib.concatMapStringsSep "\n" dub-add-local deps}
- dub test --combined --skip-registry=all
-
- runHook postCheck
- '';
-
- installPhase = ''
- runHook preInstall
-
- mkdir -p $out/bin
- cp -r "${targetOf package}" $out/bin
-
- runHook postInstall
- '';
-
- meta = lib.optionalAttrs (package ? description) {
- description = package.description;
- } // attrs.meta or {};
- } // lib.optionalAttrs (!(attrs ? version)) {
- # Use name from dub.json, unless pname and version are specified
- name = package.name;
- }));
-}
diff --git a/src/build_depends/dub2nix/shell.nix b/src/build_depends/dub2nix/shell.nix
deleted file mode 100644
index 002ff55..0000000
--- a/src/build_depends/dub2nix/shell.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-with import <nixpkgs> {};
-
-let
- pkg = import ./default.nix { inherit pkgs; };
-
-in mkShell {
-
- buildInputs = [
- # additional runtime dependencies go here
- ] ++ pkg.buildInputs ++ pkg.propagatedBuildInputs;
-
- nativeBuildInputs = [
- # additional dev dependencies go here
- ] ++ pkg.nativeBuildInputs;
-
-}
diff --git a/src/build_depends/dub2nix/src/dub2nix.d b/src/build_depends/dub2nix/src/dub2nix.d
deleted file mode 100644
index e92ecf8..0000000
--- a/src/build_depends/dub2nix/src/dub2nix.d
+++ /dev/null
@@ -1,263 +0,0 @@
-#!/usr/bin/env dub
-/+ dub.sdl:
- name "dub2nix"
- stringImportPaths "."
- dependency "vibe-d:data" version="*"
-+/
-import vibe.data.json, std.string;
-
-enum mkDubNix = import("./mkDub.nix");
-enum VERSION = "0.2.4";
-enum HEADER = "# This file was generated by https://github.com/lionello/dub2nix v"~VERSION~"\n";
-
-unittest {
- static assert(import("./dub2nix.nix").indexOf(VERSION) > 0, "VERSION does not match version in dub2nix.nix");
-}
-
-struct DubSelections {
- int fileVersion;
- string[string] versions;
-}
-
-struct DubRepo {
- string owner;
- string kind;
- string project;
-}
-
-private string packageRegistry = "http://code.dlang.org/packages/";
-
-private auto download(string url) @trusted {
-version(none) {
- // This works, but causes "leaking eventcore driver" warnings at shutdown
- import vibe.http.client : requestHTTP;
- scope res = requestHTTP();
- return res.readJson();
-} else {
- import std.net.curl: get, HTTP;
- auto http = HTTP();
- // Using deflate saves A LOT of traffic, ~40x
- http.addRequestHeader("accept-encoding", "deflate");
- http.addRequestHeader("accept", "application/json");
- const data = get(url, http);
- // Only accepting application/json, so anything else must be compressed
- if (data[0] != '{') {
- import std.zlib : uncompress;
- return parseJsonString(cast(string)uncompress(data));
- } else {
- // parseJsonString takes immutable string, so need the .idup here
- return parseJsonString(data.idup);
- }
-}
-}
-
-/// Query Dub registry for the repository information of a package
-auto findRepo(string pname) @safe {
- const url = packageRegistry ~ pname ~ ".json";
- const json = download(url);
- return deserializeJson!DubRepo(json["repository"]);
-}
-
-struct NixPrefetchGit {
- @optional string type; /// set to "git", like Go deps.nix
- string url; /// URL of GIT repository
- string rev; /// sha1 or tag
- string sha256; /// calculated by from nix-prefetch-git
- @optional bool fetchSubmodules; /// optional; defaults to true
- @optional string date; /// ignored; fetchgit doesn't actually want this
- @optional bool deepClone; /// ignored
- @optional bool leaveDotGit; /// ignored; if the .git directory should be preserved
- @optional string path; /// ignored; a path in the Nix store?
-}
-
-/// Invoke nix-prefetch-git and return the parsed JSON
-auto nixPrefetchGit(string url, string rev) @safe {
- import std.process : executeShell, Config;
- const cmd = "nix-prefetch-git --quiet " ~ url ~ " " ~ rev;
- return deserializeJson!NixPrefetchGit(
- executeShell(cmd, null, Config.stderrPassThrough).output
- );
-}
-
-struct DubDep {
- NixPrefetchGit fetch; /// like Go deps.nix
-}
-
-/// Fetch the repo information for package `pname` and version `ver`
-auto prefetch(string pname, string ver) @safe {
- const repo = findRepo(pname);
- assert(repo.kind == "github");
- const url = "https://" ~ repo.kind ~ ".com/" ~ repo.owner ~ '/' ~ repo.project ~ ".git";
- const tag = "v" ~ ver;
- auto set = nixPrefetchGit(url, tag);
- // Overwrite the sha1 ref with the tag instead, so we have the version info as well
- set.rev = tag;
- set.type = "git";
- return DubDep(set);
-}
-
-/// Convert D string to Nix string literal
-auto toNixString(in string s, int indent = 0) pure @safe {
- if (s is null) {
- return "null";
- } else if (s.indexOfAny("\"\n") >= 0)
- return "''\n" ~ s ~ "''";
- else
- return '"' ~ s ~ '"';
-}
-
-unittest {
- static assert(toNixString(null) == "null");
- static assert(toNixString("hello") == `"hello"`);
- static assert(toNixString("with\nnewline") == "''\nwith\nnewline''");
- static assert(toNixString(`with "quotes"`) == "''\nwith \"quotes\"''");
-}
-
-/// Convert D bool to Nix boolean literal
-auto toNixString(bool b, int indent = 0) pure @safe {
- return b ? "true" : "false";
-}
-
-unittest {
- static assert(toNixString(true) == "true");
- static assert(toNixString(false) == "false");
-}
-
-private enum INDENT = " ";
-
-/// Convert D struct to Nix set
-auto toNixString(T)(in T pod, int indent = 0) pure @safe if (is(T == struct)) {
- string prefix = INDENT[0..indent * 2 + 2];
- string set = "{\n";
- foreach(i, ref key; pod.tupleof) {
- const id = __traits(identifier, pod.tupleof[i]);
- set ~= prefix ~ id ~ " = " ~ toNixString(key, indent + 1) ~ ";\n";
- }
- return set ~ INDENT[0..indent * 2] ~ "}";
-}
-
-unittest {
- struct TestStruct { bool b; }
- static assert(toNixString(TestStruct.init) == "{\n b = false;\n}");
- static assert(toNixString(TestStruct.init, 1) == "{\n b = false;\n }");
-}
-
-/// Convert D AArray to Nix set
-auto toNixString(T)(in T[string] aa, int indent = 0) pure @safe {
- string prefix = INDENT[0..indent * 2 + 2];
- string set = "{\n";
- foreach(id, ref key; aa) {
- set ~= prefix ~ id ~ " = " ~ toNixString(key, indent + 1) ~ ";\n";
- }
- return set ~ INDENT[0..indent * 2] ~ "}";
-}
-
-unittest {
- static assert(toNixString(["s": "x"]) == "{\n s = \"x\";\n}");
- static assert(toNixString(["s": ["x": true]]) == "{\n s = {\n x = true;\n };\n}");
-}
-
-/// Convert D array/range to Nix list
-import std.range : isForwardRange;
-auto toNixString(R)(in R range, int indent = 0) pure @safe if (isForwardRange!R && !is(R : string)) {
- string list = "[ ";
- foreach(const ref item; range) {
- list ~= toNixString(item, indent) ~ " ";
- }
- return list ~ "]";
-}
-
-unittest {
- static assert(toNixString(["a"]) == `[ "a" ]`);
-}
-
-/// Create Nix expression for all dependencies in the selections JSON
-auto createNixDeps(string selectionsJson) {
- import std.parallelism : taskPool;
- import std.array : byPair, array;
- import std.stdio : writeln;
-
- const selections = deserializeJson!DubSelections(selectionsJson);
- assert(selections.fileVersion == 1);
-
- static auto progress(Tuple)(in Tuple pair) {
- writeln("# Prefetching ", pair.key, "-", pair.value);
- return prefetch(pair.key, pair.value);
- }
-
- // Fetch all dependency information in parallel
- debug scope(success) writeln("# Done.");
- return HEADER ~ toNixString(taskPool.amap!progress(selections.versions.byPair.array));
-}
-
-unittest {
- enum json = import("./dub.selections.json");
- enum fixture = import("./dub.selections.nix");
- assert(createNixDeps(json) == fixture);
-}
-
-// No "main" when we're running with unittests
-version(unittest) {} else {
-
-int main(string[] args) {
- import std.stdio : writeln;
- import std.file : readText, write;
- import std.getopt: getopt, defaultGetoptPrinter;
-
- bool showVersion;
- string input = "./dub.selections.json", deps = "./dub.selections.nix", output;
- auto result = getopt(args,
- "input|i|in", "Path of selections JSON; defaults to " ~ input, &input,
- "output|o|out", "Output Nix file for Dub project.", &output,
- "registry|r", "URL to Dub package registry; default " ~ packageRegistry, &packageRegistry,
- "deps-file|d", "Output Nix file with dependencies; defaults to " ~ deps, &deps,
- "version", "Show version information.", &showVersion);
-
- if (showVersion) {
- writeln(VERSION);
- return 0;
- } else if (result.helpWanted || args.length != 2 || args[1] != "save") {
- defaultGetoptPrinter(`Usage: dub2nix [OPTIONS] COMMAND
-
-Create Nix derivations for Dub package dependencies.
-
-Commands:
- save Write Nix files for Dub project
-
-Options:`, result.options);
- return 0;
- }
-
- try {
- const nix = createNixDeps(readText(input));
- if (deps == "-") {
- writeln(nix);
- } else {
- write(deps, nix.representation);
- }
- if (output) {
- write("mkDub.nix", mkDubNix);
- write(output, HEADER ~ `
-{ pkgs ? import <nixpkgs> {} }:
-with import ./mkDub.nix { inherit pkgs; };
-
-mkDubDerivation {
- src = ./.;
- # version = "0.0.1";
- # buildInputs = [ add any runtime deps here ];
-}
-`);
- }
- return 0;
- } catch (Exception e) {
- debug {
- // Only dump callstack in debug builds
- writeln(e.toString());
- } else {
- writeln("Error: ", e.message);
- }
- return 1;
- }
-}
-
-}//!unittest
diff --git a/src/build_depends/shaHEADdep_dub2nix b/src/build_depends/shaHEADdep_dub2nix
deleted file mode 100644
index 85c4d2c..0000000
--- a/src/build_depends/shaHEADdep_dub2nix
+++ /dev/null
@@ -1 +0,0 @@
-8f68d27c - dub2nix