summaryrefslogtreecommitdiffhomepage
path: root/org
diff options
context:
space:
mode:
Diffstat (limited to 'org')
-rw-r--r--org/dlang-nix-flakes.org1176
-rw-r--r--org/dlang-overlays.org1156
-rw-r--r--org/nix-develop-dlang-shared.org63
3 files changed, 1218 insertions, 1177 deletions
diff --git a/org/dlang-nix-flakes.org b/org/dlang-nix-flakes.org
index ccf1202..e3a01ed 100644
--- a/org/dlang-nix-flakes.org
+++ b/org/dlang-nix-flakes.org
@@ -209,16 +209,16 @@ nix flake update && nix flake check --show-trace && nix flake info && echo "" &&
├───devShells
│ └───x86_64-linux
│ ├───default: development environment 'nix-shell'
- │ ├───dsh-nixpkgs-ldc-dub: development environment 'nixpkgs---ldc---dub'
- │ ├───dsh-overlay-dmd-dub: development environment 'overlay---dmd-2.104.0---dub-1.30.0---broken'
- │ ├───dsh-overlay-dtest-tilix: development environment 'overlay---ldc-1.32.2---dub-1.30.0---tilix---gtkd'
- │ ├───dsh-overlay-dtools: development environment 'overlay---ldc-1.32.2---dub-1.30.0---dtools-2.103.1'
- │ └───dsh-overlay-ldc-dub: development environment 'overlay---ldc-1.32.2---dub-1.30.0'
+ │ ├───dsh-nixpkgs-ldc: development environment 'nixpkgs---ldc---dub'
+ │ ├───dsh-overlay-dmd: development environment 'overlay_dmd-<<dmd_version>>_dub-<<dub_version>>_dtools-<<dtools_version>>'
+ │ ├───dsh-overlay-dtest-tilix: development environment 'overlay_ldc_dub_tilix_gtkd'
+ │ ├───dsh-overlay-dtools: development environment 'overlay_ldc-<<ldc_version>>_dub-<<dub_version>>_dtools-<<dtools_version>>'
+ │ └───dsh-overlay-ldc: development environment 'overlay_ldc-<<ldc_version>>_dub-<<dub_version>>_dtools-<<dtools_version>>'
└───packages
└───x86_64-linux
├───check-local-dir-build: package 'dummy-0.1.0'
- ├───check-tilix: package 'tilix-1.9.5'
- └───default: package 'tilix-1.9.5'
+ ├───check-tilix: package 'tilix'
+ └───default: package 'tilix'
#+END_SRC
@@ -315,6 +315,7 @@ fi
- ${NixDirEnvVersion}
#+HEADER: :tangle "../.envrc-nix"
+#+HEADER: :shebang "# -*- mode: nix -*-"
#+BEGIN_SRC shell
NIX_ENFORCE_PURITY=1
# - https://github.com/nix-community/nix-direnv
@@ -347,31 +348,28 @@ use flake .
{
description = "build dummy D package using dub build tool";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
- #inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = {
self,
nixpkgs,
- #flake-utils,
...
}@inputs: let
pname = "dummy";
version = "0.1.0";
- shell = ./shell.nix;
- devEnv = ./nixDevEnv.sh; # ./.envrc;
supportedSystems = ["x86_64-linux"]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;});
- checkPhase = ''
- runHook preCheck
- #dub test --combined --skip-registry=all
- runHook postCheck
- '';
+ #checkPhase = ''
+ # runHook preCheck
+ # #dub test --combined --skip-registry=all
+ # runHook postCheck
+ #'';
localOverlay = (final: prev: {
- ldc = prev.callPackage ./nix-overlays/ldc { }; # -> ok <<ldc_version>>
- dmd = prev.callPackage ./nix-overlays/dmd { }; # -> ok <<dmd_version>>
- dub = prev.callPackage ./nix-overlays/dub { }; # -> ? <<dub_version>>
- dtools = prev.callPackage ./nix-overlays/dtools { }; # -> ok <<dtools_version>>
- #gdc = prev.callPackage ./nix-overlays/gdc { }; # empty
+ ldc = prev.callPackage ./nix-overlays/ldc { }; # -> ok <<ldc_version>>
+ # dmd overlay: revert to GCC14; (current) GCC 15 introduced nullptr in its headers, and DMD's ImportC parser needs update to handle it, monitor and update:
+ dmd = prev.callPackage ./nix-overlays/dmd { stdenv = prev.gcc14Stdenv; }; # -> ok <<dmd_version>>
+ dub = prev.callPackage ./nix-overlays/dub { }; # -> ? <<dub_version>>
+ dtools = prev.callPackage ./nix-overlays/dtools { }; # -> ok <<dtools_version>>
+ #gdc = prev.callPackage ./nix-overlays/gdc { };
});
pkgsForSystem = system: import nixpkgs {
overlays = [
@@ -386,31 +384,28 @@ use flake .
runHook postInstall
'';
postInstall = ''
- echo `ls -la $out/bin/dummy`
+ echo "$(ls -la $out/bin/dummy)"
$out/bin/dummy -v
'';
in {
packages = forAllSystems (system: let
pkgs-ovl = pkgsForSystem system;
- pkgs-nix = nixpkgsFor.${system};
+ #pkgs-nix = nixpkgsFor.${system};
in
with pkgs-ovl; {
- default = tilix;
+ default = self.packages.${system}.check-local-dir-build;
check-tilix = tilix;
check-local-dir-build = stdenv.mkDerivation {
inherit pname;
inherit version;
meta.mainProgram = "dummy";
- executable = true;
src = self;
- inherit shell;
- inherit devEnv;
buildInputs = [sqlite];
nativeBuildInputs = [gnumake dub ldc];
preBuild = ''
export DCn=ldmd2
export DC=$(type -P $DCn || echo "")
- if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi
+ if [ -z "$DC" ]; then echo "Error: could not find D compiler" >&2; exit 1; fi
'';
buildPhase = ''
runHook preBuild
@@ -418,7 +413,7 @@ use flake .
dub build --cache=local --compiler=$DC --build=$DCn --combined --skip-registry=all
runHook postBuild
'';
- inherit checkPhase;
+ #inherit checkPhase;
inherit installPhase;
inherit postInstall;
};
@@ -426,50 +421,32 @@ use flake .
devShells = forAllSystems (system: let
pkgs-ovl = pkgsForSystem system;
pkgs-nix = nixpkgsFor.${system};
- shellHook = ''
- '';
+ #shellHook = ''
+ #'';
in
with pkgs-ovl; {
- dsh-overlay-dtools = mkShell {
- name = "overlay - ldc-<<ldc_version>> - dub-<<dub_version>> - dtools-<<dtools_version>>";
- inherit shell;
- inherit devEnv;
+ dsh-overlay-ldc = mkShell {
+ name = "overlay_ldc-<<ldc_version>>_dub-<<dub_version>>_dtools-<<dtools_version>>";
packages = [
ldc
dub
dtools
gnumake
];
- inherit shellHook;
+ #inherit shellHook;
};
- dsh-overlay-ldc-dub = mkShell {
- name = "overlay - ldc-<<ldc_version>> - dub-<<dub_version>> - dtools-<<dtools_version>>";
- inherit shell;
- inherit devEnv;
- packages = [
- ldc
- dub
- dtools
- gnumake
- ];
- inherit shellHook;
- };
- dsh-overlay-dmd-dub = mkShell {
- name = "overlay - dmd-<<dmd_version>> - dub-<<dub_version>> - dtools-<<dtools_version>>";
- inherit shell;
- inherit devEnv;
+ dsh-overlay-dmd = mkShell {
+ name = "overlay_dmd-<<dmd_version>>_dub-<<dub_version>>_dtools-<<dtools_version>>";
packages = [
dmd
dub
dtools
gnumake
];
- inherit shellHook;
+ #inherit shellHook;
};
dsh-overlay-dtest-tilix = mkShell {
- name = "overlay - ldc-<<ldc_version>> - dub-<<dub_version>> - tilix - gtkd";
- inherit shell;
- inherit devEnv;
+ name = "overlay_ldc_dub_tilix_gtkd";
packages = [
ldc
gtkd
@@ -478,45 +455,30 @@ use flake .
dtools
gnumake
];
- inherit shellHook;
+ #inherit shellHook;
};
- #dsh-overlay-gdc = mkShell {
- # name = "dub + gdc dev shell";
- # inherit shell;
- # inherit devEnv;
- # packages = [
- # gdc
- # dub
- # dtools
- # gnumake
- # ];
- # inherit shellHook;
- #};
- dsh-nixpkgs-ldc-dub = mkShell {
- name = "nixpkgs - ldc - dub";
- inherit shell;
- inherit devEnv;
+ dsh-nixpkgs-ldc = mkShell {
+ name = "nixpkgs_ldc_dub";
packages = with pkgs-nix; [
ldc
dub
dtools
gnumake
];
- inherit shellHook;
+ #inherit shellHook;
};
- dsh-nixpkgs-dmd-dub = mkShell {
- name = "nixpkgs - ldc - dub";
- inherit shell;
- inherit devEnv;
+ dsh-nixpkgs-dmd = mkShell {
+ name = "nixpkgs_dmd_dub";
packages = with pkgs-nix; [
dmd
dub
dtools
gnumake
];
- inherit shellHook;
+ #inherit shellHook;
};
- default = import ./shell.nix {inherit pkgs-nix;};
+ default = self.devShells.${system}.dsh-overlay-ldc;
+ #default = import ./shell.nix {inherit pkgs-nix;};
});
};
}
@@ -529,8 +491,17 @@ use flake .
#+HEADER: :shebang "#!/usr/bin/env -S nix-shell --pure\n#!nix-shell -i bash"
#+BEGIN_SRC nix
{pkgs-nix ? import <nixpkgs> {}}:
+let
+ ldc = pkgs-nix.callPackage ./nix-overlays/ldc {}; # -> <<ldc_version>>
+ # dmd overlay reverts to gcc14Stdenv; gcc15 introduced nullptr in its headers
+ # and DMD's ImportC parser needs update to handle it. Monitor and update.
+ dmd = pkgs-nix.callPackage ./nix-overlays/dmd { stdenv = pkgs-nix.gcc14Stdenv; }; # -> <<dmd_version>>
+ dub = pkgs-nix.callPackage ./nix-overlays/dub { inherit ldc; }; # -> <<dub_version>>
+ dtools = pkgs-nix.callPackage ./nix-overlays/dtools { inherit ldc; }; # -> <<dtools_version>>'
+in
with pkgs-nix;
mkShell {
+ name = "overlay_ldc-<<ldc_version>>_dub-<<dub_version>>_dtools-<<dtools_version>>";
buildInputs = [
# ❯❯❯ nix_related
#nix
@@ -547,12 +518,11 @@ with pkgs-nix;
# ❯❯❯ dev
gnumake
ps
- # ❯❯❯ d_build_related
# ❯❯ package manager
- #dub
+ dub
# ❯❯ compiler
#dmd
- #ldc
+ ldc
#rund
# ❯❯ linker
#lld
@@ -561,8 +531,7 @@ with pkgs-nix;
#ninja
#meson
# ❯❯ tools
- #dub
- #dtools
+ dtools
# ❯❯❯ test
#tilix
#gtkd
@@ -588,1043 +557,6 @@ will automatically build the default development shell, perhaps unecessary
pkgs.callPackage ./shell.nix {}
#+END_SRC
-* nixpkgs overlays ( written to ../nix-overlays/ )
-** ldc OK ✓
-*** info
-**** links
-
-- https://wiki.dlang.org/LDC
-
-- https://github.com/ldc-developers/ldc
- - https://github.com/ldc-developers/ldc/releases
- - https://github.com/ldc-developers/ldc/issues
-
-- version in nixpkgs:
- - https://search.nixos.org/packages?channel=unstable&show=ldc&from=0&size=100&sort=relevance&type=packages&query=ldc
-
-*** overlays OK ✓
-**** default.nix
-
-#+HEADER: :tangle "../nix-overlays/ldc/default.nix"
-#+BEGIN_SRC nix
-import ./package.nix
-#+END_SRC
-
-**** package.nix OK ✓
-
-#+HEADER: :tangle "../nix-overlays/ldc/package.nix"
-#+BEGIN_SRC nix
-{
- lib,
- stdenv,
- fetchFromGitHub,
- fetchpatch,
- callPackage,
- makeWrapper,
- removeReferencesTo,
- runCommand,
- writeText,
- targetPackages,
- cmake,
- ninja,
- <<ldc_llvm_set>>,
- curl,
- tzdata,
- lit,
- gdb,
- unzip,
-
- ldcBootstrap ? callPackage ./bootstrap.nix { },
-}:
-
-let
- pathConfig = runCommand "ldc-lib-paths" { } ''
- mkdir $out
- echo ${tzdata}/share/zoneinfo/ > $out/TZDatabaseDirFile
- echo ${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} > $out/LibcurlPathFile
- '';
-
-in
-
-stdenv.mkDerivation (finalAttrs: {
- pname = "ldc";
- version = "<<ldc_version>>";
-
- src = fetchFromGitHub {
- owner = "ldc-developers";
- repo = "ldc";
- rev = "v${finalAttrs.version}";
- hash = "<<ldc_hash>>";
- fetchSubmodules = true;
- };
-
- # https://issues.dlang.org/show_bug.cgi?id=19553
- hardeningDisable = [ "fortify" ];
-
- postPatch = ''
- patchShebangs runtime tools tests
-
- rm tests/dmd/fail_compilation/mixin_gc.d
- rm tests/dmd/runnable/xtest46_gc.d
- rm tests/dmd/runnable/testptrref_gc.d
-
- # test depends on current year
- rm tests/dmd/compilable/ddocYear.d
- '' + lib.optionalString stdenv.hostPlatform.isLinux ''
- substituteInPlace runtime/phobos/std/socket.d --replace-fail "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
- '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
- substituteInPlace runtime/phobos/std/socket.d --replace-fail "foreach (name; names)" "names = []; foreach (name; names)"
-
- # https://github.com/NixOS/nixpkgs/issues/34817
- rm -r tests/plugins/addFuncEntryCall
- '';
-
- nativeBuildInputs = [
- cmake ldcBootstrap lit lit.python <<ldc_llvm_set>>.dev makeWrapper ninja unzip
- ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
- # https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
- gdb
- ];
-
- buildInputs = [ curl tzdata ];
-
- outputs = [ "out" "include" ];
- outputInclude = "include";
-
- cmakeFlags = [
- "-DD_FLAGS=-d-version=TZDatabaseDir;-d-version=LibcurlPath;-J${pathConfig}"
- "-DINCLUDE_INSTALL_DIR=${placeholder "include"}/include/d"
- ];
-
- postConfigure = ''
- export DMD=$PWD/bin/ldmd2
- '';
-
- makeFlags = [ "DMD=$DMD" ];
-
- fixNames = lib.optionalString stdenv.hostPlatform.isDarwin ''
- fixDarwinDylibNames() {
- local flags=()
-
- for fn in "$@"; do
- flags+=(-change "$(basename "$fn")" "$fn")
- done
-
- for fn in "$@"; do
- if [ -L "$fn" ]; then continue; fi
- echo "$fn: fixing dylib"
- install_name_tool -id "$fn" "''${flags[@]}" "$fn"
- done
- }
-
- fixDarwinDylibNames $(find "$(pwd)/lib" -name "*.dylib")
- export DYLD_LIBRARY_PATH=$(pwd)/lib
- '';
-
- # https://github.com/ldc-developers/ldc/issues/2497#issuecomment-459633746
- additionalExceptions = lib.optionalString stdenv.hostPlatform.isDarwin "|druntime-test-shared";
-
- checkPhase = ''
- # Build default lib test runners
- ninja -j$NIX_BUILD_CORES all-test-runners
-
- ${finalAttrs.fixNames}
-
- # Run dmd testsuite
- export DMD_TESTSUITE_MAKE_ARGS="-j$NIX_BUILD_CORES DMD=$DMD"
- ctest -V -R "dmd-testsuite"
-
- # Build and run LDC D unittests.
- ctest --output-on-failure -R "ldc2-unittest"
-
- # Run LIT testsuite.
- ctest -V -R "lit-tests"
-
- # Run default lib unittests
- ctest -j$NIX_BUILD_CORES --output-on-failure -E "ldc2-unittest|lit-tests|dmd-testsuite${finalAttrs.additionalExceptions}"
- '';
-
- postInstall = ''
- wrapProgram $out/bin/ldc2 \
- --prefix PATH : ${targetPackages.stdenv.cc}/bin \
- --set-default CC ${targetPackages.stdenv.cc}/bin/cc
- '';
-
- preFixup = ''
- find $out/bin -type f -exec ${removeReferencesTo}/bin/remove-references-to -t ${ldcBootstrap} '{}' +
- '';
-
- disallowedReferences = [ ldcBootstrap ];
-
- meta = with lib; {
- description = "LLVM-based D compiler";
- homepage = "https://github.com/ldc-developers/ldc";
- changelog = "https://github.com/ldc-developers/ldc/releases/tag/v${finalAttrs.version}";
- # from https://github.com/ldc-developers/ldc/blob/master/LICENSE
- license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
- mainProgram = "ldc2";
- maintainers = with maintainers; [ lionello jtbx ];
- platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
- };
-
- passthru.ldcBootstrap = ldcBootstrap;
- passthru.tests =
- let
- ldc = finalAttrs.finalPackage;
- helloWorld = stdenv.mkDerivation (finalAttrs: {
- name = "ldc-hello-world";
- src = writeText "hello_world.d" ''
- module hello_world;
- import std.stdio;
- void main() {
- writeln("Hello, world!");
- }
- '';
- dontUnpack = true;
- buildInputs = [ ldc ];
- dFlags = [ ];
- buildPhase = ''
- ldc2 ${lib.escapeShellArgs finalAttrs.dFlags} -of=test $src
- '';
- installPhase = ''
- mkdir -p $out/bin
- mv test $out/bin
- '';
- });
- in {
- # Without -shared, built binaries should not contain
- # references to the compiler binaries.
- no-references-to-compiler = helloWorld.overrideAttrs {
- disallowedReferences = [ ldc ];
- dFlags = ["-g"];
- };
- };
-})
-#+END_SRC
-
-**** bootstrap.nix
-
-- this is the ldc bootstrap in current use, nixpkgs:
-
-#+HEADER: :tangle "../nix-overlays/ldc/bootstrap.nix"
-#+BEGIN_SRC nix
-{
- lib,
- stdenv,
- fetchurl,
- curl,
- tzdata,
- autoPatchelfHook,
- fixDarwinDylibNames,
- libxml2,
-}:
-
-let
- inherit (stdenv) hostPlatform;
- OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
- ARCH = if hostPlatform.isDarwin && hostPlatform.isAarch64 then "arm64" else hostPlatform.parsed.cpu.name;
- <<ldc_bootstrap_1-41-0_hashes>>
-in stdenv.mkDerivation {
- pname = "ldc-bootstrap";
- inherit version;
-
- src = fetchurl rec {
- name = "ldc2-${version}-${OS}-${ARCH}.tar.xz";
- url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/${name}";
- hash = hashes."${OS}-${ARCH}" or (throw "missing bootstrap hash for ${OS}-${ARCH}");
- };
-
- dontConfigure = true;
- dontBuild = true;
-
- nativeBuildInputs = lib.optionals hostPlatform.isLinux [
- autoPatchelfHook
- ] ++ lib.optional hostPlatform.isDarwin fixDarwinDylibNames;
-
- buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libxml2 stdenv.cc.cc ];
-
- propagatedBuildInputs = [ curl tzdata ];
-
- installPhase = ''
- mkdir -p $out
-
- mv bin etc import lib LICENSE README $out/
- '';
-
- meta = with lib; {
- description = "LLVM-based D Compiler";
- homepage = "https://github.com/ldc-developers/ldc";
- # from https://github.com/ldc-developers/ldc/blob/master/LICENSE
- license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
- maintainers = with maintainers; [ lionello ];
- platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
- };
-}
-#+END_SRC
-
-***** bootstrap.nix version SELECT
-****** bootstrap.nix ldc2-1.41.0
-
-#+NAME: ldc_bootstrap_1-41-0_hashes
-#+BEGIN_SRC nix
-version = "1.41.0";
-hashes = {
- # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.41.0/ldc2-1.41.0-osx-x86_64.tar.xz` etc..
- osx-x86_64 = "sha256-W8/0i2PFakXbqs2wxb3cjqa+htSgx7LHyDGOBH9yEYE=";
- linux-x86_64 = "sha256-SkOUV/D+WeadAv1rV1Sfw8h60PVa2fueQlB7b44yfI8=";
- linux-aarch64 = "sha256-HEuVChPVM3ntT1ZDZsJ+xW1iYeIWhogNcMdIaz6Me6g=";
- osx-arm64 = "sha256-FXJnBC8QsEchBhkxSqcZtPC/iHYB6TscY0qh7LPFRuQ=";
-};
-#+END_SRC
-
-****** bootstrap.nix ldc2-1.30.0
-
-#+NAME: ldc_bootstrap_1-30-0_hashes
-#+BEGIN_SRC nix
-version = "1.30.0";
-hashes = {
- # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.30.0/ldc2-1.30.0-osx-x86_64.tar.xz` etc..
- osx-x86_64 = "sha256-AAWZvxuZC82xvrW6fpYm783TY+H8k3DvqE94ZF1yjmk=";
- linux-x86_64 = "sha256-V4TUzEfQhFrwiX07dHOgjdAoGkzausCkhnQIQNAU/eE=";
- linux-aarch64 = "sha256-kTeglub75iv/jWWNPCn15aCGAbmck0RQl6L7bFOUu7Y=";
- osx-arm64 = "sha256-Nb/owBdIeroB9jLMDvwjo8bvsTC9vFyJPLMTOMsSAd4=";
-};
-#+END_SRC
-
-****** bootstrap.nix ldc2-1.25.0
-
-#+NAME: ldc_bootstrap_1-25-0_hashes
-#+BEGIN_SRC nix
-version = "1.25.0";
-hashes = {
- # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.25.0/ldc2-1.25.0-osx-x86_64.tar.xz` etc..
- osx-x86_64 = "sha256-6iKnbS+oalLKmyS8qYD/wS21b7+O+VgsWG2iT4PrWPU=";
- linux-x86_64 = "sha256-sfg47RdlsIpryc3iZvE17OtLweh3Zw6DeuNJYgpuH+o=";
- linux-aarch64 = "sha256-UDZ43x4flSo+SfsPeE8juZO2Wtk2ZzwySk0ADHnvJBI=";
- osx-arm64 = "sha256-O/x0vy0wwQFaDc4uWSeMhx+chJKqbQb6e5QNYf+7DCw=";
-};
-#+END_SRC
-
-** dmd OK ✓
-*** info
-**** links
-
-- https://dlang.org/
- - https://wiki.dlang.org/DMD
-
-- https://github.com/dlang/dmd
- - https://github.com/dlang/dmd/tags
- - https://github.com/dlang/dmd/pulls
-
-- version in nixpkgs:
- - https://search.nixos.org/packages?channel=unstable&show=dmd&from=0&size=100&sort=relevance&type=packages&query=dmd
-
-*** overlays
-**** default.nix
-
-#+HEADER: :tangle "../nix-overlays/dmd/default.nix"
-#+BEGIN_SRC nix
-import ./package.nix
-#+END_SRC
-
-**** package.nix OK ✓
-***** package.nix >=2.108.0)
-
-#+HEADER: :tangle "../nix-overlays/dmd/package.nix"
-#+BEGIN_SRC nix
-import ./generic.nix {
- version = "<<dmd_version>>";
- dmdHash = "<<dmd_hash>>";
- phobosHash = "<<phobos_hash>>";
-}
-#+END_SRC
-
-***** package.nix < 2.108.0)
-
-#+HEADER: :tangle-NO "../nix-overlays/dmd/package.nix"
-#+BEGIN_SRC nix
-import ./generic.nix {
- version = "<<dmd_version>>";
- dmdSha256 = "<<dmd_hash>>";
- phobosSha256 = "<<phobos_hash>>";
-}
-#+END_SRC
-
-**** generic.nix
-
-#+HEADER: :tangle "../nix-overlays/dmd/generic.nix"
-#+BEGIN_SRC nix
-{
- version,
- dmdHash,
- phobosHash,
-}:
-
-{
- stdenv,
- lib,
- fetchFromGitHub,
- removeReferencesTo,
- makeWrapper,
- which,
- writeTextFile,
- curl,
- tzdata,
- gdb,
- callPackage,
- targetPackages,
- fetchpatch,
- bash,
- installShellFiles,
- git,
- unzip,
- dmdBootstrap ? callPackage ./bootstrap.nix { },
- dmdBin ? "${dmdBootstrap}/bin",
-}:
-
-let
- dmdConfFile = writeTextFile {
- name = "dmd.conf";
- text = (lib.generators.toINI { } {
- Environment = {
- DFLAGS = ''-I@out@/include/dmd -L-L@out@/lib -fPIC ${lib.optionalString (!targetPackages.stdenv.cc.isClang) "-L--export-dynamic"}'';
- };
- });
- };
-
- bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
- osname = if stdenv.hostPlatform.isDarwin then "osx"
- else stdenv.hostPlatform.parsed.kernel.name;
-
- pathToDmd = "\${NIX_BUILD_TOP}/dmd/generated/${osname}/release/${bits}/dmd";
-in
-
-stdenv.mkDerivation (finalAttrs: {
- pname = "dmd";
- inherit version;
-
- enableParallelBuilding = true;
-
- srcs = [
- (fetchFromGitHub {
- owner = "dlang";
- repo = "dmd";
- rev = "v${finalAttrs.version}";
- hash = dmdHash;
- name = "dmd";
- })
- (fetchFromGitHub {
- owner = "dlang";
- repo = "phobos";
- rev = "v${finalAttrs.version}";
- hash = phobosHash;
- name = "phobos";
- })
- ];
-
- sourceRoot = ".";
-
- # https://issues.dlang.org/show_bug.cgi?id=19553
- hardeningDisable = [ "fortify" ];
-
- patches = lib.optionals (lib.versionOlder version "2.088.0") [
- # Migrates D1-style operator overloads in DMD source, to allow building with
- # a newer DMD
- (fetchpatch {
- url = "https://github.com/dlang/dmd/commit/c4d33e5eb46c123761ac501e8c52f33850483a8a.patch";
- stripLen = 1;
- extraPrefix = "dmd/";
- hash = "sha256-N21mAPfaTo+zGCip4njejasraV5IsWVqlGR5eOdFZZE=";
- })
- ];
-
- postPatch = ''
- patchShebangs dmd/compiler/test/{runnable,fail_compilation,compilable,tools}{,/extra-files}/*.sh
-
- rm dmd/compiler/test/runnable/gdb1.d
- rm dmd/compiler/test/runnable/gdb10311.d
- rm dmd/compiler/test/runnable/gdb14225.d
- rm dmd/compiler/test/runnable/gdb14276.d
- rm dmd/compiler/test/runnable/gdb14313.d
- rm dmd/compiler/test/runnable/gdb14330.d
- rm dmd/compiler/test/runnable/gdb15729.sh
- rm dmd/compiler/test/runnable/gdb4149.d
- rm dmd/compiler/test/runnable/gdb4181.d
- rm dmd/compiler/test/compilable/ddocYear.d
- rm dmd/compiler/test/compilable/sarif_success_test.d
- rm dmd/compiler/test/fail_compilation/sarif_test.d
- rm dmd/compiler/test/fail_compilation/sarifmultiple_test.d
-
- # Disable tests that rely on objdump whitespace until fixed upstream:
- # https://issues.dlang.org/show_bug.cgi?id=23317
- rm dmd/compiler/test/runnable/cdvecfill.sh
- rm dmd/compiler/test/compilable/cdcmp.d
- '' + lib.optionalString (lib.versionAtLeast version "2.089.0" && lib.versionOlder version "2.092.2") ''
- rm dmd/compiler/test/dshell/test6952.d
- '' + lib.optionalString (lib.versionAtLeast version "2.092.2") ''
- substituteInPlace dmd/compiler/test/dshell/test6952.d --replace-fail "/usr/bin/env bash" "${bash}/bin/bash"
- '' + lib.optionalString stdenv.hostPlatform.isLinux ''
- substituteInPlace phobos/std/socket.d --replace-fail "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
- ''; # + lib.optionalString stdenv.hostPlatform.isDarwin ''
- # substituteInPlace phobos/std/socket.d --replace-fail "foreach (name; names)" "names = []; foreach (name; names)"
- #'';
-
- nativeBuildInputs = [
- makeWrapper
- which
- installShellFiles
- ] ++ lib.optionals (lib.versionOlder version "2.088.0") [
- git
- ];
-
- buildInputs = [
- curl
- tzdata
- ];
-
- nativeCheckInputs = [
- gdb
- ] ++ lib.optionals (lib.versionOlder version "2.089.0") [
- unzip
- ];
-
- buildFlags = [
- "BUILD=release"
- "ENABLE_RELEASE=1"
- "PIC=1"
- ];
-
- # Build and install are based on http://wiki.dlang.org/Building_DMD
- buildPhase = ''
- runHook preBuild
-
- export buildJobs=$NIX_BUILD_CORES
- [ -z "$enableParallelBuilding" ] && buildJobs=1
-
- ${dmdBin}/rdmd dmd/compiler/src/build.d -j$buildJobs $buildFlags \
- HOST_DMD=${dmdBin}/dmd
- make -C dmd/druntime -j$buildJobs DMD=${pathToDmd} $buildFlags
- echo ${tzdata}/share/zoneinfo/ > TZDatabaseDirFile
- echo ${lib.getLib curl}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} \
- > LibcurlPathFile
- make -C phobos -j$buildJobs $buildFlags \
- DMD=${pathToDmd} DFLAGS="-version=TZDatabaseDir -version=LibcurlPath -J$PWD"
-
- runHook postBuild
- '';
-
- doCheck = true;
-
- # many tests are disabled because they are failing
-
- # NOTE: Purity check is disabled for checkPhase because it doesn't fare well
- # with the DMD linker. See https://github.com/NixOS/nixpkgs/issues/97420
- checkPhase = ''
- runHook preCheck
-
- export checkJobs=$NIX_BUILD_CORES
- [ -z "$enableParallelChecking" ] && checkJobs=1
-
- CC=$CXX HOST_DMD=${pathToDmd} NIX_ENFORCE_PURITY= \
- ${dmdBin}/rdmd dmd/compiler/test/run.d -j$checkJobs
-
- NIX_ENFORCE_PURITY= \
- make -C phobos unittest -j$checkJobs $checkFlags \
- DFLAGS="-version=TZDatabaseDir -version=LibcurlPath -J$PWD"
-
- runHook postCheck
- '';
-
- installPhase = ''
- runHook preInstall
-
- install -Dm755 ${pathToDmd} $out/bin/dmd
-
- installManPage dmd/docs/man/man*/*
-
- mkdir -p $out/include/dmd
- cp -r {dmd/druntime/import/*,phobos/{std,etc}} $out/include/dmd/
-
- mkdir $out/lib
- cp phobos/generated/${osname}/release/${bits}/libphobos2.* $out/lib/
-
- wrapProgram $out/bin/dmd \
- --prefix PATH : "${targetPackages.stdenv.cc}/bin" \
- --set-default CC "${targetPackages.stdenv.cc}/bin/cc"
-
- substitute ${dmdConfFile} "$out/bin/dmd.conf" --subst-var out
-
- runHook postInstall
- '';
-
- preFixup = ''
- find $out/bin -type f -exec ${removeReferencesTo}/bin/remove-references-to -t ${dmdBin}/dmd '{}' +
- '';
-
- disallowedReferences = [ dmdBootstrap ];
-
- passthru = {
- inherit dmdBootstrap;
- };
-
- meta = with lib; {
- description = "Official reference compiler for the D language";
- homepage = "https://dlang.org/";
- changelog = "https://dlang.org/changelog/${finalAttrs.version}.html";
- # Everything is now Boost licensed, even the backend.
- # https://github.com/dlang/dmd/pull/6680
- license = licenses.boost;
- mainProgram = "dmd";
- maintainers = with maintainers; [ lionello dukc jtbx ];
- platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
- # ld: section __DATA/__thread_bss has type zero-fill but non-zero file offset file '/private/tmp/nix-build-dmd-2.109.1.drv-0/.rdmd-301/rdmd-build.d-A1CF043A7D87C5E88A58F3C0EF5A0DF7/objs/build.o' for architecture x86_64
- # clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
- broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64;
- };
-})
-#+END_SRC
-
-**** bootstrap.nix
-
-#+HEADER: :tangle "../nix-overlays/dmd/bootstrap.nix"
-#+BEGIN_SRC nix
-{ callPackage }:
-callPackage ./binary.nix {
- version = "2.090.1";
- hashes = {
- # Get these from `nix-prefetch-url http://downloads.dlang.org/releases/2.x/2.090.1/dmd.2.090.1.linux.tar.xz` etc..
- osx = "sha256-9HwGVO/8jfZ6aTiDIUi8w4C4Ukry0uUS8ACP3Ig8dmU=";
- linux = "sha256-ByCrIA4Nt7i9YT0L19VXIL1IqIp+iObcZux407amZu4=";
- };
-}
-#+END_SRC
-
-**** binary.nix
-
-#+HEADER: :tangle "../nix-overlays/dmd/binary.nix"
-#+BEGIN_SRC nix
-{
- lib,
- stdenv,
- fetchurl,
- curl,
- tzdata,
- autoPatchelfHook,
- fixDarwinDylibNames,
- glibc,
- version,
- hashes,
-}:
-
-let
- inherit (stdenv) hostPlatform;
- OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
- MODEL = toString hostPlatform.parsed.cpu.bits;
-in
-
-# On linux pargets like `pkgsLLVM.dmd` `cc` does not expose `libgcc`
-# and can't build `dmd`.
-assert hostPlatform.isLinux -> (stdenv.cc.cc ? libgcc);
-stdenv.mkDerivation {
- pname = "dmd-bootstrap";
- inherit version;
-
- src = fetchurl rec {
- name = "dmd.${version}.${OS}.tar.xz";
- url = "http://downloads.dlang.org/releases/2.x/${version}/${name}";
- sha256 = hashes.${OS} or (throw "missing bootstrap sha256 for OS ${OS}");
- };
-
- dontConfigure = true;
- dontBuild = true;
-
- nativeBuildInputs = lib.optionals hostPlatform.isLinux [
- autoPatchelfHook
- ] ++ lib.optionals hostPlatform.isDarwin [
- fixDarwinDylibNames
- ];
- propagatedBuildInputs = [
- curl
- tzdata
- ] ++ lib.optionals hostPlatform.isLinux [
- glibc
- stdenv.cc.cc.libgcc
- ];
-
- installPhase = ''
- runHook preInstall
-
- mkdir -p $out
-
- # try to copy model-specific binaries into bin first
- mv ${OS}/bin${MODEL} $out/bin || true
-
- mv src license.txt ${OS}/* $out/
-
- # move man into place
- mkdir -p $out/share
- mv man $out/share/
-
- # move docs into place
- mkdir -p $out/share/doc
- mv html/d $out/share/doc/
-
- # fix paths in dmd.conf (one level less)
- substituteInPlace $out/bin/dmd.conf --replace "/../../" "/../"
-
- runHook postInstall
- '';
-
- # Stripping on Darwin started to break libphobos2.a
- # Undefined symbols for architecture x86_64:
- # "_rt_envvars_enabled", referenced from:
- # __D2rt6config16rt_envvarsOptionFNbNiAyaMDFNbNiQkZQnZQq in libphobos2.a(config_99a_6c3.o)
- dontStrip = hostPlatform.isDarwin;
-
- meta = with lib; {
- description = "Digital Mars D Compiler Package";
- # As of 2.075 all sources and binaries use the boost license
- license = licenses.boost;
- maintainers = [ maintainers.lionello ];
- homepage = "https://dlang.org/";
- platforms = [ "x86_64-darwin" "i686-linux" "x86_64-linux" ];
- };
-}
-#+END_SRC
-
-** dub OK
-*** info
-**** links
-
-- https://code.dlang.org/packages/dub
-
-- https://github.com/dlang/dub
- - https://github.com/dlang/dub/releases
- - https://github.com/dlang/dub/issues
-
-- version in nixpkgs:
- - https://search.nixos.org/packages?channel=unstable&show=dub&from=0&size=100&sort=relevance&type=packages&query=dub
-
-*** overlays
-**** default.nix
-
-#+HEADER: :tangle "../nix-overlays/dub/default.nix"
-#+BEGIN_SRC nix
-import ./package.nix
-#+END_SRC
-
-**** package.nix OK ✓
-
-#+HEADER: :tangle "../nix-overlays/dub/package.nix"
-#+BEGIN_SRC nix
-{
- lib,
- stdenv,
- fetchFromGitHub,
- curl,
- <<dcompiler>>,
- dcompiler ? <<dcompiler>>,
- libevent,
- rsync,
-}:
-
-assert dcompiler != null;
-
-stdenv.mkDerivation (finalAttrs: {
- pname = "dub";
- version = "<<dub_version>>";
-
- enableParallelBuilding = true;
-
- src = fetchFromGitHub {
- owner = "dlang";
- repo = "dub";
- rev = "v${finalAttrs.version}";
- hash = "<<dub_hash>>";
- };
-
- postPatch = ''
- patchShebangs test
- '';
-
- nativeBuildInputs = [ dcompiler libevent rsync ];
- buildInputs = [ curl ];
-
- preBuild = ''
- for DCn in dmd ldmd2 gdmd; do
- echo "... check for D compiler $DCn ..."
- export DC=$(type -P $DCn || echo "")
- if [ ! "$DC" == "" ]; then
- break
- fi
- done
- if [ "$DC" == "" ]; then
- exit "Error: could not find D compiler"
- fi
- echo "$DCn found and used as D compiler in buildPhase for $pname"
- '';
-
- buildPhase = ''
- runHook preBuild
- $DC -run ./build.d
- runHook postBuild
- '';
-
- doCheck = !stdenv.hostPlatform.isDarwin;
-
- checkPhase = ''
- runHook preCheck
- export DUB=$NIX_BUILD_TOP/source/bin/dub
- export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
- if [ "$DC" == "" ]; then
- exit "Error: could not find D compiler"
- fi
- echo "DC out --> $DC"
- export HOME=$TMP
-
- rm -rf test/issue502-root-import
- rm -r test/dpath-variable # requires execution of dpath-variable.sh
- rm -rf test/git-dependency
- rm -rf test/use-c-sources # added to build v1.33.0
- rm -rf test/pr2642-cache-db # added to build v1.34.0
- rm -rf test/pr2644-describe-artifact-path # added to build v1.36.0
- rm -rf test/pr2647-build-deep # added to build v1.36.0
- rm -rf test/issue2698-cimportpaths-broken-with-dmd-ldc # added to build v1.40.0
-
- ./test/run-unittest.sh
- runHook postCheck
- '';
-
- installPhase = ''
- runHook preInstall
- install -Dm755 bin/dub $out/bin/dub
- runHook postInstall
- '';
-
- meta = with lib; {
- description = "Package and build manager for D programs and libraries";
- homepage = "https://code.dlang.org/";
- license = licenses.mit;
- mainProgram = "dub";
- maintainers = with maintainers; [ jtbx ];
- platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
- };
-})
-#+END_SRC
-
-*** dcompiler
-
-#+NAME: dcompiler
-#+BEGIN_SRC nix
-ldc
-#+END_SRC
-
-#+BEGIN_SRC nix
-dmd
-#+END_SRC
-
-** dtools OK ✓
-*** info
-**** links
-
-- https://code.dlang.org/packages/dtools
-
-- https://github.com/dlang/tools
- - https://github.com/dlang/tools/tags
- nix-prefetch --unpack https://github.com/dlang/tools/archive/refs/tags/v<<dtools_version>>.tar.gz
- - https://github.com/dlang/tools/issues
-
-- version in nixpkgs
- - https://search.nixos.org/packages?channel=unstable&show=dtools&from=0&size=100&sort=relevance&type=packages&query=dtools
-
-**** notes
-
-- OK dtools 2.103.1
-
-*** overlays
-**** default.nix
-
-#+HEADER: :tangle "../nix-overlays/dtools/default.nix"
-#+BEGIN_SRC nix
-import ./package.nix
-#+END_SRC
-
-**** package.nix
-
-#+HEADER: :tangle "../nix-overlays/dtools/package.nix"
-#+BEGIN_SRC nix
-{
- lib,
- stdenv,
- fetchFromGitHub,
- ldc,
- curl,
-}:
-
-stdenv.mkDerivation (finalAttrs: {
- pname = "dtools";
- version = "<<dtools_version>>";
-
- src = fetchFromGitHub {
- owner = "dlang";
- repo = "tools";
- rev = "v${finalAttrs.version}";
- hash = "<<dtools_hash>>";
- name = "dtools";
- };
-
- patches = [
- # Disable failing tests
- ./disabled-tests.diff
- # Fix LDC arm64 build
- ./fix-ldc-arm64.diff
- ];
-
- nativeBuildInputs = [ ldc ];
- buildInputs = [ curl ];
-
- makeFlags = [
- "CC=${stdenv.cc}/bin/cc"
- "DMD=${ldc.out}/bin/ldmd2"
- "INSTALL_DIR=$(out)"
- ];
-
- enableParallelBuilding = true;
-
- doCheck = true;
- checkTarget = "test_rdmd";
-
- meta = with lib; {
- description = "Ancillary tools for the D programming language";
- homepage = "https://github.com/dlang/tools";
- license = licenses.boost;
- maintainers = with maintainers; [ jtbx ];
- platforms = platforms.unix;
- };
-})
-#+END_SRC
-
-#+HEADER: :tangle "../nix-overlays/dtools/disabled-tests.diff"
-#+BEGIN_SRC diff
---- a/rdmd_test.d
-+++ b/rdmd_test.d
-@@ -616,7 +616,7 @@ void runTests(string rdmdApp, string compiler, string model)
- enforce(res.status == 1, res.output);
- }
-
-- version (Posix)
-+ version (none)
- {
- import std.conv : to;
- auto makeVersion = execute(["make", "--version"]).output.splitLines()[0];
-#+END_SRC
-
-#+HEADER: :tangle "../nix-overlays/dtools/fix-ldc-arm64.diff"
-#+BEGIN_SRC diff
-Adapted from https://github.com/dlang/tools/commit/6c6a042d1b08e3ec1790bd07a7f69424625ee866.patch
---- /dev/null
-+++ b/osmodel.mak
-@@ -0,0 +1,75 @@
-+# osmodel.mak
-+#
-+# Detects and sets the macros:
-+#
-+# OS = one of {osx,linux,freebsd,openbsd,netbsd,dragonflybsd,solaris}
-+# MODEL = one of { 32, 64 }
-+# MODEL_FLAG = one of { -m32, -m64 }
-+# ARCH = one of { x86, x86_64, aarch64 }
-+#
-+# Note:
-+# Keep this file in sync between druntime, phobos, and dmd repositories!
-+# Source: https://github.com/dlang/dmd/blob/master/src/osmodel.mak
-+
-+
-+ifeq (,$(OS))
-+ uname_S:=$(shell uname -s)
-+ ifeq (Darwin,$(uname_S))
-+ OS:=osx
-+ endif
-+ ifeq (Linux,$(uname_S))
-+ OS:=linux
-+ endif
-+ ifeq (FreeBSD,$(uname_S))
-+ OS:=freebsd
-+ endif
-+ ifeq (OpenBSD,$(uname_S))
-+ OS:=openbsd
-+ endif
-+ ifeq (NetBSD,$(uname_S))
-+ OS:=netbsd
-+ endif
-+ ifeq (DragonFly,$(uname_S))
-+ OS:=dragonflybsd
-+ endif
-+ ifeq (Solaris,$(uname_S))
-+ OS:=solaris
-+ endif
-+ ifeq (SunOS,$(uname_S))
-+ OS:=solaris
-+ endif
-+ ifeq (,$(OS))
-+ $(error Unrecognized or unsupported OS for uname: $(uname_S))
-+ endif
-+endif
-+
-+# When running make from XCode it may set environment var OS=MACOS.
-+# Adjust it here:
-+ifeq (MACOS,$(OS))
-+ OS:=osx
-+endif
-+
-+ifeq (,$(MODEL))
-+ ifeq ($(OS), solaris)
-+ uname_M:=$(shell isainfo -n)
-+ else
-+ uname_M:=$(shell uname -m)
-+ endif
-+ ifneq (,$(findstring $(uname_M),x86_64 amd64))
-+ MODEL:=64
-+ ARCH:=x86_64
-+ endif
-+ ifneq (,$(findstring $(uname_M),aarch64 arm64))
-+ MODEL:=64
-+ ARCH:=aarch64
-+ endif
-+ ifneq (,$(findstring $(uname_M),i386 i586 i686))
-+ MODEL:=32
-+ ARCH:=x86
-+ endif
-+ ifeq (,$(MODEL))
-+ $(error Cannot figure 32/64 model and arch from uname -m: $(uname_M))
-+ endif
-+endif
-+
-+MODEL_FLAG:=-m$(MODEL)
---- a/Makefile
-+++ b/Makefile
-@@ -9,9 +9,8 @@ DUB=dub
- WITH_DOC = no
- DOC = ../dlang.org
-
--# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile from dmd
--$(shell [ ! -d $(DMD_DIR) ] && git clone --depth=1 https://github.com/dlang/dmd $(DMD_DIR))
--include $(DMD_DIR)/compiler/src/osmodel.mak
-+# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile
-+include osmodel.mak
-
- ifeq (windows,$(OS))
- DOTEXE:=.exe
-@@ -30,7 +29,7 @@ DFLAGS = $(MODEL_FLAG) $(if $(findstring windows,$(OS)),,-fPIC) -preview=dip1000
- DFLAGS += $(WARNINGS)
-
- # Default DUB flags (DUB uses a different architecture format)
--DUBFLAGS = --arch=$(subst 32,x86,$(subst 64,x86_64,$(MODEL)))
-+DUBFLAGS = --arch=$(ARCH)
-
- TOOLS = \
- $(ROOT)/catdoc$(DOTEXE) \
-#+END_SRC
-
** versions GET
*** direnv
***** select version
diff --git a/org/dlang-overlays.org b/org/dlang-overlays.org
new file mode 100644
index 0000000..9904138
--- /dev/null
+++ b/org/dlang-overlays.org
@@ -0,0 +1,1156 @@
+-*- mode: org -*-
+#+TITLE: D nix overlays
+#+DESCRIPTION: dlang related nixpkgs of interest (dlang compilers & tools)
+#+FILETAGS: :nixos:nixpkgs:dlang:compiler:
+#+AUTHOR: Ralph Amissah
+#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]]
+#+COPYRIGHT: Copyright (C) 2023 Ralph Amissah
+#+LICENSE: Boost Software License 1.0
+#+LANGUAGE: en
+#+STARTUP: show3levels hideblocks hidestars noindent entitiespretty
+#+PROPERTY: header-args :exports code
+#+PROPERTY: header-args+ :noweb yes
+#+PROPERTY: header-args+ :results no
+#+PROPERTY: header-args+ :cache no
+#+PROPERTY: header-args+ :padline no
+#+PROPERTY: header-args+ :mkdirp yes
+#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t
+
+* nixpkgs overlays ( written to ../nix-overlays/ )
+** ldc OK ✓
+*** info
+**** links
+
+- https://wiki.dlang.org/LDC
+
+- https://github.com/ldc-developers/ldc
+ - https://github.com/ldc-developers/ldc/releases
+ - https://github.com/ldc-developers/ldc/issues
+
+- version in nixpkgs:
+ - https://search.nixos.org/packages?channel=unstable&show=ldc&from=0&size=100&sort=relevance&type=packages&query=ldc
+
+*** overlays OK ✓
+**** default.nix
+
+#+HEADER: :tangle "../nix-overlays/ldc/default.nix"
+#+BEGIN_SRC nix
+import ./package.nix
+#+END_SRC
+
+**** package.nix OK ✓
+
+#+HEADER: :tangle "../nix-overlays/ldc/package.nix"
+#+BEGIN_SRC nix
+{
+ lib,
+ stdenv,
+ fetchFromGitHub,
+ fetchpatch,
+ callPackage,
+ makeWrapper,
+ removeReferencesTo,
+ runCommand,
+ writeText,
+ targetPackages,
+ cmake,
+ ninja,
+ <<ldc_llvm_set>>,
+ curl,
+ tzdata,
+ lit,
+ gdb,
+ unzip,
+
+ ldcBootstrap ? callPackage ./bootstrap.nix { },
+}:
+
+let
+ pathConfig = runCommand "ldc-lib-paths" { } ''
+ mkdir $out
+ echo ${tzdata}/share/zoneinfo/ > $out/TZDatabaseDirFile
+ echo ${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} > $out/LibcurlPathFile
+ '';
+
+in
+
+stdenv.mkDerivation (finalAttrs: {
+ pname = "ldc";
+ version = "<<ldc_version>>";
+
+ src = fetchFromGitHub {
+ owner = "ldc-developers";
+ repo = "ldc";
+ rev = "v${finalAttrs.version}";
+ hash = "<<ldc_hash>>";
+ fetchSubmodules = true;
+ };
+
+ # https://issues.dlang.org/show_bug.cgi?id=19553
+ hardeningDisable = [ "fortify" ];
+
+ postPatch = ''
+ patchShebangs runtime tools tests
+
+ rm tests/dmd/fail_compilation/mixin_gc.d
+ rm tests/dmd/runnable/xtest46_gc.d
+ rm tests/dmd/runnable/testptrref_gc.d
+
+ # test depends on current year
+ rm tests/dmd/compilable/ddocYear.d
+ '' + lib.optionalString stdenv.hostPlatform.isLinux ''
+ substituteInPlace runtime/phobos/std/socket.d --replace-fail "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
+ '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
+ substituteInPlace runtime/phobos/std/socket.d --replace-fail "foreach (name; names)" "names = []; foreach (name; names)"
+
+ # https://github.com/NixOS/nixpkgs/issues/34817
+ rm -r tests/plugins/addFuncEntryCall
+ '';
+
+ nativeBuildInputs = [
+ cmake ldcBootstrap lit lit.python <<ldc_llvm_set>>.dev makeWrapper ninja unzip
+ ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
+ # https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
+ gdb
+ ];
+
+ buildInputs = [ curl tzdata ];
+
+ outputs = [ "out" "include" ];
+ outputInclude = "include";
+
+ cmakeFlags = [
+ "-DD_FLAGS=-d-version=TZDatabaseDir;-d-version=LibcurlPath;-J${pathConfig}"
+ "-DINCLUDE_INSTALL_DIR=${placeholder "include"}/include/d"
+ ];
+
+ postConfigure = ''
+ export DMD=$PWD/bin/ldmd2
+ '';
+
+ makeFlags = [ "DMD=$DMD" ];
+
+ fixNames = lib.optionalString stdenv.hostPlatform.isDarwin ''
+ fixDarwinDylibNames() {
+ local flags=()
+
+ for fn in "$@"; do
+ flags+=(-change "$(basename "$fn")" "$fn")
+ done
+
+ for fn in "$@"; do
+ if [ -L "$fn" ]; then continue; fi
+ echo "$fn: fixing dylib"
+ install_name_tool -id "$fn" "''${flags[@]}" "$fn"
+ done
+ }
+
+ fixDarwinDylibNames $(find "$(pwd)/lib" -name "*.dylib")
+ export DYLD_LIBRARY_PATH=$(pwd)/lib
+ '';
+
+ # https://github.com/ldc-developers/ldc/issues/2497#issuecomment-459633746
+ additionalExceptions = lib.optionalString stdenv.hostPlatform.isDarwin "|druntime-test-shared";
+
+ checkPhase = ''
+ # Build default lib test runners
+ ninja -j$NIX_BUILD_CORES all-test-runners
+
+ ${finalAttrs.fixNames}
+
+ # Run dmd testsuite
+ export DMD_TESTSUITE_MAKE_ARGS="-j$NIX_BUILD_CORES DMD=$DMD"
+ ctest -V -R "dmd-testsuite"
+
+ # Build and run LDC D unittests.
+ ctest --output-on-failure -R "ldc2-unittest"
+
+ # Run LIT testsuite.
+ ctest -V -R "lit-tests"
+
+ # Run default lib unittests
+ ctest -j$NIX_BUILD_CORES --output-on-failure -E "ldc2-unittest|lit-tests|dmd-testsuite${finalAttrs.additionalExceptions}"
+ '';
+
+ postInstall = ''
+ wrapProgram $out/bin/ldc2 \
+ --prefix PATH : ${targetPackages.stdenv.cc}/bin \
+ --set-default CC ${targetPackages.stdenv.cc}/bin/cc
+ '';
+
+ preFixup = ''
+ find $out/bin -type f -exec ${removeReferencesTo}/bin/remove-references-to -t ${ldcBootstrap} '{}' +
+ '';
+
+ disallowedReferences = [ ldcBootstrap ];
+
+ meta = with lib; {
+ description = "LLVM-based D compiler";
+ homepage = "https://github.com/ldc-developers/ldc";
+ changelog = "https://github.com/ldc-developers/ldc/releases/tag/v${finalAttrs.version}";
+ # from https://github.com/ldc-developers/ldc/blob/master/LICENSE
+ license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
+ mainProgram = "ldc2";
+ maintainers = with maintainers; [ lionello jtbx ];
+ platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+ };
+
+ passthru.ldcBootstrap = ldcBootstrap;
+ passthru.tests =
+ let
+ ldc = finalAttrs.finalPackage;
+ helloWorld = stdenv.mkDerivation (finalAttrs: {
+ name = "ldc-hello-world";
+ src = writeText "hello_world.d" ''
+ module hello_world;
+ import std.stdio;
+ void main() {
+ writeln("Hello, world!");
+ }
+ '';
+ dontUnpack = true;
+ buildInputs = [ ldc ];
+ dFlags = [ ];
+ buildPhase = ''
+ ldc2 ${lib.escapeShellArgs finalAttrs.dFlags} -of=test $src
+ '';
+ installPhase = ''
+ mkdir -p $out/bin
+ mv test $out/bin
+ '';
+ });
+ in {
+ # Without -shared, built binaries should not contain
+ # references to the compiler binaries.
+ no-references-to-compiler = helloWorld.overrideAttrs {
+ disallowedReferences = [ ldc ];
+ dFlags = ["-g"];
+ };
+ };
+})
+#+END_SRC
+
+**** bootstrap.nix
+
+- this is the ldc bootstrap in current use, nixpkgs:
+
+#+HEADER: :tangle "../nix-overlays/ldc/bootstrap.nix"
+#+BEGIN_SRC nix
+{
+ lib,
+ stdenv,
+ fetchurl,
+ curl,
+ tzdata,
+ autoPatchelfHook,
+ fixDarwinDylibNames,
+ libxml2,
+}:
+
+let
+ inherit (stdenv) hostPlatform;
+ OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
+ ARCH = if hostPlatform.isDarwin && hostPlatform.isAarch64 then "arm64" else hostPlatform.parsed.cpu.name;
+ <<ldc_bootstrap_1-41-0_hashes>>
+in stdenv.mkDerivation {
+ pname = "ldc-bootstrap";
+ inherit version;
+
+ src = fetchurl rec {
+ name = "ldc2-${version}-${OS}-${ARCH}.tar.xz";
+ url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/${name}";
+ hash = hashes."${OS}-${ARCH}" or (throw "missing bootstrap hash for ${OS}-${ARCH}");
+ };
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ nativeBuildInputs = lib.optionals hostPlatform.isLinux [
+ autoPatchelfHook
+ ] ++ lib.optional hostPlatform.isDarwin fixDarwinDylibNames;
+
+ buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libxml2 stdenv.cc.cc ];
+
+ propagatedBuildInputs = [ curl tzdata ];
+
+ installPhase = ''
+ mkdir -p $out
+
+ mv bin etc import lib LICENSE README $out/
+ '';
+
+ meta = with lib; {
+ description = "LLVM-based D Compiler";
+ homepage = "https://github.com/ldc-developers/ldc";
+ # from https://github.com/ldc-developers/ldc/blob/master/LICENSE
+ license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
+ maintainers = with maintainers; [ lionello ];
+ platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
+ };
+}
+#+END_SRC
+
+***** bootstrap.nix version SELECT
+****** bootstrap.nix ldc2-1.41.0
+
+#+NAME: ldc_bootstrap_1-41-0_hashes
+#+BEGIN_SRC nix
+version = "1.41.0";
+hashes = {
+ # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.41.0/ldc2-1.41.0-osx-x86_64.tar.xz` etc..
+ osx-x86_64 = "sha256-W8/0i2PFakXbqs2wxb3cjqa+htSgx7LHyDGOBH9yEYE=";
+ linux-x86_64 = "sha256-SkOUV/D+WeadAv1rV1Sfw8h60PVa2fueQlB7b44yfI8=";
+ linux-aarch64 = "sha256-HEuVChPVM3ntT1ZDZsJ+xW1iYeIWhogNcMdIaz6Me6g=";
+ osx-arm64 = "sha256-FXJnBC8QsEchBhkxSqcZtPC/iHYB6TscY0qh7LPFRuQ=";
+};
+#+END_SRC
+
+****** bootstrap.nix ldc2-1.30.0
+
+#+NAME: ldc_bootstrap_1-30-0_hashes
+#+BEGIN_SRC nix
+version = "1.30.0";
+hashes = {
+ # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.30.0/ldc2-1.30.0-osx-x86_64.tar.xz` etc..
+ osx-x86_64 = "sha256-AAWZvxuZC82xvrW6fpYm783TY+H8k3DvqE94ZF1yjmk=";
+ linux-x86_64 = "sha256-V4TUzEfQhFrwiX07dHOgjdAoGkzausCkhnQIQNAU/eE=";
+ linux-aarch64 = "sha256-kTeglub75iv/jWWNPCn15aCGAbmck0RQl6L7bFOUu7Y=";
+ osx-arm64 = "sha256-Nb/owBdIeroB9jLMDvwjo8bvsTC9vFyJPLMTOMsSAd4=";
+};
+#+END_SRC
+
+****** bootstrap.nix ldc2-1.25.0
+
+#+NAME: ldc_bootstrap_1-25-0_hashes
+#+BEGIN_SRC nix
+version = "1.25.0";
+hashes = {
+ # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.25.0/ldc2-1.25.0-osx-x86_64.tar.xz` etc..
+ osx-x86_64 = "sha256-6iKnbS+oalLKmyS8qYD/wS21b7+O+VgsWG2iT4PrWPU=";
+ linux-x86_64 = "sha256-sfg47RdlsIpryc3iZvE17OtLweh3Zw6DeuNJYgpuH+o=";
+ linux-aarch64 = "sha256-UDZ43x4flSo+SfsPeE8juZO2Wtk2ZzwySk0ADHnvJBI=";
+ osx-arm64 = "sha256-O/x0vy0wwQFaDc4uWSeMhx+chJKqbQb6e5QNYf+7DCw=";
+};
+#+END_SRC
+
+** dmd OK ✓
+*** info
+**** links
+
+- https://dlang.org/
+ - https://wiki.dlang.org/DMD
+
+- https://github.com/dlang/dmd
+ - https://github.com/dlang/dmd/tags
+ - https://github.com/dlang/dmd/pulls
+
+- version in nixpkgs:
+ - https://search.nixos.org/packages?channel=unstable&show=dmd&from=0&size=100&sort=relevance&type=packages&query=dmd
+
+*** overlays
+**** default.nix
+
+#+HEADER: :tangle "../nix-overlays/dmd/default.nix"
+#+BEGIN_SRC nix
+import ./package.nix
+#+END_SRC
+
+**** package.nix OK ✓
+***** package.nix >=2.108.0)
+
+#+HEADER: :tangle "../nix-overlays/dmd/package.nix"
+#+BEGIN_SRC nix
+import ./generic.nix {
+ version = "<<dmd_version>>";
+ dmdHash = "<<dmd_hash>>";
+ phobosHash = "<<phobos_hash>>";
+}
+#+END_SRC
+
+***** package.nix < 2.108.0)
+
+#+HEADER: :tangle-NO "../nix-overlays/dmd/package.nix"
+#+BEGIN_SRC nix
+import ./generic.nix {
+ version = "<<dmd_version>>";
+ dmdSha256 = "<<dmd_hash>>";
+ phobosSha256 = "<<phobos_hash>>";
+}
+#+END_SRC
+
+**** generic.nix
+
+#+HEADER: :tangle "../nix-overlays/dmd/generic.nix"
+#+BEGIN_SRC nix
+{
+ version,
+ dmdHash,
+ phobosHash,
+}:
+
+{
+ stdenv,
+ lib,
+ fetchFromGitHub,
+ removeReferencesTo,
+ makeWrapper,
+ which,
+ writeTextFile,
+ curl,
+ tzdata,
+ gdb,
+ callPackage,
+ targetPackages,
+ fetchpatch,
+ bash,
+ installShellFiles,
+ git,
+ unzip,
+ dmdBootstrap ? callPackage ./bootstrap.nix { },
+ dmdBin ? "${dmdBootstrap}/bin",
+}:
+
+let
+ dmdConfFile = writeTextFile {
+ name = "dmd.conf";
+ text = (lib.generators.toINI { } {
+ Environment = {
+ DFLAGS = ''-I@out@/include/dmd -L-L@out@/lib -fPIC ${lib.optionalString (!targetPackages.stdenv.cc.isClang) "-L--export-dynamic"}'';
+ };
+ });
+ };
+
+ bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
+ osname = if stdenv.hostPlatform.isDarwin then "osx"
+ else stdenv.hostPlatform.parsed.kernel.name;
+
+ pathToDmd = "\${NIX_BUILD_TOP}/dmd/generated/${osname}/release/${bits}/dmd";
+in
+
+stdenv.mkDerivation (finalAttrs: {
+ pname = "dmd";
+ inherit version;
+
+ enableParallelBuilding = true;
+
+ srcs = [
+ (fetchFromGitHub {
+ owner = "dlang";
+ repo = "dmd";
+ rev = "v${finalAttrs.version}";
+ hash = dmdHash;
+ name = "dmd";
+ })
+ (fetchFromGitHub {
+ owner = "dlang";
+ repo = "phobos";
+ rev = "v${finalAttrs.version}";
+ hash = phobosHash;
+ name = "phobos";
+ })
+ ];
+
+ sourceRoot = ".";
+
+ # https://issues.dlang.org/show_bug.cgi?id=19553
+ hardeningDisable = [ "fortify" ];
+
+ patches = lib.optionals (lib.versionOlder version "2.088.0") [
+ # Migrates D1-style operator overloads in DMD source, to allow building with
+ # a newer DMD
+ (fetchpatch {
+ url = "https://github.com/dlang/dmd/commit/c4d33e5eb46c123761ac501e8c52f33850483a8a.patch";
+ stripLen = 1;
+ extraPrefix = "dmd/";
+ hash = "sha256-N21mAPfaTo+zGCip4njejasraV5IsWVqlGR5eOdFZZE=";
+ })
+ ];
+
+ postPatch = ''
+ patchShebangs dmd/compiler/test/{runnable,fail_compilation,compilable,tools}{,/extra-files}/*.sh
+
+ rm dmd/compiler/test/runnable/gdb1.d
+ rm dmd/compiler/test/runnable/gdb10311.d
+ rm dmd/compiler/test/runnable/gdb14225.d
+ rm dmd/compiler/test/runnable/gdb14276.d
+ rm dmd/compiler/test/runnable/gdb14313.d
+ rm dmd/compiler/test/runnable/gdb14330.d
+ rm dmd/compiler/test/runnable/gdb15729.sh
+ rm dmd/compiler/test/runnable/gdb4149.d
+ rm dmd/compiler/test/runnable/gdb4181.d
+ rm dmd/compiler/test/compilable/ddocYear.d
+ rm dmd/compiler/test/compilable/sarif_success_test.d
+ rm dmd/compiler/test/fail_compilation/sarif_test.d
+ rm dmd/compiler/test/fail_compilation/sarifmultiple_test.d
+
+ # Disable tests that rely on objdump whitespace until fixed upstream:
+ # https://issues.dlang.org/show_bug.cgi?id=23317
+ rm dmd/compiler/test/runnable/cdvecfill.sh
+ rm dmd/compiler/test/compilable/cdcmp.d
+ '' + lib.optionalString (lib.versionAtLeast version "2.089.0" && lib.versionOlder version "2.092.2") ''
+ rm dmd/compiler/test/dshell/test6952.d
+ '' + lib.optionalString (lib.versionAtLeast version "2.092.2") ''
+ substituteInPlace dmd/compiler/test/dshell/test6952.d --replace-fail "/usr/bin/env bash" "${bash}/bin/bash"
+ '' + lib.optionalString stdenv.hostPlatform.isLinux ''
+ substituteInPlace phobos/std/socket.d --replace-fail "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
+ ''; # + lib.optionalString stdenv.hostPlatform.isDarwin ''
+ # substituteInPlace phobos/std/socket.d --replace-fail "foreach (name; names)" "names = []; foreach (name; names)"
+ #'';
+
+ nativeBuildInputs = [
+ makeWrapper
+ which
+ installShellFiles
+ ] ++ lib.optionals (lib.versionOlder version "2.088.0") [
+ git
+ ];
+
+ buildInputs = [
+ curl
+ tzdata
+ ];
+
+ nativeCheckInputs = [
+ gdb
+ ] ++ lib.optionals (lib.versionOlder version "2.089.0") [
+ unzip
+ ];
+
+ buildFlags = [
+ "BUILD=release"
+ "ENABLE_RELEASE=1"
+ "PIC=1"
+ ];
+
+ # Build and install are based on http://wiki.dlang.org/Building_DMD
+ buildPhase = ''
+ runHook preBuild
+
+ export buildJobs=$NIX_BUILD_CORES
+ [ -z "$enableParallelBuilding" ] && buildJobs=1
+
+ ${dmdBin}/rdmd dmd/compiler/src/build.d -j$buildJobs $buildFlags \
+ HOST_DMD=${dmdBin}/dmd
+ make -C dmd/druntime -j$buildJobs DMD=${pathToDmd} $buildFlags
+ echo ${tzdata}/share/zoneinfo/ > TZDatabaseDirFile
+ echo ${lib.getLib curl}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} \
+ > LibcurlPathFile
+ make -C phobos -j$buildJobs $buildFlags \
+ DMD=${pathToDmd} DFLAGS="-version=TZDatabaseDir -version=LibcurlPath -J$PWD"
+
+ runHook postBuild
+ '';
+
+ doCheck = true;
+
+ # many tests are disabled because they are failing
+
+ # NOTE: Purity check is disabled for checkPhase because it doesn't fare well
+ # with the DMD linker. See https://github.com/NixOS/nixpkgs/issues/97420
+ checkPhase = ''
+ runHook preCheck
+
+ export checkJobs=$NIX_BUILD_CORES
+ [ -z "$enableParallelChecking" ] && checkJobs=1
+
+ CC=$CXX HOST_DMD=${pathToDmd} NIX_ENFORCE_PURITY= \
+ ${dmdBin}/rdmd dmd/compiler/test/run.d -j$checkJobs
+
+ NIX_ENFORCE_PURITY= \
+ make -C phobos unittest -j$checkJobs $checkFlags \
+ DFLAGS="-version=TZDatabaseDir -version=LibcurlPath -J$PWD"
+
+ runHook postCheck
+ '';
+
+ installPhase = ''
+ runHook preInstall
+
+ install -Dm755 ${pathToDmd} $out/bin/dmd
+
+ installManPage dmd/docs/man/man*/*
+
+ mkdir -p $out/include/dmd
+ cp -r {dmd/druntime/import/*,phobos/{std,etc}} $out/include/dmd/
+
+ mkdir $out/lib
+ cp phobos/generated/${osname}/release/${bits}/libphobos2.* $out/lib/
+
+ wrapProgram $out/bin/dmd \
+ --prefix PATH : "${targetPackages.stdenv.cc}/bin" \
+ --set-default CC "${targetPackages.stdenv.cc}/bin/cc"
+
+ substitute ${dmdConfFile} "$out/bin/dmd.conf" --subst-var out
+
+ runHook postInstall
+ '';
+
+ preFixup = ''
+ find $out/bin -type f -exec ${removeReferencesTo}/bin/remove-references-to -t ${dmdBin}/dmd '{}' +
+ '';
+
+ disallowedReferences = [ dmdBootstrap ];
+
+ passthru = {
+ inherit dmdBootstrap;
+ };
+
+ meta = with lib; {
+ description = "Official reference compiler for the D language";
+ homepage = "https://dlang.org/";
+ changelog = "https://dlang.org/changelog/${finalAttrs.version}.html";
+ # Everything is now Boost licensed, even the backend.
+ # https://github.com/dlang/dmd/pull/6680
+ license = licenses.boost;
+ mainProgram = "dmd";
+ maintainers = with maintainers; [ lionello dukc jtbx ];
+ platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
+ # ld: section __DATA/__thread_bss has type zero-fill but non-zero file offset file '/private/tmp/nix-build-dmd-2.109.1.drv-0/.rdmd-301/rdmd-build.d-A1CF043A7D87C5E88A58F3C0EF5A0DF7/objs/build.o' for architecture x86_64
+ # clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
+ broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64;
+ };
+})
+#+END_SRC
+
+**** bootstrap.nix
+
+#+HEADER: :tangle "../nix-overlays/dmd/bootstrap.nix"
+#+BEGIN_SRC nix
+{ callPackage }:
+callPackage ./binary.nix {
+ version = "2.090.1";
+ hashes = {
+ # Get these from `nix-prefetch-url http://downloads.dlang.org/releases/2.x/2.090.1/dmd.2.090.1.linux.tar.xz` etc..
+ osx = "sha256-9HwGVO/8jfZ6aTiDIUi8w4C4Ukry0uUS8ACP3Ig8dmU=";
+ linux = "sha256-ByCrIA4Nt7i9YT0L19VXIL1IqIp+iObcZux407amZu4=";
+ };
+}
+#+END_SRC
+
+**** binary.nix
+
+#+HEADER: :tangle "../nix-overlays/dmd/binary.nix"
+#+BEGIN_SRC nix
+{
+ lib,
+ stdenv,
+ fetchurl,
+ curl,
+ tzdata,
+ autoPatchelfHook,
+ fixDarwinDylibNames,
+ glibc,
+ version,
+ hashes,
+}:
+
+let
+ inherit (stdenv) hostPlatform;
+ OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
+ MODEL = toString hostPlatform.parsed.cpu.bits;
+in
+
+# On linux pargets like `pkgsLLVM.dmd` `cc` does not expose `libgcc`
+# and can't build `dmd`.
+assert hostPlatform.isLinux -> (stdenv.cc.cc ? libgcc);
+stdenv.mkDerivation {
+ pname = "dmd-bootstrap";
+ inherit version;
+
+ src = fetchurl rec {
+ name = "dmd.${version}.${OS}.tar.xz";
+ url = "http://downloads.dlang.org/releases/2.x/${version}/${name}";
+ sha256 = hashes.${OS} or (throw "missing bootstrap sha256 for OS ${OS}");
+ };
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ nativeBuildInputs = lib.optionals hostPlatform.isLinux [
+ autoPatchelfHook
+ ] ++ lib.optionals hostPlatform.isDarwin [
+ fixDarwinDylibNames
+ ];
+ propagatedBuildInputs = [
+ curl
+ tzdata
+ ] ++ lib.optionals hostPlatform.isLinux [
+ glibc
+ stdenv.cc.cc.libgcc
+ ];
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out
+
+ # try to copy model-specific binaries into bin first
+ mv ${OS}/bin${MODEL} $out/bin || true
+
+ mv src license.txt ${OS}/* $out/
+
+ # move man into place
+ mkdir -p $out/share
+ mv man $out/share/
+
+ # move docs into place
+ mkdir -p $out/share/doc
+ mv html/d $out/share/doc/
+
+ # fix paths in dmd.conf (one level less)
+ substituteInPlace $out/bin/dmd.conf --replace "/../../" "/../"
+
+ runHook postInstall
+ '';
+
+ # Stripping on Darwin started to break libphobos2.a
+ # Undefined symbols for architecture x86_64:
+ # "_rt_envvars_enabled", referenced from:
+ # __D2rt6config16rt_envvarsOptionFNbNiAyaMDFNbNiQkZQnZQq in libphobos2.a(config_99a_6c3.o)
+ dontStrip = hostPlatform.isDarwin;
+
+ meta = with lib; {
+ description = "Digital Mars D Compiler Package";
+ # As of 2.075 all sources and binaries use the boost license
+ license = licenses.boost;
+ maintainers = [ maintainers.lionello ];
+ homepage = "https://dlang.org/";
+ platforms = [ "x86_64-darwin" "i686-linux" "x86_64-linux" ];
+ };
+}
+#+END_SRC
+
+** dub OK
+*** info
+**** links
+
+- https://code.dlang.org/packages/dub
+
+- https://github.com/dlang/dub
+ - https://github.com/dlang/dub/releases
+ - https://github.com/dlang/dub/issues
+
+- version in nixpkgs:
+ - https://search.nixos.org/packages?channel=unstable&show=dub&from=0&size=100&sort=relevance&type=packages&query=dub
+
+*** overlays
+**** default.nix
+
+#+HEADER: :tangle "../nix-overlays/dub/default.nix"
+#+BEGIN_SRC nix
+import ./package.nix
+#+END_SRC
+
+**** package.nix OK ✓
+
+#+HEADER: :tangle "../nix-overlays/dub/package.nix"
+#+BEGIN_SRC nix
+{
+ lib,
+ stdenv,
+ fetchFromGitHub,
+ curl,
+ <<dcompiler>>,
+ dcompiler ? <<dcompiler>>,
+ libevent,
+ rsync,
+}:
+
+assert dcompiler != null;
+
+stdenv.mkDerivation (finalAttrs: {
+ pname = "dub";
+ version = "<<dub_version>>";
+
+ enableParallelBuilding = true;
+
+ src = fetchFromGitHub {
+ owner = "dlang";
+ repo = "dub";
+ rev = "v${finalAttrs.version}";
+ hash = "<<dub_hash>>";
+ };
+
+ postPatch = ''
+ patchShebangs test
+ '';
+
+ nativeBuildInputs = [ dcompiler libevent rsync ];
+ buildInputs = [ curl ];
+
+ preBuild = ''
+ for DCn in dmd ldmd2 gdmd; do
+ echo "... check for D compiler $DCn ..."
+ export DC=$(type -P $DCn || echo "")
+ if [ ! "$DC" == "" ]; then
+ break
+ fi
+ done
+ if [ "$DC" == "" ]; then
+ exit "Error: could not find D compiler"
+ fi
+ echo "$DCn found and used as D compiler in buildPhase for $pname"
+ '';
+
+ buildPhase = ''
+ runHook preBuild
+ $DC -run ./build.d
+ runHook postBuild
+ '';
+
+ doCheck = !stdenv.hostPlatform.isDarwin;
+
+ checkPhase = ''
+ runHook preCheck
+ export DUB=$NIX_BUILD_TOP/source/bin/dub
+ export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
+ if [ "$DC" == "" ]; then
+ exit "Error: could not find D compiler"
+ fi
+ echo "DC out --> $DC"
+ export HOME=$TMP
+
+ rm -rf test/issue502-root-import
+ rm -r test/dpath-variable # requires execution of dpath-variable.sh
+ rm -rf test/git-dependency
+ rm -rf test/use-c-sources # added to build v1.33.0
+ rm -rf test/pr2642-cache-db # added to build v1.34.0
+ rm -rf test/pr2644-describe-artifact-path # added to build v1.36.0
+ rm -rf test/pr2647-build-deep # added to build v1.36.0
+ rm -rf test/issue2698-cimportpaths-broken-with-dmd-ldc # added to build v1.40.0
+
+ ./test/run-unittest.sh
+ runHook postCheck
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ install -Dm755 bin/dub $out/bin/dub
+ runHook postInstall
+ '';
+
+ meta = with lib; {
+ description = "Package and build manager for D programs and libraries";
+ homepage = "https://code.dlang.org/";
+ license = licenses.mit;
+ mainProgram = "dub";
+ maintainers = with maintainers; [ jtbx ];
+ platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+ };
+})
+#+END_SRC
+
+*** dcompiler
+
+#+NAME: dcompiler
+#+BEGIN_SRC nix
+ldc
+#+END_SRC
+
+#+BEGIN_SRC nix
+dmd
+#+END_SRC
+
+** dtools OK ✓
+*** info
+**** links
+
+- https://code.dlang.org/packages/dtools
+
+- https://github.com/dlang/tools
+ - https://github.com/dlang/tools/tags
+ nix-prefetch --unpack https://github.com/dlang/tools/archive/refs/tags/v<<dtools_version>>.tar.gz
+ - https://github.com/dlang/tools/issues
+
+- version in nixpkgs
+ - https://search.nixos.org/packages?channel=unstable&show=dtools&from=0&size=100&sort=relevance&type=packages&query=dtools
+
+**** notes
+
+- OK dtools 2.103.1
+
+*** overlays
+**** default.nix
+
+#+HEADER: :tangle "../nix-overlays/dtools/default.nix"
+#+BEGIN_SRC nix
+import ./package.nix
+#+END_SRC
+
+**** package.nix
+
+#+HEADER: :tangle "../nix-overlays/dtools/package.nix"
+#+BEGIN_SRC nix
+{
+ lib,
+ stdenv,
+ fetchFromGitHub,
+ ldc,
+ curl,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+ pname = "dtools";
+ version = "<<dtools_version>>";
+
+ src = fetchFromGitHub {
+ owner = "dlang";
+ repo = "tools";
+ rev = "v${finalAttrs.version}";
+ hash = "<<dtools_hash>>";
+ name = "dtools";
+ };
+
+ patches = [
+ # Disable failing tests
+ ./disabled-tests.diff
+ # Fix LDC arm64 build
+ ./fix-ldc-arm64.diff
+ ];
+
+ nativeBuildInputs = [ ldc ];
+ buildInputs = [ curl ];
+
+ makeFlags = [
+ "CC=${stdenv.cc}/bin/cc"
+ "DMD=${ldc.out}/bin/ldmd2"
+ "INSTALL_DIR=$(out)"
+ ];
+
+ enableParallelBuilding = true;
+
+ doCheck = true;
+ checkTarget = "test_rdmd";
+
+ meta = with lib; {
+ description = "Ancillary tools for the D programming language";
+ homepage = "https://github.com/dlang/tools";
+ license = licenses.boost;
+ maintainers = with maintainers; [ jtbx ];
+ platforms = platforms.unix;
+ };
+})
+#+END_SRC
+
+#+HEADER: :tangle "../nix-overlays/dtools/disabled-tests.diff"
+#+BEGIN_SRC diff
+--- a/rdmd_test.d
++++ b/rdmd_test.d
+@@ -616,7 +616,7 @@ void runTests(string rdmdApp, string compiler, string model)
+ enforce(res.status == 1, res.output);
+ }
+
+- version (Posix)
++ version (none)
+ {
+ import std.conv : to;
+ auto makeVersion = execute(["make", "--version"]).output.splitLines()[0];
+#+END_SRC
+
+#+HEADER: :tangle "../nix-overlays/dtools/fix-ldc-arm64.diff"
+#+BEGIN_SRC diff
+Adapted from https://github.com/dlang/tools/commit/6c6a042d1b08e3ec1790bd07a7f69424625ee866.patch
+--- /dev/null
++++ b/osmodel.mak
+@@ -0,0 +1,75 @@
++# osmodel.mak
++#
++# Detects and sets the macros:
++#
++# OS = one of {osx,linux,freebsd,openbsd,netbsd,dragonflybsd,solaris}
++# MODEL = one of { 32, 64 }
++# MODEL_FLAG = one of { -m32, -m64 }
++# ARCH = one of { x86, x86_64, aarch64 }
++#
++# Note:
++# Keep this file in sync between druntime, phobos, and dmd repositories!
++# Source: https://github.com/dlang/dmd/blob/master/src/osmodel.mak
++
++
++ifeq (,$(OS))
++ uname_S:=$(shell uname -s)
++ ifeq (Darwin,$(uname_S))
++ OS:=osx
++ endif
++ ifeq (Linux,$(uname_S))
++ OS:=linux
++ endif
++ ifeq (FreeBSD,$(uname_S))
++ OS:=freebsd
++ endif
++ ifeq (OpenBSD,$(uname_S))
++ OS:=openbsd
++ endif
++ ifeq (NetBSD,$(uname_S))
++ OS:=netbsd
++ endif
++ ifeq (DragonFly,$(uname_S))
++ OS:=dragonflybsd
++ endif
++ ifeq (Solaris,$(uname_S))
++ OS:=solaris
++ endif
++ ifeq (SunOS,$(uname_S))
++ OS:=solaris
++ endif
++ ifeq (,$(OS))
++ $(error Unrecognized or unsupported OS for uname: $(uname_S))
++ endif
++endif
++
++# When running make from XCode it may set environment var OS=MACOS.
++# Adjust it here:
++ifeq (MACOS,$(OS))
++ OS:=osx
++endif
++
++ifeq (,$(MODEL))
++ ifeq ($(OS), solaris)
++ uname_M:=$(shell isainfo -n)
++ else
++ uname_M:=$(shell uname -m)
++ endif
++ ifneq (,$(findstring $(uname_M),x86_64 amd64))
++ MODEL:=64
++ ARCH:=x86_64
++ endif
++ ifneq (,$(findstring $(uname_M),aarch64 arm64))
++ MODEL:=64
++ ARCH:=aarch64
++ endif
++ ifneq (,$(findstring $(uname_M),i386 i586 i686))
++ MODEL:=32
++ ARCH:=x86
++ endif
++ ifeq (,$(MODEL))
++ $(error Cannot figure 32/64 model and arch from uname -m: $(uname_M))
++ endif
++endif
++
++MODEL_FLAG:=-m$(MODEL)
+--- a/Makefile
++++ b/Makefile
+@@ -9,9 +9,8 @@ DUB=dub
+ WITH_DOC = no
+ DOC = ../dlang.org
+
+-# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile from dmd
+-$(shell [ ! -d $(DMD_DIR) ] && git clone --depth=1 https://github.com/dlang/dmd $(DMD_DIR))
+-include $(DMD_DIR)/compiler/src/osmodel.mak
++# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile
++include osmodel.mak
+
+ ifeq (windows,$(OS))
+ DOTEXE:=.exe
+@@ -30,7 +29,7 @@ DFLAGS = $(MODEL_FLAG) $(if $(findstring windows,$(OS)),,-fPIC) -preview=dip1000
+ DFLAGS += $(WARNINGS)
+
+ # Default DUB flags (DUB uses a different architecture format)
+-DUBFLAGS = --arch=$(subst 32,x86,$(subst 64,x86_64,$(MODEL)))
++DUBFLAGS = --arch=$(ARCH)
+
+ TOOLS = \
+ $(ROOT)/catdoc$(DOTEXE) \
+#+END_SRC
+
+** versions GET
+*** direnv
+***** select version
+
+#+NAME: direnv_version
+#+HEADER: :noweb yes
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:direnv-version()>>
+#+END_SRC
+
+#+NAME: direnv_hash
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:direnv-hash()>>
+#+END_SRC
+
+*** ldc
+***** version & sha256 nix composite
+
+#+NAME: ldc_version_info
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:ldc-version-info()>>
+#+END_SRC
+
+***** selected version
+
+#+NAME: ldc_version
+#+HEADER: :noweb yes
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:ldc-version()>>
+#+END_SRC
+
+#+NAME: ldc_hash
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:ldc-hash()>>
+#+END_SRC
+
+#+NAME: ldc_llvm_set
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:ldc-llvm-set()>>
+#+END_SRC
+
+*** dmd
+**** selected version
+
+#+NAME: dmd_version
+#+HEADER: :noweb yes
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:dmd-version()>>
+#+END_SRC
+
+#+NAME: dmd_hash
+#+BEGIN_SRC org
+<<./nix-develop-dlang-shared.org:dmd-hash()>>
+#+END_SRC
+
+#+NAME: phobos_hash
+#+BEGIN_SRC org
+<<./nix-develop-dlang-shared.org:phobos-hash()>>
+#+END_SRC
+
+*** dub
+**** selected version
+
+#+NAME: dub_version
+#+HEADER: :noweb yes
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:dub-version()>>
+#+END_SRC
+
+#+NAME: dub_hash
+#+BEGIN_SRC nix
+<<./nix-develop-dlang-shared.org:dub-hash()>>
+#+END_SRC
+
+*** dtools
+**** selected version
+
+#+NAME: dtools_version
+#+HEADER: :noweb yes
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:dtools-version()>>
+#+END_SRC
+
+#+NAME: dtools_hash
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:dtools-hash()>>
+#+END_SRC
+
+** sha256 blank_hash
+
+#+NAME: sha256-blank
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:sha256-blank()>>
+#+END_SRC
+
+#+NAME: blank_hash
+#+BEGIN_SRC emacs-lisp
+<<./nix-develop-dlang-shared.org:sha256-blank()>>
+#+END_SRC
+
+* __END__
diff --git a/org/nix-develop-dlang-shared.org b/org/nix-develop-dlang-shared.org
index 2d1bb84..925e77e 100644
--- a/org/nix-develop-dlang-shared.org
+++ b/org/nix-develop-dlang-shared.org
@@ -27,6 +27,7 @@ check for latest version:
update direnv version and sha hash:
- emacs org/nix-develop-dlang-shared.org
+- direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/3.1.0/direnvrc
re-tangle file:
@@ -40,74 +41,26 @@ update flake.lock:
#+NAME: direnv-version
#+BEGIN_SRC org
-<<direnv_version_3_0_7>>
+<<direnv_version_3_1_0>>
#+END_SRC
#+NAME: direnv-hash
#+BEGIN_SRC org
-<<direnv_hash_3_0_7>>
+<<direnv_hash_3_1_0>>
#+END_SRC
*** versions
-**** 3.0.7
+**** 3.1.0
-#+NAME: direnv_version_3_0_7
+#+NAME: direnv_version_3_1_0
#+BEGIN_SRC org
-3.0.7
+3.1.0
#+END_SRC
-#+NAME: direnv_hash_3_0_7
+#+NAME: direnv_hash_3_1_0
#+BEGIN_SRC org
-sha256-bn8WANE5a91RusFmRI7kS751ApelG02nMcwRekC/qzc=
-#+END_SRC
-
-**** 3.0.6
-
-#+NAME: direnv_version_3_0_6
-#+BEGIN_SRC org
-3.0.6
-#+END_SRC
-
-#+NAME: direnv_hash_3_0_6
-#+BEGIN_SRC org
-sha256-RYcUJaRMf8oF5LznDrlCXbkOQrywm0HDv1VjYGaJGdM=
-#+END_SRC
-
-**** 3.0.4
-
-#+NAME: direnv_version_3_0_4
-#+BEGIN_SRC org
-3.0.4
-#+END_SRC
-
-#+NAME: direnv_hash_3_0_4
-#+BEGIN_SRC org
-sha256-DzlYZ33mWF/Gs8DDeyjr8mnVmQGx7ASYqA5WlxwvBG4=
-#+END_SRC
-
-**** 3.0.0
-
-#+NAME: direnv_version_3_0_0
-#+BEGIN_SRC org
-3.0.0
-#+END_SRC
-
-#+NAME: direnv_hash_3_0_0
-#+BEGIN_SRC org
-sha256-21TMnI2xWX7HkSTjFFri2UaohXVj854mgvWapWrxRXg=
-#+END_SRC
-
-**** 2.4.0
-
-#+NAME: direnv_version_2_4_0
-#+BEGIN_SRC org
-2.4.0
-#+END_SRC
-
-#+NAME: direnv_hash_2_4_0
-#+BEGIN_SRC org
-sha256-XQzUAvL6pysIJnRJyR7uVpmUSZfc7LSgWQwq/4mBr1U=
+sha256-yMJ2OVMzrFaDPn7q8nCBZFRYpL/f0RcHzhmw/i6btJM=
#+END_SRC
* dlang