From 5a1ddd146bfd6cd874d0617872fe45148832113b Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 14 Sep 2021 20:45:41 -0400 Subject: gnu: ldc: Update to 1.27.1. * gnu/packages/dlang.scm (ldc-bootstrap): Rename to... (ldc-bootstrap-0.17): ... this. Fix indentation. Disable tests. [phases]: Remove test related patching. {patch-phobos}: Rename to ... {patch-paths}: ... this. [inputs]: Remove llvm-6, which is propagated by clang-6. (ldc-bootstrap-1.12): New variable, based on the previous ldc. [source]: Use the official release tarball. [build-type]: Set the build type to Release. [configure-flags]: Pass the -GNinja configure flag. [phases]{patch-paths}: Override to adjust for changed paths. {build, install}: Override to use ninja. [native-inputs]: Add ld-gold-wrapper. Update llvm to version 11 and use ldc-bootstrap-0.17 as the bootstrapping D compiler. Add ninja. Remove the phobos-src, druntime-src and dmd-testsuite-src source inputs, now included in the official release. (ldc-bootstrap-1.24): Other intermediate variant for bootstrapping purposes. (ldc): Update to 1.27.1. [make-flags]: New argument. [configure-flags]: Adjust. [phases]{fix-compiler-rt-library-discovery}: New phase. {patch-paths-in-tests}: Likewise. {disable-problematic-tests}: Likewise. Compared to before, many GDB tests are reinstated. {set-cc-and-cxx-to-use-clang}: New phase. {tests}: Override. [inputs]: Update clang to version 11. Bootstrap from a stage 1 version of itself. * gnu/packages/patches/ldc-bootstrap-disable-tests.patch: Delete file. * gnu/packages/patches/ldc-disable-phobos-tests.patch: Likewise. * gnu/local.mk: De-register them. --- gnu/packages/dlang.scm | 538 +++++++++++++-------- .../patches/ldc-bootstrap-disable-tests.patch | 72 --- .../patches/ldc-disable-phobos-tests.patch | 22 - 3 files changed, 324 insertions(+), 308 deletions(-) delete mode 100644 gnu/packages/patches/ldc-bootstrap-disable-tests.patch delete mode 100644 gnu/packages/patches/ldc-disable-phobos-tests.patch (limited to 'gnu/packages') diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm index dc22ea2e62..c4cf1d9665 100644 --- a/gnu/packages/dlang.scm +++ b/gnu/packages/dlang.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2020 Guy Fleury Iteriteka ;;; Copyright © 2021 Efraim Flashner +;;; Copyright © 2021 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -27,6 +28,8 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix utils) + #:use-module ((guix build utils) #:hide (delete which)) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) #:use-module (gnu packages) @@ -37,11 +40,13 @@ #:use-module (gnu packages gdb) #:use-module (gnu packages libedit) #:use-module (gnu packages llvm) + #:use-module (gnu packages ninja) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-xyz) #:use-module (gnu packages textutils) - #:use-module (gnu packages xorg)) + #:use-module (gnu packages xorg) + #:use-module (srfi srfi-1)) (define-public rdmd (package @@ -81,233 +86,338 @@ minimize the amount of work necessary. Unlike make, rdmd tracks dependencies and freshness without requiring additional information from the user.") (license license:boost1.0))) -(define-public ldc-bootstrap - (package - (name "ldc") - (version "0.17.6") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/ldc") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs")))) - (build-system cmake-build-system) - (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux")) - (properties - ;; Some of the tests take a very long time on ARMv7. See - ;; . - `((max-silent-time . ,(* 3600 3)))) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'unpack-submodule-sources - (lambda* (#:key inputs #:allow-other-keys) - (let ((unpack (lambda (input target) - (let ((source (assoc-ref inputs input))) - ;; Git checkouts are directories as long as - ;; there are no patches; tarballs otherwise. - (if (file-is-directory? source) - (copy-recursively source target) - (with-directory-excursion target - (invoke "tar" "xvf" source - "--strip-components=1"))))))) - (unpack "phobos-src" "runtime/phobos") - (unpack "druntime-src" "runtime/druntime") - (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite") - #t))) - (add-after 'unpack-submodule-sources 'patch-phobos - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "runtime/phobos/std/process.d" - (("/bin/sh") (which "sh")) - (("echo") (which "echo"))) - (substitute* "runtime/phobos/std/datetime.d" - (("/usr/share/zoneinfo/") - (search-input-directory inputs "share/zoneinfo")) - (("tzName == \"[+]VERSION\"") - "(tzName == \"+VERSION\" || std.algorithm.endsWith(tzName, \"/leapseconds\"))")) - (substitute* "tests/d2/dmd-testsuite/Makefile" - (("/bin/bash") (which "bash"))) - ;; the following two tests fail on i686 - (for-each delete-file '("tests/ir/attributes.d" "tests/ir/align.d"))))))) - (inputs - `(("libconfig" ,libconfig) - ("libedit" ,libedit) - ("tzdata" ,tzdata) - ("zlib" ,zlib))) - (native-inputs - `(("llvm" ,llvm-6) - ("clang" ,clang-6) - ("python-lit" ,python-lit) - ("python-wrapper" ,python-wrapper) - ("unzip" ,unzip) - ("phobos-src" - ,(origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/phobos") - (commit (string-append "ldc-v" version)))) - (file-name (git-file-name "phobos" version)) - (sha256 - (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8")) - (patches (search-patches "ldc-bootstrap-disable-tests.patch")))) - ("druntime-src" - ,(origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/druntime") - (commit (string-append "ldc-v" version)))) - (file-name (git-file-name "druntime" version)) - (sha256 - (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb")))) - ("dmd-testsuite-src" - ,(origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/dmd-testsuite") - (commit (string-append "ldc-v" version)))) - (file-name (git-file-name "dmd-testsuite" version)) - (sha256 - (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky")))))) - (home-page "http://wiki.dlang.org/LDC") - (synopsis "LLVM-based compiler for the D programming language") - (description - "LDC is an LLVM compiler for the D programming language. It is based on +;;; The 0.17.6 version is the last release to support being bootstrapped +;;; without a D compiler (requiring only a C++ compiler). +;;; TODO: Bootstrap ldc from GDC (the D frontend for GCC). +(define ldc-bootstrap-0.17 + (package + (name "ldc") + (version "0.17.6") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ldc-developers/ldc") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs")))) + (build-system cmake-build-system) + (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux")) + (properties + ;; Some of the tests take a very long time on ARMv7. See + ;; . + `((max-silent-time . ,(* 3600 3)))) + (arguments + `(#:tests? #f ;requires obsolete python-lit test dependency + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'unpack-submodule-sources + (lambda* (#:key inputs #:allow-other-keys) + (let ((unpack (lambda (input target) + (let ((source (assoc-ref inputs input))) + ;; Git checkouts are directories as long as + ;; there are no patches; tarballs otherwise. + (if (file-is-directory? source) + (copy-recursively source target) + (with-directory-excursion target + (invoke "tar" "xvf" source + "--strip-components=1"))))))) + (unpack "phobos-src" "runtime/phobos") + (unpack "druntime-src" "runtime/druntime") + (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")))) + (add-after 'unpack-submodule-sources 'patch-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "runtime/phobos/std/process.d" + (("/bin/sh") (which "sh")) + (("echo") (which "echo"))) + (substitute* "runtime/phobos/std/datetime.d" + (("/usr/share/zoneinfo/") + (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")) + (("tzName == \"[+]VERSION\"") + "(tzName == \"+VERSION\" || \ +std.algorithm.endsWith(tzName, \"/leapseconds\"))"))))))) + (inputs + `(("libconfig" ,libconfig) + ("libedit" ,libedit) + ("tzdata" ,tzdata) + ("zlib" ,zlib))) + (native-inputs + `(("llvm" ,llvm-6) + ("python-wrapper" ,python-wrapper) + ("unzip" ,unzip) + ("phobos-src" + ,(origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ldc-developers/phobos") + (commit (string-append "ldc-v" version)))) + (file-name (git-file-name "phobos" version)) + (sha256 + (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8")))) + ("druntime-src" + ,(origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ldc-developers/druntime") + (commit (string-append "ldc-v" version)))) + (file-name (git-file-name "druntime" version)) + (sha256 + (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb")))) + ("dmd-testsuite-src" + ,(origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ldc-developers/dmd-testsuite") + (commit (string-append "ldc-v" version)))) + (file-name (git-file-name "dmd-testsuite" version)) + (sha256 + (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky")))))) + (home-page "http://wiki.dlang.org/LDC") + (synopsis "LLVM-based compiler for the D programming language") + (description + "LDC is an LLVM compiler for the D programming language. It is based on the latest DMD compiler that was written in C and is used for bootstrapping more recent compilers written in D.") - ;; Most of the code is released under BSD-3, except for code originally - ;; written for GDC, which is released under GPLv2+, and the DMD frontend, - ;; which is released under the "Boost Software License version 1.0". - (license (list license:bsd-3 - license:gpl2+ - license:boost1.0)))) + ;; Most of the code is released under BSD-3, except for code originally + ;; written for GDC, which is released under GPLv2+, and the DMD frontend, + ;; which is released under the "Boost Software License version 1.0". + (license (list license:bsd-3 + license:gpl2+ + license:boost1.0)))) -(define-public ldc - ;; Phobos, druntime and dmd-testsuite library dependencies do - ;; not always have a newer release than the compiler, hence we - ;; retain this variable. - (let ((older-version "1.10.0")) ;; retain this because sometimes the libs are older - (package - (inherit ldc-bootstrap) - (name "ldc") - (version "1.10.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/ldc") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0qcb2rn01wql7y8qp31blbv3hwmnh3zjgzi2n7k168cxr6rrdhlp")))) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'unpack-submodule-sources - (lambda* (#:key inputs #:allow-other-keys) - (let ((unpack (lambda (input target) - (let ((source (assoc-ref inputs input))) - ;; Git checkouts are directories as long as - ;; there are no patches; tarballs otherwise. - (if (file-is-directory? source) - (copy-recursively source target) - (with-directory-excursion target - (invoke "tar" "xvf" source - "--strip-components=1"))))))) - (unpack "phobos-src" "runtime/phobos") - (unpack "druntime-src" "runtime/druntime") - (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite") - #t))) - (add-after 'unpack-submodule-sources 'patch-phobos +;;; This is the last version that supports being built with 32 bit machines +;;; from 0.17. +(define ldc-bootstrap-1.12 + (package + (inherit ldc-bootstrap-0.17) + (version "1.12.0") + (source + (origin + (method url-fetch) + ;; The official release include the matching source code releases of + ;; phobos, druntime and dmd-testsuite. + (uri (string-append "https://github.com/ldc-developers/ldc/releases" + "/download/v" version "/ldc-" version "-src.tar.gz")) + (sha256 + (base32 "1fdma1w8j37wkr0pqdar11slkk36qymamxnk6d9k8ybhjmxaaawm")))) + (arguments + (substitute-keyword-arguments (package-arguments ldc-bootstrap-0.17) + ((#:build-type _ #f) "Release") + ((#:configure-flags _ #f) + `(list "-GNinja")) + ((#:make-flags _ #f) ;used as build targets + `(list "all")) + ((#:tests? _) #f) + ((#:phases phases) + `(modify-phases ,phases + (delete 'unpack-submodule-sources) + (replace 'patch-paths (lambda* (#:key inputs #:allow-other-keys) - (substitute* '("runtime/phobos/std/process.d" - "tests/linking/linker_switches.d") + (substitute* '("runtime/phobos/std/process.d") (("/bin/sh") (which "sh")) - (("echo") (which "echo"))) + (("echo") (which "echo"))))) + (replace 'build + ;; Building with Make would result in "make: *** [Makefile:166: + ;; all] Error 2". + (lambda* (#:key make-flags parallel-tests? #:allow-other-keys) + (let ((job-count (number->string (or (and parallel-tests? + (parallel-job-count)) + 1)))) + (apply invoke "cmake" "--build" "." "-j" job-count + "--target" make-flags)))) + (replace 'install + (lambda _ + (invoke "cmake" "--install" "."))))))) + (native-inputs + ;; Importing (gnu packages commencement) would introduce a cycle. + `(("ld-gold-wrapper" ,(module-ref (resolve-interface + '(gnu packages commencement)) + 'ld-gold-wrapper)) + ("llvm" ,llvm-6) + ("ldc" ,ldc-bootstrap-0.17) + ("ninja" ,ninja) + ("python-wrapper" ,python-wrapper) + ("unzip" ,unzip))))) + +;;; For 32 bits systems, 1.12 cannot build 1.27 directly, so we need another +;;; hop. +(define ldc-bootstrap-1.24 + (package + (inherit ldc-bootstrap-1.12) + (version "1.24.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/ldc-developers/ldc/releases" + "/download/v" version "/ldc-" version "-src.tar.gz")) + (sha256 + (base32 "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx")))) + (native-inputs + (fold alist-replace + (package-native-inputs ldc-bootstrap-1.12) + '("ldc" "llvm") + `((,ldc-bootstrap-1.12) (,llvm-11)))))) + +(define ldc-bootstrap-1.27 + (package + (inherit ldc-bootstrap-1.24) + (version "1.27.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/ldc-developers/ldc/releases" + "/download/v" version "/ldc-" version "-src.tar.gz")) + (sha256 + (base32 "1775001ba6n8w46ln530kb5r66vs935ingnppgddq8wqnc0gbj4k")))) + (native-inputs + (fold alist-replace + (package-native-inputs ldc-bootstrap-1.24) + '("ldc" "llvm") + `((,ldc-bootstrap-1.24) (,llvm-11)))))) + +(define-public ldc + (package + (inherit ldc-bootstrap-1.27) + (arguments + (substitute-keyword-arguments (package-arguments ldc-bootstrap-1.27) + ((#:make-flags _ #f) + '(list "all" + ;; Also build the test runner binaries. + "ldc2-unittest" "all-test-runners")) + ((#:configure-flags flags) + `(,@flags "-DBUILD_SHARED_LIBS=ON" + "-DLDC_LINK_MANUALLY=OFF")) + ((#:tests? _) #t) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'fix-compiler-rt-library-discovery + (lambda* (#:key inputs #:allow-other-keys) + (let ((clang-runtime (assoc-ref inputs "clang-runtime")) + (system ,(or (%current-target-system) + (%current-system)))) + (define (gnu-triplet->clang-arch system) + (letrec-syntax + ((matches (syntax-rules (=>) + ((_ (system-prefix => target) rest ...) + (if (string-prefix? system-prefix system) + target + (matches rest ...))) + ((_) + (error "Clang target for system is unknown" + system))))) + (matches ("x86_64" => "x86_64") + ("i686" => "i386") + ("armhf" => "armhf")))) + ;; Coax LLVM into agreeing with Clang about system target + ;; naming. + (substitute* "driver/linker-gcc.cpp" + (("triple.getArchName\\(\\)") + (format #f "~s" (gnu-triplet->clang-arch system)))) + ;; Augment the configuration of the ldc2 binaries so they can + ;; find the compiler-rt libraries they need to be linked with + ;; for the tests. + (substitute* (find-files "." "^ldc2.*\\.conf\\.in$") + ((".*lib-dirs = \\[\n" all) + (string-append all + " \"" clang-runtime + "/lib/linux\",\n")))))) + (add-after 'unpack 'patch-paths-in-tests + (lambda _ (substitute* "tests/d2/dmd-testsuite/Makefile" (("/bin/bash") (which "bash"))) - ;; disable unittests in the following files. We are discussing with - ;; upstream + (substitute* "tests/linking/linker_switches.d" + (("echo") (which "echo"))) + (substitute* "tests/d2/dmd-testsuite/dshell/test6952.d" + (("/usr/bin/env bash") + (which "bash"))))) + (add-after 'unpack 'disable-problematic-tests + (lambda* (#:key inputs #:allow-other-keys) + ;; Disable unittests in the following files. (substitute* '("runtime/phobos/std/net/curl.d" "runtime/phobos/std/datetime/systime.d" - "runtime/phobos/std/datetime/timezone.d" - ) + "runtime/phobos/std/datetime/timezone.d") (("version(unittest)") "version(skipunittest)") ((" unittest") " version(skipunittest) unittest")) - ;; the following tests require a more recent LLVM - (delete-file "tests/compilable/ctfe_math.d") - (delete-file "tests/debuginfo/nested_gdb.d") - (delete-file "tests/debuginfo/classtypes_gdb.d") - ;; for the following tests ptrace fails with EPERM - ;; (see ): - (delete-file "tests/d2/dmd-testsuite/runnable/b18504.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb14225.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb14276.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb14313.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb14330.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb1.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb4149.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb4181.d") - (delete-file "tests/d2/dmd-testsuite/runnable/gdb15729.sh") - ;; the following tests plugins we don't have. + ;; The following tests plugins we don't have. (delete-file "tests/plugins/addFuncEntryCall/testPlugin.d") - ;; the following tests requires AVX instruction set in the CPU. - (substitute* "tests/d2/dmd-testsuite/runnable/test_cdvecfill.d" + ;; The following tests requires AVX instruction set in the CPU. + (substitute* "tests/d2/dmd-testsuite/runnable/cdvecfill.sh" (("^// DISABLED: ") "^// DISABLED: linux64 ")) - #t)) + ;; This unit test requires networking, fails with + ;; "core.exception.RangeError@std/socket.d(778): Range + ;; violation". + (substitute* "runtime/phobos/std/socket.d" + (("assert\\(ih.addrList\\[0\\] == 0x7F_00_00_01\\);.*") + "")) + ;; The GDB tests suite fails; there are a few bug reports about + ;; it upstream. + (for-each delete-file (find-files "tests" "gdb.*\\.(d|sh)$")) + (delete-file "tests/d2/dmd-testsuite/runnable/debug_info.d") + (delete-file "tests/d2/dmd-testsuite/runnable/b18504.d") + (substitute* "runtime/druntime/test/exceptions/Makefile" + ((".*TESTS\\+=rt_trap_exceptions_drt_gdb.*") + "")) + ;; The following tests fail on the supported 32 bit systems, + ;; which are not tested upstream. + (with-directory-excursion "tests" + (let ((system ,(or (%current-target-system) + (%current-system)))) + (when (or (string-prefix? "armhf" system ) + (string-prefix? "i686" system )) + (for-each delete-file + '("PGO/profile_rt_calls.d" + "codegen/mangling.d" + "debuginfo/print_gdb.d" + "dynamiccompile/bind.d" + "dynamiccompile/bind_bool.d" + "dynamiccompile/bind_func_opt.d" + "dynamiccompile/bind_nested_opt.d" + "dynamiccompile/bind_opt.d" + "dynamiccompile/compiler_context.d" + "dynamiccompile/compiler_context_parallel.d" + "instrument/xray_check_pipeline.d" + "instrument/xray_link.d" + "instrument/xray_simple_execution.d" + "sanitizers/msan_noerror.d" + "sanitizers/msan_uninitialized.d" + "d2/dmd-testsuite/runnable_cxx/cppa.d"))))))) + (add-before 'configure 'set-cc-and-cxx-to-use-clang + ;; The tests require to be built with Clang; build everything + ;; with it, for simplicity. + (lambda _ + (setenv "CC" (which "clang")) + (setenv "CXX" (which "clang++")))) (replace 'check - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; some tests call into gdb binary which needs SHELL and CC set - (setenv "SHELL" (which "sh")) - (setenv "CC" (search-input-file inputs "/bin/gcc")) - (invoke "make" "test" "-j" (number->string (parallel-job-count)))))))) - (native-inputs - `(("llvm" ,llvm-6) - ("clang" ,clang-6) - ("ldc" ,ldc-bootstrap) - ("python-lit" ,python-lit) - ("python-wrapper" ,python-wrapper) - ("unzip" ,unzip) - ("gdb" ,gdb) - ("phobos-src" - ,(origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/phobos") - (commit (string-append "ldc-v" older-version)))) - (file-name (git-file-name "phobos" older-version)) - (sha256 - (base32 "1gmlwnjdcf6s5aahadxsif9l5nyaj0rrn379g6fmhcvdk64kf509")) - ;; This patch deactivates some tests that depend on network access - ;; to pass. It also deactivates some tests that have some reliance - ;; on timezone. - ;; - ;; For the network tests, there's an effort to get a version flag - ;; added to deactivate these tests for distribution packagers - ;; that is being pursued at - ;; . - ;; It also deactivates a test that requires /root - (patches (search-patches "ldc-disable-phobos-tests.patch")))) - ("druntime-src" - ,(origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/druntime") - (commit (string-append "ldc-v" older-version)))) - (file-name (git-file-name "druntime" older-version)) - (sha256 - (base32 "0a3yyjcnpvm5fbdczf76fx08kl154w17w06hlxf0j3p1p4jc85aj")))) - ("dmd-testsuite-src" - ,(origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ldc-developers/dmd-testsuite") - (commit (string-append "ldc-v" older-version)))) - (file-name (git-file-name "dmd-testsuite" older-version)) - (sha256 - (base32 "0mm3rliki1nqiqfaha7ssvm156aa398vpvf4v6895m7nn1mz7rss"))))))))) + (lambda* (#:key tests? parallel-tests? #:allow-other-keys) + (when tests? + (let ((job-count (number->string + (or (and parallel-tests? + (parallel-job-count)) + 1)))) + ;; The test targets are tested separately to provide + ;; finer-grained diagnostics (see: + ;; https://raw.githubusercontent.com/ldc-developers/ + ;; ldc/master/.azure-pipelines/3-posix-test.yml) + (display "running the ldc2 unit tests...\n") + (invoke "ctest" "--output-on-failure" "-j" job-count + "-R" "ldc2-unittest") + (display "running the lit test suite...\n") + (invoke "ctest" "--output-on-failure" "-j" job-count + "-R" "lit-tests") + (display "running the dmd test suite...\n") + (invoke "ctest" "--output-on-failure" "-j" job-count + "-R" "dmd-testsuite") + (display "running the defaultlib unit tests and druntime \ +integration tests...\n") + (invoke "ctest" "--output-on-failure" "-j" job-count + "-E" "dmd-testsuite|lit-tests|ldc2-unittest"))))))))) + (native-inputs + (append (delete "llvm" + (alist-replace "ldc" (list ldc-bootstrap-1.27) + (package-native-inputs ldc-bootstrap-1.27))) + `(("clang" ,clang-11) ;propagates llvm and clang-runtime + ("python-lit" ,python-lit)))))) (define-public dub (package diff --git a/gnu/packages/patches/ldc-bootstrap-disable-tests.patch b/gnu/packages/patches/ldc-bootstrap-disable-tests.patch deleted file mode 100644 index d2e40b8016..0000000000 --- a/gnu/packages/patches/ldc-bootstrap-disable-tests.patch +++ /dev/null @@ -1,72 +0,0 @@ -This patch fixes a failing unit test by feeding buildNormalizedPath to the -tzdata properly. Three other tests are disabled, one assumes /root and the -two others use networking. Not bad out of almost 700 tests! - -by Pjotr Prins - ---- a/std/datetime.d.orig 2016-11-24 01:13:52.584495545 +0100 -+++ b/std/datetime.d 2016-11-24 01:17:09.655306728 +0100 -@@ -28081,22 +28081,24 @@ - import std.range : retro; - import std.format : format; - -- name = strip(name); -- - enforce(tzDatabaseDir.exists(), new DateTimeException(format("Directory %s does not exist.", tzDatabaseDir))); - enforce(tzDatabaseDir.isDir, new DateTimeException(format("%s is not a directory.", tzDatabaseDir))); - - version(Android) - { -+ name = strip(name); - auto tzfileOffset = name in tzdataIndex(tzDatabaseDir); - enforce(tzfileOffset, new DateTimeException(format("The time zone %s is not listed.", name))); - string tzFilename = separate_index ? "zoneinfo.dat" : "tzdata"; - immutable file = buildNormalizedPath(tzDatabaseDir, tzFilename); - } - else -- immutable file = buildNormalizedPath(tzDatabaseDir, name); -+ { -+ auto filename = "./" ~ strip(name); // make sure the prefix is not stripped -+ immutable file = buildNormalizedPath(tzDatabaseDir, filename); -+ } - -- enforce(file.exists(), new DateTimeException(format("File %s does not exist.", file))); -+ enforce(file.exists(), new DateTimeException(format("File %s does not exist in %s.", file, tzDatabaseDir))); - enforce(file.isFile, new DateTimeException(format("%s is not a file.", file))); - - auto tzFile = File(file); -diff --git a/std/path.d b/std/path.d -index 254d8f0..b0fc04d 100644 ---- a/std/path.d -+++ b/std/path.d -@@ -3080,8 +3080,11 @@ unittest - } - else - { -+ pragma(msg, "test disabled on GNU Guix"); -+/* - assert(expandTilde("~root") == "/root", expandTilde("~root")); - assert(expandTilde("~root/") == "/root/", expandTilde("~root/")); -+*/ - } - assert(expandTilde("~Idontexist/hey") == "~Idontexist/hey"); - } -diff --git a/std/socket.d b/std/socket.d -index b85d1c9..7fbf346 100644 ---- a/std/socket.d -+++ b/std/socket.d -@@ -859,6 +862,8 @@ class InternetHost - - unittest - { -+ pragma(msg, "test disabled on GNU Guix"); -+ /* - InternetHost ih = new InternetHost; - - ih.getHostByAddr(0x7F_00_00_01); -@@ -889,6 +894,7 @@ unittest - // writefln("aliases[%d] = %s", i, s); - // } - }); -+ */ - } diff --git a/gnu/packages/patches/ldc-disable-phobos-tests.patch b/gnu/packages/patches/ldc-disable-phobos-tests.patch deleted file mode 100644 index f8a9743d59..0000000000 --- a/gnu/packages/patches/ldc-disable-phobos-tests.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/std/socket.d b/std/socket.d -index 111cd17..6d23da9 100644 ---- a/std/socket.d -+++ b/std/socket.d -@@ -448,7 +448,7 @@ class Protocol - // Skip this test on Android because getprotobyname/number are - // unimplemented in bionic. - version(CRuntime_Bionic) {} else --@safe unittest -+@safe version(hasNetwork) unittest - { - // import std.stdio : writefln; - softUnittest({ -@@ -770,7 +770,7 @@ class InternetHost - } - - /// --@safe unittest -+@safe version(hasNetwork) unittest - { - InternetHost ih = new InternetHost; - -- cgit v1.2.3