summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-lang/nim')
-rw-r--r--dev-lang/nim/Manifest5
-rw-r--r--dev-lang/nim/files/nim-1.6.14-clang16-musl-fix.patch13
-rw-r--r--dev-lang/nim/files/nim-1.6.14-testament-skipfile.txt61
-rw-r--r--dev-lang/nim/files/nim-1.6.6-csources-flags.patch11
-rw-r--r--dev-lang/nim/files/nim-2.0.4-testament-skipfile.txt80
-rw-r--r--dev-lang/nim/files/nim-sets.conf5
-rw-r--r--dev-lang/nim/metadata.xml52
-rw-r--r--dev-lang/nim/nim-1.4.2.ebuild80
-rw-r--r--dev-lang/nim/nim-1.6.14-r1.ebuild211
-rw-r--r--dev-lang/nim/nim-2.0.4.ebuild183
10 files changed, 612 insertions, 89 deletions
diff --git a/dev-lang/nim/Manifest b/dev-lang/nim/Manifest
index a8f288975e8b..62f7ed856e14 100644
--- a/dev-lang/nim/Manifest
+++ b/dev-lang/nim/Manifest
@@ -1 +1,4 @@
-DIST nim-1.4.2.tar.xz 4770616 BLAKE2B 95561a22fedaa1eb42f099589b7b13e6833d1804d1d9bf8c4ec6514a4db89622d7f678b19ce9bed1c3ac5dffa3956b73e6b12fa6335f8e39a8b0dee90ae50457 SHA512 a357eaa5ef6c71b296fe6c53ed25be8b864a2895871a4ef6f23f2d31ce1c17d6dfb12eaf2bb8e71d122b7cf46746873109f424388ac2b6e84826699c1c5493fe
+DIST nim-1.6.14.tar.xz 5266632 BLAKE2B f6eadf44365a099f45d1b734dea494e5d098b0427791c19a5e0b7ee6fa8069fee606005920cbcbfd7c88a36ace870949ff797d1e37fc1f84e14d5dd1aeb4bd1d SHA512 6923ea98627ea48b5c939438618caa8e6860f248086e43bc101b543aa78e7c475bc8e56b8acb90dc4a3771ca0d2e27fbdda6a0b477dbb906acda8a7b39c272d3
+DIST nim-2.0.4.tar.xz 7620508 BLAKE2B cf7c737d734c5a468ac9229fb021bcd252c5c4f20ab091ec0ce27eb36ba44be8b438536aa39aa8c583483a7ce15dfbb91b1deb1c19794b3d77506d23096a4460 SHA512 1918b3d4a4fc02714677b2ca5051dc69e1d1daead2cf4dcc9b997076540d07d58ee4fe3049de86a37faa3143de1d3b95bedfa31f31d8463987bb267107459793
+DIST nim-atlas-0.8.0.tar.gz 59097 BLAKE2B 231b238ac3b15cc2c2d9ad927f80ae72d8ae4c649277515f32df6cc04275ccd38db5307d627572af547501e6522c06c86dc279dc3e13b5385f14e24032f6fe69 SHA512 747c13e2c5bd45a1dc6c1426f8c7637f638ada9dd4c9aa3edf4ef8367060e73226dc4bcde6380fac25ed47ebf4097fd223c72fadc3cceba8c71dd0f0571e47eb
+DIST nim-patches-1.6.6_p1.tar.gz 2632 BLAKE2B 64980d9510dc48e3c566473dc618d00cafba04783882d62b12015e8435c9c0515d7726da30f0b74dca6a41aa88a9c9aed2189a65b3325c28839d0051de8a3365 SHA512 7ba251675cd564452669bf5ec3748565db818324f58506f20a5036e4b54df10f4d7c149cece8cb97c853222cfa7d4d8d26856d92aaa25e613e31c6f5c2a8243d
diff --git a/dev-lang/nim/files/nim-1.6.14-clang16-musl-fix.patch b/dev-lang/nim/files/nim-1.6.14-clang16-musl-fix.patch
new file mode 100644
index 000000000000..1bc4f8f25d55
--- /dev/null
+++ b/dev-lang/nim/files/nim-1.6.14-clang16-musl-fix.patch
@@ -0,0 +1,13 @@
+Bug: https://bugs.gentoo.org/894410
+Refer: https://github.com/nim-lang/Nim/issues/20886#issuecomment-1511708198
+--- a/lib/system/threadlocalstorage.nim
++++ b/lib/system/threadlocalstorage.nim
+@@ -129,7 +129,7 @@ else:
+ when (defined(linux) or defined(nintendoswitch)) and defined(amd64):
+ type
+ SysThread* {.importc: "pthread_t",
+- header: "<sys/types.h>" .} = distinct culong
++ header: "<sys/types.h>" .} = distinct pointer
+ Pthread_attr {.importc: "pthread_attr_t",
+ header: "<sys/types.h>".} = object
+ abi: array[56 div sizeof(clong), clong]
diff --git a/dev-lang/nim/files/nim-1.6.14-testament-skipfile.txt b/dev-lang/nim/files/nim-1.6.14-testament-skipfile.txt
new file mode 100644
index 000000000000..2e7e0b48f9fc
--- /dev/null
+++ b/dev-lang/nim/files/nim-1.6.14-testament-skipfile.txt
@@ -0,0 +1,61 @@
+# broken
+tests/assert/tassert_c.nim
+tests/async/tasync_traceback.nim
+tests/coroutines/twait.nim
+tests/errmsgs/t14444.nim
+tests/errmsgs/tcall_with_default_arg.nim
+tests/errmsgs/tproper_stacktrace.nim
+tests/errmsgs/tproper_stacktrace2.nim
+tests/errmsgs/tproper_stacktrace3.nim
+tests/exception/t13115.nim
+tests/js/tmangle.nim
+tests/js/twritestacktrace.nim
+tests/lent/tbasic_lent_check.nim
+tests/misc/trunner.nim
+tests/misc/tstrace.nim
+tests/misc/twarningaserror.nim
+tests/parser/t20922.nim
+tests/pragmas/thintprocessing.nim
+tests/pragmas/tused.nim
+tests/pragmas/twarning_off.nim
+tests/stdlib/tos.nim
+tests/stdlib/tstackframes.nim
+tests/stdlib/tstats.nim
+tests/system/talloc.nim
+tests/testament/tshould_not_work.nim
+# broken on musl + llvm
+tests/coroutines/tgc.nim
+tests/coroutines/twait.nim
+tests/misc/t18077.nim
+tests/misc/temit.nim
+tests/nimdoc/t15916.nim
+tests/nimdoc/trunnableexamples.nim
+tests/nimdoc/trunnableexamples2.nim
+tests/objects/tobjcov.nim
+tests/objects/toop1.nim
+tests/stdlib/tencodings.nim
+tests/stdlib/tgetaddrinfo.nim
+tests/stdlib/tstdlib_various.nim
+tests/stdlib/tstreams.nim
+tests/stdlib/ttimes.nim
+tests/vm/tvmmisc.nim
+# require network
+tests/stdlib/thttpclient.nim
+tests/stdlib/tnetconnect.nim
+tests/stdlib/tssl.nim
+# don't work without megatest
+tests/misc/tjoinable.nim
+tests/testament/tjoinable.nim
+# don't work with "--hint:all:off" hack
+tests/concepts/t3330.nim
+tests/stylecheck/t20397_2.nim
+tests/stylecheck/treject.nim
+tests/stylecheck/tusages.nim
+# need external dependencies
+tests/manyloc/keineschweine/keineschweine.nim
+tests/manyloc/nake/nakefile.nim
+tests/niminaction/Chapter7/Tweeter/src/tweeter.nim
+# need functional valgrind
+tests/destructor/tnewruntime_strutils.nim
+tests/destructor/tv2_raise.nim
+tests/views/tsplit_into_openarray.nim
diff --git a/dev-lang/nim/files/nim-1.6.6-csources-flags.patch b/dev-lang/nim/files/nim-1.6.6-csources-flags.patch
new file mode 100644
index 000000000000..9a39a900e82a
--- /dev/null
+++ b/dev-lang/nim/files/nim-1.6.6-csources-flags.patch
@@ -0,0 +1,11 @@
+--- a/build.sh
++++ b/build.sh
+@@ -60,7 +60,7 @@
+ fi
+ CC="sem -j $parallel --id $$ ${CC}"
+ fi
+-COMP_FLAGS="${CPPFLAGS:-} ${CFLAGS:-} -w -fmax-errors=3 -O3 -fno-strict-aliasing -fno-ident $extraBuildArgs"
++COMP_FLAGS="${CPPFLAGS:-} ${CFLAGS:-} -w -fmax-errors=3 -fno-strict-aliasing -fno-ident $extraBuildArgs"
+ LINK_FLAGS="${LDFLAGS:-} "
+ PS4=""
+ # platform detection
diff --git a/dev-lang/nim/files/nim-2.0.4-testament-skipfile.txt b/dev-lang/nim/files/nim-2.0.4-testament-skipfile.txt
new file mode 100644
index 000000000000..0e209464c4fb
--- /dev/null
+++ b/dev-lang/nim/files/nim-2.0.4-testament-skipfile.txt
@@ -0,0 +1,80 @@
+# -*- conf -*-
+# broken, bug https://bugs.gentoo.org/930542
+tests/c/temit.nim
+tests/ccgbugs/t10964.nim
+tests/niminaction/Chapter3/ChatApp/src/client.nim
+tests/niminaction/Chapter3/various3.nim
+tests/niminaction/Chapter6/WikipediaStats/concurrency.nim
+tests/niminaction/Chapter6/WikipediaStats/concurrency_regex.nim
+tests/niminaction/Chapter6/WikipediaStats/parallel_counts.nim
+tests/niminaction/Chapter8/sdl/sdl_test.nim
+tests/parallel/tdeepcopy.nim
+tests/parallel/tdeepcopy2.nim
+tests/parallel/tflowvar.nim
+tests/parallel/tlet_spawn.nim
+tests/parallel/tpi.nim
+tests/parallel/tsysspawn.nim
+tests/parallel/twaitany.nim
+tests/stdlib/thttpclient_ssl.nim
+tests/stdlib/tthreadpool.nim
+# broken
+tests/assert/tassert_c.nim
+tests/async/tasync_traceback.nim
+tests/coroutines/twait.nim
+tests/errmsgs/t14444.nim
+tests/errmsgs/tcall_with_default_arg.nim
+tests/errmsgs/tproper_stacktrace.nim
+tests/errmsgs/tproper_stacktrace2.nim
+tests/errmsgs/tproper_stacktrace3.nim
+tests/exception/t13115.nim
+tests/js/tmangle.nim
+tests/js/twritestacktrace.nim
+tests/lent/tbasic_lent_check.nim
+tests/misc/trunner.nim
+tests/misc/tstrace.nim
+tests/misc/twarningaserror.nim
+tests/parser/t20922.nim
+tests/pragmas/thintprocessing.nim
+tests/pragmas/tused.nim
+tests/pragmas/twarning_off.nim
+tests/stdlib/tos.nim
+tests/stdlib/tstackframes.nim
+tests/stdlib/tstats.nim
+tests/system/talloc.nim
+tests/testament/tshould_not_work.nim
+# broken on musl + llvm
+tests/coroutines/tgc.nim
+tests/coroutines/twait.nim
+tests/misc/t18077.nim
+tests/misc/temit.nim
+tests/nimdoc/t15916.nim
+tests/nimdoc/trunnableexamples.nim
+tests/nimdoc/trunnableexamples2.nim
+tests/objects/tobjcov.nim
+tests/objects/toop1.nim
+tests/stdlib/tencodings.nim
+tests/stdlib/tgetaddrinfo.nim
+tests/stdlib/tstdlib_various.nim
+tests/stdlib/tstreams.nim
+tests/stdlib/ttimes.nim
+tests/vm/tvmmisc.nim
+# require network
+tests/stdlib/thttpclient.nim
+tests/stdlib/tnetconnect.nim
+tests/stdlib/tssl.nim
+# don't work without megatest
+tests/misc/tjoinable.nim
+tests/testament/tjoinable.nim
+# don't work with "--hint:all:off" hack
+tests/concepts/t3330.nim
+tests/stylecheck/t20397_2.nim
+tests/stylecheck/treject.nim
+tests/stylecheck/tusages.nim
+# need external dependencies
+tests/manyloc/keineschweine/keineschweine.nim
+tests/manyloc/nake/nakefile.nim
+tests/niminaction/Chapter7/Tweeter/src/tweeter.nim
+# need functional valgrind
+tests/destructor/tnewruntime_strutils.nim
+tests/destructor/tv2_raise.nim
+tests/views/tsplit_into_openarray.nim
diff --git a/dev-lang/nim/files/nim-sets.conf b/dev-lang/nim/files/nim-sets.conf
new file mode 100644
index 000000000000..294d9835364c
--- /dev/null
+++ b/dev-lang/nim/files/nim-sets.conf
@@ -0,0 +1,5 @@
+# Installed packages for which vdb *DEPEND includes dev-lang/nim.
+[nim-rebuild]
+class = portage.sets.dbapi.VariableSet
+variable = BDEPEND
+includes = dev-lang/nim
diff --git a/dev-lang/nim/metadata.xml b/dev-lang/nim/metadata.xml
index b7796e3694d8..43513b90b646 100644
--- a/dev-lang/nim/metadata.xml
+++ b/dev-lang/nim/metadata.xml
@@ -1,11 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
<pkgmetadata>
- <maintainer type="person">
- <email>slyfox@gentoo.org</email>
- <name>Sergei Trofimovich</name>
- </maintainer>
- <upstream>
- <remote-id type="github">nim-lang/Nim</remote-id>
- </upstream>
+ <maintainer type="person">
+ <email>xgqt@gentoo.org</email>
+ <name>Maciej Barć</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>nim@gentoo.org</email>
+ <name>Gentoo Nim Project</name>
+ </maintainer>
+ <longdescription>
+ Nim is a statically typed compiled systems programming language.
+ It combines successful concepts from mature languages like Python,
+ Ada and Modula.
+ Nim generates native dependency-free executables, not dependent on a
+ virtual machine, which are small and allow easy redistribution.
+ The Nim compiler and the generated executables support all major platforms
+ like Windows, Linux, BSD and macOS.
+ Nim's memory management is deterministic and customizable with destructors
+ and move semantics, inspired by C++ and Rust. It is well-suited for
+ embedded, hard-realtime systems.
+ Modern concepts like zero-overhead iterators and compile-time evaluation of
+ user-defined functions, in combination with the preference of value-based
+ datatypes allocated on the stack, lead to extremely performant code.
+ Support for various backends: it compiles to C, C++ or JavaScript so that
+ Nim can be used for all backend and frontend needs.
+ Nim is self-contained: the compiler and the standard library are
+ implemented in Nim.
+ Nim has a powerful macro system which allows direct manipulation of the
+ AST, offering nearly unlimited opportunities.
+ Macros cannot change Nim's syntax because there is no need for it — the
+ syntax is flexible enough.
+ Modern type system with local type inference, tuples, generics and sum
+ types.
+ Statements are grouped by indentation but can span multiple lines.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/nim-lang/Nim/issues/</bugs-to>
+ <remote-id type="github">nim-lang/Nim</remote-id>
+ </upstream>
+ <use>
+ <flag name="experimental">Apply experimental patches</flag>
+ <flag name="test-js">Enable tests that require Node.js</flag>
+ </use>
</pkgmetadata>
diff --git a/dev-lang/nim/nim-1.4.2.ebuild b/dev-lang/nim/nim-1.4.2.ebuild
deleted file mode 100644
index 9a273afb6271..000000000000
--- a/dev-lang/nim/nim-1.4.2.ebuild
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-inherit bash-completion-r1 multiprocessing toolchain-funcs
-
-DESCRIPTION="compiled, garbage-collected systems programming language"
-HOMEPAGE="https://nim-lang.org/"
-SRC_URI="https://nim-lang.org/download/${P}.tar.xz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~arm ~x86"
-IUSE="+readline test"
-
-RESTRICT=test # need to sort out depends and numerous failures
-
-RDEPEND="
- readline? ( sys-libs/readline:0= )
-"
-DEPEND="
- ${DEPEND}
- test? ( net-libs/nodejs )
-"
-
-PATCHES=(
- "${FILESDIR}"/${PN}-0.20.0-paths.patch
-)
-
-_run() {
- echo "$@"
- "$@" || die "'$*' failed"
-}
-
-nim_use_enable() {
- [[ -z $2 ]] && die "usage: nim_use_enable <USE flag> <compiler flag>"
- use $1 && echo "-d:$2"
-}
-
-src_configure() {
- export XDG_CACHE_HOME=${T}/cache #667182
- tc-export CC LD
-
- # Override default CC=gcc.
- echo "gcc.exe = \"$(tc-getCC)\"" >> config/nim.cfg || die
- echo "gcc.linkerexe = \"$(tc-getCC)\"" >> config/nim.cfg || die
- echo "gcc.cpp.exe = \"$(tc-getCXX)\"" >> config/nim.cfg || die
- echo "gcc.cpp.linkerexe = \"$(tc-getCXX)\"" >> config/nim.cfg || die
-}
-
-src_compile() {
-
- _run ./build.sh
-
- _run ./bin/nim --parallelBuild:$(makeopts_jobs) c koch
- _run ./koch boot --parallelBuild:$(makeopts_jobs) -d:release $(nim_use_enable readline useGnuReadline)
- PATH="./bin:$PATH" _run ./koch tools --parallelBuild:$(makeopts_jobs)
-}
-
-src_test() {
- PATH="./bin:$PATH" _run ./koch test --parallelBuild:$(makeopts_jobs)
-}
-
-src_install() {
- PATH="./bin:$PATH" _run ./koch install "${ED}"
- rm -r "${ED}/usr/share/nim/doc" || die "failed to remove 'doc'"
-
- exeinto /usr/bin
-
- local bin_exe
- for bin_exe in bin/*; do
- # './koch install' installs only 'nim' binary
- # but not the rest
- [[ ${bin_exe} == bin/nim ]] && continue
- doexe "${bin_exe}"
- done
-
- newbashcomp tools/nim.bash-completion ${PN}
-}
diff --git a/dev-lang/nim/nim-1.6.14-r1.ebuild b/dev-lang/nim/nim-1.6.14-r1.ebuild
new file mode 100644
index 000000000000..07e043cf4ffb
--- /dev/null
+++ b/dev-lang/nim/nim-1.6.14-r1.ebuild
@@ -0,0 +1,211 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PATCH_PV="1.6.6_p1"
+
+inherit bash-completion-r1 edo multiprocessing toolchain-funcs xdg-utils
+
+DESCRIPTION="Compiled, garbage-collected systems programming language"
+HOMEPAGE="https://nim-lang.org/"
+SRC_URI="
+ https://nim-lang.org/download/${P}.tar.xz
+ experimental? (
+ https://git.sr.ht/~cyber/${PN}-patches/archive/${PATCH_PV}.tar.gz
+ -> nim-patches-${PATCH_PV}.tar.gz
+ )
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~x86"
+IUSE="doc experimental test-js test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ test? (
+ dev-db/sqlite:3
+ dev-libs/boehm-gc
+ dev-libs/libffi
+ dev-libs/libpcre:3
+ dev-libs/openssl
+ media-libs/libsdl
+ media-libs/libsfml
+ )
+"
+BDEPEND="
+ sys-process/parallel
+ test? (
+ test-js? (
+ net-libs/nodejs
+ )
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.20.0-paths.patch
+ "${FILESDIR}"/${PN}-1.6.6-csources-flags.patch
+)
+
+# Borrowed from nim-utils.eclass (guru overlay).
+nim_gen_config() {
+ cat > nim.cfg <<- EOF || die "Failed to create Nim config"
+ cc:"gcc"
+ gcc.exe:"$(tc-getCC)"
+ gcc.linkerexe:"$(tc-getCC)"
+ gcc.cpp.exe:"$(tc-getCXX)"
+ gcc.cpp.linkerexe:"$(tc-getCXX)"
+ gcc.options.speed:"${CFLAGS}"
+ gcc.options.size:"${CFLAGS}"
+ gcc.options.debug:"${CFLAGS}"
+ gcc.options.always:"${CPPFLAGS}"
+ gcc.options.linker:"${LDFLAGS}"
+ gcc.cpp.options.speed:"${CXXFLAGS}"
+ gcc.cpp.options.size:"${CXXFLAGS}"
+ gcc.cpp.options.debug:"${CXXFLAGS}"
+ gcc.cpp.options.always:"${CPPFLAGS}"
+ gcc.cpp.options.linker:"${LDFLAGS}"
+
+ $([[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && echo '--colors:"off"')
+ -d:"release"
+ --parallelBuild:"$(makeopts_jobs)"
+
+ # some tests don't work with processing hints
+ --processing:"off"
+ EOF
+}
+
+src_prepare() {
+ default
+
+ # note: there are consumers in the ::guru overlay
+ use experimental && eapply "${WORKDIR}"/nim-patches-${PATCH_PV}
+
+ # refer: https://github.com/nim-lang/Nim/issues/20886#issuecomment-1511708198
+ # bug: https://bugs.gentoo.org/894410
+ use elibc_musl && eapply "${FILESDIR}"/${PN}-1.6.14-clang16-musl-fix.patch
+}
+
+src_configure() {
+ xdg_environment_reset # bug 667182
+
+ unset NIMBLE_DIR
+ tc-export CC CXX LD
+
+ nim_gen_config
+
+ mkdir "${HOME}"/.parallel || die
+ touch "${HOME}"/.parallel/will-cite || die "parallel setup failed"
+}
+
+src_compile() {
+ local -x PATH="${S}/bin:${PATH}"
+
+ edo ./build.sh --parallel "$(makeopts_jobs)"
+
+ ebegin "Waiting for unfinished parallel jobs"
+ while [[ ! -f "bin/nim" ]] ; do
+ sleep 3
+ done
+ sleep 10
+ eend 0
+
+ edo chmod +x ./bin/nim
+ edo ./bin/nim compile koch
+ edo ./koch boot -d:nimUseLinenoise --skipParentCfg:off
+ edo ./koch tools
+
+ if use doc; then
+ local -a docargs=(
+ # set git tag
+ --git.commit:v${PV}
+ # skip runnableExamples as some of them need net
+ --docCmd:skip
+ # make logs less verbose
+ --hints:off
+ --warnings:off
+ )
+ edo ./koch doc "${docargs[@]}"
+ HTML_DOCS=( web/upload/${PV}/. )
+ fi
+}
+
+src_test() {
+ local -x PATH="${S}/bin:${PATH}"
+ local -a nimflags=(
+ # Leave only the safe hints enabled.
+ --hint:all:off
+ --hint:User:on
+ --hint:UserRaw:on
+ )
+ local -a testament_args=(
+ --skipFrom:"${FILESDIR}/${PN}-1.6.14-testament-skipfile.txt"
+ --nim:"bin/nim"
+ --targets:"$(usex test-js 'c js' 'c')"
+ )
+
+ [[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && \
+ testament_args+=( --colors:off )
+
+ local -a categories
+ readarray -t categories < <(find tests -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort)
+
+ # AdditionalCategories from "testament/categories.nim".
+ categories+=( debugger examples lib )
+
+ local test_return=0
+
+ local tcat
+ local checkpoint
+ for tcat in "${categories[@]}"; do
+ # Use checkpoints for less painful testing.
+ checkpoint="${T}/.testament-${tcat}"
+
+ [[ -f "${checkpoint}" ]] && continue
+
+ case ${tcat} in
+ testdata )
+ :
+ ;;
+ arc | ic | valgrind )
+ einfo "Skipped category '${tcat}'"
+ ;;
+ * )
+ einfo "Running tests in category '${tcat}'"
+ nonfatal edo ./bin/testament "${testament_args[@]}" \
+ category "${tcat}" "${nimflags[@]}" || test_return=1
+ ;;
+ esac
+
+ touch "${checkpoint}" || die
+ done
+
+ [[ "${test_return}" -eq 1 ]] &&
+ die "tests failed, please inspect the failed test categories above"
+}
+
+src_install() {
+ local -x PATH="${S}/bin:${PATH}"
+
+ edo ./koch install "${ED}"
+ einstalldocs
+
+ # "./koch install" installs only "nim" binary but not the rest.
+ local exe
+ for exe in bin/* ; do
+ [[ "${exe}" == bin/nim ]] && continue
+ dobin "${exe}"
+ done
+
+ newbashcomp tools/nim.bash-completion nim
+ newbashcomp dist/nimble/nimble.bash-completion nimble
+
+ insinto /usr/share/zsh/site-functions
+ newins tools/nim.zsh-completion _nim
+ newins dist/nimble/nimble.zsh-completion _nimble
+
+ # Install the @nim-rebuild set for Portage.
+ insinto /usr/share/portage/config/sets
+ newins "${FILESDIR}"/nim-sets.conf nim.conf
+}
diff --git a/dev-lang/nim/nim-2.0.4.ebuild b/dev-lang/nim/nim-2.0.4.ebuild
new file mode 100644
index 000000000000..b1eecd7b7cd4
--- /dev/null
+++ b/dev-lang/nim/nim-2.0.4.ebuild
@@ -0,0 +1,183 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+ATLAS_V="0.8.0"
+
+inherit bash-completion-r1 edo multiprocessing toolchain-funcs xdg-utils
+
+DESCRIPTION="Compiled, garbage-collected systems programming language"
+HOMEPAGE="https://nim-lang.org/
+ https://github.com/nim-lang/Nim/"
+SRC_URI="
+ https://nim-lang.org/download/${P}.tar.xz
+ https://github.com/nim-lang/atlas/archive/refs/tags/${ATLAS_V}.tar.gz
+ -> nim-atlas-${ATLAS_V}.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~x86"
+IUSE="test-js test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ test? (
+ dev-db/sqlite:3
+ dev-libs/boehm-gc
+ dev-libs/libffi
+ dev-libs/libpcre:3
+ dev-libs/openssl
+ media-libs/libsdl
+ media-libs/libsfml
+ )
+"
+BDEPEND="
+ sys-process/parallel
+ test? (
+ test-js? (
+ net-libs/nodejs
+ )
+ )
+"
+
+src_configure() {
+ xdg_environment_reset # bug #667182
+
+ unset NIMBLE_DIR
+ tc-export CC CXX LD
+
+ mkdir "${HOME}/.parallel" || die
+ touch "${HOME}/.parallel/will-cite" || die "parallel setup failed"
+
+ cat > nim.cfg <<- EOF || die "Failed to create Nim config"
+ cc:"gcc"
+ gcc.exe:"$(tc-getCC)"
+ gcc.linkerexe:"$(tc-getCC)"
+ gcc.cpp.exe:"$(tc-getCXX)"
+ gcc.cpp.linkerexe:"$(tc-getCXX)"
+ gcc.options.speed:"${CFLAGS}"
+ gcc.options.size:"${CFLAGS}"
+ gcc.options.debug:"${CFLAGS}"
+ gcc.options.always:"${CPPFLAGS}"
+ gcc.options.linker:"${LDFLAGS}"
+ gcc.cpp.options.speed:"${CXXFLAGS}"
+ gcc.cpp.options.size:"${CXXFLAGS}"
+ gcc.cpp.options.debug:"${CXXFLAGS}"
+ gcc.cpp.options.always:"${CPPFLAGS}"
+ gcc.cpp.options.linker:"${LDFLAGS}"
+
+ $([[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && echo '--colors:"off"')
+ -d:"release"
+ --parallelBuild:"$(makeopts_jobs)"
+
+ # some tests don't work with processing hints
+ --processing:"off"
+ EOF
+
+ cp -r "${WORKDIR}/atlas-${ATLAS_V}" "${S}/dist/atlas" || die
+}
+
+src_compile() {
+ local -x PATH="${S}/bin:${PATH}"
+
+ edo ./build.sh --parallel "$(makeopts_jobs)"
+
+ ebegin "Waiting for unfinished parallel jobs"
+ while [[ ! -f "bin/nim" ]] ; do
+ sleep 3
+ done
+ sleep 10
+ eend 0
+
+ edo chmod +x ./bin/nim
+ edo ./bin/nim compile -d:release koch
+ edo ./koch boot -d:nimUseLinenoise -d:release --skipParentCfg:off
+ edo ./koch tools -d:release
+ edo ./bin/nim compile -d:release ./tools/niminst/niminst.nim
+}
+
+src_test() {
+ local -x PATH="${S}/bin:${PATH}"
+ local -a -r nimflags=(
+ # Leave only the safe hints enabled.
+ --hint:all:off
+ --hint:User:on
+ --hint:UserRaw:on
+ )
+ local -a testament_args=(
+ --skipFrom:"${FILESDIR}/${PN}-2.0.4-testament-skipfile.txt"
+ --nim:"bin/nim"
+ --targets:"$(usex test-js 'c js' 'c')"
+ )
+
+ [[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] \
+ && testament_args+=( --colors:off )
+
+ local -a categories
+ readarray -t categories < <(find tests -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort)
+
+ # AdditionalCategories from "testament/categories.nim".
+ categories+=( debugger examples lib )
+
+ local test_return=0
+
+ local tcat
+ local checkpoint
+ for tcat in "${categories[@]}"; do
+ # Use checkpoints for less painful testing.
+ checkpoint="${T}/.testament-${tcat}"
+
+ [[ -f "${checkpoint}" ]] && continue
+
+ case "${tcat}" in
+ testdata )
+ :
+ ;;
+ arc | gc | ic | js | msgs | stylecheck \
+ | testament | untestable | objects | valgrind )
+ einfo "Skipped nim test category: ${tcat}"
+ ;;
+ * )
+ einfo "Running tests in category '${tcat}'"
+ nonfatal edo ./bin/testament "${testament_args[@]}" \
+ category "${tcat}" "${nimflags[@]}" \
+ || test_return=1
+ ;;
+ esac
+
+ touch "${checkpoint}" || die
+ done
+
+ [[ "${test_return}" -eq 1 ]] \
+ && die "tests failed, please inspect the failed test categories above"
+}
+
+src_install() {
+ local -x PATH="${S}/bin:${PATH}"
+
+ edo ./koch install "${ED}/usr/lib"
+ dosym -r /usr/lib/nim/bin/nim /usr/bin/nim
+
+ # "./koch install" installs only "nim" binary but not the rest.
+ exeinto /usr/bin
+ local exe
+ while read -r exe ; do
+ einfo "Installing nim support tool: ${exe}"
+ doexe "${exe}"
+ done < <(find ./bin -type f -not -iname nim)
+
+ newbashcomp tools/nim.bash-completion nim
+ newbashcomp dist/nimble/nimble.bash-completion nimble
+
+ insinto /usr/share/zsh/site-functions
+ newins tools/nim.zsh-completion _nim
+ newins dist/nimble/nimble.zsh-completion _nimble
+
+ # Install the @nim-rebuild set for Portage.
+ insinto /usr/share/portage/config/sets
+ newins "${FILESDIR}/nim-sets.conf" nim.conf
+
+ einstalldocs
+}