summaryrefslogtreecommitdiff
path: root/dev-util/rebar/rebar-3.27.0.ebuild
blob: 1897f8a804f7c92fff8d64c04977565d3f026a56 (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
# Copyright 2022-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

MY_PN="${PN}3"
MECK_PV="0.8.13"  # see rebar.config

inherit edo shell-completion

DESCRIPTION="A sophisticated build-tool for Erlang projects that follows OTP principles"
HOMEPAGE="https://www.rebar3.org/
	https://github.com/erlang/rebar3/"

SRC_URI="
	https://github.com/erlang/${MY_PN}/archive/refs/tags/${PV}.tar.gz
		-> ${P}.gh.tar.gz
	test? (
		https://repo.hex.pm/tarballs/meck-${MECK_PV}.tar
	)
"
S="${WORKDIR}/${MY_PN}-${PV}"

LICENSE="Apache-2.0 MIT BSD"
SLOT="3"
KEYWORDS="amd64 ~arm ppc ppc64 ~sparc x86"
IUSE="test"
RESTRICT="!test? ( test )"

# Note: /usr/bin/rebar is a ZIP archive of BEAM files so := is needed
# see #913601
RDEPEND="
	>=dev-lang/erlang-26.0:=[ssl]
"
DEPEND="
	${RDEPEND}
"

PATCHES=( "${FILESDIR}/rebar-3.27.0-rebar_ct_SUITE.patch" )

src_unpack() {
	unpack "${P}.gh.tar.gz"

	if use test; then
		mkdir -p "${S}/vendor/meck" || die "failed to create dir"
		tar -O -xf "${DISTDIR}/meck-${MECK_PV}.tar" contents.tar.gz \
			| tar -xzf - -C "${S}/vendor/meck"
		assert
	fi
}

src_configure() {
	unset MIX_REBAR3
	export REBAR_OFFLINE="1"

	default
}

src_compile() {
	edo escript ./bootstrap --offline
}

src_test() {
	local -a rebar_opts=( --verbose --readable true --dir ./apps/rebar/test/ )
	local -a suites=(
		# mock_git_resource mock_git_subdir_resource
		# rebar_compile_SUITE
		# rebar_ct_SUITE
		# rebar_deps_SUITE
		# rebar_dialyzer_SUITE
		# rebar_hooks_SUITE
		# rebar_install_deps_SUITE
		# rebar_pkg_SUITE rebar_pkg_alias_SUITE rebar_pkg_repos_SUITE
		# rebar_plugins_SUITE
		# rebar_profiles_SUITE
		# rebar_upgrade_SUITE
		# rebar_xref_SUITE
		mock_pkg_resource
		rebar_alias_SUITE
		rebar_as_SUITE
		rebar_compiler_dag_SUITE rebar_compiler_epp_SUITE rebar_compiler_format_SUITE
		rebar_completion_SUITE
		rebar_cover_SUITE
		rebar_dir_SUITE
		rebar_disable_app_SUITE
		rebar_discover_SUITE
		rebar_dist_utils_SUITE
		rebar_edoc_SUITE
		rebar_escriptize_SUITE
		rebar_eunit_SUITE
		rebar_file_utils_SUITE
		rebar_localfs_resource rebar_localfs_resource_v2
		rebar_lock_SUITE
		rebar_manifest_SUITE
		rebar_namespace_SUITE
		rebar_new_SUITE
		rebar_opts_parser_SUITE
		rebar_parallel_SUITE
		rebar_paths_SUITE
		rebar_release_SUITE
		rebar_resource_SUITE
		rebar_semver_SUITE
		rebar_src_dirs_SUITE
		rebar_templater_SUITE
		rebar_test_utils
		rebar_unlock_SUITE
		rebar_uri_SUITE
		rebar_utils_SUITE
	)

	local suites_failed=()
	local suites_pass="YES"
	local suite=""
	for suite in "${suites[@]}" ; do
		if ./rebar3 ct "${rebar_opts[@]}" --suite "${suite}" ; then
			einfo "The rebar test suite \"${suite}\" passed tests successfully"
		else
			eerror "The rebar test suite \"${suite}\" failed tests"
			suites_failed+=( "${suite}" )
			suites_pass="NO"
		fi
	done

	if [[ "${suites_pass}" == "NO" ]] ; then
		eerror "Failed test suites: ${suites_failed[*]}"
		die "Some rebar test suites failed! Please inspect the errors above."
	fi
}

src_install() {
	dobin ${MY_PN}
	dodoc rebar.config.sample
	doman manpages/${MY_PN}.1

	dobashcomp apps/rebar/priv/shell-completion/bash/${MY_PN}
	dozshcomp apps/rebar/priv/shell-completion/zsh/_${MY_PN}
	insinto /usr/share/fish/completion
	newins apps/rebar/priv/shell-completion/fish/${MY_PN}.fish ${MY_PN}

	# MIX_REBAR3: Used by elixir
	newenvd - 98rebar3 <<-EOF
	MIX_REBAR3=${EPREFIX}/usr/bin/${MY_PN}
EOF
}