summaryrefslogtreecommitdiff
blob: 1b5ca9f0db123e1de22e20fab4a544c3b58a018b (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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

if [[ ${PV} == 9999 ]]; then
	GITHUB_USER=RexOps
	GITHUB_REPO=Rex
	EGIT_REPO_URI="https://github.com/${GITHUB_USER}/${GITHUB_REPO}.git"
	EGIT_BRANCH="master"
	EGIT_CHECKOUT_DIR="${WORKDIR}/${PN}-git"
	VCS_ECLASS="git-r3"
else
	# This is intentional to stop perl-module.eclass doing magic things when it
	# shouldn't. Like making ${S} contain "Rex" when the git clone has "rex"
	# Also prevents perl-module.eclass provisioning SRC_URI
	DIST_AUTHOR=FERKI
	DIST_NAME=Rex
	KEYWORDS="~amd64 ~x86"
fi
inherit bash-completion-r1 perl-module ${VCS_ECLASS}

DESCRIPTION="(R)?ex, the friendly automation framework"
HOMEPAGE="https://metacpan.org/dist/Rex https://www.rexify.org"

SLOT="0"
IUSE="minimal test"
RESTRICT="!test? ( test )"

DZIL_DEPENDS="
	dev-perl/Dist-Zilla
	dev-perl/Dist-Zilla-Plugin-CheckExtraTests
	dev-perl/Dist-Zilla-Plugin-ContributorsFile
	dev-perl/Dist-Zilla-Plugin-Git
	dev-perl/Dist-Zilla-Plugin-Git-Contributors
	dev-perl/Dist-Zilla-Plugin-MakeMaker-Awesome
	dev-perl/Dist-Zilla-Plugin-Meta-Contributors
	dev-perl/Dist-Zilla-Plugin-MetaProvides-Package
	dev-perl/Dist-Zilla-Plugin-NextVersion-Semantic
	dev-perl/Dist-Zilla-Plugin-OSPrereqs
	dev-perl/Dist-Zilla-Plugin-OurPkgVersion
	dev-perl/Dist-Zilla-Plugin-Run
	dev-perl/Software-License
"
RDEPEND="
	!minimal? (
		dev-perl/DBI
		dev-perl/Expect
		dev-perl/IPC-Shareable
		dev-perl/XML-LibXML
		net-misc/rsync
	)
	virtual/perl-Carp
	virtual/perl-Data-Dumper
	dev-perl/Data-Validate-IP
	dev-perl/Devel-Caller
	dev-perl/Digest-HMAC
	virtual/perl-Digest-MD5
	virtual/perl-Exporter
	virtual/perl-File-Spec
	dev-perl/HTTP-Message
	dev-perl/Hash-Merge
	virtual/perl-IO
	dev-perl/IO-String
	dev-perl/IO-Tty
	dev-perl/JSON-MaybeXS
	virtual/perl-MIME-Base64
	dev-perl/Net-OpenSSH
	dev-perl/Net-SFTP-Foreign
	>=virtual/perl-Scalar-List-Utils-1.450.0
	dev-perl/Parallel-ForkManager
	dev-perl/Sort-Naturally
	dev-perl/String-Escape
	virtual/perl-Storable
	dev-perl/TermReadKey
	virtual/perl-Test-Simple
	dev-perl/Text-Glob
	virtual/perl-Text-Tabs+Wrap
	virtual/perl-Time-HiRes
	dev-perl/URI
	dev-perl/XML-Simple
	dev-perl/libwww-perl
	dev-perl/YAML
	virtual/perl-version
	virtual/perl-Term-ANSIColor
"
# NB: would add test? !minimal? Test-mysqld, but I can't get that to work
BDEPEND="
	${RDEPEND}
	>=virtual/perl-CPAN-Meta-Requirements-2.120.620
	>=virtual/perl-ExtUtils-MakeMaker-7.110.100
	>=dev-perl/File-ShareDir-Install-0.60.0
	virtual/perl-Module-Metadata
	test? (
		!minimal? (
			|| ( dev-perl/File-LibMagic sys-apps/file )
			dev-vcs/git
		)
		virtual/perl-File-Temp
		dev-perl/Sub-Override
		dev-perl/Test-Deep
		dev-perl/Test-Exception
		dev-perl/Test-Output
		dev-perl/Test-UseAllModules
		dev-perl/Test-Warnings
		virtual/perl-autodie
		virtual/perl-Module-Load-Conditional
	)
"

[[ ${PV} == 9999 ]] && BDEPEND+=" ${DZIL_DEPENDS}"

src_unpack() {
	if [[ ${PV} == 9999 ]]; then
		"${VCS_ECLASS}"_src_unpack
		mkdir -p "${S}" || die "Can't make ${S}"
	else
		default
	fi
}

dzil_src_prep() {
	einfo "Patching dist.ini"

	# This block of sed invocations removes all plugins that aren't
	# useful for users to have on Gentoo, because all of them are
	# conditional and subjective style checks, which don't indicate
	# a real issue for users, and paying the price of their dependencies is undesired.

	# The {N;d} trick adds the [n]ext line after the match to the pattern-space
	# so that the final [d]elete deletes the next line too. Can be expanded for each
	# line, ie: {N;N;N;d} deletes 3 lines after the match as well as the match.
	sed -e '/^\[Test::Kwalitee\]/d' \
		-e '/^\[PodSyntaxTests\]/d' \
		-e '/^Perl::Critic::Freenode =/d' \
		-e '/^Perl::Critic::TooMuchCode =/d' \
		-e '/^Test::Kwalitee =/d' \
		-e '/^Test::PerlTidy =/d' \
		-e '/^Test::Pod =/d' \
		-e '/^\[Test::CPAN::Changes\]/{N;d}' \
		-e '/^\[OptionalFeature/,/^$/d' \
		-e '/^\[Test::MinimumVersion\]/{N;d}' \
		-i dist.ini || die "Can't patch dist.ini"

	# Removals/additions have to be tracked by git or dzil build fails
	# Spurious warning during src_prepare
	git rm -f xt/author/critic-progressive.t || die "Can't rm author/critic-progressive.t"
	# Spurious warning during src_prepare
	git rm -f xt/author/perltidy.t || die "Can't rm author/perltidy.t"
}
dzil_env_setup() {
	# NextRelease noise :(
	mkdir -p ~/.dzil/ || die "mkdir -p ~/.dzil/ failed"
	local user="$(whoami)"
	local host="$(hostname)"
	printf '[%%User]\nname = %s\nemail = %s' "${user}" "${user}@${host}" >> ~/.dzil/config.ini

}
dzil_to_distdir() {
	local dzil_root dest has_missing modname dzil_version
	dzil_root="$1"
	dest="$2"

	cd "${dzil_root}" || die "Can't enter git workdir '${dzil_root}'";

	S="${dzil_root}" dzil_src_prep
	dzil_env_setup

	dzil_version="$(dzil version)" || die "Error invoking 'dzil version'"
	einfo "Generating CPAN dist with ${dzil_version}"

	has_missing=""

	einfo "Checking dzil authordeps"
	while IFS= read -d $'\n' -r modname; do
		if [[ -z "${has_missing}" ]]; then
		has_missing=1
			eerror "'dzil authordeps' indicates missing build dependencies"
			eerror "These will prevent building, please report a bug"
			eerror "Missing:"
		fi
		eerror "  ${modname}"
	done < <( dzil authordeps --missing --versions )

	[[ -z "${has_missing}" ]] || die "Satisfy all missing authordeps first"

	einfo "Checking dzil build deps"
	while IFS= read -d $'\n' -r modname; do
		if [[ -z "${has_missing}" ]]; then
			has_missing=1
			ewarn "'dzil listdeps' indicates missing build dependencies"
			ewarn "These may prevent building, please report a bug if they do"
			ewarn "Missing:"
		fi
		ewarn "  ${modname}"
	done < <( dzil listdeps --missing --versions --author )

	einfo "Generating release"
	dzil build --notgz --in "${dest}" || die "Unable to build CPAN dist in '${dest}'"
}

src_prepare() {
	if [[ ${PV} == 9999 ]]; then
		# Uses git sources in WORKDIR/rex-git
		# to generate a CPAN-style tree in ${S}
		# before letting perl-module.eclass do the rest
		dzil_to_distdir "${EGIT_CHECKOUT_DIR}" "${S}"
	fi
	cd "${S}" || die "Can't enter build dir"

	# If you DIY installed Test::mysqld, but didn't patch
	# it to handle the fact on Gentoo, mysql_install_db is NOT in PATH
	# tests fail. So this test is patched out if mysql_install_db is not in PATH
	if perl_has_module "Test::mysqld" && ! type -P mysql_install_db >/dev/null; then
		perl_rm_files "t/db.t"
	fi
	perl-module_src_prepare
}

src_install() {
	newbashcomp "share/${PN}-tab-completion.bash" "${PN}"

	insinto /usr/share/zsh/site-functions
	newins "share/${PN}-tab-completion.zsh" "_${PN}"

	perl-module_src_install
}