diff options
Diffstat (limited to 'org')
| -rw-r--r-- | org/dlang-nix-flakes.org | 1176 | ||||
| -rw-r--r-- | org/dlang-overlays.org | 1156 | ||||
| -rw-r--r-- | org/nix-develop-dlang-shared.org | 63 |
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 |
