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
|
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..13} )
inherit cargo cmake python-any-r1 readme.gentoo-r1 xdg
DESCRIPTION="Friendly Interactive SHell"
HOMEPAGE="https://fishshell.com/"
MY_PV="${PV/_beta/b}"
MY_P="${PN}-${MY_PV}"
if [[ ${PV} == 9999 ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/fish-shell/fish-shell.git"
else
SRC_URI="
https://github.com/fish-shell/fish-shell/releases/download/${MY_PV}/${MY_P}.tar.xz
${CARGO_CRATE_URIS}
"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
fi
S="${WORKDIR}/${MY_P}"
LICENSE="GPL-2 BSD BSD-2 CC0-1.0 GPL-2+ ISC LGPL-2+ MIT PSF-2 ZLIB"
# Dependent crate licenses
LICENSE+=" MIT Unicode-DFS-2016 WTFPL-2 ZLIB"
SLOT="0"
IUSE="+doc nls split-usr test"
RESTRICT="!test? ( test )"
BDEPEND="
nls? ( sys-devel/gettext )
test? (
${PYTHON_DEPS}
dev-tcltk/expect
$(python_gen_any_dep '
dev-python/pexpect[${PYTHON_USEDEP}]
')
)
"
# we don't need shpinx dep for release tarballs
[[ ${PV} == 9999 ]] && BDEPEND+=" doc? ( dev-python/sphinx )"
QA_FLAGS_IGNORED="**bin/fish*"
python_check_deps() {
use test || return 0
python_has_version "dev-python/pexpect[${PYTHON_USEDEP}]"
}
pkg_setup() {
use test && python-any-r1_pkg_setup
rust_pkg_setup
}
src_unpack() {
if [[ ${PV} == 9999 ]]; then
git-r3_src_unpack
cargo_live_src_unpack
else
cargo_src_unpack
fi
}
src_prepare() {
# workaround for https://github.com/fish-shell/fish-shell/issues/4883
if use split-usr; then
sed -i 's#${TEST_INSTALL_DIR}/${CMAKE_INSTALL_PREFIX}#${TEST_INSTALL_DIR}#' \
cmake/Tests.cmake || die
fi
# remove the build targets from the default build set so they are not wanted
# if cmake_src_install is called
sed -i \
-e '
/function(CREATE_TARGET target)/,/endfunction(CREATE_TARGET)/ {
s/${target} ALL/${target}/
}' CMakeLists.txt || die
cmake_src_prepare
}
src_configure() {
local mycmakeargs=(
# installing into /bin breaks tests on merged usr systems.
# sbin -> bin symlink confuses tests.
# so on split-usr we install to /bin.
# on merge-usr we set sbindir to bin.
$(usex split-usr "-DCMAKE_INSTALL_BINDIR=${EPREFIX}/bin" \
"-DCMAKE_INSTALL_SBINDIR=${EPREFIX}/usr/bin")
-DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc"
-DINSTALL_DOCS="$(usex doc)"
-DWITH_GETTEXT="$(usex nls)"
)
# release tarballs ship pre-built docs // -DHAVE_PREBUILT_DOCS=TRUE
if [[ ${PV} == 9999 ]]; then
mycmakeargs+=( -DBUILD_DOCS="$(usex doc)" )
else
mycmakeargs+=( -DBUILD_DOCS=OFF )
fi
cargo_src_configure --no-default-features --bin fish --bin fish_indent --bin fish_key_reader
cmake_src_configure
}
src_compile() {
local -x PREFIX="${EPREFIX}/usr"
local -x DOCDIR="${EPREFIX}/usr/share/doc/${PF}"
local -x CMAKE_WITH_GETTEXT
CMAKE_WITH_GETTEXT="$(usex nls 1 0)"
cargo_src_compile
# copy files built with cargo_src_compile into the cmake build directory,
# so when we run cmake_src_install they are not rebuild
for target in fish fish_indent fish_key_reader; do
cp "$(cargo_target_dir)/${target}" "${BUILD_DIR}" || die
done
cmake_src_compile
}
src_install() {
cmake_src_install
keepdir /usr/share/fish/vendor_{completions,conf,functions}.d
readme.gentoo_create_doc
}
src_test() {
# tests will create temporary files
local -x TMPDIR="${T}"
# some tests are fragile, sanitize environment
local -x COLUMNS=80
local -x LINES=24
# very fragile, depends on terminal, size, tmux, screen and timing
# no die is intentional, for repeated test runs
if [[ ${PV} != 9999 ]]; then
rm -v tests/pexpects/terminal.py || :
fi
# TODO: fix tests & submit upstream
# tests are confused by usr/sbin -> bin symlink, no die is intentional for repeated test runs
use split-usr || rm -v tests/checks/{redirect,type}.fish || :
# cmake_src_test will invoke ctest but required files are missing
cargo_env cmake_build test
}
pkg_postinst() {
readme.gentoo_print_elog
xdg_pkg_postinst
}
|