dev-python/pytest: arm64 stable (bug #723996)
[gentoo.git] / dev-lang / spidermonkey / spidermonkey-68.7.0.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI="7"
5
6 PYTHON_COMPAT=( python3_{6..8} )
7
8 WANT_AUTOCONF="2.1"
9
10 inherit autotools check-reqs python-any-r1
11
12 MY_PN="mozjs"
13 MY_PV="${PV/_pre*}" # Handle Gentoo pre-releases
14
15 MY_MAJOR=$(ver_cut 1)
16
17 MOZ_ESR="1"
18
19 # Convert the ebuild version to the upstream mozilla version
20 MOZ_PV="${MY_PV/_alpha/a}" # Handle alpha for SRC_URI
21 MOZ_PV="${MOZ_PV/_beta/b}" # Handle beta for SRC_URI
22 MOZ_PV="${MOZ_PV%%_rc*}" # Handle rc for SRC_URI
23
24 if [[ ${MOZ_ESR} == 1 ]] ; then
25         # ESR releases have slightly different version numbers
26         MOZ_PV="${MOZ_PV}esr"
27 fi
28
29 # Patch version
30 FIREFOX_PATCHSET="firefox-68.0-patches-12"
31 SPIDERMONKEY_PATCHSET="${PN}-68.6.0-patches-03"
32
33 MOZ_HTTP_URI="https://archive.mozilla.org/pub/firefox/releases"
34 MOZ_SRC_URI="${MOZ_HTTP_URI}/${MOZ_PV}/source/firefox-${MOZ_PV}.source.tar.xz"
35
36 if [[ "${PV}" == *_rc* ]]; then
37         MOZ_HTTP_URI="https://archive.mozilla.org/pub/firefox/candidates/${MOZ_PV}-candidates/build${PV##*_rc}"
38         MOZ_SRC_URI="${MOZ_HTTP_URI}/source/firefox-${MOZ_PV}.source.tar.xz"
39 fi
40
41 PATCH_URIS=(
42         https://dev.gentoo.org/~{anarchy,whissi,polynomial-c,axs}/mozilla/patchsets/${FIREFOX_PATCHSET}.tar.xz
43         https://dev.gentoo.org/~{whissi,polynomial-c,axs}/mozilla/patchsets/${SPIDERMONKEY_PATCHSET}.tar.xz
44 )
45
46 SRC_URI="${MOZ_SRC_URI}
47         ${PATCH_URIS[@]}"
48
49 DESCRIPTION="SpiderMonkey is Mozilla's JavaScript engine written in C and C++"
50 HOMEPAGE="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey"
51
52 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86"
53
54 SLOT="68"
55 LICENSE="MPL-2.0"
56 IUSE="debug +jit test"
57
58 RESTRICT="!test? ( test )"
59
60 BDEPEND="dev-lang/python:2.7
61         test? ( ${PYTHON_DEPS} )"
62
63 DEPEND=">=dev-libs/icu-63.1:=
64         >=dev-libs/nspr-4.21
65         sys-libs/readline:0=
66         >=sys-libs/zlib-1.2.3"
67 RDEPEND="${DEPEND}"
68
69 S="${WORKDIR}/firefox-${MY_PV}/js/src"
70
71 pkg_pretend() {
72         if use test ; then
73                 CHECKREQS_DISK_BUILD="6G"
74         else
75                 CHECKREQS_DISK_BUILD="5G"
76         fi
77
78         check-reqs_pkg_pretend
79 }
80
81 pkg_setup() {
82         if use test ; then
83                 CHECKREQS_DISK_BUILD="6G"
84         else
85                 CHECKREQS_DISK_BUILD="5G"
86         fi
87
88         check-reqs_pkg_setup
89
90         use test && python-any-r1_pkg_setup
91 }
92
93 src_prepare() {
94         cd ../.. || die
95         rm "${WORKDIR}"/firefox/2013_avoid_noinline_on_GCC_with_skcms.patch
96         rm "${WORKDIR}"/firefox/2015_fix_cssparser.patch
97         eapply "${WORKDIR}"/firefox
98         eapply "${WORKDIR}"/spidermonkey-patches
99
100         default
101
102         MOZJS_BUILDDIR="${WORKDIR}/build"
103         mkdir "${MOZJS_BUILDDIR}" || die
104
105         cd "${S}" || die
106         eautoconf
107 }
108
109 src_configure() {
110         tc-export CC CXX LD AR RANLIB
111
112         # backup current active Python version
113         local PYTHON_OLD=${PYTHON}
114
115         # build system will require Python2.7
116         export PYTHON=python2.7
117
118         cd "${MOZJS_BUILDDIR}" || die
119
120         # ../python/mach/mach/mixin/process.py fails to detect SHELL
121         export SHELL="${EPREFIX}/bin/bash"
122
123         # forcing system-icu allows us to skip patching bundled ICU for PPC
124         # and other minor arches
125         ECONF_SOURCE="${S}" \
126         econf \
127                 --disable-jemalloc \
128                 --disable-optimize \
129                 --disable-strip \
130                 --enable-readline \
131                 --enable-shared-js \
132                 --with-intl-api \
133                 --with-system-icu \
134                 --with-system-nspr \
135                 --with-system-zlib \
136                 $(use_enable debug) \
137                 $(use_enable jit ion) \
138                 $(use_enable test tests) \
139                 XARGS="${EPREFIX}/usr/bin/xargs"
140
141         # restore PYTHON
142         export PYTHON=${PYTHON_OLD}
143 }
144
145 src_compile() {
146         cd "${MOZJS_BUILDDIR}" || die
147         default
148 }
149
150 src_test() {
151         if "${MOZJS_BUILDDIR}/js/src/js" -e 'print("Hello world!")'; then
152                 einfo "Smoke-test successful, continuing with full test suite"
153         else
154                 die "Smoke-test failed: did interpreter initialization fail?"
155         fi
156
157         local -a KNOWN_TESTFAILURES
158         KNOWN_TESTFAILURES+=( test262/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js )
159         KNOWN_TESTFAILURES+=( non262/Intl/DateTimeFormat/tz-environment-variable.js )
160         KNOWN_TESTFAILURES+=( non262/Intl/RelativeTimeFormat/format.js )
161         KNOWN_TESTFAILURES+=( non262/Date/time-zones-imported.js )
162         KNOWN_TESTFAILURES+=( non262/Date/toString-localized.js )
163         KNOWN_TESTFAILURES+=( non262/Date/time-zone-path.js )
164         KNOWN_TESTFAILURES+=( non262/Date/time-zones-historic.js )
165         KNOWN_TESTFAILURES+=( non262/Date/toString-localized-posix.js )
166         KNOWN_TESTFAILURES+=( non262/Date/reset-time-zone-cache-same-offset.js )
167
168         echo "" > "${T}"/known_failures.list || die
169
170         local KNOWN_TESTFAILURE
171         for KNOWN_TESTFAILURE in ${KNOWN_TESTFAILURES[@]} ; do
172                 echo "${KNOWN_TESTFAILURE}" >> "${T}"/known_failures.list
173         done
174
175         PYTHONPATH="${S}/tests/lib" \
176                 ${PYTHON} \
177                 "${S}"/tests/jstests.py -d -s -t 1800 --wpt=disabled --no-progress \
178                 --exclude-file="${T}"/known_failures.list \
179                 "${MOZJS_BUILDDIR}"/js/src/js \
180                 || die
181
182         if use jit ; then
183                 KNOWN_TESTFAILURES=()
184
185                 echo "" > "${T}"/known_failures.list || die
186
187                 for KNOWN_TESTFAILURE in ${KNOWN_TESTFAILURES[@]} ; do
188                         echo "${KNOWN_TESTFAILURE}" >> "${T}"/known_failures.list
189                 done
190
191                 PYTHONPATH="${S}/tests/lib" \
192                         ${PYTHON} \
193                         "${S}"/tests/jstests.py -d -s -t 1800 --wpt=disabled --no-progress \
194                         --exclude-file="${T}"/known_failures.list \
195                         "${MOZJS_BUILDDIR}"/js/src/js basic \
196                         || die
197         fi
198 }
199
200 src_install() {
201         cd "${MOZJS_BUILDDIR}" || die
202         default
203
204         # fix soname links
205         pushd "${ED}"/usr/$(get_libdir) &>/dev/null || die
206         mv lib${MY_PN}-${MY_MAJOR}.so lib${MY_PN}-${MY_MAJOR}.so.0.0.0 || die
207         ln -s lib${MY_PN}-${MY_MAJOR}.so.0.0.0 lib${MY_PN}-${MY_MAJOR}.so.0 || die
208         ln -s lib${MY_PN}-${MY_MAJOR}.so.0 lib${MY_PN}-${MY_MAJOR}.so || die
209         popd &>/dev/null || die
210
211         # remove unneeded files
212         rm \
213                 "${ED}"/usr/bin/js${MY_MAJOR}-config \
214                 "${ED}"/usr/$(get_libdir)/libjs_static.ajs \
215                 || die
216
217         # fix permissions
218         chmod -x \
219                 "${ED}"/usr/$(get_libdir)/pkgconfig/*.pc \
220                 "${ED}"/usr/include/mozjs-${MY_MAJOR}/js-config.h \
221                 || die
222 }