aboutsummaryrefslogtreecommitdiffstats
path: root/community/crystal/APKBUILD
blob: 239683f02156e8b5408d2f957f16d73c2b4d37a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Milan P. Stanić <mps@arvanta.net>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=crystal
pkgver=1.3.1
pkgrel=0
_bootver=1.2.2
_llvmver=12
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
	pcre-dev
	"
checkdepends="
	openssl1.1-compat-dev
	tzdata
	yaml-dev
	zlib-dev
	"
makedepends="
	libxml2-dev
	llvm$_llvmver-dev
	llvm$_llvmver-static
	zlib-static
	"
subpackages="$pkgname-doc
	$pkgname-bash-completion:bashcomp:noarch
	$pkgname-zsh-completion:zshcomp:noarch
	"
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
	fix-crystal-sh.patch
	"
builddir="$srcdir/$pkgname-$pkgver"

_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 clean deps 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:-}
}

check() {
	make std_spec threads=1 SPEC_FLAGS='--no-color --verbose'

	find samples -name '*.cr' | xargs -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"/

	cd "$pkgdir$_coredir"
	rm llvm/ext/llvm_ext.o
}

bashcomp() {
	pkgdesc="Bash completions for $pkgname"
	depends=""
	install_if="$pkgname=$pkgver-r$pkgrel bash-completion"

	cd "$builddir"
	install -D -m 644 etc/completion.bash \
		"$subpkgdir"/usr/share/bash-completion/completions/$pkgname
}

zshcomp() {
	pkgdesc="ZSH completions for $pkgname"
	depends=""
	install_if="$pkgname=$pkgver-r$pkgrel zsh"

	cd "$builddir"
	install -D -m 644 etc/completion.zsh \
		"$subpkgdir"/usr/share/zsh/site-functions/_$pkgname
}

sha512sums="
c511357a287275af80f6643bd39aecf9a733a8442d3b4eeafa8a7b6c86539e8fe41c6aa1e6b7db1507dc4297809ed53fc721839944438ffd6e0fc099cb6a8a2a  crystal-1.3.1.tar.gz
216ef26e056b6859794ca23e14241015f9e9edb90e8e3d971ce0d049055a1621be8de4cc227596d6fcf7130208e614ae08e897c61babf7be76608b8d03262c76  crystal-1.2.2-x86_64-alpine-linux-musl.tar.gz
2352cca2b015e90ae953dc738c602500d6b1c0af55a1fda2d11970bb11a4e335e937259a743789ed4fbcc24fec831477dbd644b7f43e8fd58ac7f657b63b59bb  crystal-1.2.2-aarch64-alpine-linux-musl.tar.gz
2ba9e26eb1e6d20681e7f2ad78e0ebd75ae0dc614624c8de90c918046d0451f43173a23981dbebb47d1da2cf58663e8b1169d7f32799b054fc0f6a6cb112b7c5  fix-crystal-sh.patch
"