summaryrefslogtreecommitdiff
blob: ac47c4ad59c780499b3a61183ee7a8da1edbb195 (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-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6
WX_GTK_VER="3.0"

inherit autotools elisp-common java-pkg-opt-2 systemd versionator wxwidgets

# NOTE: If you need symlinks for binaries please tell maintainers or
# open up a bug to let it be created.

UPSTREAM_V="$(get_version_component_range 1-2)"

DESCRIPTION="Erlang programming language, runtime environment and libraries (OTP)"
HOMEPAGE="https://www.erlang.org/"
SRC_URI="https://github.com/erlang/otp/archive/OTP-${PV}.tar.gz -> ${P}.tar.gz
	http://erlang.org/download/otp_doc_man_${UPSTREAM_V}.tar.gz -> ${PN}_doc_man_${UPSTREAM_V}.tar.gz
	doc? ( http://erlang.org/download/otp_doc_html_${UPSTREAM_V}.tar.gz -> ${PN}_doc_html_${UPSTREAM_V}.tar.gz )"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris"

IUSE="dirty-schedulers doc emacs hipe java kpoll libressl odbc smp sctp ssl systemd tk wxwidgets"
REQUIRED_USE="dirty-schedulers? ( smp )" #621610

RDEPEND="
	ssl? (
		!libressl? ( >=dev-libs/openssl-0.9.7d:0= )
		libressl? ( dev-libs/libressl:0= )
	)
	emacs? ( virtual/emacs )
	java? ( >=virtual/jdk-1.2:* )
	odbc? ( dev-db/unixODBC )
	systemd? ( sys-apps/systemd )
"
DEPEND="${RDEPEND}
	dev-lang/perl
	sctp? ( net-misc/lksctp-tools )
	sys-libs/zlib
	tk? ( dev-lang/tk )
	wxwidgets? ( x11-libs/wxGTK:${WX_GTK_VER}[X,opengl]
		virtual/glu )
"

S="${WORKDIR}/otp-OTP-${PV}"

PATCHES=(
		"${FILESDIR}/18.2.1-wx3.0.patch"
		"${FILESDIR}/${PN}-20.3.2-dont-ignore-LDFLAGS.patch"
		"${FILESDIR}/${PN}-add-epmd-pid-file-creation-for-openrc.patch"
	)

SITEFILE=50"${PN}"-gentoo.el

# Taken from the upstream build script, build_otp
erlang_create_lib_configure_in() {
	local bootstrap_apps="erts lib/asn1 lib/compiler lib/hipelib/ic lib/kernel
			 lib/parsetools lib/sasl lib/snmp lib/stdlib lib/syntax_tools"
	local sdirs=
	for lib_app in ${bootstrap_apps}; do
		case "${lib_app}" in
			lib/*)
				if [[ -f "${lib_app}/configure.in" ]]; then
					mv "${lib_app}/configure.in" "${lib_app}/configure.ac" || die
					app=`echo "${lib_app}" | sed "s|lib/\(.*\)|\1|"`
					sdirs="${sdirs}test ! -f ${app}/configure || AC_CONFIG_SUBDIRS(${app}/.)\n" || die
				fi;;
			*)
			;;
		esac
	done

	local sed_bootstrap="s%@BOOTSTRAP_CONFIGURE_APPS@%$sdirs%g"

	sdirs=
	for lib_app in lib/*; do
		local is_bapp=false
		for bapp in ${bootstrap_apps}; do
			test "${bapp} != ${lib_app}" || { "${is_bapp}"=true; break; }
		done
		if [[ "${is_bapp}" = false ]] && [[ -f "${lib_app}/configure.in" ]]; then
			mv "${lib_app}/configure.in" "${lib_app}/configure.ac" || die
			app=`echo "${lib_app}" | sed "s|lib/\(.*\)|\1|"` || die
			sdirs="${sdirs}    test ! -f ${app}/configure || AC_CONFIG_SUBDIRS(${app}/.)\n"
		fi
	done

	local sed_non_bootstrap="s%@NON_BOOTSTRAP_CONFIGURE_APPS@%$sdirs%g"

	rm -f lib/configure.in || die
	sed "$sed_bootstrap;$sed_non_bootstrap" > lib/configure.ac < lib/configure.in.src || die "Failed to create lib/configure.ac"

}

# Taken from the upstream build script, build_otp
erlang_distribute_config_helpers() {
	local aclocal_dirs=". ./lib/erl_interface ./lib/odbc ./lib/wx ./lib/megaco"
	local autoconf_aux_dirs="./lib/common_test/priv/auxdir ./lib/erl_interface/src/auxdir ./lib/common_test/test_server ./lib/wx/autoconf"

	local aclocal_master="./erts/aclocal.m4"
	local install_sh_master="./erts/autoconf/install-sh"
	local config_guess_master="./erts/autoconf/config.guess"
	local config_sub_master="./erts/autoconf/config.sub"

	for dir in ${aclocal_dirs}; do
		"${install_sh_master}" -m 644 -t "${dir}" "${aclocal_master}" || die
	done

	for dir in ${autoconf_aux_dirs}; do
		"${install_sh_master}" -d "${dir}" || die
		"${install_sh_master}" -t "${dir}" "${install_sh_master}" || die
		"${install_sh_master}" -t "${dir}" "${config_guess_master}" || die
		"${install_sh_master}" -t "${dir}" "${config_sub_master}" || die
	done
}

src_prepare() {
	default

	# Determines which directories to recurse into with autoconf
	erlang_create_lib_configure_in

	# Move local autoconf files into the neccessary directories
	erlang_distribute_config_helpers

	java-pkg-opt-2_src_prepare

	eautoreconf
}

src_configure() {
	use wxwidgets && need-wxwidgets unicode

	econf \
		--disable-builtin-zlib \
		$(use_enable dirty-schedulers) \
		$(use_enable hipe) \
		$(use_enable kpoll kernel-poll) \
		$(use_with java javac) \
		$(use_with odbc) \
		$(use_enable sctp) \
		$(use_enable smp smp-support) \
		$(use_with ssl) \
		$(use_with ssl ssl-rpath "no") \
		$(use_enable ssl dynamic-ssl-lib) \
		$(use_enable systemd) \
		--enable-threads
}

src_compile() {
	emake

	if use emacs ; then
		pushd lib/tools/emacs &>/dev/null || die
		elisp-compile *.el
		popd &>/dev/null || die
	fi
}

extract_version() {
	sed -n -e "/^$2 = \(.*\)$/s::\1:p" "${S}/$1/vsn.mk"
}

src_install() {
	local ERL_LIBDIR="/usr/$(get_libdir)/erlang"
	local ERL_INTERFACE_VER="$(extract_version lib/erl_interface EI_VSN)"
	local ERL_ERTS_VER="$(extract_version erts VSN)"
	local MY_MANPATH="/usr/share/${PN}/man"

	[[ -z "${ERL_ERTS_VER}" ]] && die "Couldn't determine erts version"
	[[ -z "${ERL_INTERFACE_VER}" ]] && die "Couldn't determine interface version"

	emake INSTALL_PREFIX="${D}" install

	if use doc ; then
		local DOCS=( "AUTHORS" "HOWTO"/* "README.md" "CONTRIBUTING.md" "${WORKDIR}"/doc/. "${WORKDIR}"/lib/. "${WORKDIR}"/erts-* )
		docompress -x /usr/share/doc/${PF}
	fi

	einstalldocs

	dosym "${ERL_LIBDIR}/bin/erl" /usr/bin/erl
	dosym "${ERL_LIBDIR}/bin/erlc" /usr/bin/erlc
	dosym "${ERL_LIBDIR}/bin/escript" /usr/bin/escript
	dosym \
		"${ERL_LIBDIR}/lib/erl_interface-${ERL_INTERFACE_VER}/bin/erl_call" \
		/usr/bin/erl_call

	if use smp; then
		dosym "${ERL_LIBDIR}/erts-${ERL_ERTS_VER}/bin/beam.smp" /usr/bin/beam.smp
	else
		dosym "${ERL_LIBDIR}/erts-${ERL_ERTS_VER}/bin/beam" /usr/bin/beam
	fi

	## Clean up the no longer needed files
	rm "${ED}/${ERL_LIBDIR}/Install" || die

	insinto "${MY_MANPATH}"

	doins -r "${WORKDIR}"/man/*

	# extend MANPATH, so the normal man command can find it
	# see bug 189639
	echo "MANPATH=\"${MY_MANPATH}\"" > "${T}/90erlang" || die
	doenvd "${T}/90erlang"

	if use emacs ; then
		pushd "${S}" &>/dev/null || die
		elisp-install erlang lib/tools/emacs/*.{el,elc}
		sed -e "s:/usr/share:${EPREFIX}/usr/share:g" \
			"${FILESDIR}/${SITEFILE}" > "${T}/${SITEFILE}" || die
		elisp-site-file-install "${T}/${SITEFILE}"
		popd &>/dev/null || die
	fi

	newinitd "${FILESDIR}"/epmd.init epmd
	systemd_dounit "${FILESDIR}"/epmd.service
}

pkg_postinst() {
	use emacs && elisp-site-regen
}

pkg_postrm() {
	use emacs && elisp-site-regen
}