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"
}