# Contributor: Jakub Jirutka <jakub@jirutka.cz> # Contributor: Milan P. Stanić <mps@arvanta.net> # Maintainer: Jakub Jirutka <jakub@jirutka.cz> pkgname=crystal pkgver=1.14.1 pkgrel=0 _bootver=1.13.3 _llvmver=19 pkgdesc="The Crystal Programming Language" url="https://crystal-lang.org/" arch="x86_64 aarch64" license="Apache-2.0" depends=" gc-dev gcc gmp-dev libatomic_ops libevent-dev libevent-static musl-dev pcre2-dev " checkdepends=" openssl-dev tzdata yaml-dev zlib-dev " makedepends=" libxml2-dev llvm$_llvmver-dev " [ "${BUILD_STATIC:-0}" -eq 1 ] && makedepends="$makedepends libxml2-static llvm$_llvmver-static zlib-static zstd-static " subpackages="$pkgname-doc $pkgname-bash-completion $pkgname-zsh-completion " source="$pkgname-$pkgver.tar.gz::https://github.com/crystal-lang/$pkgname/archive/$pkgver.tar.gz https://dev.alpinelinux.org/archive/crystal/crystal-$_bootver-x86_64-alpine-linux-musl.tar.gz https://dev.alpinelinux.org/archive/crystal/crystal-$_bootver-aarch64-alpine-linux-musl.tar.gz " _coredir="/usr/lib/$pkgname/core" _shardsdir="/usr/lib/$pkgname/shards" export CRYSTAL_CONFIG_VERSION="$pkgver" export CRYSTAL_CACHE_DIR="$srcdir/.cache" export LLVM_CONFIG="/usr/lib/llvm$_llvmver/bin/llvm-config" # Build static crystal binary and upload it to dev.a.o, so it can be used # for building crystal next time (needed for bootstrapping). # NOTE: After https://github.com/crystal-lang/crystal/issues/5689 is fixed, # we can also use prebuilt binary from upstream if needed. snapshot() { local binary="$builddir/.build/crystal" local tarname="$pkgname-$pkgver-$CTARGET" if [ ! -f "$binary" ] || ! file "$binary" | grep -qw 'statically linked'; then msg "Building statically linked crystal..." BUILD_STATIC=1 \ abuild deps clean unpack prepare build fi cd "$srcdir" strip "$builddir"/.build/crystal install -D -m 755 "$builddir"/.build/crystal "$tarname"/bin/crystal tar -czf "$tarname.tar.gz" "$tarname" msg "Uploading $tarname.tar.gz to dev.alpinelinux.org" scp "$tarname.tar.gz" dev.alpinelinux.org:/archive/$pkgname/ APKBUILD="../APKBUILD" abuild undeps } prepare() { default_prepare # FIXME: These specs fail with invalid memory access. rm spec/compiler/compiler_spec.cr cat > Makefile.local <<-EOF progress = 1 threads = ${JOBS:-2} verbose = 1 FLAGS = --verbose --target $CTARGET ${BUILD_STATIC:+"--link-flags=-no-pie"} LLVM_CONFIG = $LLVM_CONFIG EOF } build() { make crystal \ CRYSTAL_CONFIG_BUILD_COMMIT= \ CRYSTAL_CONFIG_PATH="lib:$_shardsdir:$_coredir" \ PATH="$srcdir/$pkgname-$_bootver-$CBUILD/bin:$PATH" \ release=1 \ static=${BUILD_STATIC:-} \ interpreter=1 } check() { make std_spec threads=1 SPEC_FLAGS='--no-color --verbose' find samples -name '*.cr' -print0 | xargs -0 -tn 1 ./bin/crystal build --no-codegen # Takes ~1 hour on x86_64, ~1.5 hour on aarch64. #make compiler_spec threads=1 SPEC_FLAGS='--no-color --verbose' } package() { install -D -m 755 .build/crystal "$pkgdir"/usr/bin/crystal install -D -m 644 man/crystal.1 "$pkgdir"/usr/share/man/man1/crystal.1 mkdir -p "$pkgdir$_coredir" "$pkgdir$_shardsdir" cp -r src/* "$pkgdir$_coredir"/ install -D -m 644 etc/completion.bash \ "$pkgdir"/usr/share/bash-completion/completions/$pkgname install -D -m 644 etc/completion.zsh \ "$pkgdir"/usr/share/zsh/site-functions/_$pkgname } sha512sums=" f16ba4e2b41ee9c1a4ef98bd026d843e7c8f831c592a919d79b3addea4647eea0eefefc8e964e1e187b8bfb0aed0829e2f5f5b120e3116a359616c0c043f9d3c crystal-1.14.1.tar.gz e070e6348e5791097e5400619e4bec094fac0d5f5a2a58ed1c83ebf921e89e35736ade702ed64faad8b653728cf42ccf5460b5b19281cd4e9d8e1e9afd6495bf crystal-1.13.3-x86_64-alpine-linux-musl.tar.gz cb21d113faf3a37bcc246443ba771223bf4d3411203600052576d928b80a29f2a501357a13624b4c00fe3116f0e47605b9bbbb820b24e0e68d33235f3684e391 crystal-1.13.3-aarch64-alpine-linux-musl.tar.gz "