summaryrefslogtreecommitdiff
path: root/pcr/guix/PKGBUILD
blob: cf50ab92b0db53b60e3ebeff9b4d11d308108e4d (plain)
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# Maintainer (aur): lantw44 (at) gmail (dot) com
# Modified from guix-git 20130119 PKGBUILD
# Maintainer: Parabola Hackers <dev@lists.parabola.nu>

# parabola changes and rationale:
# - Kept sysvinit service files as Parabola also supports OpenRC
# - Disable tests as they fail:
#  |  make  check-TESTS check-local
#  [...]
#  |  FAIL: tests/build-utils.scm
#  [...]
#  |  FAIL: tests/challenge.scm
#  [...]
#  |  FAIL: tests/containers.scm

# In order to verify the PGP signature of the source archive, you may need to
# use this command to download the needed public key:
#   gpg --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5

pkgname=guix
pkgver=1.4.0
pkgrel=1
pkgdesc='A purely functional package manager for the GNU system'
arch=('x86_64' 'i686' 'armv7h')
url='https://guix.gnu.org'
license=('GPL3')
options=('!strip')
makedepends=(
  'guile-ssh>=0.13.0'
  'guile-zstd'
  'guile-semver'
  'guile-lib'
  'bash-completion'
  'fish'
  'help2man'
  'po4a')
depends=(
  'guile>=3.0.3'
  'guile-gcrypt>=0.1.0'
  'guile-gnutls'
  'guile-sqlite3>=0.1.0'
  'guile-zlib>=0.1.0'
  'guile-lzlib'
  'guile-avahi'
  'guile-git-lib>=0.5.0'
  'guile-json>=4.3.0'
  'guile-lzma'
  'sqlite>=3.6.19'
  'bzip2'
  'disarchive'
  'gnutls'
  'libgcrypt')
optdepends=(
  'bash-completion: to enable bash programmable completion'
  'guile-ssh: to offload builds to other machines'
  'guile-zstd: to use and publish zstd substitutes'
  'guile-semver: to use the crate importer'
  'guile-lib: to use the go importer')
source=(
  "https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}
  'guix-1.4.0-tests-guix-home.patch'
  'guix-1.4.0-guile-3.0.9.patch')
install="${pkgname}.install"
sha256sums=(
  '43c769cbf632ef05449ac1fa48c1ba152c33494c6abc7e47137bba7b2149f8a4'
  'b30c7e63048c3fe4e72d6146f107e55e27d1ea1eb5bc7fd8818f20a1a32c8e10'
  '930b94fae51eb84f8fd1ad5b6be373dc2a8c8887cf71d100d404159c079ddece'
  'c4b746b0e90981b5efde1fde093632899950d1724df9182bc9a45b4773be1f43')
validpgpkeys=('3CE464558A84FDC69DB40CFB090B11993D9AEBB5')

prepare() {
	cd "${srcdir}/${pkgname}-${pkgver}"
	local source_file
	for source_file in "${source[@]}"; do
		case "${source_file}" in
			*.patch)
				patch -p1 < "${srcdir}/${source_file}"
				;;
		esac
	done
}

build() {
	local bash_completion_dir="$(pkg-config --variable=completionsdir bash-completion)"
	local fish_completion_dir="$(pkg-config --variable=completionsdir fish)"
	cd "${srcdir}/${pkgname}-${pkgver}"
	./configure --prefix=/usr --sbindir=/usr/bin --sysconfdir=/etc \
		--libexecdir=/usr/lib --localstatedir=/var \
		--with-bash-completion-dir="${bash_completion_dir}" \
		--with-fish-completion-dir="${fish_completion_dir}" \
		--disable-rpath \
		ac_cv_guix_test_root="$(pwd)/t"
	make
}

check() {
	cd "${srcdir}/${pkgname}-${pkgver}"
	# # Check whether the current working directory is too long
	# local cwd_str="$(pwd)"
	# local cwd_len="${#cwd_str}"
	# # The test tests/gexp.scm fails when the path is longer than 29 bytes
	# # because of the length limit on the shebang line. Since we have increased
	# # the limit by 7 by renaming test-tmp to t with ac_cv_guix_test_root cache
	# # variable, the limit we use here is 36 bytes.
	# if [ "${cwd_len}" -gt 36 ]; then
	# 	error "${cwd_str} is too long."
	# 	error "The working directory cannot be longer than 36 bytes."
	# 	false
	# fi
	# # Make sure we have a valid shell accepting -c option. We cannot run tests
	# # in parallel because it can cause permission denied error when copying
	# # gnu/packages/bootstrap/i686-linux/bash.
	# SHELL=/bin/sh make check -j1
}

package() {
	cd "${srcdir}/${pkgname}-${pkgver}"
	make DESTDIR="${pkgdir}" install
	# Rename systemd service files provided by upstream because they are not
	# usable without previous guix installation
	local system_unit_dir="${pkgdir}/usr/lib/systemd/system"
	local guix_daemon_default="${system_unit_dir}/guix-daemon.service"
	local guix_daemon_upstream="${system_unit_dir}/guix-daemon-latest.service"
	local guix_gc_default="${system_unit_dir}/guix-gc.service"
	local guix_gc_upstream="${system_unit_dir}/guix-gc-latest.service"
	local guix_publish_default="${system_unit_dir}/guix-publish.service"
	local guix_publish_upstream="${system_unit_dir}/guix-publish-latest.service"
	mv "${guix_daemon_default}" "${guix_daemon_upstream}"
	mv "${guix_gc_default}" "${guix_gc_upstream}"
	mv "${guix_publish_default}" "${guix_publish_upstream}"
	# Generate default systemd service files from upstream ones by fixing paths
	local guix_profile_root="/var/guix/profiles/per-user/root/current-guix"
	sed -e "s|^ExecStart=${guix_profile_root}/bin|ExecStart=/usr/bin|" \
		-e "s|^Description=\(.*\)|Description=\1 (default)|" \
		-e "/^Environment=/d" "${guix_daemon_upstream}" \
		> "${guix_daemon_default}"
	sed -e "s|^ExecStart=${guix_profile_root}/bin|ExecStart=/usr/bin|" \
		-e "s|^Description=\(.*\)|Description=\1 (default)|" \
		-e "/^Environment=/d" "${guix_gc_upstream}" \
		> "${guix_gc_default}"
	sed -e "s|^ExecStart=${guix_profile_root}/bin|ExecStart=/usr/bin|" \
		-e "s|^Description=\(.*\)|Description=\1 (default)|" \
		-e "/^Environment=/d" "${guix_publish_upstream}" \
		> "${guix_publish_default}"
	# Make sure the above sed commands really work
	! cmp "${guix_daemon_default}" "${guix_daemon_upstream}"
	! cmp "${guix_gc_default}" "${guix_gc_upstream}"
	! cmp "${guix_publish_default}" "${guix_publish_upstream}"
	# Edit the description of upstream systemd service files
	sed -i "s|^Description=\(.*\)|Description=\1 (upstream)|" \
		"${guix_daemon_upstream}" \
		"${guix_gc_upstream}" \
		"${guix_publish_upstream}"
	# The default makepkg strip option cannot be used here because binaries
	# installed in /usr/share must not be stripped.
	# To keep user-defined 'strip' and 'debug' options useful, we still
	# depend on 'tidy_strip' function provided by makepkg to do the stripping
	# work. To make the function useful, we have to temporarily remove the
	# '!strip' option from 'options' array. However, assignments to 'options'
	# cause mksrcinfo to insert wrong lines to .SRCINFO, so they have to be
	# put in eval.
	eval 'options=()'
	cd "${pkgdir}/usr/bin"
	# tidy_strip may exit with a non-zero return value even if all operations
	# are successful. Therefore, we have to ignore its return value to prevent
	# makepkg from reporting it as an error.
	tidy_strip || true
	eval 'options=("!strip")'
}