blob: c2d22f3b2142cf34ce7f9194046d9cd065d9869a (
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
|
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CARGO_OPTIONAL=1
DISTUTILS_USE_PEP517="setuptools"
DISTUTILS_EXT=1
PYTHON_COMPAT=( python3_{13..14} )
PYTHON_REQ_USE="threads(+)"
inherit shell-completion cargo elisp-common distutils-r1 mercurial flag-o-matic multiprocessing
DESCRIPTION="Scalable distributed SCM"
HOMEPAGE="https://www.mercurial-scm.org/"
EHG_REPO_URI="https://www.mercurial-scm.org/repo/hg"
LICENSE="GPL-2+"
SLOT="0"
IUSE="+chg emacs gpg tk rust"
BDEPEND="
dev-python/docutils[${PYTHON_USEDEP}]
rust? ( ${RUST_DEPEND} )"
RDEPEND="
dev-python/zstandard[${PYTHON_USEDEP}]
app-misc/ca-certificates
gpg? ( app-alternatives/gpg )
tk? ( dev-lang/tk )"
DEPEND="emacs? ( >=app-editors/emacs-23.1:* )"
SITEFILE="70${PN}-gentoo.el"
RESTRICT="test" # test suite needs mercurial to be installed
pkg_setup() {
use rust && rust_pkg_setup
}
src_unpack() {
mercurial_src_unpack
if use rust; then
local S="${S}/rust/hg-cpython"
cargo_live_src_unpack
else
# Needed because distutils-r1 install under cargo_env if cargo is inherited
cargo_gen_config
fi
}
python_prepare_all() {
# fix up logic that won't work in Gentoo Prefix (also won't outside in
# certain cases), bug #362891
sed -i -e 's:xcodebuild:nocodebuild:' setup.py || die
sed -i -e 's/__APPLE__/__NO_APPLE__/g' mercurial/cext/osutil.c || die
# Build assumes the Rust target directory, which is wrong for us.
sed -i -r "s:\brust[/,' ]+target[/,' ]+release\b:rust/$(cargo_target_dir):g" setup.py || die
distutils-r1_python_prepare_all
}
python_configure_all() {
# not use setup.cfg because hgdist.rust is not updated
sed -i -r "s:rust = (False|True):rust = $(usex rust True False):" setup.py || die
cat >> setup.cfg <<-EOF || die
[build_ext]
zstd = False
EOF
}
src_compile() {
if use rust; then
pushd rust/hg-cpython || die
cargo_src_compile --no-default-features --jobs $(makeopts_jobs)
popd || die
fi
distutils-r1_src_compile
}
python_compile() {
filter-flags -ftracer -ftree-vectorize
distutils-r1_python_compile build_ext
}
python_compile_all() {
rm -r contrib/win32 || die
emake doc
if use chg; then
emake -C contrib/chg
fi
if use rust; then
pushd rust/rhg || die
cargo_src_compile --no-default-features --jobs $(makeopts_jobs)
popd || die
fi
if use emacs; then
cd contrib || die
elisp-compile mercurial.el || die "elisp-compile failed!"
fi
}
src_install() {
distutils-r1_src_install
}
python_install() {
distutils-r1_python_install build_ext
python_doscript contrib/hg-ssh
}
python_install_all() {
distutils-r1_python_install_all
newbashcomp contrib/bash_completion hg
newzshcomp contrib/zsh_completion _hg
dobin hgeditor
if use tk; then
dobin contrib/hgk
fi
if use emacs; then
elisp-install ${PN} contrib/mercurial.el* || die "elisp-install failed!"
elisp-make-site-file "${SITEFILE}"
fi
local RM_CONTRIB=( hgk hg-ssh bash_completion zsh_completion plan9 *.el )
if use chg; then
dobin contrib/chg/chg
doman contrib/chg/chg.1
RM_CONTRIB+=( chg )
fi
if use rust; then
dobin "rust/$(cargo_target_dir)/rhg"
fi
for f in ${RM_CONTRIB[@]}; do
rm -rf contrib/${f} || die
done
dodoc -r contrib
docompress -x /usr/share/doc/${PF}/contrib
doman doc/*.?
dodoc CONTRIBUTORS hgweb.cgi
insinto /etc/mercurial/hgrc.d
doins "${FILESDIR}/cacerts.rc"
}
pkg_postinst() {
use emacs && elisp-site-regen
elog "If you want to convert repositories from other tools using"
elog "the convert extension please install the correct tool:"
elog " dev-vcs/cvs"
elog " dev-vcs/darcs"
elog " dev-vcs/git"
elog " dev-vcs/monotone"
elog " dev-vcs/subversion"
}
pkg_postrm() {
use emacs && elisp-site-regen
}
|