File PKGBUILD of Package nim

pkgname=nim
pkgver=2.2.6
pkgrel=1
pkgdesc='Imperative, multi-paradigm, compiled programming language'
url='https://nim-lang.org'
arch=(x86_64)
license=(MIT)
depends=(
	bash
	gcc
	gcc-libs
	glibc
)
makedepends=(git cpio)
provides=(nimble)
conflicts=(nimble)
replaces=(nimble)
options=('!emptydirs')
backup=(
  etc/nim/nim.cfg
  etc/nim/nimdoc.cfg
  etc/nim/nimdoc.tex.cfg
  etc/nim/rename.rules.cfg
)

source=(
	"https://nim-lang.org/download/nim-${pkgver}.tar.xz"
	"https://github.com/nim-lang/langserver/releases/latest/download/nimlangserver-linux-amd64.tar.gz"
	"atlas-latest.tar.zst"
	"sat-latest.tar.zst"
)

# "git+https://github.com/nim-lang/atlas.git#branch=master"
# "git+https://github.com/nim-lang/sat.git#branch=master"

sha256sums=($(printf 'SKIP%.0s ' $(seq "${#source[@]}")))

prepare() {
	cp -r atlas-latest "${pkgname}-${pkgver}/dist/atlas"
	mkdir -p "${pkgname}-${pkgver}/dist/atlas/dist"
	cp -r sat-latest "${pkgname}-${pkgver}/dist/atlas/dist/sat"

	for nimcfg in "${pkgname}-${pkgver}"/{compiler,config}/nim.cfg; do
		echo "gcc.options.always %= \"\${gcc.options.always} ${CFLAGS:-} ${CPPFLAGS}\"" >> "${nimcfg}"
		echo "gcc.options.linker %= \"\${gcc.options.linker} ${LDFLAGS:-}\"" >> "${nimcfg}"
	done

	# force NimMain to always be N_LIB_PRIVATE for WinDlls
	sed -i '/^ *WinNimDllMain = NimMainInner & "N_LIB_EXPORT " & NimMainProc$/s/N_LIB_EXPORT/N_LIB_PRIVATE/' "${pkgname}-${pkgver}/compiler/cgen.nim"
}

build() {
	cd "${pkgname}-${pkgver}"
	export PATH="${srcdir}/${pkgname}-${pkgver}/bin:${PATH}"

	local -a NimFlags=("-d:release" "--parallelBuild:`nproc`")
	echo "Building nim"
	sh build.sh

	local arg
	for arg in ${CFLAGS};do NimFlags+=("--passC:$arg"); done
	for arg in ${LDFLAGS};do NimFlags+=("--passL:$arg"); done

	echo "Building koch"
	nim c -d:release koch
	./koch boot "${NimFlags[@]}" -d:nativeStacktrace -d:useGnuReadline

	echo "Building libs"
	(
		cd lib
		nim c "${NimFlags[@]}" --app:lib -d:createNimRtl nimrtl.nim
		strip --strip-all libnimrtl.so
	)

	echo "Building tools"
	./koch tools

	# Stripping
	find bin -maxdepth 1 -type f -executable -not -name nim-gdb -exec strip --strip-all {} +

	# Tweaks
	sed -i "1s:#!/usr/bin/env bash:#!/usr/bin/bash:" bin/nim-gdb
	sed -i 's/\r$//' doc/nimdoc.css
}

package() {
	cd "${pkgname}-${pkgver}"
	export PATH="${srcdir}/${pkgname}-${pkgver}/bin:${PATH}"

	install -d "${pkgdir}/usr/lib"
	cp -a lib "${pkgdir}/usr/lib/nim"
	cp -a compiler "${pkgdir}/usr/lib/nim"
	install -Dm 644 nim.nimble "${pkgdir}/usr/lib/nim/compiler"
	install -m 755 lib/libnimrtl.so "${pkgdir}/usr/lib/libnimrtl.so"

	install -Dm 644 config/* -t "${pkgdir}/etc/nim"
	install -Dm 755 bin/* -t "${pkgdir}/usr/bin"
	install -Dm 755 "${srcdir}/nimlangserver" -t "${pkgdir}/usr/bin"

	# Fix FS#50252, unusual placement of header files
	install -d "${pkgdir}/usr/include"
	cp -a "${pkgdir}/usr/lib/nim/"*.h "${pkgdir}/usr/include"

	# Fix FS#48118, related to the doc2 command
	ln -s /usr/share/nim/doc "${pkgdir}/usr/lib/nim/doc"
	install -d "${pkgdir}/usr/share/nim/doc"
	cp -a doc/* "${pkgdir}/usr/share/nim/doc"

	# Fix wrong path for system.nim https://github.com/nim-lang/Nim/issues/22369
	ln -s /usr/lib/nim "$pkgdir/usr/lib/nim/lib"

	install -Dm 644 copying.txt -t "${pkgdir}/usr/share/licenses/${pkgname}"

	# completions
	for comp in tools/*.bash-completion; do
		install -Dm 644 "${comp}" "${pkgdir}/usr/share/bash-completion/completions/$(basename "${comp%%.bash-completion}")"
	done

	for comp in tools/*.zsh-completion; do
		install -Dm 644 "${comp}" "${pkgdir}/usr/share/zsh/site-functions/_$(basename "${comp%%.zsh-completion}")"
	done

	# Unneeded files
	# rm -f "${pkgdir}/usr/bin/nim-gdb.bat"
	# rm -f "${pkgdir}/usr/lib/nim/pure/unidecode/gen.py"
}
openSUSE Build Service is sponsored by